diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000000000000000000000000000000000..37850d3ced33a34d2971ea73c485f532121a6aa8 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,19 @@ +[submodule "titan-test-system-framework"] + path = titan-test-system-framework + url = https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git + branch = devel +[submodule "ttcn/LibCommon"] + path = ttcn/LibCommon + url = https://forge.etsi.org/rep/LIBS/LibCommon.git +[submodule "ttcn/LibDiameter"] + path = ttcn/LibDiameter + url = https://forge.etsi.org/rep/LIBS/LibDiameter.git +[submodule "ttcn/LibIms"] + path = ttcn/LibIms + url = https://forge.etsi.org/rep/LIBS/LibIms.git +[submodule "ttcn/LibSip"] + path = ttcn/LibSip + url = https://forge.etsi.org/rep/LIBS/LibSip.git +[submodule "ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module"] + path = ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module + url = https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Abstract_Socket diff --git a/LICENSE b/LICENSE index 0ce64ae6f07cce145f2221b34333ee4f0f1c2b03..13b111abd420afebce806ea90be8d56045f81d4d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,23 +1,23 @@ -Copyright 2025 ETSI - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. +Copyright 2019-2025 ETSI + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..14dfd4d5079d8c5e09d3163c138f22115ff79fbb --- /dev/null +++ b/Makefile @@ -0,0 +1,142 @@ +-include config.mk + +ifeq (,$(ATS)) + $(error ATS shall be defined) +endif + +ifeq (,$(TOPDIR)) + TOPDIR := . +endif + +ifeq (,$(TTCN3_DIR)) + $(error TTCN3_DIR shall be defined in config.mk) +endif + +first: all + +define IncludeModule +undefine sources +undefine modules +undefine includes +include $(1)/module.mk +$$(foreach S, $$(sources), $$(eval all_sources += $$(if $$(filter /%, $$(S)), $$(TOPDIR)$$(S), $(1)/$$(S)))) +$$(foreach I, $$(includes), $$(eval all_includes += $$(if $$(filter /%, $$(I)), $$(TOPDIR)$$(I), $(1)/$$(I)))) +$$(foreach M, $$(modules), $$(eval $$(call IncludeModule, $$(if $$(filter /%, $$(M)), $$(TOPDIR)$$(M), $(1)/$$(M))))) +endef + +all_includes := $(TTCN3_DIR)/include $(TTCN3_DIR)/src /usr/include/jsoncpp /usr/include/libxml2 +defines += TITAN_RUNTIME_2 _NO_SOFTLINKS_ $(ATS) AS_USE_SSL _GNU_SOURCE +libs += $(TTCN3_DIR)/lib/libttcn3-rt2-parallel.a -lstdc++fs + +ifeq (Windows_NT,$(OS)) +# Silence linker warnings. +LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc +defines += WIN32 +libs += $(patsubst %, -L%/lib, $(OPENSSL_DIR)) +all_includes += $(addsuffix /include, $(OPENSSL_DIR)) +libs += $(WPCAP_DLL_PATH) +else +defines += LINUX +libs += -lpcap -lrt -lpthread +endif + +libs += -lssl -lcrypto -lxml2 -ljsoncpp -L$(OSIP_LIB) -losipparser2 -lsctp + +$(eval $(call IncludeModule, $(TOPDIR)/ttcn/$(ATS))) + +outdir := $(TOPDIR)/build/$(ATS) +bindir := $(TOPDIR)/bin + +sources := $(all_sources) +includes := $(outdir) $(outdir)/.. $(outdir)/asn1 $(all_includes) $(NPCAP_INCLUDE) $(OSIP_INCLUDE) + +ifeq (Windows_NT,$(OS)) + EXE=.exe +endif + +ttcn_sources := $(filter %.ttcn , $(sources)) +ttcn3_sources := $(filter %.ttcn3, $(sources)) +asn_sources := $(filter %.asn, $(sources)) +asn1_sources := $(filter %.asn1, $(sources)) +xsd_sources := $(filter %.xsd, $(sources)) + +tt_sources := $(ttcn_sources) $(ttcn3_sources) $(xsd_sources) $(asn_sources) $(asn1_sources) +cc_sources := $(filter %.cc, $(sources)) + +gen_ttcn_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.cc, $(ttcn_sources)))) +gen_ttcn_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.hh, $(ttcn_sources)))) +gen_ttcn3_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.cc, $(ttcn3_sources)))) +gen_ttcn3_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.hh, $(ttcn3_sources)))) +gen_asn_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn, %.cc, $(asn_sources)))) +gen_asn_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn, %.hh, $(asn_sources)))) +gen_asn1_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn1, %.cc, $(asn1_sources)))) +gen_asn1_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn1, %.hh, $(asn1_sources)))) +gen_xsd_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.xsd, %.cc, $(xsd_sources)))) +gen_xsd_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.xsd, %.hh, $(xsd_sources)))) + +gen_sources := $(gen_ttcn_sources) $(gen_ttcn3_sources) $(gen_xsd_sources) $(gen_asn_sources) $(gen_asn1_sources) +gen_headers := $(gen_ttcn_headers) $(gen_ttcn3_headers) $(gen_xsd_headers) $(gen_asn_headers) $(gen_asn1_headers) + +gen_objects := $(patsubst %.cc, %.o, $(gen_sources)) +cc_objects := $(patsubst %.cc, $(outdir)/%.o, $(cc_sources)) + +.PHONY: all FORCE echo + +all: $(bindir) $(outdir) $(bindir)/$(ATS)$(EXE) + +echo_sources: + @echo -e "$(addsuffix \n,$(all_sources))" + +echo: echo_sources + @echo -e "sources:\n $(addsuffix \n, $(sources))" + @echo -e "gen_sources:\n $(addsuffix \n, $(gen_sources))" + @echo -e "gen_objects:\n $(addsuffix \n, $(gen_objects))" + @echo -e "cc_objects:\n $(addsuffix \n, $(cc_objects))" + @echo -e "includes:\n $(addsuffix \n, $(includes))" + @echo -e "defines: $(addsuffix \n, $(defines))" + +clean: + rm -f $(outdir)/$(ATS)$(EXE) $(gen_objects) $(gen_sources) $(gen_headers) $(cc_objects) $(outdir)/.generate + +regen: force_regen $(outdir)/.generate +force_regen: + rm -f $(outdir)/.generate + +t3q: all + @echo -e "Code checking in progress..." + @java -Xmx3g -Xss512m -jar $(T3Q_PATH)/t3q.jar --config $(T3Q_PATH)/$(T3Q_CONFIG) $(tt_sources) > $(outdir)/t3q.out 2>&1 ; cd - + @echo -e "Code checking in done..." + @echo -e "Output file is located here: $(outdir)/t3q.out" + +t3d: all + @echo -e "TTCN-3 doc generation in progress..." + @java -Xmx3g -Xss512m -jar $(T3D_PATH)/t3d.jar --config $(T3D_PATH)/$(T3D_CONFIG) $(tt_sources) > $(outdir)/t3d.out 2>&1 ; cd - + @echo -e "TTCN-3 doc generation done..." + @echo -e "Output file is located here: $(outdir)/t3d.out" + +$(outdir) $(outdir)/asn1 $(bindir): + mkdir -p $@ + +$(bindir)/$(ATS)$(EXE): $(gen_objects) $(cc_objects) + g++ -g -O0 -std=c++17 -o $@ $(LDFLAGS) $(gen_objects) $(cc_objects) $(libs) + +$(gen_objects) :%.o :%.cc + g++ -g -O0 -std=c++17 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< + +$(cc_objects) : $(outdir)/%.o : %.cc + mkdir -p $(dir $@) + g++ -g -O0 -std=c++17 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< + +#$(gen_sources): +# $(TTCN3_DIR)/bin/asn1_compiler $(TTCN3_COMPILER_OPTIONS) -o $(outdir) $(tt_sources) + +$(gen_sources): $(outdir)/.generate + +$(outdir)/.generate: Makefile $(tt_sources) + $(TTCN3_DIR)/bin/compiler $(TTCN3_COMPILER_OPTIONS) -o $(outdir) $(tt_sources) + touch $@ + +$(foreach S, $(ttcn_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn, %.cc, $(S))): $(S))) +$(foreach S, $(ttcn3_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn3, %.cc, $(S))): $(S))) +$(foreach S, $(asn1_sources), $(eval $(outdir)/$(notdir $(patsubst %.asn1, %.cc, $(S))): $(S))) +$(foreach S, $(asn_sources), $(eval $(outdir)/$(notdir $(patsubst %.asn, %.cc, $(S))): $(S))) diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..802707fa69ddc9537960dfd6ce464c04775fd211 --- /dev/null +++ b/README.md @@ -0,0 +1,339 @@ +# Voice and Video over 5G/Emergency VoNR Interoperability Tests + +## Introduction +This repositories contains the test specifications and test adapter code +for interoprability tests to ETSI TS 103 796-2 (Core Network and Interoperability Testing (INT); Network Interoperability Test Description for emergency services over 5G; (3GPP™ Release 16); Part 2: Test Descriptions). + +## Contact information +Email at cti_support at etsi dot org + +## License +The content of this repository and the files contained are released under the BSD-3-Clause License. +See the attached LICENSE file or visit +https://forge.etsi.org/legal-matters + +## Standard links +- ETSI TS 103 796-1: "Core Network and Interoperability Testing (INT); Network Interoperability Test Description for emergency services over 5G; (3GPP™ Release 16); Part 1: Test Purposes (TP)". +- ETSI TS 124 229: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; 5G; IP multimedia call control protocol based on Session Initiation Protocol (SIP) and Session Description Protocol (SDP); Stage 3 (3GPP TS 24.229 Release 16)". +- ETSI TS 129 165: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; 5G; Inter-IMS Network to Network Interface (NNI) (3GPP TS 29.165 Release 16)". +- ETSI TS 129 228: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; IP Multimedia (IM) Subsystem Cx and Dx Interfaces; Signalling flows and message contents (3GPP TS 29.228 Release 16)". +- ETSI TS 129 229: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; Cx and Dx interfaces based on the Diameter protocol; Protocol details (3GPP TS 29.229 Release 16)". + + +## RFC links +- IETF RFC 3261: "SIP: Session Initiation Protocol" +- IETF RFC 7090: "Public Safety Answering Point (PSAP) Callback". +- IETF RFC 5031: "A Uniform Resource Name (URN) for Emergency and Other Well-Known Services". +- IETF RFC 8147: "Next-Generation Pan-European eCall" + + +NOTE All draft can be found in the 'IETF XML Registry', accessible [here](https://www.iana.org/assignments/xml-registry/xml-registry.xhtml) + +# Installation + +The ETSI Emergency VoNR Interoperability Tests project builds and tests regularly on the following platforms: + + - Linux (Ubuntu) + +Note: The [OpenSSL](https://www.openssl.org) version > 1.1.x is also required. + +## How to do it? + +They are two different methods: +- Using [Vagrant](https://www.vagrantup.com/) +- Using [Docker](https://www.docker.com/) + +How to choose one of these methods is depending of your host system. + +NOTE: In all case, if you want to setup an continuous integration process (e.g. Jenkins), Docker is the best choice. + + +### The host system is Windows +The both methods require a virtual machine. You can use either VirtualBox or WMware. +In this case, the easiest way is to use Vagrant. + + +### The host system is Linux +Vagrant requires a virtual machine. You can use either VirtualBox or WMware. +Docker does not need a virtual machine, so it is the more efficant way. + + +## Using TITAN compiler on a Docker image + +In this configuration, TITAN compiler is located on a Docker image and the sources and the outputs are located on the host. + +Pre-requisites on your host machine: +- Install Docker + +Procedure on the host machine: +- Open a Terminal +- Clone the ETSI Emergency VoNR Interoperability Test System +- From the ETSI Emergency VoNR Interoperability Test System root directory, build the Docker image executing the following commands: + +```sh +$ cd ./virtualization/docker +$ docker build --no-cache --tag alpine-emergency-5g-iop -f Dockerfile --force-rm . +$ docker images +``` + +To build the Emergency VoNRE Interoperability Test Suite, execute the following command: + +```sh +$ ./docker-run.sh build +``` + +Possble other options are 'clean' to remove all the build outputs or 'rebuild' to force a build of the Test Suite after a 'clean'. + +To retrieve the list of the available test cases, execute the following command: + +```sh +$ ./docker-run.sh list +``` + +Before to execute the Emergency VoNR Interoperability Test Suite, prepare, edit and update the configuration file: + +```sh +$ ln -sf ../../etc/AtsXxx/AtsXxx_yyy.cf_ ../../etc/AtsXxx/AtsXxx.cfg +$ vi ../../etc/AtsXxx/AtsXxx.cfg # To update it +``` + +To execute the Emergency VoNR Interoperability Test Suite, execute the following command: + +```sh +$ ./docker-run.sh run +``` + +Notes: +- The Emergency VoNR interoperability Test System is listening on port 443 +- Updating the file etc/AtsXxx/AtsXxx.cfg is about (e.g. etc/AtsBCF/AtsBCF.cfg): +. Selecting the test(s) to be executed +. Updating value of PICs and PIXITs +. Updating HTTP port setting + +## Using development Docker image + +In this configuration, the TITAN compiler, the sources and the outputs are located on the Docker image. + +Pre-requisites on your host machine: +- Install Docker + +Procedure for a Windows host machine: +- On your host machine, open a the Docker Quickstart Terminal +- On your host machine, clone the ETSI EEmergency Communications project. NOTE that only Docker folder and .jenkins.sh script file are required +- From the ETSI Emergency VoNR Interoperability Tests project root directory, execute the following commands: + +```sh +$ ./.jenkins.sh +... +``` + +NOTE The creation and the installations will take some time to achieve +- Start the container + +```sh +$ ./docker/run-container.sh +... +``` + +- Switch to the next clause (Usage) + + +## Using Vagrant + +Pre-requisites on your host machine: +- Install [Virtualbox](https://www.virtualbox.org/manual/ch01.html) +- Install [Vagrant](https://www.vagrantup.com/intro/getting-started/) +- Install Vagrant plugin vagrant-vbguest +- Credentials to access [ETSI forge](https://forge.etsi.org/gitlab/users/sign_in) + - Set the environment variable USERNAME to your ETSI EOL account user name + - Set the environment variable PASSWORD to your ETSI EOL account password + +Procedure: +- On your host machine, open a command line session (PuTTY, DOS window...) +- From the ETSI Emergency VoNR Interoperability Tests project, clone the Vagrant folder +- In the file Vagrantfile, modify the tag config.vm.provision replacing & strings by your ETSI credentials +- In the Vagrant folder, execute the following commands: + +```sh +$ vagrant up --provider virtualbox --provision +... +``` + +NOTE The creation and the installations will take some time to achieve +- Stop vagrant virtual machine + +```sh +$ vagrant halt +... +``` + +- Update the file 'Vagrantfile' to match with your networks configuration +- Re-start the vagrant virtual machine and log to to the machine + +```sh +$ vagrant up +... +$ vagrant ssh +``` + +- Switch to the next clause (Usage) + +NOTE The user password is vagrant. + + +## From scratch + +Pre-requisites: +- Install Virtualbox + +Procedure: +- Install a new Linux Virtual machine (Mint, Debian...) +- Update your system with the latest version of kernel and security packages +- Install the following packages (According to the Linux chosen, the package naming can be different) + autoconf + bison + build-essential + cmake + curl + dos2unix + doxygen + emacs + expect + flex + g++:latest + gcc:latest + graphviz + gdb + git-core + gnutls-bin + libglib2.0-dev + libpcap-dev + libgcrypt-dev + libncurses5-dev + libssl-dev + libtool-bin + libtool + libwireshark-dev + libxml2-dev + lsof + ntp + pkg-config + qt5-default + qtmultimedia5-dev + libqt5svg5-dev + subversion + sudo + sshpass + tcpdump + texlive-font-utils + tshark + valgrind + vim + vsftpd + xutils-dev + tree + tzdata + unzip + wget + xsltproc +- In your home directory, create the following folders: + - $HOME/frameworks, + - $HOME/dev + - $HOME/lib + +- In $HOME/frameworks, build the following package: + - Eclipse IDE for C/C++ Developers, according the procedure specified [here](https://www.eclipse.org/cdt/) + - TITAN, according the procedure specified [here](https://github.com/eclipse/titan.core) + - Import the TITAN plugin into your Eclipse IDE, according the procedure specified [here](https://github.com/eclipse/titan.core) + +- Install LibOSIP framework +```sh +$ cd ${HOME}/frameworks +$ git clone https://git.savannah.gnu.org/git/osip.git ./osip +$ cd osip +$ ./autogen.sh +$ ./configure --prefix=/home/etsi +$ make && make install +``` + +- Clone the ETSI Emergency VoNR Interoperability Tests project into $HOME/dev folder + +```sh +$ git clone --recurse-submodules --branch devel https://forge.etsi.org/rep/int/vx5g/emergency-5g-iop.git +``` + +- Apply patches +```sh +$ cd /home/etsi/dev/emergency-5g-iop/ +$ ./install.sh +``` + +- Update your default environment with the content of the script $HOME/dev/emergency-5g-iop/scripts/devenv.bash.ubuntu + +- Switch to the next clause (Usage) + + +# Generate certificates for TLS and Emergency VoNR Interoperability security support + +This clause describes how generate certificates desrived from Let's encrypt certificate. These certificate will be used for TS mutual authentication. +NOTE: +- Certficates shall be renewed every 3 months +- The port 80 shall be vailable for standalone validation + +Pre-requisites: +- You need to install python and [certbot](https://manpages.ubuntu.com/manpages/impish/en/man1/certbot.1.html). + +To generate certifcates, execute the following command: + +```sh +$ export REQUESTS_CA_BUNDLE=$(dirname `python -c "import certifi; print(certifi.where())"`) +$ mkdir -p $HOME/var/ssl +$ sudo certbot certonly --debug --emergency-5g-iop-tls-cert --config-dir $HOME/var/ssl --work-dir $HOME/var/ssl --logs-dir $HOME/var/ssl --standalone --agree-tos --email -d -w $HOME/var/ssl/ +``` + +NOTE: For testing certificate generation and renewal, use the certbot's --dry-run option. + + +# Usage + +This clause describes how to compile and execute an Abstract Test Suite. +The procedures below illustrate how to run the CAM test suite. The same procedures will apply for any other ETSI Emergency Communications test suite. + + +Pre-requisites: +- Your machine is installed following one of the installation method describes in the previous clause +- Your are logged as 'etsi' or 'vagrant' user + +Procedure in TITAN command line: +- Open several SSH session (PuTTY...) +- Change to the directory ~/dev/emergency-5g-iop/ +- Build the test suite you want to exectue (e.g. LIS test suite) + +```sh +$ cd ~/dev/emergency-5g-iop/ +$ export ATS=AtsImsIot +$ make +... +``` + +- Edit the file ../etc/AtsImsIot/AtsImsIot.cfg +- Update the following fields: + - system.httpPort.params + - system.SIPP.params + - system.DIAMETER.params + +- To run the test suitem, execute the following command: + +```sh +$ cd ~/dev/emergency-5g-iop/scripts +$ ./run-all.bash +... +``` + +- The log files are located in ../logs/AtsImsIot folder. You can edit them using any editor or using the Eclipse TITAN log plugins + + +# How to Report a Bug + +The ETSI Emergency VoNR Interoperability Tests project is under constant development, so it is possible that you will +encounter a bug while using it. Please report bugs at cti_support at etsi dot org. diff --git a/ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc b/ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc new file mode 100644 index 0000000000000000000000000000000000000000..293adee1af946fd4726e84053e8db410a45db041 --- /dev/null +++ b/ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc @@ -0,0 +1,927 @@ + +#include "LibDiameter_EncdecDeclarations.hh" + +#include "loggers.hh" + +#include "diameter_aar_codec.hh" +#include "diameter_uar_codec.hh" + +namespace LibDiameter__EncdecDeclarations { + + BITSTRING fx__enc__CER__MSG(const LibDiameter__TypesAndValues::CER__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CER__MSG(BITSTRING&, LibDiameter__TypesAndValues::CER__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__CEA__MSG(const LibDiameter__TypesAndValues::CEA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CEA__MSG(BITSTRING&, LibDiameter__TypesAndValues::CEA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__RAR__MSG(const LibDiameter__TypesAndValues::RAR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RAR__MSG(BITSTRING&, LibDiameter__TypesAndValues::RAR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__RAA__MSG(const LibDiameter__TypesAndValues::RAA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RAA__MSG(BITSTRING&, LibDiameter__TypesAndValues::RAA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__ACR__MSG(const LibDiameter__TypesAndValues::ACR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ACR__MSG(BITSTRING&, LibDiameter__TypesAndValues::ACR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__ACA__MSG(const LibDiameter__TypesAndValues::ACA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ACA__MSG(BITSTRING&, LibDiameter__TypesAndValues::ACA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__ASR__MSG(const LibDiameter__TypesAndValues::ASR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ASR__MSG(BITSTRING&, LibDiameter__TypesAndValues::ASR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__ASA__MSG(const LibDiameter__TypesAndValues::ASA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ASA__MSG(BITSTRING&, LibDiameter__TypesAndValues::ASA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__STR__MSG(const LibDiameter__TypesAndValues::STR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__STR__MSG(BITSTRING&, LibDiameter__TypesAndValues::STR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__STA__MSG(const LibDiameter__TypesAndValues::STA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__STA__MSG(BITSTRING&, LibDiameter__TypesAndValues::STA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__DWR__MSG(const LibDiameter__TypesAndValues::DWR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DWR__MSG(BITSTRING&, LibDiameter__TypesAndValues::DWR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__DWA__MSG(const LibDiameter__TypesAndValues::DWA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DWA__MSG(BITSTRING&, LibDiameter__TypesAndValues::DWA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__DPR__MSG(const LibDiameter__TypesAndValues::DPR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DPR__MSG(BITSTRING&, LibDiameter__TypesAndValues::DPR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__DPA__MSG(const LibDiameter__TypesAndValues::DPA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DPA__MSG(BITSTRING&, LibDiameter__TypesAndValues::DPA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__UAR__MSG(const LibDiameter__TypesAndValues::UAR__MSG& p) { + loggers::get_instance().log_msg(">>> fx__enc__UAR__MSG: ", p); + + float duration; + std::string tag("fx__enc__UAR__MSG"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + diameter_uar_codec codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__UAR__MSG: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__UAR__MSG(BITSTRING& pdu, LibDiameter__TypesAndValues::UAR__MSG& p) { + loggers::get_instance().log_msg(">>> fx__dec__UAR__MSG: ", p); + + float duration; + std::string tag("fx__dec__UAR__MSG"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os = bit2oct(pdu); + diameter_uar_codec codec; + int result = codec.decode(os, p); + + loggers::get_instance().set_stop_time(tag, duration); + + return INTEGER(result); + } + + BITSTRING fx__enc__UAA__MSG(const LibDiameter__TypesAndValues::UAA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__UAR__MSG: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__UAR__MSG"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__UAA__MSG(BITSTRING&, LibDiameter__TypesAndValues::UAA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__SAR__MSG(const LibDiameter__TypesAndValues::SAR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__SAR__MSG(BITSTRING&, LibDiameter__TypesAndValues::SAR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__SAA__MSG(const LibDiameter__TypesAndValues::SAA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__SAA__MSG(BITSTRING&, LibDiameter__TypesAndValues::SAA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__LIR__MSG(const LibDiameter__TypesAndValues::LIR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__LIR__MSG(BITSTRING&, LibDiameter__TypesAndValues::LIR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__LIA__MSG(const LibDiameter__TypesAndValues::LIA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__LIA__MSG(BITSTRING&, LibDiameter__TypesAndValues::LIA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__MAR__MSG(const LibDiameter__TypesAndValues::MAR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__MAR__MSG(BITSTRING&, LibDiameter__TypesAndValues::MAR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__MAA__MSG(const LibDiameter__TypesAndValues::MAA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__MAA__MSG(BITSTRING&, LibDiameter__TypesAndValues::MAA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__RTR__MSG(const LibDiameter__TypesAndValues::RTR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RTR__MSG(BITSTRING&, LibDiameter__TypesAndValues::RTR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__RTA__MSG(const LibDiameter__TypesAndValues::RTA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RTA__MSG(BITSTRING&, LibDiameter__TypesAndValues::RTA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__PPR__MSG(const LibDiameter__TypesAndValues::PPR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PPR__MSG(BITSTRING&, LibDiameter__TypesAndValues::PPR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__PPA__MSG(const LibDiameter__TypesAndValues::PPA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PPA__MSG(BITSTRING&, LibDiameter__TypesAndValues::PPA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__UDR__MSG(const LibDiameter__TypesAndValues::UDR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__UDR__MSG(BITSTRING&, LibDiameter__TypesAndValues::UDR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__UDA__MSG(const LibDiameter__TypesAndValues::UDA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__UDA__MSG(BITSTRING&, LibDiameter__TypesAndValues::UDA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__PUR__MSG(const LibDiameter__TypesAndValues::PUR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PUR__MSG(BITSTRING&, LibDiameter__TypesAndValues::PUR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__PUA__MSG(const LibDiameter__TypesAndValues::PUA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PUA__MSG(BITSTRING&, LibDiameter__TypesAndValues::PUA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__SNR__MSG(const LibDiameter__TypesAndValues::SNR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__SNR__MSG(BITSTRING&, LibDiameter__TypesAndValues::SNR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__SNA__MSG(const LibDiameter__TypesAndValues::SNA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__SNA__MSG(BITSTRING&, LibDiameter__TypesAndValues::SNA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__PNR__MSG(const LibDiameter__TypesAndValues::PNR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PNR__MSG(BITSTRING&, LibDiameter__TypesAndValues::PNR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__PNA__MSG(const LibDiameter__TypesAndValues::PNA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PNA__MSG(BITSTRING&, LibDiameter__TypesAndValues::PNA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__CCR__MSG(const LibDiameter__TypesAndValues::CCR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CCR__MSG(BITSTRING&, LibDiameter__TypesAndValues::CCR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__CCA__MSG(const LibDiameter__TypesAndValues::CCA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CCA__MSG(BITSTRING&, LibDiameter__TypesAndValues::CCA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__AAR__MSG(const LibDiameter__TypesAndValues::AAR__MSG& p) { + loggers::get_instance().log_msg(">>> fx__enc__AAR__MSG: ", p); + + float duration; + std::string tag("fx__enc__AAR__MSG"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + diameter_aar_codec codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__AAR__MSG: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__AAR__MSG(BITSTRING& pdu, LibDiameter__TypesAndValues::AAR__MSG& p) { + loggers::get_instance().log_msg(">>> fx__dec__AAR__MSG: ", pdu); + + float duration; + std::string tag("fx__dec__AAR__MSG"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os = bit2oct(pdu); + diameter_aar_codec codec; + int result = codec.decode(os, p); + + loggers::get_instance().set_stop_time(tag, duration); + + return INTEGER(result); + } + + BITSTRING fx__enc__AAA__MSG(const LibDiameter__TypesAndValues::AAA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__AAA__MSG(BITSTRING&, LibDiameter__TypesAndValues::AAA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__ULR__MSG(const LibDiameter__TypesAndValues::ULR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ULR__MSG(BITSTRING&, LibDiameter__TypesAndValues::ULR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__ULA__MSG(const LibDiameter__TypesAndValues::ULA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ULA__MSG(BITSTRING&, LibDiameter__TypesAndValues::ULA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__AIR__MSG(const LibDiameter__TypesAndValues::AIR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__AIR__MSG(BITSTRING&, LibDiameter__TypesAndValues::AIR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__AIA__MSG(const LibDiameter__TypesAndValues::AIA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__AIA__MSG(BITSTRING&, LibDiameter__TypesAndValues::AIA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__CLR__MSG(const LibDiameter__TypesAndValues::CLR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CLR__MSG(BITSTRING&, LibDiameter__TypesAndValues::CLR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__CLA__MSG(const LibDiameter__TypesAndValues::CLA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CLA__MSG(BITSTRING&, LibDiameter__TypesAndValues::CLA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__IDR__MSG(const LibDiameter__TypesAndValues::IDR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__IDR__MSG(BITSTRING&, LibDiameter__TypesAndValues::IDR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__IDA__MSG(const LibDiameter__TypesAndValues::IDA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__IDA__MSG(BITSTRING&, LibDiameter__TypesAndValues::IDA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__DSR__MSG(const LibDiameter__TypesAndValues::DSR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DSR__MSG(BITSTRING&, LibDiameter__TypesAndValues::DSR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__DSA__MSG(const LibDiameter__TypesAndValues::DSA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DSA__MSG(BITSTRING&, LibDiameter__TypesAndValues::DSA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__RSR__MSG(const LibDiameter__TypesAndValues::RSR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RSR__MSG(BITSTRING&, LibDiameter__TypesAndValues::RSR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__RSA__MSG(const LibDiameter__TypesAndValues::RSA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RSA__MSG(BITSTRING&, LibDiameter__TypesAndValues::RSA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__NOR__MSG(const LibDiameter__TypesAndValues::NOR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__NOR__MSG(BITSTRING&, LibDiameter__TypesAndValues::NOR__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__NOA__MSG(const LibDiameter__TypesAndValues::NOA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__NOA__MSG(BITSTRING&, LibDiameter__TypesAndValues::NOA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__PUER__MSG(const LibDiameter__TypesAndValues::PUER__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PUER__MSG(BITSTRING&, LibDiameter__TypesAndValues::PUER__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__PUEA__MSG(const LibDiameter__TypesAndValues::PUEA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PUEA__MSG(BITSTRING&, LibDiameter__TypesAndValues::PUEA__MSG& p) { return INTEGER(-1); } + + BITSTRING fx__enc__UNKNOWN__MSG(const LibDiameter__TypesAndValues::UNKNOWN__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__UNKNOWN__MSG(BITSTRING&, LibDiameter__TypesAndValues::UNKNOWN__MSG& p) { return INTEGER(-1); } + +} // End of namespace LibDiameter__EncdecDeclarations diff --git a/ccsrc/EncDec/LibDiameter/module.mk b/ccsrc/EncDec/LibDiameter/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..5f362ce7c0eb3b80b1afcaf71eec306df910404a --- /dev/null +++ b/ccsrc/EncDec/LibDiameter/module.mk @@ -0,0 +1,2 @@ +sources := \ + LibDiameter_EncDec.cc diff --git a/ccsrc/EncDec/LibEmtel/LibNg112_EncDec.cc b/ccsrc/EncDec/LibEmtel/LibNg112_EncDec.cc new file mode 100644 index 0000000000000000000000000000000000000000..b13692a172270bb06e2aa90ffb8ca117ea1aa71d --- /dev/null +++ b/ccsrc/EncDec/LibEmtel/LibNg112_EncDec.cc @@ -0,0 +1,130 @@ +#include "LibNg112_EncdecDeclarations.hh" + +#include "json_codec.hh" + +#include "loggers.hh" + +namespace LibNg112__EncdecDeclarations { // TODO File to be removed + +/* BITSTRING enc__DequeueRegistrationRequest(const LibNg112__DequeueRegistration::DequeueRegistrationRequest& p) { + loggers::get_instance().log_msg(">>> enc__DequeueRegistrationRequest: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__DequeueRegistrationRequest(BITSTRING& pdu, LibNg112__DequeueRegistration::DequeueRegistrationRequest& p) { + loggers::get_instance().log_msg(">>> dec__DequeueRegistrationRequest: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } + + BITSTRING enc__DequeueRegistrationResponse(const LibNg112__DequeueRegistration::DequeueRegistrationResponse& p) { + loggers::get_instance().log_msg(">>> enc__DequeueRegistrationResponse: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__DequeueRegistrationResponse(BITSTRING& pdu, LibNg112__DequeueRegistration::DequeueRegistrationResponse& p) { + loggers::get_instance().log_msg(">>> dec__DequeueRegistrationResponse: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } + + BITSTRING enc__ServiceStatePayload(const LibNg112__SubscriptionPayloads::ServiceStatePayload& p) { + loggers::get_instance().log_msg(">>> enc__ServiceStatePayload: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__ServiceStatePayload(BITSTRING& pdu, LibNg112__SubscriptionPayloads::ServiceStatePayload& p) { + loggers::get_instance().log_msg(">>> dec__ServiceStatePayload: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } + + BITSTRING enc__ElementStatePayload(const LibNg112__SubscriptionPayloads::ElementStatePayload& p) { + loggers::get_instance().log_msg(">>> enc__ElementStatePayload: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__ElementStatePayload(BITSTRING& pdu, LibNg112__SubscriptionPayloads::ElementStatePayload& p) { + loggers::get_instance().log_msg(">>> dec__ElementStatePayload: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } + + BITSTRING enc__SecurityPosturePayload(const LibNg112__SubscriptionPayloads::SecurityPosturePayload& p) { + loggers::get_instance().log_msg(">>> enc__SecurityPosturePayload: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__SecurityPosturePayload(BITSTRING& pdu, LibNg112__SubscriptionPayloads::SecurityPosturePayload& p) { + loggers::get_instance().log_msg(">>> dec__QueueStdec__SecurityPosturePayloadtePayload: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } + + BITSTRING enc__QueueStatePayload(const LibNg112__SubscriptionPayloads::QueueStatePayload& p) { + loggers::get_instance().log_msg(">>> enc__QueueStatePayload: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__QueueStatePayload(BITSTRING& pdu, LibNg112__SubscriptionPayloads::QueueStatePayload& p) { + loggers::get_instance().log_msg(">>> dec__QueueStatePayload: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } +*/ +} // End of namespace LibNg112__EncdecDeclarations + diff --git a/ccsrc/EncDec/LibEmtel/module.mk b/ccsrc/EncDec/LibEmtel/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..43f2b71da14e30dd5787c7c62c3ec752d93fe363 --- /dev/null +++ b/ccsrc/EncDec/LibEmtel/module.mk @@ -0,0 +1 @@ +sources := LibNg112_EncDec.cc diff --git a/ccsrc/EncDec/LibMsrp/LibMsrp_EncDec.cc b/ccsrc/EncDec/LibMsrp/LibMsrp_EncDec.cc new file mode 100644 index 0000000000000000000000000000000000000000..9786ab576e1a90b523246a89ee416c1320b5983f --- /dev/null +++ b/ccsrc/EncDec/LibMsrp/LibMsrp_EncDec.cc @@ -0,0 +1,24 @@ + +#include "LibMsrp_EncDecDeclarations.hh" + +#include "loggers.hh" + +namespace LibMsrp__EncDecDeclarations { + + BITSTRING fx__enc__MsrpURI(const LibMsrp__TypesAndValues::MsrpURI& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__MsrpURI: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__MsrpURI"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__MsrpURI(BITSTRING&, LibMsrp__TypesAndValues::MsrpURI& p) { return INTEGER(0); } + +} // End of module LibMsrp__EncDecDeclarations \ No newline at end of file diff --git a/ccsrc/EncDec/LibMsrp/module.mk b/ccsrc/EncDec/LibMsrp/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..52b99146a8c68753ac06d93428acde77e2373942 --- /dev/null +++ b/ccsrc/EncDec/LibMsrp/module.mk @@ -0,0 +1,2 @@ +sources := \ + LibMsrp_EncDec.cc diff --git a/ccsrc/EncDec/LibNgNas/NAS_EncDec.cc b/ccsrc/EncDec/LibNgNas/NAS_EncDec.cc new file mode 100644 index 0000000000000000000000000000000000000000..4966fb58ac5a57bdfaf543c9692115474f0905fc --- /dev/null +++ b/ccsrc/EncDec/LibNgNas/NAS_EncDec.cc @@ -0,0 +1,45 @@ +/*! + * \file NAS_EncDec.cc + * \brief CC file for NAS encode/decode functions. + * \author ETSI TTF041 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ + +#include "NAS_EncdecDeclarations.hh" +#include "NAS_CommonTypeDefs.hh" +//#include "SMS_TypeDefs.hh" + +namespace NAS__EncdecDeclarations { + + /**************************************************** + * @desc External function to encode a ... type + * @param value to encode + * @return encoded value + ****************************************************/ + + BITSTRING fx__enc__PacketFilterComponent(const NAS__CommonTypeDefs::PacketFilterComponent &p){return int2bit(0,0);} + BITSTRING fx__enc__QoSParametersList(const NAS__CommonTypeDefs::QoSParametersList &p){return int2bit(0,0);} + BITSTRING fx__enc__EPS__QualityOfService(const NAS__CommonTypeDefs::EPS__QualityOfService &p){return int2bit(0,0);} + BITSTRING fx__enc__TrafficFlowTemplate(const NAS__CommonTypeDefs::TrafficFlowTemplate &p){return int2bit(0,0);} + // BITSTRING fx__enc__CP__PDU__Type(const SMS__TypeDefs::CP__PDU__Type &p){return int2bit(0,0);} + + /**************************************************** + * @desc External function to decode a ... type + * @param value to encode + * @return encoded value + ****************************************************/ + INTEGER fx__dec__PacketFilterComponent (BITSTRING &b, NAS__CommonTypeDefs::PacketFilterComponent &p) {return -1;} + INTEGER fx__dec__QoSParametersList (BITSTRING &b, NAS__CommonTypeDefs::QoSParametersList &p) {return -1;} + INTEGER fx__dec__EPS__QualityOfService (BITSTRING &b, NAS__CommonTypeDefs::EPS__QualityOfService &p) {return -1;} + INTEGER fx__dec__TrafficFlowTemplate (BITSTRING &b, NAS__CommonTypeDefs::TrafficFlowTemplate &p) {return -1;} + // INTEGER fx__dec__CP__PDU__Type (BITSTRING &b, SMS__TypeDefs::CP__PDU__Type &p) {return -1;} + + +} // namespace NAS__EncdecDeclarations + + + diff --git a/ccsrc/EncDec/LibNgNas/NG_NAS_EncDec.cc b/ccsrc/EncDec/LibNgNas/NG_NAS_EncDec.cc new file mode 100644 index 0000000000000000000000000000000000000000..af95a84a981441b29cdd7991d2aac5e395319b5a --- /dev/null +++ b/ccsrc/EncDec/LibNgNas/NG_NAS_EncDec.cc @@ -0,0 +1,45 @@ +/*! + * \file NG_NAS_EncDec.cc + * \brief CC file for NG_NAS encode/decode functions. + * \author ETSI TTF041 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ + +#include "NG_NAS_EncdecDeclarations.hh" +#include "NG_NAS_MsgContainers.hh" +#include "NG_NAS_TypeDefs.hh" +#include "EAP_TypeDefs.hh" + +namespace NG__NAS__EncdecDeclarations { + + /**************************************************** + * @desc External function to encode a ... type + * @param value to encode + * @return encoded value + ****************************************************/ + + BITSTRING fx__enc__NG__NAS__UL__Message__Type(const NG__NAS__MsgContainers::NG__NAS__UL__Message__Type &p){return int2bit(0,0);} + BITSTRING fx__enc__NG__NAS__DL__Message__Type(const NG__NAS__MsgContainers::NG__NAS__DL__Message__Type &p){return int2bit(0,0);} + BITSTRING fx__enc__IntraN1TransparentContainer(const NG__NAS__TypeDefs::IntraN1TransparentContainer &p){return int2bit(0,0);} + BITSTRING fx__enc__CIoTSmallDataContainer(const NG__NAS__TypeDefs::CIoTSmallDataContainer &p){return int2bit(0,0);} + BITSTRING fx__enc__EAP__Message__Type(const EAP__TypeDefs::EAP__Message__Type &p){return int2bit(0,0);} + + /**************************************************** + * @desc External function to decode a ... type + * @param value to encode + * @return encoded value + ****************************************************/ + INTEGER fx__dec__NG__NAS__UL__Message__Type(BITSTRING &b, NG__NAS__MsgContainers::NG__NAS__UL__Message__Type &p) {return -1;} + INTEGER fx__dec__NG__NAS__DL__Message__Type(BITSTRING &b, NG__NAS__MsgContainers::NG__NAS__DL__Message__Type &p) {return -1;} + INTEGER fx__dec__IntraN1TransparentContainer(BITSTRING &b, NG__NAS__TypeDefs::IntraN1TransparentContainer &p) {return -1;} + INTEGER fx__dec__CIoTSmallDataContainer(BITSTRING &b, NG__NAS__TypeDefs::CIoTSmallDataContainer &p) {return -1;} + INTEGER fx__dec__EAP__Message__Type(BITSTRING &b, EAP__TypeDefs::EAP__Message__Type &p) {return -1;} + + +} // namespace NG__NAS__EncdecDeclarations + + diff --git a/ccsrc/EncDec/LibNgNas/module.mk b/ccsrc/EncDec/LibNgNas/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..39599f1b81e20c454b627c63b63275736c341025 --- /dev/null +++ b/ccsrc/EncDec/LibNgNas/module.mk @@ -0,0 +1,14 @@ +sources := \ + NAS_EncDec.cc \ + NG_NAS_EncDec.cc + + + #Dhcpv4_Encdec.cc \ + #Dns_Encdec.cc \ + #ICMPv6_Encdec.cc \ + #HTTP_ASP_Encdec.cc \ + #NR_Encdec.cc \ + #LPP_PDU_EncDec.cc \ + #NAS_EncDec.cc \ + #NG_NAS_EncDec.cc + #NR_PDCP_Encdec.cc diff --git a/ccsrc/EncDec/LibSip/LibSip_Encdec.cc b/ccsrc/EncDec/LibSip/LibSip_Encdec.cc new file mode 100644 index 0000000000000000000000000000000000000000..add0174651c9c2875983a50eaef8a6fc7a730cbe --- /dev/null +++ b/ccsrc/EncDec/LibSip/LibSip_Encdec.cc @@ -0,0 +1,372 @@ + +#include "LibSip_EncdecDeclarations.hh" +#include "LibSip_XMLTypes.hh" + +#include "sip_codec_register_request.hh" +#include "sip_codec_invite_request.hh" +#include "sip_codec_options_request.hh" +#include "sip_codec_bye_request.hh" +#include "sip_codec_ack_request.hh" +#include "sip_codec_subscribe_request.hh" +#include "sip_codec_notify_request.hh" +#include "sip_codec_info_request.hh" +#include "sip_codec_message_request.hh" +#include "sip_codec_message_body.hh" +#include "sip_codec_response.hh" + +#include "loggers.hh" + +namespace LibSip__EncdecDeclarations { + + BITSTRING fx__enc__Request(const LibSip__SIPTypesAndValues::Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__Request: ", p); + + float duration; + std::string tag("fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__Request -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__REGISTER__Request(const LibSip__SIPTypesAndValues::REGISTER__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__REGISTER__Request: ", p); + + float duration; + std::string tag("fx__enc__REGISTER__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_register_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__REGISTER__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__INVITE__Request(const LibSip__SIPTypesAndValues::INVITE__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__INVITE__Request: ", p); + + float duration; + std::string tag("fx__enc__INVITE__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_invite_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__INVITE__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__OPTIONS__Request(const LibSip__SIPTypesAndValues::OPTIONS__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__OPTIONS__Request: ", p); + + float duration; + std::string tag("fx__enc__OPTIONS__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_options_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__OPTIONS__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__BYE__Request(const LibSip__SIPTypesAndValues::BYE__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__BYE__Request: ", p); + + float duration; + std::string tag("fx__enc__BYE__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_bye_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__BYE__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__ACK__Request(const LibSip__SIPTypesAndValues::ACK__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__ACK__Request: ", p); + + float duration; + std::string tag("fx__enc__ACK__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_ack_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__ACK__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__CANCEL__Request(const LibSip__SIPTypesAndValues::CANCEL__Request& p) { return BITSTRING(); } + BITSTRING fx__enc__PRACK__Request(const LibSip__SIPTypesAndValues::PRACK__Request& p) { return BITSTRING(); } + BITSTRING fx__enc__NOTIFY__Request(const LibSip__SIPTypesAndValues::NOTIFY__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__NOTIFY__Request: ", p); + + float duration; + std::string tag("fx__enc__NOTIFY__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_notify_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__NOTIFY__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__SUBSCRIBE__Request(const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__SUBSCRIBE__Request: ", p); + + float duration; + std::string tag("fx__enc__SUBSCRIBE__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_subscribe_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__SUBSCRIBE__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__MESSAGE__Request(const LibSip__SIPTypesAndValues::MESSAGE__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__MESSAGE__Request: ", p); + + float duration; + std::string tag("fx__enc__MESSAGE__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_message_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__MESSAGE__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__PUBLISH__Request(const LibSip__SIPTypesAndValues::PUBLISH__Request& p) { return BITSTRING(); } + BITSTRING fx__enc__UPDATE__Request(const LibSip__SIPTypesAndValues::UPDATE__Request& p) { return BITSTRING(); } + BITSTRING fx__enc__REFER__Request(const LibSip__SIPTypesAndValues::REFER__Request& p) { return BITSTRING(); } + BITSTRING fx__enc__INFO__Request(const LibSip__SIPTypesAndValues::INFO__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__INFO__Request: ", p); + + float duration; + std::string tag("fx__enc__INFO__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_info_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__INFO__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + + BITSTRING fx__enc__Response(const LibSip__SIPTypesAndValues::Response& p) { + loggers::get_instance().log_msg(">>> fx__enc__Response: ", p); + + float duration; + std::string tag("fx__enc__Response"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_response codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__Response: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__Raw(const CHARSTRING& p) { return BITSTRING(); } + BITSTRING fx__enc__SMS(const LibSip__SimpleMsgSummaryTypes::SimpleMsgSummary& pdu) { return BITSTRING(); } + + BITSTRING fx__enc__MessageBody(const LibSip__MessageBodyTypes::MessageBody& pdu) { + loggers::get_instance().log_msg(">>> fx__enc__MessageBody: ", pdu); + + float duration; + std::string tag("fx__enc__MessageBody"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_message_body codec; + if (codec.encode(pdu, os) == -1) { + loggers::get_instance().warning("fx__enc__MessageBody: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__REGISTER__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::REGISTER__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__REGISTER__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_register_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__INVITE__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::INVITE__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__INVITE__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_invite_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__OPTIONS__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::OPTIONS__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__OPTIONS__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_options_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__BYE__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::BYE__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__BYE__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_bye_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__ACK__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::ACK__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__ACK__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_ack_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__CANCEL__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::CANCEL__Request& p) { return INTEGER(0); } + INTEGER fx__dec__PRACK__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::PRACK__Request& p) { return INTEGER(0); } + INTEGER fx__dec__NOTIFY__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::NOTIFY__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__NOTIFY__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_notify_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__SUBSCRIBE__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::SUBSCRIBE__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__SUBSCRIBE__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_subscribe_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__MESSAGE__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::MESSAGE__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__MESSAGE__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_message_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__PUBLISH__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::PUBLISH__Request& p) { return INTEGER(0); } + INTEGER fx__dec__UPDATE__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::UPDATE__Request& p) { return INTEGER(0); } + INTEGER fx__dec__REFER__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::REFER__Request& p) { return INTEGER(0); } + INTEGER fx__dec__INFO__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::INFO__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__INFO__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_info_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__Response(BITSTRING& pdu, LibSip__SIPTypesAndValues::Response& p) { + loggers::get_instance().log_msg(">>> fx__dec__Response: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_response codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__SMS(BITSTRING& pdu, LibSip__SimpleMsgSummaryTypes::SimpleMsgSummary& p) { return INTEGER(0); } + + INTEGER fx__dec__MessageBody(BITSTRING& pdu, LibSip__MessageBodyTypes::MessageBody& p) { + loggers::get_instance().log_msg(">>> fx__dec__MessageBody: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_message_body codec; + codec.decode(os, p); + + return 0; + } +} // End of namespace LibSip__EncdecDeclarations diff --git a/ccsrc/EncDec/LibSip/LibSip_SMSFunctions_Encdec.cc b/ccsrc/EncDec/LibSip/LibSip_SMSFunctions_Encdec.cc new file mode 100644 index 0000000000000000000000000000000000000000..65e0af8cc95a391b028b21fe17c22ce0087fe2d6 --- /dev/null +++ b/ccsrc/EncDec/LibSip/LibSip_SMSFunctions_Encdec.cc @@ -0,0 +1,9 @@ +#include "LibSip_SMSFunctions.hh" + +#include "loggers.hh" + +namespace LibSip__SMSFunctions { + + HEXSTRING fx__GetSC__TimeStamp(const INTEGER& p__TimeZone) { return int2hex(0, 14); }; + +} // End of namespace LibSip__SMSFunctions diff --git a/ccsrc/EncDec/LibSip/LibSip_Steps_Encdec.cc b/ccsrc/EncDec/LibSip/LibSip_Steps_Encdec.cc new file mode 100644 index 0000000000000000000000000000000000000000..35a297030547f04b8b6018af78340957a0351077 --- /dev/null +++ b/ccsrc/EncDec/LibSip/LibSip_Steps_Encdec.cc @@ -0,0 +1,109 @@ +#include +#include +#include + +#include + +#include "LibSip_Steps.hh" + +#include "loggers.hh" + +#include "converter.hh" + +namespace LibSip__Steps { + + int calculate_md5(const std::string& p_data, std::string& p_md5) + { + loggers::get_instance().log(">>> calculate_md5: %s", p_data.c_str()); + + MD5_CTX md5_context; + ::MD5_Init(&md5_context); + + loggers::get_instance().log("calculate_md5: length=%d", p_data.length()); + ::MD5_Update(&md5_context, p_data.c_str(), p_data.length()); // TODO Add support of block size > 512 + + const size_t digestlen = 16; + unsigned char digest[digestlen]; + ::MD5_Final(digest, &md5_context); + p_md5 = converter::get_instance().bytes_to_hexa(std::vector(digest, digest + digestlen)); + + loggers::get_instance().log("<<< calculate_md5: %s", p_md5.c_str()); + return 0; + } + + CHARSTRING fx__rndStr() { + static const char alphanum[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + static int length = 10; + char s[length] = { 0 }; + for (int i = 0; i < length - 1; ++i) { + s[i] = alphanum[rand() % (sizeof(alphanum) - 1)]; + } // End of 'for' statement + return CHARSTRING(s); + }; + + CHARSTRING fx__putInLowercase(const CHARSTRING& p__string) { + std::string s(static_cast(p__string)); + std::transform(s.begin(), s.end(), s.begin(), ::tolower); + return CHARSTRING(s.c_str()); + }; + + CHARSTRING fx__getIpAddr(const CHARSTRING& p__host__name) { return CHARSTRING(""); }; + + CHARSTRING fx__calculateDigestResponse(const CHARSTRING& p__nonce, const CHARSTRING& p__cnonce, const CHARSTRING& p__user, const CHARSTRING& p__realm, const CHARSTRING& p__passwd, const CHARSTRING& p__alg, const CHARSTRING& p__nonceCount, const CHARSTRING& p__method, const CHARSTRING& p__qop, const CHARSTRING& p__URI, const CHARSTRING& p__HEntity) { + loggers::get_instance().log(">>> fx__calculateDigestResponse"); + + // Buid a1=USERNAME:REALM:PASSWORD + std::string a1(static_cast(p__user)); + a1 += ":"; + a1 += static_cast(p__realm); + a1 += ":"; + a1 += static_cast(p__passwd); + if (a1.find("\"") != std::string::npos) { + a1 = std::regex_replace(a1, std::regex("\""), ""); + } + loggers::get_instance().log("fx__calculateDigestResponse: a1='%s'", a1.c_str()); + std::string md5_a1; + calculate_md5(a1, md5_a1); + + // Buid a2=METHOD:DIGESTURI + std::string a2(static_cast(p__method)); + a2 += ":"; + a2 += static_cast(p__URI); + if (a2.find("\"") != std::string::npos) { + a2 = std::regex_replace(a2, std::regex("\""), ""); // TODO Move to converter + } + loggers::get_instance().log("fx__calculateDigestResponse: a2='%s'", a2.c_str()); + std::string md5_a2; + calculate_md5(a2, md5_a2); + + // Buid resp=HA1:NONCE:HA2 + std::string resp(md5_a1); + resp += ":"; + resp += static_cast(p__nonce); + resp += ":"; + resp += md5_a2; + loggers::get_instance().log("fx__calculateDigestResponse: resp='%s'", resp.c_str()); + std::string md5_resp; + calculate_md5(resp, md5_resp); + + // Convert into Base64 + std::vector u = converter::get_instance().string_to_bytes(md5_resp); + md5_resp = converter::get_instance().bytes_to_string(converter::get_instance().buffer_to_base64(u)); + + loggers::get_instance().log("<<< fx__calculateDigestResponse: '%s'", md5_resp.c_str()); + return CHARSTRING(md5_resp.c_str()); + }; + + CHARSTRING fx__encodeBase64(const CHARSTRING& p__value) { + std::vector s(static_cast(p__value), static_cast(p__value) + p__value.lengthof()); + std::vector o = converter::get_instance().buffer_to_base64(s); + return CHARSTRING(o.size(), (const char*)o.data()); + }; + + CHARSTRING fx__decodeBase64(const CHARSTRING& p__value) { + std::vector s(static_cast(p__value), static_cast(p__value) + p__value.lengthof()); + std::vector o = converter::get_instance().base64_to_buffer(s); + return CHARSTRING(o.size(), (const char*)o.data()); + }; + +} // End of namespace LibSip__Steps diff --git a/ccsrc/EncDec/LibSip/LibSip_Templates_Encdec.cc b/ccsrc/EncDec/LibSip/LibSip_Templates_Encdec.cc new file mode 100644 index 0000000000000000000000000000000000000000..2c68f22cdfaecf05680cf3ebfc960365d5daa729 --- /dev/null +++ b/ccsrc/EncDec/LibSip/LibSip_Templates_Encdec.cc @@ -0,0 +1,9 @@ +#include "LibSip_Templates.hh" + +#include "loggers.hh" + +namespace LibSip__Templates { + + INTEGER fx__calculateXMLBodyLen(const LibSip__XMLTypes::XmlBody& p__mb) { return INTEGER(0); }; + +} // End of namespace LibSip__Templates diff --git a/ccsrc/EncDec/LibSip/module.mk b/ccsrc/EncDec/LibSip/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..86e171030bc6242e576f593006e3c11ab9792dc2 --- /dev/null +++ b/ccsrc/EncDec/LibSip/module.mk @@ -0,0 +1,5 @@ +sources := \ + LibSip_Encdec.cc \ + LibSip_SMSFunctions_Encdec.cc \ + LibSip_Steps_Encdec.cc \ + LibSip_Templates_Encdec.cc diff --git a/ccsrc/Externals/LIB_NG_NAS_CommonFunctions_ext.cc b/ccsrc/Externals/LIB_NG_NAS_CommonFunctions_ext.cc new file mode 100644 index 0000000000000000000000000000000000000000..af31102dbdf751762e8c4715e5e2e8c0cfb0f6d0 --- /dev/null +++ b/ccsrc/Externals/LIB_NG_NAS_CommonFunctions_ext.cc @@ -0,0 +1,322 @@ +//#include "LIB_NG_NAS_Functions.hh" + +#include "loggers.hh" + +#include "rijndael.hh" +#include "opc.hh" + +namespace Lib__NG__NAS__CommonFunctions { + + static uint8_t OP[16] = {0}; // FIXME FSCOM To be refined. This is a Q&D implementation + + void fx__set__op(const OCTETSTRING& p_op) { + loggers::get_instance().log_msg(">>> fx__set__op: p_op: ", p_op); + std::memcpy(OP, static_cast(p_op), 16); + loggers::get_instance().log_to_hexa("<<< fx__set__op: OP: ", static_cast(OP), 16); + } + + void fx__get__op(OCTETSTRING& p_op) { + loggers::get_instance().log_msg(">>> fx__get__op: p_op: ", p_op); + p_op = OCTETSTRING(16, static_cast(OP)); + loggers::get_instance().log_msg("<<< fx__get__op: OP: ", p_op); + } + + INTEGER fx__compute__opc(const OCTETSTRING& p_authK, OCTETSTRING& p_opc) { + loggers::get_instance().log_msg(">>> fx_compute_opc: OP: ", OCTETSTRING(16, static_cast(OP))); + + rijndael r; + r.rijndael_key_schedule(p_authK); + opc op(r, OP); + uint8_t op_c[16] = { 0x00 }; + op.compute_opc(op_c); + p_opc = OCTETSTRING(16, static_cast(op_c)); + + loggers::get_instance().log_msg("<<< fx_compute_opc: OPC: ", p_opc); + return 0; + } + + INTEGER fx__rijndael__encrypt(const OCTETSTRING& p_key, const OCTETSTRING& p_plain_text, OCTETSTRING& p_cypherer_text) { + loggers::get_instance().log_msg(">>> fx__rijndael__encrypt: p_key: ", p_key); + loggers::get_instance().log_msg(">>> fx__rijndael__encrypt: p_plain_text: ", p_plain_text); + + rijndael r; + r.rijndael_key_schedule(p_key); + uint8_t cypherer_text[16] = { 0x00 }; + r.rijndael_encrypt(static_cast(p_plain_text), cypherer_text); + p_cypherer_text = OCTETSTRING(16, static_cast(cypherer_text)); + + loggers::get_instance().log_msg("<<< fx__rijndael__encrypt: p_cypherer_text: ", p_cypherer_text); + return 0; + } + + INTEGER fx__f1(const BITSTRING& p_authK, const BITSTRING& p_rand, const BITSTRING& p_sqn, const BITSTRING& p_amf, BITSTRING& p_mac_a) { + loggers::get_instance().log_msg(">>> fx__f1: p_authK: ", bit2oct(p_authK)); + loggers::get_instance().log_msg(">>> fx__f1: p_rand: ", bit2oct(p_rand)); + + rijndael r; + OCTETSTRING authK = bit2oct(p_authK); + r.rijndael_key_schedule(authK); + opc op(r, OP); + uint8_t op_c[16] = { 0x00 }; + op.compute_opc(op_c); + loggers::get_instance().log_to_hexa("fx__f1: op_c: ", op_c, 16); + + OCTETSTRING rand = bit2oct(p_rand); + uint8_t rijndael_input[16] = { 0x00 }; + for (int i = 0; i < 16; i++) { + rijndael_input[i] = rand[i].get_octet() ^ op_c[i]; + } // End of 'for' statement + uint8_t temp[16] = { 0x00 }; + r.rijndael_encrypt(rijndael_input, temp); + loggers::get_instance().log_to_hexa("fx__f1: Value after 1st encryption: ", temp, 16); + + OCTETSTRING sqn = bit2oct(p_sqn); + uint8_t in1[16] = { 0x00 }; + for (int i = 0; i < 6; i++) { + in1[i] = sqn[i].get_octet(); + in1[i + 8] = sqn[i].get_octet(); + } // End of 'for' statement + OCTETSTRING amf = bit2oct(p_amf); + for (int i = 0; i < 2; i++) { + in1[i + 6] = amf[i].get_octet(); + in1[i + 14] = amf[i].get_octet(); + } // End of 'for' statement + + // XOR op_c and in1, rotate by r1=64, and XOR on the constant c1 (which is all zeroes) + for (int i = 0; i < 16; i++) { + rijndael_input[(i + 8) % 16] = in1[i] ^ op_c[i]; + } + + // XOR on the value temp computed before + for (int i = 0; i < 16; i++) { + rijndael_input[i] ^= temp[i]; + } // End of 'for' statement + + uint8_t out1[16] = { 0x00 }; + r.rijndael_encrypt(rijndael_input, out1); + loggers::get_instance().log_to_hexa("fx__f1: Value after 2sd encryption: ", out1, 16); + + for (int i = 0; i < 16; i++) { + out1[i] ^= op_c[i]; + } // End of 'for' statement + + uint8_t mac_a[8] = { 0x00 }; + for (int i = 0; i < 8; i++) { + mac_a[i] = out1[i]; + } // End of 'for' statement + OCTETSTRING os(8, static_cast(&mac_a[0])); + p_mac_a = oct2bit(os); + loggers::get_instance().log_msg("fx__f1star: p_mac_a: ", os); + + return 0; + } + + INTEGER fx__f1star(const BITSTRING& p_authK, const BITSTRING& p_rand, const BITSTRING& p_sqn, const BITSTRING& p_amf, BITSTRING& p_mac_s) { + loggers::get_instance().log_msg(">>> fx__f1star: p_authK: ", bit2oct(p_authK)); + loggers::get_instance().log_msg(">>> fx__f1star: p_rand: ", bit2oct(p_rand)); + + rijndael r; + OCTETSTRING authK = bit2oct(p_authK); + r.rijndael_key_schedule(authK); + opc op(r, OP); + uint8_t op_c[16] = { 0x00 }; + op.compute_opc(op_c); + loggers::get_instance().log_to_hexa("fx__f1star: op_c: ", op_c, 16); + + OCTETSTRING rand = bit2oct(p_rand); + uint8_t rijndael_input[16] = { 0x00 }; + for (int i = 0; i < 16; i++) { + rijndael_input[i] = rand[i].get_octet() ^ op_c[i]; + } // End of 'for' statement + uint8_t temp[16] = { 0x00 }; + r.rijndael_encrypt(rijndael_input, temp); + loggers::get_instance().log_to_hexa("fx__f1star: Value after 1st encryption: ", temp, 16); + + OCTETSTRING sqn = bit2oct(p_sqn); + uint8_t in1[16] = { 0x00 }; + for (int i = 0; i < 6; i++) { + in1[i] = sqn[i].get_octet(); + in1[i + 8] = sqn[i].get_octet(); + } // End of 'for' statement + OCTETSTRING amf = bit2oct(p_amf); + for (int i = 0; i < 2; i++) { + in1[i + 6] = amf[i].get_octet(); + in1[i + 14] = amf[i].get_octet(); + } // End of 'for' statement + + // XOR op_c and in1, rotate by r1=64, and XOR on the constant c1 (which is all zeroes) + for (int i = 0; i < 16; i++) { + rijndael_input[(i + 8) % 16] = in1[i] ^ op_c[i]; + } + + // XOR on the value temp computed before + for (int i = 0; i < 16; i++) { + rijndael_input[i] ^= temp[i]; + } // End of 'for' statement + + uint8_t out1[16] = { 0x00 }; + r.rijndael_encrypt(rijndael_input, out1); + loggers::get_instance().log_to_hexa("fx__f1: Value after 2sd encryption: ", out1, 16); + + for (int i = 0; i < 16; i++) { + out1[i] ^= op_c[i]; + } // End of 'for' statement + + uint8_t mac_s[8] = { 0x00 }; + for (int i = 0; i < 8; i++) { + mac_s[i] = out1[i + 8]; + } // End of 'for' statement + OCTETSTRING os(8, static_cast(&mac_s[0])); + p_mac_s = oct2bit(os); + loggers::get_instance().log_msg("fx__f1star: p_mac_s: ", os); + + return 0; + } + + INTEGER fx__f2345(const BITSTRING& p_authK, const BITSTRING& p_rand, BITSTRING& p_res, BITSTRING& p_ck, BITSTRING& p_ik, BITSTRING& p_ak) { + loggers::get_instance().log_msg(">>> fx__f2345: p_authK: ", bit2oct(p_authK)); + loggers::get_instance().log_msg(">>> fx__f2345: p_rand: ", bit2oct(p_rand)); + + rijndael r; + OCTETSTRING authK = bit2oct(p_authK); + r.rijndael_key_schedule(authK); + opc op(r, OP); + uint8_t op_c[16] = { 0x00 }; + op.compute_opc(op_c); + loggers::get_instance().log_to_hexa("fx__f2345: a entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.x Test Set table: ", op_c, 16); + + OCTETSTRING rand = bit2oct(p_rand); + uint8_t rijndael_input[16] = { 0x00 }; + for (int i = 0; i < 16; i++) { + rijndael_input[i] = rand[i].get_octet() ^ op_c[i]; + } // End of 'for' statement + uint8_t temp[16] = { 0x00 }; + r.rijndael_encrypt(rijndael_input, temp); + loggers::get_instance().log_to_hexa("fx__f2345: Value after 1st encryption: ", temp, 16); + + // To obtain output block OUT2: XOR OPc and TEMP, rotate by r2=0, and XOR on the constant c2 (which is all zeroes except that the last bit is 1) + for (int i = 0; i < 16; i++) { + rijndael_input[i] = temp[i] ^ op_c[i]; + } // End of 'for' statement + rijndael_input[15] ^= 1; + loggers::get_instance().log_to_hexa("fx__f2345: b entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.x Test Set table: ", rijndael_input, 16); + + uint8_t out[16] = { 0x00 }; + r.rijndael_encrypt(rijndael_input, out); + loggers::get_instance().log_to_hexa("fx__f2345: f2/d entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.x Test Set table: ", out, 16); + + for (int i = 0; i < 16; i++) { + out[i] ^= op_c[i]; + } // End of 'for' statement + + uint8_t res[8] = { 0x00 }; + for (int i = 0; i < 8; i++) { + res[i] = out[i + 8]; + } // End of 'for' statement + loggers::get_instance().log_to_hexa("fx__f2345: f2/e entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.x Test Set table: ", res, 8); + + uint8_t ak[6] = { 0x00 }; + for (int i = 0; i < 6; i++) { + ak[i] = out[i]; + } // End of 'for' statement + loggers::get_instance().log_to_hexa("fx__f2345: f5/e entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.x Test Set table: ", ak, 6); + + // To obtain output block OUT3: XOR OPc and TEMP, rotate by r3=32, and XOR on the constant c3 (which is all zeroes except that the next to last bit is 1) + for (int i = 0; i < 16; i++) { + rijndael_input[(i + 12) % 16] = temp[i] ^ op_c[i]; + } // End of 'for' statement + rijndael_input[15] ^= 2; + loggers::get_instance().log_to_hexa("fx__f2345: f3/c entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.x Test Set table: ", out, 16); + r.rijndael_encrypt(rijndael_input, out); + loggers::get_instance().log_to_hexa("fx__f2345: f3/d entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.x Test Set table: ", out, 16); + + for (int i = 0; i < 16; i++) { + out[i] ^= op_c[i]; + } // End of 'for' statement + + uint8_t ck[16] = { 0x00 }; + for (int i = 0; i < 16; i++) { + ck[i] = out[i]; + } // End of 'for' statement + loggers::get_instance().log_to_hexa("fx__f2345: f3/e entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 5.x Test Set table: ", ck, 16); + + // To obtain output block OUT4: XOR OPc and TEMP, rotate by r4=64, and XOR on the constant c4 (which is all zeroes except that the 2nd from last bit is 1) + for (int i = 0; i < 16; i++) { + rijndael_input[(i+8) % 16] = temp[i] ^ op_c[i]; + } // End of 'for' statement + rijndael_input[15] ^= 4; + loggers::get_instance().log_to_hexa("fx__f2345: f4/c entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 6.x Test Set table: ", rijndael_input, 16); + r.rijndael_encrypt(rijndael_input, out); + loggers::get_instance().log_to_hexa("fx__f2345: f4/d entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 6.x Test Set table: ", out, 16); + + for (int i = 0; i < 16; i++) { + out[i] ^= op_c[i]; + } // End of 'for' statement + + uint8_t ik[16] = { 0x00 }; + for (int i = 0; i < 16; i++) { + ik[i] = out[i]; + } // End of 'for' statement + loggers::get_instance().log_to_hexa("fx__f2345: f4/e entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 6.x Test Set table: ", ik, 16); + + OCTETSTRING os(8, static_cast(&res[0])); + p_res = oct2bit(os); + os = OCTETSTRING(16, static_cast(&ck[0])); + p_ck = oct2bit(os); + os = OCTETSTRING(16, static_cast(&ik[0])); + p_ik = oct2bit(os); + os = OCTETSTRING(6, static_cast(&ak[0])); + p_ak = oct2bit(os); + loggers::get_instance().log_msg("fx__f2345: p_res: ", bit2oct(p_res)); + loggers::get_instance().log_msg("fx__f2345: p_ck: ", bit2oct(p_ck)); + loggers::get_instance().log_msg("fx__f2345: p_ik: ", bit2oct(p_ik)); + loggers::get_instance().log_msg("fx__f2345: p_ak: ", bit2oct(p_ak)); + + return 0; + } + + INTEGER fx__f5star(const BITSTRING& p_authK, const BITSTRING& p_rand, BITSTRING& p_ak_s) { + loggers::get_instance().log_msg(">>> fx__f5star: p_authK: ", p_authK); + loggers::get_instance().log_msg(">>> fx__f5star: p_rand: ", p_rand); + + rijndael r; + OCTETSTRING authK = bit2oct(p_authK); + r.rijndael_key_schedule(authK); + opc op(r, OP); + uint8_t op_c[16] = { 0x00 }; + op.compute_opc(op_c); + loggers::get_instance().log_to_hexa("fx__f5star: a entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 6.x Test Set table: ", op_c, 16); + + OCTETSTRING rand = bit2oct(p_rand); + uint8_t rijndael_input[16] = { 0x00 }; + for (int i = 0; i < 16; i++) { + rijndael_input[i] = rand[i].get_octet() ^ op_c[i]; + } // End of 'for' statement + uint8_t temp[16] = { 0x00 }; + r.rijndael_encrypt(rijndael_input, temp); + + // To obtain output block OUT5: XOR OPc and TEMP, rotate by r5=96, and XOR on the constant c5 (which is all zeroes except that the 3rd from last bit is 1) + for (int i = 0; i < 16; i++) { + rijndael_input[(i + 4) % 16] = temp[i] ^ op_c[i]; + } // End of 'for' statement + rijndael_input[15] ^= 8; + uint8_t out[16] = { 0x00 }; + loggers::get_instance().log_to_hexa("fx__f5star: f5*/c entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 6.x Test Set table: ", rijndael_input, 16); + r.rijndael_encrypt(rijndael_input, out); + loggers::get_instance().log_to_hexa("fx__f5star: f5*/d entry in ETSI TS 135 207 V16.0.0 (2020-08) Clause 6.x Test Set table: ", out, 16); + for (int i = 0; i < 16; i++) { + out[i] ^= op_c[i]; + } // End of 'for' statement + + uint8_t ak[6] = { 0x00 }; + for (int i = 0; i < 6; i++) { + ak[i] = out[i]; + } + OCTETSTRING os(6, static_cast(&ak[0])); + p_ak_s = oct2bit(os); + loggers::get_instance().log_msg("fx__f5star: p_ak: ", bit2oct(p_ak_s)); + + return 0; + } + +} // End of namespace Lib__NG__NAS__CommonFunctions diff --git a/ccsrc/Externals/NG_security_ext.cc b/ccsrc/Externals/NG_security_ext.cc new file mode 100644 index 0000000000000000000000000000000000000000..db85ed3c3ee4b783269ce09b83700108c40f8f56 --- /dev/null +++ b/ccsrc/Externals/NG_security_ext.cc @@ -0,0 +1,45 @@ +#include +#include +#include +#include + +//#include "NG_SecurityDefinitionsAndExternalFunctions.hh" +#include "NG_NAS_SecurityFunctions.hh" +//#include "NR_RRC_ASN1_Definitions.hh" +#include "CommonDefs.hh" + +#include "base_time.hh" +//#include "converter.hh" +#include "loggers.hh" +//#include "xml_converters.hh" + + +//namespace NG__SecurityDefinitionsAndExternalFunctions { +namespace NG__NAS__SecurityFunctions { + + /** + * @desc This external function ... + * @return The ... + * @see fx_get...() return ... + */ + +//BITSTRING fx__NR__AsIntegrityAlgorithm(const OCTETSTRING &a, const NR__RRC__ASN1__Definitions::IntegrityProtAlgorithm& b, const BITSTRING &c, const OCTETSTRING &d, const BITSTRING &e, const INTEGER &f){ +//return int2bit(0, 0); +//} + +OCTETSTRING fx__NG__NasIntegrityAlgorithm(const OCTETSTRING& p_EncodedNasPdu, const BITSTRING& p_IntegrityAlgorithm, const BITSTRING& p_KNASint, const OCTETSTRING& p_NasCount, const BITSTRING& p_BearerId, const INTEGER& p_Direction){ +return int2oct(0, 0); +} + +OCTETSTRING fx__NG__NasCiphering(const OCTETSTRING& p_EncodedNasPdu,const BITSTRING& p_CipheringAlgorithm, const BITSTRING& p_KNASenc, const OCTETSTRING& p_NasCount, const BITSTRING& p_BearerId){ +return int2oct(0, 0); +} + +OCTETSTRING fx__NG__NasDeciphering(const OCTETSTRING& p_CipheredNasMsg, const BITSTRING& p_CipheringAlgorithm, const BITSTRING& p_KNASenc, const OCTETSTRING& p_NasCount, const BITSTRING& p_BearerId){ +return int2oct(0, 0); +} + + + +} // namespace NG__NAS__SecurityFunctions + // namespace NG__SecurityDefinitionsAndExternalFunctions diff --git a/ccsrc/Externals/common_ext.cc b/ccsrc/Externals/common_ext.cc new file mode 100644 index 0000000000000000000000000000000000000000..df78a765345e2167b97611206ad14d5e54e94897 --- /dev/null +++ b/ccsrc/Externals/common_ext.cc @@ -0,0 +1,112 @@ +#include +#include +#include +#include + +#include "CommonDefs.hh" + +#include "base_time.hh" +//#include "converter.hh" +#include "loggers.hh" + +#include "sha256.hh" +#include "hmac.hh" + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif +#define earthRadius 6378137.0L +#define rbis = ((double)(earthRadius * M_PI / 180)) + +namespace CommonDefs { + + /** + * @desc This external function gets KEY + * @return The KEY + * @see fx_get...() return UInt64 + * @note ETSI TS 133 220 V18.3.0 (2024-05) Annex B.2 Generic key derivation function + */ + //INTEGER fx__KeyDerivationFunction(INTEGER const&, BITSTRING const&, OCTETSTRING const&){ + BITSTRING fx__KeyDerivationFunction(const INTEGER& p__KDF, const BITSTRING& p__Key, const OCTETSTRING& p__String){ + loggers::get_instance().log_msg(">>> fx__KeyDerivationFunction: p__KDF: ", p__KDF); + loggers::get_instance().log_msg(">>> fx__KeyDerivationFunction: p__Key: ", bit2oct(p__Key)); + loggers::get_instance().log_msg(">>> fx__KeyDerivationFunction: p__String: ", p__String); + + if (p__KDF == 1) { // tsc_KDF_HMAC_SHA_256 see CommonDefs.ttcn + hmac h; + OCTETSTRING res; + if (h.generate(p__String, bit2oct(p__Key), res, false) == -1) { + loggers::get_instance().error("fx__KeyDerivationFunction: Key derivation failed"); + return int2bit(0, 0); + } + + loggers::get_instance().log_msg("<<< fx__KeyDerivationFunction: res: ", res); + return oct2bit(res); + } else { + loggers::get_instance().error("fx__KeyDerivationFunction: Unsupported KDF: %d", p__KDF); + return int2bit(0, 0); + } + } + + BITSTRING fx__sha256(const OCTETSTRING& p__String){ + loggers::get_instance().log_msg(">>> fx__sha256: p__String: ", p__String); + + sha256 sha; + OCTETSTRING res; + if (sha.generate(p__String, res) == -1) { + loggers::get_instance().error("fx__sha256: Key derivation failed"); + return int2bit(0, 0); + } + + loggers::get_instance().log_msg("<<< fx__sha256: res: ", res); + return oct2bit(res); + } + + /** + * @desc This external function gets the current time since 01/01/1970 in UTC format + * @return The current time since 01/01/1970 in UTC format in milliseconds + * @see fx_getSystemTime() return UInt64 + */ + //INTEGER fx__GetSystemTime(CommonDefs::Struct__tm__Type&, INTEGER&){ + void fx__GetSystemTime(CommonDefs::Struct__tm__Type& p__Struct__tm, INTEGER& p__TimezoneInfo){ + const time_t t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + tm* now = std::localtime(&t); + p__Struct__tm = Struct__tm__Type(now->tm_sec, now->tm_min, now->tm_hour, now->tm_mday, now->tm_mon, now->tm_year, now->tm_wday, now->tm_yday, now->tm_isdst); + p__TimezoneInfo = 0; // TODO FSCOM + + return; + } + //void fx__CalculateFCS32(BITSTRING const&) { + BITSTRING fx__CalculateFCS32(const BITSTRING& p__TMSI){ + loggers::get_instance().log_msg(">>> fx__CalculateFCS32: p__TMSI: ", p__TMSI); + + // Sanity checks + if (p__TMSI.lengthof() == 0) { + loggers::get_instance().error("fx__CalculateFCS32: Empty TMSI"); + return int2bit(0, 0); + } + + OCTETSTRING os = bit2oct(p__TMSI); + const unsigned char *data = static_cast(os); + if (data == NULL) { + loggers::get_instance().error("fx__CalculateFCS32: Failed to get data buffer"); + return int2bit(0, 0); + } + unsigned int crc = 0xffffffff; + for (size_t i = 0; i < os.lengthof(); i++) { + unsigned int val = (crc ^ os[i].get_octet()) & 0xFF; + for(size_t j = 0; j < 8; j++){ + val = val & 0x1 ? (val >> 1) ^ 0xEDB88320 : val >> 1; // 0xEDB88320 is the reverse of 0x04C11DB7 + } // End of 'for' statement + crc = val ^ crc >> 8; + } // End of 'for' statement + crc ^= 0xffffffff; + + crc = ((crc & 0xFF) << 24) | ((crc & 0xFF00) << 8) | ((crc & 0xFF0000) >> 8) | ((crc & 0xFF000000) >> 24); // Reverse the bits of the CRC value + OCTETSTRING crc_os(4, (const unsigned char*)&crc); + loggers::get_instance().log_msg("fx__CalculateFCS32: crc: ", crc_os); + + return oct2bit(crc_os); + } + +} // namespace CommonDefs diff --git a/ccsrc/Externals/module.mk b/ccsrc/Externals/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..5e20a45e76f592e980602c2265056627faa87800 --- /dev/null +++ b/ccsrc/Externals/module.mk @@ -0,0 +1,7 @@ +sources := \ + common_ext.cc \ + NG_security_ext.cc \ + LIB_NG_NAS_CommonFunctions_ext.cc + + +includes := . diff --git a/ccsrc/Ports/Data/DataPort.cc b/ccsrc/Ports/Data/DataPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..9a26e574626c28095212fa2bae9feeaafdea1eb3 --- /dev/null +++ b/ccsrc/Ports/Data/DataPort.cc @@ -0,0 +1,73 @@ +#include "DataPort.hh" +#include "loggers.hh" + +namespace AtsImsIot__TestSystem { + + DataPort::DataPort(const char *par_port_name): DataPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("DataPort::outgoing_send") { + // Nothing to do + } // End of constructor + + DataPort::~DataPort() { + loggers::get_instance().log(">>> DataPort::~DataPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void DataPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("DataPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void DataPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void DataPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void DataPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void DataPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void DataPort::Handle_Timeout(double time_since_last_call) {}*/ + + void DataPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> DataPort::user_map: %s", system_port); + } // End of user_map method + + void DataPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> DataPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void DataPort::user_start() + { + loggers::get_instance().log(">>> DataPort::user_start"); + + } // End of user_start method + + void DataPort::user_stop() + { + loggers::get_instance().log(">>> DataPort::user_stop"); + + } // End of user_stop method + +} + diff --git a/ccsrc/Ports/Data/DataPort.hh b/ccsrc/Ports/Data/DataPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..c9809b1c769863d218e5c1a36334070d36a27983 --- /dev/null +++ b/ccsrc/Ports/Data/DataPort.hh @@ -0,0 +1,45 @@ +#pragma once + +#include "AtsImsIot_TestSystem.hh" + +#include "layer.hh" +#include "params.hh" + +namespace AtsImsIot__TestSystem { + + class DataPort : public DataPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + DataPort(const char *par_port_name); + ~DataPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibSip__SIPTypesAndValues::Request& p_ind, const params& p_params) {}; + void receiveMsg (const LibSip__SIPTypesAndValues::Response& p_ind, const params& p_params) {}; + void receiveMsg (const LibMsrp__TypesAndValues::SEND__request& p_ind, const params& p_params) {}; + void receiveMsg (const LibMsrp__TypesAndValues::RECEIVE__response& p_ind, const params& p_params) {}; + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + protected: + }; // End of class DataPort + +} + diff --git a/ccsrc/Ports/Data/module.mk b/ccsrc/Ports/Data/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..b6ee7999e241806b19cd28233c0233bf0d5f6e27 --- /dev/null +++ b/ccsrc/Ports/Data/module.mk @@ -0,0 +1,3 @@ +sources := DataPort.cc +includes := . + diff --git a/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.cc b/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..50c6f354a5a13475dc2835b91842bd7a9beee7f3 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.cc @@ -0,0 +1,102 @@ +#include "ImsMonitorDiameterPort.hh" +#include "diameter_layer_factory.hh" +#include "loggers.hh" + +namespace AtsImsIot__TestSystem { + + ImsMonitorDiameterPort::ImsMonitorDiameterPort(const char *par_port_name): ImsMonitorDiameterPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("ImsMonitorDiameterPort::outgoing_send") { + // Nothing to do + } // End of constructor + + ImsMonitorDiameterPort::~ImsMonitorDiameterPort() { + loggers::get_instance().log(">>> ImsMonitorDiameterPort::~ImsMonitorDiameterPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void ImsMonitorDiameterPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("ImsMonitorDiameterPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void ImsMonitorDiameterPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void ImsMonitorDiameterPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void ImsMonitorDiameterPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void ImsMonitorDiameterPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void ImsMonitorDiameterPort::Handle_Timeout(double time_since_last_call) {}*/ + + void ImsMonitorDiameterPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorDiameterPort::user_map: %s", system_port); + // Build layer stack + /*params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("ImsMonitorDiameterPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("ImsMonitorDiameterPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else {*/ + loggers::get_instance().error("ImsMonitorDiameterPort::user_map: No layers defined in configuration file"); + /*}*/ + } // End of user_map method + + void ImsMonitorDiameterPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorDiameterPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void ImsMonitorDiameterPort::user_start() + { + loggers::get_instance().log(">>> ImsMonitorDiameterPort::user_start"); + + } // End of user_start method + + void ImsMonitorDiameterPort::user_stop() + { + loggers::get_instance().log(">>> ImsMonitorDiameterPort::user_stop"); + + } // End of user_stop method + + void ImsMonitorDiameterPort::receiveMsg (const LibDiameter__TypesAndValues::DIAMETER__MSG& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorDiameterPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + + } // End of method receiveMsg + +} + diff --git a/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.hh b/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..78759ee35a42d1c5350f8c82ee5253a9892a497e --- /dev/null +++ b/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.hh @@ -0,0 +1,41 @@ +#pragma once + +#include "AtsImsIot_TestSystem.hh" +#include "LibDiameter_TypesAndValues.hh" + +#include "layer.hh" +#include "params.hh" + +namespace AtsImsIot__TestSystem { + + class ImsMonitorDiameterPort : public ImsMonitorDiameterPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + ImsMonitorDiameterPort(const char *par_port_name); + ~ImsMonitorDiameterPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibDiameter__TypesAndValues::DIAMETER__MSG& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + }; // End of class ImsMonitorDiameterPort + +} + diff --git a/ccsrc/Ports/ImsMonitorDiameterPort/module.mk b/ccsrc/Ports/ImsMonitorDiameterPort/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..c189618dce3dfc60855e7ee6e269bc9c25235fb0 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorDiameterPort/module.mk @@ -0,0 +1,3 @@ +sources := ImsMonitorDiameterPort.cc +includes := . + diff --git a/ccsrc/Ports/ImsMonitorHttpPort/ImsMonitorHttpPort.cc b/ccsrc/Ports/ImsMonitorHttpPort/ImsMonitorHttpPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..6684d01917f6e2a874c8865c725bd307e9b9a207 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorHttpPort/ImsMonitorHttpPort.cc @@ -0,0 +1,107 @@ +#include "ImsMonitorHttpPort.hh" + +#include "http_layer_factory.hh" +#include "ims_http_monitor_layer.hh" +#include "http_codec_emtel.hh" +#include "loggers.hh" + +namespace AtsIms5gIot__TestSystem { + + ImsMonitorHttpPort::ImsMonitorHttpPort(const char *par_port_name): ImsMonitorHttpPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("ImsMonitorHttpPort::outgoing_send") { + // Nothing to do + } // End of constructor + + ImsMonitorHttpPort::~ImsMonitorHttpPort() { + loggers::get_instance().log(">>> ImsMonitorHttpPort::~ImsMonitorHttpPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void ImsMonitorHttpPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("ImsMonitorHttpPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void ImsMonitorHttpPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void ImsMonitorHttpPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void ImsMonitorHttpPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void ImsMonitorHttpPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void ImsMonitorHttpPort::Handle_Timeout(double time_since_last_call) {}*/ + + void ImsMonitorHttpPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorHttpPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("ImsMonitorHttpPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("ImsMonitorHttpPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + if (!static_cast(_layer)->set_codec(new http_codec_emtel())) { + loggers::get_instance().error("ImsMonitorHttpPort::user_map: Null codec"); + } + static_cast(_layer)->add_upper_port(this); + } else { + loggers::get_instance().error("ImsMonitorHttpPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void ImsMonitorHttpPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorHttpPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void ImsMonitorHttpPort::user_start() + { + loggers::get_instance().log(">>> ImsMonitorHttpPort::user_start"); + + } // End of user_start method + + void ImsMonitorHttpPort::user_stop() + { + loggers::get_instance().log(">>> ImsMonitorHttpPort::user_stop"); + + } // End of user_stop method + + void ImsMonitorHttpPort::receiveMsg (const LibHttp__TypesAndValues::HttpMessage& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorHttpPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + + } // End of method receiveMsg + +} + diff --git a/ccsrc/Ports/ImsMonitorHttpPort/ImsMonitorHttpPort.hh b/ccsrc/Ports/ImsMonitorHttpPort/ImsMonitorHttpPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..f1a79c5b55268cac03f4cf8d99e4ff491f077d09 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorHttpPort/ImsMonitorHttpPort.hh @@ -0,0 +1,45 @@ +#pragma once + +#include "AtsIms5gIot_TestSystem.hh" +#include "LibHttp_TypesAndValues.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibHttp__TypesAndValues { + class HttpMessage; +} + +namespace AtsIms5gIot__TestSystem { + + class ImsMonitorHttpPort : public ImsMonitorHttpPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + ImsMonitorHttpPort(const char *par_port_name); + ~ImsMonitorHttpPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibHttp__TypesAndValues::HttpMessage& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + }; // End of class ImsMonitorHttpPort + +} + diff --git a/ccsrc/Ports/ImsMonitorHttpPort/module.mk b/ccsrc/Ports/ImsMonitorHttpPort/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..375e6e583fa52811652c41e64f2fb108a5b935c0 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorHttpPort/module.mk @@ -0,0 +1,3 @@ +sources := ImsMonitorHttpPort.cc +includes := . + diff --git a/ccsrc/Ports/ImsMonitorNgapPort/ImsMonitorNgapPort.cc b/ccsrc/Ports/ImsMonitorNgapPort/ImsMonitorNgapPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..e86f1dc582db4b5a5df5e17edf9bc80c0a9323d2 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorNgapPort/ImsMonitorNgapPort.cc @@ -0,0 +1,108 @@ +#include "ImsMonitorNgapPort.hh" + +#include "NGAP_PDU_Descriptions.hh" +#include "ngap_layer_factory.hh" +#include "layer.hh" +#include "params.hh" + +#include "loggers.hh" + +namespace AtsIms5gIot__TestSystem { + + ImsMonitorNgapPort::ImsMonitorNgapPort(const char *par_port_name): ImsMonitorNgapPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("ImsMonitorNgapPort::outgoing_send") { + // Nothing to do + } // End of constructor + + ImsMonitorNgapPort::~ImsMonitorNgapPort() { + loggers::get_instance().log(">>> ImsMonitorNgapPort::~ImsMonitorNgapPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void ImsMonitorNgapPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("ImsMonitorNgapPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void ImsMonitorNgapPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void ImsMonitorNgapPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void ImsMonitorNgapPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void ImsMonitorNgapPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void ImsMonitorNgapPort::Handle_Timeout(double time_since_last_call) {}*/ + + void ImsMonitorNgapPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorNgapPort::user_map: %s", system_port); + + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("NGAPPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("NGAPPort::user_map: Invalid stack configurationi - NOT SCTP: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + } else { + loggers::get_instance().error("NGAPPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void ImsMonitorNgapPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorNgapPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void ImsMonitorNgapPort::user_start() + { + loggers::get_instance().log(">>> ImsMonitorNgapPort::user_start"); + + } // End of user_start method + + void ImsMonitorNgapPort::user_stop() + { + loggers::get_instance().log(">>> ImsMonitorNgapPort::user_stop"); + + } // End of user_stop method + + void ImsMonitorNgapPort::receiveMsg (const NGAP__PDU__Descriptions::NGAP__PDU& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorNgapPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + + } // End of method receiveMsg + +} + diff --git a/ccsrc/Ports/ImsMonitorNgapPort/ImsMonitorNgapPort.hh b/ccsrc/Ports/ImsMonitorNgapPort/ImsMonitorNgapPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..ea95ae171da1bc02411846772f14ff7563550d04 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorNgapPort/ImsMonitorNgapPort.hh @@ -0,0 +1,45 @@ +#pragma once + +#include "AtsIms5gIot_TestSystem.hh" +#include "NGAP_PDU_Descriptions.hh" + +#include "layer.hh" +#include "params.hh" + +namespace NGAP__PDU__Descriptions { + class NGAP__PDU; +} + +namespace AtsIms5gIot__TestSystem { + + class ImsMonitorNgapPort : public ImsMonitorNgapPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + ImsMonitorNgapPort(const char *par_port_name); + ~ImsMonitorNgapPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const NGAP__PDU__Descriptions::NGAP__PDU& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + }; // End of class ImsMonitorNgapPort + +} + diff --git a/ccsrc/Ports/ImsMonitorNgapPort/module.mk b/ccsrc/Ports/ImsMonitorNgapPort/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..f76b9f6d79c005fd6b37c9a440d08daeb1ff7ee6 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorNgapPort/module.mk @@ -0,0 +1,3 @@ +sources := ImsMonitorNgapPort.cc +includes := . + diff --git a/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.cc b/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..7776a1ef2451f4fbbbcb1a1cdcfc8348a6760597 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.cc @@ -0,0 +1,134 @@ +#include "ImsMonitorSipPort.hh" +#include "sip_layer_factory.hh" +#include "loggers.hh" + +namespace AtsImsIot__TestSystem { + + ImsMonitorSipPort::ImsMonitorSipPort(const char *par_port_name): ImsMonitorSipPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("ImsMonitorSipPort::outgoing_send") { + // Nothing to do + } // End of constructor + + ImsMonitorSipPort::~ImsMonitorSipPort() { + loggers::get_instance().log(">>> ImsMonitorSipPort::~ImsMonitorSipPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void ImsMonitorSipPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("ImsMonitorSipPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void ImsMonitorSipPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void ImsMonitorSipPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void ImsMonitorSipPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void ImsMonitorSipPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void ImsMonitorSipPort::Handle_Timeout(double time_since_last_call) {}*/ + + void ImsMonitorSipPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorSipPort::user_map: %s", system_port); + // Build layer stack + /*params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("ImsMonitorSipPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("ImsMonitorSipPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else {*/ + loggers::get_instance().error("ImsMonitorSipPort::user_map: No layers defined in configuration file"); + /*}*/ + } // End of user_map method + + void ImsMonitorSipPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorSipPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void ImsMonitorSipPort::user_start() + { + loggers::get_instance().log(">>> ImsMonitorSipPort::user_start"); + + } // End of user_start method + + void ImsMonitorSipPort::user_stop() + { + loggers::get_instance().log(">>> ImsMonitorSipPort::user_stop"); + + } // End of user_stop method + + void ImsMonitorSipPort::receiveMsg (const LibSip__SIPTypesAndValues::Request& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorSipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } // End of method receiveMsg + + void ImsMonitorSipPort::receiveMsg (const LibSip__SIPTypesAndValues::Response& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorSipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } // End of method receiveMsg + + void ImsMonitorSipPort::receiveMsg (const LibMsrp__TypesAndValues::SEND__request& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorSipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } // End of method receiveMsg + + void ImsMonitorSipPort::receiveMsg (const LibMsrp__TypesAndValues::RECEIVE__response& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorSipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } // End of method receiveMsg + +} + diff --git a/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.hh b/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..93f6d574344ca7ddb40486147414c05b0a5a767f --- /dev/null +++ b/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.hh @@ -0,0 +1,50 @@ +#pragma once + +#include "AtsImsIot_TestSystem.hh" +#include "LibSip_Interface.hh" +#include "LibMsrp_TypesAndValues.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibSip__SIPTypesAndValues { + class REGISTER__Request; +} + +namespace AtsImsIot__TestSystem { + + class ImsMonitorSipPort : public ImsMonitorSipPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + ImsMonitorSipPort(const char *par_port_name); + ~ImsMonitorSipPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibSip__SIPTypesAndValues::Request& p_ind, const params& p_params); + void receiveMsg (const LibSip__SIPTypesAndValues::Response& p_ind, const params& p_params); + void receiveMsg (const LibMsrp__TypesAndValues::SEND__request& p_ind, const params& p_params); + void receiveMsg (const LibMsrp__TypesAndValues::RECEIVE__response& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + }; // End of class ImsMonitorSipPort + +} + diff --git a/ccsrc/Ports/ImsMonitorSipPort/module.mk b/ccsrc/Ports/ImsMonitorSipPort/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..e65eb1e35331f3c34bc9aca925c3fcc4e2966b0c --- /dev/null +++ b/ccsrc/Ports/ImsMonitorSipPort/module.mk @@ -0,0 +1,3 @@ +sources := ImsMonitorSipPort.cc +includes := . + diff --git a/ccsrc/Ports/LibDiameter/DiameterPort.cc b/ccsrc/Ports/LibDiameter/DiameterPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..7900fb417ada69a3a1f89c04ffdf3af971b1af81 --- /dev/null +++ b/ccsrc/Ports/LibDiameter/DiameterPort.cc @@ -0,0 +1,113 @@ +#include "DiameterPort.hh" +#include "diameter_layer_factory.hh" +#include "loggers.hh" + +namespace LibDiameter__Interface { + + DiameterPort::DiameterPort(const char *par_port_name): DiameterPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("DiameterPort::outgoing_send") { + // Nothing to do + } // End of constructor + + DiameterPort::~DiameterPort() { + loggers::get_instance().log(">>> DiameterPort::~DiameterPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void DiameterPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("DiameterPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void DiameterPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void DiameterPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void DiameterPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void DiameterPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void DiameterPort::Handle_Timeout(double time_since_last_call) {}*/ + + void DiameterPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> DiameterPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("DiameterPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("DiameterPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else { + loggers::get_instance().error("DiameterPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void DiameterPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> DiameterPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void DiameterPort::user_start() + { + loggers::get_instance().log(">>> DiameterPort::user_start"); + + } // End of user_start method + + void DiameterPort::user_stop() + { + loggers::get_instance().log(">>> DiameterPort::user_stop"); + + } // End of user_stop method + + void DiameterPort::receiveMsg (const LibDiameter__TypesAndValues::DIAMETER__MSG& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> DiameterPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + + } // End of method receiveMsg + + void DiameterPort::outgoing_send(const LibDiameter__TypesAndValues::DIAMETER__MSG& send_par) + { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + +} + diff --git a/ccsrc/Ports/LibDiameter/DiameterPort.hh b/ccsrc/Ports/LibDiameter/DiameterPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..523b9d949c9fb58176af727ffb040f4572822fd8 --- /dev/null +++ b/ccsrc/Ports/LibDiameter/DiameterPort.hh @@ -0,0 +1,43 @@ +#pragma once + +#include "LibDiameter_Interface.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibDiameter__Interface { + + class DiameterPort : public DiameterPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + DiameterPort(const char *par_port_name); + ~DiameterPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibDiameter__TypesAndValues::DIAMETER__MSG& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + protected: + virtual void outgoing_send(const LibDiameter__TypesAndValues::DIAMETER__MSG& send_par); + }; // End of class DiameterPort + +} + diff --git a/ccsrc/Ports/LibDiameter/LowerLayerPPort.cc b/ccsrc/Ports/LibDiameter/LowerLayerPPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..8978f6daa70e8467c4395598d7ef88881a72b850 --- /dev/null +++ b/ccsrc/Ports/LibDiameter/LowerLayerPPort.cc @@ -0,0 +1,113 @@ +#include "LowerLayerPPort.hh" +#include "lower_layer_pport_layer_factory.hh" +#include "loggers.hh" + +namespace LibDiameter__Interface { + + LowerLayerPPort::LowerLayerPPort(const char *par_port_name): LowerLayerPPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("LowerLayerPPort::outgoing_send") { + // Nothing to do + } // End of constructor + + LowerLayerPPort::~LowerLayerPPort() { + loggers::get_instance().log(">>> LowerLayerPPort::~LowerLayerPPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void LowerLayerPPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("LowerLayerPPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void LowerLayerPPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void LowerLayerPPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void LowerLayerPPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void LowerLayerPPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void LowerLayerPPort::Handle_Timeout(double time_since_last_call) {}*/ + + void LowerLayerPPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> LowerLayerPPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("LowerLayerPPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("LowerLayerPPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else { + loggers::get_instance().error("LowerLayerPPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void LowerLayerPPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> LowerLayerPPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void LowerLayerPPort::user_start() + { + loggers::get_instance().log(">>> LowerLayerPPort::user_start"); + + } // End of user_start method + + void LowerLayerPPort::user_stop() + { + loggers::get_instance().log(">>> LowerLayerPPort::user_stop"); + + } // End of user_stop method + + void LowerLayerPPort::receiveMsg (const LibDiameter__TypesAndValues::Lower__Layer__Primitive& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> LowerLayerPPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + + } // End of method receiveMsg + + void LowerLayerPPort::outgoing_send(const LibDiameter__TypesAndValues::Lower__Layer__Primitive& send_par) + { + loggers::get_instance().log_msg(">>> LowerLayerPPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + +} + diff --git a/ccsrc/Ports/LibDiameter/LowerLayerPPort.hh b/ccsrc/Ports/LibDiameter/LowerLayerPPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..4f517f515a21e96b654a8cc6583243e2517960c2 --- /dev/null +++ b/ccsrc/Ports/LibDiameter/LowerLayerPPort.hh @@ -0,0 +1,43 @@ +#pragma once + +#include "LibDiameter_Interface.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibDiameter__Interface { + + class LowerLayerPPort : public LowerLayerPPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + LowerLayerPPort(const char *par_port_name); + ~LowerLayerPPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibDiameter__TypesAndValues::Lower__Layer__Primitive& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + protected: + virtual void outgoing_send(const LibDiameter__TypesAndValues::Lower__Layer__Primitive& send_par); + }; // End of class LowerLayerPPort + +} + diff --git a/ccsrc/Ports/LibDiameter/module.mk b/ccsrc/Ports/LibDiameter/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..3d9debd99e219570ebc2a99aa5f4509cd807aaa0 --- /dev/null +++ b/ccsrc/Ports/LibDiameter/module.mk @@ -0,0 +1,3 @@ +sources := DiameterPort.cc LowerLayerPPort.cc +includes := . + diff --git a/ccsrc/Ports/LibHttp/HttpPort.cc b/ccsrc/Ports/LibHttp/HttpPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..30b524f94c26e02a0743a3d86b26df57425e565a --- /dev/null +++ b/ccsrc/Ports/LibHttp/HttpPort.cc @@ -0,0 +1,117 @@ +#include "HttpPort.hh" +#include "http_layer_factory.hh" +#include "http_layer.hh" +#include "http_codec_emtel.hh" +#include "loggers.hh" + +#include "LibHttp_TypesAndValues.hh" + +namespace LibHttp__TestSystem { + + HttpPort::HttpPort(const char *par_port_name): HttpPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("HttpPort::outgoing_send") { + // Nothing to do + } // End of constructor + + HttpPort::~HttpPort() { + loggers::get_instance().log(">>> HttpPort::~HttpPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void HttpPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("HttpPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void HttpPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void HttpPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void HttpPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void HttpPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void HttpPort::Handle_Timeout(double time_since_last_call) {}*/ + + void HttpPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> HttpPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("HttpPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("HttpPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + if (!static_cast(_layer)->set_codec(new http_codec_emtel())) { + loggers::get_instance().error("HttpPort::user_map: Null codec"); + } + static_cast(_layer)->add_upper_port(this); + } else { + loggers::get_instance().error("HttpPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void HttpPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> HttpPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void HttpPort::user_start() + { + loggers::get_instance().log(">>> HttpPort::user_start"); + + } // End of user_start method + + void HttpPort::user_stop() + { + loggers::get_instance().log(">>> HttpPort::user_stop"); + + } // End of user_stop method + + void HttpPort::outgoing_send(const LibHttp__TypesAndValues::HttpMessage& send_par) + { + loggers::get_instance().log_msg(">>> HttpPort::outgoing_send: payload=", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void HttpPort::receiveMsg (const LibHttp__TypesAndValues::HttpMessage& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> HttpPort::receive_msg: ", p_ind); + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } + +} // End of namespace LibHttp__TestSystem + diff --git a/ccsrc/Ports/LibHttp/HttpPort.hh b/ccsrc/Ports/LibHttp/HttpPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..7d8b1af81630f28bced659562603e38caa50e05e --- /dev/null +++ b/ccsrc/Ports/LibHttp/HttpPort.hh @@ -0,0 +1,46 @@ +#pragma once + +#include "LibHttp_TestSystem.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibHttp__TypesAndValues { + class HttpMessage; +} + +namespace LibHttp__TestSystem { + + class HttpPort : public HttpPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + HttpPort(const char *par_port_name); + ~HttpPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + void receiveMsg (const LibHttp__TypesAndValues::HttpMessage& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + protected: + void outgoing_send(const LibHttp__TypesAndValues::HttpMessage& send_par); + }; // End of class HttpPort + +} // End of namespace LibHttp__TestSystem + diff --git a/ccsrc/Ports/LibHttp/module.mk b/ccsrc/Ports/LibHttp/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..0fba8bd2e9442497d91fa111d95c889d4d57e139 --- /dev/null +++ b/ccsrc/Ports/LibHttp/module.mk @@ -0,0 +1,3 @@ +sources := HttpPort.cc +includes := . + diff --git a/ccsrc/Ports/LibIot/AdapterConfigPort.cc b/ccsrc/Ports/LibIot/AdapterConfigPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..7a0d97db0633fcef746161df83e0838c295e752e --- /dev/null +++ b/ccsrc/Ports/LibIot/AdapterConfigPort.cc @@ -0,0 +1,77 @@ +#include + +#include "loggers.hh" +#include "registration.hh" + +#include "AdapterConfigPort.hh" + +//============================================================================= +namespace LibIot__TestInterface { + + AdapterConfigPort::AdapterConfigPort(const char *par_port_name) : AdapterConfigPort_BASE(par_port_name), _params() { + loggers::get_instance().log("AdapterConfigPort::AdapterConfigPort"); + } + + AdapterConfigPort::~AdapterConfigPort() {} + + void AdapterConfigPort::set_parameter(const char *parameter_name, const char *parameter_value) { + loggers::get_instance().log("AdapterConfigPort::set_parameter: %s=%s", parameter_name, parameter_value); + } + + /*void AdapterConfigPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void AdapterConfigPort::Handle_Fd_Event_Error(int /*fd*/) {} + + void AdapterConfigPort::Handle_Fd_Event_Writable(int /*fd*/) {} + + void AdapterConfigPort::Handle_Fd_Event_Readable(int /*fd*/) {} + + /*void AdapterConfigPort::Handle_Timeout(double time_since_last_call) {}*/ + + void AdapterConfigPort::user_map(const char *system_port) { loggers::get_instance().log(">>> AdapterConfigPort::user_map: %s", system_port); } + + void AdapterConfigPort::user_unmap(const char *system_port) { loggers::get_instance().log(">>> AdapterConfigPort::user_unmap: %s", system_port); } + + void AdapterConfigPort::user_start() {} + + void AdapterConfigPort::user_stop() {} + + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::GeneralConfigurationReq& send_par) { + loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); +//{ captureProcessIpAddress := "127.0.0.1", captureProcessPort := 5501, captureMode := { offlineCapture := { offset := { seconds := 0, microseconds := 0 }, captureSource := { sessionsPath := "C:/cygwin/tmp/IMS-UE_tool_pcaps", mergeFileList := { mergeFileList := { }, mergeFilePath := "", mergeToolPath := "" } } } }, eutInfoList := omit } + + LibIot__TypesAndValues::GeneralConfigurationRsp response; + response.status() = LibIot__TypesAndValues::Status(LibCommon__VerdictControl::FncRetCode::e__success, OPTIONAL("Configuration successful")); + loggers::get_instance().log_msg("AdapterConfigPort::outgoing_send: Send response: ", response); + incoming_message(response); + } + + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::SetFilterReq& send_par) { + loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); + + LibIot__TypesAndValues::SetFilterRsp response; + response.status() = LibIot__TypesAndValues::Status(LibCommon__VerdictControl::FncRetCode::e__success, OPTIONAL("Configuration successful")); + loggers::get_instance().log_msg("AdapterConfigPort::outgoing_send: Send response: ", response); + incoming_message(response); + } + + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::StartTrafficCaptureReq& send_par) { + loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); + + LibIot__TypesAndValues::StartTrafficCaptureRsp response; + response.status() = LibIot__TypesAndValues::Status(LibCommon__VerdictControl::FncRetCode::e__success, OPTIONAL("Configuration successful")); + loggers::get_instance().log_msg("AdapterConfigPort::outgoing_send: Send response: ", response); + incoming_message(response); + } + + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::StopTrafficCaptureReq& send_par) { + loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); + + LibIot__TypesAndValues::StopTrafficCaptureRsp response; + response.status() = LibIot__TypesAndValues::Status(LibCommon__VerdictControl::FncRetCode::e__success, OPTIONAL("Configuration successful")); + loggers::get_instance().log_msg("AdapterConfigPort::outgoing_send: Send response: ", response); + incoming_message(response); + } + +} // namespace LibIot__TestInterface diff --git a/ccsrc/Ports/LibIot/AdapterConfigPort.hh b/ccsrc/Ports/LibIot/AdapterConfigPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..2143db5d58f568205583d3fcffcf16c5bd7467db --- /dev/null +++ b/ccsrc/Ports/LibIot/AdapterConfigPort.hh @@ -0,0 +1,42 @@ +#pragma once + +#include "LibIot_TestInterface.hh" + +#include "params.hh" + +namespace LibIot__TestInterface { + + class AdapterConfigPort : public AdapterConfigPort_BASE { + params _params; + + public: + AdapterConfigPort(const char *par_port_name = NULL); + ~AdapterConfigPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + void outgoing_send(const LibIot__TypesAndValues::GeneralConfigurationReq &send_par); + + void outgoing_send(const LibIot__TypesAndValues::SetFilterReq &send_par); + + void outgoing_send(const LibIot__TypesAndValues::StartTrafficCaptureReq &send_par); + + void outgoing_send(const LibIot__TypesAndValues::StopTrafficCaptureReq &send_par); + }; + +} // namespace LibIot__TestInterface + diff --git a/ccsrc/Ports/LibIot/EquipmentAccessPort.cc b/ccsrc/Ports/LibIot/EquipmentAccessPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..78e945b24eb183481f4cf461af282a95fc535528 --- /dev/null +++ b/ccsrc/Ports/LibIot/EquipmentAccessPort.cc @@ -0,0 +1,113 @@ +#include "EquipmentAccessPort.hh" +#include "upper_tester_layer_factory.hh" +#include "loggers.hh" + +namespace LibIot__TestInterface { + + EquipmentAccessPort::EquipmentAccessPort(const char *par_port_name): EquipmentAccessPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("EquipmentAccessPort::outgoing_send") { + // Nothing to do + } // End of constructor + + EquipmentAccessPort::~EquipmentAccessPort() { + loggers::get_instance().log(">>> EquipmentAccessPort::~EquipmentAccessPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void EquipmentAccessPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("EquipmentAccessPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void EquipmentAccessPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void EquipmentAccessPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void EquipmentAccessPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void EquipmentAccessPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void EquipmentAccessPort::Handle_Timeout(double time_since_last_call) {}*/ + + void EquipmentAccessPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> EquipmentAccessPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("EquipmentAccessPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("EquipmentAccessPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else { + loggers::get_instance().error("EquipmentAccessPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void EquipmentAccessPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> EquipmentAccessPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void EquipmentAccessPort::user_start() + { + loggers::get_instance().log(">>> EquipmentAccessPort::user_start"); + + } // End of user_start method + + void EquipmentAccessPort::user_stop() + { + loggers::get_instance().log(">>> EquipmentAccessPort::user_stop"); + + } // End of user_stop method + + void EquipmentAccessPort::receiveMsg (const LibUpperTester::EquipmentOperationRsp& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> EquipmentAccessPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + + } // End of method receiveMsg + + void EquipmentAccessPort::outgoing_send(const LibUpperTester::EquipmentOperationReq& send_par) + { + loggers::get_instance().log_msg(">>> EquipmentAccessPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + +} + diff --git a/ccsrc/Ports/LibIot/EquipmentAccessPort.hh b/ccsrc/Ports/LibIot/EquipmentAccessPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..297ae4faae4151ffffaf7e1e14f214af4221d5e6 --- /dev/null +++ b/ccsrc/Ports/LibIot/EquipmentAccessPort.hh @@ -0,0 +1,43 @@ +#pragma once + +#include "LibIot_TestInterface.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibIot__TestInterface { + + class EquipmentAccessPort : public EquipmentAccessPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + EquipmentAccessPort(const char *par_port_name); + ~EquipmentAccessPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibUpperTester::EquipmentOperationRsp& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + protected: + virtual void outgoing_send(const LibUpperTester::EquipmentOperationReq& send_par); + }; // End of class EquipmentAccessPort + +} + diff --git a/ccsrc/Ports/LibIot/module.mk b/ccsrc/Ports/LibIot/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..8c24c4b66a3baa366dea75935e683d25be937014 --- /dev/null +++ b/ccsrc/Ports/LibIot/module.mk @@ -0,0 +1,3 @@ +sources := EquipmentAccessPort.cc AdapterConfigPort.cc +includes := . + diff --git a/ccsrc/Ports/LibSip/OperatorPort.hh b/ccsrc/Ports/LibSip/OperatorPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..a44d31675dfb7db40db280178d9149691301865c --- /dev/null +++ b/ccsrc/Ports/LibSip/OperatorPort.hh @@ -0,0 +1,31 @@ + + +#pragma once + +#include "LibSip_Interface.hh" + +namespace LibSip__Interface { + + class OperatorPort : public OperatorPort_BASE { + public: + OperatorPort(const char *par_port_name): OperatorPort_BASE(par_port_name) { }; + ~OperatorPort() { }; + + protected: + virtual void outgoing_call(const s__SIP__conversation_call& call_par) { }; + virtual void outgoing_call(const s__SIP__ringing_call& call_par) { }; + virtual void outgoing_call(const s__SIP__announcementA_call& call_par) { }; + virtual void outgoing_call(const s__SIP__announcementB_call& call_par) { }; + virtual void outgoing_call(const s__SIP__announcement_call& call_par) { }; + virtual void outgoing_call(const s__SIP__voiceMessage_call& call_par) { }; + virtual void outgoing_call(const s__SIP__mediastopped_call& call_par) { }; + virtual void outgoing_reply(const s__SIP__conversation_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__ringing_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__announcementA_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__announcementB_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__announcement_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__voiceMessage_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__mediastopped_reply& reply_par) { }; + }; // End of class OperatorPort + +} diff --git a/ccsrc/Ports/LibSip/SipPort.cc b/ccsrc/Ports/LibSip/SipPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..cb54e167f57405bc51491b2bbbe4718ef96f800e --- /dev/null +++ b/ccsrc/Ports/LibSip/SipPort.cc @@ -0,0 +1,246 @@ +#include "SipPort.hh" +#include "sip_layer_factory.hh" +#include "loggers.hh" + +namespace LibSip__Interface { + + SipPort::SipPort(const char *par_port_name): SipPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("SipPort::outgoing_send") { + // Nothing to do + } // End of constructor + + SipPort::~SipPort() { + loggers::get_instance().log(">>> SipPort::~SipPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void SipPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("SipPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void SipPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void SipPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void SipPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void SipPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void SipPort::Handle_Timeout(double time_since_last_call) {}*/ + + void SipPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> SipPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("SipPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("SipPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else { + loggers::get_instance().error("SipPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void SipPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> SipPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void SipPort::user_start() + { + loggers::get_instance().log(">>> SipPort::user_start"); + + } // End of user_start method + + void SipPort::user_stop() + { + loggers::get_instance().log(">>> SipPort::user_stop"); + + } // End of user_stop method + + void SipPort::receiveMsg (const LibSip__SIPTypesAndValues::Request& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> SipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::REGISTER__E) { + incoming_message(LibSip__SIPTypesAndValues::REGISTER__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::INVITE__E) { + incoming_message(LibSip__SIPTypesAndValues::INVITE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::SUBSCRIBE__E) { + incoming_message(LibSip__SIPTypesAndValues::SUBSCRIBE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::NOTIFY__E) { + incoming_message(LibSip__SIPTypesAndValues::NOTIFY__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::BYE__E) { + incoming_message(LibSip__SIPTypesAndValues::BYE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::INFO__E) { + incoming_message(LibSip__SIPTypesAndValues::INFO__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::OPTIONS__E) { + incoming_message(LibSip__SIPTypesAndValues::OPTIONS__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::MESSAGE__E) { + incoming_message(LibSip__SIPTypesAndValues::MESSAGE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::CANCEL__E) { + incoming_message(LibSip__SIPTypesAndValues::CANCEL__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::ACK__E) { + incoming_message(LibSip__SIPTypesAndValues::ACK__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else { + incoming_message(p_ind); + } + } // End of method receiveMsg + + void SipPort::receiveMsg (const LibSip__SIPTypesAndValues::Response& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> SipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } // End of method receiveMsg + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address) + { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::ACK__Request& send_par, const Address4SIP *destination_address) + { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::REGISTER__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::MESSAGE__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::OPTIONS__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::BYE__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::CANCEL__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::NOTIFY__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::INFO__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::Response& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + +} + diff --git a/ccsrc/Ports/LibSip/SipPort.hh b/ccsrc/Ports/LibSip/SipPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..fc2edfaf56e68bf3598a5d14468a270c210a1bd3 --- /dev/null +++ b/ccsrc/Ports/LibSip/SipPort.hh @@ -0,0 +1,64 @@ +#pragma once + +#include "LibSip_Interface.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibSip__SIPTypesAndValues { + class REGISTER__Request; +} + +namespace LibSip__Interface { + + class SipPort : public SipPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + SipPort(const char *par_port_name); + ~SipPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibSip__SIPTypesAndValues::Request& p_ind, const params& p_params); + void receiveMsg (const LibSip__SIPTypesAndValues::Response& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + protected: + virtual void outgoing_send(const LibSip__SIPTypesAndValues::Request& send_par, const Address4SIP *destination_address) { }; + void outgoing_send(const LibSip__SIPTypesAndValues::REGISTER__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::OPTIONS__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::BYE__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::CANCEL__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::ACK__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibSip__SIPTypesAndValues::PRACK__Request& send_par, const Address4SIP *destination_address) { }; + void outgoing_send(const LibSip__SIPTypesAndValues::NOTIFY__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibSip__SIPTypesAndValues::PUBLISH__Request& send_par, const Address4SIP *destination_address) { }; + virtual void outgoing_send(const LibSip__SIPTypesAndValues::UPDATE__Request& send_par, const Address4SIP *destination_address) { }; + virtual void outgoing_send(const LibSip__SIPTypesAndValues::REFER__Request& send_par, const Address4SIP *destination_address) { }; + void outgoing_send(const LibSip__SIPTypesAndValues::MESSAGE__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::INFO__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::Response& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const CHARSTRING& send_par, const Address4SIP *destination_address) { }; + }; // End of class SipPort + +} + diff --git a/ccsrc/Ports/LibSip/module.mk b/ccsrc/Ports/LibSip/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..7c599702e1dfe14d409117e77e97eed48f9d306f --- /dev/null +++ b/ccsrc/Ports/LibSip/module.mk @@ -0,0 +1,3 @@ +sources := SipPort.cc +includes := . + diff --git a/ccsrc/Ports/Naptr/NaptrPort.cc b/ccsrc/Ports/Naptr/NaptrPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..ee3b9bf069c86e4a648981099b41a5f654e09e4b --- /dev/null +++ b/ccsrc/Ports/Naptr/NaptrPort.cc @@ -0,0 +1,113 @@ +#include "NaptrPort.hh" +#include "naptrPort_layer_factory.hh" +#include "loggers.hh" + +namespace AtsImsIot__TestSystem { + + NaptrPort::NaptrPort(const char *par_port_name): NaptrPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("NaptrPort::outgoing_send") { + // Nothing to do + } // End of constructor + + NaptrPort::~NaptrPort() { + loggers::get_instance().log(">>> NaptrPort::~NaptrPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void NaptrPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("NaptrPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void NaptrPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void NaptrPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void NaptrPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void NaptrPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void NaptrPort::Handle_Timeout(double time_since_last_call) {}*/ + + void NaptrPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> NaptrPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("NaptrPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("NaptrPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else { + loggers::get_instance().error("NaptrPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void NaptrPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> NaptrPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void NaptrPort::user_start() + { + loggers::get_instance().log(">>> NaptrPort::user_start"); + + } // End of user_start method + + void NaptrPort::user_stop() + { + loggers::get_instance().log(">>> NaptrPort::user_stop"); + + } // End of user_stop method + + void NaptrPort::receiveMsg (const AtsImsIot__TypesAndValues::NAPTRmessage& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> NaptrPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + + } // End of method receiveMsg + + void NaptrPort::outgoing_send(const AtsImsIot__TypesAndValues::NAPTRmessage& send_par) + { + loggers::get_instance().log_msg(">>> NaptrPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + +} + diff --git a/ccsrc/Ports/Naptr/NaptrPort.hh b/ccsrc/Ports/Naptr/NaptrPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..b573737dbab12e0d8f0e0ca593b773091657321e --- /dev/null +++ b/ccsrc/Ports/Naptr/NaptrPort.hh @@ -0,0 +1,43 @@ +#pragma once + +#include "AtsImsIot_TestSystem.hh" + +#include "layer.hh" +#include "params.hh" + +namespace AtsImsIot__TestSystem { + + class NaptrPort : public NaptrPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + NaptrPort(const char *par_port_name); + ~NaptrPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const AtsImsIot__TypesAndValues::NAPTRmessage& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + protected: + virtual void outgoing_send(const AtsImsIot__TypesAndValues::NAPTRmessage& send_par); + }; // End of class NaptrPort + +} + diff --git a/ccsrc/Ports/Naptr/module.mk b/ccsrc/Ports/Naptr/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..aeb30dec26ac874b86cbb85363cd1f52017d1ed7 --- /dev/null +++ b/ccsrc/Ports/Naptr/module.mk @@ -0,0 +1,3 @@ +sources := NaptrPort.cc +includes := . + diff --git a/ccsrc/Ports/Sgi/SgiPort.cc b/ccsrc/Ports/Sgi/SgiPort.cc new file mode 100644 index 0000000000000000000000000000000000000000..8d766fd3eacb76da305daadf118057513866d368 --- /dev/null +++ b/ccsrc/Ports/Sgi/SgiPort.cc @@ -0,0 +1,73 @@ +#include "SgiPort.hh" +#include "loggers.hh" + +namespace AtsImsIot__TestSystem { + + SgiPort::SgiPort(const char *par_port_name): SgiPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("SgiPort::outgoing_send") { + // Nothing to do + } // End of constructor + + SgiPort::~SgiPort() { + loggers::get_instance().log(">>> SgiPort::~SgiPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void SgiPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("SgiPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void SgiPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void SgiPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void SgiPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void SgiPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void SgiPort::Handle_Timeout(double time_since_last_call) {}*/ + + void SgiPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> SgiPort::user_map: %s", system_port); + } // End of user_map method + + void SgiPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> SgiPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void SgiPort::user_start() + { + loggers::get_instance().log(">>> SgiPort::user_start"); + + } // End of user_start method + + void SgiPort::user_stop() + { + loggers::get_instance().log(">>> SgiPort::user_stop"); + + } // End of user_stop method + +} + diff --git a/ccsrc/Ports/Sgi/SgiPort.hh b/ccsrc/Ports/Sgi/SgiPort.hh new file mode 100644 index 0000000000000000000000000000000000000000..740373911762eaef7bcc3b9d512a80b38fa9bca8 --- /dev/null +++ b/ccsrc/Ports/Sgi/SgiPort.hh @@ -0,0 +1,42 @@ +#pragma once + +#include "AtsImsIot_TestSystem.hh" + +#include "layer.hh" +#include "params.hh" + +namespace AtsImsIot__TestSystem { + + class SgiPort : public SgiPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + SgiPort(const char *par_port_name); + ~SgiPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const CHARSTRING& p_ind, const params& p_params) {}; + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(double time_since_last_call); */ + + protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + protected: + }; // End of class SgiPort + +} + diff --git a/ccsrc/Ports/Sgi/module.mk b/ccsrc/Ports/Sgi/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..58a9d0b52c3c4002914bdb6a9a2aac00a1cdcc15 --- /dev/null +++ b/ccsrc/Ports/Sgi/module.mk @@ -0,0 +1,3 @@ +sources := SgiPort.cc +includes := . + diff --git a/ccsrc/Protocols/Diameter/avp.cc b/ccsrc/Protocols/Diameter/avp.cc new file mode 100644 index 0000000000000000000000000000000000000000..68aa8d8e48ad9e5853af13b47f789242c435d44a --- /dev/null +++ b/ccsrc/Protocols/Diameter/avp.cc @@ -0,0 +1,171 @@ +#include + +#include "avp.hh" + +#include "loggers.hh" +#include "converter.hh" + +avp::avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector p_payload) : _code(p_code), _vendor_specific(p_vendor_specific), _mandatory(p_mandatory), _protected_(p_protected_), _length(p_length), _vendor_id(p_vendor_id), _encoded_length(p_encoded_length), _payload(p_payload), _avp_header(LibDiameter__Types__Base__AVPs::AVP__Header(p_code, LibDiameter__Types__Base__AVPs::AVP__Flags( int2bit(p_vendor_specific, 1), int2bit(p_mandatory, 1), int2bit(p_protected_, 1), int2bit(0, 5)), p_length, (p_vendor_specific == 0) ? OPTIONAL(OPTIONAL_OMIT) : OPTIONAL(p_vendor_id))), _enc_avp() { + loggers::get_instance().log_msg("avp::avp (1): _avp_header:", _avp_header); + loggers::get_instance().log_to_hexa("avp::avp (1): _payload:", _payload.data(), _payload.size()); +} // End of ctor + +avp::avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector p_payload, const OCTETSTRING& p_enc_avp) : _code(p_code), _vendor_specific(p_vendor_specific), _mandatory(p_mandatory), _protected_(p_protected_), _length(p_length), _vendor_id(p_vendor_id), _encoded_length(p_encoded_length), _payload(p_payload), _avp_header(LibDiameter__Types__Base__AVPs::AVP__Header(p_code, LibDiameter__Types__Base__AVPs::AVP__Flags( int2bit(p_vendor_specific, 1), int2bit(p_mandatory, 1), int2bit(p_protected_, 1), int2bit(0, 5)), p_length, (p_vendor_specific == 0) ? OPTIONAL(OPTIONAL_OMIT) : OPTIONAL(p_vendor_id))), _enc_avp(p_enc_avp) { + loggers::get_instance().log_msg("avp::avp (2): _avp_header:", _avp_header); + loggers::get_instance().log_to_hexa("avp::avp (2): _payload:", _payload.data(), _payload.size()); + loggers::get_instance().log_msg("avp::avp (2): _enc_avp:", _enc_avp); +} // End of ctor + +int avp::get_code() const { + return _code; +} + +const std::vector& avp::get_payload() const { + return _payload; +} + +int avp::decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_session_id: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_session_id: _payload:", _payload.data(), _payload.size()); + + p_avp = LibDiameter__Types__Base__AVPs::Session__Id__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); + loggers::get_instance().log_msg("avp::decode_session_id: p_avp:", p_avp); + + return 0; +} + +int avp::decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_auth_session_state: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_auth_session_state: _payload:", _payload.data(), _payload.size()); + + // Sanity checks + if (_payload.size() != 4) { + loggers::get_instance().warning("avp::decode_auth_session_state: Wrong payload length: '%d'", _payload.size()); + return -1; + } + p_avp = LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), LibDiameter__Types__Base__AVPs::Auth__Session__State__Type(_payload[0] << 24 || _payload[1] << 16 || _payload[2] << 8 || _payload[3])); + loggers::get_instance().log_msg("avp::decode_auth_session_state: p_avp:", p_avp); + + return 0; +} + +int avp::decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_origin_host: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_origin_host: _payload:", _payload.data(), _payload.size()); + + p_avp = LibDiameter__Types__Base__AVPs::Origin__Host__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); + loggers::get_instance().log_msg("avp::decode_origin_host: p_avp:", p_avp); + + return 0; +} + +int avp::decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_origin_realm: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_origin_realm: _payload:", _payload.data(), _payload.size()); + + p_avp = LibDiameter__Types__Base__AVPs::Origin__Realm__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); + loggers::get_instance().log_msg("avp::decode_origin_realm: p_avp:", p_avp); + + return 0; +} + +int avp::decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_destination_host: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_destination_host: _payload:", _payload.data(), _payload.size()); + + p_avp = LibDiameter__Types__Base__AVPs::Destination__Host__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); + loggers::get_instance().log_msg("avp::decode_destination_host: p_avp:", p_avp); + + return 0; +} + +int avp::decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_destination_realm: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_destination_realm: _payload:", _payload.data(), _payload.size()); + + p_avp = LibDiameter__Types__Base__AVPs::Destination__Realm__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); + loggers::get_instance().log_msg("avp::decode_destination_realm: p_avp:", p_avp); + + return 0; +} + +int avp::decode_auth_Application_Id(LibDiameter__Types__Base__AVPs::Auth__Application__Id__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_auth_Application_Id: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_auth_Application_Id: _payload:", _payload.data(), _payload.size()); + + p_avp = LibDiameter__Types__Base__AVPs::Auth__Application__Id__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), converter::get_instance().bytes_to_int(_payload)); + loggers::get_instance().log_msg("avp::decode_auth_Application_Id: p_avp:", p_avp); + + return 0; +} + +int avp::decode_framed_IP_Address(LibDiameter__Types__Base__AVPs::Framed__IP__Address__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_framed_IP_Address: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_framed_IP_Address: _payload:", _payload.data(), _payload.size()); + + // Sanity checks + if (_payload.size() != 4) { + loggers::get_instance().warning("avp::decode_framed_IP_Address: Wrong payload length: '%d'", _payload.size()); + return -1; + } + p_avp = LibDiameter__Types__Base__AVPs::Framed__IP__Address__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), OCTETSTRING(_payload.size(), _payload.data())); + loggers::get_instance().log_msg("avp::decode_framed_IP_Address: p_avp:", p_avp); + + return 0; +} + +int avp::decode_media_Component_Description(LibDiameter__Types__Rx__AVPs::Media__Component__Description__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_media_Component_Description: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_media_Component_Description: _payload:", _payload.data(), _payload.size()); + loggers::get_instance().log_msg("avp::decode_media_Component_Description: _avp_header:", _avp_header); + + p_avp.aVP__Header() = LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header); + loggers::get_instance().log_msg("avp::decode_media_Component_Description: p_avp: ", p_avp); + + return 0; +} + +int avp::decode_media_Component_Number(LibDiameter__Types__Base__AVPs::Media__Component__Number__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_media_Component_Number: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_media_Component_Number: _payload:", _payload.data(), _payload.size()); + + // Sanity checks + if (_payload.size() != 4) { + loggers::get_instance().warning("avp::decode_media_Component_Number: Wrong payload length: '%d'", _payload.size()); + return -1; + } + p_avp = LibDiameter__Types__Base__AVPs::Media__Component__Number__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), converter::get_instance().bytes_to_int(_payload)); + loggers::get_instance().log_msg("avp::decode_media_Component_Number: p_avp:", p_avp); + + return 0; +} + +int avp::decode_media_Type(LibDiameter__Types__Rx__AVPs::Media__Type__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_media_Type: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_media_Type: _payload:", _payload.data(), _payload.size()); + + // Sanity checks + if (_payload.size() != 4) { + loggers::get_instance().warning("avp::decode_media_Type: Wrong payload length: '%d'", _payload.size()); + return -1; + } + p_avp = LibDiameter__Types__Rx__AVPs::Media__Type__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), LibDiameter__Types__Rx__AVPs::Media__Type__Type(converter::get_instance().bytes_to_int(_payload))); + loggers::get_instance().log_msg("avp::decode_af_Application_Identifier: p_avp:", p_avp); + + return 0; +} + +int avp::decode_af_Application_Identifier(LibDiameter__Types__Rx__AVPs::AF__Application__Identifier__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_af_Application_Identifier: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_af_Application_Identifier: _payload:", _payload.data(), _payload.size()); + + // Sanity checks + if (_payload.size() != 4) { + loggers::get_instance().warning("avp::decode_af_Application_Identifier: Wrong payload length: '%d'", _payload.size()); + return -1; + } + p_avp = LibDiameter__Types__Rx__AVPs::AF__Application__Identifier__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), OCTETSTRING(_payload.size(), _payload.data())); + loggers::get_instance().log_msg("avp::decode_af_Application_Identifier: p_avp:", p_avp); + + return 0; +} diff --git a/ccsrc/Protocols/Diameter/avp.hh b/ccsrc/Protocols/Diameter/avp.hh new file mode 100644 index 0000000000000000000000000000000000000000..5526f67cd654bd5b6e6973f63aa285e5ca88bb17 --- /dev/null +++ b/ccsrc/Protocols/Diameter/avp.hh @@ -0,0 +1,43 @@ +#pragma once + +#include +#include + + +#include "LibDiameter_TypesAndValues.hh" +#include "LibDiameter_Types_Rx_AVPs.hh" + +class avp { + const int _code; + const unsigned char _vendor_specific; + const unsigned char _mandatory; + const unsigned char _protected_; + const int _length; + const int _vendor_id; + const int _encoded_length; + const std::vector _payload; + const OCTETSTRING _enc_avp; + const LibDiameter__Types__Base__AVPs::AVP__Header _avp_header; +public: + avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector p_payload); + avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector p_payload, const OCTETSTRING& p_enc_avp); + virtual ~avp() {}; + + int get_code() const; + const std::vector& get_payload() const; + + int encode_auth_session_state(const LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp, std::unique_ptr& p_encoded_avp); + + int decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) const; + int decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) const; + int decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) const; + int decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) const; + int decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) const; + int decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) const; + int decode_auth_Application_Id(LibDiameter__Types__Base__AVPs::Auth__Application__Id__AVP& p_avp) const; + int decode_framed_IP_Address(LibDiameter__Types__Base__AVPs::Framed__IP__Address__AVP& p_avp) const; + int decode_media_Component_Description(LibDiameter__Types__Rx__AVPs::Media__Component__Description__AVP& p_avp) const; + int decode_media_Component_Number(LibDiameter__Types__Base__AVPs::Media__Component__Number__AVP& p_avp) const; + int decode_media_Type(LibDiameter__Types__Rx__AVPs::Media__Type__AVP& p_avp) const; + int decode_af_Application_Identifier(LibDiameter__Types__Rx__AVPs::AF__Application__Identifier__AVP& p_avp) const; +}; // End of class avp \ No newline at end of file diff --git a/ccsrc/Protocols/Diameter/diameter_aar_codec.cc b/ccsrc/Protocols/Diameter/diameter_aar_codec.cc new file mode 100644 index 0000000000000000000000000000000000000000..65b22d73e93c1b776323ddecf41c30a8b3b05741 --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_aar_codec.cc @@ -0,0 +1,183 @@ +#include + +#include "avp.hh" + +#include "diameter_aar_codec.hh" + +#include "loggers.hh" +#include "converter.hh" + +template class OPTIONAL; +class TTCN_EncDec; + +int diameter_aar_codec::encode(const LibDiameter__TypesAndValues::AAR__MSG& p_aar_msg, OCTETSTRING& p_data) { + loggers::get_instance().log_msg(">>> diameter_aar_codec::encode", (const Base_Type &)p_aar_msg); + + TTCN_EncDec::clear_error(); + TTCN_Buffer encoding_buffer; + + if (_codec.encode_header(p_aar_msg.header(), encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_aar_codec::encode: Failed to encode AAR header"); + return -1; + } + + if (encode_avps(p_aar_msg, encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_aar_codec::encode: Failed to encode AAR AVPs"); + return -1; + } + + p_data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()); + // Update length at offset #1 on 3 bytes + + return 0; +} + +int diameter_aar_codec::encode_avps(const LibDiameter__TypesAndValues::AAR__MSG& p_aar_msg, TTCN_Buffer p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_aar_codec::encode_avps: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // SessionId + if (_codec.encode_session_id(p_aar_msg.session__Id(), p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_aar_codec::encode_avps: Failed to encode session__Id__AVP"); + return -1; + } + + // Mandatory AVPs + if (_codec.encode_origin_host(p_aar_msg.aAR__Body().origin__Host(), p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_aar_codec::encode_avps: Failed to encode Origin__Host__AVP"); + return -1; + } + if (_codec.encode_origin_realm(p_aar_msg.aAR__Body().origin__Realm(), p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_aar_codec::encode_avps: Failed to encode Origin__Realm__AVP"); + return -1; + } + if (_codec.encode_auth_Application_Id(p_aar_msg.aAR__Body().auth__Application__Id(), p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_aar_codec::encode_avps: Failed to encode Auth__Application__Id__AVP"); + return -1; + } + + // Optional AVPs + loggers::get_instance().log_msg("diameter_aar_codec::encode_avps: destination__Host: ", p_aar_msg.aAR__Body().destination__Host()); + if (p_aar_msg.aAR__Body().destination__Host().is_present()) { + const LibDiameter__Types__Base__AVPs::Destination__Host__AVP& avp = static_cast(*p_aar_msg.aAR__Body().destination__Host().get_opt_value()); + if (_codec.encode_destination_host(avp, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_aar_codec::encode_avps: Failed to encode Destination__Host__AVP"); + } + } + loggers::get_instance().log_msg("diameter_aar_codec::encode_avps: framed__IP__Address: ", p_aar_msg.aAR__Body().framed__IP__Address()); + if (p_aar_msg.aAR__Body().framed__IP__Address().is_present()) { + const LibDiameter__Types__Base__AVPs::Framed__IP__Address__AVP& avp = static_cast(*p_aar_msg.aAR__Body().framed__IP__Address().get_opt_value()); + if (_codec.encode_framed_IP_Address(avp, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_aar_codec::encode_avps: Framed__IP__Address is missing"); + } + } + //TODO Continue + + loggers::get_instance().log_msg("<<< diameter_aar_codec::encode_avps: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_aar_codec::decode(const OCTETSTRING& p_data, LibDiameter__TypesAndValues::AAR__MSG& p_aar_msg, params* p_params) { + loggers::get_instance().log_msg(">>> diameter_aar_codec::decode: ", (const Base_Type &)p_data); + + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_EncDec::clear_error(); + TTCN_Buffer decoding_buffer(p_data); + + params _params; + _params.insert(std::make_pair("Request", "1")); + + if (_codec.decode_header(decoding_buffer, p_aar_msg.header(), static_cast(_params)) == -1) { + loggers::get_instance().warning("diameter_aar_codec::decode: Failed to decode AAR message header"); + return -1; + } + + if (_codec.decode_avps(decoding_buffer, p_aar_msg.header(), static_cast(_params)) == -1) { + loggers::get_instance().warning("diameter_aar_codec::decode: Failed to decode AAR AVPs"); + return -1; + } + + // Mandatory AVPs + if (decode_origin_host(p_aar_msg.aAR__Body().origin__Host()) == -1) { + loggers::get_instance().warning("diameter_aar_codec::decode: Missing Origin__Host__AVP"); + return -1; + } + if (decode_origin_realm(p_aar_msg.aAR__Body().origin__Realm()) == -1) { + loggers::get_instance().warning("diameter_aar_codec::decode: Missing Origin__Realm__AVP"); + return -1; + } + if (decode_destination_realm(p_aar_msg.aAR__Body().destination__Realm()) == -1) { + loggers::get_instance().warning("diameter_aar_codec::decode: Missing Destination__Realm__AVP"); + return -1; + } + if (decode_session_id(p_aar_msg.session__Id()) == -1) { + loggers::get_instance().warning("diameter_aar_codec::decode: Missing Destination__Realm__AVP"); + return -1; + } + + // Optinal AVPs + if (decode_destination_host(p_aar_msg.aAR__Body().destination__Host()) == -1) { + p_aar_msg.aAR__Body().destination__Host().set_to_omit(); + } + if (decode_auth_Application_Id(p_aar_msg.aAR__Body().auth__Application__Id()) == -1) { + p_aar_msg.aAR__Body().auth__Application__Id().set_to_omit(); + } + if (decode_framed_IP_Address(p_aar_msg.aAR__Body().framed__IP__Address()) == -1) { + p_aar_msg.aAR__Body().framed__IP__Address().set_to_omit(); + } + if (decode_media_Component_Description(p_aar_msg.aAR__Body().media__Component__Description()) == -1) { + p_aar_msg.aAR__Body().media__Component__Description().set_to_omit(); + } + if (decode_af_Application_Identifier(p_aar_msg.aAR__Body().af__Application__Id()) == -1) { + p_aar_msg.aAR__Body().af__Application__Id().set_to_omit(); + } + + p_aar_msg.aAR__Body().service__Info__Status().set_to_omit(); + p_aar_msg.aAR__Body().af__Charging__Identifier().set_to_omit(); + p_aar_msg.aAR__Body().sip__Forking__Indication().set_to_omit(); + p_aar_msg.aAR__Body().specific__Action().set_to_omit(); + p_aar_msg.aAR__Body().subscription__Id().set_to_omit(); + p_aar_msg.aAR__Body().supported__Features().set_to_omit(); + p_aar_msg.aAR__Body().reservation__Priority().set_to_omit(); + p_aar_msg.aAR__Body().framed__IPv6__Address().set_to_omit(); + p_aar_msg.aAR__Body().called__Station__Id().set_to_omit(); + p_aar_msg.aAR__Body().service__URN().set_to_omit(); + p_aar_msg.aAR__Body().sponsored__Connectivity__Data().set_to_omit(); + p_aar_msg.aAR__Body().mps__Identifier().set_to_omit(); + p_aar_msg.aAR__Body().gcs__Identifier().set_to_omit(); + p_aar_msg.aAR__Body().mcptt__Identifier().set_to_omit(); + p_aar_msg.aAR__Body().mCVideo__Identifier().set_to_omit(); + p_aar_msg.aAR__Body().iMS__Content__Identifier().set_to_omit(); + p_aar_msg.aAR__Body().iMS__Content__Type().set_to_omit(); + p_aar_msg.aAR__Body().rx__Request__Type().set_to_omit(); + p_aar_msg.aAR__Body().required__Access__Info().set_to_omit(); + p_aar_msg.aAR__Body().aF__Requested__Data().set_to_omit(); + p_aar_msg.aAR__Body().pre__emption__Control__Info().set_to_omit(); + p_aar_msg.aAR__Body().user__Name().set_to_omit(); + p_aar_msg.aAR__Body().origin__State__Id().set_to_omit(); + p_aar_msg.aAR__Body().proxy__Info().set_to_omit(); + p_aar_msg.aAR__Body().route__Record().set_to_omit(); + p_aar_msg.aAR__Body().aVP__Type().set_to_omit(); + + return 0; +} + +int diameter_aar_codec::decode_media_Component_Description(LibDiameter__TypesAndValues::AAR__Body__AVP_media__Component__Description& p_avp) { + loggers::get_instance().log(">>> decode_media_Component_Description"); + + const std::unique_ptr& avp_ptr = _codec.get_avp(_codec.AVP_Media_Component_Description_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().log("diameter_aar_codec::decode_media_Component_Description: AVP not found"); + return -1; + } + + LibDiameter__Types__Rx__AVPs::Media__Component__Description__AVP avp; + if (_codec.decode_media_Component_Description(avp) == -1) { + loggers::get_instance().warning("diameter_aar_codec::decode_media_Component_Description: Failed to decode Media__Component__Description__AVP"); + return -1; + } + + p_avp.set_value(&avp); + + loggers::get_instance().log_msg("<<< decode_media_Component_Description: ", (const Base_Type &)p_avp); + return 0; +} diff --git a/ccsrc/Protocols/Diameter/diameter_aar_codec.hh b/ccsrc/Protocols/Diameter/diameter_aar_codec.hh new file mode 100644 index 0000000000000000000000000000000000000000..8c037f73a2ac75348755ae2d512d450e2e210398 --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_aar_codec.hh @@ -0,0 +1,52 @@ +#pragma once + +#include + +#include "codec_gen.hh" +#include "params.hh" + +#include "avp.hh" +#include "diameter_codec.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibDiameter__TypesAndValues { + class AAR__MSG; //! Forward declaration of TITAN class +} + +namespace LibDiameter__Types__Rx__AVPs { + class Media__Component__Description__AVP; //! Forward declaration of TITAN class +} + +class diameter_aar_codec: public codec_gen < + LibDiameter__TypesAndValues::AAR__MSG, + LibDiameter__TypesAndValues::AAR__MSG> +{ + std::vector avps; + diameter_codec _codec; + +public: + diameter_aar_codec() : codec_gen(), avps(), _codec() { }; + virtual ~diameter_aar_codec() { }; + + virtual int encode (const LibDiameter__TypesAndValues::AAR__MSG& p_aar_msg, OCTETSTRING& p_data); + virtual int decode (const OCTETSTRING& p_data, LibDiameter__TypesAndValues::AAR__MSG& p_aar_msg, params* p_params = NULL); + +private: + int encode_avps(const LibDiameter__TypesAndValues::AAR__MSG& p_aar_msg, TTCN_Buffer p_encoding_buffer); + + inline int decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) { return _codec.decode_session_id(p_avp); }; + inline int decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) { return _codec.decode_auth_session_state(p_avp); }; + inline int decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) { return _codec.decode_origin_host(p_avp); }; + inline int decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) { return _codec.decode_destination_host(p_avp); }; + inline int decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) { return _codec.decode_origin_realm(p_avp); }; + inline int decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) { return _codec.decode_destination_realm(p_avp); }; + inline int decode_auth_Application_Id(LibDiameter__Types__Base__AVPs::Auth__Application__Id__AVP& p_avp) { return _codec.decode_auth_Application_Id(p_avp); }; + inline int decode_framed_IP_Address(LibDiameter__Types__Base__AVPs::Framed__IP__Address__AVP& p_avp) { return _codec.decode_framed_IP_Address(p_avp); }; + inline int decode_af_Application_Identifier(LibDiameter__Types__Rx__AVPs::AF__Application__Identifier__AVP& p_avp) { return _codec.decode_af_Application_Identifier(p_avp); }; + + int decode_media_Component_Description(LibDiameter__TypesAndValues::AAR__Body__AVP_media__Component__Description& p_avp); + +}; // End of class diameter_aar_codec diff --git a/ccsrc/Protocols/Diameter/diameter_codec.cc b/ccsrc/Protocols/Diameter/diameter_codec.cc new file mode 100644 index 0000000000000000000000000000000000000000..e18114b137a6947f403be30c27e10e93a62ae977 --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_codec.cc @@ -0,0 +1,913 @@ +#include + +#include "LibDiameter_TypesAndValues.hh" + +#include "diameter_codec.hh" + +#include "loggers.hh" +#include "converter.hh" + +template class OPTIONAL; +class TTCN_Buffer; +class TTCN_EncDec; + +diameter_codec::~diameter_codec() { + loggers::get_instance().log(">>> diameter_codec::~diameter_codec"); + if (_avps.size() != 0) { + _avps.clear(); + } +} + +int diameter_codec::encode_header(const LibDiameter__TypesAndValues::DiameterHeader& p_header, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_header: ", (const Base_Type &)p_header); + + p_encoding_buffer.put_c(p_header.version()); + + p_encoding_buffer.put_c(static_cast((p_header.msglen() >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.msglen() >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.msglen()) & 0xFF)); + + unsigned char cmdflags = 0x00; + BITSTRING bit_set = int2bit(1, 1); + if (p_header.cmdflags().r__bit() == bit_set) { + cmdflags |= 0x80; + } + if (p_header.cmdflags().p__bit() == bit_set) { + cmdflags |= 0x40; + } + if (p_header.cmdflags().e__bit() == bit_set) { + cmdflags |= 0x20; + } + if (p_header.cmdflags().t__bit() == bit_set) { + cmdflags |= 0x10; + } + p_encoding_buffer.put_c(cmdflags); + + int cmdcode = _command_codes[p_header.cmdcode()]; + p_encoding_buffer.put_c(static_cast((cmdcode >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((cmdcode >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(cmdcode & 0xFF)); + + p_encoding_buffer.put_c(static_cast((p_header.applid() >> 24) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.applid() >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.applid() >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(p_header.applid() & 0xFF)); + + p_encoding_buffer.put_c(static_cast((p_header.hopid() >> 24) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.hopid() >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.hopid() >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(p_header.hopid() & 0xFF)); + + p_encoding_buffer.put_c(static_cast((p_header.endid() >> 24) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.endid() >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.endid() >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(p_header.endid() & 0xFF)); + + _avps.clear(); // unique_ptr class manages deletion of resources + + loggers::get_instance().log_msg("<<< diameter_codec::encode_header: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} // End of method encode_header + +int diameter_codec::encode_session_id(const LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_session_id: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // TODO Group + + // Encode AVP header + int padding = 0; + if (encode_avp_header(p_avp.aVP__Header(), &padding, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_codec::encode_session_id: Failed to encode AVP header"); + return -1; + } + + const OCTETSTRING& os = unichar2oct(p_avp.aVP__Data()); + p_encoding_buffer.put_string(os); + + _avps.insert( + std::make_pair >( + p_avp.aVP__Header().aVP__Code(), + std::unique_ptr( + new avp( + p_avp.aVP__Header().aVP__Code(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().m__bit()[0].get_bit()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().p__bit()[0].get_bit()) ? 0x01 : 0x00, + p_avp.aVP__Header().aVP__len(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? static_cast(static_cast(*p_avp.aVP__Header().aVP__vid().get_opt_value())) : 0, + p_avp.aVP__Header().aVP__len(), + std::vector(static_cast(os), static_cast(os) + os.lengthof()), + static_cast(OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())) + )))); + + if (padding != 0) { + OCTETSTRING os = int2oct(0, padding); + p_encoding_buffer.put_string(os); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_session_id: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_codec::encode_origin_host(const LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_origin_host: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // TODO Group + + // Encode AVP header + int padding = 0; + if (encode_avp_header(p_avp.aVP__Header(), &padding, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_codec::encode_origin_host: Failed to encode AVP header"); + return -1; + } + + const OCTETSTRING& os = char2oct(p_avp.aVP__Data()); + p_encoding_buffer.put_string(os); + + _avps.insert( + std::make_pair >( + p_avp.aVP__Header().aVP__Code(), + std::unique_ptr( + new avp( + p_avp.aVP__Header().aVP__Code(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().m__bit()[0].get_bit()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().p__bit()[0].get_bit()) ? 0x01 : 0x00, + p_avp.aVP__Header().aVP__len(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? static_cast(static_cast(*p_avp.aVP__Header().aVP__vid().get_opt_value())) : 0, + p_avp.aVP__Header().aVP__len(), + std::vector(static_cast(os), static_cast(os) + os.lengthof()), + static_cast(OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())) + )))); + + if (padding != 0) { + OCTETSTRING os = int2oct(0, padding); + p_encoding_buffer.put_string(os); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_origin_host: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_codec::encode_origin_realm(const LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_origin_realm: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // TODO Group + + // Encode AVP header + int padding = 0; + if (encode_avp_header(p_avp.aVP__Header(), &padding, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_codec::encode_origin_realm: Failed to encode AVP header"); + return -1; + } + + const OCTETSTRING& os = char2oct(p_avp.aVP__Data()); + p_encoding_buffer.put_string(os); + + _avps.insert( + std::make_pair >( + p_avp.aVP__Header().aVP__Code(), + std::unique_ptr( + new avp( + p_avp.aVP__Header().aVP__Code(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().m__bit()[0].get_bit()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().p__bit()[0].get_bit()) ? 0x01 : 0x00, + p_avp.aVP__Header().aVP__len(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? static_cast(static_cast(*p_avp.aVP__Header().aVP__vid().get_opt_value())) : 0, + p_avp.aVP__Header().aVP__len(), + std::vector(static_cast(os), static_cast(os) + os.lengthof()), + static_cast(OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())) + )))); + + if (padding != 0) { + OCTETSTRING os = int2oct(0, padding); + p_encoding_buffer.put_string(os); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_origin_realm: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_codec::encode_destination_host(const LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_destination_host: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // TODO Group + + // Encode AVP header + int padding = 0; + if (encode_avp_header(p_avp.aVP__Header(), &padding, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_codec::encode_origin_host: Failed to encode AVP header"); + return -1; + } + + const OCTETSTRING& os = char2oct(p_avp.aVP__Data()); + p_encoding_buffer.put_string(os); + + _avps.insert( + std::make_pair >( + p_avp.aVP__Header().aVP__Code(), + std::unique_ptr( + new avp( + p_avp.aVP__Header().aVP__Code(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().m__bit()[0].get_bit()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().p__bit()[0].get_bit()) ? 0x01 : 0x00, + p_avp.aVP__Header().aVP__len(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? static_cast(static_cast(*p_avp.aVP__Header().aVP__vid().get_opt_value())) : 0, + p_avp.aVP__Header().aVP__len(), + std::vector(static_cast(os), static_cast(os) + os.lengthof()), + static_cast(OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())) + )))); + + if (padding != 0) { + OCTETSTRING os = int2oct(0, padding); + p_encoding_buffer.put_string(os); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_destination_host: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_codec::encode_auth_session_state(const LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_auth_session_state: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // TODO Group + + // Encode AVP header + int padding = 0; + if (encode_avp_header(p_avp.aVP__Header(), &padding, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_codec::encode_auth_session_state: Failed to encode AVP header"); + return -1; + } + + int conv = p_avp.aVP__Data().as_int(); + std::vector v; + unsigned char c = static_cast((conv >> 24) & 0xFF); + v.push_back(c); + p_encoding_buffer.put_c(c); + c = static_cast((conv >> 16) & 0xFF); + p_encoding_buffer.put_c(c); + v.push_back(c); + c = static_cast((conv >> 8) & 0xFF); + p_encoding_buffer.put_c(c); + v.push_back(c); + c = static_cast(conv & 0xFF); + p_encoding_buffer.put_c(c); + v.push_back(c); + + _avps.insert( + std::make_pair >( + p_avp.aVP__Header().aVP__Code(), + std::unique_ptr( + new avp( + p_avp.aVP__Header().aVP__Code(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().m__bit()[0].get_bit()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().p__bit()[0].get_bit()) ? 0x01 : 0x00, + p_avp.aVP__Header().aVP__len(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? static_cast(static_cast(*p_avp.aVP__Header().aVP__vid().get_opt_value())) : 0, + p_avp.aVP__Header().aVP__len(), + v, + static_cast(OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())) + )))); + + if (padding != 0) { + OCTETSTRING os = int2oct(0, padding); + p_encoding_buffer.put_string(os); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_auth_session_state: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_codec::encode_auth_Application_Id(const LibDiameter__Types__Base__AVPs::Auth__Application__Id__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_auth_Application_Id: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // TODO Group + + // Encode AVP header + int padding = 0; + if (encode_avp_header(p_avp.aVP__Header(), &padding, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_codec::encode_auth_Application_Id: Failed to encode AVP header"); + return -1; + } + + int conv = p_avp.aVP__Data(); + std::vector v; + unsigned char c = static_cast((conv >> 24) & 0xFF); + v.push_back(c); + p_encoding_buffer.put_c(c); + c = static_cast((conv >> 16) & 0xFF); + p_encoding_buffer.put_c(c); + v.push_back(c); + c = static_cast((conv >> 8) & 0xFF); + p_encoding_buffer.put_c(c); + v.push_back(c); + c = static_cast(conv & 0xFF); + p_encoding_buffer.put_c(c); + v.push_back(c); + + _avps.insert( + std::make_pair >( + p_avp.aVP__Header().aVP__Code(), + std::unique_ptr( + new avp( + p_avp.aVP__Header().aVP__Code(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().m__bit()[0].get_bit()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().p__bit()[0].get_bit()) ? 0x01 : 0x00, + p_avp.aVP__Header().aVP__len(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? static_cast(static_cast(*p_avp.aVP__Header().aVP__vid().get_opt_value())) : 0, + p_avp.aVP__Header().aVP__len(), + v, + static_cast(OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())) + )))); + + if (padding != 0) { + OCTETSTRING os = int2oct(0, padding); + p_encoding_buffer.put_string(os); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_auth_Application_Id: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_codec::encode_framed_IP_Address(const LibDiameter__Types__Base__AVPs::Framed__IP__Address__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_framed_IP_Address: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // TODO Group + + // Encode AVP header + int padding = 0; + if (encode_avp_header(p_avp.aVP__Header(), &padding, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_codec::encode_framed_IP_Address: Failed to encode AVP header"); + return -1; + } + + _avps.insert( + std::make_pair >( + p_avp.aVP__Header().aVP__Code(), + std::unique_ptr( + new avp( + p_avp.aVP__Header().aVP__Code(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().m__bit()[0].get_bit()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().p__bit()[0].get_bit()) ? 0x01 : 0x00, + p_avp.aVP__Header().aVP__len(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? static_cast(static_cast(*p_avp.aVP__Header().aVP__vid().get_opt_value())) : 0, + p_avp.aVP__Header().aVP__len(), + std::vector(static_cast(p_avp.aVP__Data()), static_cast(p_avp.aVP__Data()) + p_avp.aVP__Data().lengthof()), + static_cast(OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())) + )))); + + if (padding != 0) { + OCTETSTRING os = int2oct(0, padding); + p_encoding_buffer.put_string(os); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_framed_IP_Address: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_codec::encode_media_Component_Description(const LibDiameter__Types__Rx__AVPs::Media__Component__Description__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_media_Component_Description: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // TODO Group + + // Encode AVP header + int padding = 0; + + loggers::get_instance().log_msg("<<< diameter_codec::encode_media_Component_Description: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_codec::encode_avp_header(const LibDiameter__Types__Base__AVPs::AVP__Header& p_header, int* p_padding, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_avp_header: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + int total_length = 4 + 4 + p_header.aVP__len(); + loggers::get_instance().log("diameter_codec::encode_avp_header: total_length: '%d'", total_length); + + if (p_header.aVP__vid().is_present()) { + total_length += 4; + } + int send_length = total_length; + if ((total_length % 4) != 0) { + total_length = (total_length / 4 + 1) * 4; + *p_padding = total_length - send_length; + } + loggers::get_instance().log("diameter_codec::encode_avp_header: send_length: '%d'", send_length); + loggers::get_instance().log("diameter_codec::encode_avp_header: total_length after padding: '%d'", total_length); + loggers::get_instance().log("diameter_codec::encode_avp_header: *p_padding: '%d'", *p_padding); + + int conv = p_header.aVP__Code(); + p_encoding_buffer.put_c(static_cast((conv >> 24) & 0xFF)); + p_encoding_buffer.put_c(static_cast((conv >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((conv >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(conv & 0xFF)); + + unsigned char flags = 0x00; + if (p_header.aVP__vid().is_present()) { + flags |= 0x80; + } + if (p_header.aVP__flags().m__bit()[0].get_bit()) { + flags |= 0x40; + + } + if (p_header.aVP__flags().p__bit()[0].get_bit()) { + flags |= 0x20; + + } + p_encoding_buffer.put_c(flags); + + conv = send_length; + p_encoding_buffer.put_c(static_cast((send_length >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((send_length >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(send_length & 0xFF)); + + if (p_header.aVP__vid().is_present()) { + conv = static_cast(*p_header.aVP__vid().get_opt_value()); + p_encoding_buffer.put_c(static_cast((conv >> 24) & 0xFF)); + p_encoding_buffer.put_c(static_cast((conv >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((conv >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(conv & 0xFF)); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_avp_header: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_codec::decode_header(TTCN_Buffer& p_decoding_buffer, LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params) { + loggers::get_instance().log(">>> diameter_codec::decode_header: '%p'", _start); + + // Sanity check + if (p_decoding_buffer.get_len() < 20) { // DiameterHeader size + loggers::get_instance().warning("diameter_codec::decode: Wrong packet length for daimeter message"); + return -1; + } + + _start = static_cast(p_decoding_buffer.get_data()); + _avps.clear(); // unique_ptr class manages deletion of resources + + p_header.version() = static_cast(*_start++ & 0xFF); + p_header.msglen() = static_cast(static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + // Resize the docoding buffer + if ((int)p_header.msglen() > p_decoding_buffer.get_len()) { + loggers::get_instance().warning("diameter_codec::decode: Resize docoding buffer: '%d' to '%d'", p_header.msglen(), p_decoding_buffer.get_len()); + p_header.msglen() = p_decoding_buffer.get_len(); + } + _end = static_cast(p_decoding_buffer.get_data()) + p_header.msglen(); + loggers::get_instance().log("diameter_codec::decode: _end: '%p' - offset: '%d'", _end, static_cast(_end - _start)); + loggers::get_instance().log_to_hexa("diameter_codec::decode: diameter message:", _start, static_cast(_end - _start)); + + p_header.cmdflags().r__bit() = int2bit(static_cast(static_cast(*_start & 0x80) != 0), 1); + p_header.cmdflags().p__bit() = int2bit(static_cast(static_cast(*_start & 0x40) != 0), 1); + p_header.cmdflags().e__bit() = int2bit(static_cast(static_cast(*_start & 0x20) != 0), 1); + p_header.cmdflags().t__bit() = int2bit(static_cast(static_cast(*_start & 0x10) != 0), 1); + p_header.cmdflags().reserved__bits() = int2bit(static_cast(*_start++ & 0x0F), 4); + + params::const_iterator it = p_params.find(std::string("Request")); + boolean is_request = true; + if (it != p_params.cend()) { + is_request = it->second.compare("1") == 0; + } + p_header.cmdcode() = LibDiameter__TypesAndValues::Command__Code::str_to_enum( + command_code_2_enumerated( + static_cast(static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)), + static_cast(is_request) + ).c_str() + ); + + p_header.applid() = static_cast(static_cast(*_start++ & 0xFF) << 24 | static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + + p_header.hopid() = static_cast(static_cast(*_start++ & 0xFF) << 24 | static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + + p_header.endid() = static_cast(static_cast(*_start++ & 0xFF) << 24 | static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + + loggers::get_instance().log_msg("diameter_codec::decode_header: p_header=", p_header); + + return 0; +} // End of method decode_header + +int diameter_codec::decode_avps(TTCN_Buffer& p_decoding_buffer, const LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params) { + loggers::get_instance().log(">>> diameter_codec::decode_avps: '%p'", _start); + + while (_start < _end) { + avp* avp_ptr = nullptr; + if (decode_avp(p_decoding_buffer, p_header, p_params, &avp_ptr) == -1) { + loggers::get_instance().log("diameter_codec::decode_avps: Failed to decode AVP: current position: '%p' - offset:'%d' - value:'0x%02x'", _start, reinterpret_cast(_end) - reinterpret_cast(_start), static_cast(*_start)); + return -1; + } + _avps.insert(std::make_pair >(avp_ptr->get_code(), std::unique_ptr(avp_ptr))); + } // End of 'while' statemement + loggers::get_instance().log(">>> diameter_codec::decode_avps: No more AVP to decode: '%p' / '%p'", _start, _end); + + return 0; +} // End of method decode_avps + +int diameter_codec::decode_avp(TTCN_Buffer& p_decoding_buffer, const LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params, avp** avp_ptr) { + loggers::get_instance().log(">>> diameter_codec::decode_avp: '%p'", _start); + + // Sanity checks + if (static_cast((_end - _start)) < 8) { + loggers::get_instance().warning("diameter_codec::decode_avp: Not enought bytes for AVP decoding"); + return -1; + } + + int code = static_cast(static_cast(*_start++ & 0xFF) << 24 | static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + loggers::get_instance().log("diameter_codec::decode_avp: code:'%d'", code); + unsigned char vendor_specific = static_cast(static_cast(*_start & 0x80) != 0); + loggers::get_instance().log("diameter_codec::decode_avp: vendor_specific:'0x%x'", vendor_specific); + unsigned char mandatory = static_cast(static_cast(*_start & 0x40) != 0); + loggers::get_instance().log("diameter_codec::decode_avp: mandatory:'0x%x'", mandatory); + unsigned char protected_ = static_cast(static_cast(*_start++ & 0x20) != 0); + loggers::get_instance().log("diameter_codec::decode_avp: protected_:'0x%x'", protected_); + int length = static_cast(static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + loggers::get_instance().log("diameter_codec::decode_avp: length:'%d'", length); + + int vendor_id = 0; + int payload_length = length; + if (vendor_specific) { + vendor_id = static_cast(static_cast(*_start++ & 0xFF) << 24 | static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + payload_length -= 12; + } else { + payload_length -= 8; + } + loggers::get_instance().log("diameter_codec::decode_avp: payload_length:'%d'", payload_length); + std::vector payload(_start, _start + payload_length); + + // if (length > static_cast(_end - _start)) { + // loggers::get_instance().warning("diameter_codec::decode_avp: Resize docoding buffer: '%d' to '%d'", length, static_cast(_end - _start)); + // length = static_cast(_end - _start); + // } + + int encoded_length = length; + if ((encoded_length % 4) !=0) { + encoded_length = (encoded_length / 4 + 1) * 4; + } + loggers::get_instance().log("diameter_codec::decode_avp: encoded_length:'%d'", encoded_length); + + loggers::get_instance().log("diameter_codec::decode_avp: encoded_length:'%d'", encoded_length - length); + loggers::get_instance().log("diameter_codec::decode_avp: payload_length + (encoded_length - length):'%d'", payload_length + (encoded_length - length)); + _start = _start + payload_length + (encoded_length - length); + loggers::get_instance().log("diameter_codec::decode_avp: new _start:'%p'", _start); + + *avp_ptr = new avp(code, vendor_specific, mandatory, protected_, length, vendor_id, encoded_length, payload); + + return 0; +} + +int diameter_codec::decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) { + loggers::get_instance().log("diameter_codec::decode_session_id: looking for '%d", AVP_Session_Id_AVP); + const std::unique_ptr& avp_ptr = get_avp(AVP_Session_Id_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_codec::decode_session_id: AVP is missing"); + return -1; + } + avp_ptr->decode_session_id(p_avp); + loggers::get_instance().log_msg("diameter_codec::decode_session_id: ", p_avp); + + return 0; +} + +int diameter_codec::decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) { + loggers::get_instance().log("diameter_codec::decode_auth_session_state: looking for '%d", AVP_Auth_Session_State_AVP); + const std::unique_ptr& avp_ptr = get_avp(AVP_Auth_Session_State_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_codec::decode_auth_session_state: AVP is missing"); + return -1; + } + avp_ptr->decode_auth_session_state(p_avp); + loggers::get_instance().log_msg("diameter_codec::decode_auth_session_state: ", p_avp); + + return 0; +} + +int diameter_codec::decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) { + loggers::get_instance().log("diameter_codec::decode_origin_host: looking for '%d", AVP_Origin_Host_AVP); + const std::unique_ptr& avp_ptr = get_avp(AVP_Origin_Host_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_codec::decode_origin_host: AVP is missing"); + return -1; + } + avp_ptr->decode_origin_host(p_avp); + loggers::get_instance().log_msg("diameter_codec::decode_origin_host: ", p_avp); + + return 0; +} + +int diameter_codec::decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) { + loggers::get_instance().log("diameter_codec::decode_destination_host: looking for '%d", AVP_Destination_Host_AVP); + const std::unique_ptr& avp_ptr = get_avp(AVP_Destination_Host_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_codec::decode_destination_host: AVP is missing"); + return -1; + } + avp_ptr->decode_destination_host(p_avp); + loggers::get_instance().log_msg("diameter_codec::decode_destination_host: ", p_avp); + + return 0; +} + +int diameter_codec::decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) { + loggers::get_instance().log("diameter_codec::decode_origin_realm: looking for '%d", AVP_Origin_Realm_AVP); + const std::unique_ptr& avp_ptr = get_avp(AVP_Origin_Realm_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_codec::decode_origin_realm: AVP is missing"); + return -1; + } + avp_ptr->decode_origin_realm(p_avp); + loggers::get_instance().log_msg("diameter_codec::decode_origin_realm: ", p_avp); + + return 0; +} + +int diameter_codec::decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) { + loggers::get_instance().log("diameter_codec::decode_destination_realm: looking for '%d", AVP_Destination_Realm_AVP); + const std::unique_ptr& avp_ptr = get_avp(AVP_Destination_Realm_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_codec::decode_destination_realm: AVP is missing"); + return -1; + } + avp_ptr->decode_destination_realm(p_avp); + loggers::get_instance().log_msg("diameter_codec::decode_destination_realm: ", p_avp); + + return 0; +} + +int diameter_codec::decode_auth_Application_Id(LibDiameter__Types__Base__AVPs::Auth__Application__Id__AVP& p_avp) { + loggers::get_instance().log("diameter_codec::decode_auth_Application_Id: looking for '%d", AVP_Auth_Application_Id_AVP); + const std::unique_ptr& avp_ptr = get_avp(AVP_Auth_Application_Id_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_codec::decode_auth_Application_Id: AVP is missing"); + return -1; + } + avp_ptr->decode_auth_Application_Id(p_avp); + loggers::get_instance().log_msg("diameter_codec::decode_auth_Application_Id: ", p_avp); + + return 0; +} + +int diameter_codec::decode_framed_IP_Address(LibDiameter__Types__Base__AVPs::Framed__IP__Address__AVP& p_avp) { + loggers::get_instance().log("diameter_codec::decode_framed_IP_Address: looking for '%d", AVP_Framed_IP_Address_AVP); + const std::unique_ptr& avp_ptr = get_avp(AVP_Framed_IP_Address_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_codec::decode_framed_IP_Address: AVP is missing"); + return -1; + } + avp_ptr->decode_framed_IP_Address(p_avp); + loggers::get_instance().log_msg("diameter_codec::decode_decode_framed_IP_Addressauth_Application_Id: ", p_avp); + + return 0; +} + +int diameter_codec::decode_af_Application_Identifier(LibDiameter__Types__Rx__AVPs::AF__Application__Identifier__AVP& p_avp) { + loggers::get_instance().log("diameter_codec::decode_af_Application_Identifier: looking for '%d", AVP_AF_Application_Identifier_AVP); + const std::unique_ptr& avp_ptr = get_avp(AVP_AF_Application_Identifier_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_codec::decode_af_Application_Identifier: AVP is missing"); + return -1; + } + avp_ptr->decode_af_Application_Identifier(p_avp); + loggers::get_instance().log_msg("diameter_codec::decode_af_Application_Identifier: ", p_avp); + + return 0; +} + +int diameter_codec::decode_media_Component_Description(LibDiameter__Types__Rx__AVPs::Media__Component__Description__AVP& p_avp) { + loggers::get_instance().log("diameter_codec::decode_media_Component_Description: looking for '%d", AVP_Media_Component_Description_AVP); + const std::unique_ptr& avp_ptr = get_avp(AVP_Media_Component_Description_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_codec::decode_media_Component_Description: AVP is missing"); + return -1; + } + avp_ptr->decode_media_Component_Description(p_avp); + std::map > avps; + if (decode_avps_from_payload(avp_ptr->get_payload(), avps) == -1) { + loggers::get_instance().warning("diameter_codec::decode_media_Component_Description: Failed to decode grouped AVPs"); + return -1; + } + + for (const auto& it : avps) { + loggers::get_instance().log("diameter_codec::decode_media_Component_Description: Decoding AVP '%d'", it.second->get_code()); + if (it.second->get_code() == AVP_Media_Component_Nr_AVP) { + if (it.second->decode_media_Component_Number(OPTIONAL(p_avp.media__Component__Nr())) == -1) { + loggers::get_instance().warning("diameter_codec::decode_media_Component_Description: Failed to decode Media_Component_Number AVP"); + } + } else if (it.second->get_code() == AVP_Media_Sub_Component_AVP) {//Media__Sub__Component__AVP_aVP__Type + std::map > media_sub_avps_; + if (decode_avps_from_payload(it.second->get_payload(), media_sub_avps_) == -1) { + loggers::get_instance().warning("diameter_codec::decode_media_Component_Description: Failed to decode grouped AVPs"); + p_avp.media__Sub__component().set_to_omit(); + continue; + } + LibDiameter__Types__Rx__AVPs::Media__Component__Description__AVP_media__Sub__component media_sub; + for (const auto& media_sub_it : media_sub_avps_) { + //if media_sub_it.second->get_code() == + } // End of 'for' statement + p_avp.media__Sub__component().set_value(&media_sub); + + } else if (it.second->get_code() == AVP_Media_Type_AVP) { + if (it.second->decode_media_Type(OPTIONAL(p_avp.media__type())) == -1) { + loggers::get_instance().warning("diameter_codec::decode_media_Component_Description: Failed to decode Media_Type AVP"); + } + } else if (it.second->get_code() == AVP_AF_Application_Identifier_AVP) { + if (it.second->decode_af_Application_Identifier(OPTIONAL(p_avp.af__Application__Id())) == -1) { + loggers::get_instance().warning("diameter_codec::decode_media_Component_Description: Failed to decode AF_Application_Identifier AVP"); + } + } + } // End of 'for' statement + + loggers::get_instance().log_msg("diameter_codec::decode_media_Component_Description: ", p_avp); + + return 0; +} + +const std::unique_ptr& diameter_codec::get_avp(const int p_code) { + loggers::get_instance().log(">>> diameter_codec::get_avp: '%d'", p_code); + + if ((_it = _avps.find(p_code)) == _avps.cend()) { + loggers::get_instance().log("diameter_codec::get_avp: Failed to retrieve AVP '%d'", p_code); + return _nullptr; + } + + loggers::get_instance().log("diameter_codec::get_avp: got AVP '%d'", _it->second->get_code()); + return _it->second; +} + +std::string diameter_codec::command_code_2_enumerated(const int p_code, const boolean p_request_flag) { + + std::string code_enum; + if(p_request_flag) { + switch(p_code){ + case Code_CE: code_enum.assign("CER_E"); break; + case Code_RA: code_enum.assign("RAR_E"); break; + case Code_AC: code_enum.assign("ACR_E"); break; + case Code_AS: code_enum.assign("ASR_E"); break; + case Code_ST: code_enum.assign("STR_E"); break; + case Code_DW: code_enum.assign("DWR_E"); break; + case Code_DP: code_enum.assign("DPR_E"); break; + //CxDx + case Code_UA: code_enum.assign("UAR_E"); break; + case Code_SA: code_enum.assign("SAR_E"); break; + case Code_LI: code_enum.assign("LIR_E"); break; + case Code_MA: code_enum.assign("MAR_E"); break; + case Code_RT: code_enum.assign("RTR_E"); break; + case Code_PP: code_enum.assign("PPR_E"); break; + + /* Codes on Sh/Dh interface */ + case Code_UD: code_enum.assign("UDR_E"); break;// UDR User-Data-Request AS->HSS UDR (306) + case Code_PU: code_enum.assign("PUR_E"); break;// PUR Profile-Update-Request AS->HSS PUR (307) + case Code_SN: code_enum.assign("SNR_E"); break;// SNR Subscribe-Notifications-Request AS->HSS SNR (308) + case Code_PN: code_enum.assign("PNR_E"); break;// PNR Profile-Notification-Request HSS->AS + + //Rx + case Code_AA: code_enum.assign("AAR_E"); break; + //4006 + case Code_CC: code_enum.assign("CCR_E"); break; + + //s6a + case Code_UL: code_enum.assign("ULR_E"); break; // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3-4 + case Code_CL: code_enum.assign("CLR_E"); break; // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7-8 + case Code_AI: code_enum.assign("AIR_E"); break; // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5-6 + case Code_ID: code_enum.assign("IDR_E"); break; // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9-10 + case Code_DS: code_enum.assign("DSR_E"); break; // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11-12 + case Code_PUE: code_enum.assign("PUER_E"); break; // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13-14 + case Code_RS: code_enum.assign("RSR_E"); break; // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15-16 + case Code_NO: code_enum.assign("NOR_E"); break; // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17-18 + } + } else { + switch(p_code) { + case Code_CE: code_enum.assign("CEA_E"); break; + case Code_RA: code_enum.assign("RAA_E"); break; + case Code_AC: code_enum.assign("ACA_E"); break; + case Code_AS: code_enum.assign("ASA_E"); break; + case Code_ST: code_enum.assign("STA_E"); break; + case Code_DW: code_enum.assign("DWA_E"); break; + case Code_DP: code_enum.assign("DPA_E"); break; + //CxDx + case Code_UA: code_enum.assign("UAA_E"); break; + case Code_SA: code_enum.assign("SAA_E"); break; + case Code_LI: code_enum.assign("LIA_E"); break; + case Code_MA: code_enum.assign("MAA_E"); break; + case Code_RT: code_enum.assign("RTA_E"); break; + case Code_PP: code_enum.assign("PPA_E"); break; + + /* Codes on Sh/Dh interface */ + case Code_UD: code_enum.assign("UDA_E"); break;// UDR User-Data-Request AS->HSS UDR (306) + case Code_PU: code_enum.assign("PUA_E"); break;// PUR Profile-Update-Request AS->HSS PUR (307) + case Code_SN: code_enum.assign("SNA_E"); break;// SNR Subscribe-Notifications-Request AS->HSS SNR (308) + case Code_PN: code_enum.assign("PNA_E"); break;// PNR Profile-Notification-Request HSS->AS + //Rx + case Code_AA: code_enum.assign("AAA_E"); break; + //4006 + case Code_CC: code_enum.assign("CCA_E"); break; + + //S6a + case Code_UL: code_enum.assign("ULA_E"); break; // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3-4 + case Code_CL: code_enum.assign("CLA_E"); break; // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7-8 + case Code_AI: code_enum.assign("AIA_E"); break; // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5-6 + case Code_ID: code_enum.assign("IDA_E"); break; // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9-10 + case Code_DS: code_enum.assign("DSA_E"); break; // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11-12 + case Code_PUE: code_enum.assign("PUEA_E"); break; // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13-14 + case Code_RS: code_enum.assign("RSA_E"); break; // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15-16 + case Code_NO: code_enum.assign("NOA_E"); break; // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17-1 + } + } + return code_enum; +} // End of method command_code_2_enumerated + +const int diameter_codec::_command_codes[] = { + /* Ref: RFC3588 p.3.1 */ + + diameter_codec::Code_CE, // Capabilities-Exchange-Request CER (257) + diameter_codec::Code_CE, // Capabilities-Exchange-Answer CEA (257) + diameter_codec::Code_RA, // Re-Auth-Request RAR (258) + diameter_codec::Code_RA, // Re-Auth-Answer RAA (258) + /**/ + diameter_codec::Code_AC, // Accounting-Request ACR(271) + diameter_codec::Code_AC, // Accounting-Answer ACA (271) + /**/ + diameter_codec::Code_AS, // Abort-Session-Request ASR (274) + diameter_codec::Code_AS, // Abort-Sesion-Answer ASA (274) + diameter_codec::Code_ST, // Session-Termination-Request STR (275) + diameter_codec::Code_ST, // Session-Termination-Answer STA (275) +/**/ + diameter_codec::Code_DW, // Device-Watchdog-Request DWR (280) + diameter_codec::Code_DW, // Device-Watchdog-Answer DWA (280) + diameter_codec::Code_DP, // Disconnect-Peer-Request DPR (282) + diameter_codec::Code_DP, // Disconnect-Peer-Answer DPA (282) + +/* Codes on Cx */ + diameter_codec::Code_UA, // User-Authorization-Request UAR 300 + diameter_codec::Code_UA, // User-Authorization-Answer UAA 300 + diameter_codec::Code_SA, // Server-Assignment-Request SAR 301 + diameter_codec::Code_SA, // Server-Assignment-Answer SAA 301 + diameter_codec::Code_LI, // Location-Info-Request LIR 302 + diameter_codec::Code_LI, // Location-Info-Answer LIA 302 + diameter_codec::Code_MA, // Multimedia-Auth-Request MAR 303 + diameter_codec::Code_MA, // Multimedia-Auth-Answer MAA 303 + diameter_codec::Code_RT, // Registration-Termination-Request RTR 304 + diameter_codec::Code_RT, // Registration-Termination-Answer RTA 304 + diameter_codec::Code_PP, // Push-Profile-Request PPR 305 + diameter_codec::Code_PP, // Push-Profile-Answer PPA 305 + +/* Codes on Sh/Dh interface */ + diameter_codec::Code_UD, // UDR User-Data-Request AS->HSS 306 + diameter_codec::Code_UD, // UDA User-Data-Answer HSS->AS 306 + diameter_codec::Code_PU, // PUR Profile-Update-Request AS->HSS 307 + diameter_codec::Code_PU, // PUA Profile-Update-Answer HSS->AS 307 + diameter_codec::Code_SN, // SNR Subscribe-Notifications-Request AS->HSS 308 + diameter_codec::Code_SN, // SNA Subscribe-Notifications-Answer HSS->AS 308 + diameter_codec::Code_PN, // PNR Profile-Notification-Request HSS->AS 309 + diameter_codec::Code_PN, // PNA Profile-Notification-Answer AS->HSS 309 + +/* Codes on Rx interface */ + diameter_codec::Code_AA, // AAR Auth-Accounting-Request 265 + diameter_codec::Code_AA, // AAA Auth-Accounting-Request 265 + +/*RFC4006*/ + diameter_codec::Code_CC, // CCR Credit-Control-Request 272 + diameter_codec::Code_CC, // CCA Credit-Control-Answer 272 + + /* Codes on S6a interface - TS 129 272 */ + diameter_codec::Code_UL, // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3 + diameter_codec::Code_UL, // Update-Location-Answer ULA (316)- Ref: TS 129 272 7.2.4 + diameter_codec::Code_CL, // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7 + diameter_codec::Code_CL, // Cancel-Location-Answer CLA (317)- Ref: TS 129 272 7.2.8 + diameter_codec::Code_AI, // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5 + diameter_codec::Code_AI, // Authentication-Information-Answer AIA (318)- Ref: TS 129 272 7.2.6 + diameter_codec::Code_ID, // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9 + diameter_codec::Code_ID, // Insert-Subscriber-Data-Answer IDA (319)- Ref: TS 129 272 7.2.10 + diameter_codec::Code_DS, // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11 + diameter_codec::Code_DS, // Delete-Subscriber-Data-Answer DSA (320)- Ref: TS 129 272 7.2.12 + diameter_codec::Code_PUE, // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13 + diameter_codec::Code_PUE, // Purge-UE-Answer PUA (321)- Ref: TS 129 272 7.2.14 + diameter_codec::Code_RS, // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15 + diameter_codec::Code_RS, // Reset-Answer DSA (322)- Ref: TS 129 272 7.2.16 + diameter_codec::Code_NO, // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17 + diameter_codec::Code_NO // Notify-Answer NOA (323)- Ref: TS 129 272 7.2.18 +}; + +int diameter_codec::decode_avps_from_payload(const std::vector& p_payload, std::map >& p_avps) { + loggers::get_instance().log(">>> diameter_codec::decode_avps_from_payload: '%p'", p_payload.data()); + + TTCN_Buffer b(OCTETSTRING(p_payload.size(), static_cast(p_payload.data()))); + loggers::get_instance().log_to_hexa("diameter_codec::decode_avps_from_payload: : b: ", b); + _start = static_cast(b.get_data()); + _end = _start + b.get_len(); + loggers::get_instance().log("diameter_codec::decode_avps_from_payload: _end: '%p' - offset: '%d'", _end, static_cast(_end - _start)); + loggers::get_instance().log_to_hexa("diameter_codec::decode_avps_from_payload: diameter message:", _start, static_cast(_end - _start)); + + while (_start < _end) { + avp* avp_ptr = nullptr; + if (decode_avp(b, LibDiameter__TypesAndValues::DiameterHeader(), params(), &avp_ptr) == -1) { + loggers::get_instance().log("diameter_codec::decode_avps_from_payload: Failed to decode AVP: current position: '%p' - offset:'%d' - value:'0x%02x'", _start, reinterpret_cast(_end) - reinterpret_cast(_start), static_cast(*_start)); + return -1; + } + p_avps.insert(std::make_pair >(avp_ptr->get_code(), std::unique_ptr(avp_ptr))); + } // End of 'while' statemement + loggers::get_instance().log(">>> diameter_codec::decode_avps_from_payload: No more AVP to decode: '%p' / '%p'", _start, _end); + + return 0; +} \ No newline at end of file diff --git a/ccsrc/Protocols/Diameter/diameter_codec.hh b/ccsrc/Protocols/Diameter/diameter_codec.hh new file mode 100644 index 0000000000000000000000000000000000000000..af0b206486db6acae3a5d6ed239d685eaad44860 --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_codec.hh @@ -0,0 +1,557 @@ +#pragma once + +#include +#include + +#include "codec_gen.hh" +#include "params.hh" + +#include "avp.hh" + +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibDiameter__TypesAndValues { + class DiameterHeader; //! Forward declaration of TITAN class +} + +namespace LibDiameter__Types__Rx__AVPs { + class Media__Component__Description__AVP; //! Forward declaration of TITAN class +} + +class diameter_codec { + std::map > _avps; + std::map >::const_iterator _it; + std::unique_ptr _nullptr; + const unsigned char* _start; + const unsigned char* _end; + +public: + explicit diameter_codec() : _avps(), _it(), _nullptr(nullptr), _start(nullptr) { }; + virtual ~diameter_codec(); + + int encode_header(const LibDiameter__TypesAndValues::DiameterHeader& p_header, TTCN_Buffer& p_encoding_buffer); + int encode_session_id(const LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + int encode_auth_session_state(const LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + int encode_origin_host(const LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + int encode_origin_realm(const LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + int encode_destination_host(const LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + int encode_auth_Application_Id(const LibDiameter__Types__Base__AVPs::Auth__Application__Id__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + int encode_framed_IP_Address(const LibDiameter__Types__Base__AVPs::Framed__IP__Address__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + int encode_media_Component_Description(const LibDiameter__Types__Rx__AVPs::Media__Component__Description__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + + int decode_header(TTCN_Buffer& p_decoding_buffer, LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params); + int decode_avps(TTCN_Buffer& p_decoding_buffer, const LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params); + + const std::unique_ptr& get_avp(const int p_code); + +public: + int encode_avp_header(const LibDiameter__Types__Base__AVPs::AVP__Header& p_header, int* p_padding, TTCN_Buffer& p_encoding_buffer); + + int decode_avp(TTCN_Buffer& p_decoding_buffer, const LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params, avp** avp_ptr); + + int decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp); + int decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp); + int decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp); + int decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp); + int decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp); + int decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp); + int decode_auth_Application_Id(LibDiameter__Types__Base__AVPs::Auth__Application__Id__AVP& p_avp); + int decode_framed_IP_Address(LibDiameter__Types__Base__AVPs::Framed__IP__Address__AVP& p_avp); + int decode_af_Application_Identifier(LibDiameter__Types__Rx__AVPs::AF__Application__Identifier__AVP& p_avp); + + + + int decode_media_Component_Description(LibDiameter__Types__Rx__AVPs::Media__Component__Description__AVP& p_avp); + + std::string command_code_2_enumerated(const int p_code, const boolean p_request_flag); + + /** Command code of Request/Answer */ + static const int Code_CE=257;// Capabilities-Exchange + static const int Code_RA=258;// Re-Auth + static const int Code_AC=271;// Accounting + static const int Code_AS=274;// Abort-Session + static const int Code_ST=275;// Session-Termination + static const int Code_DW=280;// Device-Watchdog + static const int Code_DP=282;// Disconnect-Peer + + /* Codes on Cx */ + static const int Code_UA=300;// User-Authorization + static const int Code_SA=301;// Server-Assignment-Request SAR (284 in RFC4740 or 301 in TS 129 229) + static const int Code_LI=302;// Location-Info-Request LIR (285 in RFC4740 or 302 in TS 129 229) + static const int Code_MA=303;// Multimedia-Auth-Request MAR (286 in RFC4740 or 303 in TS 129 229) + static const int Code_RT=304;// Registration-Termination-Request RTR (287 in RFC4740 or 304 in TS 129 229) + static const int Code_PP=305;// Push-Profile-Request PPR (288 in RFC4740 or 305 in TS 129 229) + + /* Codes on Sh/Dh interface */ + static const int Code_UD=306;// UDR User-Data-Request AS->HSS UDR (306) + static const int Code_PU=307;// PUR Profile-Update-Request AS->HSS PUR (307) + static const int Code_SN=308;// SNR Subscribe-Notifications-Request AS->($1) ($2) (308) + static const int Code_PN=309;// PNR Profile-Notification-Request HSS->AS PNR (309) + + /* Codes on Rx interface */ + static const int Code_AA=265;// Auth-Accounting + + /* Codes on Gx interface - RFC4006 and TS 129 212 */ + static const int Code_CC=272;// Credit-Control + + /* Codes on S6a interface - TS 129 272 */ + static const int Code_UL=316; // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3-4 + static const int Code_CL=317; // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7-8 + static const int Code_AI=318; // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5-6 + static const int Code_ID=319; // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9-10 + static const int Code_DS=320; // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11-12 + static const int Code_PUE=321; // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13-14 + static const int Code_RS=322; // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15-16 + static const int Code_NO=323; // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17-18 + + + /*RFC3588 AVP codes*/ + const int AVP_Accounting_Realtime_Required_AVP = 483; //Ref: RFC3588 9.8.7. Accounting-Realtime-Required AVP + const int AVP_Accounting_Record_Number_AVP = 485; //Ref: RFC3588 9.8.3. Accounting-Record-Number AVP + const int AVP_Accounting_Record_Type_AVP = 480; //Ref: RFC3588 9.8.1. Accounting-Record-Type AVP + const int AVP_Accounting_Sub_Session_Id_AVP = 287; //Ref: RFC3588 9.8.6. Accounting-Sub-Session-Id AVP + const int AVP_Acct_Application_Id_AVP = 259; //Ref: RFC3588 6.9. Acct-Application-Id AVP + const int AVP_Acct_Interim_Interval_AVP = 85; //Ref: RFC3588 9.8.2. Acct-Interim-Interval + const int AVP_Acct_Multi_Session_Id_AVP = 50; //Ref: RFC3588 9.8.5. Acct-Multi-Session-Id AVP + const int AVP_Acct_Session_Id_AVP = 44; //Ref: RFC3588 9.8.4. Acct-Session-Id AVP + const int AVP_Auth_Application_Id_AVP = 258; //Ref: RFC3588 6.8. Auth-Application-Id AVP + const int AVP_Class_AVP = 25; //Ref: RFC3588 8.20. Class AVP + const int AVP_Destination_Host_AVP = 293; //Ref: RFC3588 6.5. Destination-Host AVP + const int AVP_Destination_Realm_AVP = 283; //Ref: RFC3588 6.6. Destination-Realm AVP + const int AVP_Disconnect_Cause_AVP = 273; //Ref: RFC3588 5.4.3. Disconnect-Cause AVP + const int AVP_Error_Message_AVP = 281; //Ref: RFC3588 7.3. Error-Message AVP + const int AVP_Error_Reporting_Host_AVP = 294; //Ref: RFC3588 7.4. Error-Reporting-Host AVP + const int AVP_Event_Timestamp_AVP = 55; //Ref: RFC3588 8.21. Event-Timestamp AVP + const int AVP_Failed_AVP = 279; //Ref: RFC3588 7.5. Failed-AVP AVP + const int AVP_Firmware_Revision_AVP = 267; //Ref: RFC3588 5.3.4. Firmware-Revision AVP + const int AVP_Host_IP_Address_AVP = 257; //Ref: RFC3588 5.3.5. Host-IP-Address AVP + const int AVP_Inband_Security_Id_AVP = 299; //Ref: RFC3588 6.10. Inband-Security-Id AVP + const int AVP_Origin_Host_AVP = 264; //Ref: RFC3588 6.3. Origin-Host AVP + const int AVP_Origin_Realm_AVP = 296; //Ref: RFC3588 6.4. Origin-Realm AVP + const int AVP_Origin_State_Id_AVP = 278; //Ref: RFC3588 8.16. Origin-State-Id AVP + const int AVP_Product_Name_AVP = 269; //Ref: RFC3588 5.3.7. Product-Name AVP + const int AVP_Proxy_Host_AVP = 280; //Ref: RFC3588 6.7.3. Proxy-Host AVP + const int AVP_Proxy_Info_AVP = 284; //Ref: RFC3588 6.7.2. Proxy-Info AVP + const int AVP_Proxy_State_AVP = 33; //Ref: RFC3588 6.7.4. Proxy-State AVP + const int AVP_Re_Auth_Request_Type_AVP = 285; //Ref: RFC3588 8.12. Re-Auth-Request-Type AVP + const int AVP_Redirect_Host_AVP = 292; //Ref: RFC3588 6.12. Redirect-Host AVP + const int AVP_redirect_Max_Cache_Time_AVP = 262; //Ref: RFC3588 redirect_Max_Cache_Time_AVP is not defined. + const int AVP_Redirect_Host_Usage_AVP = 261; //Ref: RFC3588 6.13. Redirect-Host-Usage AVP + const int AVP_Result_Code_AVP = 268; //Ref: RFC3588 7.1. Result-Code AVP + const int AVP_Route_Record_AVP = 282; //Ref: RFC3588 6.7.1. Route-Record AVP + const int AVP_Session_Id_AVP = 263; //Ref: RFC3588 8.8. Session-Id AVP + const int AVP_Supported_Vendor_Id_AVP = 265; //Ref; RFC3588 5.3.6. Supported-Vendor-Id AVP + const int AVP_Termination_Cause_AVP = 295; //Ref: RFC3588 8.15. Termination-Cause AVP + const int AVP_User_Name_AVP = 1; //Ref: RFC3588 8.14. User-Name AVP + const int AVP_Vendor_Id_AVP = 266; //Ref: RFC3588 5.3.3. Vendor-Id AVP + const int AVP_Vendor_Specific_Appl_Id_AVP = 260; //Ref: RFC3588 6.11. Vendor-Specific-Application-Id AVP + /*end RFC3588 AVP codes*/ + + //RFC4740 AVP codes{ +// const int AVP_Auth_Grace_Period_AVP = 276; //Ref: RFC3588 8.10. Auth-Grace-Period AVP + const int AVP_Auth_Session_State_AVP = 277; //Ref: RFC3588 8.11. Auth-Session-State AVP +// const int AVP_Authorization_Lifetime_AVP = 291; //Ref: RFC3588 8.9. Authorization-Lifetime AVP +// const int AVP_Redirect_Max_Cache_Time_AVP = 262; //Ref: RFC3588 6.14. Redirect-Max-Cache-Time AVP +// const int AVP_SIP_Accounting_Information_AVP = 368; //Ref: RFC4740 9.1. SIP-Accounting-Information AVP +// const int AVP_SIP_Accounting_Server_URI_AVP = 369; //Ref: RFC4740 9.1.1. SIP-Accounting-Server-URI AVP +// const int AVP_SIP_AOR_AVP = 122; //Ref: RFC4740 9.8. SIP-AOR AVP + const int AVP_SIP_Auth_Data_Item_RFC_AVP = 376; //Ref: RFC4740 9.5. SIP-Auth-Data-Item AVP + const int AVP_SIP_Item_Number_AVP = 378; + const int AVP_SIP_Authenticate_RFC_AVP = 379; //Ref: RFC4740 9.5.3. SIP-Authenticate AVP +// const int AVP_SIP_Authentication_Info_AVP = 381; //Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP + const int AVP_SIP_Authentication_Scheme_RFC_AVP = 377; //Ref: RFC4740 9.5.1. SIP-Authentication-Scheme AVP + const int AVP_SIP_Authorization_RFC_AVP = 380; //Ref: RFC4740 9.5.4. SIP-Authorization AVP +// const int AVP_SIP_Credit_Control_Server_URI_AVP = 370; //Ref: RFC4740 9.1.2. SIP-Credit-Control-Server-URI AVP +// const int AVP_SIP_Deregistration_Reason_AVP = 383; //Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP +// const int AVP_SIP_Item_Number_AVP = 378; //Ref: RFC4740 9.5.2 SIP-Item-Number AVP +// const int AVP_SIP_MandatoryCapability_AVP = 373; //Ref: RFC4740 9.3.1. SIP-Mandatory-Capability AVP + const int AVP_SIP_Method_AVP = 393; //Ref: RFC4740 9.14. SIP-Method AVP + const int AVP_SIP_Number_Auth_Items_RFC_AVP = 382; //Ref: RFC4740 9.6. SIP-Number-Auth-Items AVP +// const int AVP_SIP_OptionalCapability_AVP = 374; //Ref: RFC4740 9.3.2. SIP-Optional-Capability AVP +// const int AVP_SIP_Reason_Code_AVP = 384; //Ref: RFC4740 9.7.1. SIP-Reason-Code AVP +// const int AVP_SIP_Reason_Info_AVP = 385; //Ref: RFC4740 9.7.2. SIP-Reason-Info AVP +// const int AVP_SIP_Server_Assignment_Type_AVP = 375; //Ref: RFC4740 9.4. SIP-Server-Assignment-Type AVP +// const int AVP_SIP_Server_Capabilities_AVP = 372; //Ref: RFC4740 9.3. SIP-Server-Capabilities AVP +// const int AVP_SIP_Server_URI_AVP = 371; //Ref: RFC4740 9.2 SIP-Server-URI AVP +// const int AVP_SIP_Supported_User_Data_Type_AVP = 388; //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP +// const int AVP_SIP_User_Authorization_Type_AVP = 387; //Ref: RFC4740 9.10. SIP-User-Authorization-Type AVP +// const int AVP_SIP_User_Data_Already_Available_AVP = 392; //Ref: RFC4740 9.13. SIP-User-Data-Already-Available AVP +// const int AVP_SIP_User_Data_AVP = 389; //Ref: RFC4740 9.12. SIP-User-Data AVP +// const int AVP_SIP_User_Data_Contents_AVP = 391; //Ref: RFC4740 9.12.2. SIP-User-Data-Contents AVP +// const int AVP_SIP_User_Data_Type_AVP = 390; //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP +// const int AVP_SIP_Visited_Network_Id_AVP = 386; //Ref: RFC4740 9.9. SIP-Visited-Network-Id AVP + //end of RFC4740 AVP codes + + const int AVP_Digest_Realm_AVP = 104; + const int AVP_Digest_Nonce_AVP = 105; + const int AVP_Digest_Domain_AVP = 119; + const int AVP_Digest_Opaque_AVP = 116; + const int AVP_Digest_Stale_AVP = 120; + const int AVP_Digest_Algorithm_AVP = 111; + const int AVP_Digest_QoP_AVP = 110; + const int AVP_Digest_HA1_AVP = 121; + const int AVP_Digest_Auth_Param_AVP = 117; + const int AVP_Digest_Username_AVP = 115; + const int AVP_Digest_URI_AVP = 109; + const int AVP_Digest_Response_AVP = 103; + const int AVP_Digest_CNonce_AVP = 113; + const int AVP_Digest_Nonce_Count_AVP = 114; + const int AVP_Digest_Method_AVP = 108; + const int AVP_Digest_Entity_Body_Hash_AVP = 112; + const int AVP_Digest_Nextnonce_AVP = 107; + const int AVP_Digest_Response_Auth_AVP = 106; + + + //RFC4005 AVP codes + const int AVP_Called_Station_Id_AVP = 30; + const int AVP_Framed_IP_Address_AVP = 8; + const int AVP_Framed_IPv6_Prefix_AVP = 97; + const int AVP_Framed_Interface_Id_AVP = 96; + //end of RFC4005 AVP codes + + //RFC4006 AVP codes +// const int AVP_Rating_Group_AVP = 433; //Ref: RFC4006 8.29. Rating-Group AVP +const int AVP_Tariff_Time_Change_AVP = 451; //Ref: RFC4006 8.20. Tariff-Time-Change AVP +// const int AVP_CC_Correlation_Id_AVP = 411; //Ref: RFC4006 8.1. CC-Correlation-Id AVP +const int AVP_CC_Input_Octets_AVP = 412; //Ref: RFC4006 8.24. CC-Input-Octets AVP +const int AVP_CC_Money_AVP = 413; //Ref: RFC4006 8.22. CC-Money AVP +const int AVP_CC_Output_Octets_AVP = 414; //Ref: RFC4006 8.25. CC-Output-Octets AVP + const int AVP_CC_Request_Number_AVP = 415; //Ref: RFC4006 8.2. CC-Request-Number AVP + const int AVP_CC_Request_Type_AVP = 416; //Ref: RFC4006 8.3. CC-Request-Type AVP +const int AVP_CC_Service_Specific_Units_AVP = 417; //Ref: RFC4006 8.26. CC-Service-Specific-Units AVP +const int AVP_CC_Session_Failover_AVP = 418; //Ref: RFC4006 8.4. CC-Session-Failover AVP +// const int AVP_vendIdCC_Sub_Session_Id_AVP = 419; //Ref: RFC4006 8.5. CC-Sub-Session-Id AVP +const int AVP_CC_Time_AVP = 420; //Ref: RFC4006 8.21. CC-Time AVP +const int AVP_CC_Total_Octets_AVP = 421; //Ref: RFC4006 8.23. CC-Total-Octets AVP +const int AVP_CC_Unit_Type_AVP = 454; //Ref: RFC4006 8.32. CC-Unit-Type AVP +// const int AVP_vendIdCheck_Balance_Result_AVP = 422; //Ref: RFC4006 8.6. Check-Balance-Result AVP 12.8. Check-Balance-Result AVP +const int AVP_Cost_Information_AVP = 423; //Ref: RFC4006 8.7. Cost-Information AVP +const int AVP_Cost_Unit_AVP = 424; //Ref: RFC4006 8.12. Cost-Unit AVP +const int AVP_Credit_Control_Failure_Handling_AVP = 427; //Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP +const int AVP_Currency_Code_AVP = 425; //Ref: RFC4006 8.11. Currency-Code AVP +const int AVP_Direct_Debiting_Failure_Handling_AVP = 428; //Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP +const int AVP_Exponent_AVP = 429; //Ref: RFC4006 8.9. Exponent AVP +const int AVP_Filter_Id_AVP = 11; //Ref: RFC4005 6.7. Filter-Id AVP +const int AVP_Final_Unit_Action_AVP = 449; //Ref: RFC4006 8.35. Final-Unit-Action AVP +const int AVP_Final_Unit_Indication_AVP = 430; //Ref: RFC4006 8.34. Final-Unit-Indication AVP +const int AVP_G_S_U_Pool_Identifier_AVP = 453; //Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP +const int AVP_G_S_U_Pool_Reference_AVP = 457; //Ref: RFC4006 8.30. G-S-U-Pool-Reference AVP +const int AVP_Granted_Service_Unit_AVP = 431; //Ref: RFC4006 8.17. Granted-Service-Unit AVP +// const int AVP_vendIdMultiple_Services_Credit_Control_AVP = 456; //Ref: RFC4006 8.16. Multiple-Services-Credit-Control AVP +const int AVP_Multiple_Services_Indicator_AVP = 455; //Ref: RFC4006 8.40. Multiple-Services-Indicator AVP + const int AVP_Redirect_Address_Type_AVP = 433; //Ref: RFC4006 8.38. Redirect-Address-Type AVP + const int AVP_Redirect_Server_Address_AVP = 435; //Ref: RFC4006 8.39. Redirect-Server-Address AVP + const int AVP_Redirect_Server_AVP = 434; //Ref: RFC4006 8.37. Redirect-Server AVP +// const int AVP_vendIdRequested_Action_AVP = 436; //Ref: RFC4006 8.41. Requested-Action AVP +const int AVP_Requested_Service_Unit_AVP = 437; //Ref: RFC4006 8.18. Requested-Service-Unit AVP +const int AVP_Restriction_Filter_Rule_AVP = 438; //Ref: RFC4006 8.36. Restriction-Filter-Rule AVP + const int AVP_Service_Context_Id_AVP = 461; //Ref: RFC4006 8.42. Service-Context-Id AVP + const int AVP_Service_Identifier_AVP = 439; //Ref: RFC4006 8.28. Service-Identifier AVP + const int AVP_Requested_Action_AVP = 436; + // const int AVP_vendIdService_Parameter_Info_AVP = 440; //Ref: RFC4006 8.43. Service-Parameter-Info AVP +// const int AVP_vendIdService_Parameter_Type_AVP = 441; //Ref: RFC4006 8.44. Service-Parameter-Type AVP +// const int AVP_vendIdService_Parameter_Value_AVP = 442; //Ref: RFC4006 8.45. Service-Parameter-Value AVP + const int AVP_Subscription_Id_AVP = 443; //Ref: RFC4006 8.46. Subscription-Id AVP + const int AVP_Subscription_Id_Data_AVP = 444; //Ref: RFC4006 + const int AVP_Subscription_Id_Type_AVP = 450; //Ref: RFC4006 8.47. Subscription-Id-Type AVP + const int AVP_Tariff_Change_Usage_AVP = 452;//Ref: RFC4006 8.27. Tariff-Change-Usage AVP + const int AVP_Rating_Group_AVP = 433; +const int AVP_Unit_Value_AVP = 445; //Ref: RFC4006 8.8. Unit-Value AVP +const int AVP_Used_Service_Unit_AVP = 446; //Ref: RFC4006 8.19. Used-Service-Unit AVP +// const int AVP_vendIdUser_Equipment_Info_AVP = 458; //Ref: RFC4006 8.49. User-Equipment-Info AVP +// const int AVP_vendIdUser_Equipment_Info_Type_AVP = 459; //Ref: RFC4006 8.50. User-Equipment-Info-Type AVP +// const int AVP_vendIdUser_Equipment_Info_Value_AVP = 460; //Ref: RFC4006 8.51. User-Equipment-Info-Value AVP +const int AVP_Validity_Time_AVP = 448; //Ref: RFC4006 8.33. Validity-Time AVP +const int AVP_Value_Digits_AVP = 447; //Ref: RFC4006 8.10. Value-Digits AVP + /*end of RFC4006 AVP codes*/ + + //TS129_229 AVP codes +// const int AVP_vendIdCharging_Information_AVP = 61; //Ref: ETSI TS 129 229 Charging_Information_AVP +// const int AVP_vendIdPrimary_Event_Charging_Function_Name_AVP = 619; //Ref: ETSI TS 129 229 Primary_Event_Charging_Function_Name_AVP +// const int AVP_vendIdSecondary_Event_Charging_Function_Name_AVP = 620; //Ref: ETSI TS 129 229 Secondary_Event_Charging_Function_Name_AVP +// const int AVP_vendIdPrimary_Charging_Collection_Function_Name_AVP = 621; //Ref: ETSI TS 129 229 Primary_Charging_Collection_Function_Name_AVP +// const int AVP_vendIdSecondary_Charging_Collection_Function_Name_AVP = 622; //Ref: ETSI TS 129 229 Secondary_Charging_Collection_Function_Name_AVP + const int AVP_Charging_Rule_Remove_AVP = 1002; + const int AVP_Charging_Rule_Install_AVP = 1001; + const int AVP_Charging_Rule_Report_AVP = 1018; + const int AVP_Routing_Rule_Install_AVP = 1081; + const int AVP_Routing_Rule_Remove_AVP = 1075; + const int AVP_QoS_Information_AVP = 1016; + const int AVP_Default_EPS_Bearer_QoS_AVP = 1049; + const int AVP_Server_Capabilities_AVP = 603; //Ref: ETSI TS 129 229 Server_Capabilities_AVP +// const int AVP_vendIdMandatory_Capability_AVP = 604; //Ref: ETSI TS 129 229 Mandatory_Capability_AVP +// const int AVP_vendIdOptional_Capability_AVP = 605; //Ref: ETSI TS 129 229 Optional_Capability_AVP + const int AVP_IP_CAN_Type_AVP = 1027; + const int AVP_RAT_Type_AVP = 1032; //Ref: ETSI TS 129 212 RAT_Type_AVP + const int AVP_Event_Trigger_AVP = 1006; + const int AVP_Session_Release_Cause_AVP = 1045; + const int AVP_Charging_Rule_Name_AVP = 1005; + const int AVP_AN_GW_Address_AVP = 1050; + + const int AVP_Experimental_Result_AVP = 297; + const int AVP_Experimental_Result_Code_AVP = 298; + const int AVP_User_Data_AVP = 606; + + /*end of TS129_229 AVP codes*/ + + //tS129_329 + const int AVP_Public_Identity_AVP = 601; + const int AVP_Server_Name_AVP = 602; + const int AVP_Feature_List_ID_AVP = 629; // Ref: 3GPP TS 29.229, clause 6.3.30 + const int AVP_Feature_List_AVP = 630; // Ref: 3GPP TS 29.229, clause 6.3.31 + const int AVP_Supported_Features_AVP = 628; // Ref: 3GPP TS 29.329 6.3.11 Supported-Features AVP (See 3GPP TS 29.229, clause 6.3.29) + /*End TS129_329*/ + + //Sh AVP codes + + ////const int AVP_Public_Identity_AVP = 601; + const int AVP_User_Identity_AVP = 700; + const int AVP_MSISDN_AVP= 701; + const int AVP_User_Data_Sh_AVP= 702; + const int AVP_Data_Reference_AVP = 703; + const int AVP_Service_Indication_AVP = 704; + const int AVP_Subs_Req_Type_AVP =705; + const int AVP_Requested_Domain_AVP = 706; + const int AVP_Current_Location_AVP = 707; + const int AVP_Identity_Set_AVP = 708; + const int AVP_Expiry_Time_AVP= 709; + const int AVP_Send_Data_Indication_AVP = 710; + const int AVP_Repository_Data_ID_AVP = 715; + const int AVP_Sequence_Number_AVP = 716; + ////const int AVP_Server_Name_AVP = 602; + ////const int AVP_Supported_Features_AVP = 628; + ////const int AVP_Feature_List_ID_AVP = 629; + ////const int AVP_Feature_List_AVP = 630; + const int AVP_Wildcarded_PSI_AVP = 634; + const int AVP_Wildcarded_IMPU_AVP = 636; + const int AVP_DSAI_Tag_AVP = 711; + ////const int AVP_Experimental_Result_Code_AVP = 298; + ////const int AVP_Experimental_Result_AVP = 297; + ////const int AVP_User_Data_AVP = 606; + //TS129_214 AVP codes + const int AVP_Media_Component_Description_AVP = 517; + const int AVP_Media_Component_Nr_AVP = 518; + const int AVP_Media_Sub_Component_AVP = 519; + const int AVP_AF_Application_Identifier_AVP = 504; + const int AVP_Media_Type_AVP = 520; + const int AVP_AF_Signalling_Protocol_AVP = 529; + const int AVP_Reservation_Priority_AVP = 458; + const int AVP_RS_Bandwidth_AVP = 522; + const int AVP_RR_Bandwidth_AVP = 521; + const int AVP_Codec_Data_AVP = 524; + const int AVP_Flow_Description_AVP = 507; + const int AVP_Flow_Number_AVP = 509; + const int AVP_Flow_Status_AVP = 511; + const int AVP_Flow_Usage_AVP = 512; + const int AVP_Specific_Action_AVP = 513; + const int AVP_Service_Info_Status_AVP = 527; + const int AVP_Rx_Request_Type_AVP = 533; + + //TS129_215 AVP codes + const int AVP_QoS_Rule_Name_AVP = 1054; + const int AVP_Rule_Failure_Code_AVP = 1031; + const int AVP_PDN_Connection_ID_AVP = 1065; + const int AVP_QoS_Rule_Report_AVP = 1055; + const int AVP_QoS_Rule_Install_AVP = 1051; + const int AVP_Multiple_BBERF_Action_AVP = 2204; + const int AVP_Session_Linking_Indicator_AVP = 1064; + const int AVP_Subses_Decision_Info_AVP = 2200; + const int AVP_Subses_Enforcement_Info_AVP = 2201; + const int AVP_Subsession_Id_AVP = 2202; + const int AVP_Subsession_Operation_AVP = 2203; + //End TS129_215 AVP codes + + //TS129_272 AVP codes + const int AVP_ULR_Flags_AVP = 1405; //ref: 7.3.7 ETSI TS 129 272 + const int AVP_ULA_Flags_AVP = 1406; //ref: 7.3.8 + const int AVP_Visited_PLMN_Id_AVP = 1407; //ref: 7.3.9 + const int AVP_UE_SRVCC_Capability_AVP = 1615; //ref: 7.3.130 + const int AVP_SGSN_Number_AVP = 1489; //ref: 7.3.102 + const int AVP_Homogeneous_Support_AVP = 1493; //ref: 7.3.107 + + const int AVP_Context_Identifier_AVP = 1423; //ref: 7.3.27 + const int AVP_Service_Selection_AVP = 493; //ref: 7.3.36 + const int AVP_MIP_Home_Agent_Address_AVP = 334; //ref: 7.3.42 - IETF RFC 4004 7.4 + const int AVP_MIP_Home_Agent_Host_AVP = 348; //ref: 7.3.43 - IETF RFC 4004 7.11 + const int AVP_MIP6_Home_Link_Prefix_AVP = 125; //ref:IETF RFC 5447 4.2.4 + const int AVP_MIP6_Agent_Info_AVP = 486; //ref: 7.3.45 + const int AVP_Visited_Network_Identifier_AVP = 600; //ref: 7.3.105 - TS 129 229 6.3.1 + const int AVP_SIP_Authentication_Context_AVP = 611; + const int AVP_UAR_Flags_AVP = 637; + const int AVP_User_Authorization_Type_AVP = 623; + const int AVP_Server_Assignment_Type_AVP = 614; + const int AVP_User_Data_Already_Available_AVP = 624; + const int AVP_SIP_Digest_Authenticate_AVP = 635; + const int AVP_SCSCF_Restoration_Info_AVP = 639; + const int AVP_Restoration_Info_AVP = 649; + const int AVP_Path_AVP = 640; + const int AVP_Contact_AVP = 641; + const int AVP_Subscription_Info_AVP = 642; + const int AVP_Originating_Request_AVP = 652; + const int AVP_Deregistration_Reason_AVP = 615; + const int AVP_Reason_Code_AVP = 616; + const int AVP_Reason_Info_AVP = 617; + const int AVP_Specific_APN_Info_AVP = 1472; //ref: 7.3.82 + const int AVP_Active_APN_AVP = 1612; //ref: 7.3.127 + const int AVP_Error_Diagnostic_AVP = 1614; //ref: 7.3.128; + const int AVP_Subscriber_Status_AVP = 1424; + const int AVP_Operator_Determined_Barring_AVP = 1425; + const int AVP_HPLMN_ODB_AVP = 1418; + const int AVP_Access_Restriction_Data_AVP = 1426; + const int AVP_APN_OI_Replacement_AVP = 1427; + const int AVP_Max_Requested_Bandwidth_UL_AVP = 516; + const int AVP_Max_Requested_Bandwidth_DL_AVP = 515; + const int AVP_APN_Aggregate_Max_Bitrate_UL_AVP = 1041; + const int AVP_APN_Aggregate_Max_Bitrate_DL_AVP = 1040; + const int AVP_AMBR_AVP = 1435; + + const int AVP_All_APN_Conf_Included_Id_AVP = 1428; + const int AVP_APN_Configuration_Profile_AVP = 1429; + const int AVP_PDN_Type_AVP = 1456; + const int AVP_QoS_Class_Identifier_AVP=1028; + const int AVP_Priority_Level_AVP = 1046; + const int AVP_Pre_emption_Capability_AVP = 1047; + const int AVP_Pre_emption_Vulnerability_AVP = 1048; + + const int AVP_Allocation_Retention_Priority_AVP =1034; + const int AVP_EPS_Subscribed_QoS_Profile_AVP = 1431; + const int AVP_APN_Configuration_AVP = 1430; + const int AVP_GMLC_Address_AVP = 2405; //ref: 7.3.109 - TS 129 173 6.4.7 + //.... + const int AVP_Complete_DL_Included_Indicator_AVP = 1468; + const int AVP_QoS_Subscribed_AVP = 1404; + const int AVP_PDP_Type_AVP = 1470; + const int AVP_PDP_Context_AVP = 1469; + const int AVP_GPRS_Subscription_Data_AVP = 1467; + const int AVP_Subscription_Data_AVP = 1400; //ref: 7.3.2 + const int AVP_Immediate_Response_Preferred_AVP = 1412; //ref: 7.3.16 + const int AVP_Re_synchronization_Info_AVP = 1411; //ref: 7.3.15 + const int AVP_Req_EUTRAN_Auth_Info_AVP = 1408; //ref: 7.3.11 + const int AVP_Req_UTRAN_GERAN_Auth_Info_AVP = 1409; //ref: 7.3.12 + + const int AVP_Item_Number_AVP = 1419; + const int AVP_RAND_AVP = 1447; + const int AVP_XRES_AVP = 1448; + const int AVP_AUTN_AVP = 1449; + const int AVP_KASME_AVP = 1450; + const int AVP_E_UTRAN_Vector_AVP = 1414; + const int AVP_SIP_Authentication_Scheme_3GPP_AVP = 608; + const int AVP_SIP_Authenticate_3GPP_AVP = 609; + const int AVP_SIP_Authorization_3GPP_AVP = 610; + const int AVP_SIP_Number_Auth_Items_3GPP_AVP = 607; + const int AVP_SIP_Auth_Data_Item_3GPP_AVP = 612;//ETSI TS 129 229 V10.5.0 (2013-04) Clause 6.3.13 SIP-Auth-Data-Item AVP + const int AVP_Identity_with_Emergency_Registration_AVP = 651; + const int AVP_Confidentiality_Key_AVP = 625; + const int AVP_Integrity_Key_AVP = 626; + const int AVP_Line_Identifier_AVP = 500; + const int AVP_UTRAN_Vector_AVP = 1415; + const int AVP_SRES_AVP = 1454; + const int AVP_Kc_AVP = 1453; + const int AVP_GERAN_Vector_AVP = 1416; + const int AVP_Authentication_Info_AVP = 1413; + + const int AVP_Cancellation_Type_AVP = 1420; + const int AVP_CLR_Flags_AVP = 1638; //ref: 7.3.152 + const int AVP_IDR_Flags_AVP = 1490; //ref: 7.3.103 + const int AVP_DSR_Flags_AVP = 1421; //ref: 7.3.25 + const int AVP_DSA_Flags_AVP = 1422; //ref: 7.3.26 + const int AVP_PUER_Flags_AVP= 1635; //ref: 7.3.149 + const int AVP_PUEA_Flags_AVP= 1442; //ref: 7.3.48 + const int AVP_IDA_Flags_AVP = 1441; //ref: 7.3.47 + const int AVP_NOR_Flags_AVP = 1443; //ref: 7.3.49 + const int AVP_IMS_Voice_PS_Sessions_Support_AVP = 1492; + const int AVP_Last_UE_Activity_Time_AVP = 1494; + const int AVP_EPS_User_State_AVP = 1495; + const int AVP_EPS_Location_Information_AVP = 1496; + //end TS129_272 AVP codes + + + //TS132_299 AVP codes + const int AVP_Charging_Information_AVP = 618; + const int AVP_Primary_Event_Charging_Function_Name_AVP = 619; + const int AVP_Secondary_Event_Charging_Function_Name_AVP = 620; + const int AVP_Primary_Charging_Collection_Function_Name_AVP = 621; + const int AVP_Secondary_Charging_Collection_Function_Name_AVP = 622; +// const int AVP_User_CSG_Information_AVP = 2319; //Ref: ETSI TS 132 299 User_CSG_Information_AVP +// const int AVP_CSG_Id_AVP = 1437; //Ref: ETSI TS 132 299 CSG_Id_AVP +// const int AVP_CSG_Access_Mode_AVP = 2317; //Ref: ETSI TS 132 299 CSG_Access_Mode_AVP +// const int AVP_CSG_Membership_Indication_AVP = 2318; //Ref: ETSI TS 132 299 CSG_Membership_Indication_AVP + const int AVP_Service_Information_AVP = 873; //Ref: ETSI TS 132 299 Service_Information_AVP + const int AVP_PS_Information_AVP = 874; //Ref: ETSI TS 132 299 PS_Information_AVP + const int AVP_WLAN_Information_AVP = 875; //Ref: ETSI TS 132 299 WLAN_Information_AVP + const int AVP_IMS_Information_AVP = 876; //Ref: ETSI TS 132 299 IMS_Information_AVP +// const int AVP_MMS_Information_AVP = 877; //Ref: ETSI TS 132 299 MMS_Information_AVP +// const int AVP_LCS_Information_AVP = 878; //Ref: ETSI TS 132 299 LCS_Information_AVP +// const int AVP_PoC_Information_AVP = 879; //Ref: ETSI TS 132 299 PoC_Information_AVP +// const int AVP_MBMS_Information_AVP = 880; //Ref: ETSI TS 132 299 MBMS_Information_AVP + const int AVP_Service_Generic_Information_AVP = 1256; //Ref: ETSI TS 132 299 Service_Generic_Information_AVP + const int AVP_Event_Type_AVP = 825; //Ref: ETSI TS 132 299 Event_Type_AVP + const int AVP_Event_AVP = 823; //Ref: ETSI TS 132 299 Event_AVP + const int AVP_Expires_AVP = 888; //Ref: ETSI TS 132 299 Expires_AVP + const int AVP_Role_Of_Node_AVP = 829; //Ref: ETSI TS 132 299 Role_Of_Node_AVP + const int AVP_Node_Functionality_AVP = 862; //Ref: ETSI TS 132 299 Node_Functionality_AVP + const int AVP_User_Session_ID_AVP = 830; //Ref: ETSI TS 132 299 User_Session_ID_AVP + const int AVP_Calling_Party_Address_AVP = 831; //Ref: ETSI TS 132 299 Calling_Party_Address_AVP + const int AVP_Called_Party_Address_AVP = 832; //Ref: ETSI TS 132 299 Called_Party_Address_AVP + const int AVP_Called_Asserted_Identity_AVP = 1250; //Ref: ETSI TS 132 299 Called_Asserted_Identity_AVP + const int AVP_Alternate_Charged_Party_Address_AVP = 1280;//Ref: ETSI TS 132 299 Alternate_Charged_Party_Address_AVP + const int AVP_Requested_Party_Address_AVP = 1251; //Ref: ETSI TS 132 299 Requested_Party_Address_AVP + const int AVP_Associated_URI_AVP = 856; //Ref: ETSI TS 132 299 Associated_URI_AVP + const int AVP_Time_Stamps_AVP = 833; //Ref: ETSI TS 132 299 Time_Stamps_AVP + const int AVP_SIP_Request_Timestamp_AVP = 834; //Ref: ETSI TS 132 299 SIP_Request_Timestamp_AVP + const int AVP_SIP_Response_Timestamp_AVP = 835; //Ref: ETSI TS 132 299 SIP_Response_Timestamp_AVP + const int AVP_Application_Server_Information_AVP = 850;//Ref: ETSI TS 132 299 Application_Server_Information_AVP + const int AVP_Application_Server_AVP = 836; //Ref: ETSI TS 132 299 Application_Server_AVP + const int AVP_Application_Provided_Called_Party_Address_AVP = 837; //Ref: ETSI TS 132 299 Application_Provided_Called_Party_Address_AVP + const int AVP_Inter_Operator_Identifier_AVP = 838; //Ref: ETSI TS 132 299 Inter_Operator_Identifier_AVP + const int AVP_Originating_IOI_AVP = 839; //Ref: ETSI TS 132 299 Originating_IOI_AVP + const int AVP_Terminating_IOI_AVP = 840; //Ref: ETSI TS 132 299 Terminating_IOI_AVP + const int AVP_IMS_Charging_Identifier_AVP = 841; //Ref: ETSI TS 132 299 IMS_Charging_Identifier_AVP + const int AVP_SDP_Session_Description_AVP = 842; //Ref: ETSI TS 132 299 SDP_Session_Description_AVP + const int AVP_SDP_Media_Component_AVP = 844; //Ref: ETSI TS 132 299 SDP_Media_Name_AVP +// const int AVP_SDP_Media_Name_AVP = 844; //Ref: ETSI TS 132 299 SDP_Media_Name_AVP +// const int AVP_SDP_Media_Description_AVP = 845; //Ref: ETSI TS 132 299 SDP_Media_Description_AVP +// const int AVP_Media_Initiator_Flag_AVP = 882; //Ref: ETSI TS 132 299 Media_Initiator_Flag_AVP +// const int AVP_Media_Initiator_Party_AVP = 1288; //Ref: ETSI TS 132 299 Media_Initiator_Party_AVP +// const int AVP_Authorized_QoS_AVP = 849; //Ref: ETSI TS 132 299 Authorized_QoS_AVP + const int AVP_Served_Party_IP_Address_AVP = 848; //Ref: ETSI TS 132 299 Served_Party_IP_Address_AVP + const int AVP_Trunk_Group_ID_AVP = 851; //Ref: ETSI TS 132 299 Trunk_Group_ID_AVP + const int AVP_Incoming_Trunk_Group_ID_AVP = 852; //Ref: ETSI TS 132 299 Incoming_Trunk_Group_ID_AVP + const int AVP_Outgoing_Trunk_Group_ID_AVP = 853; //Ref: ETSI TS 132 299 Outgoing_Trunk_Group_ID_AVP + + const int AVP_Delivery_Status_AVP =2104; + const int AVP_Application_Session_ID_AVP=2103; + const int AVP_Application_Service_Type_AVP=2102; + const int AVP_Application_Server_ID_AVP=2101; + + const int AVP_Reporting_Reason_AVP=872; + const int AVP_Time_Quota_Threshold_AVP=868; + const int AVP_Volume_Quota_Threshold_AVP=869; + const int AVP_Unit_Quota_Threshold_AVP=1226; + const int AVP_Quota_Holding_Time_AVP=871; + const int AVP_Quota_Consumption_Time_AVP=881; + const int AVP_Time_Quota_Type_AVP=1271; + const int AVP_Base_Time_Interval_AVP=1265; + const int AVP_Time_Quota_Mechanism_AVP=1270; + const int AVP_Envelope_Start_Time_AVP=1269; + const int AVP_Envelope_End_Time_AVP=1267; + const int AVP_Envelope_AVP=1266; + const int AVP_Envelope_Reporting_AVP=1268; + const int AVP_Trigger_AVP=1264; + const int AVP_Trigger_Type_AVP=870; + const int AVP_Refund_Information_AVP=2022; + const int AVP_Multiple_Services_Credit_Control_AVP = 456; + + const int AVP_Offline_Charging_AVP = 1278; + const int AVP_Low_Balance_Indication_AVP=2020; + const int AVP_Remaining_Balance_AVP = 2021; + //end of TS132_299 AVP codes + +private: + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + static const int _command_codes[]; + + int decode_avps_from_payload(const std::vector& p_payload, std::map >& p_avps); +}; // End of class diameter_codec diff --git a/ccsrc/Protocols/Diameter/diameter_layer.cc b/ccsrc/Protocols/Diameter/diameter_layer.cc new file mode 100644 index 0000000000000000000000000000000000000000..da022b2b69ef65323947ef413a1f1b084f8b1849 --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_layer.cc @@ -0,0 +1,39 @@ +#include "LibDiameter_Interface.hh" +#include "LibDiameter_TypesAndValues.hh" + +#include "diameter_layer_factory.hh" + +#include "loggers.hh" + +#include "converter.hh" + +diameter_layer::diameter_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params() { + loggers::get_instance().log(">>> diameter_layer::diameter_layer: %s, %s", to_string().c_str(), p_param.c_str()); + // Setup parameters + params::convert(_params, p_param); +} + +void diameter_layer::sendMsg(const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode DiameterMessage + OCTETSTRING data; + // _codec_register.encode(p_diameter_message, data); + // send_data(data, _params); +} + +void diameter_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> diameter_layer::send_data: ", data); + + send_to_all_layers(data, p_params); +} + +void diameter_layer::receive_data(OCTETSTRING& data, params& p_params) +{ + loggers::get_instance().log_msg(">>> diameter_layer::receive_data: ", data); + + // Decode Diameter message +} + +diameter_layer_factory diameter_layer_factory::_f; + diff --git a/ccsrc/Protocols/Diameter/diameter_layer.hh b/ccsrc/Protocols/Diameter/diameter_layer.hh new file mode 100644 index 0000000000000000000000000000000000000000..a6409c614fe2a0aa96b33b63dd213fb3a437a62b --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_layer.hh @@ -0,0 +1,73 @@ +/*! + * \file diameter_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include + +#include "t_layer.hh" + +namespace LibDiameter__Interface { + class DiameterPort; //! Forward declaration of TITAN class +} + +namespace LibDiameter__TypesAndValues { + class DIAMETER__MSG; //! Forward declaration of TITAN class +} + +class OCTETSTRING; //! Forward declaration of TITAN class + +/*! + * \class diameter_layer + * \brief This class provides a factory class to create an diameter_layer class instance + */ +class diameter_layer : public t_layer { + params _params; + +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the diameter_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + diameter_layer() : t_layer(), _params() {}; + /*! + * \brief Specialised constructor + * Create a new instance of the diameter_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + diameter_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~diameter_layer() { }; + + void sendMsg(const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_message, params& p_param); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& p_params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& p_params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& p_params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class diameter_layer + diff --git a/ccsrc/Protocols/Diameter/diameter_layer_factory.hh b/ccsrc/Protocols/Diameter/diameter_layer_factory.hh new file mode 100644 index 0000000000000000000000000000000000000000..f43182f3236b8d3902ebf4cf012621b3eec391f5 --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_layer_factory.hh @@ -0,0 +1,45 @@ +/*! + * \file diameter_layer_factory.hh + * \brief Header file for Diameter protocol layer factory. + * \author ETSI TTF T010 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "diameter_layer.hh" + +/*! + * \class diameter_layer_factory + * \brief This class provides a factory class to create an diameter_layer class instance + */ +class diameter_layer_factory : public layer_factory { + static diameter_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the udp_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + diameter_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("DIAMETER", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ + return new diameter_layer(p_type, p_param); + }; +}; // End of class diameter_layer_factory + diff --git a/ccsrc/Protocols/Diameter/diameter_uar_codec.cc b/ccsrc/Protocols/Diameter/diameter_uar_codec.cc new file mode 100644 index 0000000000000000000000000000000000000000..2574de95a855b0580b029d0250158199bde1e54c --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_uar_codec.cc @@ -0,0 +1,132 @@ +#include + +#include "avp.hh" + +#include "diameter_uar_codec.hh" + +#include "loggers.hh" +#include "converter.hh" + +template class OPTIONAL; +class TTCN_EncDec; + +int diameter_uar_codec::encode(const LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, OCTETSTRING& p_data) { + loggers::get_instance().log_msg(">>> diameter_uar_codec::encode", (const Base_Type &)p_uar_msg); + + TTCN_EncDec::clear_error(); + TTCN_Buffer encoding_buffer; + + if (_codec.encode_header(p_uar_msg.header(), encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode: Failed to encode UAR header"); + return -1; + } + + if (encode_avps(p_uar_msg, encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode: Failed to encode UAR AVPs"); + return -1; + } + + p_data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()); + // Update length at offset #1 on 3 bytes + + return 0; +} + +int diameter_uar_codec::encode_avps(const LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, TTCN_Buffer p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_uar_codec::encode_avps: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // SessionId + if (_codec.encode_session_id(p_uar_msg.session__Id(), p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode_avps: Failed to encode session__Id__AVP"); + return -1; + } + + // Mandatory AVPs + if (_codec.encode_origin_host(p_uar_msg.uAR__Body().origin__Host(), p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode_avps: Failed to encode Origin__Host__AVP"); + return -1; + } + if (_codec.encode_origin_realm(p_uar_msg.uAR__Body().origin__Realm(), p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode_avps: Failed to encode Origin__Realm__AVP"); + return -1; + } + + + + // Optional AVPs + if (p_uar_msg.uAR__Body().auth__Session__State().is_present()) { + const LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& avp = static_cast(*p_uar_msg.uAR__Body().auth__Session__State().get_opt_value()); + if (_codec.encode_auth_session_state(avp, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode_avps: Auth__Session__State__AVP is missing"); + } + } + // TODO Continue + + loggers::get_instance().log_msg("<<< diameter_uar_codec::encode_avps: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_uar_codec::decode(const OCTETSTRING& p_data, LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, params* p_params) { + loggers::get_instance().log_msg(">>> diameter_uar_codec::decode: ", (const Base_Type &)p_data); + + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_EncDec::clear_error(); + TTCN_Buffer decoding_buffer(p_data); + + params _params; + _params.insert(std::make_pair("Request", "1")); + + if (_codec.decode_header(decoding_buffer, p_uar_msg.header(), static_cast(_params)) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Failed to decode UAR message header"); + return -1; + } + + if (_codec.decode_avps(decoding_buffer, p_uar_msg.header(), static_cast(_params)) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Failed to decode UAR AVPs"); + return -1; + } + + // Mandatory AVPs + if (decode_auth_session_state(p_uar_msg.uAR__Body().auth__Session__State()) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Missing Auth__Session__State__AVP"); + return -1; + } + if (decode_origin_host(p_uar_msg.uAR__Body().origin__Host()) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Missing Origin__Host__AVP"); + return -1; + } + if (decode_origin_realm(p_uar_msg.uAR__Body().origin__Realm()) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Missing Origin__Realm__AVP"); + return -1; + } + if (decode_destination_realm(p_uar_msg.uAR__Body().destination__Realm()) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Missing Destination__Realm__AVP"); + return -1; + } + if (decode_session_id(p_uar_msg.session__Id()) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Missing Destination__Realm__AVP"); + return -1; + } + + // Optinal AVPs + if (decode_destination_host(p_uar_msg.uAR__Body().destination__Host()) == -1) { + p_uar_msg.uAR__Body().destination__Host().set_to_omit(); + } + + p_uar_msg.uAR__Body().vendor__Specific__Application__Id().set_to_omit(); + p_uar_msg.uAR__Body().auth__Application__Id().set_to_omit(); + p_uar_msg.uAR__Body().sIP__AOR().set_to_omit(); + p_uar_msg.uAR__Body().user__Name().set_to_omit(); + p_uar_msg.uAR__Body().sIP__Visited__Network__Id().set_to_omit(); + p_uar_msg.uAR__Body().sIP__User__Authorization__Type().set_to_omit(); + p_uar_msg.uAR__Body().supported__Features().set_to_omit(); + p_uar_msg.uAR__Body().public__Identity().set_to_omit(); + p_uar_msg.uAR__Body().visited__Network__Identifier().set_to_omit(); + p_uar_msg.uAR__Body().user__Authorization__Type().set_to_omit(); + p_uar_msg.uAR__Body().uAR__Flags().set_to_omit(); + p_uar_msg.uAR__Body().proxy__Info().set_to_omit(); + p_uar_msg.uAR__Body().route__Record().set_to_omit(); + p_uar_msg.uAR__Body().aVP__Type().set_to_omit(); + + return 0; +} diff --git a/ccsrc/Protocols/Diameter/diameter_uar_codec.hh b/ccsrc/Protocols/Diameter/diameter_uar_codec.hh new file mode 100644 index 0000000000000000000000000000000000000000..27b9eaa1c57175a929be3ca30d99ab255a552bda --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_uar_codec.hh @@ -0,0 +1,43 @@ +#pragma once + +#include + +#include "codec_gen.hh" +#include "params.hh" + +#include "avp.hh" +#include "diameter_codec.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibDiameter__TypesAndValues { + class UAR__MSG; //! Forward declaration of TITAN class +} + +class diameter_uar_codec: public codec_gen < + LibDiameter__TypesAndValues::UAR__MSG, + LibDiameter__TypesAndValues::UAR__MSG> +{ + std::vector avps; + diameter_codec _codec; + +public: + diameter_uar_codec() : codec_gen(), avps(), _codec() { }; + virtual ~diameter_uar_codec() { }; + + virtual int encode (const LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, OCTETSTRING& p_data); + virtual int decode (const OCTETSTRING& p_data, LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, params* p_params = NULL); + +private: + int encode_avps(const LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, TTCN_Buffer p_encoding_buffer); + + inline int decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) { return _codec.decode_session_id(p_avp); }; + inline int decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) { return _codec.decode_auth_session_state(p_avp); }; + inline int decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) { return _codec.decode_origin_host(p_avp); }; + inline int decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) { return _codec.decode_destination_host(p_avp); }; + inline int decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) { return _codec.decode_origin_realm(p_avp); }; + inline int decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) { return _codec.decode_destination_realm(p_avp); }; + +}; // End of class diameter_uar_codec diff --git a/ccsrc/Protocols/Diameter/module.mk b/ccsrc/Protocols/Diameter/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..77a6090feeacb6a06647ec8068e0f4e9982c0fa7 --- /dev/null +++ b/ccsrc/Protocols/Diameter/module.mk @@ -0,0 +1,8 @@ +sources := \ + diameter_layer.cc \ + diameter_codec.cc \ + diameter_aar_codec.cc \ + diameter_uar_codec.cc \ + avp.cc + +includes := . diff --git a/ccsrc/Protocols/FiveG_AKA/fiveg_aka.cc b/ccsrc/Protocols/FiveG_AKA/fiveg_aka.cc new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/ccsrc/Protocols/FiveG_AKA/fiveg_aka.hh b/ccsrc/Protocols/FiveG_AKA/fiveg_aka.hh new file mode 100644 index 0000000000000000000000000000000000000000..3f59c932d39b02caf58f2abac65bdd9246f0a7da --- /dev/null +++ b/ccsrc/Protocols/FiveG_AKA/fiveg_aka.hh @@ -0,0 +1,2 @@ +#pragma once + diff --git a/ccsrc/Protocols/FiveG_AKA/module.mk b/ccsrc/Protocols/FiveG_AKA/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..7b7f6235cc5a9a5888cb80bf2ab087221075311a --- /dev/null +++ b/ccsrc/Protocols/FiveG_AKA/module.mk @@ -0,0 +1,2 @@ +sources := fiveg_aka.cc rijndael.cc opc.cc +includes := . diff --git a/ccsrc/Protocols/FiveG_AKA/opc.cc b/ccsrc/Protocols/FiveG_AKA/opc.cc new file mode 100644 index 0000000000000000000000000000000000000000..8f600bcbc06747601b0a2f441dabae6fcdd087d9 --- /dev/null +++ b/ccsrc/Protocols/FiveG_AKA/opc.cc @@ -0,0 +1,8 @@ +#include "opc.hh" + +void opc::compute_opc(uint8_t p_opc[16]) { + _rijndael.rijndael_encrypt(_op, p_opc); + for (uint8_t i = 0; i < 16; i++) { + p_opc[i] ^= _op[i]; + } // End of 'for' statement +} diff --git a/ccsrc/Protocols/FiveG_AKA/opc.hh b/ccsrc/Protocols/FiveG_AKA/opc.hh new file mode 100644 index 0000000000000000000000000000000000000000..861adbe66c1c0073e2b974d81f23715ee4de6e65 --- /dev/null +++ b/ccsrc/Protocols/FiveG_AKA/opc.hh @@ -0,0 +1,19 @@ +#pragma once + +#include + +#include "rijndael.hh" + +class opc { + const uint8_t OP[16]{0x63, 0xbf, 0xa5, 0x0e, 0xe6, 0x52, 0x33, 0x65, 0xff, 0x14, 0xc1, 0xf4, 0x5f, 0x88, 0x73, 0x7d}; //>> rijndael::rijndael_key_schedule: ", p_key, 16); + + uint8_t round_const = 1; + + // First round p_key equals p_key + for (int i = 0; i < 16; i++) { + _round_keys[0][i & 0x03][i>>2] = p_key[i]; + } // End of 'for' statementSW + + /* now calculate round keys */ + for (int i = 1; i < 11; i++) { + _round_keys[i][0][0] = S[_round_keys[i - 1][1][3]] ^ _round_keys[i - 1][0][0] ^ round_const; + _round_keys[i][1][0] = S[_round_keys[i - 1][2][3]] ^ _round_keys[i - 1][1][0]; + _round_keys[i][2][0] = S[_round_keys[i - 1][3][3]] ^ _round_keys[i - 1][2][0]; + _round_keys[i][3][0] = S[_round_keys[i - 1][0][3]] ^ _round_keys[i - 1][3][0]; + + for (int j = 0; j < 4; j++) { + _round_keys[i][j][1] = _round_keys[i - 1][j][1] ^ _round_keys[i][j][0]; + _round_keys[i][j][2] = _round_keys[i - 1][j][2] ^ _round_keys[i][j][1]; + _round_keys[i][j][3] = _round_keys[i - 1][j][3] ^ _round_keys[i][j][2]; + } // End of 'for' statement + + // Update round constant + round_const = XTIME[round_const]; + } // End of 'for' statement + + loggers::get_instance().log_to_hexa("rijndael::rijndael_key_schedule: ", static_cast(&_round_keys[0][0][0]), 16); + + return 0; +} + +void rijndael::rijndael_encrypt(const uint8_t p_input[16], uint8_t p_output[16]) { + loggers::get_instance().log_to_hexa(">>> rijndael::rijndael_encrypt: ", p_input, 16); + + // Initialise state array from p_input byte string + uint8_t state[4][4]; + for (int i = 0; i < 16; i++) { + state[i & 0x3][i>>2] = p_input[i]; + } // End of 'for' statement + loggers::get_instance().log_rijndael_state("rijndael::rijndael_encrypt: Initial state: ", state); + + // Add first round_key + key_add(state, _round_keys, 0); + loggers::get_instance().log_rijndael_state("rijndael::rijndael_encrypt: First round: key_add:", state); + + // Do lots of full rounds + int r = 1; + for ( ; r <= 9; r++) { + loggers::get_instance().log("rijndael::rijndael_encrypt: Round %d:",r); + byte_sub(state); + loggers::get_instance().log_rijndael_state("byte_sub: ", state); + shift_row(state); + loggers::get_instance().log_rijndael_state("shift_row: ", state); + mix_column(state); + loggers::get_instance().log_rijndael_state("mix_column: ", state); + key_add(state, _round_keys, r); + loggers::get_instance().log_rijndael_state("key_add: ", state); + } // End of 'for' statement + + // Final round + byte_sub(state); + loggers::get_instance().log_rijndael_state("rijndael::rijndael_encrypt: Final round: byte_sub: ", state); + shift_row(state); + loggers::get_instance().log_rijndael_state("rijndael::rijndael_encrypt: Final round: shift_row: ", state); + key_add(state, _round_keys, r); + loggers::get_instance().log_rijndael_state("rijndael::rijndael_encrypt: Final round: key_add: ", state); + + /* produce output byte string from state array */ + for (int i = 0; i < 16; i++) { + p_output[i] = state[i & 0x3][i>>2]; + } // End of 'for' statement + loggers::get_instance().log_to_hexa("<<< rijndael::rijndael_encrypt: ", p_output, 16); +} + +void rijndael::key_add(uint8_t p_state[4][4], const uint8_t p_round_keys[11][4][4], const int p_round) { + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + p_state[i][j] ^= p_round_keys[p_round][i][j]; + } // End of 'for' statement + } // End of 'for' statement +} +void rijndael::byte_sub(uint8_t p_state[4][4]) { + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + p_state[i][j] = S[p_state[i][j]]; + } // End of 'for' statement + } // End of 'for' statement +} +void rijndael::shift_row(uint8_t p_state[4][4]) { + uint8_t temp; + + // Left rotate row 1 by 1 + temp = p_state[1][0]; + p_state[1][0] = p_state[1][1]; + p_state[1][1] = p_state[1][2]; + p_state[1][2] = p_state[1][3]; + p_state[1][3] = temp; + + // Left rotate row 2 by 2 + temp = p_state[2][0]; + p_state[2][0] = p_state[2][2]; + p_state[2][2] = temp; + temp = p_state[2][1]; + p_state[2][1] = p_state[2][3]; + p_state[2][3] = temp; + + // Left rotate row 3 by 3 + temp = p_state[3][0]; + p_state[3][0] = p_state[3][3]; + p_state[3][3] = p_state[3][2]; + p_state[3][2] = p_state[3][1]; + p_state[3][1] = temp; +} +void rijndael::mix_column(uint8_t p_state[4][4]) { + // Do one column at a time + uint8_t temp, tmp, tmp0; + for (int i = 0; i < 4; i++) { + temp = p_state[0][i] ^ p_state[1][i] ^ p_state[2][i] ^ p_state[3][i]; + tmp0 = p_state[0][i]; + + // XTIME array does multiply by x in GF2^8 + tmp = XTIME[p_state[0][i] ^ p_state[1][i]]; + p_state[0][i] ^= temp ^ tmp; + tmp = XTIME[p_state[1][i] ^ p_state[2][i]]; + p_state[1][i] ^= temp ^ tmp; + tmp = XTIME[p_state[2][i] ^ p_state[3][i]]; + p_state[2][i] ^= temp ^ tmp; + tmp = XTIME[p_state[3][i] ^ tmp0]; + p_state[3][i] ^= temp ^ tmp; + } // End of 'for' statement +} diff --git a/ccsrc/Protocols/FiveG_AKA/rijndael.hh b/ccsrc/Protocols/FiveG_AKA/rijndael.hh new file mode 100644 index 0000000000000000000000000000000000000000..09f078bc16cfccd6d3eb64ccfcdeec41ecd9f3e1 --- /dev/null +++ b/ccsrc/Protocols/FiveG_AKA/rijndael.hh @@ -0,0 +1,97 @@ +#pragma once + +#include + +/*! + * \class rijndael + * \brief Implement rijndael as defined in ETSI TS 135 206 V16.0.0 (2020-08) + */ +class rijndael { + const uint8_t S[256]{ //>> http_codec_emtel::encode_body_xml"); + + std::map > >::const_iterator it; + bool processed = false; + loggers::get_instance().log("http_codec_emtel::encode_body_xml: Content-Type:'%s'", p_content_type.c_str()); + if (p_content_type.find("held") != std::string::npos) { + it = _codecs.find("held"); // TODO Use params + if (it != _codecs.cend()) { + loggers::get_instance().log("http_codec_emtel::encode_body_xml: Call 'held_codec'"); + _codecs["held"]->encode((Record_Type&)p_xml_body, p_encoding_buffer); // TODO Use params + processed = true; + } + } else if (p_content_type.find("lost") != std::string::npos) { + it = _codecs.find("lost"); // TODO Use params + if (it != _codecs.cend()) { + loggers::get_instance().log("http_codec_emtel::encode_body_xml: Call 'lost_codec'"); + _codecs["lost"]->encode((Record_Type&)p_xml_body, p_encoding_buffer); // TODO Use params + processed = true; + } + } // TODO Add new HTTP message codec_gen here + if (!processed) { + loggers::get_instance().warning("http_codec_emtel::encode_body_xml: Unsupported HTTP codec_gen, use raw field as default"); + p_encoding_buffer = OCTETSTRING(0, nullptr); + } + + return true; +} + +bool http_codec_emtel::decode_body_xml(const OCTETSTRING &p_data, LibHttp__XmlMessageBodyTypes::XmlBody &p_xml_body, const std::string &p_content_type, params* p_params) { + loggers::get_instance().log(">>> http_codec_emtel::decode_body_xml"); + + if ( + ((*p_params)["decode_str"].find("=\"urn:ietf:params:xml:ns:geopriv:held\"") != std::string::npos) || + ((*p_params)["decode_str"].find("=\"urn:ietf:params:xml:ns:pidf\"") != std::string::npos) + ) { + loggers::get_instance().log("http_codec_emtel::decode_body_xml: Find 'urn:ietf:params:xml:ns:geopriv:held'"); + if (_codecs["held"].get() != nullptr) { + loggers::get_instance().log("http_codec_emtel::decode_body_xml: Call 'held_codec'"); + if (_codecs["held"]->decode(p_data, (Record_Type&)p_xml_body, p_params) == -1) { + loggers::get_instance().warning("http_codec_emtel::decode_body_xml: Failed to decode HELD message"); + p_xml_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } else { + loggers::get_instance().log_msg("http_codec_emtel::decode_body_xml: Decoded message:", p_xml_body); + } + } else { + loggers::get_instance().warning("http_codec_emtel::decode_body_xml: No codec_gen for HELD"); + p_xml_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } + } else if ((*p_params)["decode_str"].find("=\"urn:ietf:params:xml:ns:lost1\"") != std::string::npos) { + loggers::get_instance().log("http_codec_emtel::decode_body_xml: Find 'urn:ietf:params:xml:ns:lost1'"); + if (_codecs["lost"].get() != nullptr) { + loggers::get_instance().log("http_codec_emtel::decode_body_xml: Call 'lost_codec'"); + if (_codecs["lost"]->decode(p_data, (Record_Type&)p_xml_body, p_params) == -1) { + loggers::get_instance().warning("http_codec_emtel::decode_body_xml: Failed to decode LOST message"); + p_xml_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } else { + loggers::get_instance().log_msg("http_codec_emtel::decode_body_xml: Decoded message:", p_xml_body); + } + } else { + loggers::get_instance().warning("http_codec_emtel::decode_body_xml: No codec_gen for LOST"); + p_xml_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } + } else { + loggers::get_instance().warning("http_codec_emtel::decode_body_xml: No XML codec_gen found"); + p_xml_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } + + return true; +} + +bool http_codec_emtel::encode_body_json(const LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, OCTETSTRING &p_encoding_buffer, const std::string &p_content_type) { + loggers::get_instance().log(">>> http_codec_emtel::encode_body_json"); + + std::map > >::const_iterator it; + bool processed = false; + loggers::get_instance().log("http_codec_emtel::encode_body_json: Content-Type:'%s'", p_content_type.c_str()); + if (p_content_type.find("json") != std::string::npos) { + it = _codecs.find("json"); // TODO Use params + if (it != _codecs.cend()) { + loggers::get_instance().log("http_codec_emtel::encode_body_json: Call 'json_codec'"); + _codecs["json"]->encode((Record_Type&)p_json_body, p_encoding_buffer); // TODO Use params + processed = true; + } + } // TODO Add new HTTP message codec_gen here + if (!processed) { + loggers::get_instance().warning("http_codec_emtel::encode_body_json: Unsupported HTTP codec_gen, use raw field as default"); + p_encoding_buffer = OCTETSTRING(0, nullptr); + } + + return true; +} +bool http_codec_emtel::decode_body_json(const OCTETSTRING &p_data, LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, const std::string &p_content_type, params* p_params) { + loggers::get_instance().log(">>> http_codec_emtel::decode_body_json"); + + if (_codecs["json"].get() != nullptr) { + loggers::get_instance().log("http_codec_emtel::decode_body_json: Call 'json_codec'"); + if (_codecs["json"]->decode(p_data, (Record_Type&)p_json_body, p_params) == -1) { + loggers::get_instance().warning("http_codec_emtel::decode_body_json: Failed to decode JSON message"); + p_json_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } else { + loggers::get_instance().log_msg("http_codec_emtel::decode_body_json: Decoded message:", p_json_body); + } + } + + return true; +} \ No newline at end of file diff --git a/ccsrc/Protocols/Http/http_codec_emtel.hh b/ccsrc/Protocols/Http/http_codec_emtel.hh new file mode 100644 index 0000000000000000000000000000000000000000..9e4f30b06114e8b638080c87bebb5d7cf25ae4de --- /dev/null +++ b/ccsrc/Protocols/Http/http_codec_emtel.hh @@ -0,0 +1,18 @@ +#pragma once + +#include "http_codec.hh" + +#include "LibHttp_MessageBodyTypes.hh" + +class http_codec_emtel : public http_codec { + +public: + explicit http_codec_emtel() : http_codec(){}; + virtual ~http_codec_emtel(){}; + +protected: //! \protectedsection + bool encode_body_xml(const LibHttp__XmlMessageBodyTypes::XmlBody &p_xml_body, OCTETSTRING &p_encoding_buffer, const std::string &p_content_type); + bool decode_body_xml(const OCTETSTRING &p_data, LibHttp__XmlMessageBodyTypes::XmlBody &p_xml_body, const std::string &p_content_type, params* p_params); + bool encode_body_json(const LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, OCTETSTRING &p_encoding_buffer, const std::string &p_content_type); + bool decode_body_json(const OCTETSTRING &p_data, LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, const std::string &p_content_type, params* p_params); +}; // End of class http_codec_emtel diff --git a/ccsrc/Protocols/Http/module.mk b/ccsrc/Protocols/Http/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..0acfc845c6ae5adc69f69cec3422903195e4bcb2 --- /dev/null +++ b/ccsrc/Protocols/Http/module.mk @@ -0,0 +1,3 @@ +sources := http_codec_emtel.cc +includes := . + diff --git a/ccsrc/Protocols/ImsMonitor/ims_http_monitor_layer.cc b/ccsrc/Protocols/ImsMonitor/ims_http_monitor_layer.cc new file mode 100644 index 0000000000000000000000000000000000000000..448428cc345889d1060b8388274a691ab88ff661 --- /dev/null +++ b/ccsrc/Protocols/ImsMonitor/ims_http_monitor_layer.cc @@ -0,0 +1,143 @@ +#include "LibHttp_TypesAndValues.hh" + +#include "codec_stack_builder.hh" +#include "ims_http_monitor_layer_factory.hh" + +#include "loggers.hh" + +#include "converter.hh" + +using namespace std; // Required for isnan() +#include "AtsIms5gIot_TestSystem.hh" +#include "LibHttp_TypesAndValues.hh" + +ims_http_monitor_layer::ims_http_monitor_layer(const std::string& p_type, const std::string& param) + : t_layer(p_type), _params(), _codec(nullptr), _device_mode{false} { + loggers::get_instance().log(">>> ims_http_monitor_layer::ims_http_monitor_layer: '%s', %s", to_string().c_str(), param.c_str()); + // Setup parameters + params::convert(_params, param); + + params::const_iterator it = _params.find(params::method); + if (it == _params.cend()) { + _params[params::method] = "POST"; + } + it = _params.find(params::uri); + if (it == _params.cend()) { + _params[params::uri] = "/"; + } + it = _params.find(params::host); + if (it == _params.cend()) { + _params[params::host] = "127.0.0.1"; + } + it = _params.find(params::content_type); + if (it == _params.cend()) { + _params[params::content_type] = "application/text"; + } +} + +bool ims_http_monitor_layer::set_codec(http_codec *p_codec) { + loggers::get_instance().log(">>> ims_http_monitor_layer::set_codec: %p", (void*)p_codec); + + // Sanity check that + if (p_codec == nullptr) { + loggers::get_instance().error("ims_http_monitor_layer::set_codec: Wrong parameter"); + return false; + } + + _codec = p_codec; + params::const_iterator it = _params.find(params::codecs); + if (it != _params.cend()) { + _codec->set_payload_codecs(it->second); + } + + return true; +} + +void ims_http_monitor_layer::sendMsg(const LibHttp__TypesAndValues::HttpMessage &p_http_message, params &p_param) { + loggers::get_instance().log_msg(">>> ims_http_monitor_layer::sendMsg: ", p_http_message); + + // Encode HttpMessage + OCTETSTRING data; + _codec->encode(p_http_message, data); + send_data(data, _params); +} + +void ims_http_monitor_layer::send_data(OCTETSTRING &data, params ¶ms) { + loggers::get_instance().log_msg(">>> ims_http_monitor_layer::send_data: ", data); + + if (_device_mode) { // Need to build an HTTP packet + loggers::get_instance().log("ims_http_monitor_layer::send_data: Build http layer"); + TTCN_Buffer buffer; + buffer.put_cs(_params[params::method].c_str()); + buffer.put_c(' '); + buffer.put_cs(_params[params::uri].c_str()); + buffer.put_cs(" HTTP/1.1\r\n"); + buffer.put_cs("Host: "); + buffer.put_cs(_params[params::host].c_str()); + buffer.put_cs("\r\n"); + buffer.put_cs("Content-type: "); + buffer.put_cs(_params[params::content_type].c_str()); + buffer.put_cs("\r\n"); + buffer.put_cs("Content-length: "); + buffer.put_cs(static_cast(int2str(data.lengthof() + 2 /*Stand for the last CRLF*/))); + buffer.put_cs("\r\n\r\n"); + buffer.put_os(data); + buffer.put_cs("\r\n"); + data = OCTETSTRING(buffer.get_len(), buffer.get_data()); + } + + loggers::get_instance().log_msg("ims_http_monitor_layer::send_data: ", data); + send_to_all_layers(data, params); +} + +void ims_http_monitor_layer::receive_data(OCTETSTRING &data, params ¶ms) { + loggers::get_instance().log_msg(">>> ims_http_monitor_layer::receive_data: ", data); + + // Decode HTTP message + LibHttp__TypesAndValues::HttpMessage http_message; + int ret_code = _codec->decode(data, http_message, ¶ms); + if (ret_code == -1) { + loggers::get_instance().warning("ims_http_monitor_layer::receive_data: Failed to decode data"); + return; + } else if (ret_code == -2) { // Need to wait for next data + loggers::get_instance().log("ims_http_monitor_layer::receive_data: Set Buffurizing to 1"); + params.insert(std::make_pair("Buffurizing", "1")); + return; + } + if (_device_mode) { + OCTETSTRING os; + if (http_message.ischosen(LibHttp__TypesAndValues::HttpMessage::ALT_response)) { + if (http_message.response().body().ispresent()) { + LibHttp__MessageBodyTypes::HttpMessageBody &body = + static_cast(*http_message.response().body().get_opt_value()); + if (body.ischosen(LibHttp__MessageBodyTypes::HttpMessageBody::ALT_binary__body)) { + LibHttp__BinaryMessageBodyTypes::BinaryBody &binary = body.binary__body(); + if (binary.ischosen(LibHttp__BinaryMessageBodyTypes::BinaryBody::ALT_raw)) { + os = binary.raw(); + } else { + loggers::get_instance().warning("ims_http_monitor_layer::receive_data: A raw binary payload is expected"); + } + } else if (body.ischosen(LibHttp__MessageBodyTypes::HttpMessageBody::ALT_html__body)) { + // TODO To be done + loggers::get_instance().warning("ims_http_monitor_layer::receive_data: Not implemented yet"); + } else if (body.ischosen(LibHttp__MessageBodyTypes::HttpMessageBody::ALT_xml__body)) { + // TODO To be done + loggers::get_instance().warning("ims_http_monitor_layer::receive_data: Not implemented yet"); + } else if (body.ischosen(LibHttp__MessageBodyTypes::HttpMessageBody::ALT_text__body)) { + // TODO To be done + loggers::get_instance().warning("ims_http_monitor_layer::receive_data: Not implemented yet"); + } + receive_to_all_layers(os, params); + } else { + loggers::get_instance().warning("ims_http_monitor_layer::receive_data: No body present"); + } + } else { + loggers::get_instance().warning("ims_http_monitor_layer::receive_data: An HTTP response is expected"); + } + } else { + // Pass it to the ports + to_all_upper_ports(http_message, params); + } +} + +ims_http_monitor_layer_factory ims_http_monitor_layer_factory::_f; diff --git a/ccsrc/Protocols/ImsMonitor/ims_http_monitor_layer.hh b/ccsrc/Protocols/ImsMonitor/ims_http_monitor_layer.hh new file mode 100644 index 0000000000000000000000000000000000000000..1edf86a98f9bd780cac9581b3ecf49d751a0a250 --- /dev/null +++ b/ccsrc/Protocols/ImsMonitor/ims_http_monitor_layer.hh @@ -0,0 +1,91 @@ +/*! + * \file ims_http_monitor_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include + +#include "t_layer.hh" + +#include "http_codec.hh" + +namespace AtsIms5gIot__TestSystem { + class ImsMonitorHttpPort; +} + +namespace LibHttp__TypesAndValues { + class HttpMessage; //! Forward declaration of TITAN class +} + +class OCTETSTRING; //! Forward declaration of TITAN class + +/*! + * \class ims_http_monitor_layer + * \brief This class provides a factory class to create an tcp_layer class instance + */ +class ims_http_monitor_layer : public t_layer { + params _params; + http_codec *_codec; + bool _device_mode; + +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the ims_http_monitor_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + ims_http_monitor_layer() : t_layer(), _params(), _device_mode{false} { }; + /*! + * \brief Specialised constructor + * Create a new instance of the ims_http_monitor_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + ims_http_monitor_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~ims_http_monitor_layer() { if (_codec != nullptr) { delete _codec;} }; + + /*! + * \fn bool set_codec(http_codec *p_codec); + * \brief Set the specialized HTTP codec to use + * \param[in] p_codec Pointer to the specialized codec + * \return true on success, false if the pointer is NULL + */ + bool set_codec(http_codec *p_codec); + + /*! + * \fn void sendMsg(const LibHttp__TypesAndValues::HttpMessage& p_http_message, params& p_param); + * \brief Send HTTP message to the lower layers + * \param[in] p_http_message The GeoNetworking message to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + void sendMsg(const LibHttp__TypesAndValues::HttpMessage& p_http_message, params& p_param); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class ims_http_monitor_layer + diff --git a/ccsrc/Protocols/ImsMonitor/ims_http_monitor_layer_factory.hh b/ccsrc/Protocols/ImsMonitor/ims_http_monitor_layer_factory.hh new file mode 100644 index 0000000000000000000000000000000000000000..5efe97b5cce15c97f3fb3761639eaa81caa5b12d --- /dev/null +++ b/ccsrc/Protocols/ImsMonitor/ims_http_monitor_layer_factory.hh @@ -0,0 +1,42 @@ +/*! + * \file ims_http_monitor_layer_factory.hh + * \brief Header file for ITS Http protocol layer factory. + * \author ETSI STF525 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "ims_http_monitor_layer.hh" + +/*! + * \class ims_http_monitor_layer_factory + * \brief This class provides a factory class to create an ims_http_monitor_layer class instance + */ +class ims_http_monitor_layer_factory : public layer_factory { + static ims_http_monitor_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the ims_http_monitor_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + ims_http_monitor_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("IMS_HTTP_MONITOR", this); + }; + /*! + * \fn layer* create_layer(const std::string& type, const std::string& param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer *create_layer(const std::string& p_type, const std::string& p_param) { return new ims_http_monitor_layer(p_type, p_param); }; +}; // End of class ims_http_monitor_layer_factory diff --git a/ccsrc/Protocols/ImsMonitor/module.mk b/ccsrc/Protocols/ImsMonitor/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..2471809250251ef8ddfcc9f694678c98f0f6a086 --- /dev/null +++ b/ccsrc/Protocols/ImsMonitor/module.mk @@ -0,0 +1,4 @@ +sources := ims_http_monitor_layer.cc +includes := . + +#modules := ../../../titan-test-system-framework/ccsrc/Protocols/Http \ No newline at end of file diff --git a/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.cc b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.cc new file mode 100644 index 0000000000000000000000000000000000000000..ab5bfa062796236519df459ba774a1b95dbfbc7a --- /dev/null +++ b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.cc @@ -0,0 +1,39 @@ +#include "LibDiameter_Interface.hh" +#include "LibDiameter_TypesAndValues.hh" + +#include "lower_layer_pport_layer_factory.hh" + +#include "loggers.hh" + +#include "converter.hh" + +lower_layer_pport_layer::lower_layer_pport_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params() { + loggers::get_instance().log(">>> lower_layer_pport_layer::lower_layer_pport_layer: %s, %s", to_string().c_str(), p_param.c_str()); + // Setup parameters + params::convert(_params, p_param); +} + +void lower_layer_pport_layer::sendMsg(const LibDiameter__TypesAndValues::Lower__Layer__Primitive& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> lower_layer_pport_layer::sendMsg: ", p_diameter_message); + + // Encode DiameterMessage + OCTETSTRING data; + // _codec_register.encode(p_diameter_message, data); + // send_data(data, _params); +} + +void lower_layer_pport_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> lower_layer_pport_layer::send_data: ", data); + + send_to_all_layers(data, p_params); +} + +void lower_layer_pport_layer::receive_data(OCTETSTRING& data, params& p_params) +{ + loggers::get_instance().log_msg(">>> lower_layer_pport_layer::receive_data: ", data); + + // Decode Diameter message +} + +lower_layer_pport_layer_factory lower_layer_pport_layer_factory::_f; + diff --git a/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.hh b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.hh new file mode 100644 index 0000000000000000000000000000000000000000..17c73b1b42035d71804eeda0d91a064bf495c6a2 --- /dev/null +++ b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.hh @@ -0,0 +1,73 @@ +/*! + * \file lower_layer_pport_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include + +#include "t_layer.hh" + +namespace LibDiameter__Interface { + class LowerLayerPPort; //! Forward declaration of TITAN class +} + +namespace LibDiameter__TypesAndValues { + class Lower__Layer__Primitive; //! Forward declaration of TITAN class +} + +class OCTETSTRING; //! Forward declaration of TITAN class + +/*! + * \class lower_layer_pport_layer + * \brief This class provides a factory class to create an lower_layer_pport_layer class instance + */ +class lower_layer_pport_layer : public t_layer { + params _params; + +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the lower_layer_pport_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + lower_layer_pport_layer() : t_layer(), _params() {}; + /*! + * \brief Specialised constructor + * Create a new instance of the lower_layer_pport_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + lower_layer_pport_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~lower_layer_pport_layer() { }; + + void sendMsg(const LibDiameter__TypesAndValues::Lower__Layer__Primitive& p_diameter_message, params& p_param); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& p_params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& p_params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& p_params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class lower_layer_pport_layer + diff --git a/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer_factory.hh b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer_factory.hh new file mode 100644 index 0000000000000000000000000000000000000000..af84b8a6c91e0ec0e910d0fbfcbb5cd11ff22a3f --- /dev/null +++ b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer_factory.hh @@ -0,0 +1,45 @@ +/*! + * \file lower_layer_pport_layer_factory.hh + * \brief Header file for Diameter protocol layer factory. + * \author ETSI TTF T010 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "lower_layer_pport_layer.hh" + +/*! + * \class lower_layer_pport_layer_factory + * \brief This class provides a factory class to create an lower_layer_pport_layer class instance + */ +class lower_layer_pport_layer_factory : public layer_factory { + static lower_layer_pport_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the udp_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + lower_layer_pport_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("LLPP", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ + return new lower_layer_pport_layer(p_type, p_param); + }; +}; // End of class lower_layer_pport_layer_factory + diff --git a/ccsrc/Protocols/LowerLayerPPort/module.mk b/ccsrc/Protocols/LowerLayerPPort/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..c6a6e47524d7590e774dc0e82e44f2c71ee13e20 --- /dev/null +++ b/ccsrc/Protocols/LowerLayerPPort/module.mk @@ -0,0 +1,5 @@ +sources := \ + lower_layer_pport_layer.cc \ + + +includes := . diff --git a/ccsrc/Protocols/NAS/module.mk b/ccsrc/Protocols/NAS/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/ccsrc/Protocols/NAS_layer/module.mk b/ccsrc/Protocols/NAS_layer/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/ccsrc/Protocols/NGAP/module.mk b/ccsrc/Protocols/NGAP/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..74c21aa4ebc7c39d00e29c1da9f47787c4a9c741 --- /dev/null +++ b/ccsrc/Protocols/NGAP/module.mk @@ -0,0 +1,2 @@ +sources := ngap_codec.cc +includes := . diff --git a/ccsrc/Protocols/NGAP/ngap_codec.cc b/ccsrc/Protocols/NGAP/ngap_codec.cc new file mode 100644 index 0000000000000000000000000000000000000000..7b0fdd7ead71bafd496a22080b468c9996f9a7f2 --- /dev/null +++ b/ccsrc/Protocols/NGAP/ngap_codec.cc @@ -0,0 +1,26 @@ +#include "ngap_codec.hh" +#include "LibNGAP_TypesAndValues.hh" +#include "loggers.hh" + +int ngap_codec::encode(const NGAP__PDU__Descriptions::NGAP__PDU& ngap, OCTETSTRING &data) { + loggers::get_instance().log(">>> ngap_codec::encode"); + + // BITSTRING b; + // int rc = asn_codec.encode(ngap, b); + // loggers::get_instance().log("ngap_codec::encode: ASN.1 codec returned %d", rc); + // if (rc) { + // data = bit2oct(b); + // loggers::get_instance().log_msg("ngap_codec::encode: ", data); + // } + // return rc; + return -1; +} + +int ngap_codec::decode(const OCTETSTRING &p_data, NGAP__PDU__Descriptions::NGAP__PDU &ngap, params_ngap *params) { + loggers::get_instance().log_msg(">>> ngap_codec::decode: ", p_data); + + TTCN_Buffer buf(p_data); + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING); + ngap.PER_decode(NGAP__PDU__Descriptions::NGAP__PDU_descr_, buf, -1); + return 0; +} diff --git a/ccsrc/Protocols/NGAP/ngap_codec.hh b/ccsrc/Protocols/NGAP/ngap_codec.hh new file mode 100644 index 0000000000000000000000000000000000000000..7c91452863e39707e2045b0575c02bdd03737dd0 --- /dev/null +++ b/ccsrc/Protocols/NGAP/ngap_codec.hh @@ -0,0 +1,20 @@ +#pragma once + +#include "codec.hh" + +class BITSTRING; //! Forward declaration of TITAN class +class OCTETSTRING; //! Forward declaration of TITAN class + +namespace NGAP__PDU__Descriptions { //! Forward declaration of asn1c NGAP class + class NGAP__PDU; +} + +class ngap_codec { + +public: + explicit ngap_codec(){}; + virtual ~ngap_codec(){}; + + virtual int encode(const NGAP__PDU__Descriptions::NGAP__PDU& ngap, OCTETSTRING &data); + virtual int decode(const OCTETSTRING &data, NGAP__PDU__Descriptions::NGAP__PDU &ngap, params_ngap *params = NULL); +}; diff --git a/ccsrc/Protocols/NGAP/ngap_types.hh b/ccsrc/Protocols/NGAP/ngap_types.hh new file mode 100644 index 0000000000000000000000000000000000000000..a679a52f5f903853d6821f6b7ad15c54da573e34 --- /dev/null +++ b/ccsrc/Protocols/NGAP/ngap_types.hh @@ -0,0 +1,15 @@ +/*! + * \file ngap_types.hh + * \brief Header file for TITAN NGAP types. + * \author ETSI + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +using namespace std; // Required for isnan() +#include "LibNGAP_TypesAndValues.hh" +#include "NGAP_PDU_Descriptions.hh" diff --git a/ccsrc/Protocols/NGAP_layer/module.mk b/ccsrc/Protocols/NGAP_layer/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..654f8ac098b4e4353f45366c450514bf62b01472 --- /dev/null +++ b/ccsrc/Protocols/NGAP_layer/module.mk @@ -0,0 +1,2 @@ +sources := ngap_layer.cc +includes := . ../NGAP/ diff --git a/ccsrc/Protocols/NGAP_layer/ngap_layer.cc b/ccsrc/Protocols/NGAP_layer/ngap_layer.cc new file mode 100644 index 0000000000000000000000000000000000000000..c1ba4e5584030832f1cccb78260518e4c98c4f36 --- /dev/null +++ b/ccsrc/Protocols/NGAP_layer/ngap_layer.cc @@ -0,0 +1,80 @@ +/*! + * \file ngap_layer.cc + * \brief CC file for NGAP protocol layer. + * \author ETSI TTF041 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ + +#include "ngap_types.hh" + +#include "AtsIms5gIot_TestSystem.hh" + +#include "ngap_layer_factory.hh" + +#include "registration.hh" + +#include "loggers.hh" + +ngap_layer::ngap_layer(const std::string &p_type, const std::string ¶m) : t_layer(p_type), _params(), _codec() { + loggers::get_instance().log(">>> ngap_layer::ngap_layer: %s, %s", to_string().c_str(), param.c_str()); + // Setup parameters + params::convert(_params, param); + + // Register this object for AdapterControlPort + loggers::get_instance().log("ngap_layer::ngap_layer: Register %s/%p", p_type.c_str(), this); + registration::get_instance().add_item(p_type, this); +} + +void ngap_layer::sendMsg(const NGAP__PDU__Descriptions::NGAP__PDU& p, params ¶ms) { + loggers::get_instance().log_msg(">>> ngap_layer::sendMsg: ", p); + + // Encode NGAP PDU + OCTETSTRING data; + if (_codec.encode(p, data) < 0) { + loggers::get_instance().warning("ngap_layer::sendMsg: Encoding failure"); + data=int2oct(0,1); + //return; + } + loggers::get_instance().log_msg(">>> ngap_layer::sendMsg . encoded: ", data); + + send_data(data, _params); +} + +void ngap_layer::send_data(OCTETSTRING &data, params &p_params) { + loggers::get_instance().log_msg(">>> ngap_layer::send_data: ", data); + + send_to_all_layers(data, p_params); +} + +void ngap_layer::receive_data(OCTETSTRING &data, params &p_params) { + loggers::get_instance().log_msg(">>> ngap_layer::receive_data: ", data); + + // Sanity check + //if (*(static_cast(data) + 1) != 0x02) { // Check that received packet has CA message id - See ETSI TS 102 894 + // // Not a NGAP message, discard it + // loggers::get_instance().warning("ngap_layer::receive_data: Wrong message id: 0x%02x", *(static_cast(data) + 1)); + // return; + //} + + // Decode the payload + //params ¶ms = p_params;//static_cast(p_params); + + NGAP__PDU__Descriptions::NGAP__PDU p; + _codec.decode(data, p); + if (!p.is_bound()) { + // Discard it + return; + } // else, continue + + // Process lower layer data + + + // Pass it to the ports if any + to_all_upper_ports(p, p_params); +} + +ngap_layer_factory ngap_layer_factory::_f; diff --git a/ccsrc/Protocols/NGAP_layer/ngap_layer.hh b/ccsrc/Protocols/NGAP_layer/ngap_layer.hh new file mode 100644 index 0000000000000000000000000000000000000000..66088314262d400aa2301bdbabeb587f218a673a --- /dev/null +++ b/ccsrc/Protocols/NGAP_layer/ngap_layer.hh @@ -0,0 +1,74 @@ +/*! + * \file ngap_layer.hh + * \brief Header file for NGAP protocol layer. + * \author ETSI TTF041 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "ngap_codec.hh" +#include "t_layer.hh" + +namespace AtsIms5gIot__TestSystem { + class ImsMonitorNgapPort; //! Forward declaration of TITAN class +} // namespace NGAP__TestSystem + +/*! + * \class ngap_layer + * \brief This class provides description of ITS NGAP protocol layer + */ +class ngap_layer : public t_layer { + params_ngap _params; //! Layer parameters + ngap_codec _codec; //! NGAP codec +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the ngap_layer class + */ + explicit ngap_layer() : t_layer(), _params(), _codec(){}; + /*! + * \brief Specialised constructor + * Create a new instance of the ngap_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + ngap_layer(const std::string &p_type, const std::string ¶m); + /*! + * \brief Default destructor + */ + virtual ~ngap_layer(){}; + + /*! + * \fn void sendMsg(const LibItsCam__TestSystem::CamReq& p_ngap_req, params& p_params); + * \brief Send CA message to the lower layers + * \param[in] p_ngap_req The CA message to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + void sendMsg(const NGAP__PDU__Descriptions::NGAP__PDU& p_ngap, params &p_params); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING &data, params ¶ms); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING &data, params &info); + +// int enable_secured_mode(const std::string &p_certificate_id, const boolean p_enforce_security); + +// int disable_secured_mode(); + +}; // End of class ngap_layer diff --git a/ccsrc/Protocols/NGAP_layer/ngap_layer_factory.hh b/ccsrc/Protocols/NGAP_layer/ngap_layer_factory.hh new file mode 100644 index 0000000000000000000000000000000000000000..a16564893c890c3a972307b6f95390548da7364c --- /dev/null +++ b/ccsrc/Protocols/NGAP_layer/ngap_layer_factory.hh @@ -0,0 +1,41 @@ +/*! + * \file ngap_layer_factory.hh + * \brief Header file for NGAP protocol layer factory. + * \author ETSI TTF041 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "ngap_layer.hh" + +/*! + * \class ngap_layer_factory + * \brief This class provides a factory class to create a ngap_layer class instance + */ +class ngap_layer_factory : public layer_factory { + static ngap_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the ngap_layer_factory class + * \remark The NGAP layer identifier is NGAP + */ + ngap_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("NGAP", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + */ + inline virtual layer *create_layer(const std::string &p_type, const std::string &p_param) { return new ngap_layer(p_type, p_param); }; +}; // End of class ngap_layer_factory diff --git a/ccsrc/Protocols/Naptr/module.mk b/ccsrc/Protocols/Naptr/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..04484d225a111152867904e03913ec0e3f78e52f --- /dev/null +++ b/ccsrc/Protocols/Naptr/module.mk @@ -0,0 +1,5 @@ +sources := \ + naptr_layer.cc \ + + +includes := . diff --git a/ccsrc/Protocols/Naptr/naptrPort_layer_factory.hh b/ccsrc/Protocols/Naptr/naptrPort_layer_factory.hh new file mode 100644 index 0000000000000000000000000000000000000000..e8b460c2ba96d3ba3b1be26c6a52a31d83bdd76a --- /dev/null +++ b/ccsrc/Protocols/Naptr/naptrPort_layer_factory.hh @@ -0,0 +1,45 @@ +/*! + * \file naptrPort_layer_factory.hh + * \brief Header file for Diameter protocol layer factory. + * \author ETSI TTF T010 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "naptr_layer.hh" + +/*! + * \class naptrPort_layer_factory + * \brief This class provides a factory class to create an naptr_layer class instance + */ +class naptrPort_layer_factory : public layer_factory { + static naptrPort_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the udp_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + naptrPort_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("NAPTR", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ + return new naptr_layer(p_type, p_param); + }; +}; // End of class naptrPort_layer_factory + diff --git a/ccsrc/Protocols/Naptr/naptr_layer.cc b/ccsrc/Protocols/Naptr/naptr_layer.cc new file mode 100644 index 0000000000000000000000000000000000000000..8e9bf1e2f01c42d5887e76f1caa0d34e75597eed --- /dev/null +++ b/ccsrc/Protocols/Naptr/naptr_layer.cc @@ -0,0 +1,38 @@ +#include "AtsImsIot_TypesAndValues.hh" + +#include "naptrPort_layer_factory.hh" + +#include "loggers.hh" + +#include "converter.hh" + +naptr_layer::naptr_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params() { + loggers::get_instance().log(">>> naptr_layer::naptr_layer: %s, %s", to_string().c_str(), p_param.c_str()); + // Setup parameters + params::convert(_params, p_param); +} + +void naptr_layer::sendMsg(const AtsImsIot__TypesAndValues::NAPTRmessage& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> naptr_layer::sendMsg: ", p_diameter_message); + + // Encode DiameterMessage + OCTETSTRING data; + // _codec_register.encode(p_diameter_message, data); + // send_data(data, _params); +} + +void naptr_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> naptr_layer::send_data: ", data); + + send_to_all_layers(data, p_params); +} + +void naptr_layer::receive_data(OCTETSTRING& data, params& p_params) +{ + loggers::get_instance().log_msg(">>> naptr_layer::receive_data: ", data); + + // Decode Diameter message +} + +naptrPort_layer_factory naptrPort_layer_factory::_f; + diff --git a/ccsrc/Protocols/Naptr/naptr_layer.hh b/ccsrc/Protocols/Naptr/naptr_layer.hh new file mode 100644 index 0000000000000000000000000000000000000000..964753ca15db325bfec31e3cd889021f145ecd6a --- /dev/null +++ b/ccsrc/Protocols/Naptr/naptr_layer.hh @@ -0,0 +1,73 @@ +/*! + * \file naptr_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include + +#include "t_layer.hh" + +namespace AtsImsIot__TestSystem { + class NaptrPort; //! Forward declaration of TITAN class +} + +namespace AtsImsIot__TypesAndValues { + class NAPTRmessage; //! Forward declaration of TITAN class +} + +class OCTETSTRING; //! Forward declaration of TITAN class + +/*! + * \class naptr_layer + * \brief This class provides a factory class to create an naptr_layer class instance + */ +class naptr_layer : public t_layer { + params _params; + +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the naptr_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + naptr_layer() : t_layer(), _params() {}; + /*! + * \brief Specialised constructor + * Create a new instance of the naptr_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + naptr_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~naptr_layer() { }; + + void sendMsg(const AtsImsIot__TypesAndValues::NAPTRmessage& p_diameter_message, params& p_param); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& p_params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& p_params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& p_params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class naptr_layer + diff --git a/ccsrc/Protocols/Sip/module.mk b/ccsrc/Protocols/Sip/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..84c4b97a4c8a58740f5308c8c557b58543521073 --- /dev/null +++ b/ccsrc/Protocols/Sip/module.mk @@ -0,0 +1,17 @@ +sources := \ + sip_codec_ack_request.cc \ + sip_codec_headers.cc \ + sip_codec_message_body.cc \ + sip_codec_options_request.cc \ + sip_codec_request.cc \ + sip_codec_subscribe_request.cc \ + sip_codec_bye_request.cc \ + sip_codec_invite_request.cc \ + sip_codec_message_request.cc \ + sip_codec_register_request.cc \ + sip_codec_cancel_request.cc \ + sip_codec_notify_request.cc \ + sip_codec_info_request.cc \ + sip_codec_response.cc \ + sip_layer.cc +includes := . diff --git a/ccsrc/Protocols/Sip/sip_codec_ack_request.cc b/ccsrc/Protocols/Sip/sip_codec_ack_request.cc new file mode 100644 index 0000000000000000000000000000000000000000..8cdc94394ddf6e3ba8433e3e736736681b9aaa9b --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_ack_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_ack_request.hh" +#include "loggers.hh" + +int sip_codec_ack_request::encode (const LibSip__SIPTypesAndValues::ACK__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_ack_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_ack_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_ack_request::encode: data=", data); + return 0; +} + +int sip_codec_ack_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::ACK__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_ack_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_ack_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_ack_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::ACK__E) { + loggers::get_instance().warning("sip_codec_ack_request::decode: Wrong SIP Method, expected ACK"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_ack_request.hh b/ccsrc/Protocols/Sip/sip_codec_ack_request.hh new file mode 100644 index 0000000000000000000000000000000000000000..801f6de9855befb6a43006f62a64e71c2c99c3b9 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_ack_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class ACK__Request; +} + +class sip_codec_ack_request: public codec_gen < +LibSip__SIPTypesAndValues::ACK__Request, +LibSip__SIPTypesAndValues::ACK__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_ack_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_ack_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::ACK__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::ACK__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_ack_request diff --git a/ccsrc/Protocols/Sip/sip_codec_bye_request.cc b/ccsrc/Protocols/Sip/sip_codec_bye_request.cc new file mode 100644 index 0000000000000000000000000000000000000000..816d9aa895b84944509a865fe11fa63dd0f3aef3 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_bye_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_bye_request.hh" +#include "loggers.hh" + +int sip_codec_bye_request::encode (const LibSip__SIPTypesAndValues::BYE__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_bye_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_bye_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_bye_request::encode: data=", data); + return 0; +} + +int sip_codec_bye_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::BYE__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_bye_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_bye_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_bye_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::BYE__E) { + loggers::get_instance().warning("sip_codec_bye_request::decode: Wrong SIP Method, expected BYE"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_bye_request.hh b/ccsrc/Protocols/Sip/sip_codec_bye_request.hh new file mode 100644 index 0000000000000000000000000000000000000000..e597172ea99e9bbde9c90e6346230216ee24e2af --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_bye_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class BYE__Request; +} + +class sip_codec_bye_request: public codec_gen < +LibSip__SIPTypesAndValues::BYE__Request, +LibSip__SIPTypesAndValues::BYE__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_bye_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_bye_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::BYE__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::BYE__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_bye_request diff --git a/ccsrc/Protocols/Sip/sip_codec_cancel_request.cc b/ccsrc/Protocols/Sip/sip_codec_cancel_request.cc new file mode 100644 index 0000000000000000000000000000000000000000..3a6000222eaee265c2a5f0f08bd84f3cf7c672c8 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_cancel_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_cancel_request.hh" +#include "loggers.hh" + +int sip_codec_cancel_request::encode (const LibSip__SIPTypesAndValues::CANCEL__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_cancel_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_cancel_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_cancel_request::encode: data=", data); + return 0; +} + +int sip_codec_cancel_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::CANCEL__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_cancel_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_cancel_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_cancel_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::CANCEL__E) { + loggers::get_instance().warning("sip_codec_cancel_request::decode: Wrong SIP Method, expected CANCEL"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_cancel_request.hh b/ccsrc/Protocols/Sip/sip_codec_cancel_request.hh new file mode 100644 index 0000000000000000000000000000000000000000..22527bc76ad4008f97f965f5de58257957bc7609 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_cancel_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class CANCEL__Request; +} + +class sip_codec_cancel_request: public codec_gen < +LibSip__SIPTypesAndValues::CANCEL__Request, +LibSip__SIPTypesAndValues::CANCEL__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_cancel_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_cancel_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::CANCEL__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::CANCEL__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_cancel_request diff --git a/ccsrc/Protocols/Sip/sip_codec_headers.cc b/ccsrc/Protocols/Sip/sip_codec_headers.cc new file mode 100644 index 0000000000000000000000000000000000000000..4b991167b217ab1d1eab597978acbfd435e5e171 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_headers.cc @@ -0,0 +1,3305 @@ +#include + +#include "LibSip_SIPTypesAndValues.hh" +#include "LibSip_Common.hh" + +#include "sip_codec_headers.hh" +#include "loggers.hh" + +#include "converter.hh" + +#ifdef WIN32 +#undef osip_malloc +#undef osip_free +#define osip_malloc(S) malloc(S) +#define osip_free(P) { if (P!=NULL) { free(P);} } +#endif + +int sip_codec_headers::encode_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message) +{ + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_headers: ", p_msg_header); + + // Encode mandatory fields + // From + osip_from_t* from_header = nullptr; + if (encode_from_header(p_msg_header.fromField(), &from_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode From header"); + return -1; + } + char* hvalue; + ::osip_from_to_str(from_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: From:%s", hvalue); + if (::osip_message_set_from(p_sip_message, hvalue) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to set From header in sip_message"); + return -1; + } + + ::osip_from_free(from_header); + osip_free(hvalue); + + // To + osip_to_t* to_header = nullptr; + if (encode_to_header(p_msg_header.toField(), &to_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode To header"); + return -1; + } + int r = ::osip_to_to_str(to_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: To:'%s'- result:%d", hvalue, r); + if (::osip_message_set_to(p_sip_message, hvalue) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to set To header in sip_message"); + return -1; + } + ::osip_to_free(to_header); + osip_free(hvalue); + + // Via + osip_via_t* via_header = nullptr; + if (encode_via_header(p_msg_header.via(), &via_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Via header"); + return -1; + } + ::osip_via_to_str(via_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: Via:%s", hvalue); + std::string str(hvalue); + std::size_t idx = str.find(" ("); // FIXME Horrible work-around for osip_via_to_str issue (' ()' added sometimes + if (idx != std::string::npos) { + str = str.substr(0, idx); + } + loggers::get_instance().log("sip_codec_headers::encode_headers: Via (final):%s", str.c_str()); + if (::osip_message_set_via(p_sip_message, str.c_str()) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to set Via header in sip_message"); + return -1; + } + ::osip_via_free(via_header); + osip_free(hvalue); + + // Encode Optional fields + loggers::get_instance().log("sip_codec_headers::encode_headers: Encode Optional fields"); + + // Accept + if (p_msg_header.accept().is_present()) { + if (encode_accept_header(p_msg_header.accept(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Accept header"); + return -1; + } + } + + // AcceptContact + if (p_msg_header.acceptContact().is_present()) { + if (encode_accept_contact_header(p_msg_header.acceptContact(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode AcceptContact header"); + return -1; + } + } + + // Allow + if (p_msg_header.allow().is_present()) { + if (encode_allow_header(p_msg_header.allow(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Allow header"); + return -1; + } + } + + // Authorization + if (p_msg_header.authorization().is_present()) { + osip_authorization_t* authorization_header = nullptr; + if (encode_authorization_header(p_msg_header.authorization(), &authorization_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Authorization header"); + return -1; + } + int result = ::osip_authorization_to_str(authorization_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: Authorization: %s - %d", hvalue, result); + result = ::osip_message_set_authorization(p_sip_message, hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: SIP Authorization: %p - %d", p_sip_message->authorizations, result); + ::osip_authorization_free(authorization_header); + osip_free(hvalue); + } + + // CallInfo + if (p_msg_header.callInfo().is_present()) { + if (encode_call_info_header(p_msg_header.callInfo(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode CallInfo header"); + return -1; + } + } + + // CallId + if (p_msg_header.callId().is_present()) { + osip_call_id_t* call_id_header; + if (encode_call_id_header(p_msg_header.callId(), &call_id_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Call_Id header"); + return -1; + } + ::osip_call_id_to_str(call_id_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: Call_Id:%s", hvalue); + int result = ::osip_message_set_call_id(p_sip_message, hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: SIP Call_Id: %p - %d", p_sip_message->call_id, result); + ::osip_call_id_free(call_id_header); + osip_free(hvalue); + } + + // Contact + if (p_msg_header.contact().is_present()) { + osip_contact_t* contact_header; + if (encode_contact_header(p_msg_header.contact(), &contact_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Contact header"); + return -1; + } + ::osip_contact_to_str(contact_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: Contact: %s", hvalue); + int result = ::osip_message_set_contact(p_sip_message, hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: SIP Contact: %p - %d", p_sip_message->contacts, result); + ::osip_contact_free(contact_header); + osip_free(hvalue); + } + + // ContentLength + osip_content_length_t* content_length_header = nullptr; + if (encode_content_length_header(p_msg_header.contentLength(), &content_length_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode ContentLength header"); + return -1; + } + ::osip_content_length_to_str(content_length_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: ContentLength:%s", hvalue); + ::osip_message_set_content_length(p_sip_message, hvalue); + ::osip_content_length_free(content_length_header); + osip_free(hvalue); + + // ContentType + if (p_msg_header.contentType().is_present()) { + osip_content_type_t* content_type_header = nullptr; + if (encode_content_type_header(p_msg_header.contentType(), &content_type_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode ContentType header"); + return -1; + } + ::osip_content_type_to_str(content_type_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: ContentType:%s", hvalue); + ::osip_message_set_content_type(p_sip_message, hvalue); + ::osip_content_type_free(content_type_header); + osip_free(hvalue); + } + + // CSeq + osip_cseq_t* cseq_header = nullptr; + if (encode_c_seq_header(p_msg_header.cSeq(), &cseq_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode CSeq header"); + return -1; + } + ::osip_cseq_to_str(cseq_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: Cseq:%s", hvalue); + ::osip_message_set_cseq(p_sip_message, hvalue); + ::osip_cseq_free(cseq_header); + osip_free(hvalue); + + // Event + if (p_msg_header.event().is_present()) { + if (encode_event_header(p_msg_header.event(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Event header"); + return -1; + } + } + + // Expires + if (p_msg_header.expires().is_present()) { + if (encode_expires_header(p_msg_header.expires(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Expires header"); + return -1; + } + } + + // Geolocation + if (p_msg_header.geolocation().is_present()) { + if (encode_geolocation_header(p_msg_header.geolocation(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Geolocation header"); + return -1; + } + } + + // GeolocationRouting + if (p_msg_header.geolocationRouting().is_present()) { + if (encode_geolocation_routing_header(p_msg_header.geolocationRouting(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode GeolocationRouting header"); + return -1; + } + } + + // MaxForwards + if (p_msg_header.maxForwards().is_present()) { + if (encode_max_forwards_header(p_msg_header.maxForwards(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode MaxForwards header"); + return -1; + } + } + + // MinSE + if (p_msg_header.minSE().is_present()) { + if (encode_min_se_header(p_msg_header.minSE(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode MinSE header"); + return -1; + } + } + + // PAccessNetworkInfo + if (p_msg_header.pAccessNetworkInfo().is_present()) { + if (encode_p_access_network_info_header(p_msg_header.pAccessNetworkInfo(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode PAccessNetworkInfo header"); + return -1; + } + } + + // Privacy + if (p_msg_header.privacy().is_present()) { + if (encode_privacy_header(p_msg_header.privacy(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Privacy header"); + return -1; + } + } + + // Route + if (p_msg_header.route().is_present()) { + if (encode_route_header(p_msg_header.route(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Route header"); + return -1; + } + } + + // RecordRoute + if (p_msg_header.recordRoute().is_present()) { + if (encode_record_route_header(p_msg_header.recordRoute(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode RecordRoute header"); + return -1; + } + } + + // RSeq + if (p_msg_header.rSeq().is_present()) { + if (encode_r_seq_header(p_msg_header.rSeq(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode RSeq header"); + return -1; + } + } + + // Supported + if (p_msg_header.supported().is_present()) { + if (encode_supported_header(p_msg_header.supported(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Supported header"); + return -1; + } + } + + if (p_msg_header.userAgent().is_present()) { + if (encode_user_agent_header(p_msg_header.userAgent(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode UserAgent header"); + return -1; + } + } + + // WwwAuthenticate + if (p_msg_header.wwwAuthenticate().is_present()) { + osip_www_authenticate_t* www_authenticate_header = nullptr; + if (encode_www_authenticate_header(p_msg_header.wwwAuthenticate(), &www_authenticate_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode WwwAuthenticate header"); + return -1; + } + //std::string s("Digest realm=\"testrealm@host.com\", nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\", opaque=\"5ccc069c403ebaf9f0171e9517f40e41\""); + ::osip_www_authenticate_to_str(www_authenticate_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: WwwAuthenticate:%s", hvalue); + if (::osip_message_set_www_authenticate(p_sip_message, hvalue) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to set WwwAuthenticate header in sip_message"); + return -1; + } + //int result = ::osip_message_set_www_authenticate(p_sip_message, s.c_str());//hvalue); + //loggers::get_instance().log("sip_codec_headers::encode_headers: osip_message_set_www_authenticate return code:%d", result); + osip_free(hvalue); + } + + // TODO continue + const osip_list_t* p = &(p_sip_message->headers); + unsigned int pos = 0; + unsigned int size = ::osip_list_size(p); + loggers::get_instance().log("Unknown headers count: %d\n", size); + while (pos < size) { + const osip_header_t* header = (const osip_header_t*)osip_list_get(p, pos++); + loggers::get_instance().log("sip_codec_headers::encode_headers: %p: hname='%s' : hvalue='%s'\n", header, header->hname, header->hvalue); + } // End of 'while' statement + + loggers::get_instance().log("<<< sip_codec_headers::encode_headers"); + return 0; +} // End of method encode_headers + +void sip_codec_headers::decode_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MessageHeader& p_headers) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_headers"); + + LibSip__SIPTypesAndValues::MessageHeader headers; + // Decode mandatory fields + // From + loggers::get_instance().log("sip_codec_headers::decode_headers: From"); + LibSip__SIPTypesAndValues::From from_header; + decode_from_header(::osip_message_get_from(p_sip_message), from_header); + if (from_header.is_value()) { + p_headers.fromField() = from_header; + } else { + p_headers.fromField().set_to_omit(); + } + // To + loggers::get_instance().log("sip_codec_headers::decode_headers: To"); + LibSip__SIPTypesAndValues::To to_header; + decode_to_header(::osip_message_get_to(p_sip_message), to_header); + if (to_header.is_value()) { + p_headers.toField() = to_header; + } else { + p_headers.toField().set_to_omit(); + } + // Via + loggers::get_instance().log("sip_codec_headers::decode_headers: Via"); + LibSip__SIPTypesAndValues::Via via_header; + decode_via_header(p_sip_message, via_header); + if (via_header.is_value()) { + p_headers.via() = via_header; + } else { + p_headers.via().set_to_omit(); + } + + // Decode Optional fields + LibSip__SIPTypesAndValues::Accept accept_header; + decode_accept_header(p_sip_message, accept_header); + if (accept_header.is_value()) { + p_headers.accept() = accept_header; + } else { + p_headers.accept().set_to_omit(); + } + + LibSip__SIPTypesAndValues::AcceptContact accept_contact_header; + decode_accept_contact_header(p_sip_message, accept_contact_header); + if (accept_contact_header.is_value()) { + p_headers.acceptContact() = accept_contact_header; + } else { + p_headers.acceptContact().set_to_omit(); + } + + LibSip__SIPTypesAndValues::AcceptEncoding accept_encoding_header; + decode_accept_encoding_header(p_sip_message, accept_encoding_header); + if (accept_encoding_header.is_value()) { + p_headers.acceptEncoding() = accept_encoding_header; + } else { + p_headers.acceptEncoding().set_to_omit(); + } + + LibSip__SIPTypesAndValues::AcceptLanguage accept_language_header; + decode_accept_language_header(p_sip_message, accept_language_header); + if (accept_language_header.is_value()) { + p_headers.acceptLanguage() = accept_language_header; + } else { + p_headers.acceptLanguage().set_to_omit(); + } + + LibSip__SIPTypesAndValues::AlertInfo alert_info_header; + decode_alert_info_header(p_sip_message, alert_info_header); + if (alert_info_header.is_value()) { + p_headers.alertInfo() = alert_info_header; + } else { + p_headers.alertInfo().set_to_omit(); + } + + LibSip__SIPTypesAndValues::Allow allow_header; + decode_allow_header(p_sip_message, allow_header); + if (allow_header.is_value()) { + p_headers.allow() = allow_header; + } else { + p_headers.allow().set_to_omit(); + } + + LibSip__SIPTypesAndValues::AllowEvents allow_events_header; + decode_allow_events_header(p_sip_message, allow_events_header); + if (allow_events_header.is_value()) { + p_headers.allowEvents() = allow_events_header; + } else { + p_headers.allowEvents().set_to_omit(); + } + + LibSip__SIPTypesAndValues::Authorization authorization_header; + decode_authorization_header(p_sip_message, authorization_header); + if (authorization_header.is_value()) { + p_headers.authorization() = authorization_header; + } else { + p_headers.authorization().set_to_omit(); + } + + p_headers.authenticationInfo().set_to_omit(); + + LibSip__SIPTypesAndValues::CallId call_id_header; + decode_call_id_header(p_sip_message, call_id_header); + if (call_id_header.is_value()) { + p_headers.callId() = call_id_header; + } else { + p_headers.callId().set_to_omit(); + } + + LibSip__SIPTypesAndValues::CallInfo call_info_header; + decode_call_info_header(p_sip_message, call_info_header); + if (call_info_header.is_value()) { + p_headers.callInfo() = call_info_header; + } else { + p_headers.callInfo().set_to_omit(); + } + + LibSip__SIPTypesAndValues::Contact contact_header; + decode_contact_header(p_sip_message, contact_header); + if (contact_header.is_value()) { + p_headers.contact() = contact_header; + } else { + p_headers.contact().set_to_omit(); + } + + p_headers.contentDisposition().set_to_omit(); + p_headers.contentEncoding().set_to_omit(); + p_headers.contentLanguage().set_to_omit(); + + LibSip__SIPTypesAndValues::ContentLength content_length_header; + decode_content_length_header(p_sip_message, content_length_header); + if (content_length_header.is_value()) { + p_headers.contentLength() = content_length_header; + } else { + p_headers.contentLength().set_to_omit(); + } + + LibSip__SIPTypesAndValues::ContentType content_type_header; + decode_content_type_header(p_sip_message, content_type_header); + if (content_type_header.is_value()) { + p_headers.contentType() = content_type_header; + } else { + p_headers.contentType().set_to_omit(); + } + + LibSip__SIPTypesAndValues::CSeq c_seq_header; + decode_c_seq_header(p_sip_message, c_seq_header); + if (c_seq_header.is_value()) { + p_headers.cSeq() = c_seq_header; + } else { + p_headers.cSeq().set_to_omit(); + } + + p_headers.date().set_to_omit(); + p_headers.errorInfo().set_to_omit(); + p_headers.event().set_to_omit(); + p_headers.expires().set_to_omit(); + p_headers.featureCaps().set_to_omit(); + + LibSip__SIPTypesAndValues::Geolocation geolocation_header; + decode_geolocation_header(p_sip_message, geolocation_header); + if (geolocation_header.is_value()) { + p_headers.geolocation() = geolocation_header; + } else { + p_headers.geolocation().set_to_omit(); + } + + LibSip__SIPTypesAndValues::GeolocationRouting geolocation_routing_header; + decode_geolocation_routing_header(p_sip_message, geolocation_routing_header); + if (geolocation_routing_header.is_value()) { + p_headers.geolocationRouting() = geolocation_routing_header; + } else { + p_headers.geolocationRouting().set_to_omit(); + } + + p_headers.historyInfo().set_to_omit(); + p_headers.infoPackage().set_to_omit(); + p_headers.inReplyTo().set_to_omit(); + + LibSip__SIPTypesAndValues::Event event_header; + decode_event_header(p_sip_message, event_header); + if (event_header.is_value()) { + p_headers.event() = event_header; + } else { + p_headers.event().set_to_omit(); + } + + LibSip__SIPTypesAndValues::Expires expires_header; + decode_expires_header(p_sip_message, expires_header); + if (expires_header.is_value()) { + p_headers.expires() = expires_header; + } else { + p_headers.expires().set_to_omit(); + } + + LibSip__SIPTypesAndValues::MaxForwards max_forwards_header; + decode_max_forwards_header(p_sip_message, max_forwards_header); + if (max_forwards_header.is_value()) { + p_headers.maxForwards() = max_forwards_header; + } else { + p_headers.maxForwards().set_to_omit(); + } + + p_headers.mimeVersion().set_to_omit(); + p_headers.minExpires().set_to_omit(); + + LibSip__SIPTypesAndValues::MinSE min_se_header; + decode_min_se_header(p_sip_message, min_se_header); + if (min_se_header.is_value()) { + p_headers.minSE() = min_se_header; + } else { + p_headers.minSE().set_to_omit(); + } + + p_headers.organization().set_to_omit(); + + LibSip__SIPTypesAndValues::PAccessNetworkInfo p_access_network_info_header; + decode_p_access_network_info_header(p_sip_message, p_access_network_info_header); + if (p_access_network_info_header.is_value()) { + p_headers.pAccessNetworkInfo() = p_access_network_info_header; + } else { + p_headers.pAccessNetworkInfo().set_to_omit(); + } + + p_headers.pAssertedID().set_to_omit(); + p_headers.pAssertedService().set_to_omit(); + p_headers.pAssociatedURI().set_to_omit(); + p_headers.path().set_to_omit(); + p_headers.pCalledPartyID().set_to_omit(); + p_headers.pChargingFunctionAddresses().set_to_omit(); + p_headers.pChargingVector().set_to_omit(); + p_headers.pEarlyMedia().set_to_omit(); + p_headers.pMediaAuthorization().set_to_omit(); + p_headers.pPreferredID().set_to_omit(); + p_headers.pPreferredService().set_to_omit(); + p_headers.priority().set_to_omit(); + + LibSip__SIPTypesAndValues::Privacy privacy_header; + decode_privacy_header(p_sip_message, privacy_header); + if (privacy_header.is_value()) { + p_headers.privacy() = privacy_header; + } else { + p_headers.privacy().set_to_omit(); + } + + p_headers.proxyAuthenticate().set_to_omit(); + p_headers.proxyAuthorization().set_to_omit(); + p_headers.proxyRequire().set_to_omit(); + p_headers.pVisitedNetworkID().set_to_omit(); + p_headers.rAck().set_to_omit(); + p_headers.reason().set_to_omit(); + p_headers.recvInfo().set_to_omit(); + p_headers.requestDisposition().set_to_omit(); + p_headers.referredBy().set_to_omit(); + p_headers.referTo().set_to_omit(); + p_headers.referSub().set_to_omit(); + p_headers.replaces().set_to_omit(); + p_headers.replyTo().set_to_omit(); + p_headers.require().set_to_omit(); + + LibSip__SIPTypesAndValues::RSeq r_seq_header; + decode_r_seq_header(p_sip_message, r_seq_header); + if (r_seq_header.is_value()) { + p_headers.rSeq() = r_seq_header; + } else { + p_headers.rSeq().set_to_omit(); + } + p_headers.retryAfter().set_to_omit(); + + LibSip__SIPTypesAndValues::Route route_header; + decode_route_header(p_sip_message, route_header); + if (route_header.is_value()) { + p_headers.route() = route_header; + } else { + p_headers.route().set_to_omit(); + } + + LibSip__SIPTypesAndValues::RecordRoute record_route_header; + decode_record_route_header(p_sip_message, record_route_header); + if (record_route_header.is_value()) { + p_headers.recordRoute() = record_route_header; + } else { + p_headers.recordRoute().set_to_omit(); + } + + p_headers.securityClient().set_to_omit(); + p_headers.securityServer().set_to_omit(); + p_headers.securityVerify().set_to_omit(); + p_headers.server().set_to_omit(); + p_headers.serviceRoute().set_to_omit(); + + LibSip__SIPTypesAndValues::SessionExpires session_expires; + decode_session_expires_header(p_sip_message, session_expires); + if (session_expires.is_value()) { + p_headers.sessionExpires() = session_expires; + } else { + p_headers.sessionExpires().set_to_omit(); + } + + p_headers.sessionId().set_to_omit(); + p_headers.sipETag().set_to_omit(); + p_headers.sipIfMatch().set_to_omit(); + p_headers.subject().set_to_omit(); + p_headers.subscriptionState().set_to_omit(); + + LibSip__SIPTypesAndValues::Supported supported_header; + decode_supported_header(p_sip_message, supported_header); + if (supported_header.is_value()) { + p_headers.supported() = supported_header; + } else { + p_headers.supported().set_to_omit(); + } + + p_headers.timestamp__().set_to_omit(); + p_headers.unsupported().set_to_omit(); + p_headers.userToUser().set_to_omit(); + + LibSip__SIPTypesAndValues::UserAgent user_agent_header; + decode_user_agent_header(p_sip_message, user_agent_header); + if (user_agent_header.is_value()) { + p_headers.userAgent() = user_agent_header; + } else { + p_headers.userAgent().set_to_omit(); + } + p_headers.warning().set_to_omit(); + + LibSip__SIPTypesAndValues::WwwAuthenticate www_authenticate_header; + osip_www_authenticate_t* www_authenticate = nullptr; + ::osip_message_get_www_authenticate(p_sip_message, 0, &www_authenticate); + decode_www_authenticate_header(www_authenticate, www_authenticate_header); + if (www_authenticate_header.is_value()) { + p_headers.wwwAuthenticate() = www_authenticate_header; + } else { + p_headers.wwwAuthenticate().set_to_omit(); + } + + p_headers.resourcePriority().set_to_omit(); + p_headers.answerMode().set_to_omit(); + p_headers.privAnswerMode().set_to_omit(); + p_headers.targetDialog().set_to_omit(); + p_headers.pAnswerState().set_to_omit(); + p_headers.undefinedHeader__List().set_to_omit(); + + // List unprocessed headers + const osip_list_t* p = &(p_sip_message->headers); + unsigned int pos = 0; + unsigned int size = ::osip_list_size(p); + loggers::get_instance().log("Unknown headers count: %d\n", size); + while (pos < size) { + const osip_header_t* header = (const osip_header_t*)osip_list_get(p, pos++); + loggers::get_instance().log("sip_codec_headers::decode_headers: %p: hname='%s' : hvalue='%s'\n", header, header->hname, header->hvalue); + } // End of 'while' statement + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_headers: ", p_headers); +} // End of method decode_headers + +int sip_codec_headers::encode_sip_url(const LibSip__SIPTypesAndValues::SipUrl& p_sip_uri, osip_uri_t** p_uri) +{ // TODO To be renamed into encode_uri + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_sip_uri: ", p_sip_uri); + + std::string host; + std::string port; + osip_uri_t *uri = nullptr; + ::osip_uri_init(&uri); + const LibSip__SIPTypesAndValues::UriComponents& components = p_sip_uri.components(); + if (components.ischosen(LibSip__SIPTypesAndValues::UriComponents::ALT_sip)) { + ::osip_uri_set_scheme(uri, (char*)static_cast(p_sip_uri.scheme())); + const LibSip__SIPTypesAndValues::SipUriComponents& s = p_sip_uri.components().sip(); + if (s.userInfo().is_present()) { + const LibSip__SIPTypesAndValues::UserInfo& u = static_cast(s.userInfo()); + ::osip_uri_set_username(uri, (char*)static_cast(static_cast(u.userOrTelephoneSubscriber()))); + if (u.password().is_present()) { + const CHARSTRING& c = static_cast(u.password()); + ::osip_uri_set_password(uri, (char*)static_cast(c)); + } + } + encode_host_port(s.hostPort(), host, port); + if (!host.empty()) { + ::osip_uri_set_host(uri, (char*)host.c_str()); + } + if (!port.empty()) { + ::osip_uri_set_port(uri, (char*)port.c_str()); + } + } else if (components.ischosen(LibSip__SIPTypesAndValues::UriComponents::ALT_tel)) { + const LibSip__SIPTypesAndValues::TelUriComponents& t = p_sip_uri.components().tel(); + loggers::get_instance().error("sip_codec_headers::encode_sip_uri: Unsupported LibSip__SIPTypesAndValues::UriComponents::ALT_tel"); + } else if (components.ischosen(LibSip__SIPTypesAndValues::UriComponents::ALT_urn)) { + const LibSip__SIPTypesAndValues::UrnUriComponents& u = p_sip_uri.components().urn(); + loggers::get_instance().log("sip_codec_headers::encode_sip_uri: Decode Urn"); + std::string str(static_cast(p_sip_uri.scheme())); + str += ":"; + str += static_cast(u.namespaceId()); + str += ":"; + str += static_cast(u.namespaceSpecificString()); + ::osip_uri_parse(uri, str.c_str()); + } else if (components.ischosen(LibSip__SIPTypesAndValues::UriComponents::ALT_other)) { + std::string str(static_cast(p_sip_uri.scheme())); + str += ":"; + str += static_cast(p_sip_uri.components().other()); + ::osip_uri_parse(uri, str.c_str()); + } // else, noting to do + + if (uri != nullptr) { + ::osip_uri_clone(uri, p_uri); + } else { + *p_uri = nullptr; + } + + char* buffer = nullptr; + std::size_t length = 0; + int result = ::osip_uri_to_str(*p_uri, &buffer); + if (result != 0) { + loggers::get_instance().warning("sip_codec_headers::encode_sip_uri: Failed to encode data structures"); + } else { + loggers::get_instance().log("sip_codec_headers::encode_sip_uri: URI:%s", buffer); + } + + return 0; +} // End of method encode_sip_url + +void sip_codec_headers::encode_host_port(const LibSip__SIPTypesAndValues::HostPort& p_host_port, std::string& p_host, std::string& p_port) +{ + loggers::get_instance().log(">>> sip_codec_headers::encode_host_port"); + + if (p_host_port.host().is_present()) { + p_host.assign(static_cast(static_cast(p_host_port.host()))); + } else { + p_host.clear(); + } + loggers::get_instance().log("sip_codec_headers::encode_host_port: host:'%s'", p_host.c_str()); + if (p_host_port.portField().is_present()) { + p_port.assign(std::to_string(static_cast(static_cast(p_host_port.portField())))); + } else { + p_port.clear(); + } + loggers::get_instance().log("sip_codec_headers::encode_port_port: port:'%s'", p_port.c_str()); +} // End of method encode_host_port + +int sip_codec_headers::encode_accept_header(const LibSip__SIPTypesAndValues::Accept& p_accept, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_accept_header"); + + if (!p_accept.acceptArgs().is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::AcceptBody__List& al = static_cast(*p_accept.acceptArgs().get_opt_value()); + if (al.lengthof() == 0) { + return 0; + } + std::string accepts; + for (int i = 0; i < al.lengthof(); i++) { + const LibSip__SIPTypesAndValues::AcceptBody& b = al[i]; + loggers::get_instance().log_msg("sip_codec_headers::encode_accept_header: b: ", b); + osip_accept_t *accept; + accept_init(&accept); + // Split it using '/' as separator + std::vector output = converter::get_instance().split(static_cast(b.mediaRange()), "/"); + accept->type = ::strdup(output[0].c_str()); + if (output.size() > 1) { + accept->subtype = ::strdup(output[1].c_str()); + } + if (b.acceptParam().is_present()) { + encode_semi_colon_params(static_cast(b.acceptParam()), &(accept->gen_params)); + } + char *buff; + ::osip_accept_to_str(accept, &buff); + accepts += (const char*)buff; + accepts += ","; + osip_free(buff); + ::osip_accept_free(accept); + loggers::get_instance().log("sip_codec_headers::encode_accept_header: accepts: %s", accepts.c_str()); + } // End of 'for' statement + accepts.resize(accepts.length() - 1); // Remove the last ',' + ::osip_message_set_accept(*p_sip_message, ::strdup(accepts.c_str())); + + return 0; +} // End of method encode_accept_header + +int sip_codec_headers::encode_accept_contact_header(const LibSip__SIPTypesAndValues::AcceptContact& p_accept_contact, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_accept_contact_header"); + + const LibSip__SIPTypesAndValues::AcRcValue__List& al = p_accept_contact.acValues(); + if (al.lengthof() == 0) { + return 0; + } + + std::string accepts; + for (int i = 0; i < al.lengthof(); i++) { + const LibSip__SIPTypesAndValues::AcRcValue& a = al[i]; + loggers::get_instance().log_msg("sip_codec_headers::encode_accept_contact_header: a: ", a); + accepts += static_cast(a.wildcard()); + if (a.acRcParams().is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*a.acRcParams().get_opt_value()); + for (int j = 0; j < l.lengthof(); j++) { + accepts += ";"; + const LibSip__Common::GenericParam& p = l[j]; + accepts += static_cast(p.id()); + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value());; + accepts += "="; + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + accepts += static_cast(g.tokenOrHost()); + } else { + accepts += static_cast(g.quotedString()); + } + } + } // End of 'for' statement + } + accepts += ","; + loggers::get_instance().log("sip_codec_headers::encode_accept_header: accepts: %s", accepts.c_str()); + } // End of 'for' statement + accepts.resize(accepts.length() - 1); // Remove the last ',' + ::osip_message_set_header(*p_sip_message, (const char *)"Accept-Contact", ::strdup(accepts.c_str())); + + loggers::get_instance().log("<<< sip_codec_headers::encode_accept_contact_header"); + return 0; +} // End of method encode_accept_contact_header + +int sip_codec_headers::encode_allow_header(const OPTIONAL& p_allow, osip_message_t** p_sip_message) +{ + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_allow_header", p_allow); + + const LibSip__SIPTypesAndValues::Allow& allow = static_cast(*p_allow.get_opt_value()); + + if (!allow.methods().is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::Method__List& m = static_cast(*allow.methods().get_opt_value()); + if (m.lengthof() == 0) { + return 0; + } + + std::string str(static_cast(m[0])); + if (m.lengthof() > 1) { + int i = 1; + do { + str += ","; + str += static_cast(m[i++]); + } while (i < m.lengthof()); + } + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Allow", str.c_str()); + + loggers::get_instance().log("<<< sip_codec_headers::encode_allow_header"); + return 0; +} // End of method encode_allow_header + +int sip_codec_headers::encode_authorization_header(const LibSip__SIPTypesAndValues::Authorization& p_authorization, osip_authorization_t** p_authorization_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::encode_authorization_header"); + + ::osip_authorization_init(p_authorization_header); + + const LibSip__SIPTypesAndValues::CredentialsList& l = p_authorization.body(); + int i = 0; + do { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: Processing item #%d", i); + const LibSip__SIPTypesAndValues::Credentials& c = l[i++]; + if (c.ischosen(LibSip__SIPTypesAndValues::Credentials::ALT_digestResponse)) { + bool processed = true; + const LibSip__Common::CommaParam__List& p = c.digestResponse(); + if (p.lengthof() > 0) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: Processing param ", p); + int j = 0; + do { + const LibSip__Common::GenericParam& g = p[j++]; + std::string str(static_cast(g.id())); + if (str.compare("realm") == 0) { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: realm found"); + if (g.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: GenValue: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: tokenOrHost: ", v.tokenOrHost()); + ::osip_authorization_set_realm(*p_authorization_header, (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: quotedString: ", v.quotedString()); + ::osip_authorization_set_realm(*p_authorization_header, (char*)::strdup(static_cast(v.quotedString()))); + } + } else { + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented(4)"); + } + } else if (str.compare("username") == 0) { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: username found"); + if (g.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: GenValue: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: tokenOrHost: ", v.tokenOrHost()); + ::osip_authorization_set_username(*p_authorization_header, (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: quotedString: ", v.quotedString()); + ::osip_authorization_set_username(*p_authorization_header, (char*)::strdup(static_cast(v.quotedString()))); + } + } else { + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented(6)"); + } + } else if (str.compare("uri") == 0) { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: uri found"); + if (g.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: GenValue: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: tokenOrHost: ", v.tokenOrHost()); + ::osip_authorization_set_uri(*p_authorization_header, (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: quotedString: ", v.quotedString()); + ::osip_authorization_set_uri(*p_authorization_header, (char*)::strdup(static_cast(v.quotedString()))); + } + } else { + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented(7)"); + } + } else if (str.compare("nonce") == 0) { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: nonce found"); + if (g.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: GenValue: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: tokenOrHost: ", v.tokenOrHost()); + ::osip_authorization_set_nonce(*p_authorization_header, (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: quotedString: ", v.quotedString()); + ::osip_authorization_set_nonce(*p_authorization_header, (char*)::strdup(static_cast(v.quotedString()))); + } + } else { + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented(10)"); + } + } else if (str.compare("response") == 0) { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: response found"); + if (g.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: GenValue: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: tokenOrHost: ", v.tokenOrHost()); + ::osip_authorization_set_response(*p_authorization_header, (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: quotedString: ", v.quotedString()); + ::osip_authorization_set_response(*p_authorization_header, (char*)::strdup(static_cast(v.quotedString()))); + } + } else { + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented(12)"); + } + } else { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: Set processed to false for %s", str.c_str()); + processed = false; + } + } while (j < p.lengthof()); + } + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: processed: %x", processed); + if (processed) { + ::osip_authorization_set_auth_type(*p_authorization_header, (char*)::strdup("Digest")); + } + } else { + const LibSip__SIPTypesAndValues::OtherAuth& o = c.otherResponse(); + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented"); + } + } while (i < l.lengthof()); + + return 0; +} // End of method encode_authorization_header + +int sip_codec_headers::encode_call_id_header(const LibSip__SIPTypesAndValues::CallId& p_call_id, osip_call_id_t** p_call_id_header) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_call_id_header", p_call_id.callid()); + + ::osip_call_id_init(p_call_id_header); + ::osip_call_id_parse(*p_call_id_header, static_cast(p_call_id.callid())); + + loggers::get_instance().log("<<< sip_codec_headers::encode_call_id_header"); + return 0; +} // End of method encode_call_id_header + +int sip_codec_headers::encode_call_info_header(const OPTIONAL& p_call_info, osip_message_t** p_sip_message) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_call_info_header", p_call_info); + + const LibSip__SIPTypesAndValues::CallInfo& call_info = static_cast(*p_call_info.get_opt_value()); + + if (!call_info.callInfoBody().is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::CallInfoBody__List& c = static_cast(*call_info.callInfoBody().get_opt_value()); + if (c.lengthof() == 0) { + return 0; + } + + int pos = 0; + std::string value; + do { + const LibSip__SIPTypesAndValues::CallInfoBody& call_info_body = c[pos++]; + loggers::get_instance().log_msg("sip_codec_headers::encode_call_info_header: Processing ", call_info_body); + osip_call_info_t *header; + ::osip_call_info_init(&header); + ::osip_call_info_set_uri(header, (char*)static_cast(call_info_body.url())); + if (call_info_body.infoParams().is_present()) { + encode_semi_colon_params(static_cast(call_info_body.infoParams()), &(header)->gen_params); + } + char *buffer; + ::osip_call_info_to_str(header, &buffer); + value += buffer; + osip_free(buffer); + osip_free(header); + loggers::get_instance().log("sip_codec_headers::encode_call_info_header: value=%s", value.c_str()); + } while (pos < c.lengthof()); + ::osip_message_set_header((osip_message_t *)*p_sip_message, (const char *)"callInfo", value.c_str()); + loggers::get_instance().log("<<< sip_codec_headers::encode_call_info_header"); + return 0; +} // End of method encode_call_info_header + +int sip_codec_headers::encode_contact_header(const LibSip__SIPTypesAndValues::Contact& p_contact, osip_contact_t** p_contact_header) { + loggers::get_instance().log(">>> sip_codec_headers::encode_contact_header"); + + ::osip_contact_init(p_contact_header); + const LibSip__SIPTypesAndValues::ContactBody& body = p_contact.contactBody(); + if (body.ischosen(LibSip__SIPTypesAndValues::ContactBody::ALT_wildcard)) { + const CHARSTRING& wildcard = body.wildcard(); + loggers::get_instance().warning("sip_codec_headers::encode_contact_header: wildcard not implemented yet"); + *p_contact_header = nullptr; + return -1; + } else if (body.ischosen(LibSip__SIPTypesAndValues::ContactBody::ALT_contactAddresses)) { + const LibSip__SIPTypesAndValues::ContactAddress__List& l = body.contactAddresses(); + // Encode AddressField + for (int i = 0; i < l.size_of(); i++) { + osip_uri_t* uri = nullptr; + const LibSip__SIPTypesAndValues::ContactAddress c = l[i]; + if (c.addressField().ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_nameAddr)) { + const LibSip__SIPTypesAndValues::NameAddr& addr = c.addressField().nameAddr(); + if (encode_sip_url(addr.addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_contact_header: Failed to encode SipUrl"); + ::osip_contact_free(*p_contact_header); + *p_contact_header = nullptr; + return -1; + } + ::osip_contact_set_url(*p_contact_header, uri); + if (addr.displayName().is_present()) { + const LibSip__SIPTypesAndValues::DisplayName& n = static_cast(addr.displayName()); + if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_token)) { + ::osip_contact_set_displayname(*p_contact_header, (char*)::strdup(static_cast(static_cast(n.token())))); + } else if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_quotedString)) { + ::osip_contact_set_displayname(*p_contact_header, (char*)::strdup(static_cast(static_cast(n.quotedString())))); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_contact_header: Failed to encode DisplayName"); + ::osip_contact_free(*p_contact_header); + *p_contact_header = nullptr; + return -1; + } + } + } else if (c.addressField().ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_addrSpecUnion)) { + if (encode_sip_url(c.addressField().addrSpecUnion(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_contact_header: Failed to encode SipUrl"); + ::osip_contact_free(*p_contact_header); + *p_contact_header = nullptr; + return -1; + } + ::osip_contact_set_url(*p_contact_header, uri); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_contact_header: Failed to encode Addr__Union"); + ::osip_contact_free(*p_contact_header); + *p_contact_header = nullptr; + return -1; + } + // Encode contactParams + if (c.contactParams().is_present()) { + encode_semi_colon_params(static_cast(c.contactParams()), &(*p_contact_header)->gen_params); + } + + } // End of 'for' statement + } else { + return -1; + } + + loggers::get_instance().log("<<< sip_codec_headers::encode_contact_header"); + return 0; +} // End of method encode_contact_header + +int sip_codec_headers::encode_content_length_header(const LibSip__SIPTypesAndValues::ContentLength& p_content_length, osip_content_length_t** p_content_length_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::encode_content_length_header"); + + ::osip_content_length_init(p_content_length_header); + (*p_content_length_header)->value = (char*)::strdup(std::to_string(static_cast(p_content_length.len())).c_str()); + + loggers::get_instance().log("<<< sip_codec_headers::encode_content_length_header"); + return 0; +} // End of method encode_content_length_header + +int sip_codec_headers::encode_content_type_header(const LibSip__SIPTypesAndValues::ContentType& p_content_type, osip_content_type_t** p_content_type_header) +{ + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_content_type_header: ", p_content_type); + + ::osip_content_type_init(p_content_type_header); + + // Split type/subtype using '/' as separator + std::vector output = converter::get_instance().split(static_cast(p_content_type.mTypeSubtype()), "/"); + (*p_content_type_header)->type = ::strdup(output[0].c_str()); + if (output.size() > 1) { + (*p_content_type_header)->subtype = ::strdup(output[1].c_str()); + } + + if (p_content_type.mParams().is_present()) { + encode_semi_colon_params(static_cast(p_content_type.mParams()), &((*p_content_type_header)->gen_params)); + } + + loggers::get_instance().log("<<< sip_codec_headers::encode_content_type_header"); + return 0; +} // End of method encode_content_type_header + +int sip_codec_headers::encode_c_seq_header(const LibSip__SIPTypesAndValues::CSeq& p_c_seq, osip_cseq_t** p_c_seq_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::encode_c_seq_header"); + + ::osip_cseq_init(p_c_seq_header); + ::osip_cseq_set_number(*p_c_seq_header, (char*)::strdup(std::to_string(static_cast(p_c_seq.seqNumber())).c_str())); + ::osip_cseq_set_method(*p_c_seq_header, (char*)::strdup(static_cast(p_c_seq.method()))); + + return 0; +} // End of method encode_c_seq_header + +int sip_codec_headers::encode_event_header(const OPTIONAL& p_event, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_event_header"); + + if (!p_event.is_present()) { + return 0; + } + const LibSip__SIPTypesAndValues::Event& event = static_cast(*p_event.get_opt_value()); + + // eventType + std::string value(static_cast(event.eventType())); + loggers::get_instance().log("sip_codec_headers::encode_event_header: eventType: %s", value.c_str()); + + // eventParam + const OPTIONAL& event_param = event.eventParams(); // TODO Create a method to fill an std::string with SemicolonParam__List + if (event_param.is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*event_param.get_opt_value()); + int i = 0; + do { + value += ";"; + const LibSip__Common::GenericParam& g = l[i]; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + i += 1; + } while (i < l.lengthof()); + } + loggers::get_instance().log("sip_codec_headers::encode_event_header: %s", value.c_str()); + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Event", value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_expires_header(const OPTIONAL& p_expires, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_expires_header"); + + if (!p_expires.is_present()) { + return 0; + } + const LibSip__SIPTypesAndValues::Expires& expires = static_cast(*p_expires.get_opt_value()); + + // deltaSec + std::string value(static_cast(expires.deltaSec())); + + loggers::get_instance().log("sip_codec_headers::encode_expires_header: %s", value.c_str()); + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Expires", value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_from_header(const LibSip__SIPTypesAndValues::From& p_from, osip_from_t** p_from_header) { + loggers::get_instance().log(">>> sip_codec_headers::encode_from_header"); + + ::osip_from_init(p_from_header); + // Endode addressField + osip_uri_t* uri = nullptr; + const LibSip__SIPTypesAndValues::Addr__Union& a = p_from.addressField(); + if (a.ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_nameAddr)) { + const LibSip__SIPTypesAndValues::NameAddr& addr = a.nameAddr(); + if (encode_sip_url(addr.addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_from_header: Failed to encode SipUrl"); + ::osip_from_free(*p_from_header); + *p_from_header = nullptr; + return -1; + } + ::osip_from_set_url(*p_from_header, uri); + if (addr.displayName().is_present()) { + const LibSip__SIPTypesAndValues::DisplayName& n = static_cast(addr.displayName()); + if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_token)) { + ::osip_from_set_displayname(*p_from_header, (char*)::strdup(static_cast(static_cast(n.token())))); + } else if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_quotedString)) { + ::osip_from_set_displayname(*p_from_header, (char*)::strdup(static_cast(static_cast(n.quotedString())))); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_from_header: Failed to encode DisplayName"); + ::osip_from_free(*p_from_header); + *p_from_header = nullptr; + return -1; + } + } + } else if (a.ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_addrSpecUnion)) { + if (encode_sip_url(a.addrSpecUnion(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_from_header: Failed to encode SipUrl"); + ::osip_from_free(*p_from_header); + *p_from_header = nullptr; + return -1; + } + ::osip_from_set_url(*p_from_header, uri); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_from_header: Failed to encode Addr__Union"); + ::osip_from_free(*p_from_header); + *p_from_header = nullptr; + return -1; + } + // Encode fromParams + if (p_from.fromParams().is_present()) { + encode_semi_colon_params(static_cast(p_from.fromParams()), &(*p_from_header)->gen_params); + } + + return 0; +} // End of method encode_from_header + +int sip_codec_headers::encode_geolocation_header(const OPTIONAL& p_geolocation, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_geolocation_header"); + + if (!p_geolocation.is_present()) { + return 0; + } + const LibSip__SIPTypesAndValues::Geolocation& geolocation = static_cast(*p_geolocation.get_opt_value()); + + // addrSpec + const LibSip__SIPTypesAndValues::SipUrl& addr = geolocation.addrSpec(); + osip_uri_t* uri = nullptr; + if (encode_sip_url(addr, &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_geolocation_header: Failed to encode SipUrl"); + return -1; + } + char *buff = nullptr; + if (::osip_uri_to_str(uri, &buff) != 0) { + loggers::get_instance().warning("sip_codec_headers::encode_geolocation_header: Failed to convert SipUrl"); + return -1; + } + std::string value(buff); + osip_free(buff); + loggers::get_instance().log("sip_codec_headers::encode_geolocation_header: addrSpec: %s", value.c_str()); + // geolocParam + const OPTIONAL& geoloc_param = geolocation.geolocParam(); // TODO Create a method to fill an std::string with SemicolonParam__List + if (geoloc_param.is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*geoloc_param.get_opt_value()); + int i = 0; + do { + value += ";"; + const LibSip__Common::GenericParam& g = l[i]; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + i += 1; + } while (i < l.lengthof()); + } + loggers::get_instance().log("sip_codec_headers::encode_geolocation_header: %s", value.c_str()); + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Geolocation", value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_geolocation_routing_header(const OPTIONAL& p_geolocation_routing, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_geolocation_routing_header"); + + if (!p_geolocation_routing.is_present()) { + return 0; + } + const LibSip__SIPTypesAndValues::GeolocationRouting& geolocation_routing = static_cast(*p_geolocation_routing.get_opt_value()); + std::string value; + if (geolocation_routing.state() == LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__YES__E) { + value = "yes"; + } else if (geolocation_routing.state() == LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__NO__E) { + value = "no"; + } else { + value = "other"; + } + loggers::get_instance().log("sip_codec_headers::encode_geolocation_routing_header: state: %s", value.c_str()); + // genericValue + const OPTIONAL& generic_value = geolocation_routing.genericValue(); + if (generic_value.is_present()) { + const LibSip__Common::GenericParam& g = static_cast(*geolocation_routing.genericValue().get_opt_value()); + value += ";"; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + } + + loggers::get_instance().log("sip_codec_headers::encode_geolocation_routing_header: %s", value.c_str()); + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Geolocation-Routing", value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_max_forwards_header(const OPTIONAL& p_max_forwards, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_max_forwards_header"); + + if (!p_max_forwards.is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::MaxForwards& max_forwards = static_cast(*p_max_forwards.get_opt_value()); + osip_message_set_max_forwards(*p_sip_message, std::to_string(static_cast(max_forwards.forwards())).c_str()); + + return 0; +} + +int sip_codec_headers::encode_min_se_header(const OPTIONAL& p_min_se, osip_message_t** p_sip_message) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_min_se_header", p_min_se); + + const LibSip__SIPTypesAndValues::MinSE& min_se = static_cast(*p_min_se.get_opt_value()); + // deltaSec + std::string value(static_cast(min_se.deltaSec())); + // seParam + const OPTIONAL& se_param = min_se.minSeParam(); // TODO Create a method to fill an std::string with SemicolonParam__List + if (se_param.is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*se_param.get_opt_value()); + int i = 0; + do { + value += ";"; + const LibSip__Common::GenericParam& g = l[i]; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + i += 1; + } while (i < l.lengthof()); + } + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Min-SE", value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_p_access_network_info_header(const OPTIONAL& p_p_access_network_info_header, osip_message_t** p_sip_message) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_p_access_network_info_header", p_p_access_network_info_header); + + const LibSip__SIPTypesAndValues::PAccessNetworkInfo& p_access_network_info_header = static_cast(*p_p_access_network_info_header.get_opt_value()); + // accessType + std::string value(static_cast(p_access_network_info_header.accessType())); + // Generic parameters + const OPTIONAL& p_access_network_info_param = p_access_network_info_header.genericParams(); // TODO Create a method to fill an std::string with SemicolonParam__List + if (p_access_network_info_param.is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*p_access_network_info_param.get_opt_value()); + int i = 0; + do { + value += ";"; + const LibSip__Common::GenericParam& g = l[i]; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + i += 1; + } while (i < l.lengthof()); + } + ::osip_message_set_header((osip_message_t *)*p_sip_message, (const char *)"P-Access-Network-Info", value.c_str()); + + return 0; +} // End of method encode_p_access_network_info_header + +int sip_codec_headers::encode_p_associated_uri_header(const OPTIONAL& p_p_associated_uri_header, osip_message_t** p_sip_message) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_p_associated_uri_header", p_p_associated_uri_header); + + if (!p_p_associated_uri_header.is_present()) { + return 0; + } + const LibSip__SIPTypesAndValues::PAssociatedURI& p_associated_uri_header = static_cast(*p_p_associated_uri_header.get_opt_value()); + + const LibSip__SIPTypesAndValues::NameAddrParam__List& l = p_associated_uri_header.nameAddrList(); + std::string value; + for (int i = 0; i < l.lengthof(); i++) { + osip_uri_t* uri = nullptr; + if (encode_sip_url(l[i].nameAddr().addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_p_associated_uri_header: Failed to encode SipUrl"); + return -1; + } + char *buff = nullptr; + if (::osip_uri_to_str(uri, &buff) != 0) { + loggers::get_instance().warning("sip_codec_headers::encode_p_associated_uri_header: Failed to convert SipUrl"); + return -1; + } + value += buff; + osip_free(buff); + if (l[i].genericParams().is_present()) { + // TODO To be implemented + loggers::get_instance().warning("sip_codec_headers::encode_p_associated_uri_header: To be implemented"); + } + value += ","; + } // End of 'for' statement + ::osip_message_set_header((osip_message_t *)*p_sip_message, (const char *)"P-Associated-URI", value.c_str()); + return 0; +} + +int sip_codec_headers::encode_privacy_header(const OPTIONAL& p_privacy_header, osip_message_t** p_sip_message) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_privacy_header", p_privacy_header); + + const LibSip__SIPTypesAndValues::Privacy& privacy_header = static_cast(*p_privacy_header.get_opt_value()); + + const LibSip__SIPTypesAndValues::PrivacyValue__List& m = privacy_header.privValueList(); + if (m.lengthof() == 0) { + return 0; + } + + std::string str(static_cast(m[0])); + if (m.lengthof() > 1) { + int i = 1; + do { + str += ","; + str += static_cast(m[i++]); + } while (i < m.lengthof()); + } + ::osip_message_set_header((osip_message_t *)*p_sip_message, (const char *)"Privacy", str.c_str()); + + loggers::get_instance().log("<<< sip_codec_headers::encode_privacy_header"); + return 0; +} // End of method encode_privacy_header + +int sip_codec_headers::encode_route_header(const OPTIONAL& p_route_header, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_route_header", p_route_header); + + osip_route_t* route_header; + ::osip_route_init(&route_header); + const LibSip__SIPTypesAndValues::Route& r = static_cast(*p_route_header.get_opt_value()); + const LibSip__SIPTypesAndValues::RouteBody__List& l = r.routeBody(); + for (int i = 0; i < l.lengthof(); i++) { + const LibSip__SIPTypesAndValues::NameAddr& addr = l[i].nameAddr(); + osip_uri_t* uri = nullptr; + if (encode_sip_url(addr.addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_route_header: Failed to encode SipUrl"); + ::osip_route_free(route_header); + return -1; + } + ::osip_route_set_url(route_header, uri); + // Encode rrParam + if (l[i].rrParam().is_present()) { + encode_semi_colon_params(static_cast(l[i].rrParam()), &(route_header)->gen_params); + } + } // End of 'for' statement + + char* hvalue; + int result = ::osip_route_to_str(route_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_route_header: '%s'- result:%d", hvalue, result); + if (::osip_message_set_route(*p_sip_message, hvalue) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_route_header: Failed to set Route header in sip_message"); + return -1; + } + ::osip_route_free(route_header); + osip_free(hvalue); + + return 0; +} + +int sip_codec_headers::encode_record_route_header(const OPTIONAL& p_record_route_header, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_record_route_header", p_record_route_header); + + osip_record_route_t* record_route_header; + ::osip_record_route_init(&record_route_header); + const LibSip__SIPTypesAndValues::RecordRoute& r = static_cast(*p_record_route_header.get_opt_value()); + const LibSip__SIPTypesAndValues::RouteBody__List& l = r.routeBody(); + for (int i = 0; i < l.lengthof(); i++) { + const LibSip__SIPTypesAndValues::NameAddr& addr = l[i].nameAddr(); + osip_uri_t* uri = nullptr; + if (encode_sip_url(addr.addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_record_route_header: Failed to encode SipUrl"); + ::osip_record_route_free(record_route_header); + return -1; + } + ::osip_record_route_set_url(record_route_header, uri); + // Encode rrParam + if (l[i].rrParam().is_present()) { + encode_semi_colon_params(static_cast(l[i].rrParam()), &(record_route_header)->gen_params); + } + } // End of 'for' statement + + char* hvalue; + int result = ::osip_record_route_to_str(record_route_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_record_route_header: '%s'- result:%d", hvalue, result); + if (::osip_message_set_record_route(*p_sip_message, hvalue) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_record_route_header: Failed to set RecordRoute header in sip_message"); + return -1; + } + ::osip_record_route_free(record_route_header); + osip_free(hvalue); + + return 0; +} + +int sip_codec_headers::encode_r_seq_header(const OPTIONAL& p_r_seq, osip_message_t** p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_headers::encode_r_seq_header", p_r_seq); + + const LibSip__SIPTypesAndValues::RSeq& r_seq = static_cast(*p_r_seq.get_opt_value()); + ::osip_message_set_header((osip_message_t *)*p_sip_message, (const char *)"RSeq", static_cast(std::to_string(r_seq.responseNum()).c_str())); + + return 0; +} // End of method encode_r_seq_header + +int sip_codec_headers::encode_session_expires_header(const OPTIONAL& p_session_expires, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_session_expires_header"); + + if (!p_session_expires.is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::SessionExpires& session_expires = static_cast(*p_session_expires.get_opt_value()); + // deltaSec + std::string value(static_cast(session_expires.deltaSec())); + // seParam + const OPTIONAL& se_param = session_expires.seParam(); // TODO Create a method to fill an std::string with SemicolonParam__List + if (se_param.is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*se_param.get_opt_value()); + int i = 0; + do { + value += ";"; + const LibSip__Common::GenericParam& g = l[i]; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + } while (i < l.lengthof()); + } + osip_message_set_expires(*p_sip_message, value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_supported_header(const OPTIONAL& p_supported, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_supported_header"); + + if (!p_supported.is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::Supported& supported = static_cast(*p_supported.get_opt_value()); + const OPTIONAL& tags = supported.optionsTags(); + if (!tags.is_present()) { + return 0; + } + if (encode_option_tag_list(static_cast(*tags.get_opt_value()), "Supported", p_sip_message) == -1) { + return -1; + } + + return 0; +} + +int sip_codec_headers::encode_user_agent_header(const OPTIONAL& p_user_agent, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_user_agent_header"); + + if (!p_user_agent.is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::UserAgent& user_agent = static_cast(*p_user_agent.get_opt_value()); + const LibSip__SIPTypesAndValues::ServerVal__List& s = user_agent.userAgentBody(); + if (encode_server_val_list(s, "User-Agent", p_sip_message) == -1) { + return -1; + } + + return 0; +} + +int sip_codec_headers::encode_to_header(const LibSip__SIPTypesAndValues::To& p_to, osip_to_t** p_to_header) { + loggers::get_instance().log(">>> sip_codec_headers::encode_to_header"); + + ::osip_to_init(p_to_header); + const LibSip__SIPTypesAndValues::Addr__Union& a = p_to.addressField(); + if (a.ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_nameAddr)) { + const LibSip__SIPTypesAndValues::NameAddr& addr = a.nameAddr(); + osip_uri_t *uri; + if (encode_sip_url(addr.addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_to_header: Failed to encode SipUrl"); + ::osip_to_free(*p_to_header); + *p_to_header = nullptr; + return -1; + } + ::osip_to_set_url(*p_to_header, uri); + //::osip_uri_free(uri); + if (addr.displayName().is_present()) { + const LibSip__SIPTypesAndValues::DisplayName& n = static_cast(addr.displayName()); + if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_token)) { + ::osip_to_set_displayname(*p_to_header, (char*)::strdup(static_cast(static_cast(n.token())))); + } else if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_quotedString)) { + ::osip_to_set_displayname(*p_to_header, (char*)::strdup(static_cast(static_cast(n.quotedString())))); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_to_header: Failed to encode DisplayName"); + ::osip_to_free(*p_to_header); + *p_to_header = nullptr; + return -1; + } + } + } else if (a.ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_addrSpecUnion)) { + osip_uri_t *uri; + if (encode_sip_url(a.addrSpecUnion(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_to_header: Failed to encode SipUrl"); + ::osip_to_free(*p_to_header); + *p_to_header = nullptr; + return -1; + } + ::osip_to_set_url(*p_to_header, uri); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_to_header: Failed to encode Addr__Union"); + ::osip_to_free(*p_to_header); + *p_to_header = nullptr; + return -1; + } + if (p_to.toParams().is_present()) { + encode_semi_colon_params(static_cast(p_to.toParams()), &(*p_to_header)->gen_params); + } + + return 0; +} // End of method encode_to_header + +int sip_codec_headers::encode_via_header(const LibSip__SIPTypesAndValues::Via& p_via, osip_via_t** p_via_header) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_via_header: ", p_via); + + ::osip_via_init(p_via_header); + const LibSip__SIPTypesAndValues::ViaBody__List& l = p_via.viaBody(); + for (int i = 0; i < l.size_of(); i++) { + const LibSip__SIPTypesAndValues::ViaBody v = l[i]; + loggers::get_instance().log_msg("sip_codec_headers::encode_via_header: Processing ", v); + + ::via_set_protocol(*p_via_header, (char*)::strdup(static_cast(v.sentProtocol().transport()))); + ::via_set_version(*p_via_header, (char*)::strdup(static_cast(v.sentProtocol().protocolVersion()))); + std::string host; + std::string port; + encode_host_port(v.sentBy(), host, port); + if (!host.empty()) { + ::via_set_host(*p_via_header, (char*)::strdup(host.c_str())); + } + if (!port.empty()) { + ::via_set_port (*p_via_header, (char*)::strdup(port.c_str())); + } + + if (v.viaParams().is_present()) { + encode_semi_colon_params(static_cast(v.viaParams()), &(*p_via_header)->via_params); + } + } // End of 'for' statement + + return 0; +} // End of method encode_via_header + +int sip_codec_headers::encode_www_authenticate_header(const LibSip__SIPTypesAndValues::WwwAuthenticate& p_www_authenticate, osip_www_authenticate_t** p_www_authenticate_header) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_www_authenticate_header: ", p_www_authenticate); + + ::osip_www_authenticate_init(p_www_authenticate_header); + const LibSip__SIPTypesAndValues::Challenge& c = p_www_authenticate.challenge(); + if (c.ischosen(LibSip__SIPTypesAndValues::Challenge::ALT_digestCln)) { + osip_www_authenticate_set_auth_type(*p_www_authenticate_header, (char*)::strdup("Digest")); + const LibSip__Common::CommaParam__List& l = c.digestCln(); + for (int i = 0; i < l.lengthof(); i++) { + const LibSip__Common::GenericParam& p = l[i]; + if (std::string(static_cast(p.id())).compare("realm") == 0) { + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value()); + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ::osip_www_authenticate_set_realm(*p_www_authenticate_header, (char*)::strdup(static_cast(g.tokenOrHost()))); + } else { + std::stringstream ss; + ss << std::quoted(static_cast(g.quotedString())); + ::osip_www_authenticate_set_realm(*p_www_authenticate_header, (char*)::strdup(ss.str().c_str())); + } + } + } else if (std::string(static_cast(p.id())).compare("nonce") == 0) { + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value()); + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ::osip_www_authenticate_set_nonce(*p_www_authenticate_header, (char*)::strdup(static_cast(g.tokenOrHost()))); + } else { + std::stringstream ss; + ss << std::quoted(static_cast(g.quotedString())); + ::osip_www_authenticate_set_nonce(*p_www_authenticate_header, (char*)::strdup(ss.str().c_str())); + } + } + } else if (std::string(static_cast(p.id())).compare("stale") == 0) { + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value()); + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ::osip_www_authenticate_set_stale(*p_www_authenticate_header, (char*)::strdup(static_cast(g.tokenOrHost()))); + } else { + std::stringstream ss; + ss << std::quoted(static_cast(g.quotedString())); + ::osip_www_authenticate_set_stale(*p_www_authenticate_header, (char*)::strdup(ss.str().c_str())); + } + } + } else if (std::string(static_cast(p.id())).compare("algorithm") == 0) { + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value()); + std::stringstream ss; + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ss << std::quoted(static_cast(g.tokenOrHost())); + } else { + ss << std::quoted(static_cast(g.quotedString())); + } + ::osip_www_authenticate_set_algorithm(*p_www_authenticate_header, (char*)::strdup(ss.str().c_str())); + } + } else if (std::string(static_cast(p.id())).compare("qop") == 0) { + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value()); + std::stringstream ss; + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ss << std::quoted(static_cast(g.tokenOrHost())); + } else { + ss << std::quoted(static_cast(g.quotedString())); + } + ::osip_www_authenticate_set_qop_options(*p_www_authenticate_header, (char*)::strdup(ss.str().c_str())); + } + } else { + loggers::get_instance().warning("sip_codec_headers::encode_www_authenticate_header: Unimplemented param '%s'", static_cast(p.id())); + } + } // End of 'for'statement + } else { + const LibSip__SIPTypesAndValues::OtherAuth& l = c.otherChallenge(); + loggers::get_instance().warning("sip_codec_headers::encode_www_authenticate_header: Unsupported variant"); + return -1; + } + + return 0; +} // End of method encode_www_authenticate_header + +int sip_codec_headers::encode_semi_colon_params(const LibSip__Common::SemicolonParam__List& p_list, osip_list_t* p_sip_list) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_semi_colon_params: ", p_list); + + if (p_list.size_of() != 0) { + for (int i = 0; i < p_list.size_of(); i++) { + const LibSip__Common::GenericParam& param = static_cast(*p_list.get_at(i)); + loggers::get_instance().log_msg("sip_codec_headers::encode_semi_colon_params: param: ", param); + if (param.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*param.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_semi_colon_params: v: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_semi_colon_params: tokenOrHost: ", v.tokenOrHost()); + ::osip_generic_param_add(p_sip_list, (char*)::strdup(static_cast(param.id())), (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_semi_colon_params: quotedString: ", v.quotedString()); + ::osip_generic_param_add(p_sip_list, (char*)static_cast(param.id()), (char*)static_cast(v.quotedString())); + } + } else { + ::osip_generic_param_add(p_sip_list, (char*)::strdup(static_cast(param.id())), (char*)::strdup("")); + } + } // End of 'for' statement + } else { + // Nothing to do + } + + return 0; +} + +void sip_codec_headers::decode_semi_colon_params(const osip_list_t& p_sip_list, OPTIONAL& p_list) { + loggers::get_instance().log(">>> sip_codec_headers::decode_semi_colon_params"); + + if (::osip_list_size(&p_sip_list) != 0) { + LibSip__Common::SemicolonParam__List l; + for (int i = 0; i < ::osip_list_size(&p_sip_list); i++) { + osip_generic_param_t* p = (osip_generic_param_t*)::osip_list_get(&p_sip_list, i); + loggers::get_instance().log("sip_codec_headers::decode_semi_colon_params: After cast: %p", p); + CHARSTRING name(p->gname); + if (p->gvalue == nullptr) { + l[i] = LibSip__Common::GenericParam(name, OPTIONAL(OMIT_VALUE)); + } else { + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(p->gvalue); + l[i] = LibSip__Common::GenericParam(name, g); + } + } // End of 'for' statement + p_list = OPTIONAL(l); + } else { + p_list.set_to_omit(); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_semi_colon_params: ", p_list); +} // End of method decode_semi_colon_params + +void sip_codec_headers::decode_semi_colon_params(const std::string& p_params, std::string& p_first_param, LibSip__Common::SemicolonParam__List& p_others_params) { + loggers::get_instance().log(">>> sip_codec_headers::decode_semi_colon_params: %s", p_params.c_str()); + + std::size_t idx = p_params.find(";"); + if (idx == std::string::npos) { + p_first_param = p_params; + } else { + std::vector output = converter::get_instance().split(p_params, ";"); + p_first_param = output[0]; + LibSip__Common::SemicolonParam__List l; + for (unsigned int i = 1; i < output.size(); i++) { + std::vector o = converter::get_instance().split(output[i], "="); + if (o.size() == 2) { + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[1].c_str()); + p_others_params[i - 1] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), g); + } else { + p_others_params[i - 1] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), OPTIONAL(OMIT_VALUE)); + } + } // End of 'for' statement + } + loggers::get_instance().log("<<< sip_codec_headers::decode_semi_colon_params: %s", p_first_param.c_str()); + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_semi_colon_params: ", p_others_params); +} + +void sip_codec_headers::decode_semi_colon_params(const std::string& p_params, LibSip__Common::SemicolonParam__List& p_params_list) { + loggers::get_instance().log(">>> sip_codec_headers::decode_semi_colon_params: %s", p_params.c_str()); + + std::size_t idx = p_params.find(";"); + if (idx == std::string::npos) { + std::vector o = converter::get_instance().split(p_params, "="); + if (o.size() == 2) { + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[1].c_str()); + p_params_list[0] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), g); + } else { + p_params_list[0] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), OPTIONAL(OMIT_VALUE)); + } + } else { + std::vector output = converter::get_instance().split(p_params, ";"); + LibSip__Common::SemicolonParam__List l; + for (unsigned int i = 0; i < output.size(); i++) { + std::vector o = converter::get_instance().split(output[i], "="); + if (o.size() == 2) { + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[1].c_str()); + p_params_list[i - 1] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), g); + } else { + p_params_list[i - 1] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), OPTIONAL(OMIT_VALUE)); + } + } // End of 'for' statement + } + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_semi_colon_params: ", p_params_list); +} + +int sip_codec_headers::encode_ampersand_params(const LibSip__Common::AmpersandParam__List& p_list, osip_list_t** p_sip_list) { + loggers::get_instance().log(">>> sip_codec_headers::encode_ampersand_params"); + + if (p_list.size_of() != 0) { + ::osip_list_init(*p_sip_list); + for (int i = 0; i < p_list.size_of(); i++) { + const LibSip__Common::GenericParam& param = static_cast(*p_list.get_at(i)); + if (param.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*param.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ::osip_generic_param_add(*p_sip_list, (char*)static_cast(param.id()), (char*)static_cast(v.tokenOrHost())); + } else { + ::osip_generic_param_add(*p_sip_list, (char*)static_cast(param.id()), (char*)static_cast(v.quotedString())); + } + } + } // End of 'for' statement + } else { + *p_sip_list = nullptr; + } + + return 0; +} + +void sip_codec_headers::decode_ampersand_params(const osip_list_t& p_sip_list, OPTIONAL& p_list) { + loggers::get_instance().log(">>> sip_codec_headers::decode_ampersand_params"); + + if (::osip_list_size(&p_sip_list) != 0) { + LibSip__Common::AmpersandParam__List l; + for (int i = 0; i < ::osip_list_size(&p_sip_list); i++) { + osip_generic_param_t* p = (osip_generic_param_t*)::osip_list_get(&p_sip_list, i); + loggers::get_instance().log("sip_codec_headers::decode_ampersand_params: After cast: %p", p); + CHARSTRING name(p->gname); + if (p->gvalue == nullptr) { + l[i] = LibSip__Common::GenericParam(name, OPTIONAL(OMIT_VALUE)); + } else { + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(p->gvalue); + l[i] = LibSip__Common::GenericParam(name, g); + } + } // End of 'for' statement + p_list = OPTIONAL(l); + } else { + p_list.set_to_omit(); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_ampersand_params: ", p_list); +} // End of method decode_ampersand_params + +int sip_codec_headers::encode_option_tag_list(const LibSip__SIPTypesAndValues::OptionTag__List& p_options_tags, const std::string& p_field_name, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_option_tag_list"); + + if (p_options_tags.size_of() != 0) { + std::string str(static_cast(*static_cast(p_options_tags.get_at(0)))); + loggers::get_instance().log("sip_codec_headers::encode_option_tag_list: str=%s", str.c_str()); + for (int i = 1; i < p_options_tags.size_of() - 1; i++) { + str += "," + std::string(static_cast(*static_cast(p_options_tags.get_at(i)))); + } // End of 'for' statement + loggers::get_instance().log("sip_codec_headers::encode_option_tag_list: Final str=%s", str.c_str()); + ::osip_message_set_header((osip_message_t *)*p_sip_message, p_field_name.c_str(), str.c_str()); + } else { + ::osip_message_set_header((osip_message_t *)*p_sip_message, p_field_name.c_str(), ""); + } + return 0; +} + +void sip_codec_headers::decode_option_tag_list(const char* p_list, OPTIONAL& p_options_tags) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_option_tag_list: %s", p_list); + + if (p_list != nullptr) { + LibSip__SIPTypesAndValues::OptionTag__List l; + std::string str(p_list); + std::size_t i = str.find(","); // See RFC 3261 - Page 231 / LibSip__SIPTypesAndValues::OptionTag__List + if (i == std::string::npos) { // Only on item + l[0] = CHARSTRING(p_list); + } else { + int idx = 0; + while(i != std::string::npos) { + l[idx++] = CHARSTRING(str.substr(0, i).c_str()); + str = str.substr(i + 1); + loggers::get_instance().log("sip_codec_headers::decode_option_tag_list: New str: %s", str.c_str()); + i = str.find(","); + loggers::get_instance().log("sip_codec_headers::decode_option_tag_list: New i: %d", i); + } // End of 'while' statement + l[idx] = CHARSTRING(str.c_str()); + } + p_options_tags = OPTIONAL(l); + } else { + p_options_tags.set_to_omit(); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_option_tag_list: ", p_options_tags); +} // End of method decode_option_tag_list + +int sip_codec_headers::encode_server_val_list(const LibSip__SIPTypesAndValues::ServerVal__List& p_server_vals, const std::string& p_field_name, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_server_val_list"); + + if (p_server_vals.size_of() != 0) { + std::string str(static_cast(*static_cast(p_server_vals.get_at(0)))); + for (int i = 1; i < p_server_vals.size_of() - 1; i++) { + str += "," + std::string(static_cast(*static_cast(p_server_vals.get_at(i)))); + } // End of 'for' statement + ::osip_message_set_header((osip_message_t *)*p_sip_message, p_field_name.c_str(), str.c_str()); + } else { + ::osip_message_set_header((osip_message_t *)*p_sip_message, p_field_name.c_str(), ""); + } + return 0; +} + +void sip_codec_headers::decode_server_val_list(const char* p_list, LibSip__SIPTypesAndValues::ServerVal__List& p_server_vals) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_server_val_list: %s", p_list); + + if (p_list != nullptr) { + std::string str(p_list); + std::size_t i = str.find(","); // See RFC 3261 - Page 231 / LibSip__SIPTypesAndValues::ServerVal__List + if (i == std::string::npos) { // Only on item + p_server_vals[0] = CHARSTRING(p_list); + } else { + int idx = 0; + while(i != std::string::npos) { + p_server_vals[idx++] = CHARSTRING(str.substr(0, i).c_str()); + str = str.substr(i + 1); + loggers::get_instance().log("sip_codec_headers::decode_server_val_list: New str: %s", str.c_str()); + i = str.find(" "); + loggers::get_instance().log("sip_codec_headers::decode_server_val_list: New i: %d", i); + } // End of 'while' statement + p_server_vals[idx] = CHARSTRING(str.c_str()); + } + } else { + p_server_vals[0] = CHARSTRING(""); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_server_val_list: ", p_server_vals); +} // End of method decode_server_val_list + +void sip_codec_headers::decode_host_port(const char* p_host, const char* p_port, LibSip__SIPTypesAndValues::HostPort& p_host_port) { + loggers::get_instance().log(">>> sip_codec_headers::decode_host_port"); + + if (p_host == nullptr) { + p_host_port.host().set_to_omit(); + } else { + p_host_port.host() = OPTIONAL(CHARSTRING(p_host)); + } + OPTIONAL port; + if (p_port == nullptr) { + p_host_port.portField().set_to_omit(); + } else { + p_host_port.portField() = OPTIONAL(INTEGER(std::stoi(p_port))); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_host_port: ", p_host_port); +} // End of method decode_host_port" + +void sip_codec_headers::decode_uri(LibSip__SIPTypesAndValues::SipUrl& p_sip_url, const osip_uri_t* p_uri) { + loggers::get_instance().log(">>> sip_codec_headers::decode_uri"); + + // Scheme + LibSip__SIPTypesAndValues::UriComponents uri_components; + if (::osip_uri_get_scheme((osip_uri_t*)p_uri) != nullptr) { + p_sip_url.scheme() = CHARSTRING(::osip_uri_get_scheme((osip_uri_t*)p_uri)); + loggers::get_instance().log_msg("sip_codec_headers::decode_uri: scheme: ", p_sip_url.scheme()); + // SipUriComponents + if (strcmp(::osip_uri_get_scheme((osip_uri_t*)p_uri), "sip") == 0) { + // User Info + OPTIONAL user_info; + if (::osip_uri_get_username((osip_uri_t*)p_uri) == nullptr) { + user_info.set_to_omit(); + } else { + OPTIONAL password; + if (::osip_uri_get_password((osip_uri_t*)p_uri) == nullptr) { + password.set_to_omit(); + } else { + password = CHARSTRING(::osip_uri_get_password((osip_uri_t*)p_uri)); + } + LibSip__SIPTypesAndValues::UserInfo u(CHARSTRING(::osip_uri_get_username((osip_uri_t*)p_uri)), password); + user_info = OPTIONAL(u); + } + loggers::get_instance().log_msg("sip_codec_headers::decode_uri: user_info: ", user_info); + // HostPort + LibSip__SIPTypesAndValues::HostPort host_port; + decode_host_port(::osip_uri_get_host((osip_uri_t*)p_uri), ::osip_uri_get_port((osip_uri_t*)p_uri), host_port); + loggers::get_instance().log_msg("sip_codec_headers::decode_uri: host_port: ", host_port); + uri_components.sip() = LibSip__SIPTypesAndValues::SipUriComponents(user_info, host_port); + } else if (strcmp(::osip_uri_get_scheme((osip_uri_t*)p_uri), "tel") == 0) { + const LibSip__SIPTypesAndValues::TelUriComponents t; + uri_components.tel() = t; // TODO To be done + loggers::get_instance().error("sip_codec_headers::decode_uri: Unsupported LibSip__SIPTypesAndValues::UriComponents::ALT_tel"); + } else if (strcmp(::osip_uri_get_scheme((osip_uri_t*)p_uri), "urn") == 0) { + char *buf = nullptr; + if (::osip_uri_to_str_canonical((osip_uri_t*)p_uri, &buf) == 0) { + std::string str(buf); + loggers::get_instance().log("sip_codec_headers::decode_uri: str: %s", str.c_str()); + std::vector output = converter::get_instance().split(str, ":"); + loggers::get_instance().log("sip_codec_headers::decode_uri: split size: %d", output.size()); + LibSip__SIPTypesAndValues::UrnUriComponents urn; + urn.namespaceId() = output[1].c_str(); + std::string s(output[2]); + for (std::size_t i = 3; i < output.size(); i++) { + s += ":" + output[i]; + } + urn.namespaceSpecificString() = s.c_str(); + uri_components.urn() = urn; + osip_free(buf); // Macro + } // TODO Check what to do in this case + } else { + char *buffer = nullptr; + ::osip_uri_to_str_canonical((osip_uri_t*)p_uri, &buffer); + std::string str(buffer); + const char* p = static_cast(p_sip_url.scheme()); + size_t i = str.find(p); + if (i == std::string::npos) { + uri_components.other() = CHARSTRING(buffer); + } else { + uri_components.other() = CHARSTRING(str.substr(i + strlen(p) + 1).c_str()); + } + osip_free(buffer); // Macro + } + } else { + char *buffer = nullptr; + ::osip_uri_to_str_canonical((osip_uri_t*)p_uri, &buffer); + uri_components.other() = CHARSTRING(buffer); + osip_free(buffer); // Macro + } + p_sip_url.components() = uri_components; + // UrlParameters + OPTIONAL params; + decode_semi_colon_params(p_uri->url_params, params); + p_sip_url.urlParameters() = params; + // Headers + OPTIONAL headers; + decode_ampersand_params(p_uri->url_headers, headers); + p_sip_url.headers() = headers; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_uri: ", p_sip_url); +} // End of method decode_uri + +void sip_codec_headers::decode_accept_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Accept& p_accept_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_accept_header"); + + // Sanity checks + osip_accept_t *sip_accept = nullptr; + ::osip_message_get_accept(p_sip_message, 0, &sip_accept); + if (sip_accept == nullptr) { + return; + } + + // FieldName + p_accept_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ACCEPT_E")); + // AcceptArgs + if (::osip_list_size(&p_sip_message->accepts) == 0) { + p_accept_header.acceptArgs().set_to_omit(); + } else { + LibSip__SIPTypesAndValues::AcceptBody__List bl; + int x = 0; + for (int i = 0; i < ::osip_list_size(&p_sip_message->accepts); i++) { + const osip_accept_t* l = (const osip_accept_t*)::osip_list_get(&p_sip_message->accepts, i); + if (l != nullptr) { + loggers::get_instance().log("sip_codec_headers::decode_accept_header: %s=%s", l->type, l->subtype); // application=sdp,application/3gpp-ims+xml + std::string str(l->subtype); + std::size_t idx = str.find(","); + if (idx == std::string::npos) { + LibSip__SIPTypesAndValues::AcceptBody b; + b.mediaRange() = CHARSTRING(l->type) + CHARSTRING("/") + CHARSTRING(l->subtype); // FIXME CHARSTRING(l->type || "=" || l->subtype)??? + if (osip_list_size(&(l->gen_params)) != 0) { + // TODO + } else { + b.acceptParam().set_to_omit(); + } + bl[x++] = b; + } else { + std::vector output = converter::get_instance().split(str, ","); + LibSip__SIPTypesAndValues::AcceptBody b; + loggers::get_instance().log("sip_codec_headers::decode_accept_header: Processing %s=%s", l->type, output[0].c_str()); + b.mediaRange() = CHARSTRING(l->type) + CHARSTRING("/") + CHARSTRING(output[0].c_str()); // FIXME CHARSTRING(l->type || "=" || l->subtype)??? + if (osip_list_size(&(l->gen_params)) != 0) { + // TODO + } else { + b.acceptParam().set_to_omit(); + } + bl[x++] = b; + for (unsigned int k = 1; k < output.size(); k++) { + loggers::get_instance().log("sip_codec_headers::decode_accept_header: In loop, processing %s=%s", output[k].c_str()); + LibSip__SIPTypesAndValues::AcceptBody b; + b.mediaRange() = CHARSTRING(output[k].c_str()); // FIXME CHARSTRING(l->type || "=" || l->subtype)??? + if (osip_list_size(&(l->gen_params)) != 0) { + // TODO + } else { + b.acceptParam().set_to_omit(); + } + bl[x++] = b; + } + } + } + } // End of 'for' statement + p_accept_header.acceptArgs() = OPTIONAL(bl); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_accept_header: ", p_accept_header); +} // End of method decode_accept_header + +void sip_codec_headers::decode_accept_contact_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptContact& p_accept_contact_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_accept_contact_header: %p", p_sip_message->contacts); + + // Sanity checks + osip_header_t *sip_accept_contact = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"accept-contact", 0, &sip_accept_contact); + if (sip_accept_contact == nullptr) { + return; + } + + loggers::get_instance().log("sip_codec_headers::decode_accept_contact_header: got it: %s:%s", sip_accept_contact->hname, sip_accept_contact->hvalue); + if ((sip_accept_contact->hvalue == nullptr) || (strlen(sip_accept_contact->hvalue) == 0)) { + loggers::get_instance().warning("sip_codec_headers::decode_accept_contact_header: Failed to decode Accept-Contact header"); + return; + } + // FieldName + p_accept_contact_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ACCEPT_CONTACT_E")); + // AcRcValue list + std::string str(sip_accept_contact->hvalue); + LibSip__SIPTypesAndValues::AcRcValue__List la; + std::size_t idx = str.find(","); + if (idx == std::string::npos) { + // Split using ; as separator + std::vector output = converter::get_instance().split(str, ";"); + loggers::get_instance().log("sip_codec_headers::decode_accept_contact_header (1): Split size: %d", output.size()); + // The first parameter is the wild card + LibSip__SIPTypesAndValues::AcRcValue acRcValue; + acRcValue.wildcard() = CHARSTRING(output[0].c_str()); + if (output.size() > 1) { + // Extract the other parameters + LibSip__Common::SemicolonParam__List l; + for (unsigned int i = 1; i < output.size(); i++) { + LibSip__Common::GenericParam p; + std::vector o = converter::get_instance().split(output[i], "="); + p.id() = CHARSTRING(o[0].c_str()); + if (o.size() == 1) { // No value + p.paramValue().set_to_omit(); + } else { + loggers::get_instance().log("sip_codec_headers::decode_accept_contact_header (1): o: %s:%s", o[0].c_str(), o[1].c_str()); + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[1].c_str()); + p.paramValue() = OPTIONAL(g); + } + l[i - 1] = p; + } // End of 'for' statement + loggers::get_instance().log_msg("sip_codec_headers::decode_accept_contact_header: l: ", l); + acRcValue.acRcParams() = OPTIONAL(l); + } else { + acRcValue.acRcParams().set_to_omit(); + } + la[0] = acRcValue; + } else { + // Split the list of values using , as separator + std::vector lop = converter::get_instance().split(str, ","); + for (std::size_t s = 0; s < lop.size(); s++) { + str = lop[s]; + // Extract parameters separated by ; into SemiColumn__List + std::vector output = converter::get_instance().split(str, ";"); + // The first parameter is the wild card + LibSip__SIPTypesAndValues::AcRcValue acRcValue; + acRcValue.wildcard() = CHARSTRING(output[0].c_str()); + if (output.size() > 1) { + // Extract the other parameters + LibSip__Common::SemicolonParam__List l; + for (unsigned int i = 1; i < output.size(); i++) { + LibSip__Common::GenericParam p; + std::vector o = converter::get_instance().split(output[i], "="); + p.id() = CHARSTRING(o[0].c_str()); + if (o.size() == 1) { // No value + p.paramValue().set_to_omit(); + } else { + loggers::get_instance().log("sip_codec_headers::decode_accept_contact_header (2): o: %s:%s", o[0].c_str(), o[1].c_str()); + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[1].c_str()); + p.paramValue() = OPTIONAL(g); + } + l[i - 1] = p; + } // End of 'for' statement + loggers::get_instance().log_msg("sip_codec_headers::decode_accept_contact_header: l: ", l); + acRcValue.acRcParams() = OPTIONAL(l); + } else { + acRcValue.acRcParams().set_to_omit(); + } + la[s] = acRcValue; + } // End of 'for'statement + } + p_accept_contact_header.acValues() = la; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_accept_contact_header: ", p_accept_contact_header); +} // End of method decode_accept_contact_header + +void sip_codec_headers::decode_accept_encoding_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptEncoding& p_accept_encoding_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_accept_encoding_header: %p", p_sip_message->accept_encodings); + + // Sanity checks + osip_accept_encoding_t *sip_accept_encoding = nullptr; + ::osip_message_get_accept_encoding(p_sip_message, 0, &sip_accept_encoding); + if (sip_accept_encoding == nullptr) { + return; + } + // FieldName + p_accept_encoding_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ACCEPT_ENCODING_E")); + // ContentCoding + p_accept_encoding_header.contentCoding().set_to_omit(); + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_accept_encoding_header: ", p_accept_encoding_header); +} // End of method decode_accept_encoding_header + +void sip_codec_headers::decode_accept_language_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptLanguage& p_accept_language_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_accept_language_header: %p", p_sip_message->accept_languages); + + // Sanity checks + osip_accept_language_t *sip_accept_language = nullptr; + ::osip_message_get_accept_language(p_sip_message, 0, &sip_accept_language); + if (sip_accept_language == nullptr) { + return; + } + + // FieldName + p_accept_language_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ACCEPT_LANGUAGE_E")); + // LanguageBody + p_accept_language_header.languageBody().set_to_omit(); + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_accept_language_header: ", p_accept_language_header); +} // End of method decode_accept_language_header + +void sip_codec_headers::decode_alert_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AlertInfo& p_alert_info_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_alert_info_header: %p", p_sip_message->alert_infos); + + // Sanity checks + osip_alert_info_t *sip_alert_info = nullptr; + ::osip_message_get_alert_info(p_sip_message, 0, &sip_alert_info); + if (sip_alert_info == nullptr) { + return; + } + + // FieldName + p_alert_info_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ALERT_INFO_E")); + // AlertInfoBody + p_alert_info_header.alertInfoBody().set_to_omit(); + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_alert_info_header: ", p_alert_info_header); +} // End of method decode_alert_info_header + +void sip_codec_headers::decode_allow_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Allow& p_allow_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_allow_header: %p", p_sip_message->allows); + + // Sanity checks + osip_allow_t *sip_allow = nullptr; + ::osip_message_get_allow(p_sip_message, 0, &sip_allow); + if (sip_allow == nullptr) { + return; + } + + // FieldName + p_allow_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ALLOW_E")); + // Methods + loggers::get_instance().log("sip_codec_headers::decode_allow_header: value: %s", sip_allow->value); + if ((sip_allow->value == nullptr) || (strlen(sip_allow->value) == 0)) { + p_allow_header.methods().set_to_omit(); + } else { + LibSip__SIPTypesAndValues::Method__List m; + std::string str(sip_allow->value); + std::vector output = converter::get_instance().split(str, ","); + unsigned int i = 0; + while (i < output.size()) { + m[i] = CHARSTRING(output[i].c_str()); + i += 1; + } // End of 'while' statement + p_allow_header.methods() = OPTIONAL(m); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_allow_header: ", p_allow_header); +} // End of method decode_allow_header + +void sip_codec_headers::decode_allow_events_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AllowEvents& p_allow_events_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_allow_events_header: %p", p_sip_message->headers); + + // Sanity checks + osip_header_t *sip_allow_events = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"allow_events", 0, &sip_allow_events); + if (sip_allow_events == nullptr) { + return; + } + + // FieldName + p_allow_events_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ALLOW_EVENTS_E")); + // EventTypes + LibSip__SIPTypesAndValues::EventType__List l; + // TODO To be done + l[0] = CHARSTRING("*"); + p_allow_events_header.eventTypes() = l; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_allow_events_header: ", p_allow_events_header); +} // End of method decode_allow_events_header + +void sip_codec_headers::decode_authorization_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Authorization& p_authorization_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_authorization_header"); + + // Sanity checks + osip_authorization_t *sip_authorization = nullptr; + ::osip_message_get_authorization(p_sip_message, 0, &sip_authorization); + if (sip_authorization == nullptr) { + return; + } + + // FieldName + p_authorization_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("AUTHORIZATION_E")); + // CredentialsList + LibSip__SIPTypesAndValues::CredentialsList l; + int i = 0; + do { + loggers::get_instance().log("sip_codec_headers::decode_authorization_header: Processing item #%d", i); + LibSip__SIPTypesAndValues::Credentials v; + LibSip__Common::CommaParam__List cl; + int j = 0; + if (::osip_authorization_get_digest(sip_authorization) != nullptr) { + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_digest(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("digest"), + OPTIONAL(v) + ); + } + if (::osip_authorization_get_username(sip_authorization) != nullptr) { + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_username(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("username"), + OPTIONAL(v) + ); + } + if (::osip_authorization_get_uri(sip_authorization) != nullptr) { + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_uri(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("uri"), + OPTIONAL(v) + ); + } + if (::osip_authorization_get_realm(sip_authorization) != nullptr) { + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_realm(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("realm"), + OPTIONAL(v) + ); + } + if (::osip_authorization_get_nonce(sip_authorization) != nullptr) { + loggers::get_instance().log("sip_codec_headers::decode_authorization_header: Decode nonce"); + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_nonce(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("nonce"), + OPTIONAL(v) + ); + } + if (::osip_authorization_get_response(sip_authorization) != nullptr) { + loggers::get_instance().log("sip_codec_headers::decode_authorization_header: Decode response"); + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_response(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("response"), + OPTIONAL(v) + ); + } + loggers::get_instance().log_msg("sip_codec_headers::decode_authorization_header: New GenValue:", cl); + v.digestResponse() = cl; + loggers::get_instance().log_msg("sip_codec_headers::decode_authorization_header: New GenValue list:", cl); + l[i++] = v; + loggers::get_instance().log_msg("sip_codec_headers::decode_authorization_header: New CredentialsList:", l); + } while(::osip_message_get_authorization(p_sip_message, i, &sip_authorization) == 0); // End of 'do-while' statement + p_authorization_header.body() = l; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_authorization_header: ", p_authorization_header); +} // End of method decode_authorization_header + +void sip_codec_headers::decode_call_id_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CallId& p_call_id_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_call_id_header: %p", p_sip_message->call_id); + + // Sanity check + if (p_sip_message->call_id == nullptr) { + return; + } + + // FieldName + p_call_id_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CALL_ID_E")); + // CallId + char *buffer; + ::osip_call_id_to_str(p_sip_message->call_id, &buffer); + if (buffer != nullptr) { + p_call_id_header.callid() = CHARSTRING(buffer); + osip_free(buffer); + } +} // End of method decode_call_id_header + +void sip_codec_headers::decode_call_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CallInfo& p_call_info_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_call_info_header: %p", p_sip_message->call_infos); + + osip_call_info_t *call_info = nullptr; + ::osip_message_get_call_info(p_sip_message, 0, &call_info); + if (call_info == nullptr) { + return; + } + + // FieldName + p_call_info_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CALL_INFO_E")); + // CallInfoBody_List + loggers::get_instance().log("sip_codec_headers::decode_call_info_header: value: %s", call_info->element); + if ((call_info->element == nullptr) || (strlen(call_info->element) == 0)) { + p_call_info_header.callInfoBody().set_to_omit(); + } else if (osip_list_size(&(p_sip_message->call_infos)) == 0) { + p_call_info_header.callInfoBody().set_to_omit(); + } else { + LibSip__SIPTypesAndValues::CallInfoBody__List l; + int pos = 0; + while (pos < osip_list_size(&(p_sip_message->call_infos))) { + ::osip_message_get_call_info(p_sip_message, pos, &call_info); + loggers::get_instance().log("sip_codec_headers::decode_call_info_header: call_info.element=%s", call_info->element); + OPTIONAL params; + decode_semi_colon_params(call_info->gen_params, params); + l[pos++] = LibSip__SIPTypesAndValues::CallInfoBody(call_info->element, params); + } // End of 'while' statement + p_call_info_header.callInfoBody() = OPTIONAL(l); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_call_info_header: ", p_call_info_header); +} // End of method decode_call_info_header + +void sip_codec_headers::decode_c_seq_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CSeq& p_c_seq_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_c_seq_header"); + + // Sanity check + if (p_sip_message->cseq == nullptr) { + return; + } + + // FieldName + p_c_seq_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CSEQ_E")); + // Sequence number + p_c_seq_header.seqNumber() = INTEGER(std::stoi(osip_cseq_get_number(p_sip_message->cseq))); + // Method + p_c_seq_header.method() = CHARSTRING(::osip_cseq_get_method(p_sip_message->cseq)); +} // End of method decode_c_seq_header + +void sip_codec_headers::decode_content_length_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::ContentLength& p_content_length_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_content_length_header"); + + // Sanity check + if (p_sip_message->content_length == nullptr) { + return; + } + + // FieldName + p_content_length_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CONTENT_LENGTH_E")); + // Length + char *buffer; + ::osip_content_length_to_str(p_sip_message->content_length, &buffer); + if (buffer != nullptr) { + p_content_length_header.len() = INTEGER(std::stoi(buffer)); + osip_free(buffer); + } +} // End of method decode_content_length_header + +void sip_codec_headers::decode_content_type_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::ContentType& p_content_type_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_content_type_header"); + + // Sanity check + if (p_sip_message->content_type == nullptr) { + return; + } + + // FieldName + p_content_type_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CONTENT_TYPE_E")); + // Type/SubType + std::string str(p_sip_message->content_type->type); + if (p_sip_message->content_type->subtype != nullptr) { + str += "/"; + str += p_sip_message->content_type->subtype; + p_content_type_header.mTypeSubtype() = CHARSTRING(str.c_str()); + } + // Parameters + OPTIONAL params; + decode_semi_colon_params(p_sip_message->content_type->gen_params, params); + p_content_type_header.mParams() = params; +} // End of method decode_content_type_header + +void sip_codec_headers::decode_contact_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Contact& p_contact_header) { + loggers::get_instance().log("sip_codec_headers::decode_contact_header"); + + // Sanity check + if (::osip_list_size(&p_sip_message->contacts) == 0) { + return; + } + + // FieldName + p_contact_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CONTACT_E")); + // ContactBody + LibSip__SIPTypesAndValues::ContactAddress__List c; + int i = 0; + osip_contact_t* contact = nullptr; + while (::osip_message_get_contact(p_sip_message, i, &contact) == 0) { + LibSip__SIPTypesAndValues::ContactAddress contact_addr; + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_contact_get_url((osip_contact_t*)contact)); + LibSip__SIPTypesAndValues::Addr__Union addr; + OPTIONAL display_name; + if (::osip_contact_get_displayname((osip_contact_t*)contact) != nullptr) { + LibSip__SIPTypesAndValues::DisplayName n; + n.token() = CHARSTRING(::osip_contact_get_displayname((osip_contact_t*)contact)); + display_name = OPTIONAL(n); + LibSip__SIPTypesAndValues::NameAddr name_addr(display_name, uri); + addr.nameAddr() = name_addr; + } else { + display_name.set_to_omit(); + addr.addrSpecUnion() = uri; + } + contact_addr.addressField() = addr; + // Params + OPTIONAL params; + decode_semi_colon_params(contact->gen_params, params); + contact_addr.contactParams() = params; + + c[i++] = contact_addr; + } // End of 'while' statement + p_contact_header.contactBody().contactAddresses() = c; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_contact_header: ", p_contact_header); +} // End of method decode_contact_header + +void sip_codec_headers::decode_event_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Event& p_event_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_event_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"Event", 0, &dest); // TODO Create osip_message_[g|s]et_event + if (dest == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_event_header: Not found"); + return; + } + loggers::get_instance().log("sip_codec_headers::decode_event_header: hname='%s' : hvalue='%s'\n", dest->hname, dest->hvalue); + + // FieldName + p_event_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("EVENT_E")); + // EventType + std::string str(dest->hvalue); + size_t p1 = str.find("<"); + size_t p2 = str.find(">"); + size_t p3 = str.find(";"); + std::string u = str.substr(p1 + 1, p2 - p1 - 1); + loggers::get_instance().log("sip_codec_headers::decode_event_header: u='%s'\n", u.c_str()); + p_event_header.eventType() = CHARSTRING(u.c_str()); + // eventParam + if (p3 != std::string::npos) { + std::string p = str.substr(p3 + 1); + loggers::get_instance().log("sip_codec_headers::decode_event_header: p='%s'\n", p.c_str()); + LibSip__Common::SemicolonParam__List params; + decode_semi_colon_params(p.c_str(), params); + if (params.is_bound()) { + p_event_header.eventParams() = OPTIONAL(params); + } else { + p_event_header.eventParams().set_to_omit(); + } + } else { + p_event_header.eventParams().set_to_omit(); + } +} // End of method decode_event_header + +void sip_codec_headers::decode_expires_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Expires& p_expires_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_expires_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"Expires", 0, &dest); // TODO Create osip_message_[g|s]et_expires + if (dest == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_expires_header: Not found"); + return; + } + loggers::get_instance().log("sip_codec_headers::decode_expires_header: hname='%s' : hvalue='%s'\n", dest->hname, dest->hvalue); + + // FieldName + p_expires_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("EXPIRES_E")); + // DeltaSec + std::string str(dest->hvalue); + p_expires_header.deltaSec() = CHARSTRING(str.c_str()); +} // End of method decode_expires_header + +void sip_codec_headers::decode_from_header(const osip_from_t* p_sip_from, LibSip__SIPTypesAndValues::From& p_from_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_from_header"); + + // Sanity check + if (p_sip_from == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_from_header: Invalid SIP message"); + return; + } + + // FieldName + p_from_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("FROM_E")); + // Addr_Union + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_from_get_url((osip_from_t*)p_sip_from)); + LibSip__SIPTypesAndValues::Addr__Union addr; + OPTIONAL display_name; + if (::osip_from_get_displayname((osip_from_t*)p_sip_from) != nullptr) { + LibSip__SIPTypesAndValues::DisplayName n; + n.token() = CHARSTRING(::osip_from_get_displayname((osip_from_t*)p_sip_from)); + display_name = OPTIONAL(n); + LibSip__SIPTypesAndValues::NameAddr name_addr(display_name, uri); + addr.nameAddr() = name_addr; + } else { + display_name.set_to_omit(); + addr.addrSpecUnion() = uri; + } + p_from_header.addressField() = addr; + // Params + OPTIONAL params; + decode_semi_colon_params(p_sip_from->gen_params, params); + p_from_header.fromParams() = params; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_from_header: ", p_from_header); +} // End of method decode_from_header + +void sip_codec_headers::decode_geolocation_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Geolocation& p_geolocation_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_geolocation_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"geolocation", 0, &dest); // TODO Create osip_message_[g|s]et_geolocation + if (dest == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_geolocation_header: Not found"); + return; + } + loggers::get_instance().log("sip_codec_headers::decode_geolocation_header: hname='%s' : hvalue='%s'\n", dest->hname, dest->hvalue); + + // FieldName + p_geolocation_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("GEOLOCATION_E")); + // addrSpec + std::string str(dest->hvalue); + size_t p1 = str.find("<"); + size_t p2 = str.find(">"); + size_t p3 = str.find(";"); + std::string u = str.substr(p1 + 1, p2 - p1 - 1); + loggers::get_instance().log("sip_codec_headers::decode_geolocation_header: u='%s'\n", u.c_str()); + osip_uri_t *uri = nullptr; + ::osip_uri_init(&uri); + ::osip_uri_parse(uri, u.c_str()); + decode_uri(p_geolocation_header.addrSpec(), uri); + // geolocParam + if (p3 != std::string::npos) { + std::string p = str.substr(p3 + 1); + loggers::get_instance().log("sip_codec_headers::decode_geolocation_header: p='%s'\n", p.c_str()); + LibSip__Common::SemicolonParam__List params; + decode_semi_colon_params(p.c_str(), params); + if (params.is_bound()) { + p_geolocation_header.geolocParam() = OPTIONAL(params); + } else { + p_geolocation_header.geolocParam().set_to_omit(); + } + } else { + p_geolocation_header.geolocParam().set_to_omit(); + } +} // End of method decode_geolocation_header + +void sip_codec_headers::decode_geolocation_routing_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::GeolocationRouting& p_geolocation_routing_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_geolocation_routing_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"geolocation-routing", 0, &dest); // TODO Create osip_message_[g|s]et_geolocation_routing + if (dest == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_geolocation_routing_header: Not found"); + return; + } + loggers::get_instance().log("sip_codec_headers::decode_geolocation_routing_header: hname='%s' : hvalue='%s'\n", dest->hname, dest->hvalue); + + // FieldName + p_geolocation_routing_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("GEOLOCATION_ROUTING_E")); + std::string str(dest->hvalue); + size_t pos = str.find(";"); + if (pos == std::string::npos) { + if (str.compare("yes") == 0) { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__YES__E); + } else if (str.compare("no") == 0) { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__NO__E); + } else { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__OTHER__E); + } + p_geolocation_routing_header.genericValue().set_to_omit(); + } else { + std::string s = str.substr(0, pos - 1); + loggers::get_instance().log("sip_codec_headers::decode_geolocation_routing_header: s='%s'\n", s.c_str()); + if (s.compare("yes") == 0) { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__YES__E); + } else if (s.compare("no") == 0) { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__NO__E); + } else { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__OTHER__E); + } + str = str.substr(pos + 1); + LibSip__Common::GenericParam p; + pos = str.find("="); + if (pos != std::string::npos) { + p.id() = CHARSTRING(str.substr(0, pos - 1).c_str()); + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(str.substr(pos + 1).c_str()); + p.paramValue() = OPTIONAL(v); + } else { + p.id() = CHARSTRING(str.c_str()); + p.paramValue().set_to_omit(); + } + loggers::get_instance().log("sip_codec_headers::decode_geolocation_routing_header: genericValue='%s'\n", str.c_str()); + p_geolocation_routing_header.genericValue() = OPTIONAL(p); + } +} + +void sip_codec_headers::decode_max_forwards_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MaxForwards& p_max_forwards_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_max_forwards_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + osip_message_get_max_forwards(p_sip_message, 0, &dest); + if (dest == nullptr) { + return; + } + + // FieldName + p_max_forwards_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("MAX_FORWARDS_E")); + // Forwards + loggers::get_instance().log("sip_codec_headers::decode_max_forwards_header: got it: %s:%s", dest->hname, dest->hvalue); + p_max_forwards_header.forwards() = INTEGER(std::stoi(dest->hvalue)); +} // End of method decode_max_forwards_header + +void sip_codec_headers::decode_min_se_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MinSE& p_min_se_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_min_se_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message, (const char *)"min-se", 0, &dest); // TODO Create osip_message_[g|s]et_min_se + if (dest == nullptr) { + return; + } + + // FieldName + p_min_se_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("MIN_SE_E")); + + std::string fisrt_parameter; + LibSip__Common::SemicolonParam__List others_params; + decode_semi_colon_params(dest->hvalue, fisrt_parameter, others_params); + p_min_se_header.deltaSec() = CHARSTRING(fisrt_parameter.c_str()); + if (others_params.is_bound()) { + p_min_se_header.minSeParam() = OPTIONAL(others_params); + } else { + p_min_se_header.minSeParam().set_to_omit(); + } +} // End of method decode_min_se_header + +void sip_codec_headers::decode_p_associated_uri_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::PAssociatedURI& p_p_associated_uri_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_p_associated_uri_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message, (const char *)"p-associated-uri", 0, &dest); // TODO Create osip_message_[g|s]et_p_associated_uri + if (dest == nullptr) { + return; + } + loggers::get_instance().log("sip_codec_headers::decode_p_associated_uri_header: hname='%s' : hvalue='%s'\n", dest->hname, dest->hvalue); + + // FieldName + p_p_associated_uri_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("P_ASSOCIATED_URI_E")); + // nameAddrList + LibSip__SIPTypesAndValues::NameAddrParam__List l; + std::string str(dest->hvalue); + + std::size_t idx = str.find(","); + if (idx == std::string::npos) { + LibSip__SIPTypesAndValues::NameAddrParam n; //, + n.genericParams().set_to_omit(); // TODO To be implemented + n.nameAddr().displayName().set_to_omit(); + std::string str(dest->hvalue); + size_t p1 = str.find("<"); + size_t p2 = str.find(">"); + std::string u = str.substr(p1 + 1, p2 - p1 - 1); + loggers::get_instance().log("sip_codec_headers::decode_p_associated_uri_header: u='%s'\n", u.c_str()); + osip_uri_t *uri = nullptr; + ::osip_uri_init(&uri); + ::osip_uri_parse(uri, u.c_str()); + decode_uri(n.nameAddr().addrSpec(), uri); + l[0] = n; + } else { + std::vector output = converter::get_instance().split(str, ","); + for (unsigned int i = 0; i < output.size(); i++) { + LibSip__SIPTypesAndValues::NameAddrParam n; //, + n.genericParams().set_to_omit(); // TODO To be implemented + n.nameAddr().displayName().set_to_omit(); + size_t p1 = output[i].find("<"); + size_t p2 = output[i].find(">"); + std::string u = output[i].substr(p1 + 1, p2 - p1 - 1); + loggers::get_instance().log("sip_codec_headers::decode_p_associated_uri_header: u='%s'\n", u.c_str()); + osip_uri_t *uri = nullptr; + ::osip_uri_init(&uri); + ::osip_uri_parse(uri, u.c_str()); + decode_uri(n.nameAddr().addrSpec(), uri); + l[i++] = n; + } // End of 'for' statement + } + p_p_associated_uri_header.nameAddrList() = l; +} // End of method decode_p_associated_uri_header + +void sip_codec_headers::decode_p_access_network_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::PAccessNetworkInfo& p_p_access_network_info_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_p_access_network_info_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message, (const char *)"p-access-network-info", 0, &dest); // TODO Create osip_message_[g|s]et_p_access_network_info + if (dest == nullptr) { + return; + } + + // FieldName + p_p_access_network_info_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("P_ACCESS_NETWORK_INFO_E")); + std::string fisrt_parameter; + LibSip__Common::SemicolonParam__List others_params; + decode_semi_colon_params(dest->hvalue, fisrt_parameter, others_params); + p_p_access_network_info_header.accessType() = CHARSTRING(fisrt_parameter.c_str()); + if (others_params.is_bound()) { + p_p_access_network_info_header.genericParams() = OPTIONAL(others_params); + } else { + p_p_access_network_info_header.genericParams().set_to_omit(); + } +} // End of method decode_p_access_network_info_header + +void sip_codec_headers::decode_privacy_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Privacy& p_privacy_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_privacy_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message, (const char *)"privacy", 0, &dest); // TODO Create osip_message_[g|s]et_privacy + if (dest == nullptr) { + return; + } + + // FieldName + p_privacy_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("PRIVACY_E")); + // Privacy list + loggers::get_instance().log("sip_codec_headers::decode_allow_header: value: %s", dest->hvalue); + if ((dest->hvalue == nullptr) || (strlen(dest->hvalue) == 0)) { + p_privacy_header.privValueList().set_to_omit(); + } else { + LibSip__SIPTypesAndValues::PrivacyValue__List m; + std::string str(dest->hvalue); + std::vector output = converter::get_instance().split(str, ","); + unsigned int i = 0; + while (i < output.size()) { + m[i] = CHARSTRING(output[i].c_str()); + i += 1; + } // End of 'while' statement + p_privacy_header.privValueList() = OPTIONAL(m); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_privacy_header: ", p_privacy_header); +} + +void sip_codec_headers::decode_route_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Route& p_route_header) { + loggers::get_instance().log("sip_codec_headers::decode_route_header"); + // Sanity check + if (::osip_list_size(&p_sip_message->routes) == 0) { + return; + } + + // FieldName + p_route_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ROUTE_E")); + // RouteBody + LibSip__SIPTypesAndValues::RouteBody__List c; + int i = 0; + osip_route_t* route = nullptr; + while (::osip_message_get_route(p_sip_message, i, &route) == 0) { + LibSip__SIPTypesAndValues::RouteBody route_body; + // Decode uri + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_from_get_url((osip_from_t*)route)); + // Decode display name + OPTIONAL display_name; + if (::osip_from_get_displayname((osip_route_t*)route) != nullptr) { + LibSip__SIPTypesAndValues::DisplayName n; + n.token() = CHARSTRING(::osip_from_get_displayname((osip_route_t*)route)); + display_name = OPTIONAL(n); + } else { + display_name.set_to_omit(); + } + route_body.nameAddr() = LibSip__SIPTypesAndValues::NameAddr(display_name, uri); + // Params + OPTIONAL params; + decode_semi_colon_params(route->gen_params, params); + route_body.rrParam() = params; + + c[i++] = route_body; + } // End of 'while' statement + p_route_header.routeBody() = c; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_route_header: ", p_route_header); +} // End of method decode_route_header + +void sip_codec_headers::decode_record_route_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::RecordRoute& p_record_route_header) { + loggers::get_instance().log("sip_codec_headers::decode_record_route_header"); + // Sanity check + if (::osip_list_size(&p_sip_message->record_routes) == 0) { + return; + } + + // FieldName + p_record_route_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("RECORD_ROUTE_E")); + // RecordRouteBody + LibSip__SIPTypesAndValues::RouteBody__List c; + int i = 0; + osip_record_route_t* record_route = nullptr; + while (::osip_message_get_record_route(p_sip_message, i, &record_route) == 0) { + LibSip__SIPTypesAndValues::RouteBody record_route_body; + // Decode uri + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_from_get_url((osip_from_t*)record_route)); + // Decode display name + OPTIONAL display_name; + if (::osip_from_get_displayname((osip_record_route_t*)record_route) != nullptr) { + LibSip__SIPTypesAndValues::DisplayName n; + n.token() = CHARSTRING(::osip_from_get_displayname((osip_record_route_t*)record_route)); + display_name = OPTIONAL(n); + } else { + display_name.set_to_omit(); + } + record_route_body.nameAddr() = LibSip__SIPTypesAndValues::NameAddr(display_name, uri); + // Params + OPTIONAL params; + decode_semi_colon_params(record_route->gen_params, params); + record_route_body.rrParam() = params; + + c[i++] = record_route_body; + } // End of 'while' statement + p_record_route_header.routeBody() = c; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_record_route_header: ", p_record_route_header); +} // End of method decode_record_route_header + +void sip_codec_headers::decode_r_seq_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::RSeq& p_r_seq_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_r_seq_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message, (const char *)"rseq", 0, &dest); // TODO Create osip_message_[g|s]et_rseq + if (dest == nullptr) { + return; + } + + // FieldName + p_r_seq_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("RSEQ_E")); + p_r_seq_header.responseNum() = INTEGER(std::stoi(dest->hvalue)); +} + +void sip_codec_headers::decode_session_expires_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::SessionExpires& p_session_expires_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_session_expires_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message,(const char *)"session-expires", 0, &dest); // TODO Create osip_message_[g|s]et_session_expires + if (dest == nullptr) { + return; + } + + // FieldName + p_session_expires_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("SESSION_EXPIRES_E")); + + std::string fisrt_parameter; + LibSip__Common::SemicolonParam__List others_params; + decode_semi_colon_params(dest->hvalue, fisrt_parameter, others_params); + p_session_expires_header.deltaSec() = CHARSTRING(fisrt_parameter.c_str()); + if (others_params.is_bound()) { + p_session_expires_header.seParam() = OPTIONAL(others_params); + } else { + p_session_expires_header.seParam().set_to_omit(); + } + + // loggers::get_instance().log("sip_codec_headers::decode_session_expires_header: got it: %s:%s", dest->hname, dest->hvalue); + // std::size_t idx = str.find(";"); + // if (idx == std::string::npos) { + // p_session_expires_header.deltaSec() = dest->hvalue; + // p_session_expires_header.seParam().set_to_omit(); + // } else { + // std::vector output = converter::get_instance().split(str, ";"); + // p_session_expires_header.deltaSec() = CHARSTRING(output[0].c_str()); + // LibSip__Common::SemicolonParam__List l; + // for (unsigned int i = 1; i < output.size(); i++) { + // std::vector o = converter::get_instance().split(output[i], "="); + // LibSip__Common::GenValue g; + // g.tokenOrHost() = CHARSTRING(o[1].c_str()); + // l[i - 1] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), g); + // } // End of 'for' statement + // p_session_expires_header.seParam() = OPTIONAL(l); + // } +} // End of method decode_session_expires_header + +void sip_codec_headers::decode_supported_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Supported& p_supported_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_supported_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + osip_message_get_supported(p_sip_message, 0, &dest); + if (dest == nullptr) { + return; + } + + // FieldName + p_supported_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("SUPPORTED_E")); + // OptionTags + loggers::get_instance().log("sip_codec_headers::decode_supported_header: got it: %s:%s", dest->hname, dest->hvalue); + OPTIONAL& l = p_supported_header.optionsTags(); + decode_option_tag_list(dest->hvalue, l); +} // End of method decode_supported_header + +void sip_codec_headers::decode_user_agent_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::UserAgent& p_user_agent_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_user_agent_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + osip_message_get_user_agent(p_sip_message, 0, &dest); + if (dest == nullptr) { + return; + } + + // FieldName + p_user_agent_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("USER_AGENT_E")); + // UserAgent body + loggers::get_instance().log("sip_codec_headers::decode_user_agent_header: got it: %s:%s", dest->hname, dest->hvalue); + LibSip__SIPTypesAndValues::ServerVal__List& l = p_user_agent_header.userAgentBody(); + decode_server_val_list(dest->hvalue, l); +} // End of method decode_user_agent_header + +void sip_codec_headers::decode_to_header(const osip_to_t* p_sip_to, LibSip__SIPTypesAndValues::To& p_to_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_to_header"); + + // Sanity check + if (p_sip_to == nullptr) { + return; + } + + // FieldName + p_to_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("TO_E")); + // Addr_Union + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_to_get_url((osip_to_t*)p_sip_to)); + LibSip__SIPTypesAndValues::Addr__Union addr; + OPTIONAL display_name; + if (::osip_to_get_displayname((osip_to_t*)p_sip_to) != nullptr) { + LibSip__SIPTypesAndValues::DisplayName n; + n.token() = CHARSTRING(::osip_to_get_displayname((osip_to_t*)p_sip_to)); + display_name = OPTIONAL(n); + LibSip__SIPTypesAndValues::NameAddr name_addr(display_name, uri); + addr.nameAddr() = name_addr; + } else { + display_name.set_to_omit(); + addr.addrSpecUnion() = uri; + } + p_to_header.addressField() = addr; + // Params + OPTIONAL params; + decode_semi_colon_params(p_sip_to->gen_params, params); + p_to_header.toParams() = params; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_to_header: ", p_to_header); +} // End of method decode_to_header + +void sip_codec_headers::decode_via_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Via& p_via_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_via_header"); + + // Sanity checks + osip_via_t *sip_via = nullptr; + ::osip_message_get_via(p_sip_message, 0, &sip_via); + if (sip_via == nullptr) { + return; + } + + // FieldName + p_via_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("VIA_E")); + // ViaBody + LibSip__SIPTypesAndValues::ViaBody__List l; + int i = 0; + do { + loggers::get_instance().log("sip_codec_headers::decode_via_header: Processing item #%d", i); + LibSip__SIPTypesAndValues::ViaBody v; + v.sentProtocol() = LibSip__SIPTypesAndValues::SentProtocol( + CHARSTRING("SIP"), + CHARSTRING(::via_get_version(sip_via)), + CHARSTRING(::via_get_protocol(sip_via)) + ); + OPTIONAL host_port; + decode_host_port(::via_get_host(sip_via), ::via_get_port(sip_via), host_port); + loggers::get_instance().log_msg("sip_codec_headers::decode_via_uri: host_port: ", host_port); + v.sentBy() = host_port; + OPTIONAL params; + decode_semi_colon_params(sip_via->via_params, params); + v.viaParams() = params; + l[i++] = v; + } while(::osip_message_get_via(p_sip_message, i, &sip_via) == 0); // End of 'while' statement + p_via_header.viaBody() = l; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_via_header: ", p_via_header); +} // End of method decode_via_header + +void sip_codec_headers::decode_www_authenticate_header(const osip_www_authenticate_t* p_www_authenticate, LibSip__SIPTypesAndValues::WwwAuthenticate& p_www_authenticate_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_www_authenticate_header"); + + // Sanity checks + if (p_www_authenticate == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_www_authenticate_header: failed to decode WwwAuthenticate header"); + return; + } + + // FieldName + p_www_authenticate_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("WWW_AUTHENTICATE_E")); + // ViaBody + LibSip__SIPTypesAndValues::Challenge c; + std::string auth(::osip_www_authenticate_get_auth_type((osip_www_authenticate_t*)p_www_authenticate)); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Auth: %s", auth.c_str()); + LibSip__Common::CommaParam__List l; + int i = 0; + if (auth.compare("Digest") == 0) { + l[i++] = LibSip__Common::GenericParam(CHARSTRING(auth.c_str()), OPTIONAL(OMIT_VALUE)); + auth = ::osip_www_authenticate_get_realm((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Realm: %s", auth.c_str()); + if (auth.length() != 0) { + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(auth.c_str()); + l[i++] = LibSip__Common::GenericParam(CHARSTRING("realm"), OPTIONAL(v)); + } + auth = ::osip_www_authenticate_get_nonce((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Nonce: %s", auth.c_str()); + if (auth.length() != 0) { + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(auth.c_str()); + l[i++] = LibSip__Common::GenericParam(CHARSTRING("nonce"), OPTIONAL(v)); + } + auth = ::osip_www_authenticate_get_algorithm((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Algorithm: %s", auth.c_str()); + if (auth.length() != 0) { + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(auth.c_str()); + l[i++] = LibSip__Common::GenericParam(CHARSTRING("algorithm"), OPTIONAL(v)); + } + auth = ::osip_www_authenticate_get_qop_options((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Qop: %s", auth.c_str()); + if (auth.length() != 0) { + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(auth.c_str()); + l[i++] = LibSip__Common::GenericParam(CHARSTRING("qop"), OPTIONAL(v)); + } + if (::osip_www_authenticate_get_stale((osip_www_authenticate_t*)p_www_authenticate) != NULL) { + auth = ::osip_www_authenticate_get_stale((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Stale: %s", auth.c_str()); + if (auth.length() != 0) { + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(auth.c_str()); + l[i++] = LibSip__Common::GenericParam(CHARSTRING("stale"), OPTIONAL(v)); + } + } + loggers::get_instance().log_msg("sip_codec_headers::decode_www_authenticate_header: LibSip__Common::CommaParam__List= ", l); + if (::osip_www_authenticate_get_domain((osip_www_authenticate_t*)p_www_authenticate) != NULL) { + auth = ::osip_www_authenticate_get_domain((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Domain: %s", auth.c_str()); + } + if (::osip_www_authenticate_get_opaque((osip_www_authenticate_t*)p_www_authenticate) != NULL) { + auth = ::osip_www_authenticate_get_opaque((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Opaque: %s", auth.c_str()); + } + + c.digestCln() = l; + } else { + loggers::get_instance().error("sip_codec_headers::decode_www_authenticate_header: Not implemented yet"); + //c.otherChallenge() = l; + } + p_www_authenticate_header.challenge() = c; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_www_authenticate_header: ", p_www_authenticate_header); +} // End of method decode_www_authenticate_header + diff --git a/ccsrc/Protocols/Sip/sip_codec_headers.hh b/ccsrc/Protocols/Sip/sip_codec_headers.hh new file mode 100644 index 0000000000000000000000000000000000000000..7c4d03a0c9aff0e6339d3f1f8667e654e88927a0 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_headers.hh @@ -0,0 +1,132 @@ +#pragma once + +#include "codec_gen.hh" +#include "params.hh" + +#include "osipparser2/osip_parser.h" +#include "osipparser2/sdp_message.h" + +namespace LibSip__SIPTypesAndValues { + class Authorization; + class CallId; + class CallInfo; + class ContentLength; + class ContentType; + class CSeq; + class Event; + class Expires; + class From; + class Geolocation; + class GeolocationRouting; + class HostPort; + class MessageHeader; + class PreGenRecordOf; + class PAccessNetworkInfo; + class PAssociatedURI; + class Privacy; + class Route; + class RecordRoute; + class RSeq; + class UserAgent; + class To; + class Via; +} + +namespace LibSip__Common { + class SemicolonParam__List; + class AmpersandParam__List; +} + +class sip_codec_headers +{ +public: + explicit sip_codec_headers() { }; + virtual ~sip_codec_headers() { }; + +public: + virtual int encode_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message); + virtual int encode_sip_url(const LibSip__SIPTypesAndValues::SipUrl& p_sip_uri, osip_uri_t** p_uri); + virtual int encode_accept_header(const LibSip__SIPTypesAndValues::Accept& p_accept, osip_message_t** p_sip_message); + virtual int encode_accept_contact_header(const LibSip__SIPTypesAndValues::AcceptContact& p_accept_contact, osip_message_t** p_sip_message); + virtual int encode_allow_header(const OPTIONAL& p_allow, osip_message_t** p_sip_message); + virtual int encode_authorization_header(const LibSip__SIPTypesAndValues::Authorization& p_authorization, osip_authorization_t** p_authorization_header); + virtual int encode_call_id_header(const LibSip__SIPTypesAndValues::CallId& p_call_id, osip_call_id_t** p_call_id_header); + virtual int encode_call_info_header(const OPTIONAL& p_call_info, osip_message_t** p_sip_message); + virtual int encode_contact_header(const LibSip__SIPTypesAndValues::Contact& p_contact, osip_contact_t** p_contact_header); + virtual int encode_content_length_header(const LibSip__SIPTypesAndValues::ContentLength& p_contact, osip_content_length_t** p_content_length_header); + virtual int encode_content_type_header(const LibSip__SIPTypesAndValues::ContentType& p_contact, osip_content_type_t** p_content_type_header); + virtual int encode_c_seq_header(const LibSip__SIPTypesAndValues::CSeq& p_c_seq, osip_cseq_t** p_c_seq_header); + virtual int encode_event_header(const OPTIONAL& p_event, osip_message_t** p_sip_message); + virtual int encode_expires_header(const OPTIONAL& p_expires, osip_message_t** p_sip_message); + virtual int encode_from_header(const LibSip__SIPTypesAndValues::From& p_from, osip_from_t** p_from_header); + virtual int encode_geolocation_header(const OPTIONAL& p_geolocation, osip_message_t** p_sip_message); + virtual int encode_geolocation_routing_header(const OPTIONAL& p_geolocation, osip_message_t** p_sip_message); + virtual int encode_max_forwards_header(const OPTIONAL& p_max_forwards, osip_message_t** p_sip_message); + virtual int encode_min_se_header(const OPTIONAL& p_min_se, osip_message_t** p_sip_message); + virtual int encode_p_access_network_info_header(const OPTIONAL& p_p_access_network_info_header, osip_message_t** p_sip_message); + virtual int encode_p_associated_uri_header(const OPTIONAL& p_p_associated_uri_header, osip_message_t** p_sip_message); + virtual int encode_privacy_header(const OPTIONAL& p_privacy_header, osip_message_t** p_sip_message); + virtual int encode_route_header(const OPTIONAL& p_route_header, osip_message_t** p_sip_message); + virtual int encode_record_route_header(const OPTIONAL& p_record_route_header, osip_message_t** p_sip_message); + virtual int encode_r_seq_header(const OPTIONAL& p_r_seq, osip_message_t** p_sip_message); + virtual int encode_session_expires_header(const OPTIONAL& p_session_expires, osip_message_t** p_sip_message); + virtual int encode_supported_header(const OPTIONAL& p_supported, osip_message_t** p_sip_message); + virtual int encode_to_header(const LibSip__SIPTypesAndValues::To& p_to, osip_to_t** p_to_header); + virtual int encode_user_agent_header(const OPTIONAL& p_user_agent, osip_message_t** p_sip_message); + virtual int encode_via_header(const LibSip__SIPTypesAndValues::Via& p_via, osip_via_t** p_via_header); + virtual int encode_www_authenticate_header(const LibSip__SIPTypesAndValues::WwwAuthenticate& p_www_authenticate_header, osip_www_authenticate_t** p_www_authenticate); + +public: + // TODO Replace const osip_message_t* p_sip_message by header specific type using osip_parser.h/macros such as osip_message_get_accept/osip_accept_t + virtual void decode_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MessageHeader& p_headers); + virtual void decode_uri(LibSip__SIPTypesAndValues::SipUrl& p_sip_url, const osip_uri_t* p_uri); + virtual void decode_accept_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Accept& p_accept_header); + virtual void decode_accept_contact_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptContact& p_accept_contact_header); + virtual void decode_accept_encoding_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptEncoding& p_accept_encoding_header); + virtual void decode_accept_language_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptLanguage& p_accept_language_header); + virtual void decode_alert_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AlertInfo& p_alert_info_header); + virtual void decode_allow_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Allow& p_allow_header); + virtual void decode_allow_events_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AllowEvents& p_allow_events_header); + virtual void decode_authorization_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Authorization& p_authorization_header); + virtual void decode_call_id_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CallId& p_call_id_header); + virtual void decode_call_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CallInfo& p_call_info_header); + virtual void decode_content_length_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::ContentLength& p_content_length_header); + virtual void decode_content_type_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::ContentType& p_content_type_header); + virtual void decode_c_seq_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CSeq& p_c_seq_header); + virtual void decode_contact_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Contact& p_contact_header); + virtual void decode_event_header(const osip_message_t* p_sip_event, LibSip__SIPTypesAndValues::Event& p_event_header); + virtual void decode_expires_header(const osip_message_t* p_sip_expires, LibSip__SIPTypesAndValues::Expires& p_expires_header); + virtual void decode_from_header(const osip_from_t* p_sip_from, LibSip__SIPTypesAndValues::From& p_from_header); + virtual void decode_geolocation_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Geolocation& p_geolocation_header); + virtual void decode_geolocation_routing_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::GeolocationRouting& p_geolocation_routing_header); + virtual void decode_max_forwards_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MaxForwards& p_max_forwards_header); + virtual void decode_min_se_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MinSE& p_min_se_header); + virtual void decode_p_access_network_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::PAccessNetworkInfo& p_p_access_network_info_header); + virtual void decode_p_associated_uri_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::PAssociatedURI& p_p_associated_uri_header); + virtual void decode_privacy_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Privacy& p_privacy_header); + virtual void decode_route_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Route& p_route_header); + virtual void decode_record_route_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::RecordRoute& p_record_route_header); + virtual void decode_r_seq_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::RSeq& p_r_seq_header); + virtual void decode_session_expires_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::SessionExpires& p_session_expires_header); + virtual void decode_supported_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Supported& p_supported_header); + virtual void decode_to_header(const osip_to_t* p_sip_to, LibSip__SIPTypesAndValues::To& p_to_header); + virtual void decode_user_agent_header(const osip_message_t* p_user_agent, LibSip__SIPTypesAndValues::UserAgent& p_user_agent_header); + virtual void decode_via_header(const osip_message_t* p_sip_via_list, LibSip__SIPTypesAndValues::Via& p_via_header); + virtual void decode_www_authenticate_header(const osip_www_authenticate_t* p_www_authenticate, LibSip__SIPTypesAndValues::WwwAuthenticate& p_www_authenticate_header); + +private: + void encode_host_port(const LibSip__SIPTypesAndValues::HostPort& p_host_port, std::string& p_host, std::string& p_port); + int encode_semi_colon_params(const LibSip__Common::SemicolonParam__List& p_list, osip_list_t* p_sip_list); + int encode_ampersand_params(const LibSip__Common::AmpersandParam__List& p_list, osip_list_t** p_sip_list); + int encode_option_tag_list(const LibSip__SIPTypesAndValues::OptionTag__List& p_options_tags, const std::string& p_field_name, osip_message_t** p_sip_message); + int encode_server_val_list(const LibSip__SIPTypesAndValues::ServerVal__List& p_server_vals, const std::string& p_field_name, osip_message_t** p_sip_message); + + void decode_host_port(const char* p_host, const char* p_port, LibSip__SIPTypesAndValues::HostPort& p_host_port); + void decode_semi_colon_params(const std::string& p_params, LibSip__Common::SemicolonParam__List& p_params_list); + void decode_semi_colon_params(const std::string& p_params, std::string& p_first_param, LibSip__Common::SemicolonParam__List& p_others_params); + void decode_semi_colon_params(const osip_list_t& p_sip_list, OPTIONAL& p_list); + void decode_ampersand_params(const osip_list_t& p_sip_list, OPTIONAL& p_list); + void decode_option_tag_list(const char* p_list, OPTIONAL& p_options_tags); + void decode_server_val_list(const char* p_list, LibSip__SIPTypesAndValues::ServerVal__List& p_server_vals); + +}; // End of class sip_codec_headers diff --git a/ccsrc/Protocols/Sip/sip_codec_info_request.cc b/ccsrc/Protocols/Sip/sip_codec_info_request.cc new file mode 100644 index 0000000000000000000000000000000000000000..7beb70c1b096b6762ef7f09eee95f7bf0fb23bc9 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_info_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_info_request.hh" +#include "loggers.hh" + +int sip_codec_info_request::encode (const LibSip__SIPTypesAndValues::INFO__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_info_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_info_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_info_request::encode: data=", data); + return 0; +} + +int sip_codec_info_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::INFO__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_info_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_info_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_info_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::INFO__E) { + loggers::get_instance().warning("sip_codec_info_request::decode: Wrong SIP Method, expected INFO"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_info_request.hh b/ccsrc/Protocols/Sip/sip_codec_info_request.hh new file mode 100644 index 0000000000000000000000000000000000000000..e3caf2f52a15fafb82f51bcca72475b16804ce39 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_info_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class INFO__Request; +} + +class sip_codec_info_request: public codec_gen < +LibSip__SIPTypesAndValues::INFO__Request, +LibSip__SIPTypesAndValues::INFO__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_info_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_info_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::INFO__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::INFO__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_info_request diff --git a/ccsrc/Protocols/Sip/sip_codec_invite_request.cc b/ccsrc/Protocols/Sip/sip_codec_invite_request.cc new file mode 100644 index 0000000000000000000000000000000000000000..a9b290650530b6db70cc27b9ec96a7477132efb0 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_invite_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_invite_request.hh" +#include "loggers.hh" + +int sip_codec_invite_request::encode (const LibSip__SIPTypesAndValues::INVITE__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_invite_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_invite_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_invite_request::encode: data=", data); + return 0; +} + +int sip_codec_invite_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::INVITE__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_invite_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_invite_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_invite_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::INVITE__E) { + loggers::get_instance().warning("sip_codec_invite_request::decode: Wrong SIP Method, expected INVITE"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_invite_request.hh b/ccsrc/Protocols/Sip/sip_codec_invite_request.hh new file mode 100644 index 0000000000000000000000000000000000000000..07f63b04c9f1e07c43653e859e128022a6d4bff8 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_invite_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class INVITE__Request; +} + +class sip_codec_invite_request: public codec_gen < +LibSip__SIPTypesAndValues::INVITE__Request, +LibSip__SIPTypesAndValues::INVITE__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_invite_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_invite_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::INVITE__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::INVITE__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_invite_request diff --git a/ccsrc/Protocols/Sip/sip_codec_message_body.cc b/ccsrc/Protocols/Sip/sip_codec_message_body.cc new file mode 100644 index 0000000000000000000000000000000000000000..5780e820cfb9996353974a07a2e0a889afc42f39 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_message_body.cc @@ -0,0 +1,929 @@ +#include "LibSip_SIPTypesAndValues.hh" +#include "LibSip_Common.hh" + +#include "sip_codec_message_body.hh" +#include "loggers.hh" + +#include "converter.hh" + +#include "urn_ietf_params_xml_ns_pidf.hh" + +#ifdef WIN32 +#undef osip_malloc +#undef osip_free +#define osip_malloc(S) malloc(S) +#define osip_free(P) { if (P!=NULL) { free(P);} } +#endif + +int sip_codec_message_body::encode (const LibSip__MessageBodyTypes::MessageBody& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_message_body::encode: ", msg); + + TRACE_INITIALIZE(TRACE_LEVEL7, NULL); + OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, ">>> sip_codec_request::encode\n")); + + if (msg.ischosen(LibSip__MessageBodyTypes::MessageBody::ALT_sdpMessageBody)) { + const LibSip__SDPTypes::SDP__Message& sdp = msg.sdpMessageBody(); + sdp_message_t* sdp_body = nullptr; + if (encode_sdp(sdp, &sdp_body) == -1) { + loggers::get_instance().warning("sip_codec_message_body::encode: Failed to encode SDP message"); + return -1; + } + char* buff = nullptr; + ::sdp_message_to_str(sdp_body, &buff); + if (buff != nullptr) { + data = char2oct(CHARSTRING(buff)); + osip_free(buff); + sdp_message_free(sdp_body); + } + } else if (msg.ischosen(LibSip__MessageBodyTypes::MessageBody::ALT_textplain)) { + data = char2oct(msg.textplain()); + } else { + loggers::get_instance().warning("sip_codec_message_body::encode: Unsupported variant"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_message_body::encode: ", data); + return 0; +} + +int sip_codec_message_body::decode (const OCTETSTRING& data, LibSip__MessageBodyTypes::MessageBody& msg, params* p_params) +{ + loggers::get_instance().log(">>> sip_codec_message_body::decode"); + + TRACE_INITIALIZE(TRACE_LEVEL7, NULL); + OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, ">>> sip_codec_request::decode\n")); + loggers::get_instance().error("sip_codec_message_body::decode: Not implemented yet"); + return -1; +} + +int sip_codec_message_body::encode_message_body(const LibSip__MessageBodyTypes::MessageBody& p_message_body, osip_message_t* p_sip_message) +{ // TODO Rename into encode_message + loggers::get_instance().log_msg(">>> sip_codec_message_body::encode_message_body: ", p_message_body); + + osip_content_length* content_length = ::osip_message_get_content_length(p_sip_message); + loggers::get_instance().log("sip_codec_message_body::encode_message_body: content_length= %s", content_length->value); + if (p_message_body.ischosen(LibSip__MessageBodyTypes::MessageBody::ALT_sdpMessageBody)) { + const LibSip__SDPTypes::SDP__Message& sdp = p_message_body.sdpMessageBody(); + sdp_message_t* sdp_body = nullptr; + if (encode_sdp(sdp, &sdp_body) == -1) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to decode SDP message"); + return -1; + } + char* buff = nullptr; + ::sdp_message_to_str(sdp_body, &buff); + if (buff != nullptr) { + ::osip_message_set_body(p_sip_message, buff, strlen(buff)); + osip_free(buff); + sdp_message_free(sdp_body); + } + } else if (p_message_body.ischosen(LibSip__MessageBodyTypes::MessageBody::ALT_textplain)) { + const CHARSTRING& text = p_message_body.textplain(); + ::osip_message_set_body(p_sip_message, static_cast(text), text.lengthof()); + } else if (p_message_body.ischosen(LibSip__MessageBodyTypes::MessageBody::ALT_mimeMessageBody)) { + ::osip_message_set_mime_version(p_sip_message, "2.0"); + const LibSip__MessageBodyTypes::MIME__Message& mime = p_message_body.mimeMessageBody(); + const LibSip__MessageBodyTypes::MimeEncapsulatedList& l = mime.mimeEncapsulatedList(); + int pos = 0; + while (pos < l.lengthof()) { + const LibSip__MessageBodyTypes::MIME__Encapsulated__Part& p = l[pos]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_message_body: p: ", p); + const LibSip__MessageBodyTypes::MIME__Encapsulated__Parts& ps = p.mime__encapsulated__part(); + if (ps.ischosen(LibSip__MessageBodyTypes::MIME__Encapsulated__Parts::ALT_sdpMessageBody)) { + const LibSip__SDPTypes::SDP__Message& sdp = ps.sdpMessageBody(); + sdp_message_t* sdp_body = nullptr; + if (encode_sdp(sdp, &sdp_body) == -1) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to encode SDP message"); + return -1; + } + char* buff = nullptr; + ::sdp_message_to_str(sdp_body, &buff); + if (buff != nullptr) { + loggers::get_instance().log("sip_codec_message_body::encode_message_body: sdp encoded value: %s", buff); + loggers::get_instance().log("sip_codec_message_body::encode_message_body: body list size: %d", ::osip_list_size(&p_sip_message->bodies)); + if (::osip_message_set_body(p_sip_message, buff, strlen(buff)) != 0) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to encode SDP message"); + osip_free(buff); + sdp_message_free(sdp_body); + return -1; + } + loggers::get_instance().log("sip_codec_message_body::encode_message_body: new body list size: %d", ::osip_list_size(&p_sip_message->bodies)); + osip_free(buff); + sdp_message_free(sdp_body); + // Retrive the new created body and add content type + osip_body_t* body = nullptr; + if (::osip_message_get_body(p_sip_message, ::osip_list_size(&p_sip_message->bodies) - 1, &body) != ::osip_list_size(&p_sip_message->bodies) - 1) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to set XML body content-type"); + return -1; + } + const char* ct = static_cast(p.content__type()); + loggers::get_instance().log("sip_codec_message_body::encode_message_body: content-type: %s", ct); + if (ct != nullptr) { + ::osip_body_set_contenttype(body, ct); + } else { // Use a default value + ::osip_body_set_contenttype(body, "application/sdp"); + } + } + } else if (ps.ischosen(LibSip__MessageBodyTypes::MIME__Encapsulated__Parts::ALT_xmlBody)) { + const LibSip__XMLTypes::XmlBody& xml = ps.xmlBody(); + osip_body_t* body; + if (encode_xml(xml, &body) == -1) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to encode XML message"); + return -1; + } + loggers::get_instance().log("sip_codec_message_body::encode_message_body: xml encoded value: %s", body->body); + loggers::get_instance().log("sip_codec_message_body::encode_message_body: body list size: %d", ::osip_list_size(&p_sip_message->bodies)); + if (::osip_message_set_body(p_sip_message, body->body, body->length) != 0) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to encode XML message"); + osip_body_free(body); + return -1; + } + loggers::get_instance().log("sip_codec_message_body::encode_message_body: new body list size: %d", ::osip_list_size(&p_sip_message->bodies)); + osip_body_free(body); + // Retrive the new created body and add content type + body = nullptr; + loggers::get_instance().log("sip_codec_message_body::encode_message_body: get item #%d", ::osip_list_size(&p_sip_message->bodies) - 1); + if (::osip_message_get_body(p_sip_message, ::osip_list_size(&p_sip_message->bodies) - 1, &body) != ::osip_list_size(&p_sip_message->bodies) - 1) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to set content-type"); + return -1; + } + const char* ct = static_cast(p.content__type()); + loggers::get_instance().log("sip_codec_message_body::encode_message_body: content-type: %s", ct); + if (ct != nullptr) { + ::osip_body_set_contenttype(body, ct); + } else { // Use a default value + ::osip_body_set_contenttype(body, "application/resource-lists+xml"); + } + } else if (ps.ischosen(LibSip__MessageBodyTypes::MIME__Encapsulated__Parts::ALT_msdBody)) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Unsupported decoding of ALT_msdBody"); + } else { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Unsupported decoding of encapulated parts"); + } + pos += 1; + } // End of 'while' statement + } else { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Unsupported variant"); + return -1; + } + + return 0; +} // End of method encode_message_body + +int sip_codec_message_body::encode_sdp(const LibSip__SDPTypes::SDP__Message& p_sdp_message, sdp_message_t** p_sdp_body) { + loggers::get_instance().log_msg(">>> sip_codec_message_body::encode_sdp: ", p_sdp_message); + + ::sdp_message_init(p_sdp_body); + + // Encode mandatory fields + // Version + INTEGER version = p_sdp_message.protocol__version(); + ::sdp_message_v_version_set(*p_sdp_body, (char*)::strdup(std::to_string(static_cast(version)).c_str())); + LibSip__SDPTypes::SDP__Origin origin = p_sdp_message.origin(); + // Origin + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: origin: ", origin); + ::sdp_message_o_origin_set( + *p_sdp_body, + (char*)::strdup(static_cast(origin.user__name())), + (char*)::strdup(static_cast(origin.session__id())), + (char*)::strdup(static_cast(origin.session__version())), + (char*)::strdup(static_cast(origin.net__type())), + (char*)::strdup(static_cast(origin.addr__type())), + (char*)::strdup(static_cast(origin.addr())) + ); + // Session name + ::sdp_message_s_name_set(*p_sdp_body, (char*)::strdup(static_cast(p_sdp_message.session__name()))); + // Time, t + ::sdp_message_s_name_set(*p_sdp_body, (char*)::strdup(static_cast(p_sdp_message.session__name()))); + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: times: ", p_sdp_message.times()); + for (int i = 0; i < p_sdp_message.times().lengthof(); i++) { + const LibSip__SDPTypes::SDP__time& time = p_sdp_message.times()[i]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: time: ", time); + ::sdp_message_t_time_descr_add(*p_sdp_body, (char*)::strdup(static_cast(time.time__field().start__time())), (char*)::strdup(static_cast(time.time__field().stop__time()))); + if (time.time__repeat().is_present()) { + const LibSip__SDPTypes::SDP__repeat__list& l = static_cast&>(*time.time__repeat().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: l: ", l); + for (int j = 0; j < l.lengthof(); j++) { + const LibSip__SDPTypes::SDP__repeat& r = l[j]; + // TODO r.repeat__interval(); + // TODO r.active(); + for (int k = 0; k < r.offsets().lengthof(); k++) { + const LibSip__SDPTypes::SDP__typed__time& s = r.offsets()[k]; + // TODO ::sdp_message_r_repeat_add(p_sdp_body, k, char *value); + } // End of 'for' statement + // TODO ::sdp_message_r_repeat_add(p_sdp_body, int pos_time_descr, char *value) + } // End of 'for' statement + } + } // End of 'for' statement + // Encode optional fields + // email, e + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: emails: ", p_sdp_message.emails()); + if (p_sdp_message.emails().is_present()) { + const LibSip__SDPTypes::SDP__email__list& l = static_cast(*p_sdp_message.emails().get_opt_value()); + for (int j = 0; j < l.lengthof(); j++) { + const LibSip__SDPTypes::SDP__contact& e = l[j]; + std::string str; + if (e.disp__name().is_present()) { + str = static_cast(static_cast(*e.disp__name().get_opt_value())); + str += " "; + } + str += static_cast(e.addr__or__phone()); + ::sdp_message_e_email_add(*p_sdp_body, ::strdup(str.c_str())); + } // End of 'for' statement + } + // Information, i + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: information: ", p_sdp_message.information()); + if (p_sdp_message.information().is_present()) { + ::sdp_message_i_info_set(*p_sdp_body, 0, ::strdup(static_cast(*p_sdp_message.information().get_opt_value()))); + } + // Media list, m + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: medias: ", p_sdp_message.media__list()); + if (p_sdp_message.media__list().is_present()) { + const LibSip__SDPTypes::SDP__media__desc__list& l = static_cast(*p_sdp_message.media__list().get_opt_value()); + int i = 0; + for ( ; i < l.lengthof(); i++) { + const LibSip__SDPTypes::SDP__media__desc m = l[i]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: media: ", m); + // Media field + if (m.media__field().ports().num__of__ports().is_present()) { + int p = static_cast(*m.media__field().ports().num__of__ports().get_opt_value()); + ::sdp_message_m_media_add(*p_sdp_body, (char*)::strdup(static_cast(m.media__field().media())), (char*)::strdup(std::to_string(m.media__field().ports().port__number()).c_str()), (char*)::strdup(std::to_string(p).c_str()), (char*)::strdup(static_cast(m.media__field().transport()))); + } else { + ::sdp_message_m_media_add(*p_sdp_body, (char*)::strdup(static_cast(m.media__field().media())), (char*)::strdup(std::to_string(m.media__field().ports().port__number()).c_str()), NULL, (char*)::strdup(static_cast(m.media__field().transport()))); + } + // Format list + const LibSip__SDPTypes::SDP__fmt__list& fmts = m.media__field().fmts(); + std::string str; + for (int j = 0; j < fmts.lengthof() - 1; j++) { + str += static_cast(fmts[j]); + str += " "; + } // End of 'for' statement + str += static_cast(fmts[fmts.lengthof() - 1]); + // information + if (m.information().is_present()) { + str += " "; + str += static_cast(static_cast(*m.information().get_opt_value())); + } + if (str.length() != 0) { + ::sdp_message_m_payload_add(*p_sdp_body, i, (char*)::strdup(str.c_str())); + } + // Attribute list, a + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attributes: ", m.attributes()); + if (m.attributes().is_present()) { + const LibSip__SDPTypes::SDP__attribute__list& al = static_cast(*m.attributes().get_opt_value()); + for (int k = 0; k < al.lengthof(); k++) { + const LibSip__SDPTypes::SDP__attribute a = al[k]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attribute: ", a); + if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_rtpmap)) { + std::string str(static_cast(a.rtpmap().payload__type())); + str += " "; + str += static_cast(a.rtpmap().codec().encoding()); + str += "/"; + str += a.rtpmap().codec().clockrate(); + if (a.rtpmap().codec().parameters().is_present()) { + str += "/"; + str += static_cast(static_cast(*a.rtpmap().codec().parameters().get_opt_value())); + } + loggers::get_instance().log("sip_codec_message_body::encode_sdp: attribute: media #%d: encode rtpmap:%s", i, str.c_str()); + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("rtpmap"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_fmtp)) { + std::string str(static_cast(a.fmtp().format())); + str += " "; + if (a.fmtp().params().ischosen(LibSip__SDPTypes::SDP__attribute__fmtp__format__specific__params::ALT_paramList)) { + const LibSip__Common::SemicolonParam__List& sl = a.fmtp().params().paramList(); + for (int k = 0; k < sl.lengthof(); k++) { + str += static_cast(sl[k].id()); + if (sl[k].paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*sl[k].paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attribute: fmtp: v: ", v); + str += "="; + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + str += static_cast(v.tokenOrHost()); + } else { + str += static_cast(v.quotedString()); + } + } // else, nothing to do + str += ";"; + } // End of 'for' statement + } else { + str += static_cast(a.fmtp().params().unstructured()); + } + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("fmtp"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_curr)) { + std::string str(static_cast(a.curr().preconditionType())); + str += " "; + str += static_cast(a.curr().statusType()); + str += " "; + str += static_cast(a.curr().direction()); + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("curr"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_des)) { + std::string str(static_cast(a.des().preconditionType())); + str += " "; + str += static_cast(a.des().strength()); + str += " "; + str += static_cast(a.des().statusType()); + str += " "; + str += static_cast(a.des().direction()); + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("des"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_maxptime)) { + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("maxptime"), (char*)::strdup(static_cast(a.maxptime().attr__value()))); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_sendrecv)) { + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("sendrecv"), nullptr); + } else { + loggers::get_instance().warning("sip_codec_message_body::encode_sdp: attribute not processed"); + } + } // End of 'for' statement + } + } // End of 'for' statement + ::sdp_message_endof_media(*p_sdp_body, i); + } + // Attribute list, a + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attributes: ", p_sdp_message.attributes()); + if (p_sdp_message.attributes().is_present()) { + const LibSip__SDPTypes::SDP__attribute__list& l = static_cast(*p_sdp_message.attributes().get_opt_value()); + int i = 0; + for ( ; i < l.lengthof(); i++) { + const LibSip__SDPTypes::SDP__attribute a = l[i]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attribute: ", a); + if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_rtpmap)) { + std::string str(static_cast(a.rtpmap().payload__type())); + str += " "; + str += static_cast(a.rtpmap().codec().encoding()); + str += " "; + str += a.rtpmap().codec().clockrate(); + if (a.rtpmap().codec().parameters().is_present()) { + str += "/"; + str += static_cast(static_cast(*a.rtpmap().codec().parameters().get_opt_value())); + } + loggers::get_instance().log("sip_codec_message_body::encode_sdp: attribute: media #%d: encode rtpmap:%s", i, str.c_str()); + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("rtpmap"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_fmtp)) { + std::string str(static_cast(a.fmtp().format())); + str += " "; + if (a.fmtp().params().ischosen(LibSip__SDPTypes::SDP__attribute__fmtp__format__specific__params::ALT_paramList)) { + const LibSip__Common::SemicolonParam__List& sl = a.fmtp().params().paramList(); + for (int k = 0; k < sl.lengthof(); k++) { + str += static_cast(sl[k].id()); + if (sl[k].paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*sl[k].paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attribute: fmtp: v: ", v); + str += "="; + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + str += static_cast(v.tokenOrHost()); + } else { + str += static_cast(v.quotedString()); + } + } // else, nothing to do + str += ";"; + } // End of 'for' statement + } else { + str += static_cast(a.fmtp().params().unstructured()); + } + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("fmtp"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_curr)) { + std::string str(static_cast(a.curr().preconditionType())); + str += " "; + str += static_cast(a.curr().statusType()); + str += " "; + str += static_cast(a.curr().direction()); + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("curr"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_des)) { + std::string str(static_cast(a.des().preconditionType())); + str += " "; + str += static_cast(a.des().strength()); + str += " "; + str += static_cast(a.des().statusType()); + str += " "; + str += static_cast(a.des().direction()); + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("des"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_maxptime)) { + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("maxptime"), (char*)::strdup(static_cast(a.maxptime().attr__value()))); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_sendrecv)) { + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("sendrecv"), nullptr); + } else { + loggers::get_instance().warning("sip_codec_message_body::encode_sdp: attribute not processed"); + } + } // End of 'for' statement + } + // Bandwith, b + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: Bandwidth: ", p_sdp_message.bandwidth()); + if (p_sdp_message.bandwidth().is_present()) { + const LibSip__SDPTypes::SDP__bandwidth__list& l = static_cast(*p_sdp_message.bandwidth().get_opt_value()); + int i = 0; + for ( ; i < l.lengthof(); i++) { + const LibSip__SDPTypes::SDP__bandwidth b = l[i]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: bandwidth: ", b); + ::sdp_message_b_bandwidth_add(*p_sdp_body, i, (char*)::strdup(static_cast(b.modifier())), (char*)::strdup(std::to_string(b.bandwidth()).c_str())); + } // End of 'for' statement + } + // Connection, c + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: Connection: ", p_sdp_message.connection()); + if (p_sdp_message.connection().is_present()) { + const LibSip__SDPTypes::SDP__connection& c = static_cast(*p_sdp_message.connection().get_opt_value()); + ::sdp_message_c_connection_add(*p_sdp_body, 0, ::strdup(static_cast(c.net__type())), ::strdup(static_cast(c.addr__type())), ::strdup(static_cast(c.conn__addr().addr())), nullptr, nullptr); + } + // TODO To be continued + + loggers::get_instance().log("<<< sip_codec_message_body::encode_sdp"); + return 0; +} + +void sip_codec_message_body::decode_message_body(const osip_message_t* p_sip_message, OPTIONAL& p_message_body) +{ // TODO Rename into decode_message + loggers::get_instance().log(">>> sip_codec_message_body::decode_message_body"); + + osip_content_length* content_length = ::osip_message_get_content_length(p_sip_message); + loggers::get_instance().log("sip_codec_message_body::decode_message_body: content_length= %s", content_length->value); + if (strcmp((const char*)content_length->value, "0") == 0) { + p_message_body.set_to_omit(); + return; + } + // TODO Align the body the content_length + + osip_content_type_t* content_type = ::osip_message_get_content_type(p_sip_message); + osip_body_t* body; + int result = ::osip_message_get_body(p_sip_message, 0, &body); + if (result != 0) { + loggers::get_instance().warning("sip_codec_message_body::decode_message_body: Failed to retrieve body"); + p_message_body.set_to_omit(); + return; + } + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Body size: %d", body->length); + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Body content: %s", body->body); + if (body->headers != nullptr) { + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Body headers size: %d", osip_list_size(body->headers)); + } + if (body->content_type != nullptr) { + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Body content-type: '%s'/'%s'/%p", body->content_type->type, body->content_type->subtype, body->content_type->gen_params.node); + } + if (::osip_list_size(body->headers) != 0) { + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Body header is present"); + // TODO Process Content-ID and other headers + } + LibSip__MessageBodyTypes::MessageBody msg_body; + if (content_type != nullptr) { + loggers::get_instance().log("sip_codec_message_body::decode_message_body: content-type.type: '%s'/'%s'/%p", content_type->type, content_type->subtype, content_type->gen_params.node); + if (std::string(content_type->type).compare("multipart") == 0) { + const osip_list_t* p = &(p_sip_message->bodies); + size_t size = osip_list_size(p); + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Multipart body size: %d\n", size); + if (size == 0) { + loggers::get_instance().warning("sip_codec_message_body::decode_message_body: Empty multipart content, fallback to textplain"); + msg_body.textplain() = CHARSTRING(body->body); + } else { + LibSip__MessageBodyTypes::MIME__Message mime; + if (content_type->gen_params.node != nullptr) { + mime.boundary() = CHARSTRING("boundary1"/*(const char*)content_type->gen_params.node->element*/); // TODO How to get the boundary name? + } else { + mime.boundary() = CHARSTRING("boundary1"); + } + loggers::get_instance().log_msg("sip_codec_message_body::decode_message_body: Boundary: ", mime.boundary()); + LibSip__MessageBodyTypes::MimeEncapsulatedList& l = mime.mimeEncapsulatedList(); + size_t pos = 0; + while (pos < size) { + const osip_header_t* header = (const osip_header_t*)osip_list_get(p, pos); + loggers::get_instance().log("sip_codec_message_body::decode_message_body: body content=%s", header->hname); + if ((*header->hname == 'v') && (*(header->hname + 1) == '=') && (*(header->hname + 2) == '0')) { // SDP + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Decode SDP"); + LibSip__MessageBodyTypes::MIME__Encapsulated__Part p; + p.content__type() = CHARSTRING("application/sdp"); + p.content__disposition().set_to_omit(); + p.content__id().set_to_omit(); + LibSip__SDPTypes::SDP__Message sdp_body; + osip_body_t* body; + ::osip_body_init(&body); + body->body = ::strdup(header->hname); // TODO Check if strdup is needed + body->length = strlen(header->hname); + LibSip__MessageBodyTypes::MIME__Encapsulated__Parts& parts = p.mime__encapsulated__part(); + if (decode_sdp(body, sdp_body) == 0) { + parts.sdpMessageBody() = sdp_body; + } else { + parts.msdBody() = char2oct(CHARSTRING(header->hname)); + } + l[pos] = p; + } else if ((*header->hname == '<') && (*(header->hname + 1) == '?') && (*(header->hname + 2) == 'x')) { // body = header->hname; + body->length = strlen(header->hname); + LibSip__MessageBodyTypes::MIME__Encapsulated__Parts& parts = p.mime__encapsulated__part(); + if (decode_xml(body, xml_body) == 0) { + parts.xmlBody() = xml_body; + } else { + parts.msdBody() = char2oct(CHARSTRING(header->hname)); + } + l[pos] = p; + } else { + // TODO + loggers::get_instance().error("sip_codec_message_body::decode_message_body: Not implemented yet"); + } + pos += 1; + } // End of 'while' statement + msg_body.mimeMessageBody() = mime; + } + } else if ((std::string(content_type->type).compare("application") == 0) && (std::string(content_type->subtype).compare("sdp") == 0)) { + LibSip__SDPTypes::SDP__Message sdp_body; + if (decode_sdp(body, sdp_body) == 0) { + // Set message body + msg_body.sdpMessageBody() = sdp_body; + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_message_body: sdp_message_parse failed, fallback to textplain"); + msg_body.textplain() = CHARSTRING(body->body); + } + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_message_body: Unsuported content-type, fallback to textplain"); + msg_body.textplain() = CHARSTRING(body->body); + } + p_message_body = OPTIONAL(msg_body); + } else if ((body != nullptr) && (body->body != nullptr)) { + msg_body.textplain() = CHARSTRING(body->body); + p_message_body = OPTIONAL(msg_body); + } else { + p_message_body.set_to_omit(); + } + + loggers::get_instance().log_msg("<<< sip_codec_message_body::decode_message_body: ", p_message_body); +} // End of method decode_message_body + +int sip_codec_message_body::decode_sdp(const osip_body_t* p_body, LibSip__SDPTypes::SDP__Message& p_sdp_header) { + loggers::get_instance().log(">>> sip_codec_message_body::decode_sdp: %s", p_body->body); + + sdp_message_t* sdp = nullptr; + ::sdp_message_init(&sdp); + std::string s(p_body->body); + s += "\r\n\r\n"; + if (::sdp_message_parse(sdp, s.c_str()/*p_body->body*/) == 0) { + // Mandatroy fields + // Version, v + char *hvalue = ::sdp_message_v_version_get(sdp); + if (hvalue != nullptr) { + p_sdp_header.protocol__version() = std::stoi(hvalue); + } + // Origin, o + p_sdp_header.origin() = LibSip__SDPTypes::SDP__Origin( + ::sdp_message_o_username_get(sdp), + ::sdp_message_o_sess_version_get(sdp), + ::sdp_message_o_sess_version_get(sdp), + ::sdp_message_o_nettype_get(sdp), + ::sdp_message_o_addrtype_get(sdp), + ::sdp_message_o_addr_get(sdp) + ); + // Session name, s + if ((hvalue = ::sdp_message_s_name_get(sdp)) != nullptr) { + p_sdp_header.session__name() = CHARSTRING(hvalue); + } + // Time, t + int i = 0; + if ((hvalue = ::sdp_message_t_start_time_get(sdp, i)) != nullptr) { + LibSip__SDPTypes::SDP__time__list l; + do { + LibSip__SDPTypes::SDP__time t; + LibSip__SDPTypes::SDP__time__field tf; + tf.start__time() = CHARSTRING(hvalue); + tf.stop__time() = CHARSTRING(sdp_message_t_stop_time_get(sdp, i)); + t.time__field() = tf; + t.time__repeat().set_to_omit(); // TODO + l[i] = t; + i += 1; + } while ((hvalue = ::sdp_message_t_start_time_get(sdp, i)) != nullptr); + p_sdp_header.times() = l; + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: No start time in sdp"); + } + // Optional fields + // Emails, e + i = 0; + if ((hvalue = ::sdp_message_e_email_get(sdp, i)) != nullptr) { + LibSip__SDPTypes::SDP__email__list l; + do { + LibSip__SDPTypes::SDP__contact e; + e.addr__or__phone() = CHARSTRING(hvalue); + e.disp__name().set_to_omit(); // TODO To be refined + l[i] = e; + i += 1; + } while ((hvalue = ::sdp_message_e_email_get(sdp, i)) != nullptr); + p_sdp_header.emails() = OPTIONAL(l); + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: No emails in sdp"); + p_sdp_header.emails().set_to_omit(); + } + // Information, i + i = 0; + if ((hvalue = ::sdp_message_i_info_get(sdp, i)) != nullptr) { + p_sdp_header.information() = OPTIONAL(CHARSTRING(hvalue)); + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: No information in sdp"); + p_sdp_header.information().set_to_omit(); + } + // Media, m + i = 0; + if ((hvalue = ::sdp_message_m_media_get(sdp, i)) != nullptr) { + LibSip__SDPTypes::SDP__media__desc__list l; + do { + loggers::get_instance().log("sip_codec_message_body::decode_sdp: Media='%s'", hvalue); + // Media description + LibSip__SDPTypes::SDP__media__field f; + f.media() = CHARSTRING(hvalue); + LibSip__SDPTypes::SDP__media__port p; + hvalue = ::sdp_message_m_port_get(sdp, i); + p.port__number() = std::stoi(hvalue); + if ((hvalue = ::sdp_message_m_number_of_port_get(sdp, i)) == nullptr) { + p.num__of__ports().set_to_omit(); + } else { + p.num__of__ports() = OPTIONAL(std::stoi(hvalue)); + } + f.ports() = p; + f.transport() = CHARSTRING(::sdp_message_m_proto_get(sdp, i)); + LibSip__SDPTypes::SDP__fmt__list fl; + int j = 0; + while ((hvalue = ::sdp_message_m_payload_get(sdp, i, j)) != nullptr) { + fl[j++] = CHARSTRING(hvalue); + } // End of 'for' statement + f.fmts() = fl; + LibSip__SDPTypes::SDP__media__desc m; + m.media__field() = f; + loggers::get_instance().log_msg("sip_codec_message_body::decode_sdp: m=", m); + // TODO + // Media attributes + m.attributes().set_to_omit(); + m.bandwidth().set_to_omit(); + m.information().set_to_omit(); + m.connections().set_to_omit(); + m.key().set_to_omit(); + l[i] = m; + i += 1; + } while ((hvalue = ::sdp_message_m_media_get(sdp, i)) != nullptr); + p_sdp_header.media__list() = OPTIONAL(l); + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: No media in sdp"); + p_sdp_header.media__list().set_to_omit(); + } + // Attributes, a + i = 0; + sdp_attribute_t* a; + if ((a = ::sdp_message_attribute_get(sdp, 0, i)) != nullptr) { + LibSip__SDPTypes::SDP__attribute__list l; + int j = 0; + do { + loggers::get_instance().log("sip_codec_message_body::decode_sdp: Attributes#%d: '%s'='%s'", i, a->a_att_field, (a->a_att_value == nullptr) ? "(null)" : a->a_att_value); + // Attribute description + LibSip__SDPTypes::SDP__attribute f; + if (strcmp(a->a_att_field, "rtpmap") == 0) { + std::vector output = converter::get_instance().split(a->a_att_value, " "); + LibSip__SDPTypes::SDP__attribute__rtpmap__codec c; + std::vector o = converter::get_instance().split(output[1], "/"); + c.encoding() = CHARSTRING(o[0].c_str()); + c.clockrate() = CHARSTRING(o[1].c_str()); + if (o.size() == 3) { + c.parameters() = OPTIONAL(CHARSTRING(o[2].c_str())); + } else { + c.parameters().set_to_omit(); + } + f.rtpmap() = LibSip__SDPTypes::SDP__attribute__rtpmap(CHARSTRING(output[0].c_str()), c); + } else if (strcmp(a->a_att_field, "fmtp") == 0) { + // fmtp'='114 mode-change-capability=2;max-red=0' + std::vector o = converter::get_instance().split(a->a_att_value, " "); + LibSip__SDPTypes::SDP__attribute__fmtp fmtp; + fmtp.format() = CHARSTRING(o[0].c_str()); + LibSip__SDPTypes::SDP__attribute__fmtp__format__specific__params c; + if (o[1].find(";") != std::string::npos) { + loggers::get_instance().log("sip_codec_message_body::decode_sdp: Attributes#%d: param list='%s'", i, o[1].c_str()); + o = converter::get_instance().split(o[1], ";"); + LibSip__Common::SemicolonParam__List& sl = c.paramList(); + for (unsigned int k = 0; k < o.size(); k++) { + loggers::get_instance().log("sip_codec_headers::decode_semi_colon_params: Process param: %s", o[k].c_str()); + size_t eq_pos = o[k].find("="); + if (eq_pos == std::string::npos) { + sl[k] = LibSip__Common::GenericParam(CHARSTRING(o[k].c_str()), OPTIONAL(OMIT_VALUE)); + } else { + loggers::get_instance().log("sip_codec_headers::decode_semi_colon_params: substrs: %s - %s", o[k].substr(0, eq_pos).c_str(), o[k].substr(eq_pos + 1).c_str()); + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[k].substr(eq_pos + 1).c_str()); + sl[k] = LibSip__Common::GenericParam(CHARSTRING(o[k].substr(0, eq_pos).c_str()), g); + } + } // End of 'for'statement + } else { + c.unstructured() = CHARSTRING(o[1].c_str()); + } + fmtp.params() = c; + f.fmtp() = fmtp; + } else if (strcmp(a->a_att_field, "curr") == 0) { + std::vector o = converter::get_instance().split(a->a_att_value, " "); + if (o.size() == 3) { + LibSip__SDPTypes::SDP__attribute__curr c; + c.preconditionType() = CHARSTRING(o[0].c_str()); + c.statusType() = CHARSTRING(o[1].c_str()); + c.direction() = CHARSTRING(o[2].c_str()); + f.curr() = c; + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: Wrong formatted curr SDP"); + f.curr().set_to_omit(); + } + } else if (strcmp(a->a_att_field, "des") == 0) { + std::vector o = converter::get_instance().split(a->a_att_value, " "); + if (o.size() == 4) { + LibSip__SDPTypes::SDP__attribute__des c; + c.preconditionType() = CHARSTRING(o[0].c_str()); + c.strength() = CHARSTRING(o[1].c_str()); + c.statusType() = CHARSTRING(o[2].c_str()); + c.direction() = CHARSTRING(o[3].c_str()); + f.des() = c; + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: Wrong formatted des SDP"); + f.des().set_to_omit(); + } + } else if (strcmp(a->a_att_field, "sendrecv") == 0) { + f.sendrecv() = LibSip__SDPTypes::SDP__attribute__sendrecv(NULL_VALUE); + } else if (strcmp(a->a_att_field, "maxptime") == 0) { + LibSip__SDPTypes::SDP__attribute__maxptime m; + f.maxptime() = LibSip__SDPTypes::SDP__attribute__maxptime(CHARSTRING((const char*)a->a_att_value)); + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: Unprocessed attributes#%d: '%s'='%s'", i, a->a_att_field, a->a_att_value); + } + loggers::get_instance().log_msg("sip_codec_message_body::decode_sdp: f: ", f); + if (f.is_bound()) { + l[j++] = f; + } + i += 1; + } while ((a = ::sdp_message_attribute_get(sdp, 0, i)) != nullptr); + loggers::get_instance().log_msg("sip_codec_message_body::decode_sdp: After Attribute loop: ", l); + if (j == 0) { // Empty list + p_sdp_header.attributes().set_to_omit(); + } else { + p_sdp_header.attributes() = OPTIONAL(l); + } + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: No attributes in sdp"); + p_sdp_header.attributes().set_to_omit(); + } + // Bandwith, b + i = 0; + sdp_bandwidth_t* b; + if ((b = ::sdp_message_bandwidth_get(sdp, 0, i)) != nullptr) { + LibSip__SDPTypes::SDP__bandwidth__list l; + do { + loggers::get_instance().log("sip_codec_message_body::decode_sdp: Bandwidths#%d: '%s'='%s'", i, b->b_bwtype, b->b_bandwidth); + LibSip__SDPTypes::SDP__bandwidth a(b->b_bwtype, INTEGER(std::stoi(b->b_bandwidth))); + loggers::get_instance().log_msg("sip_codec_message_body::decode_sdp_sdp: Bandwith: ", a); + l[i] = a; + i += 1; + } while((b = ::sdp_message_bandwidth_get(sdp, 0, i)) != nullptr); + p_sdp_header.bandwidth() = OPTIONAL(l); + } else { + p_sdp_header.bandwidth().set_to_omit(); + } + // Connection, c + char* net__type; + if ((net__type = ::sdp_message_c_nettype_get(sdp, 0, 0)) != nullptr) { + loggers::get_instance().log("sip_codec_message_body::decode_sdp: Connections#%d: '%s'", 0, a); + LibSip__SDPTypes::SDP__connection c; + c.net__type() = CHARSTRING(net__type); + c.addr__type() = CHARSTRING(::sdp_message_c_addrtype_get(sdp, 0, 0)); + LibSip__SDPTypes::SDP__conn__addr a; + a.addr() = CHARSTRING(::sdp_message_c_addr_get(sdp, 0, 0)); + if (::sdp_message_c_addr_multicast_ttl_get(sdp, 0, 0) != nullptr) { + a.ttl() = OPTIONAL(::stoi(::sdp_message_c_addr_multicast_ttl_get(sdp, 0, 0))); + } else { + a.ttl().set_to_omit(); + } + if (::sdp_message_c_addr_multicast_int_get(sdp, 0, 0) != nullptr) { + a.num__of__addr() = OPTIONAL(::stoi(::sdp_message_c_addr_multicast_int_get(sdp, 0, 0))); + } else { + a.num__of__addr().set_to_omit(); + } + c.conn__addr() = a; + loggers::get_instance().log_msg("sip_codec_message_body::decode_sdp_sdp: connection: ", c); + p_sdp_header.connection() = OPTIONAL(c); + } else { + p_sdp_header.connection().set_to_omit(); + } + i = 0; + + // TODO + p_sdp_header.uri().set_to_omit(); + p_sdp_header.phone__numbers().set_to_omit(); + p_sdp_header.timezone__adjustments().set_to_omit(); + p_sdp_header.key().set_to_omit(); + + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: Failed to parse SDP"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_message_body::decode_sdp: sdp: ", p_sdp_header); + return 0; +} + +int sip_codec_message_body::encode_xml(const LibSip__XMLTypes::XmlBody& p_message_body, osip_body_t** p_body) { + loggers::get_instance().log_msg(">>> sip_codec_message_body::encode_xml: ", p_message_body); + + ::osip_body_init(p_body); + + TTCN_EncDec::clear_error(); + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_Buffer encoding_buffer; + + CHARSTRING h("\n"); + encoding_buffer.put_s(h.lengthof(), (const unsigned char*)static_cast(h)); + if (p_message_body.ischosen(LibSip__XMLTypes::XmlBody::ALT_presence)) { // Held codec + const urn__ietf__params__xml__ns__pidf::Presence& presence = p_message_body.presence(); + loggers::get_instance().log_msg("sip_codec_message_body::encode_xml: Process Presence", (const Base_Type&)presence); + presence.encode(urn__ietf__params__xml__ns__pidf::Presence_descr_, encoding_buffer, TTCN_EncDec::CT_XER, XER_EXTENDED); + } else { + loggers::get_instance().warning("sip_codec_message_body::encode_xml: Unsupported variant"); + return -1; + } + OCTETSTRING data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()); + + if (p_message_body.ischosen(LibSip__XMLTypes::XmlBody::ALT_presence)) { // NG112-2021 Workaround for TITAN/XSD issue + // TODO TITAN work-around, replace tq0003 namespace??? + std::string s(static_cast(data), data.lengthof() + static_cast(data)); + /*size_t idx = 0; + + std::string f("tq0000:"); + std::string t(""); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign(":tq0000"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign("tq0001:"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign(":tq0001"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign("tq0002:"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign(":tq0002"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign("tq0003:"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign(":tq0003"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign("tq0004:"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign(":tq0004"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + */ + data = OCTETSTRING(s.length(), (const unsigned char*)s.c_str()); + } + (*p_body)->body = ::strdup(static_cast(oct2char(data))); + (*p_body)->length = strlen((*p_body)->body); + + loggers::get_instance().log("<<< sip_codec_message_body::encode_xml: %s", (*p_body)->body); + return 0; +} + +int sip_codec_message_body::decode_xml(const osip_body_t* p_body, LibSip__XMLTypes::XmlBody& p_xml_header) { + loggers::get_instance().log(">>> sip_codec_message_body::decode_xml: %s", p_body->body); + + // TODO Unify held_codec for bothHttp & Sip: instead of LibHttp__XmlMessageBodyTypes::XmlBody, use a generic XmlBody common to LibItsHttp & LibSip + TTCN_EncDec::clear_error(); + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + OCTETSTRING data(p_body->length, (const unsigned char*)p_body->body); + TTCN_Buffer decoding_buffer(data); + loggers::get_instance().log_to_hexa("sip_codec_message_body::decode_xml: decoding_buffer: ", decoding_buffer); + + if (strstr(p_body->body, " +{ +public: + explicit sip_codec_message_body() { }; + virtual ~sip_codec_message_body() { }; + + virtual int encode (const LibSip__MessageBodyTypes::MessageBody& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__MessageBodyTypes::MessageBody& msg, params* p_params = NULL); + + virtual int encode_message_body(const LibSip__MessageBodyTypes::MessageBody& p_message_body, osip_message_t* p_sip_message); + virtual void decode_message_body(const osip_message_t* p_sip_message, OPTIONAL& p_message_body); + +private: + int encode_sdp(const LibSip__SDPTypes::SDP__Message& p_message_body, sdp_message_t** p_sdp_body); + int decode_sdp(const osip_body_t* p_body, LibSip__SDPTypes::SDP__Message& p_sdp_header); + int encode_xml(const LibSip__XMLTypes::XmlBody& p_message_body, osip_body_t** p_body); + int decode_xml(const osip_body_t* p_body, LibSip__XMLTypes::XmlBody& p_xml_header); + +}; // End of class sip_codec_message_body diff --git a/ccsrc/Protocols/Sip/sip_codec_message_request.cc b/ccsrc/Protocols/Sip/sip_codec_message_request.cc new file mode 100644 index 0000000000000000000000000000000000000000..9314d548578144bd2a98437bd3f105447d5740ff --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_message_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_message_request.hh" +#include "loggers.hh" + +int sip_codec_message_request::encode (const LibSip__SIPTypesAndValues::MESSAGE__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_message_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_message_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_message_request::encode: data=", data); + return 0; +} + +int sip_codec_message_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::MESSAGE__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_message_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_message_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_message_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::MESSAGE__E) { + loggers::get_instance().warning("sip_codec_message_request::decode: Wrong SIP Method, expected MESSAGE"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_message_request.hh b/ccsrc/Protocols/Sip/sip_codec_message_request.hh new file mode 100644 index 0000000000000000000000000000000000000000..8df7dd180c611f5f602c991d3df8a693a48a68aa --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_message_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class MESSAGE__Request; +} + +class sip_codec_message_request: public codec_gen < +LibSip__SIPTypesAndValues::MESSAGE__Request, +LibSip__SIPTypesAndValues::MESSAGE__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_message_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_message_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::MESSAGE__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::MESSAGE__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_message_request diff --git a/ccsrc/Protocols/Sip/sip_codec_notify_request.cc b/ccsrc/Protocols/Sip/sip_codec_notify_request.cc new file mode 100644 index 0000000000000000000000000000000000000000..88429a14b11d4acccfa8472b910d68dc6cd907a8 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_notify_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_notify_request.hh" +#include "loggers.hh" + +int sip_codec_notify_request::encode (const LibSip__SIPTypesAndValues::NOTIFY__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_notify_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_notify_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_notify_request::encode: data=", data); + return 0; +} + +int sip_codec_notify_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::NOTIFY__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_notify_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_notify_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_notify_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::NOTIFY__E) { + loggers::get_instance().warning("sip_codec_notify_request::decode: Wrong SIP Method, expected NOTIFY"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_notify_request.hh b/ccsrc/Protocols/Sip/sip_codec_notify_request.hh new file mode 100644 index 0000000000000000000000000000000000000000..8114f68b3ac381caeba5939ec442ce860d45974d --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_notify_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class NOTIFY__Request; +} + +class sip_codec_notify_request: public codec_gen < +LibSip__SIPTypesAndValues::NOTIFY__Request, +LibSip__SIPTypesAndValues::NOTIFY__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_notify_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_notify_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::NOTIFY__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::NOTIFY__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_notify_request diff --git a/ccsrc/Protocols/Sip/sip_codec_options_request.cc b/ccsrc/Protocols/Sip/sip_codec_options_request.cc new file mode 100644 index 0000000000000000000000000000000000000000..195a183419c1a7d1d2e05b0e721cb4d84a2fd490 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_options_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_options_request.hh" +#include "loggers.hh" + +int sip_codec_options_request::encode (const LibSip__SIPTypesAndValues::OPTIONS__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_options_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_options_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_options_request::encode: data=", data); + return 0; +} + +int sip_codec_options_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::OPTIONS__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_options_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_options_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_options_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::OPTIONS__E) { + loggers::get_instance().warning("sip_codec_options_request::decode: Wrong SIP Method, expected OPTIONS"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_options_request.hh b/ccsrc/Protocols/Sip/sip_codec_options_request.hh new file mode 100644 index 0000000000000000000000000000000000000000..29b6000f8ba5f9ad827f32b00abcac6232f7cf29 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_options_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class OPTIONS__Request; +} + +class sip_codec_options_request: public codec_gen < +LibSip__SIPTypesAndValues::OPTIONS__Request, +LibSip__SIPTypesAndValues::OPTIONS__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_options_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_options_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::OPTIONS__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::OPTIONS__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_options_request diff --git a/ccsrc/Protocols/Sip/sip_codec_register_request.cc b/ccsrc/Protocols/Sip/sip_codec_register_request.cc new file mode 100644 index 0000000000000000000000000000000000000000..af45a9810f9e45c2456086dc122c97a13f78a1b6 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_register_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_register_request.hh" +#include "loggers.hh" + +int sip_codec_register_request::encode (const LibSip__SIPTypesAndValues::REGISTER__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_register_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_register_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_register_request::encode: data=", data); + return 0; +} + +int sip_codec_register_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::REGISTER__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_register_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_register_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_register_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::REGISTER__E) { + loggers::get_instance().warning("sip_codec_register_request::decode: Wrong SIP Method, expected REGISTER"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_register_request.hh b/ccsrc/Protocols/Sip/sip_codec_register_request.hh new file mode 100644 index 0000000000000000000000000000000000000000..804fa4984f9dd57de9865729ca564f376250d0de --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_register_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class REGISTER__Request; +} + +class sip_codec_register_request: public codec_gen < +LibSip__SIPTypesAndValues::REGISTER__Request, +LibSip__SIPTypesAndValues::REGISTER__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_register_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_register_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::REGISTER__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::REGISTER__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_register_request diff --git a/ccsrc/Protocols/Sip/sip_codec_request.cc b/ccsrc/Protocols/Sip/sip_codec_request.cc new file mode 100644 index 0000000000000000000000000000000000000000..90f1f629a6563e70898357dcb070b938cc3e425f --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_request.cc @@ -0,0 +1,210 @@ +#include "LibSip_SIPTypesAndValues.hh" +#include "LibSip_Common.hh" + +#include "sip_codec_request.hh" +#include "loggers.hh" + +#include "converter.hh" + +#ifdef WIN32 +#undef osip_malloc +#undef osip_free +#define osip_malloc(S) malloc(S) +#define osip_free(P) { if (P!=NULL) { free(P);} } +#endif + +int sip_codec_request::encode (const LibSip__SIPTypesAndValues::Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_request::encode: ", (const Base_Type&)msg); + + TRACE_INITIALIZE(TRACE_LEVEL7, NULL); + OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, ">>> sip_codec_request::encode\n")); + + osip_message_t* sip_message = nullptr; // TODO Use smart pointer + ::parser_init(); + int result = ::osip_message_init(&sip_message); + if (result != 0) { + loggers::get_instance().warning("sip_codec_request::encode: Failed to initialise internal data structures"); + return -1; + } + + if (encode_request(msg, sip_message) == -1) { + loggers::get_instance().warning("sip_codec_request::encode: Failed to encode Request"); + ::osip_message_free(sip_message); + sip_message = nullptr; + return -1; + } + + char* buffer = nullptr; + size_t length = 0; + result = ::osip_message_to_str(sip_message, &buffer, &length); + if (result != 0) { + loggers::get_instance().warning("sip_codec_request::encode: Failed to encode data structures"); + ::osip_message_free(sip_message); + return -1; + } + loggers::get_instance().log("sip_codec_request::encode: Message:%s", buffer); + data = OCTETSTRING(length, (const unsigned char*)buffer); + osip_free(buffer); + ::osip_message_free(sip_message); + + loggers::get_instance().log_msg("<<< sip_codec_request::encode: data=", data); + return result; +} + +int sip_codec_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_request::decode: data=", data); + + TRACE_INITIALIZE(TRACE_LEVEL7, NULL); + OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, ">>> sip_codec_request::decode\n")); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_request::decode: Wrong parameters"); + return -1; + } + + osip_message_t* sip_message; + ::parser_init(); + int result = ::osip_message_init(&sip_message); + if (result != 0) { + loggers::get_instance().warning("sip_codec_request::decode: Failed to initialise internal data structures"); + return -1; + } + result = ::osip_message_parse(sip_message, (const char*)static_cast(data), data.lengthof()); + if (result != 0) { + loggers::get_instance().warning("sip_codec_request::decode: Failed to parse SIP message"); + ::osip_message_free(sip_message); + return -1; + } + + // Fill RequestLine + decode_request_line(sip_message, msg); + + // Fill Headers + decode_request_headers(sip_message, msg); + + // Fill MessageBody + decode_message_body(sip_message, msg.messageBody()); + + // Fill Payload + decode_payload(sip_message, msg); + + ::osip_message_free(sip_message); + loggers::get_instance().log_msg("sip_codec_request::decode: ", msg); + + return 0; +} + +int sip_codec_request::encode_request(const LibSip__SIPTypesAndValues::Request& p_request, osip_message_t* p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_request::encode_request"); + + encode_request_line(p_request.requestLine(), p_sip_message); + + encode_request_headers(p_request.msgHeader(), p_sip_message); + + if (p_request.messageBody().is_present()) { + const LibSip__MessageBodyTypes::MessageBody& m = static_cast(*p_request.messageBody().get_opt_value()); + encode_message_body(m, p_sip_message); + } + + if (p_request.payload().is_present()) { + const LibSip__SIPTypesAndValues::Payload& p = static_cast(*p_request.payload().get_opt_value()); + encode_request_payload(p, p_sip_message); + } + + return 0; +} // End of method encode_request + +int sip_codec_request::encode_request_line(const LibSip__SIPTypesAndValues::RequestLine& p_request_line, osip_message_t* p_sip_message) +{ + loggers::get_instance().log_msg(">>> sip_codec_request::encode_request_line", p_request_line); + + // Sip method + std::string str(LibSip__SIPTypesAndValues::Method::enum_to_str(p_request_line.method())); + char *p = (char*)osip_malloc(str.length() - 2 + 1); // Will be freed by osip_message_free + ::strcpy(p, str.substr(0, str.length() - 2).c_str()); // Remove _E + ::osip_message_set_method(p_sip_message, p); + + // Sip uri + osip_uri_t *uri; + if (encode_sip_url(p_request_line.requestUri(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_request::encode_request_line: Faile to encode SipUrl"); + return -1; + } + ::osip_message_set_uri(p_sip_message, uri); + // FIXME: Add parameter to support udp/tcp/tls transport + //::osip_uri_set_transport_tcp(uri); + ::osip_uri_set_transport_tls(uri); + + // SIP version + p = (char*)osip_malloc(p_request_line.sipVersion().lengthof() + 1); // Will be freed by osip_message_free + ::strcpy(p, (char*)static_cast(p_request_line.sipVersion())); + ::osip_message_set_version(p_sip_message, p); + + return 0; +} // End of method encode_request_line + +int sip_codec_request::encode_request_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message) +{ // TODO Rename to encode_headers and call sip_codec_headers::encode_headers + loggers::get_instance().log_msg(">>> sip_codec_request::encode_request_headers: ", p_msg_header); + + if (encode_headers(p_msg_header, p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_request::encode_request_headers: Failed to encode headers"); + return -1; + } + + return 0; +} // End of method encode_request_headers + +int sip_codec_request::encode_request_payload(const LibSip__SIPTypesAndValues::Payload& p_payload, osip_message_t* p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_request::encode_request_payload"); + + return 0; +} // End of method encode_request_payload + +void sip_codec_request::decode_request_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& p_request) +{ // TODO rename into decode_headers and call sip_code_headers::decode_headers + loggers::get_instance().log(">>> sip_codec_request::decode_request_headers"); + + LibSip__SIPTypesAndValues::MessageHeader& headers = p_request.msgHeader(); + decode_headers(p_sip_message, headers); + if (!headers.is_bound()) { + loggers::get_instance().warning("sip_codec_request::decode_request_headers: Failed to decode headers"); + return; + } + + loggers::get_instance().log_msg("<<< sip_codec_request::decode_request_headers: ", p_request); +} // End of method decode_request_headers + +void sip_codec_request::decode_payload(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& p_request) +{ + loggers::get_instance().log(">>> sip_codec_request::decode_payload"); + + p_request.payload().set_to_omit(); + +} // End of method decode_payload + +void sip_codec_request::decode_request_line(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& p_request) +{ + loggers::get_instance().log(">>> sip_codec_request::decode_request_line"); + + LibSip__SIPTypesAndValues::RequestLine request_line; + std::string str(::osip_message_get_method(p_sip_message)); + str += "_E"; + request_line.method() = LibSip__SIPTypesAndValues::Method(LibSip__SIPTypesAndValues::Method::str_to_enum(str.c_str())); + loggers::get_instance().log_msg("sip_codec_request::decode_request_line: Method: ", request_line.method()); + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_message_get_uri(p_sip_message)); + loggers::get_instance().log_msg("sip_codec_request::decode_request_line: SipUrl: ", uri); + request_line.requestUri() = uri; + request_line.sipVersion() = CHARSTRING(::osip_message_get_version(p_sip_message)); + p_request.requestLine() = request_line; + // FIXME To be continued + + loggers::get_instance().log_msg("<<< sip_codec_request::decode_request_line: ", p_request); +} + diff --git a/ccsrc/Protocols/Sip/sip_codec_request.hh b/ccsrc/Protocols/Sip/sip_codec_request.hh new file mode 100644 index 0000000000000000000000000000000000000000..e339b9dea7b620ee56fd7c2dd164948142ac70ac --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_request.hh @@ -0,0 +1,45 @@ +#pragma once + +#include "codec_gen.hh" +#include "params.hh" + +#include "sip_codec_headers.hh" +#include "sip_codec_message_body.hh" + +#include "osipparser2/osip_parser.h" +#include "osipparser2/sdp_message.h" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class Request; + class RequestLine; + class MessageHeader; + class Payload; +} + +class sip_codec_request: public codec_gen < + LibSip__SIPTypesAndValues::Request, + LibSip__SIPTypesAndValues::Request>, + sip_codec_headers, sip_codec_message_body +{ +public: + explicit sip_codec_request() : codec_gen() { }; + virtual ~sip_codec_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::Request& msg, params* p_params = NULL); +private: + int encode_request(const LibSip__SIPTypesAndValues::Request& p_request, osip_message_t* p_sip_message); + int encode_request_line(const LibSip__SIPTypesAndValues::RequestLine& p_request_line, osip_message_t* p_sip_message); + int encode_request_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message); + int encode_request_payload(const LibSip__SIPTypesAndValues::Payload& p_payload, osip_message_t* p_sip_message); + +private: + void decode_payload(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& p_request); + void decode_request_line(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& msg); + void decode_request_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& msg); + +}; // End of class sip_codec_request diff --git a/ccsrc/Protocols/Sip/sip_codec_response.cc b/ccsrc/Protocols/Sip/sip_codec_response.cc new file mode 100644 index 0000000000000000000000000000000000000000..939353e959bfa18226359021f0f3d0d9c460c3d7 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_response.cc @@ -0,0 +1,191 @@ +#include "LibSip_SIPTypesAndValues.hh" +#include "LibSip_Common.hh" + +#include "sip_codec_response.hh" +#include "loggers.hh" + +#include "converter.hh" + +#ifdef WIN32 +#undef osip_malloc +#undef osip_free +#define osip_malloc(S) malloc(S) +#define osip_free(P) { if (P!=NULL) { free(P);} } +#endif + +int sip_codec_response::encode (const LibSip__SIPTypesAndValues::Response& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_response::encode: ", (const Base_Type&)msg); + + osip_message_t* sip_message = nullptr; // TODO Use smart pointer + ::parser_init(); + int result = ::osip_message_init(&sip_message); + if (result != 0) { + loggers::get_instance().warning("sip_codec_response::encode: Failed to initialise internal data structures"); + return -1; + } + + if (encode_response(msg, sip_message) == -1) { + loggers::get_instance().warning("sip_codec_response::encode: Failed to encode Response"); + ::osip_message_free(sip_message); + sip_message = nullptr; + return -1; + } + + char* buffer = nullptr; + size_t length = 0; + result = ::osip_message_to_str(sip_message, &buffer, &length); + if (result != 0) { + loggers::get_instance().warning("sip_codec_response::encode: Failed to encode data structures: return code=%d", result); + ::osip_message_free(sip_message); + return -1; + } + loggers::get_instance().log("sip_codec_response::encode: Message:%s", buffer); + data = OCTETSTRING(length, (const unsigned char*)buffer); + osip_free(buffer); + ::osip_message_free(sip_message); + + loggers::get_instance().log_msg("<<< sip_codec_response::encode: data=", data); + return result; +} + +int sip_codec_response::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::Response& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_response::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_response::decode: Wrong parameters"); + return -1; + } + + osip_message_t* sip_message; + ::parser_init(); + int result = ::osip_message_init(&sip_message); + if (result != 0) { + loggers::get_instance().warning("sip_codec_response::decode: Failed to initialise internal data structures"); + return -1; + } + result = ::osip_message_parse(sip_message, (const char*)static_cast(data), data.lengthof()); + if (result != 0) { + loggers::get_instance().warning("sip_codec_response::decode: Failed to parse SIP message"); + ::osip_message_free(sip_message); + return -1; + } + + // Fill StatusLine + decode_status_line(sip_message, msg); + + // Fill Headers + decode_response_headers(sip_message, msg); + + // Fill MessageBody + decode_message_body(sip_message, msg.messageBody()); + + // Fill Payload + decode_payload(sip_message, msg); + + ::osip_message_free(sip_message); + loggers::get_instance().log_msg("sip_codec_response::decode: ", msg); + + return 0; +} + +int sip_codec_response::encode_response(const LibSip__SIPTypesAndValues::Response& p_response, osip_message_t* p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_response::encode_response"); + + encode_status_line(p_response.statusLine(), p_sip_message); + + encode_response_headers(p_response.msgHeader(), p_sip_message); + + if (p_response.messageBody().is_present()) { + const LibSip__MessageBodyTypes::MessageBody& m = static_cast(*p_response.messageBody().get_opt_value()); + encode_message_body(m, p_sip_message); + } + + if (p_response.payload().is_present()) { + const LibSip__SIPTypesAndValues::Payload& p = static_cast(*p_response.payload().get_opt_value()); + encode_response_payload(p, p_sip_message); + } + + return 0; +} // End of method encode_response + +int sip_codec_response::encode_status_line(const LibSip__SIPTypesAndValues::StatusLine& p_status_line, osip_message_t* p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_response::encode_status_line"); + + // Sip version + char* p = (char*)osip_malloc(p_status_line.sipVersion().lengthof() + 1); // Will be freed by osip_message_free + ::strcpy(p, (char*)static_cast(p_status_line.sipVersion())); + ::osip_message_set_version(p_sip_message, p); + + // Status code + loggers::get_instance().log("sip_codec_response::encode_status_line: status code=%d", static_cast(p_status_line.statusCode())); + ::osip_message_set_status_code(p_sip_message, static_cast(p_status_line.statusCode())); + + // Reason phrase + p = (char*)osip_malloc(p_status_line.reasonPhrase().lengthof() + 1); // Will be freed by osip_message_free + ::strcpy(p, (char*)static_cast(p_status_line.reasonPhrase())); + ::osip_message_set_reason_phrase(p_sip_message, p); + + return 0; +} // End of method encode_status_line + +int sip_codec_response::encode_response_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message) +{ // TODO Rename to encode_headers and call sip_codec_headers::encode_headers + loggers::get_instance().log_msg(">>> sip_codec_response::encode_response_headers: ", p_msg_header); + + if (encode_headers(p_msg_header, p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_response::encode_response_headers: Failed to encode headers"); + return -1; + } + + return 0; +} // End of method encode_response_headers + +int sip_codec_response::encode_response_payload(const LibSip__SIPTypesAndValues::Payload& p_payload, osip_message_t* p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_response::encode_response_payload"); + + return 0; +} // End of method encode_response_payload + +void sip_codec_response::decode_status_line(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& p_response) +{ + loggers::get_instance().log(">>> sip_codec_response::decode_status_line"); + + LibSip__SIPTypesAndValues::StatusLine status_line; + status_line.sipVersion() = CHARSTRING(::osip_message_get_version(p_sip_message)); + loggers::get_instance().log_msg("sip_codec_response::decode_status_line: sipVersion: ", status_line.sipVersion()); + status_line.statusCode() = INTEGER(osip_message_get_status_code(p_sip_message)); + loggers::get_instance().log_msg("sip_codec_response::decode_status_line: statusCode: ", status_line.statusCode()); + status_line.reasonPhrase() = CHARSTRING(::osip_message_get_reason_phrase(p_sip_message)); + loggers::get_instance().log_msg("sip_codec_response::decode_status_line: reasonPhrase: ", status_line.reasonPhrase()); + p_response.statusLine() = status_line; + + loggers::get_instance().log_msg("<<< sip_codec_response::decode_status_line: ", p_response.statusLine()); +} // End of method decode_status_line + +void sip_codec_response::decode_response_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& p_response) +{ // TODO rename into decode_headers and call sip_code_headers::decode_headers + loggers::get_instance().log(">>> sip_codec_response::decode_response_headers"); + + LibSip__SIPTypesAndValues::MessageHeader& headers = p_response.msgHeader(); + decode_headers(p_sip_message, headers); + if (!headers.is_bound()) { + loggers::get_instance().warning("sip_codec_response::decode_response_headers: Failed to decode headers"); + return; + } + + loggers::get_instance().log_msg("<<< sip_codec_response::decode_response_headers: ", p_response); +} // End of method decode_response_headers + +void sip_codec_response::decode_payload(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& p_response) +{ + loggers::get_instance().log(">>> sip_codec_response::decode_payload"); + + p_response.payload().set_to_omit(); + +} // End of method decode_payload diff --git a/ccsrc/Protocols/Sip/sip_codec_response.hh b/ccsrc/Protocols/Sip/sip_codec_response.hh new file mode 100644 index 0000000000000000000000000000000000000000..c0f8f83a0e30478d1c063389a96c390bbd6cc13c --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_response.hh @@ -0,0 +1,46 @@ +#pragma once + +#include "codec_gen.hh" +#include "params.hh" + +#include "sip_codec_headers.hh" +#include "sip_codec_message_body.hh" + +#include "osipparser2/osip_parser.h" +#include "osipparser2/sdp_message.h" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class Response; + class StatusLine; + class MessageHeader; + class Payload; +} + +class sip_codec_response: public codec_gen < + LibSip__SIPTypesAndValues::Response, + LibSip__SIPTypesAndValues::Response>, + sip_codec_headers, sip_codec_message_body + +{ +public: + explicit sip_codec_response() : codec_gen() { }; + virtual ~sip_codec_response() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::Response& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::Response& msg, params* p_params = NULL); +private: + int encode_response(const LibSip__SIPTypesAndValues::Response& p_response, osip_message_t* p_sip_message); + int encode_status_line(const LibSip__SIPTypesAndValues::StatusLine& p_status_line, osip_message_t* p_sip_message); + int encode_response_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message); + int encode_response_payload(const LibSip__SIPTypesAndValues::Payload& p_payload, osip_message_t* p_sip_message); + +private: + void decode_status_line(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& msg); + void decode_response_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& msg); + void decode_payload(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& p_response); + +}; // End of class sip_codec_response diff --git a/ccsrc/Protocols/Sip/sip_codec_subscribe_request.cc b/ccsrc/Protocols/Sip/sip_codec_subscribe_request.cc new file mode 100644 index 0000000000000000000000000000000000000000..2c52c4f6777270b72d8f250063327fcfe102990c --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_subscribe_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_subscribe_request.hh" +#include "loggers.hh" + +int sip_codec_subscribe_request::encode (const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_subscribe_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_subscribe_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_subscribe_request::encode: data=", data); + return 0; +} + +int sip_codec_subscribe_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::SUBSCRIBE__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_subscribe_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_subscribe_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_subscribe_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::SUBSCRIBE__E) { + loggers::get_instance().warning("sip_codec_subscribe_request::decode: Wrong SIP Method, expected SUBSCRIBE"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_subscribe_request.hh b/ccsrc/Protocols/Sip/sip_codec_subscribe_request.hh new file mode 100644 index 0000000000000000000000000000000000000000..98d087f5cf175b58645975d68de415e18a5c27c2 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_subscribe_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class SUBSCRIBE__Request; +} + +class sip_codec_subscribe_request: public codec_gen < +LibSip__SIPTypesAndValues::SUBSCRIBE__Request, +LibSip__SIPTypesAndValues::SUBSCRIBE__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_subscribe_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_subscribe_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::SUBSCRIBE__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_subscribe_request diff --git a/ccsrc/Protocols/Sip/sip_layer.cc b/ccsrc/Protocols/Sip/sip_layer.cc new file mode 100644 index 0000000000000000000000000000000000000000..64be3bdda37fe05ef81ce7b2d3894f9ba09bbbe7 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_layer.cc @@ -0,0 +1,146 @@ +#include "LibSip_Interface.hh" +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_layer_factory.hh" + +#include "loggers.hh" + +#include "converter.hh" + +sip_layer::sip_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { + loggers::get_instance().log(">>> sip_layer::sip_layer: %s, %s", to_string().c_str(), p_param.c_str()); + // Setup parameters + params::convert(_params, p_param); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::REGISTER__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_register.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::INVITE__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_invite.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::ACK__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_ack.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_subscribe.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::MESSAGE__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_message.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::OPTIONS__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_options.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::BYE__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_bye.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::CANCEL__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_cancel.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::NOTIFY__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_notify.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::INFO__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_info.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::Response& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_response.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> sip_layer::send_data: ", data); + + send_to_all_layers(data, p_params); +} + +void sip_layer::receive_data(OCTETSTRING& data, params& p_params) +{ + loggers::get_instance().log_msg(">>> sip_layer::receive_data: ", data); + + // Decode SIP message + if ((data[0].get_octet() == 'S') && (data[1].get_octet() == 'I') && (data[2].get_octet() == 'P')) { // SIP... Assume it is a responce + LibSip__SIPTypesAndValues::Response sip_response; + if (_codec_response.decode(data, sip_response) == -1) { + loggers::get_instance().warning("sip_layer::receive_data: Failed to decode response data"); + return; + } + // Pass it to the ports + to_all_upper_ports(sip_response, p_params); + } else { // Assume it is a request + LibSip__SIPTypesAndValues::Request sip_request; + if (_codec_request.decode(data, sip_request) == -1) { + loggers::get_instance().warning("sip_layer::receive_data: Failed to decode request data"); + return; + } + // Pass it to the ports + to_all_upper_ports(sip_request, p_params); + } +} + +sip_layer_factory sip_layer_factory::_f; + diff --git a/ccsrc/Protocols/Sip/sip_layer.hh b/ccsrc/Protocols/Sip/sip_layer.hh new file mode 100644 index 0000000000000000000000000000000000000000..c8a58428c422478d469b47cc47039c781b98931d --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_layer.hh @@ -0,0 +1,129 @@ +/*! + * \file sip_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include + +#include "t_layer.hh" + +#include "sip_codec_request.hh" +#include "sip_codec_response.hh" +#include "sip_codec_register_request.hh" +#include "sip_codec_invite_request.hh" +#include "sip_codec_ack_request.hh" +#include "sip_codec_subscribe_request.hh" +#include "sip_codec_message_request.hh" +#include "sip_codec_options_request.hh" +#include "sip_codec_notify_request.hh" +#include "sip_codec_cancel_request.hh" +#include "sip_codec_info_request.hh" +#include "sip_codec_bye_request.hh" + +namespace LibSip__Interface { + class SipPort; //! Forward declaration of TITAN class +} + +namespace LibSip__SIPTypesAndValues { + class REGISTER__Request; //! Forward declaration of TITAN class + class INVITE__Request; //! Forward declaration of TITAN class + class ACK__Request; //! Forward declaration of TITAN class + class SUSCRIBE__Request; //! Forward declaration of TITAN class + class MESSAGE__Request; //! Forward declaration of TITAN class + class OPTIONS__Request; //! Forward declaration of TITAN class + class CANCEL__Request; //! Forward declaration of TITAN class + class NOTIFY__Request; //! Forward declaration of TITAN class + class INFO__Request; //! Forward declaration of TITAN class + class BYE__Request; //! Forward declaration of TITAN class + class Resquest; //! Forward declaration of TITAN class + class Response; //! Forward declaration of TITAN class +} + +class OCTETSTRING; //! Forward declaration of TITAN class + +/*! + * \class sip_layer + * \brief This class provides a factory class to create an sip_layer class instance + */ +class sip_layer : public t_layer { + params _params; + sip_codec_request _codec_request; + sip_codec_response _codec_response; + sip_codec_register_request _codec_register; + sip_codec_invite_request _codec_invite; + sip_codec_ack_request _codec_ack; + sip_codec_subscribe_request _codec_subscribe; + sip_codec_message_request _codec_message; + sip_codec_options_request _codec_options; + sip_codec_cancel_request _codec_cancel; + sip_codec_notify_request _codec_notify; + sip_codec_info_request _codec_info; + sip_codec_bye_request _codec_bye; + +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the sip_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + sip_layer() : t_layer(), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() {}; + /*! + * \brief Specialised constructor + * Create a new instance of the sip_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + sip_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~sip_layer() { }; + + void sendMsg(const LibSip__SIPTypesAndValues::REGISTER__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::INVITE__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::ACK__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::MESSAGE__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::OPTIONS__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::BYE__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::CANCEL__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::NOTIFY__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::INFO__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::Response& p_sip_message, params& p_param); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& p_params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& p_params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& p_params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class sip_layer + diff --git a/ccsrc/Protocols/Sip/sip_layer_factory.hh b/ccsrc/Protocols/Sip/sip_layer_factory.hh new file mode 100644 index 0000000000000000000000000000000000000000..115dbd707e3888a88751a796342e2ada3c42e8f5 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_layer_factory.hh @@ -0,0 +1,45 @@ +/*! + * \file sip_layer_factory.hh + * \brief Header file for ITS Sip protocol layer factory. + * \author ETSI STF525 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "sip_layer.hh" + +/*! + * \class sip_layer_factory + * \brief This class provides a factory class to create an sip_layer class instance + */ +class sip_layer_factory : public layer_factory { + static sip_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the udp_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + sip_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("SIP", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ + return new sip_layer(p_type, p_param); + }; +}; // End of class sip_layer_factory + diff --git a/ccsrc/Protocols/UpperTester/module.mk b/ccsrc/Protocols/UpperTester/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..b704706671c2eab0d61a7123af46b7c710555058 --- /dev/null +++ b/ccsrc/Protocols/UpperTester/module.mk @@ -0,0 +1,5 @@ +sources := \ + upper_tester_layer.cc \ + + +includes := . diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer.cc b/ccsrc/Protocols/UpperTester/upper_tester_layer.cc new file mode 100644 index 0000000000000000000000000000000000000000..9304ef974e14b942b7ca9cb6b35bba2400ca5336 --- /dev/null +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer.cc @@ -0,0 +1,39 @@ +#include "LibIot_TestInterface.hh" +#include "LibUpperTester.hh" + +#include "upper_tester_layer_factory.hh" + +#include "loggers.hh" + +#include "converter.hh" + +upper_tester_layer::upper_tester_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params() { + loggers::get_instance().log(">>> upper_tester_layer::upper_tester_layer: %s, %s", to_string().c_str(), p_param.c_str()); + // Setup parameters + params::convert(_params, p_param); +} + +void upper_tester_layer::sendMsg(const LibUpperTester::EquipmentOperationReq& p_equipment_operation_req, params& p_param) { + loggers::get_instance().log_msg(">>> upper_tester_layer::sendMsg: ", p_equipment_operation_req); + + // Encode DiameterMessage + OCTETSTRING data; + //_codec_register.encode(p_equipment_operation_req, data); + //send_data(data, _params); +} + +void upper_tester_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> upper_tester_layer::send_data: ", data); + + send_to_all_layers(data, p_params); +} + +void upper_tester_layer::receive_data(OCTETSTRING& data, params& p_params) +{ + loggers::get_instance().log_msg(">>> upper_tester_layer::receive_data: ", data); + + // Decode Diameter message +} + +upper_tester_layer_factory upper_tester_layer_factory::_f; + diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer.hh b/ccsrc/Protocols/UpperTester/upper_tester_layer.hh new file mode 100644 index 0000000000000000000000000000000000000000..2358550c1976316c1018a6fabd86014445df55ce --- /dev/null +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer.hh @@ -0,0 +1,73 @@ +/*! + * \file upper_tester_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include + +#include "t_layer.hh" + +namespace LibIot__TestInterface { + class EquipmentAccessPort; //! Forward declaration of TITAN class +} + +namespace LibUpperTester { + class EquipmentOperationReq; //! Forward declaration of TITAN class +} + +class OCTETSTRING; //! Forward declaration of TITAN class + +/*! + * \class upper_tester_layer + * \brief This class provides a factory class to create an upper_tester_layer class instance + */ +class upper_tester_layer : public t_layer { + params _params; + +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the upper_tester_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + upper_tester_layer() : t_layer(), _params() {}; + /*! + * \brief Specialised constructor + * Create a new instance of the upper_tester_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + upper_tester_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~upper_tester_layer() { }; + + void sendMsg(const LibUpperTester::EquipmentOperationReq& p_equipment_operation_req, params& p_param); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& p_params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& p_params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& p_params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class upper_tester_layer + diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh b/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh new file mode 100644 index 0000000000000000000000000000000000000000..558dfa8f34884515e5da580ddf880aa2a39a7e91 --- /dev/null +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh @@ -0,0 +1,45 @@ +/*! + * \file upper_tester_layer_factory.hh + * \brief Header file for INT LibIot protocol layer factory. + * \author ETSI TTF T010 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "upper_tester_layer.hh" + +/*! + * \class upper_tester_layer_factory + * \brief This class provides a factory class to create an upper_tester_layer class instance + */ +class upper_tester_layer_factory : public layer_factory { + static upper_tester_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the udp_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + upper_tester_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("UT", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ + return new upper_tester_layer(p_type, p_param); + }; +}; // End of class upper_tester_layer_factory + diff --git a/ccsrc/framework/include/codec.hh b/ccsrc/framework/include/codec.hh new file mode 100644 index 0000000000000000000000000000000000000000..19de78593aeebac395cc444addfa62ff819d1c8f --- /dev/null +++ b/ccsrc/framework/include/codec.hh @@ -0,0 +1,61 @@ +/*! + * \file codec.hh + * \brief Header file for ITS abstract codec definition. + * \author ETSI STF525 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "params_ngap.hh" + +class OCTETSTRING; //! Declare TITAN class +class CHARSTRING; //! Declare TITAN class +class BITSTRING; //! Declare TITAN class + +/*! + * \class codec + * \brief This class provides the interface for all ITS codecs, include UT and AC codecs + * \abstract + */ +template class codec { +protected: + params_ngap *_params; //! Reference to params stack + // \todo Use smart pointer std::unique_ptr + +public: //! \publicsection + /*! + * \fn codec(); + * \brief Default constructor + * \todo Remove logs + */ + explicit codec() : _params(nullptr){}; + /*! + * \fn ~codec(); + * \brief Default destructor + * \virtual + * \todo Remove logs + */ + virtual ~codec(){}; + /*! + * \fn int encode(const TPDUEnc& msg, OCTETSTRING& data); + * \brief Encode typed message into an octet string + * \param[in] p_message The typed message to be encoded + * \param[out] p_data The encoding result + * \return 0 on success, -1 otherwise + * \pure + */ + virtual int encode(const TPDUEnc &p_message, OCTETSTRING &p_data) = 0; + /*! + * \fn int decode(const OCTETSTRING& p_, TPDUDec& p_message, params_ngap* p_params = NULL); + * \brief Encode typed message into an octet string format + * \param[in] p_data The message in its octet string + * \param[out] p_message The decoded typed message + * \return 0 on success, -1 otherwise + * \pure + */ + virtual int decode(const OCTETSTRING &p_, TPDUDec &p_message, params_ngap *p_params = NULL) = 0; +}; // End of class codec diff --git a/ccsrc/framework/include/data_event_notifier.hh b/ccsrc/framework/include/data_event_notifier.hh new file mode 100644 index 0000000000000000000000000000000000000000..3f5207a7b5599d37ab3c9f78a7b7ac216d99b926 --- /dev/null +++ b/ccsrc/framework/include/data_event_notifier.hh @@ -0,0 +1,11 @@ +#pragma once + +#include "params_ngap.hh" + +class OCTETSTRING; //! Forward declaration of TITAN class + +class data_event_notifier { +public: + virtual ~data_event_notifier() = default; + virtual void update(OCTETSTRING &p_data, params_ngap &p_params) {}; +}; // End of abstract class data_event_notifier diff --git a/ccsrc/framework/include/data_event_observer.hh b/ccsrc/framework/include/data_event_observer.hh new file mode 100644 index 0000000000000000000000000000000000000000..b677ab618b834102c61a118d2566f91d9b98e014 --- /dev/null +++ b/ccsrc/framework/include/data_event_observer.hh @@ -0,0 +1,19 @@ +#pragma once + +#include + +#include "data_event_notifier.hh" + +class OCTETSTRING; //! Forward declaration of TITAN class + +class data_event_observer { +protected: + std::vector _observers; + +public: + data_event_observer() : _observers() {}; + virtual ~data_event_observer() { _observers.clear(); }; + virtual void incoming_packet_observer_attach(data_event_notifier* p_observer) {}; + virtual void incoming_packet_observer_detach(data_event_notifier* p_observer) {}; + virtual void incoming_packet_notify(OCTETSTRING &p_data, params_ngap &p_params) {}; +}; // End of abstract class data_event_observer diff --git a/ccsrc/framework/include/params_ngap.hh b/ccsrc/framework/include/params_ngap.hh new file mode 100644 index 0000000000000000000000000000000000000000..2c3df36bfc9ed3822431c7fd492f5d14afe2f994 --- /dev/null +++ b/ccsrc/framework/include/params_ngap.hh @@ -0,0 +1,37 @@ +/*! + * \file params_ngap.hh + * \brief Header file for the parameter dictionary. + * \author ETSI TTF T033 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include +#include +#include + +#include "params.hh" + +/*! + * \class params_ngap + * \brief This class provides basic functionalities for an ITS dictionary + */ +class params_ngap : public params { +public: //! \publicsection + + /*! + * \brief Default constructor + * Create a new instance of the params_ngap class + */ + params_ngap() : params() {}; + + /*! + * \brief Default destructor + */ + virtual ~params_ngap(){}; + +}; // End of class params_ngap diff --git a/ccsrc/framework/module.mk b/ccsrc/framework/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..e03df673c242d3a04eadcdf4a26f74cdefa79cdf --- /dev/null +++ b/ccsrc/framework/module.mk @@ -0,0 +1,2 @@ +sources := src/params_ngap.cc +includes += ./include diff --git a/ccsrc/framework/src/params_ngap.cc b/ccsrc/framework/src/params_ngap.cc new file mode 100644 index 0000000000000000000000000000000000000000..643011a75ac7e9bc271f4986acb8d940d17deb8a --- /dev/null +++ b/ccsrc/framework/src/params_ngap.cc @@ -0,0 +1,17 @@ +/*! + * \file param_sits.cc + * \brief Source file for the parameter dictionary. + * \author ETSI TTF T033 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#include +#include + +#include "loggers.hh" +#include "params_ngap.hh" + + diff --git a/config.mk b/config.mk new file mode 100644 index 0000000000000000000000000000000000000000..add61d367b3f898de03f3ad84084dab0f4c326fd --- /dev/null +++ b/config.mk @@ -0,0 +1,6 @@ +TTCN3_COMPILER_OPTIONS := -b -d -e -f -g -l -L -O -P NGAP-PDU-Descriptions.NGAP-PDU -R -U none -x +TTCN3_DIR := $(HOME)/frameworks/titan/titan.core/Install +#WPCAP_DLL_PATH := /cygdrive/c/windows/system32/npcap/wpcap.dll +#NPCAP_INCLUDE := /cygdrive/c/PROGRA~1/Npcap/sdk/include +OSIP_INCLUDE=$(HOME)/frameworks/osip/include +OSIP_LIB=$(HOME)/frameworks/osip/src/osipparser2/.libs diff --git a/docs/o2.cfg b/docs/o2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e2b6f9ad1844d69c5b6d783870dc46630084f4a2 --- /dev/null +++ b/docs/o2.cfg @@ -0,0 +1,1768 @@ +# Doxyfile 1.8.1.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = "ETSI TTF T009" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "This project provides the Test System for ETSI NG 112 Conformance testing" + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./AtsImsIotDocs + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = YES + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = YES + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = YES + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = "license=@par License:\n" + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. + +EXTRACT_PACKAGE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = YES + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = YES + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../ccsrc + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.h *.hh *.hpp \ + *.c *.cc *.cpp \ + *.inl \ + *.s \ + *.md *.dox + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = TES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# style sheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = __cplusplus + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = NO + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = YES + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 50 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = YES + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/emergency-5g-iop.code-workspace b/emergency-5g-iop.code-workspace new file mode 100644 index 0000000000000000000000000000000000000000..06cab738a8a761f4d9652622395a3a620f41eea8 --- /dev/null +++ b/emergency-5g-iop.code-workspace @@ -0,0 +1,79 @@ +{ + "folders": [ + { + "path": "." + }, + { + "path": "../../frameworks/titan/titan.core" + }, + { + "path": "../emergency-iop" + } + ], + "settings": { + "files.associations": { + "memory": "cpp", + "functional": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "bitset": "cpp", + "chrono": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "cstdint": "cpp", + "deque": "cpp", + "map": "cpp", + "set": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "iterator": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "ratio": "cpp", + "regex": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "semaphore": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp", + "hash_map": "cpp" + } + } +} \ No newline at end of file diff --git a/etc/AtsIms5gIot/AtsIms5gIot.cfg b/etc/AtsIms5gIot/AtsIms5gIot.cfg new file mode 100644 index 0000000000000000000000000000000000000000..00b6d44a28f468a96cc06f52712090a346fae8b5 --- /dev/null +++ b/etc/AtsIms5gIot/AtsIms5gIot.cfg @@ -0,0 +1,121 @@ +[MODULE_PARAMETERS] +# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. + +LibIot_VxLTE_PIXITS.PX_SIP_GMA_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_GMB_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_IC_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_MM_B_PSAP_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_MW_EB_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_ML_E_LRF_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_MW_S_PSAP_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_MW_PI_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_MW_PS_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_MW_PE_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_MW_IS_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_MW_PB_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_MW_IB_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_MW_IE_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_SIP_ISC_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_DIAMETER_CX_SH_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_DIAMETER_CX_IH_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_DIAMETER_GX_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_DIAMETER_RX_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_DIAMETER_S6A_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_DIAMETER_S9_MONITORENABLED := false +LibIot_VxLTE_PIXITS.PX_DIAMETER_SH_MONITORENABLED := false + +LibIot_5GNR_PIXITS.PX_5GNR_N1N2_MONITORENABLED := true +LibIot_5GNR_PIXITS.PX_5GNR_N5_MONITORENABLED := true + +[LOGGING] +# In this section you can specify the name of the log file and the classes of events +# you want to log into the file or display on console (standard error). + +LogFile := "../logs/AtsIms5gIot/%e.%h-%r.%s" +FileMask := LOG_ALL | USER | DEBUG | MATCHING +ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING +#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE +#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE +LogSourceInfo := Stack +LogEntityName:= Yes +LogEventTypes:= Yes +#TimeStampFormat := DateTime + +[TESTPORT_PARAMETERS] +# In this section you can specify parameters that are passed to Test Ports. +#system.diameterPort.params := "DIAMETER/SCTP(debug=1,server=172.25.1.54,port=8200)" +system.diameterPort.params := "DIAMETER/SCTP_FILE/IP_OFFLINE/ETH(mac_src=8c554ac1eee0,mac_dst=8c554ac1eee1)/PCAP_FILE(file=../captures/5GRegAuthSec_deReg.pcap)" +system.ngapPort.params := "NGAP/SCTP_FILE/IP_OFFLINE/ETH(mac_src=8c554ac1eee0,mac_dst=8c554ac1eee1)/PCAP_FILE(file=../captures/5GRegAuthSec_deReg.pcap)" +system.httpPort.params := "IMS_HTTP_MONITOR(codecs=json:json_codec)/TCP_OFFLINE/IP_OFFLINE/ETH(mac_src=8c554ac1eee0,mac_dst=8c554ac1eee1)/PCAP_FILE(file=../captures/5GRegAuthSec_deReg.pcap)" +system.SIPP.params := "SIP/TCP_FILE/IP_OFFLINE/ETH(mac_src=8c554ac1eee0,mac_dst=8c554ac1eee1)/PCAP_FILE(file=../captures/5GRegAuthSec_deReg.pcap)" + +system.eaPort.params := "UT/UDP(dst_ip=10.200.60.23,dst_port=12345,src_port=12346)" + +[DEFINE] +# In this section you can create macro definitions, +# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. + +[INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[ORDERED_INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[EXTERNAL_COMMANDS] +# This section can define external commands (shell scripts) to be executed by the ETS +# whenever a control part or test case is started or terminated. + +#BeginTestCase := "" +#EndTestCase := "" +#BeginControlPart := "" +#EndControlPart := "" + +[EXECUTE] +# In this section you can specify what parts of your test suite you want to execute. +#AtsImsIot_TestControl.control + +# To perform UE emergency 5G registration to the network with USIM and establish an emergency PDU session +AtsIms5gIot_TD_REG.TD_VoNR_ECO_INT_5RG_01 +# To attempt initial emergency IMS registration via the established emergency PDU session +#AtsIms5gIot_TD_REG.TD_VoNR_ECO_INT_5RG_02 +# To perform emergency IMS registration via the established emergency PDU session +#AtsIms5gIot_TD_REG.TD_VoNR_ECO_INT_REG_01 +# To attempt initial emergency IMS registration via the established emergency PDU session +#AtsIms5gIot_TD_REG.TD_VoNR_ECO_INT_REG_02 +# To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration +#AtsIms5gIot_TD_INI.TD_VoNR_ECO_INT_INI_01 +# To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within a non-emergency registration +#AtsIms5gIot_TD_INI.TD_VoNR_ECO_INT_INI_02 +# To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment without any registration +#AtsIms5gIot_TD_INI.TD_VoNR_ECO_INT_INI_03 +# To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration +#AtsIms5gIot_TD_INI.TD_VoNR_ECO_INT_INI_04 +# To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration +#AtsIms5gIot_TD_INI.TD_VoNR_ECO_INT_INI_05 +# To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration +#AtsIms5gIot_TD_INI.TD_VoNR_ECO_INT_INI_06 +# To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration +#AtsIms5gIot_TD_INI.TD_VoNR_ECO_INT_INI_07 +# To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration +#AtsIms5gIot_TD_INI.TD_VoNR_ECO_INT_INI_08 + + +# Diameter codec validation +#AtsIms5gIot_xxx_REG.TC_VoNR_Diameter_AAR +#AtsIms5gIot_xxx_REG.TC_VoNR_Diameter_UAR + +[GROUPS] +# In this section you can specify groups of hosts. These groups can be used inside the +# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts. + +[COMPONENTS] +# This section consists of rules restricting the location of created PTCs. + +[MAIN_CONTROLLER] +# The options herein control the behavior of MC. +KillTimer := 10.0 +LocalAddress := 127.0.0.1 +TCPPort := 12000 +NumHCs := 1 diff --git a/install.sh b/install.sh new file mode 100755 index 0000000000000000000000000000000000000000..0eb23018ba69c09adf6f0b7231541df1d7dfbbb8 --- /dev/null +++ b/install.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +#set -e +set -vx + +BASE_PATH=`pwd` + +#git checkout devel +#git submodule update --init --recursive --remote + +if [ ! -d ./titan-test-system-framework ] +then + git clone --recurse-submodules --branch devel https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git + cd ./titan-test-system-framework +else + cd ./titan-test-system-framework + git checkout devel +fi +cd ./ttcn/LibHttp +ln -sf module_ims.mk module.mk + +cd $BASE_PATH/ttcn/LibSip +git checkout TTF016 + +cd $BASE_PATH/ttcn/LibIms +git checkout TTF006 + +cd $BASE_PATH +ttcn/patch_lib_ats_ims_iot +rm ./ttcn/LibAtsImsIot/module.mk +ln -f ./ttcn/patch_lib_ats_ims_iot/module.mk ./ttcn/LibAtsImsIot/module.mk +ln -f ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/module.mk +ln -f ./ttcn/patch_lib_ims_titan/module.mk ./ttcn/LibIms/module.mk +ln -f ./ttcn/patch_lib_sip_titan/module.mk ./ttcn/LibSip/module.mk +ln -f ./ttcn/patch_lib_diameter_titan/module.mk ./ttcn/LibDiameter/module.mk +ln -f ./ttcn/patch_lib_msrp_titan/module.mk ./ttcn/LibMsrp/module.mk +rm ./ttcn/LibEmcom/LibNg112/module.mk +ln -f ./ttcn/patch_lib_ng112_titan/ttcn/module.mk ./ttcn/LibEmcom/LibNg112/module.mk +ln -f ./ttcn/patch_lib_iot_titan/module.mk ./ttcn/LibIot/module.mk +ln -f ./ttcn/patch_lib_config_and_trigger_titan/module.mk ./ttcn/LibIms_ConfigAndTrigger/module.mk + +cd ./ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src +git apply ../../../../patch_abstract_socket/Abstract_Socket.hh.patch +git apply ../../../../patch_abstract_socket/Abstract_Socket.cc.patch +cd $BASE_PATH + +exit 0 diff --git a/msc_scripts/TD_VoNR_ECO_INT_5DR_01.png b/msc_scripts/TD_VoNR_ECO_INT_5DR_01.png new file mode 100644 index 0000000000000000000000000000000000000000..f8920d71e3de8492a437fccee63e0cc1106ec626 Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_5DR_01.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_5DR_01.txt b/msc_scripts/TD_VoNR_ECO_INT_5DR_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..aa2673d205a6f70ec10df3d28a95b06a3bf27af8 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_5DR_01.txt @@ -0,0 +1,41 @@ +@startuml "TD_VoNR_ECO_INT_5DR_01.png" +!include etsi-style.iuml +!pragma teoz true +' +'Figure : 5G emergency deregistration and Release of the Emergency PDU session +' +''title Figure : 5G emergency deregistration and Release of the Emergency PDU session +' +participant "UE A" +box "GNB" #LightBlue +participant "GNB" +end box +box "5GC A" #LightBlue + participant AMF + participant UPF +end box +box "IMS A" #LightBlue + participant "P-CSCF" +end box +' +rnote right "UE A" : N1 +& rnote right "GNB" : N2 +& rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 + +' +rnote over "UE A", AMF #FFAAAA: 5G De-registration to 5GC +"UE A" --> "GNB" : +&"GNB" -> "AMF" : DEREGISTRATION_REQUEST +'auth +'security +"GNB" <- "AMF" : DEREGISTRATION_ACCEPT \n if DEREGISTER_TYPE!=SWITCH_OFF +&"UE A" <-- "GNB" : + +' +' +' +"UE A" <--> "P-CSCF" : PDU session's and signaling connection released + +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_INT_5DR_02.png b/msc_scripts/TD_VoNR_ECO_INT_5DR_02.png new file mode 100644 index 0000000000000000000000000000000000000000..020046e9682ea710da70dc6dd2863de9a9b4096f Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_5DR_02.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_5DR_02.txt b/msc_scripts/TD_VoNR_ECO_INT_5DR_02.txt new file mode 100644 index 0000000000000000000000000000000000000000..06a3f850e6a454bb3d8df324d99f4246f5f09c81 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_5DR_02.txt @@ -0,0 +1,80 @@ +@startuml "TD_VoNR_ECO_INT_5DR_02.png" +!include etsi-style.iuml +!pragma teoz true +' +'Figure : 5G emergency deregistration with Previously Established Emergency Registration & Emergency PDU session +' +''title Figure : 5G emergency deregistration with Previously Established Emergency Registration & Emergency PDU session +' +participant "UE A" +box "GNB" #LightBlue +participant "GNB" +end box +box "5GC A" #LightBlue + participant AMF + participant UPF + participant PCF +end box +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" + participant "IBCF" + participant "BGCF" +end box +participant "PSAP" +' +rnote right "UE A" : N1 +& rnote right "GNB" : N2 +& rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote right "PCF" : N5 or Rx +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mm\nMx\nMi +& rnote left "IBCF" : \nMx\n +& rnote right "IBCF" : Ici +& rnote left "BGCF" : \n\nMi +& rnote left "PSAP" : Mm\n\n +' +"UE A" <---> "PSAP" : Active emergency session, media exchange +rnote over "UE A" #FFAAAA : De-registration triggered +' +"UE A" -> "P-CSCF" : BYE +"P-CSCF" -> "PCF" : STR or \nPA_Delete_req +"PCF" -> "P-CSCF" : STA or \nPA_Delete_res +&"P-CSCF" -> "E-CSCF" : BYE +rnote over "P-CSCF","E-CSCF" #FFAAAA: Termination of Emergency session +alt PSAP in IMS A network (option 1) +"E-CSCF" -> "PSAP" : BYE +else PSAP not in IMS A network (option 2)\n +"E-CSCF" -> "IBCF" : BYE +&"IBCF" --> "PSAP" : BYE +else PSAP in PSTN network (option 3)\n +"E-CSCF" -> "BGCF" : BYE +&"BGCF" --> "PSAP" : +end +alt PSAP in IMS A network (option 1) +"PSAP" -> "E-CSCF" : 200 OK +else PSAP not in IMS A network (option 2)\n +"PSAP" --> "IBCF" : 200 OK +&"IBCF" -> "E-CSCF" : 200 OK +else PSAP in PSTN network (option 3)\n +"PSAP" --> "BGCF" : +&"BGCF" -> "E-CSCF" : 200 OK +end +"E-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UE A" : 200 OK + +"AMF" -> "GNB" : PDU Session Modification Command - IMS voice +&"UE A" <-- "GNB" : +"UE A" --> "GNB" : +&"GNB" -> "AMF" : PDU Session Modification Complete - IMS voice + +"UE A" --> "GNB" : +&"GNB" -> "AMF" : DEREGISTRATION_REQUEST +' +"GNB" <- "AMF" : DEREGISTRATION_ACCEPT \n if DEREGISTER_TYPE!=SWITCH_OFF +&"UE A" <-- "GNB" : +rnote over "UE A", UPF #FFAAAA: Removal of Emergency session + +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_INT_5RG_01.png b/msc_scripts/TD_VoNR_ECO_INT_5RG_01.png new file mode 100644 index 0000000000000000000000000000000000000000..aaba12cecd29dd46a838dffaf9b288231d92c726 Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_5RG_01.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_5RG_01.txt b/msc_scripts/TD_VoNR_ECO_INT_5RG_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..0bc869ce601cae726f72c9eded85bbd227e3d623 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_5RG_01.txt @@ -0,0 +1,49 @@ +@startuml "TD_VoNR_ECO_INT_5RG_01.png" +!include etsi-style.iuml +!pragma teoz true +' +'Figure : 5G emergency registration with USIM and Establishment of the Emergency PDU session +' +''title Figure : 5G emergency registration and Establishment of the Emergency PDU session +' +participant "UE A" +box "GNB" #LightBlue +participant "GNB" +end box +box "5GC A" #LightBlue + participant AMF + participant UPF + participant PCF +end box +box "IMS A" #LightBlue + participant "P-CSCF" +end box +' +rnote right "UE A" : N1 +& rnote right "GNB" : N2 +& rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote right "PCF" : N5 +' +rnote over "UE A", AMF #FFAAAA: 5G Registration to 5GC +"UE A" --> "GNB" : +&"GNB" -> "AMF" : REGISTRATION_REQUEST - emergency \n (5GS mobile identity = 5G-GUTI or SUCI) +rnote over "UE A", AMF #AAAAAA: Authentication/Security + +"GNB" <- "AMF" : REGISTRATION_ACCEPT +&"UE A" <-- "GNB" : +"UE A" --> "GNB" : +&"GNB" -> "AMF" : REGISTRATION_COMPLETE +rnote over "UE A", AMF #FFAAAA: Establish Emergency PDU Session +' +"UE A" --> "GNB" : +&"GNB" -> "AMF" : PDU Session Establishment Request - emergency +' +rnote over "AMF", "PCF" #FFAAAA: Policy Decision, session establishment +' +"AMF" -> "GNB" : PDU Session Establishment Accept +&"UE A" <-- "GNB" : +"UE A" <--> "P-CSCF" : Emergency session possible over Emergency PDU session + +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_INT_5RG_02.png b/msc_scripts/TD_VoNR_ECO_INT_5RG_02.png new file mode 100644 index 0000000000000000000000000000000000000000..e3aa952c91ac40ca57920f08fdb2493af35304da Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_5RG_02.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_5RG_02.txt b/msc_scripts/TD_VoNR_ECO_INT_5RG_02.txt new file mode 100644 index 0000000000000000000000000000000000000000..1a90fba85af9087af13d4a000671412330e7f900 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_5RG_02.txt @@ -0,0 +1,49 @@ +@startuml "TD_VoNR_ECO_INT_5RG_02.png" +!include etsi-style.iuml +!pragma teoz true +' +'Figure : 5G emergency registration without USIM and Establishment of the Emergency PDU session +' +''title Figure : 5G emergency registration and Establishment of the Emergency PDU session +' +participant "UE A" +box "GNB" #LightBlue +participant "GNB" +end box +box "5GC A" #LightBlue + participant AMF + participant UPF + participant PCF +end box +box "IMS A" #LightBlue + participant "P-CSCF" +end box +' +rnote right "UE A" : N1 +& rnote right "GNB" : N2 +& rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote right "PCF" : N5 +' +rnote over "UE A", AMF #FFAAAA: 5G Registration to 5GC +"UE A" --> "GNB" : +&"GNB" -> "AMF" : REGISTRATION_REQUEST - emergency \n (5GS mobile identity = PEI) +rnote over "UE A", AMF #AAAAAA: optional Authentication/Security + +"GNB" <- "AMF" : REGISTRATION_ACCEPT +&"UE A" <-- "GNB" : +"UE A" --> "GNB" : +&"GNB" -> "AMF" : REGISTRATION_COMPLETE +rnote over "UE A", AMF #FFAAAA: Establish Emergency PDU Session +' +"UE A" --> "GNB" : +&"GNB" -> "AMF" : PDU Session Establishment Request - emergency +' +rnote over "AMF", "PCF" #FFAAAA: Policy Decision, session establishment +' +"AMF" -> "GNB" : PDU Session Establishment Accept +&"UE A" <-- "GNB" : +"UE A" <--> "P-CSCF" : Emergency session possible over Emergency PDU session + +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_01.png b/msc_scripts/TD_VoNR_ECO_INT_INI_01.png new file mode 100644 index 0000000000000000000000000000000000000000..93ec2f72d2203967ce64bfe0f56b6eaf54b60cbd Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_INI_01.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_01.txt b/msc_scripts/TD_VoNR_ECO_INT_INI_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..d695cc49cc7a4b3ec0173fa4bc3cca3ec40b24d4 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_INI_01.txt @@ -0,0 +1,76 @@ +@startuml "TD_VoNR_ECO_INT_INI_01.png" + + +!include etsi-style.iuml +!pragma teoz true +' +'Figure: SIP Session Establishment - Originating Leg +' +''title Figure : SIP Session Establishment - Originating Leg +' + +participant "UE A" + +box "5GC A" #LightBlue + participant "AMF" + participant "UPF" + participant "PCF" +end box + +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" +end box + +participant "PSAP" + + rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote left "P-CSCF" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mm +& rnote right "PCF" : N5 (or Rx) +& rnote left "PSAP" : Mm + + + +' +"UE A" -> "UPF" : INVITE +&"UPF" -> "P-CSCF" : INVITE +"P-CSCF" -> "PCF" : PA_Create_req (or AAR) +rnote over "PCF", UPF #FFAAAA: Request policy for the emergency call + +"PCF" -> "P-CSCF" : PA_Create_res (or AAA) +"PCF" -> "P-CSCF" : PA_Notify_req (or RAR) +"P-CSCF" -> "PCF" : PA_Notify_res (or RAA) +"P-CSCF" -> "E-CSCF" : INVITE +& "E-CSCF" -> "PSAP" : INVITE +"PSAP" -> "E-CSCF" : 183 Session Progress\n(SDP answer) +& "E-CSCF" -> "P-CSCF" : 183 Session Progress\n(SDP answer) +"P-CSCF" -> "PCF" : PA_Update_req (or AAR) +"P-CSCF" -> "UPF" : 183 Session Progress\n(SDP answer) +&"UPF" -> "UE A" : 183 Session Progress\n(SDP answer) + +"AMF" -> "UE A" : PDU Session Modification +rnote over "UE A", "AMF" #FFAAAA: Establish a dedicated QoS Flow +"UE A" -> "AMF" : PDU Session Modification Complete +& "PCF" -> "P-CSCF" : PA_Update_res (or AAA) +'"AMF" -> "UE A" : 183 Session Progress\n(SDP answer) +"UE A" <--> "PSAP" : Early Media +"PSAP" -> "E-CSCF" : 180 Ringing +& "E-CSCF" -> "P-CSCF" : 180 Ringing +&"P-CSCF" -> "UPF" : 180 Ringing +&"UPF" -> "UE A" : 180 Ringing + +"PSAP" -> "E-CSCF" : 200 OK +& "E-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UPF" : 200 OK +& "UPF" -> "UE A" : 200 OK + +"UE A" -> "UPF" : ACK +&"UPF" -> "P-CSCF" : ACK +& "P-CSCF" -> "E-CSCF" : ACK +& "E-CSCF" -> "PSAP" : ACK +"UE A" <--> "PSAP" : Media Exchange +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_04.png b/msc_scripts/TD_VoNR_ECO_INT_INI_04.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb4aec99451b4efc07d58b68c339a3793d361c0 Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_INI_04.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_04.txt b/msc_scripts/TD_VoNR_ECO_INT_INI_04.txt new file mode 100644 index 0000000000000000000000000000000000000000..29684b3c7f8afc34b0be666f62f9eba844e92ef6 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_INI_04.txt @@ -0,0 +1,85 @@ +@startuml "TD_VoNR_ECO_INT_INI_04.png" + + + +!include etsi-style.iuml +!pragma teoz true +' +'Figure: SIP Session Establishment - Originating Leg +' +''title Figure : SIP Session Establishment - Originating Leg +' + +participant "UE A" + +box "5GC A" #LightBlue + participant "AMF" + participant "UPF" + participant "PCF" +end box + +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" + participant "LRF" +end box + +participant "PSAP" + + rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote left "P-CSCF" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mm, Ml +& rnote right "PCF" : N5 (or Rx) +& rnote left "PSAP" : Mm +& rnote left "LRF" : Ml + + +' +"UE A" -> "UPF" : INVITE +&"UPF" -> "P-CSCF" : INVITE +"P-CSCF" -> "PCF" : PA_Create_res (or AAR) +rnote over "PCF", UPF #FFAAAA: Request policy for the emergency call + +"PCF" -> "P-CSCF" : PA_Create_res (or AAA) +"PCF" -> "P-CSCF" : PA_Notify_req (or RAR) +"P-CSCF" -> "PCF" : PA_Notify_res (or RAA) +"P-CSCF" -> "E-CSCF" : INVITE +"E-CSCF" -> "LRF" : INVITE + "LRF" -> "E-CSCF" : 3xx Any\n(Contact header with LRF provided SIP_URI) + "E-CSCF" -> "PSAP" : INVITE\n(Route header with LRF provided SIP_URI) + +"PSAP" -> "E-CSCF" : 183 Session Progress\n(SDP answer) +& "E-CSCF" -> "P-CSCF" : 183 Session Progress\n(SDP answer) +"P-CSCF" -> "PCF" : PA_Update_req (or AAR) +"P-CSCF" -> "UPF" : 183 Session Progress\n(SDP answer) +&"UPF" -> "UE A" : 183 Session Progress\n(SDP answer) + +"AMF" -> "UE A" : PDU Session Modification +rnote over "UE A", "AMF" #FFAAAA: Establish a dedicated QoS Flow +"UE A" -> "AMF" : PDU Session Modification Complete +& "PCF" -> "P-CSCF" : PA_Update_res (or AAA) +'"AMF" -> "UE A" : 183 Session Progress\n(SDP answer) +"UE A" <--> "PSAP" : Early Media +"PSAP" -> "E-CSCF" : 180 Ringing +& "E-CSCF" -> "P-CSCF" : 180 Ringing +&"P-CSCF" -> "UPF" : 180 Ringing +&"UPF" -> "UE A" : 180 Ringing +"PSAP" -> "E-CSCF" : 200 OK +& "E-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UPF" : 200 OK +& "UPF" -> "UE A" : 200 OK + +"UE A" -> "UPF" : ACK +&"UPF" -> "P-CSCF" : ACK +& "P-CSCF" -> "E-CSCF" : ACK +& "E-CSCF" -> "PSAP" : ACK +"UE A" <--> "PSAP" : Media Exchange +@enduml + + + + + diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_05.png b/msc_scripts/TD_VoNR_ECO_INT_INI_05.png new file mode 100644 index 0000000000000000000000000000000000000000..08ddb93c0ada6574262df45a30065dc8e247971e Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_INI_05.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_05.txt b/msc_scripts/TD_VoNR_ECO_INT_INI_05.txt new file mode 100644 index 0000000000000000000000000000000000000000..b03fd6020964418a6c2e45b982508cc9b373ea90 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_INI_05.txt @@ -0,0 +1,133 @@ +@startuml "TD_VoNR_ECO_INT_INI_05" + + +!include etsi-style.iuml +!pragma teoz true +' +'Figure: Emergency Session Establishment, PSAP in other IM CN subsystem +' +''title Figure : Emergency Session Establishment, PSAP in other IM CN subsystem +' + + +participant "UE A" + +box "5GC A" #LightBlue + participant "AMF" + participant "UPF" + participant "PCF" +end box + +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" + participant "IBCF" +end box + +participant "PSAP" + + + + + + rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote left "P-CSCF" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mx +& rnote right "PCF" : N5 (or Rx) +& rnote left "PSAP" : Mm + +& rnote right "IBCF" : Ici + + + +' +"UE A" -> "UPF" : INVITE +&"UPF" -> "P-CSCF" : INVITE + +"P-CSCF" -> "PCF" : PA_Create_req (or AAR) +rnote over "PCF", UPF #FFAAAA: Request policy for the emergency call + +"PCF" -> "P-CSCF" : PA_Create_res (or AAA) +"PCF" -> "P-CSCF" : PA_Notify_req (or RAR) +"P-CSCF" -> "PCF" : PA_Notify_res (or RAA) +"P-CSCF" -> "E-CSCF" : INVITE +rnote over "E-CSCF", PSAP #FFAAAA: PSAP in other IM network + "E-CSCF" -> "IBCF" : INVITE +& "IBCF" -> "PSAP" : INVITE +"PSAP" -> "IBCF" : 183 Session Progress\n(SDP answer) +& "IBCF" -> "E-CSCF" : 183 Session Progress\n(SDP answer) +& "E-CSCF" -> "P-CSCF" : 183 Session Progress\n(SDP answer) +"P-CSCF" -> "PCF" : PA_Update_req (or AAR) +"P-CSCF" -> "UPF" : 183 Session Progress\n(SDP answer) +&"UPF" -> "UE A" : 183 Session Progress\n(SDP answer) + +"AMF" -> "UE A" : PDU Session Modification +rnote over "UE A", "AMF" #FFAAAA: Establish a dedicated QoS Flow +"UE A" -> "AMF" : PDU Session Modification Complete +& "PCF" -> "P-CSCF" : PA_Update_res (or AAA) +'"AMF" -> "UE A" : 183 Session Progress\n(SDP answer) +"UE A" <--> "PSAP" : Early Media +"PSAP" -> "E-CSCF" : 180 Ringing +& "E-CSCF" -> "P-CSCF" : 180 Ringing +&"P-CSCF" -> "UPF" : 180 Ringing +&"UPF" -> "UE A" : 180 Ringing +"PSAP" -> "E-CSCF" : 200 OK +& "E-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UPF" : 200 OK +& "UPF" -> "UE A" : 200 OK + +"UE A" -> "UPF" : ACK +&"UPF" -> "P-CSCF" : ACK + +& "P-CSCF" -> "E-CSCF" : ACK +& "E-CSCF" -> "PSAP" : ACK +"UE A" <--> "PSAP" : Media Exchange +@enduml + + + + +----------------- +' +"UE A" -> "P-CSCF" : INVITE +"P-CSCF" -> "PCRF" : AAR +rnote over "PCRF", PGw #FFAAAA: Policy decision +"PCRF" -> "PGw" : RAR +rnote over "PCRF", PGw #FFAAAA: Installation of the Session Bearer +"PGw" -> "PCRF" : RAA +& "PCRF" -> "P-CSCF" : AAA +"PGw" -> "PCRF" : CCR +& "PCRF" -> "P-CSCF" : RAR + "P-CSCF" -> "PCRF" : RAA +& "PCRF" -> "PGw" : CCA +& "P-CSCF" -> "E-CSCF" : INVITE +rnote over "E-CSCF", PSAP #FFAAAA: PSAP in other IM network + "E-CSCF" -> "IBCF" : INVITE +& "IBCF" -> "PSAP" : INVITE +"PSAP" -> "IBCF" : 183 Session Progress\n(SDP answer) +& "IBCF" -> "E-CSCF" : 183 Session Progress\n(SDP answer) +& "E-CSCF" -> "P-CSCF" : 183 Session Progress\n(SDP answer) +& "P-CSCF" -> "PCRF" : AAR +& "PCRF" -> "PGw" : RAR +rnote over "PCRF", PGw #FFAAAA: Modification of the Session Bearer +"PGw" -> "PCRF" : RAA +& "PCRF" -> "P-CSCF" : AAA +"P-CSCF" -> "UE A" : 183 Session Progress\n(SDP answer) +"UE A" <--> "PSAP" : Early Media +"PSAP" -> "IBCF" : 180 Ringing +& "IBCF" -> "E-CSCF" : 180 Ringing +& "E-CSCF" -> "P-CSCF" : 180 Ringing +&"P-CSCF" -> "UE A" : 180 Ringing +"PSAP" -> "IBCF" : 200 OK +& "IBCF" -> "E-CSCF" : 200 OK +& "E-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UE A" : 200 OK +"UE A" -> "P-CSCF" : ACK +& "P-CSCF" -> "E-CSCF" : ACK +& "E-CSCF" -> "IBCF" : ACK +& "IBCF" -> "PSAP" : ACK +"UE A" <--> "PSAP" : Media Exchange +@enduml diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_06.png b/msc_scripts/TD_VoNR_ECO_INT_INI_06.png new file mode 100644 index 0000000000000000000000000000000000000000..bd8f19569da4924b363b330a35afe3c2266d50b8 Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_INI_06.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_06.txt b/msc_scripts/TD_VoNR_ECO_INT_INI_06.txt new file mode 100644 index 0000000000000000000000000000000000000000..42ee4a7c56c0beda9ca9f3d032bb9b8096d7fde9 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_INI_06.txt @@ -0,0 +1,91 @@ +@startuml "TD_VoNR_ECO_INT_INI_06.png" + + +!include etsi-style.iuml +!pragma teoz true +' +'Figure: Emergency Session Establishment with LRF, PSAP in other IM CN subsystem +' +''title Figure : Emergency Session Establishment with LRF, PSAP in other IM CN subsystem +' + + +participant "UE A" + +box "5GC A" #LightBlue + participant "AMF" + participant "UPF" + participant "PCF" +end box + +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" + participant "LRF" + participant "IBCF" +end box + +participant "PSAP" + + + rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote left "P-CSCF" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mm, Ml +& rnote right "PCF" : N5 (or Rx) +& rnote left "PSAP" : Mm +& rnote left "LRF" : Ml +& rnote left "IBCF" : Mx +& rnote right "IBCF" : Ici + + +' +"UE A" -> "UPF" : INVITE +&"UPF" -> "P-CSCF" : INVITE + +"P-CSCF" -> "PCF" : PA_Create_req (or AAR) +rnote over "PCF", UPF #FFAAAA: Request policy for the emergency call + +"PCF" -> "P-CSCF" : PA_Create_res (or AAA) +"PCF" -> "P-CSCF" : PA_Notify_req (or RAR) +"P-CSCF" -> "PCF" : PA_Notify_res (or RAA) +"P-CSCF" -> "E-CSCF" : INVITE + +rnote over "E-CSCF", LRF #FFAAAA: Network operator determined LRF use + "E-CSCF" -> "LRF" : INVITE + "LRF" -> "E-CSCF" : 3xx Any\n(Contact header with LRF provided SIP_URI) +rnote over "E-CSCF", PSAP #FFAAAA: PSAP in other IM network + "E-CSCF" -> "IBCF" : INVITE\n(Route header with LRF provided SIP_URI) +& "IBCF" -> "PSAP" : INVITE +"PSAP" -> "IBCF" : 183 Session Progress\n(SDP answer) +& "IBCF" -> "E-CSCF" : 183 Session Progress\n(SDP answer) +& "E-CSCF" -> "P-CSCF" : 183 Session Progress\n(SDP answer) +"P-CSCF" -> "PCF" : PA_Update_req (or AAR) +"P-CSCF" -> "UPF" : 183 Session Progress\n(SDP answer) +&"UPF" -> "UE A" : 183 Session Progress\n(SDP answer) + +"AMF" -> "UE A" : PDU Session Modification +rnote over "UE A", "AMF" #FFAAAA: Establish a dedicated QoS Flow +"UE A" -> "AMF" : PDU Session Modification Complete +& "PCF" -> "P-CSCF" : PA_Create_res (or AAA) +'"AMF" -> "UE A" : 183 Session Progress\n(SDP answer) +"UE A" <--> "PSAP" : Early Media +"PSAP" -> "E-CSCF" : 180 Ringing +& "E-CSCF" -> "P-CSCF" : 180 Ringing +&"P-CSCF" -> "UPF" : 180 Ringing +&"UPF" -> "UE A" : 180 Ringing + +"PSAP" -> "E-CSCF" : 200 OK +& "E-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UPF" : 200 OK +&"UPF" -> "UE A" : 200 OK + +"UE A" -> "UPF" : ACK +&"UPF" -> "P-CSCF" : ACK +& "P-CSCF" -> "E-CSCF" : ACK +& "E-CSCF" -> "PSAP" : ACK +"UE A" <--> "PSAP" : Media Exchange +@enduml + diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_07.png b/msc_scripts/TD_VoNR_ECO_INT_INI_07.png new file mode 100644 index 0000000000000000000000000000000000000000..626f07b9114e523dc2e2a55bd64b0206dd5daeda Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_INI_07.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_07.txt b/msc_scripts/TD_VoNR_ECO_INT_INI_07.txt new file mode 100644 index 0000000000000000000000000000000000000000..a49a2169ac40a5388351b241c2033e67754de8dd --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_INI_07.txt @@ -0,0 +1,85 @@ +@startuml "TD_VoNR_ECO_INT_INI_07.png" + + +!include etsi-style.iuml +!pragma teoz true +' +'Figure: Emergency Session Establishment, PSAP in the PSTN +' +''title Figure : Emergency Session Establishment, PSAP in the PSTN +' + +participant "UE A" + +box "5GC A" #LightBlue + participant "AMF" + participant "UPF" + participant "PCF" +end box + +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" + participant "BGCF" +end box + +participant "PSAP" + + + + + + + rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote left "P-CSCF" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mi +& rnote right "PCF" : N5 (or Rx) +& rnote left "PSAP" : Mm + + +' +"UE A" -> "UPF" : INVITE +&"UPF" -> "P-CSCF" : INVITE +"P-CSCF" -> "PCF" : PA_Create_req (or AAR) +rnote over "PCF", UPF #FFAAAA: Request policy for the emergency call + +"PCF" -> "P-CSCF" : PA_Create_res (or AAA) +"PCF" -> "P-CSCF" : PA_Notify_req (or RAR) +"P-CSCF" -> "PCF" : PA_Notify_res (or RAA) +"P-CSCF" -> "E-CSCF" : INVITE +rnote over "E-CSCF", PSAP #FFAAAA: PSAP in PSTN + "E-CSCF" -> "BGCF" : INVITE +& "BGCF" -> "PSAP" : INVITE +"PSAP" -> "BGCF" : 183 Session Progress\n(SDP answer) +& "BGCF" -> "E-CSCF" : 183 Session Progress\n(SDP answer) +& "E-CSCF" -> "P-CSCF" : 183 Session Progress\n(SDP answer) +"P-CSCF" -> "PCF" : PA_Update_req (or AAR) +"P-CSCF" -> "UPF" : 183 Session Progress\n(SDP answer) +&"UPF" -> "UE A" : 183 Session Progress\n(SDP answer) +"AMF" -> "UE A" : PDU Session Modification +rnote over "UE A", "AMF" #FFAAAA: Establish a dedicated QoS Flow +"UE A" -> "AMF" : PDU Session Modification Complete +& "PCF" -> "P-CSCF" : PA_Create_res (or AAA) +'"AMF" -> "UE A" : 183 Session Progress\n(SDP answer) +"UE A" <--> "PSAP" : Early Media +"PSAP" -> "E-CSCF" : 180 Ringing +& "E-CSCF" -> "P-CSCF" : 180 Ringing +&"P-CSCF" -> "UPF" : 180 Ringing +&"UPF" -> "UE A" : 180 Ringing + +"PSAP" -> "E-CSCF" : 200 OK +& "E-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UPF" : 200 OK +& "UPF" -> "UE A" : 200 OK + +"UE A" -> "UPF" : ACK +&"UPF" -> "P-CSCF" : ACK +& "P-CSCF" -> "E-CSCF" : ACK +& "E-CSCF" -> "PSAP" : ACK +"UE A" <--> "PSAP" : Media Exchange +@enduml + + diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_08.png b/msc_scripts/TD_VoNR_ECO_INT_INI_08.png new file mode 100644 index 0000000000000000000000000000000000000000..59cdc1c5c85e3a4fff9439c5ba7427db6cb59c5f Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_INI_08.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_08.txt b/msc_scripts/TD_VoNR_ECO_INT_INI_08.txt new file mode 100644 index 0000000000000000000000000000000000000000..5767a7f066d38259d25aa521ff960122bc33559f --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_INI_08.txt @@ -0,0 +1,90 @@ +@startuml "TD_VoNR_ECO_INT_INI_08.png" + + +!include etsi-style.iuml +!pragma teoz true +' +'Figure: Emergency Session Establishment with LRF, PSAP in the PSTN +' +''title Figure : Emergency Session Establishment with LRF, PSAP in the PSTN +' + +participant "UE A" + +box "5GC A" #LightBlue + participant "AMF" + participant "UPF" + participant "PCF" +end box + +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" + participant "LRF" + participant "BGCF" +end box + +participant "PSAP" + + + + + + rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote left "P-CSCF" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Ml, Mi +& rnote right "PCF" : N5 (or Rx) +& rnote left "PSAP" : Mm +& rnote left "LRF" : Ml +& rnote left "BGCF" : Mi + + +' +"UE A" -> "UPF" : INVITE +&"UPF" -> "P-CSCF" : INVITE + +"P-CSCF" -> "PCF" : PA_Create_req (or AAR) +rnote over "PCF", UPF #FFAAAA: Request policy for the emergency call + +"PCF" -> "P-CSCF" : PA_Create_res (or AAA) +"PCF" -> "P-CSCF" : PA_Notify_req (or RAR) +"P-CSCF" -> "PCF" : PA_Notify_res (or RAA) +"P-CSCF" -> "E-CSCF" : INVITE + +rnote over "E-CSCF", LRF #FFAAAA: Network operator determined LRF use + "E-CSCF" -> "LRF" : INVITE + "LRF" -> "E-CSCF" : 3xx Any\n(Contact header with LRF provided SIP_URI) +rnote over "E-CSCF", PSAP #FFAAAA: PSAP in PSTN + "E-CSCF" -> "BGCF" : INVITE\n(Route header with LRF provided SIP_URI) +& "BGCF" -> "PSAP" : INVITE +"PSAP" -> "BGCF" : 183 Session Progress\n(SDP answer) +& "BGCF" -> "E-CSCF" : 183 Session Progress\n(SDP answer) +& "E-CSCF" -> "P-CSCF" : 183 Session Progress\n(SDP answer) +"P-CSCF" -> "PCF" : PA_Create_req (or AAR) +"P-CSCF" -> "UPF" : 183 Session Progress\n(SDP answer) +&"UPF" -> "UE A" : 183 Session Progress\n(SDP answer) +"AMF" -> "UE A" : PDU Session Modification +rnote over "UE A", "AMF" #FFAAAA: Establish a dedicated QoS Flow +"UE A" -> "AMF" : PDU Session Modification Complete +& "PCF" -> "P-CSCF" : PA_Create_res (or AAA) +'"AMF" -> "UE A" : 183 Session Progress\n(SDP answer) +"UE A" <--> "PSAP" : Early Media +"PSAP" -> "E-CSCF" : 180 Ringing +& "E-CSCF" -> "P-CSCF" : 180 Ringing +&"P-CSCF" -> "UPF" : 180 Ringing +&"UPF" -> "UE A" : 180 Ringing + +"PSAP" -> "E-CSCF" : 200 OK +& "E-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UPF" : 200 OK +& "UPF" -> "UE A" : 200 OK +"UE A" -> "UPF" : ACK +&"UPF" -> "P-CSCF" : ACK +& "P-CSCF" -> "E-CSCF" : ACK +& "E-CSCF" -> "PSAP" : ACK +"UE A" <--> "PSAP" : Media Exchange +@enduml + diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_09.png b/msc_scripts/TD_VoNR_ECO_INT_INI_09.png new file mode 100644 index 0000000000000000000000000000000000000000..47b17f4539dffdee53c306d6b55743ffc712fc70 Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_INI_09.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_09.txt b/msc_scripts/TD_VoNR_ECO_INT_INI_09.txt new file mode 100644 index 0000000000000000000000000000000000000000..bfe51324d5d86c13eeabcfae91b6dd546c15a97e --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_INI_09.txt @@ -0,0 +1,63 @@ + @startuml "TD_VoNR_ECO_INT_INI_09.png" + + +!include etsi-style.iuml +!pragma teoz true +' +'Figure: Emergency Session Establishment, UE calling PSAP over AS with non-emergency registration +' +''title Figure : Emergency Session Establishment, UE calling PSAP over AS with non-emergency registration +' +participant "UE A" +'box "EPC A" #LightBlue +' participant PGw +' participant "PCRF" +'end box +box "IMS A" #LightBlue + participant "AS" + participant "S-CSCF" + participant "E-CSCF" +end box + +participant "PSAP" + +rnote right "UE A" : Gm\nN1/N2 +& rnote right "AS" : ISC +& rnote right "S-CSCF" : Mw +& rnote right "E-CSCF" : Mm + +' +"UE A" --> "AS" : Emergency +& "AS" -> "S-CSCF" : INVITE +'"S-CSCF" -> "PCRF" : AAR +'rnote over "PCRF", PGw #FFAAAA: Policy decision +'"PCRF" -> "PGw" : RAR +'rnote over "PCRF", PGw #FFAAAA: Installation of the Session Bearer +'"PGw" -> "PCRF" : RAA +'& "PCRF" -> "S-CSCF" : AAA +'"PGw" -> "PCRF" : CCR +'& "PCRF" -> "S-CSCF" : RAR +' "S-CSCF" -> "PCRF" : RAA +'& "PCRF" -> "PGw" : CCA + "S-CSCF" -> "E-CSCF" : INVITE +& "E-CSCF" -> "PSAP" : INVITE +"PSAP" -> "E-CSCF" : 183 Session Progress\n(SDP answer) +& "E-CSCF" -> "S-CSCF" : 183 Session Progress\n(SDP answer) +'& "S-CSCF" -> "PCRF" : AAR +'& "PCRF" -> "PGw" : RAR +'rnote over "PCRF", PGw #FFAAAA: Modification of the Session Bearer +'"PGw" -> "PCRF" : RAA +'& "PCRF" -> "S-CSCF" : AAA +"S-CSCF" -> "UE A" : 183 Session Progress\n(SDP answer) +"UE A" <--> "PSAP" : Early Media +"PSAP" -> "E-CSCF" : 180 Ringing +& "E-CSCF" -> "S-CSCF" : 180 Ringing +&"S-CSCF" -> "UE A" : 180 Ringing +"PSAP" -> "E-CSCF" : 200 OK +& "E-CSCF" -> "S-CSCF" : 200 OK +& "S-CSCF" -> "UE A" : 200 OK +"UE A" -> "S-CSCF" : ACK +& "S-CSCF" -> "E-CSCF" : ACK +& "E-CSCF" -> "PSAP" : ACK +"UE A" <--> "PSAP" : Media Exchange +@enduml diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_10.png b/msc_scripts/TD_VoNR_ECO_INT_INI_10.png new file mode 100644 index 0000000000000000000000000000000000000000..87feda7bbfbf7aa7837a7a1a9a89a4575d39fc59 Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_INI_10.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_INI_10.txt b/msc_scripts/TD_VoNR_ECO_INT_INI_10.txt new file mode 100644 index 0000000000000000000000000000000000000000..8ada505a7748972c8b0f1133154dbd18b5e8385b --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_INI_10.txt @@ -0,0 +1,154 @@ +@startuml "TD_VoNR_ECO_INT_INI_10.png" +/'Editor: https://plantuml-editor.kkeisuke.com/ '/ +/'Syntax: http://plantuml.com/fr/sequence-diagram '/ +!include etsi-style.iuml +!pragma teoz true +' +participant "PSAP" + + + +box "IMS A" #LightBlue + participant "BGCF" + participant "IBCF" + participant "E-CSCF" + participant "P-CSCF" + + +end box +box "5GC A" #LightBlue + participant PCF + participant UPF + participant AMF +end box + +participant "UE A" + + +'rnote right "UE A" : Gm\nN1/N2 +'& rnote right "P-CSCF" : Mw +'& rnote left "P-CSCF" : Gm +'& rnote right "E-CSCF" : Mm +'& rnote left "IBCF" : Mx +'& rnote left "BGCF" : Mi +'& rnote rigleftht "PSAP" : Mm + + + rnote right "AMF" : N1/N2 +& rnote right "UPF" : N3 +& rnote left "UPF" : N6 +& rnote right "P-CSCF" : Gm +& rnote left "P-CSCF" : Mw +& rnote left "E-CSCF" : Mm +& rnote left "PCF" : N5 (or Rx) +& rnote right "PSAP" : Mm + + + + +rnote over "UE A", PSAP #FFAAAA: \s\s Emergency call terminated \s\s + +alt Option 1: PSAP in IMS A network +"PSAP" -> "E-CSCF" : INVITE + +else Option 2: PSAP NOT in IMS A network +||| +"PSAP" --> "IBCF" : INVITE +&"IBCF" -> "E-CSCF" : INVITE + +else Option 3: PSAP in PSTN network +||| +"PSAP" --> "BGCF" : INVITE +'&"PSTN" --> "E-CSCF" : INVITE +&"BGCF" -> "E-CSCF" : INVITE + +end + +"E-CSCF" -> "P-CSCF" : INVITE +&"P-CSCF" -> "UPF" : INVITE +&"UPF" -> "UE A" : INVITE + +' + +'"P-CSCF" -> "PCF" : STR +' + +'& "PCF" -> "PGw" : RAR +' + +rnote over "UE A", PSAP #FFAAAA: \s\s Installation PDU Session(s). \s\s +'rnote over "UE A", PGw #FFAAAA: Installation PDU Session(s). + + + + + +"UE A" -> "UPF" : 183 Session Progress +&"UPF" -> "P-CSCF" : 183 Session Progress +&"P-CSCF" -> "E-CSCF" : 183 Session Progress + +alt Option 1: PSAP in IMS A network +"E-CSCF" -> "PSAP" : 183 Session Progress + +else Option 2: PSAP NOT in IMS A network +||| +"E-CSCF" -> "IBCF" : 183 Session Progress +&"IBCF" --> "PSAP" : 183 Session Progress + +else Option 3: PSAP in PSTN network +||| +"E-CSCF" -> "BGCF" : 183 Session Progress +&"BGCF" --> "PSAP" : 183 Session Progress +'&"PSTN" --> "PSAP" : 183 Session Progress + +end + + +' +"UE A" <--> "PSAP" : Early Media +autonumber stop +&"P-CSCF" -[hidden]-> "PCF" : Hidden Arrow Hidden +autonumber resume + + +"UE A" -> "UPF" : 180 Ringing +&"UPF" -> "P-CSCF" : 180 Ringing +&"P-CSCF" -> "E-CSCF" : 180 Ringing +"UE A" -> "UPF" : 200 OK +&"UPF" -> "P-CSCF" : 200 OK +&"P-CSCF" -> "E-CSCF" : 200 OK + +alt Option 1: PSAP in IMS A network +"E-CSCF" -> "PSAP" : 180 Ringing +"E-CSCF" -> "PSAP" : 200 OK +"PSAP" -> "E-CSCF" : ACK +else Option 2: PSAP NOT in IMS A network +||| +"E-CSCF" -> "IBCF" : 180 Ringing +&"IBCF" --> "PSAP" : 180 Ringing +"E-CSCF" -> "IBCF" : 200 OK +&"IBCF" --> "PSAP" : 200 OK +"PSAP" --> "IBCF" : ACK +&"IBCF" -> "E-CSCF" : ACK +else Option 3: PSAP in PSTN network +||| +"E-CSCF" -> "BGCF" : 180 Ringing +&"BGCF" --> "PSAP" : 180 Ringing +'&"PSTN" --> "PSAP" : 180 Ringing +"E-CSCF" -> "BGCF" : 200 OK +&"BGCF" --> "PSAP" : 200 OK +'&"PSTN" --> "PSAP" : 200 OK +"PSAP" --> "BGCF" : ACK +&"BGCF" -> "E-CSCF" : ACK +'&"BGCF" -> "E-CSCF" : ACK + +end + +"E-CSCF" -> "P-CSCF" : ACK +&"P-CSCF" -> "UPF" : ACK +&"UPF" -> "UE A" : ACK + + +"UE A" <--> "PSAP" : Media exchange +' +@enduml diff --git a/msc_scripts/TD_VoNR_ECO_INT_REG_01.png b/msc_scripts/TD_VoNR_ECO_INT_REG_01.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b32034ccecaf17d3950ef8e8cf92f5a48cf1ae Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_REG_01.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_REG_01.txt b/msc_scripts/TD_VoNR_ECO_INT_REG_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..35237b57b15c53d765fb8d32950b3a6234f9a720 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_REG_01.txt @@ -0,0 +1,62 @@ +@startuml "TD_VoNR_ECO_INT_REG_01.png" +!include etsi-style.iuml +!pragma teoz true +' +'Figure : IMS Emergency Registration (success) +' +''title Figure : IMS Emergency Registration (success) +' +participant "UE A" +box "GNB" #LightBlue +participant "GNB" +end box +box "5GC A" #LightBlue + participant AMF + participant UPF + participant PCF +end box +box "IMS A" #LightBlue + participant "P-CSCF" + participant "I-CSCF" + participant "S-CSCF" + participant "HSS" +end box +' +rnote right "UE A" : Gm/N3&N6 +& rnote right "GNB" : N2 +& rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote right "PCF" : N5 or Rx +& rnote right "P-CSCF" : Mw +& rnote right "I-CSCF" : Mw +& rnote left "S-CSCF" : Mw +& rnote left "HSS" : Cx +' +rnote over "UE A", PCF #FFAAAA: 5G Registration to 5GC\nEstablish Emergency PDU Session +' +"UE A" <--> "P-CSCF" : Emergency session possible over Emergency PDU session +"UE A" -> "P-CSCF" : REGISTER(Contact: *sos) +"P-CSCF" --> "PCF" : AAR or \n PA_Create_req +"PCF" --> "P-CSCF" : AAA or \n PA_Create_res +&"P-CSCF" -> "I-CSCF" : REGISTER +& "I-CSCF" -> "HSS" : UAR +"HSS" -> "I-CSCF" : UAA +"I-CSCF" -> "S-CSCF" : REGISTER +& "S-CSCF" -> "HSS" : MAR +"HSS" -> "S-CSCF" : MAA +& "S-CSCF" -> "I-CSCF" : 401 Unauthorized +& "I-CSCF" -> "P-CSCF" : 401 Unauthorized +& "P-CSCF" -> "UE A" : 401 Unauthorized +"UE A" -> "P-CSCF" : REGISTER(Contact: *sos) +& "P-CSCF" -> "I-CSCF" : REGISTER +& "I-CSCF" -> "HSS" : UAR +"HSS" -> "I-CSCF" : UAA +"I-CSCF" -> "S-CSCF" : REGISTER +& "S-CSCF" -> "HSS" : SAR +"HSS" -> "S-CSCF" : SAA +& "S-CSCF" -> "I-CSCF" : 200 OK +& "I-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UE A" : 200 OK +"UE A" <--> "P-CSCF" : IMS Emergency signalling possible over Emergency PDU session +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_INT_REG_02.png b/msc_scripts/TD_VoNR_ECO_INT_REG_02.png new file mode 100644 index 0000000000000000000000000000000000000000..a6439ac7114844c42c2bfda4117eec6d4f4cd20d Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_REG_02.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_REG_02.txt b/msc_scripts/TD_VoNR_ECO_INT_REG_02.txt new file mode 100644 index 0000000000000000000000000000000000000000..1b458f46b6c0733898285fc5bb4a09d5f4b03370 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_REG_02.txt @@ -0,0 +1,62 @@ +@startuml "TD_VoNR_ECO_INT_REG_02.png" +!include etsi-style.iuml +!pragma teoz true +' +'Figure : IMS Emergency Registration (unsuccess) +' +''title Figure : IMS Emergency Registration (unsuccess) +' +participant "UE A" +box "GNB" #LightBlue +participant "GNB" +end box +box "5GC A" #LightBlue + participant AMF + participant UPF + participant PCF +end box +box "IMS A" #LightBlue + participant "P-CSCF" + participant "I-CSCF" + participant "S-CSCF" + participant "HSS" +end box +' +rnote right "UE A" : Gm/N3&N6 +& rnote right "GNB" : N2 +& rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote right "PCF" : N5 or Rx +& rnote right "P-CSCF" : Mw +& rnote right "I-CSCF" : Mw +& rnote left "S-CSCF" : Mw +& rnote left "HSS" : Cx +' +rnote over "UE A", PCF #FFAAAA: 5G Registration to 5GC\nEstablish Emergency PDU Session +' +"UE A" <--> "P-CSCF" : Emergency session possible over Emergency PDU session +"UE A" -> "P-CSCF" : REGISTER(Contact: *sos) +"P-CSCF" --> "PCF" : AAR or \nPA_Create_req +"PCF" --> "P-CSCF" : AAA or \nPA_Create_res +&"P-CSCF" -> "I-CSCF" : REGISTER +& "I-CSCF" -> "HSS" : UAR +"HSS" -> "I-CSCF" : UAA +"I-CSCF" -> "S-CSCF" : REGISTER +& "S-CSCF" -> "HSS" : MAR +"HSS" -> "S-CSCF" : MAA +& "S-CSCF" -> "I-CSCF" : 401 Unauthorized +& "I-CSCF" -> "P-CSCF" : 401 Unauthorized +& "P-CSCF" -> "UE A" : 401 Unauthorized +"UE A" -> "P-CSCF" : REGISTER(Contact: *sos) +& "P-CSCF" -> "I-CSCF" : REGISTER +& "I-CSCF" -> "HSS" : UAR +"HSS" -> "I-CSCF" : UAA +"I-CSCF" -> "S-CSCF" : REGISTER +& "S-CSCF" -> "HSS" : SAR +"HSS" -> "S-CSCF" : SAA +& "S-CSCF" -> "I-CSCF" : 403 Forbiden +& "I-CSCF" -> "P-CSCF" : 403 Forbiden +& "P-CSCF" -> "UE A" : 403 Forbiden +"UE A" <--> "P-CSCF" : Emergency signalling possible over non protected port +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_INT_REJ_01.png b/msc_scripts/TD_VoNR_ECO_INT_REJ_01.png new file mode 100644 index 0000000000000000000000000000000000000000..6b9c50ceb5eb5b38f525ffe65f7a712bd7e0efc0 Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_REJ_01.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_REJ_01.txt b/msc_scripts/TD_VoNR_ECO_INT_REJ_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..d111b50b22d482c227a7c5c6a82b4943dd54f78c --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_REJ_01.txt @@ -0,0 +1,129 @@ +@startuml "TD_VoNR_ECO_INT_REJ_01.png" +/'Editor: https://plantuml-editor.kkeisuke.com/ '/ +/'Syntax: http://plantuml.com/fr/sequence-diagram '/ +!include etsi-style.iuml +!pragma teoz true +' +participant "UE A" +box "5GC A" #LightBlue + participant AMF + participant UPF + participant PCF +end box +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" + participant "IBCF" + participant "BGCF" + +end box + + + participant "PSAP" + + + +' +'rnote right "UE A" : Gm\nN1/N2 + rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote left "P-CSCF" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mm, Mx, Mi +& rnote right "PCF" : N5 (or Rx) +& rnote left "IBCF" : Mx +& rnote left "BGCF" : Mi +& rnote left "PSAP" : Mm +' + +autonumber stop +"UE A" -[hidden]-> "AMF" : this is a hidden arrow +&"PCF" -[hidden]-> "P-CSCF" : this is a hidden arrow + +autonumber resume + +"UE A" <--> "PSAP" : Not possible +'& "PGw" <--> "PSAP" : Not possible +"UE A" -> "UPF" : INVITE \n(urn:service:sos*) +& "UPF" -> "P-CSCF" : INVITE \n(urn:service:sos*) + +"P-CSCF" -> "PCF" : PA_Create_req (or AAR) +'& "PCRF" -> "PGw" : RAR +rnote over "UE A", PSAP #FFAAAA: Installation of emergency Bearer +'"PGw" -> "PCF" : RAA + "PCF" -> "P-CSCF" : PA_Create_res (or AAA) +'"PGw" -> "PCF" : CCR + "PCF" -> "P-CSCF" : PA_Notify_req (or RAR) + "P-CSCF" -> "PCF" : PA_Notify_res (or RAA) +' "PCF" -> "PGw" : CCA + "P-CSCF" -> "E-CSCF" : INVITE \n(urn:service:sos*) + +rnote over "PSAP", PSAP #FFAAAA: PSAP unavailable + +alt PSAP in IMS A network (option 1) +"E-CSCF" -> "PSAP" : INVITE \n(urn:service:sos*) +"PSAP" -> "E-CSCF" : 480 Temporary Unavailable +else PSAP not in IMS A network (option 2) +autonumber stop +"E-CSCF" -[hidden]-> "IBCF" : this is a hidden arrow +autonumber resume +"E-CSCF" -> "IBCF" : INVITE \n(urn:service:sos*) +&"IBCF" --> "PSAP" : INVITE \n(urn:service:sos*) +"PSAP" --> "IBCF" : 480 Temporary Unavailable +&"IBCF" -> "E-CSCF" : 480 Temporary Unavailable +else PSAP in PSTN network (option 3) +autonumber stop +"E-CSCF" -[hidden]-> "IBCF" : this is a hidden arrow +autonumber resume +"E-CSCF" -> "BGCF" : INVITE \n(urn:service:sos*) +&"BGCF" --> "PSAP" : INVITE \n(urn:service:sos*) +'&"PSTN" --> "PSAP" : INVITE \n(urn:service:sos*) +"PSAP" --> "BGCF" : 480 Temporary Unavailable +&"BGCF" -> "E-CSCF" : 480 Temporary Unavailable +'&"PSAP" --> "PSTN" : 480 Temporary Unavailable +end + + + + + + + + "E-CSCF" -> "P-CSCF" : 480 Temporary Unavailable +& "P-CSCF" -> "PCF" : PA_Delete_req (or STR) +'& "PCF" -> "PGw" : RAR +rnote over "UE A", PSAP #FFAAAA: Removal of emergency Bearer +'"PGw" -> "PCF" : RAA + "PCF" -> "P-CSCF" : PA_Delete_res (or STA) +"P-CSCF" -> "UPF" : 380 (Alternative Service) +& "UPF" -> "UE A" : 380 (Alternative Service) + +"UE A" -> "UPF" : ACK +&"UPF" -> "P-CSCF" : ACK +& "P-CSCF" -> "E-CSCF" : ACK + +alt PSAP in IMS A network (option 1) +"E-CSCF" -> "PSAP" : ACK +else PSAP not in IMS A network (option 2) +autonumber stop +"E-CSCF" -[hidden]-> "IBCF" : this is a hidden arrow +autonumber resume +"E-CSCF" -> "IBCF" : ACK +&"IBCF" --> "PSAP" : ACK + +else PSAP in PSTN network (option 3) +autonumber stop +"E-CSCF" -[hidden]-> "IBCF" : this is a hidden arrow +autonumber resume +"E-CSCF" -> "BGCF" : ACK +&"BGCF" --> "PSAP" : ACK +'&"PSTN" --> "PSAP" : ACK + +end + + +"UE A" <--> "PSAP" : Not possible +'& "PGw" <--> "PSAP" : Not possible + +@enduml diff --git a/msc_scripts/TD_VoNR_ECO_INT_REJ_02.png b/msc_scripts/TD_VoNR_ECO_INT_REJ_02.png new file mode 100644 index 0000000000000000000000000000000000000000..cef88ada63ddc406aea7eb44619389ce89ade482 Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_REJ_02.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_REJ_02.txt b/msc_scripts/TD_VoNR_ECO_INT_REJ_02.txt new file mode 100644 index 0000000000000000000000000000000000000000..d5f483937497376cf485a9b7b6337dc37c0c2913 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_REJ_02.txt @@ -0,0 +1,59 @@ + + +@startuml "TD_VoNR_ECO_INT_REJ_02.png" + + + + +!include etsi-style.iuml +!pragma teoz true +' +'Figure: SIP Session Establishment - Originating Leg +' +''title Figure : SIP Session Establishment - Originating Leg +' +participant "UE A" +box "5GC A" #LightBlue + participant AMF + participant UPF + participant "PCF" +end box +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" +end box + participant "PSAP" + + + rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote left "P-CSCF" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mm +& rnote right "PCF" : N5 (or Rx) +& rnote left "PSAP" : Mm + +autonumber stop +"PCF" -[hidden]-> "P-CSCF" : hidden arrow hidden +autonumber resume + + +"UE A" -> "UPF" : INVITE(urn:service:sos*) +&"UPF" -> "P-CSCF" : INVITE(urn:service:sos*) + + +rnote over "PCF", UPF #FFAAAA: Installation of PDU-Session + +rnote over "P-CSCF", PSAP #FFAAAA: Emergency Session not possible + +'rnote over "UE A", UPF #FFAAAA: Removal of PDU-Session +rnote over "PCF", UPF #FFAAAA: \s Removal of PDU-Session \s + +"P-CSCF" -> "UPF" : 380 Alternative Service +&"UPF" -> "UE A" : 380 Alternative Service + +"UE A" -> "UPF" : ACK +&"UPF" -> "P-CSCF" : ACK + +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_INT_REJ_03.png b/msc_scripts/TD_VoNR_ECO_INT_REJ_03.png new file mode 100644 index 0000000000000000000000000000000000000000..2a3fd098f014e46331c8454a3b862bb53ec2ed60 Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_REJ_03.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_REJ_03.txt b/msc_scripts/TD_VoNR_ECO_INT_REJ_03.txt new file mode 100644 index 0000000000000000000000000000000000000000..a1f7be6b23399eed870043522a47d41a763660f4 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_REJ_03.txt @@ -0,0 +1,57 @@ + + +@startuml "TD_VoNR_ECO_INT_REJ_03.png" + + + + +!include etsi-style.iuml +!pragma teoz true +' +'Figure: SIP Session Establishment - Originating Leg +' +''title Figure : SIP Session Establishment - Originating Leg +' +participant "UE A" +box "5GC A" #LightBlue + participant "AMF" + participant "UPF" + participant "PCF" +end box +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" +end box + participant "PSAP" + + + + rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote left "P-CSCF" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mm +& rnote right "PCF" : N5 (or Rx) +& rnote left "PSAP" : Mm + + + +' +"UE A" -> "UPF" : INVITE(urn: urn is not correct) +&"UPF" -> "P-CSCF" : INVITE(urn: urn is not correct) + + +rnote over "PCF", UPF #FFAAAA: Installation of PDU-Session + +rnote over "P-CSCF", PSAP #FFAAAA: Emergency Session not possible + +'rnote over "UE A", UPF #FFAAAA: Removal of PDU-Session +rnote over "PCF", UPF #FFAAAA: \s Removal of PDU-Session \s + +"P-CSCF" -> "UPF" : 380 Alternative Service +&"UPF" -> "UE A" : 380 Alternative Service + +"UE A" -> "UPF" : ACK +&"UPF" -> "P-CSCF" : ACK +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_INT_REL_02.png b/msc_scripts/TD_VoNR_ECO_INT_REL_02.png new file mode 100644 index 0000000000000000000000000000000000000000..8317be4be8f0f60ef9aee1f4fea028901a80988b Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_INT_REL_02.png differ diff --git a/msc_scripts/TD_VoNR_ECO_INT_REL_02.txt b/msc_scripts/TD_VoNR_ECO_INT_REL_02.txt new file mode 100644 index 0000000000000000000000000000000000000000..08606d12a104603f1a2039716dd0e03c946a9b5a --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_INT_REL_02.txt @@ -0,0 +1,123 @@ +@startuml "TD_VoNR_ECO_INT_REL_02.png" +/'Editor: https://plantuml-editor.kkeisuke.com/ '/ +/'Syntax: http://plantuml.com/fr/sequence-diagram '/ +!include etsi-style.iuml +!pragma teoz true +' +participant "PSAP" + + + +box "IMS A" #LightBlue +participant "BGCF" + participant "IBCF" + participant "E-CSCF" + participant "P-CSCF" + + +end box +box "5GC A" #LightBlue + participant PCF + participant UPF + 'participant AMF +end box + +participant "UE A" + +' +'rnote left "UE A" : Gm + rnote left "P-CSCF" : Mw +& rnote right "P-CSCF" : Gm +& rnote left "E-CSCF" : Mm, Mx, Mi +& rnote right "IBCF" : Mx +& rnote left "PCF" : N5 (or Rx) +'& rnote right "PGw" : Gx +& rnote right "UPF" : N3 +& rnote left "UPF" : N6 +& rnote right "BGCF" : Mi +& rnote right "PSAP" : Mm +'& rnote right "AMF" : N1/N2 +' + + + +"PSAP" <--> "UE A" : Media Exchange +'autonumber stop +'&"IBCF" -[hidden]-> "E-CSCF" : hidden Arrow +'autonumber resume + +alt PSAP in IMS A network (option 1) +"PSAP" -> "E-CSCF" : BYE + +else PSAP not in IMS A network (option 2) +autonumber stop +"PSAP" -[hidden]-> "IBCF" : hidden Arrow +autonumber resume + +"PSAP" --> "IBCF" : BYE +&"IBCF" -> "E-CSCF" : BYE + +else PSAP in PSTN network (option 3) +autonumber stop +"PSAP" -[hidden]-> "BGCF" : hidden Arrow +autonumber resume +"PSAP" --> "BGCF" : BYE +'&"PSTN" --> "BGCF" : BYE +&"BGCF" -> "E-CSCF" : BYE + +end + +autonumber stop +"IBCF" -[hidden]-> "E-CSCF" : hidden Arrow hidden +autonumber resume + +&"E-CSCF" -> "P-CSCF" : BYE +&"P-CSCF" -> "UPF" : BYE +&"UPF" -> "UE A" : BYE + +"P-CSCF" -> "PCF" : PA_Delete_req (or STR) + +' + +'& "PCRF" -> "PGw" : RAR +' +rnote over "PSAP", "UE A" #FFAAAA: Removal of PDU Session(s). + +'"PGw" -> "PCRF" : RAA +' +"PCF" -> "P-CSCF" : PA_Delete_res (or STA) + + + +"UE A" -> "UPF" : 200 OK +&"UPF" -> "P-CSCF" : 200 OK + +&"P-CSCF" -> "E-CSCF" : 200 OK + +alt PSAP in IMS A network (option 1) +"E-CSCF" -> "PSAP" : 200 OK + +else PSAP not in IMS A network (option 2) +autonumber stop +"E-CSCF" -[hidden]-> "IBCF" : hidden Arrow +autonumber resume +"E-CSCF" -> "IBCF" : 200 OK +&"IBCF" --> "PSAP" : 200 OK + +else PSAP in PSTN network (option 3) +autonumber stop +"E-CSCF" -[hidden]-> "BGCF" : hidden Arrow +autonumber resume +"E-CSCF" -> "BGCF" : 200 OK +&"BGCF" --> "PSAP" : 200 OK +'&"PSTN" --> "PSAP" : 200 OK + +end + + +' +"UE A" <--> "PSAP" : Not possible +' +'& "PGw" <--> "PSAP" : Not possible +' +@enduml diff --git a/msc_scripts/TD_VoNR_ECO_RMI_5RG_01.png b/msc_scripts/TD_VoNR_ECO_RMI_5RG_01.png new file mode 100644 index 0000000000000000000000000000000000000000..25f75f63fd9d7effcc230bfba29c69fbb1c1407c Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_RMI_5RG_01.png differ diff --git a/msc_scripts/TD_VoNR_ECO_RMI_5RG_01.txt b/msc_scripts/TD_VoNR_ECO_RMI_5RG_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..9376b1fe53b8fc656af0696981cebbccffb1c34f --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_RMI_5RG_01.txt @@ -0,0 +1,49 @@ +@startuml "TD_VoNR_ECO_RMI_5RG_01.png" +!include etsi-style.iuml +!pragma teoz true +' +'Figure : 5G visited emergency registration with USIM and Establishment of the Emergency PDU session +' +''title Figure : 5G visited emergency registration and Establishment of the Emergency PDU session +' +participant "UE B" +box "GNB" #LightBlue +participant "GNB" +end box +box "5GC A" #LightBlue + participant AMF + participant UPF + participant PCF +end box +box "IMS A" #LightBlue + participant "P-CSCF" +end box +' +rnote right "UE B" : N1 +& rnote right "GNB" : N2 +& rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote right "PCF" : N5 +' +rnote over "UE B", AMF #FFAAAA: 5G Registration to 5GC +"UE B" --> "GNB" : +&"GNB" -> "AMF" : REGISTRATION_REQUEST - emergency \n (5GS mobile identity = 5G-GUTI or SUCI) +rnote over "UE B", AMF #AAAAAA: Authentication/Security + +"GNB" <- "AMF" : REGISTRATION_ACCEPT +&"UE B" <-- "GNB" : +"UE B" --> "GNB" : +&"GNB" -> "AMF" : REGISTRATION_COMPLETE +rnote over "UE B", AMF #FFAAAA: Establish Emergency PDU Session +' +"UE B" --> "GNB" : +&"GNB" -> "AMF" : PDU Session Establishment Request - emergency +' +rnote over "AMF", "PCF" #FFAAAA: Policy Decision, session establishment +' +"AMF" -> "GNB" : PDU Session Establishment Accept +&"UE B" <-- "GNB" : +"UE B" <--> "P-CSCF" : Emergency session possible over Emergency PDU session + +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_RMI_5RG_02.png b/msc_scripts/TD_VoNR_ECO_RMI_5RG_02.png new file mode 100644 index 0000000000000000000000000000000000000000..4281cd2676add1f17994c38f7ad51500584592ed Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_RMI_5RG_02.png differ diff --git a/msc_scripts/TD_VoNR_ECO_RMI_5RG_02.txt b/msc_scripts/TD_VoNR_ECO_RMI_5RG_02.txt new file mode 100644 index 0000000000000000000000000000000000000000..82e288c421330b12613c2700d8f820db019e6b5d --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_RMI_5RG_02.txt @@ -0,0 +1,49 @@ +@startuml "TD_VoNR_ECO_RMI_5RG_02.png" +!include etsi-style.iuml +!pragma teoz true +' +'Figure : 5G visited emergency registration without USIM and Establishment of the Emergency PDU session +' +''title Figure : 5G visited emergency registration and Establishment of the Emergency PDU session +' +participant "UE B" +box "GNB" #LightBlue +participant "GNB" +end box +box "5GC A" #LightBlue + participant AMF + participant UPF + participant PCF +end box +box "IMS A" #LightBlue + participant "P-CSCF" +end box +' +rnote right "UE B" : N1 +& rnote right "GNB" : N2 +& rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote right "PCF" : N5 +' +rnote over "UE B", AMF #FFAAAA: 5G Registration to 5GC +"UE B" --> "GNB" : +&"GNB" -> "AMF" : REGISTRATION_REQUEST - emergency \n (5GS mobile identity = PEI) +rnote over "UE B", AMF #AAAAAA: optional Authentication/Security + +"GNB" <- "AMF" : REGISTRATION_ACCEPT +&"UE B" <-- "GNB" : +"UE B" --> "GNB" : +&"GNB" -> "AMF" : REGISTRATION_COMPLETE +rnote over "UE B", AMF #FFAAAA: Establish Emergency PDU Session +' +"UE B" --> "GNB" : +&"GNB" -> "AMF" : PDU Session Establishment Request - emergency +' +rnote over "AMF", "PCF" #FFAAAA: Policy Decision, session establishment +' +"AMF" -> "GNB" : PDU Session Establishment Accept +&"UE B" <-- "GNB" : +"UE B" <--> "P-CSCF" : Emergency session possible over Emergency PDU session + +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_RMI_INI_01.png b/msc_scripts/TD_VoNR_ECO_RMI_INI_01.png new file mode 100644 index 0000000000000000000000000000000000000000..5f631ac156f0df8a3e3841938ef5dd61bc08e0df Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_RMI_INI_01.png differ diff --git a/msc_scripts/TD_VoNR_ECO_RMI_INI_01.txt b/msc_scripts/TD_VoNR_ECO_RMI_INI_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..fb371be814e2343288ceaff64384218bd25aa56d --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_RMI_INI_01.txt @@ -0,0 +1,72 @@ +@startuml "TD_VoNR_ECO_RMI_INI_01.png" + + +!include etsi-style.iuml +!pragma teoz true +' +'Figure: SIP Session Establishment - Originating Leg +' +''title Figure : SIP Session Establishment - Originating Leg +' +participant "UE B" +box "5GC A" #LightBlue + participant AMF + participant UPF + participant "PCF" +end box +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" + end box + + participant "PSAP" + +'rnote right "UE B" : Gm + rnote right "P-CSCF" : Mw +& rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote right "E-CSCF" : Mm +& rnote left "PSAP" : Mm +& rnote right "PCF" : N5 (or Rx) + +"UE B" -> "UPF" : INVITE +&"UPF" -> "P-CSCF" : INVITE + +"P-CSCF" -> "PCF" : AAR +rnote over "AMF", PCF #FFAAAA: Policy decision +'"PCF" -> "PGw" : RAR +rnote over "PCF", PSAP #FFAAAA: Installation of the PDU Session +'"PGw" -> "PCF" : RAA + "PCF" -> "P-CSCF" : AAA +'"PGw" -> "PCF" : CCR + "PCF" -> "P-CSCF" : RAR + "P-CSCF" -> "PCF" : RAA +'& "PCF" -> "PGw" : CCA + + + "P-CSCF" -> "E-CSCF" : INVITE +& "E-CSCF" -> "PSAP" : INVITE + +"PSAP" -> "E-CSCF" : 183 Session Progress\n(SDP answer) +& "E-CSCF" -> "P-CSCF" : 183 Session Progress\n(SDP answer) + + "P-CSCF" -> "PCF" : AAR +'& "PCF" -> "PGw" : RAR +rnote over "PCF", PSAP #FFAAAA: Modification of the PDU Session +'"PGw" -> "PCF" : RAA + "PCF" -> "P-CSCF" : AAA +"P-CSCF" -> "UE B" : 183 Session Progress\n(SDP answer) +"UE B" <--> "PSAP" : Early Media +"PSAP" -> "E-CSCF" : 180 Ringing +& "E-CSCF" -> "P-CSCF" : 180 Ringing +&"P-CSCF" -> "UE B" : 180 Ringing +"PSAP" -> "E-CSCF" : 200 OK +& "E-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UE B" : 200 OK +"UE B" -> "P-CSCF" : ACK +& "P-CSCF" -> "E-CSCF" : ACK +& "E-CSCF" -> "PSAP" : ACK + +"UE B" <--> "PSAP" : Media Exchange +@enduml diff --git a/msc_scripts/TD_VoNR_ECO_RMI_INI_03.png b/msc_scripts/TD_VoNR_ECO_RMI_INI_03.png new file mode 100644 index 0000000000000000000000000000000000000000..fc9b9e9733d135878a9256850602fd4a1064ad22 Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_RMI_INI_03.png differ diff --git a/msc_scripts/TD_VoNR_ECO_RMI_INI_03.txt b/msc_scripts/TD_VoNR_ECO_RMI_INI_03.txt new file mode 100644 index 0000000000000000000000000000000000000000..10329c2fe2b5cce816292269a1d1b34ac153c320 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_RMI_INI_03.txt @@ -0,0 +1,47 @@ +@startuml "TD_VoNR_ECO_RMI_INI_03.png" +/'Editor: https://plantuml-editor.kkeisuke.com/ '/ +/'Syntax: http://plantuml.com/fr/sequence-diagram '/ +!include etsi-style.iuml +!pragma teoz true +' +participant "UE A\nRoaming" +box "5GC A" #LightBlue + participant AMF + participant UPF + participant PCF + +end box +box "IMS A" #LightBlue + participant "P-CSCF" + +end box + + +' +rnote right "UE A\nRoaming" : S8 +'& rnote right "P-CSCF" : Mw +& rnote right "UPF" : N3 +& rnote left "UPF" : N6 +'& rnote right "PCF" : N5 (or Rx) + + + +'& rnote right "PGw" : Gm +' + + +"UE A\nRoaming" --> "UPF" : INVITE\n(urn:service:sos*) +& "UPF" -> "P-CSCF" : INVITE\n(urn:service:sos*) +rnote over "UPF", "P-CSCF" #FFAAAA: Installation of PDU Session - \nEmergency Session not possible +'"P-CSCF" -> "PCRF" : AAR +'& "PCRF" -> "PUPFGw" : RAR +'rnote over "P-CSCF", PCRF #FFAAAA: Emergency Session not possible + +"P-CSCF" -> "UPF" : 380 (Alternative Service) +& "UPF" --> "UE A\nRoaming" : 380 (Alternative Service) +"UE A\nRoaming" --> "UPF" : ACK +& "UPF" -> "P-CSCF" : ACK + + + +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_ECO_RMI_REG_01.png b/msc_scripts/TD_VoNR_ECO_RMI_REG_01.png new file mode 100644 index 0000000000000000000000000000000000000000..805f33dddec442035c647e6c4684b26efd0ad15a Binary files /dev/null and b/msc_scripts/TD_VoNR_ECO_RMI_REG_01.png differ diff --git a/msc_scripts/TD_VoNR_ECO_RMI_REG_01.txt b/msc_scripts/TD_VoNR_ECO_RMI_REG_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..0d72eacbcaef9d37f0b73c1419a298d789a52037 --- /dev/null +++ b/msc_scripts/TD_VoNR_ECO_RMI_REG_01.txt @@ -0,0 +1,53 @@ +@startuml "TD_VoNR_ECO_RMI_REG_01.png" +!include etsi-style.iuml +!pragma teoz true +' +'Figure : IMS Emergency Registration (unsuccess) (Roaming) +' +''title Figure : IMS Emergency Registration (unsuccess) (Roaming) +' +participant "UE B" +box "GNB" #LightBlue +participant "GNB" +end box +box "5GC A" #LightBlue + participant AMF + participant UPF + participant PCF +end box +box "IMS A" #LightBlue + participant "P-CSCF" + participant "I-CSCF" +' participant "S-CSCF" + participant "HSS" +end box +' +rnote right "UE B" : Gm/N3&N6 +& rnote right "GNB" : N2 +& rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote right "PCF" : N5 or Rx +& rnote right "P-CSCF" : Mw +& rnote left "I-CSCF" : Mw +'& rnote left "S-CSCF" : Mw +& rnote left "HSS" : Cx +' +rnote over "UE B", PCF #FFAAAA: 5G Registration to 5GC\nEstablish Emergency PDU Session +' +"UE B" <--> "P-CSCF" : Emergency session possible over Emergency PDU session +"UE B" -> "P-CSCF" : REGISTER(Contact: *sos) +"P-CSCF" --> "PCF" : AAR or \nPA_Create_req +"PCF" --> "P-CSCF" : AAA or \nPA_Create_res +&"P-CSCF" -> "I-CSCF" : REGISTER +& "I-CSCF" -> "HSS" : UAR +"HSS" -> "I-CSCF" : UAA +alt Emergency registration rejected by the visited network +"I-CSCF" -> "P-CSCF" : 403 Forbidden +& "P-CSCF" -> "UE B" : 403 Forbidden +else Emergency registration rejected - UE not supporting GIBA\n +"I-CSCF" -> "P-CSCF" : 420 Bad Extension +& "P-CSCF" -> "UE B" : 420 Bad Extension +end +"UE B" <--> "P-CSCF" : Emergency signalling possible over non protected port +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_EMC_INT_ABT_01.png b/msc_scripts/TD_VoNR_EMC_INT_ABT_01.png new file mode 100644 index 0000000000000000000000000000000000000000..cbec9a2fcb840433a31e8c9f1a174409f7bfaede Binary files /dev/null and b/msc_scripts/TD_VoNR_EMC_INT_ABT_01.png differ diff --git a/msc_scripts/TD_VoNR_EMC_INT_ABT_01.txt b/msc_scripts/TD_VoNR_EMC_INT_ABT_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..15679af4294530c72e37accbbb14ccc50f3516f9 --- /dev/null +++ b/msc_scripts/TD_VoNR_EMC_INT_ABT_01.txt @@ -0,0 +1,141 @@ +@startuml "TD_VoNR_EMC_INT_ABT_01.png" +/'Editor: https://plantuml-editor.kkeisuke.com/ '/ +/'Syntax: http://plantuml.com/fr/sequence-diagram '/ +!include etsi-style.iuml +!pragma teoz true +' +participant "UE A" +box "5GC A" #LightBlue + participant AMF + participant UPF + participant PCF +end box +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" + participant "IBCF" +participant "BGCF" +end box + + + participant "PSAP" + +' + + rnote left "AMF" : N1/N2 +& rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote left "P-CSCF" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mm, Mx, Mi +& rnote right "PCF" : N5 (or Rx) +& rnote left "PSAP" : Mm +& rnote left "IBCF" : Mx +& rnote left "BGCF" : Mi + + + + + + + +rnote over "UE A", PSAP #FFAAAA: \s\s \s\sEmergency session establishment as in TD_VoNR_ECO_INT_INI_01 until 180 ringing (Event 18)\s\s \s\s + +autonumber stop +"UE A" -[hidden]-> "AMF" : hidden arrow +autonumber resume + + +"UE A" -> "UPF" : CANCEL +&"UPF" -> "P-CSCF" : CANCEL +"P-CSCF" -> "PCF" : PA_Delete_req (or STR) +'& "PCF" -> "PGw" : RAR +rnote over "UE A", PSAP #FFAAAA: Removal of Early-media Session(s) +'"PGw" -> "PCF" : RAA +"PCF" -> "P-CSCF" : PA_Delete_res (or STA) +"P-CSCF" -> "E-CSCF" : CANCEL + +alt PSAP in IMS A network (option 1) +"E-CSCF" -> "PSAP" : CANCEL +"PSAP" -> "E-CSCF" : 200 OK (CANCEL) +else PSAP not in IMS A network (option 2) +autonumber stop +"E-CSCF" -[hidden]-> "IBCF" : this is a hidden arrow +autonumber resume +"E-CSCF" -> "IBCF" : CANCEL +&"IBCF" --> "PSAP" : CANCEL +"PSAP" --> "IBCF" : 200 OK (CANCEL) +&"IBCF" -> "E-CSCF" : 200 OK (CANCEL) +else PSAP in PSTN network (option 3) +autonumber stop +"E-CSCF" -[hidden]-> "BGCF" : this is a hidden arrow +autonumber resume +"E-CSCF" -> "BGCF" : CANCEL +&"BGCF" --> "PSAP" : CANCEL +'&"PSTN" --> "PSAP" : CANCEL +"PSAP" --> "BGCF" : 200 OK (CANCEL) +'&"PSTN" --> "BGCF" : 200 OK (CANCEL) +&"BGCF" -> "E-CSCF" : 200 OK (CANCEL) + +end + + + "E-CSCF" -> "P-CSCF" : 200 OK (CANCEL) +& "P-CSCF" -> "UPF" : 200 OK (CANCEL) +& "UPF" -> "UE A" : 200 OK (CANCEL) + +alt PSAP in IMS A network (option 1) + +"PSAP" -> "E-CSCF" : 487 (INVITE) +else PSAP not in IMS A network (option 2) +autonumber stop +"PSAP" -[hidden]-> "IBCF" : this is a hidden arrow +autonumber resume +"PSAP" --> "IBCF" : 487 (INVITE) +&"IBCF" -> "E-CSCF" : 487 (INVITE) + +else PSAP in PSTN network (option 3) +autonumber stop +"PSAP" -[hidden]-> "BGCF" : this is a hidden arrow +autonumber resume +"PSAP" --> "BGCF" : 487 (INVITE) +'&"PSTN" --> "BGCF" : 487 (INVITE) +&"BGCF" -> "E-CSCF" : 487 (INVITE) +end + + "E-CSCF" -> "P-CSCF" : 487 (INVITE) +&"P-CSCF" -> "UPF" : 487 (INVITE) +&"UPF" -> "UE A" : 487 (INVITE) + +"UE A" -> "UPF" : ACK +&"UPF" -> "P-CSCF" : ACK +&"P-CSCF" -> "E-CSCF" : ACK + +alt PSAP in IMS A network (option 1) +"E-CSCF" -> "PSAP" : ACK + +else PSAP not in IMS A network (option 2) +autonumber stop +"E-CSCF" -[hidden]-> "IBCF" : this is a hidden arrow +autonumber resume +"E-CSCF" -> "IBCF" : ACK +&"IBCF" --> "PSAP" : ACK + +else PSAP in PSTN network (option 3) +autonumber stop +"E-CSCF" -[hidden]-> "BGCF" : this is a hidden arrow +autonumber resume +'"PSTN" --> "PSAP" : ACK +"E-CSCF" -> "BGCF" : ACK +&"BGCF" --> "PSAP" : ACK + + + +end + + + + +"UE A" <--> "PSAP" : Not possible +'& "PGw" <--> "PSAP" : Not possible +@enduml \ No newline at end of file diff --git a/msc_scripts/TD_VoNR_EMC_INT_FALLBACK_01.png b/msc_scripts/TD_VoNR_EMC_INT_FALLBACK_01.png new file mode 100644 index 0000000000000000000000000000000000000000..be0699dbcbf9cbbe4b3771ed387564fce74a95f2 Binary files /dev/null and b/msc_scripts/TD_VoNR_EMC_INT_FALLBACK_01.png differ diff --git a/msc_scripts/TD_VoNR_EMC_INT_FALLBACK_01.txt b/msc_scripts/TD_VoNR_EMC_INT_FALLBACK_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..d4af1daf6e5ceb58c833e9f8e8e55852a608a701 --- /dev/null +++ b/msc_scripts/TD_VoNR_EMC_INT_FALLBACK_01.txt @@ -0,0 +1,48 @@ +@startuml "TD_VoNR_EMC_INT_FALLBACK_01.png" +/'Editor: https://plantuml-editor.kkeisuke.com/ '/ +/'Syntax: http://plantuml.com/fr/sequence-diagram '/ +!include etsi-style.iuml +!pragma teoz true +' +participant "UE A" +box "5GC A" #LightBlue + participant "gNB" + participant "AMF" +end box +box "EPC A" #LightBlue + participant "eNB" + participant "MME" +end box +box "Core Network" #LightBlue + participant "IMS A" + participant "PSAP" +end box + + + rnote right "AMF" : N26 +& rnote left "AMF" : N1/N2 +& rnote left "PSAP" : Mx, MI, Mm +& rnote left "MME" : S1/N26 +& rnote right "eNB" : S1 + + +"UE A" <--> "gNB" : Media Exchange through 5GC +"gNB" <--> "PSAP" : Media Exchange through 5GC + +"gNB" -> "AMF" : NGAP HANDOVER_REQUIRED +"AMF" -> "MME" : GTPv2-C Forward Relocation Request +"MME" -> "eNB" : S1AP HANDOVER_REQUEST +"eNB" -> "MME" : S1AP HANDOVER_REQUEST_ACK +"MME" -> "AMF" : GTPv2-C Forward Relocation Response +"AMF" -> "gNB" : NGAP HANDOVER_COMMAND +"gNB" -> "UE A" : NGAP HANDOVER_COMMAND +"UE A" -> "eNB" : S1AP HANDOVER_COMPLETE +"eNB" -> "MME" : S1AP HANDOVER_NOTIFY +"MME" -> "AMF" : GTPv2-C Forward Relocation Complete Notification +"AMF" -> "MME" : GTPv2-C Forward Relocation Complete Acknowledge + + +"UE A" <--> "eNB" : Media Exchange through 4G EPC +"eNB" <--> "PSAP" : Media Exchange through 4G EPC + +@enduml diff --git a/msc_scripts/TD_VoNR_EMC_INT_REL_01.png b/msc_scripts/TD_VoNR_EMC_INT_REL_01.png new file mode 100644 index 0000000000000000000000000000000000000000..10e991572ac7af7f2f2e64be6c9902cf8d89ce89 Binary files /dev/null and b/msc_scripts/TD_VoNR_EMC_INT_REL_01.png differ diff --git a/msc_scripts/TD_VoNR_EMC_INT_REL_01.txt b/msc_scripts/TD_VoNR_EMC_INT_REL_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..869eb4b085bcf97caf22561dc3e7ef4bfa2c632c --- /dev/null +++ b/msc_scripts/TD_VoNR_EMC_INT_REL_01.txt @@ -0,0 +1,129 @@ +@startuml "TD_VoNR_EMC_INT_REL_01.png" +/'Editor: https://plantuml-editor.kkeisuke.com/ '/ +/'Syntax: http://plantuml.com/fr/sequence-diagram '/ +!include etsi-style.iuml +!pragma teoz true +' +participant "UE A" +box "5GC A" #LightBlue + 'participant "AMF" + participant "UPF" + participant "PCF" +end box +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" + participant "IBCF" +participant "BGCF" +end box + + +'box "NW B" #LightGray + participant "PSAP" +'end box + +' +'rnote right "UE A" : Gm\nN1/N2 +'& rnote left "AMF" : \nN1/N2 +'& rnote left "UPF" : N3 +'& rnote right "UPF" : N6 +'& rnote right "P-CSCF" : Mw +'& rnote right "E-CSCF" : Mm +'& rnote right "PCF" : N5 (or Rx) +'& rnote left "IBCF" : Mx +'& rnote left "BGCF" : Mi +'& rnote left "PSAP" : Mm + + 'rnote left "AMF" : N1/N2 + rnote left "UPF" : N3 +& rnote right "UPF" : N6 +& rnote left "P-CSCF" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mm, Mx, Mi +& rnote right "PCF" : N5 (or Rx) +& rnote left "PSAP" : Mm +& rnote left "IBCF" : Mx +& rnote left "BGCF" : Mi + + + +' +"UE A" <--> "PSAP" : Media Exchange +' +"UE A" -> "UPF" : BYE +&"UPF" -> "P-CSCF" : BYE +' +&"P-CSCF" -> "E-CSCF" : BYE + +alt PSAP in IMS A network (option 1) +"E-CSCF" -> "PSAP" : BYE + +else PSAP not in IMS A network (option 2) +autonumber stop +"E-CSCF" -[hidden]-> "IBCF" : this is a hidden arrow +autonumber resume +"E-CSCF" -> "IBCF" : BYE +&"IBCF" --> "PSAP" : BYE + +else PSAP in PSTN network (option 3) +autonumber stop +"E-CSCF" -[hidden]-> "BGCF" : this is a hidden arrow +autonumber resume +"E-CSCF" -> "BGCF" : BYE +&"BGCF" --> "PSAP" : BYE +'&"PSTN" --> "PSAP" : BYE + +end + + +' +"P-CSCF" -> "PCF" : PA_Delete_req (or STR) + +'autonumber stop +'&"UE A" -[hidden]-> "AMF" : this is a hidden arrow +'autonumber resume + +' +'& "PCF" -> "PGw" : PA_Delete_re (or STA) +' + +rnote over "UE A", PSAP #FFAAAA: Removal of PDU Session(s). + +'"PGw" -> "PCF" : RAA +' + "PCF" -> "P-CSCF" : PA_Delete_res (or STA) + +' +alt PSAP in IMS A network (option 1) +'"E-CSCF" -> "PSAP" : BYE +"PSAP" -> "E-CSCF" : 200 OK +else PSAP not in IMS A network (option 2) +autonumber stop +"E-CSCF" -[hidden]-> "IBCF" : this is a hidden arrow +autonumber resume + +'"E-CSCF" -> "IBCF" : BYE +'&"IBCF" --> "PSAP" : BYE +"PSAP" --> "IBCF" : 200 OK +&"IBCF" -> "E-CSCF" : 200 OK + +else PSAP in PSTN network (option 3) +autonumber stop +"E-CSCF" -[hidden]-> "BGCF" : this is a hidden arrow +autonumber resume +'"E-CSCF" -> "BGCF" : BYE +'&"BGCF" --> "PSAP" : BYE +'&"PSTN" --> "PSAP" : BYE +"PSAP" --> "BGCF" : 200 OK +&"BGCF" -> "E-CSCF" : 200 OK +'&"PSAP" --> "PSTN" : 200 OK +end +' +"E-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UPF" : 200 OK +& "UPF" -> "UE A" : 200 OK +' +"UE A" <--> "PSAP" : Not possible +' +'& "PGw" <--> "PSAP" : Not possible +@enduml diff --git a/msc_scripts/TD_VoNR_NGC_INT_INF_01.png b/msc_scripts/TD_VoNR_NGC_INT_INF_01.png new file mode 100644 index 0000000000000000000000000000000000000000..333c5b5a21da693450cc0c5938e9ff91ad33aad3 Binary files /dev/null and b/msc_scripts/TD_VoNR_NGC_INT_INF_01.png differ diff --git a/msc_scripts/TD_VoNR_NGC_INT_INF_01.txt b/msc_scripts/TD_VoNR_NGC_INT_INF_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..16ca14bd14588acc0075ac825705409ef4c0fe35 --- /dev/null +++ b/msc_scripts/TD_VoNR_NGC_INT_INF_01.txt @@ -0,0 +1,97 @@ +@startuml "TD_VoNR_NGC_INT_INF_01.png" +/'Editor: https://plantuml-editor.kkeisuke.com/ '/ +/'Syntax: http://plantuml.com/fr/sequence-diagram '/ +!include etsi-style.iuml +!pragma teoz true +' +participant "PSAP" + + + +box "IMS A" #LightBlue + participant "BGCF" + participant "IBCF" + participant "E-CSCF" + participant "P-CSCF" + + +end box +box "5GC A" #LightBlue + participant PCF + participant "UPF" + participant "AMF" +end box + +participant "UE A" + +' + rnote left "P-CSCF" : Mw +& rnote right "P-CSCF" : Gm +& rnote left "E-CSCF" : Mm +& rnote right "IBCF" : Mx +& rnote left "PCF" : N5 (or Rx) +'& rnote right "PGw" : Gx +& rnote right "UPF" : N3 +& rnote left "UPF" : N6 +& rnote right "BGCF" : Mi +& rnote right "PSAP" : Mm +' + +rnote over PSAP, "UE A" #FFAAAA: \s\s eCall type of emergency service session established \s\s + +alt Option 1: PSAP in IMS A network +"PSAP" -> "E-CSCF" : INFO + +else Option 2: PSAP NOT in IMS A network +autonumber stop +"PSAP" -[hidden]-> "IBCF" +autonumber resume +"PSAP" --> "IBCF" : INFO +&"IBCF" -> "E-CSCF" : INFO + +else Option 3: PSAP in PSTN network +autonumber stop +"PSAP" -[hidden]-> "BGCF" +autonumber resume +"PSAP" --> "BGCF" : INFO +'&"PSTN" --> "E-CSCF" : INFO +&"BGCF" -> "E-CSCF" : INFO + +end + +"E-CSCF" -> "P-CSCF" : INFO +&"P-CSCF" -> "UE A" : INFO\n("application/EmergencyCallData.Control+xml" MIME body)\n("request" element: "action" = "send-data", "datatype" = "eCall.MSD") +autonumber stop +&"P-CSCF" -> "UPF" +autonumber resume + +"UE A" -> "P-CSCF" : INFO\n("application/EmergencyCallData.eCall.MSD" MIME body)\n(MSD not exceeding 140 bytes encoded in binary ASN.1) +&"P-CSCF" -> "E-CSCF" : INFO +autonumber stop +&"UE A" -> "UPF" +"P-CSCF" -[hidden]-> "PCF" : hidden arrow hidden +autonumber resume + +alt Option 1: PSAP in IMS A network +"E-CSCF" -> "PSAP" : INFO + +else Option 2: PSAP NOT in IMS A network +autonumber stop +"E-CSCF" -[hidden]-> "IBCF" +autonumber resume +"E-CSCF" -> "IBCF" : INFO +&"IBCF" --> "PSAP" : INFO + +else Option 3: PSAP in PSTN network +autonumber stop +"E-CSCF" -[hidden]-> "BGCF" +autonumber resume +"E-CSCF" -> "BGCF" : INFO +&"BGCF" --> "PSAP" : INFO +'&"PSTN" --> "PSAP" : INFO + +end + + + +@enduml diff --git a/msc_scripts/TD_VoNR_NGC_INT_INI_01.png b/msc_scripts/TD_VoNR_NGC_INT_INI_01.png new file mode 100644 index 0000000000000000000000000000000000000000..57a72790543a914f4656245bbb0884001ea12461 Binary files /dev/null and b/msc_scripts/TD_VoNR_NGC_INT_INI_01.png differ diff --git a/msc_scripts/TD_VoNR_NGC_INT_INI_01.txt b/msc_scripts/TD_VoNR_NGC_INT_INI_01.txt new file mode 100644 index 0000000000000000000000000000000000000000..4bd88556a5cd6b95b4e587212c377dc18aa21400 --- /dev/null +++ b/msc_scripts/TD_VoNR_NGC_INT_INI_01.txt @@ -0,0 +1,93 @@ +@startuml "TD_VoNR_NGC_INT_INI_01.png" + + +!include etsi-style.iuml +!pragma teoz true +' +'Figure: eCall type of Emergency Service Session Establishment, PSAP in same IM CN subsystem +' +''title Figure : eCall type of Emergency Service Session Establishment, PSAP in same IM CN subsystem +' +participant "UE A" +box "5GC A" #LightBlue + participant "AMF" + + participant "UPF" + participant "PCF" +end box +box "IMS A" #LightBlue + participant "P-CSCF" + participant "E-CSCF" +end box + + participant "PSAP" + +rnote right "UE A" : Gm +& rnote right "P-CSCF" : Mw +& rnote right "E-CSCF" : Mm +'& rnote right "PCRF" : Rx +'& rnote right "PGw" : Gx +& rnote right "UPF" : N6 +& rnote left "UPF" : N3 +& rnote right "PCF" : N5 (or Rx) +& rnote left "AMF" : N1/N2 + +' +"UE A" -> "P-CSCF" : INVITE (MSD in "application/EmergencyCallData.eCall.MSD" MIME body) +autonumber stop +&"UE A" -> "UPF" +autonumber resume +'&"UPF" -> "P-CSCF" : INVITE\n(MSD in\n"application/EmergencyCallData.eCall.MSD"\nMIME body) + +autonumber stop +"UE A" -[hidden]-> "AMF" : hidden arrow hidden +autonumber resume + +"P-CSCF" -> "PCF" : PA_Create_req (or AAR) +rnote over "AMF", "PCF" #FFAAAA: Policy decision +'"PCF" -> "PGw" : RAR +rnote over "AMF", "P-CSCF" #FFAAAA: Installation of the PDU Session +'"PGw" -> "PCF" : RAA + "PCF" -> "P-CSCF" : PA_Create_res (or AAA) +'"PGw" -> "PCF" : CCR + "PCF" -> "P-CSCF" : PA_Notify_req (or RAR) + "P-CSCF" -> "PCF" : PA_Notify_res (or RAA) +'& "PCF" -> "PGw" : CCA + +"P-CSCF" -> "PSAP" : INVITE (MSD in "application/EmergencyCallData.eCall.MSD" MIME body) +autonumber stop +&"P-CSCF" -> "E-CSCF" +autonumber resume + +'& "E-CSCF" -> "PSAP" : INVITE\n(MSD in\n"application/EmergencyCallData.eCall.MSD"\nMIME body) + +"PSAP" -> "P-CSCF" : 183 Session Progress (SDP answer) +autonumber stop +&"PSAP" -> "E-CSCF" +autonumber resume + +'& "E-CSCF" -> "P-CSCF" : 183 Session Progress\n(SDP answer) + + "P-CSCF" -> "PCF" : PA_Update_req (or AAR) +'& "PCF" -> "PGw" : RAR +rnote over "AMF", "P-CSCF" #FFAAAA: Modification of the PDU Session +'"PGw" -> "PCF" : RAA + "PCF" -> "P-CSCF" : PA_Update_res (or AAA) +"P-CSCF" -> "UPF" : 183 Session Progress\n(SDP answer) +&"UPF" -> "UE A" : 183 Session Progress\n(SDP answer) +"UE A" <--> "PSAP" : Early Media +"PSAP" -> "E-CSCF" : 180 Ringing +& "E-CSCF" -> "P-CSCF" : 180 Ringing +&"P-CSCF" -> "UPF" : 180 Ringing +&"UPF" -> "UE A" : 180 Ringing + +"PSAP" -> "E-CSCF" : 200 OK +& "E-CSCF" -> "P-CSCF" : 200 OK +& "P-CSCF" -> "UPF" : 200 OK +& "UPF" -> "UE A" : 200 OK +"UE A" -> "UPF" : ACK +&"UPF" -> "P-CSCF" : ACK +& "P-CSCF" -> "E-CSCF" : ACK +& "E-CSCF" -> "PSAP" : ACK +"UE A" <--> "PSAP" : Media Exchange +@enduml diff --git a/plantuml/README.md b/plantuml/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/plantuml/__main__.py b/plantuml/__main__.py new file mode 100644 index 0000000000000000000000000000000000000000..a3f73cf262acf39cceeb46e32be848c49d8e5642 --- /dev/null +++ b/plantuml/__main__.py @@ -0,0 +1,180 @@ +# -*- Coding: utf-8 -*- + +from __future__ import division # Import floating-point division (1/4=0.25) instead of Euclidian division (1/4=0) + +import os +import glob +import sys +import logging + +from regex_list import * + +MSG_PATH = "" +IN_FILE_PATH = "" +OUT_FILE_PATH = "" +out_streams = object() +logger = object() +parser = object() +data_ctx = dict() + +def process_command_line_args(): + global IN_FILE_PATH + + print(f"Arguments count: {len(sys.argv)}") + for i, arg in enumerate(sys.argv): + print(f"Argument {i:>6}: {arg}") + IN_FILE_PATH = sys.argv[1] + # End of function process_command_line_args + +def process_line(line): + global MSG_PATH, out_streams, logger, parser, data_ctx + + match = parser.parse_line(line) + if match != None: + logger.info(f"Matching: {match}") + if 'testcase' in match: + logger.info('Got testcase') + out_streams.write('@startuml\n') + out_streams.write(f"title {match['testcase']}\n") + out_streams.write("/'Editor: https://plantuml-editor.kkeisuke.com/ '/\n") + out_streams.write("/'Syntax: http://plantuml.com/fr/sequence-diagram '/\n") + out_streams.write('!include etsi-style.iuml\n') + out_streams.write('!pragma teoz true\n') + out_streams.write('autonumber\n') + out_streams.write('participant system\n') + out_streams.write('box "TTCN-3 Environment" #LightBlue\n') + elif 'operation' in match: + logger.info('Got operation') + if match['operation'] == 'mapped': + out_streams.write(f"participant \"{match['comp']}:{match['protocol_port']}\"\n") + data_ctx['protocol_port'].append(f"{match['comp']}:{match['protocol_port']}") + else: + if match['protocol_port'] != 'syncPort': + out_streams.write(f"\"{match['comp']}:{match['protocol_port']}\" --> system: unmap\n") + elif 'request' in match: + logger.info('Got request') + if data_ctx['box_ended'] == False: + out_streams.write('endbox\n') + data_ctx['box_ended'] = True + for p in data_ctx['protocol_port']: + out_streams.write(f"\"{p}\" --> system: map\n") + out_streams.write(f"\"{match['comp']}:{match['port']}\" -[#green]> system: @{match['module']}.{match['message']}\n") + s = match['request'].replace(",", ",\\n").replace("\"", "").strip() + if len(s) > 128: + n = match['hours'] + "_" + match['minutes'] + "_" + match['seconds'] + "_" + match['milliseconds'] + ".txt" + n = os.path.join(MSG_PATH, n) + with open(n, "w") as msg: + msg.write(s) + s = f'[[file://{n} request := ...]]' #{Click to read the message} + out_streams.write(f"note right: {s}\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + elif 'response' in match: + logger.info('Got response') + if data_ctx['box_ended'] == False: + out_streams.write('endbox\n') + data_ctx['box_ended'] = True + out_streams.write(f"system -[#green]> \"{match['comp']}:{match['port']}\": @{match['module']}.{match['message']}\n") + s = match['response'].replace(",", ",\\n").replace("\"", "").strip() + if len(s) > 128: + n = match['hours'] + "_" + match['minutes'] + "_" + match['seconds'] + "_" + match['milliseconds'] + ".txt" + n = os.path.join(MSG_PATH, n) + with open(n, "w") as msg: + msg.write(s) + s = f'[[file://{n} response := ...]]' #{Click to read the message} + out_streams.write(f"note right: {s}\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + elif 'timer_name' in match: + logger.info('Got timer') + if match['timer_name'] == 'tc_sync': + pass + else: + for p in data_ctx['protocol_port']: + if p.startswith(match['comp']): + out_streams.write(f"\"{p}\" -> \"{p}\": {match['start_stop']}, duration: {match['duration']}\n") + break + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + elif 'verdict' in match: + logger.info('Got verdict') + if 'ptcid' in match and match['ptcid'] != None: + s = match['ptcid'].split('(') + s = s[1].split(')') + for p in data_ctx['protocol_port']: + if p.startswith(s[0]): + if match['verdict'] == 'fail': + out_streams.write(f"hnote over \"{p}\" #red: fail\n") + elif match['verdict'] == 'pass': + out_streams.write(f"hnote over \"{p}\" #green: pass\n") + elif match['verdict'] == 'inconc': + out_streams.write(f"hnote across #yellow: inconc\n") + else: + out_streams.write(f"hnote over \"{p}\" #gray: error\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + break + elif 'final_verdict' in match: + logger.info('Got verdict') + if match['final_verdict'] == 'fail': + out_streams.write(f"hnote across #red: fail\n") + elif match['final_verdict'] == 'pass': + out_streams.write(f"hnote across #green: pass\n") + elif match['final_verdict'] == 'inconc': + out_streams.write(f"hnote across #yellow: inconc\n") + else: + out_streams.write(f"hnote across #gray: error\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + out_streams.write('@enduml\n') + else: + logger.info('Got unsupported item') + # End of 'if' statement + out_streams.flush() + # End of function process_line + +def main(): + global MSG_PATH, OUT_FILE_PATH, out_streams, logger, parser, data_ctx + + process_command_line_args() + + # Initialize the logger + logger = logging.getLogger(__name__) + logger.setLevel(logging.DEBUG) + l = logging.StreamHandler() + l.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')) + logger.addHandler(l) + + # Prepare outputs + OUT_FILE_PATH = sys.argv[2] + CURRENT_PATH = os.getcwd() + MSG_PATH = os.path.join(CURRENT_PATH, "msgs") + logger.info(f'CURRENT_PATH:{CURRENT_PATH} - MSG_PATH{MSG_PATH}') + if os.path.exists(MSG_PATH): + files = glob.glob(os.path.join(MSG_PATH, '*')) + for f in files: + os.remove(f) + else: + os.mkdir(MSG_PATH) + + # Setup the regex + parser = regex_list(logger) + parser.reset_state() + + data_ctx = dict() + data_ctx['protocol_port'] = [] + data_ctx['box_ended'] = False + + print(f"IN_FILE_PATH= {IN_FILE_PATH}") + with open(IN_FILE_PATH, "r") as in_stream: + with open(OUT_FILE_PATH, "w") as out_streams: + line = in_stream.readline() + while line != '': + process_line(line) + line = in_stream.readline() + # End of 'for' statement + # End of 'with' statement + # End of 'with' statement + + os.system('java -DPLANTUML_LIMIT_SIZE=8192 -jar ./plantuml.jar -svg {}'.format(OUT_FILE_PATH)) +# End of main function + +if __name__ == "__main__": + main() + +# End of file diff --git a/plantuml/etsi-style.iuml b/plantuml/etsi-style.iuml new file mode 100644 index 0000000000000000000000000000000000000000..e26d257713d678a0011da52cb4400a16a1264b16 --- /dev/null +++ b/plantuml/etsi-style.iuml @@ -0,0 +1,46 @@ +hide footbox +autonumber +skinparam { + dpi 300 + shadowing false + 'handwritten true + defaultFontSize 8 +} + +skinparam note { + FontSize 8 + FontStyle bold + FontColor White + borderColor Black + backgroundColor DimGray +} + +skinparam participant { + FontSize 8 + FontStyle bold + FontColor White + borderColor Navy + backgroundColor RoyalBlue +} + +skinparam actor { + FontSize 8 + FontStyle bold + FontColor Navy + borderColor Navy + backgroundColor RoyalBlue +} + +skinparam sequence { + ArrowFontColor Black + ArrowColor SlateGray + LifeLineBorderColor Navy + LifeLineBackgroundColor DimGray +} + +skinparam ParticipantPadding 5 +skinparam BoxPadding 5 + +!define sendrcvRTP(a,b,c) a <-[#LimeGreen]> b : c +!define sendRTP(a,b,c) a -[#LimeGreen]> b : c +!define setParticipant(a,b) participant a as b diff --git a/plantuml/plantuml.jar b/plantuml/plantuml.jar new file mode 100644 index 0000000000000000000000000000000000000000..506b8c4b818bcb6f8ac254e898da44470cbad888 Binary files /dev/null and b/plantuml/plantuml.jar differ diff --git a/plantuml/regex_list.py b/plantuml/regex_list.py new file mode 100644 index 0000000000000000000000000000000000000000..ecd5fbc6b91347cad5cc1eb0430da2756da2e6f2 --- /dev/null +++ b/plantuml/regex_list.py @@ -0,0 +1,124 @@ +# -*- coding: utf-8 -*- +from __future__ import division # Import floating-point division (1/4=0.25) instead of Euclidian division (1/4=0) + +import logging +import re +import os +class regex_list(object): + """ + For testing purposes: https://regex101.com/ + """ + def __init__(self, p_logger): + self.__logger = p_logger + self.__state = 'none' + self.__flags = re.DOTALL | re.VERBOSE + self.__regexps = dict() + self.__regexps['exec_test'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sTESTCASE\s.*\sTest\scase\s(?P\w+)\sstarted\.$', self.__flags) + self.__regexps['map_port'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sPort\s(?P\w+)\swas\s(?P\w+)\sto\s(?P\w+):(?P\w+)\.$', self.__flags) + self.__regexps['unmap_port'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sPort\s(?P\w+)\swas\s(?P\w+)\sfrom\s(?P\w+):(?P\w+)\.$', self.__flags) + self.__regexps['messages'] = self.__regexps['unmap_port'] + self.__regexps['message_out'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sSent\son\s(?P\w+)\sto\ssystem(\(.*\)){0,1}\s@(?P\w+).(?P\w+)\s:\s\{(?P.+)\}$', self.__flags) + self.__regexps['message_in'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sMessage\senqueued\son\s(?P\w+)\sfrom\ssystem\s@(?P\w+).(?P\w+)\s:\s\{(?P.+)\}\sid\s\w+$', self.__flags) + self.__regexps['timer'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sTIMEROP\s.*\s(?P\w+)\stimer\s(?P\w+):\s(?P\w+).*$', self.__flags) + self.__regexps['final_verdict'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sTESTCASE\s.*\sTest\scase\s(.+)\sfinished\.\sVerdict:\s(?P\w+)$', self.__flags) + self.__regexps['verdict'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sVERDICTOP\s.*\sLocal\sverdict\sof\s(MTC|PTC)(\s(?P.+)){0,1}:\s(?P\w+).*$', self.__flags) + # End of __init__ class + + def reset_state(self): + self.__state = 'exec_test' + self.__logger.info('Reset state: ' + self.__state) + # End of reset_state + + def parse_line(self, p_line): + self.__logger.debug('>>> regex_list::parse_line: ' + self.__get_state()) + self.__logger.debug('regex_list::parse_line: ' + p_line) + + if self.__get_state() == 'exec_test': + m = self.__regexps[self.__state].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + elif self.__get_state() == 'map_port': + m = self.__regexps[self.__state].match(p_line) + if m: + return m.groupdict() + else: # In map_port, check for TTCN-3 message sent ('message_out') and received ('message_in') + m = self.__regexps['message_out'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + else: + m = self.__regexps['message_in'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + else: + m = self.__regexps['timer'].match(p_line) + if m: + return m.groupdict() + elif self.__get_state() == 'messages': + m = self.__regexps[self.__state].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + else: # Check for TTCN-3 message sent ('message_out') and received ('message_in') + m = self.__regexps['message_out'].match(p_line) + if m: + return m.groupdict() + else: + m = self.__regexps['message_in'].match(p_line) + if m: + return m.groupdict() + else: + m = self.__regexps['timer'].match(p_line) + if m: + return m.groupdict() + elif self.__get_state() == 'unmap_port': + m = self.__regexps[self.__state].match(p_line) + if m: + return m.groupdict() + else: # In unmap_port, check for final_verdict + m = self.__regexps['verdict'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + elif self.__get_state() == 'verdict' or self.__get_state() == 'final_verdict': + m = self.__regexps['verdict'].match(p_line) + if m: + return m.groupdict() + else: + m = self.__regexps['final_verdict'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + return None + # End of method parse_line + + def __set_next_state(self): + if self.__state == 'exec_test': + self.__logger.info('regex_list::parse_line: Set state to map_port') + self.__state = 'map_port' + elif self.__state == 'map_port': + self.__logger.info('regex_list::parse_line: Set state to messages') + self.__state = 'messages' + elif self.__state == 'messages': + self.__logger.info('regex_list::parse_line: Set state to unmap_port') + self.__state = 'unmap_port' + elif self.__state == 'unmap_port': + self.__logger.info('regex_list::parse_line: Set state to verdict') + self.__state = 'verdict' + elif self.__state == 'verdict': + self.__logger.info('regex_list::parse_line: Set state to final_verdict') + self.__state = 'final_verdict' + elif self.__state == 'final_verdict': + self.__logger.info('regex_list::parse_line: Terminated') + self.reset_state() + # End of method __set_next_state + + def __get_state(self): + return self.__state + # End of method __get_state + +# End of class regex_list + +# End of file diff --git a/scripts/build_titan.bash b/scripts/build_titan.bash new file mode 100755 index 0000000000000000000000000000000000000000..9d39632ab48255e2ed3ec1e21f67235a07bf108c --- /dev/null +++ b/scripts/build_titan.bash @@ -0,0 +1,106 @@ +#!/bin/bash +# Copyright ETSI 2018 +# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt + +set -e +#set -vx + +clear + +if [ -z "${TOP}" ] +then + echo "Failed, TOP variable not defined, exit" + exit 1 +fi + +CURDIR=`pwd` +TITAN_DIR=${TOP}/.. + +# Move to the right directory +if [ ! -d ${TITAN_DIR} ] +then + echo "Titan directory does not exist, create it" + # Create TITAN directories + mkdir -p ${TITAN_DIR} + if [ ! "$?" -eq "0" ] + then + echo "Failed, TOP variable not defined, exit" + exit 2 + fi + cd ${TITAN_DIR} + # Clone all TITAN repositories + if [ ! -f ${CURDIR}/titan_repos.txt ] + then + echo "${HOME_BIN}/titan_repos.txt file does not exist, exit" + rm -fr ${TOP} + rm -fr ${TOP}/.. + exit 3 + fi + TITAN_REPOS=`cat ${CURDIR}/titan_repos.txt` + for i in ${TITAN_REPOS}; + do + git clone $i + if [ ! "$?" -eq "0" ] + then + echo "Failed to clone $i, exit" + exit 4 + fi + done +else + cd ${TITAN_DIR} + # Update github folders + DIRS=`find . -type d -name ".git" -exec dirname {} \;` + for i in ${DIRS}; + do + echo "Processing $i..." + cd $i + git fetch + if [ ! "$?" -eq "0" ] + then + echo "Failed to fetch $i, continue" + else + git pull + if [ ! "$?" -eq "0" ] + then + echo "Failed to pull $i, continue" + fi + fi + cd - + done +fi + +# Build TITAN core +export JNI=no +export GUI=no +export DEBUG=no +export GEN_PDF=no +if [ -d ${TTCN3_DIR} ] +then + rm -fr ${TTCN3_DIR} +fi +mkdir ${TTCN3_DIR} +cd ./titan.core +/bin/cat < Makefile.personal +JNI:=no +GUI:=no +DEBUG:=no +GEN_PDF:=no +EOF + +# To prevent link error /usr/bin/ld: /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command lineema +sed --in-place 's/LINUX_LIBS := -lxml2/LINUX_LIBS := -lxml2 -lpthread/g' ./core/Makefile + +echo "Starting build..." +make clean +if [ "${OSTYPE}" == "cygwin" ] +then + make -j +else + make +fi +make install +echo "Build done" + +# Go back to initial directory +cd ${CURDIR} +exit 0 diff --git a/scripts/devenv.bash.ubuntu b/scripts/devenv.bash.ubuntu new file mode 100755 index 0000000000000000000000000000000000000000..af00444e6af93e604b0c1188921e1e90d5c64cba --- /dev/null +++ b/scripts/devenv.bash.ubuntu @@ -0,0 +1,73 @@ +#!/bin/bash + +# Turn on debug mode +#set -vx + +set -e + +# Colors and Prompt +#export PS1="\w\$ " +#export PS1="\D{%Y-%m-%d %H:%M:%S} \w\n\$ " + +export TERM=xterm +export EDITOR=emacs +set -o emacs + +# Home working directories +export HOME_FRAMEWORKS=${HOME}/frameworks +export HOME_LIB=${HOME}/lib +export HOME_BIN=${HOME}/bin +export HOME_ETC=${HOME}/etc +export HOME_TMP=${HOME}/tmp +export HOME_DOCS=${HOME}/docs + +# Home common include directory +export HOME_INC=${HOME}/include + +# Update PATH environment variable +export PATH=${HOME_BIN}:${PATH} + +# Update LD_LIBRARY_PATH environment variable +if [ "${LD_LIBRARY_PATH}" == "" ] +then + export LD_LIBRARY_PATH=${HOME_LIB}:/usr/local/lib +else + export LD_LIBRARY_PATH=${HOME_LIB}:/usr/local/lib:${LD_LIBRARY_PATH} +fi + + +# Add JAVA support +export JAVA_VERSION=1.8.0_92 +export JAVA_JDK=jdk${JAVA_VERSION} +if [ -d "${HOME_FRAMEWORKS}/${JAVA_JDK}" ] +then + export JAVA_HOME=${HOME_FRAMEWORKS}/${JAVA_JDK}/bin +else + unset JAVA_VERSION + unset JAVA_JDK +fi + +# Add TITAN support +export TOP=${HOME_FRAMEWORKS}/titan/titan.core +export TTCN3_DIR=${TOP}/Install +if [ -d ${TTCN3_DIR} ] +then + export TTCN3_BROWSER=mozilla + export PATH=${TTCN3_DIR}/bin:${PATH} + export LD_LIBRARY_PATH=${TTCN3_DIR}/lib:${LD_LIBRARY_PATH} + export MANPATH=${TTCN3_DIR}/man:${MANPATH} + export TTCN3_LICENSE_FILE=${TTCN3_DIR}/etc/license/license.dat + export PATH_DEV_TTCN=${HOME}/dev/ttcn3 + # ITS support + export PATH_DEV_ITS=${HOME}/dev/TS.ITS + # Emergency Communication support + export PATH_DEV_EMCOM=${HOME}/dev/AtsImsIot + # Mobile-Edge Computing support + export PATH_DEV_MEC=${HOME}/dev/gs032p3-ttcn-test-suite + # CDM/CISE support + export PATH_DEV_MEC=${HOME}/dev/cise + # Validation folder + export VALIDATION_DIR=${HOME} +fi + +export BROWSER=netsurf diff --git a/scripts/f.bash b/scripts/f.bash new file mode 100755 index 0000000000000000000000000000000000000000..9e2bb399203a9b59c6085597f70effb5d49e2be6 --- /dev/null +++ b/scripts/f.bash @@ -0,0 +1,19 @@ +#!/bin/bash +#set -vx + +if [ "$1" == "" ] +then + echo "Search In Files usage: f.bash " + echo " : With default = ttcn" + echo " e.g.: f.bash module ttcn" + exit 0 +fi + +EXT=ttcn +if [ "$2" != "" ] +then + EXT=$2 +fi +find .. -type f -name "*.$EXT" -exec grep -nH $1 {} \; + +exit $? diff --git a/scripts/generate_png.sh b/scripts/generate_png.sh new file mode 100755 index 0000000000000000000000000000000000000000..7c73718dc96a14fca9f3e76cba9e917204909942 --- /dev/null +++ b/scripts/generate_png.sh @@ -0,0 +1,17 @@ +#!/bin/bash +#set -e +set -vx + +clear + +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi + +cd ../plantuml/ +python3 . ../logs/${ATS}/merged.log ./${ATS}.txt +cd - + +exit 0 diff --git a/scripts/run_all.bash b/scripts/run_all.bash new file mode 100755 index 0000000000000000000000000000000000000000..f5fe4490ed33e548810b911615a0299df7d2a264 --- /dev/null +++ b/scripts/run_all.bash @@ -0,0 +1,60 @@ +#!/bin/bash +#set -e +#set -vx + +clear + +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi + +if ! [[ $1 =~ "^[0-9]+$" ]] +then + COUNTER=$1 +else + COUNTER=1 +fi + +if [ $COUNTER == 0 ] +then + COUNTER=1 + cd .. && make && cd - +fi + +CURPWD=`pwd` +if [ ! "${PWD##*/}" == "scripts" ] +then + cd ../scripts + if [ ! $? == 0 ] + then + echo "Please move to PROJECT/scripts directory" + exit 1 + fi +fi + +rm ../logs/$ATS/*.log + +for i in $(seq 1 1 $COUNTER) +do + ./run_mtc.bash & + ./run_ptcs.bash + + dup=$(ps -ef | grep "$0" | grep -v grep | wc -l) + while [ ${dup} -eq 3 ] + do + sleep 1 + dup=$(ps -ef | grep "$0" | grep -v grep | wc -l) + done + sleep 1 + + if [ -f ../logs/$ATS/merged_formated.log ] + then + mv ../logs/$ATS/merged_formated.log ../logs/$ATS/merged.`date +'%Y%m%d%S'`.log + fi +done + +exit 0 + + diff --git a/scripts/run_mtc.bash b/scripts/run_mtc.bash new file mode 100755 index 0000000000000000000000000000000000000000..1fc0784d8c23b5d80a5d8fc5a7277732df00f470 --- /dev/null +++ b/scripts/run_mtc.bash @@ -0,0 +1,48 @@ +#!/bin/bash +#set -e +#set -vx + +clear + +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi + +CURPWD=`pwd` +if [ ! "${PWD##*/}" == "scripts" ] +then + cd ../scripts + if [ ! $? == 0 ] + then + echo "Please move to PROJECT/scripts directory" + exit 1 + fi +fi + +TITAN_LOG_DIR=../logs/$ATS +if [ ! -d ${TITAN_LOG_DIR} ] +then + mkdir ${TITAN_LOG_DIR} +else + rm -f ${TITAN_LOG_DIR}/*.log +fi + +CFG_FILES=`find ../etc/$ATS -name '*.cfg'` + +echo "> cmtc: to create the MTC server" +echo "> smtc [module_name[[.control]|.testcase_name|.*]: when MyExample is connected, run the TCs in [EXECUTE] section" +echo "> emtc: Terminate MTC." +mctr ${CFG_FILES} + +sudo chown -R `whoami` ${TITAN_LOG_DIR} +LOG_FILES=`find ${TITAN_LOG_DIR} -name '*.log'` +if [ "${TITAN_LOG_DIR}" != "" ] +then + ttcn3_logmerge -o ${TITAN_LOG_DIR}/merged.log ${LOG_FILES} + ttcn3_logformat -o ${TITAN_LOG_DIR}/merged_formated.log ${TITAN_LOG_DIR}/merged.log + echo "log files were merged into ${TITAN_LOG_DIR}/merged_formated.log" +fi + +cd ${CURPWD} diff --git a/scripts/run_ptcs.bash b/scripts/run_ptcs.bash new file mode 100755 index 0000000000000000000000000000000000000000..87cf8bcc643c7af573e512971b7227753dc1c94d --- /dev/null +++ b/scripts/run_ptcs.bash @@ -0,0 +1,31 @@ +#!/bin/bash +#set -e +#set -vx + +clear + +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi + +CURPWD=`pwd` +if [ ! "${PWD##*/}" == "scripts" ] +then + cd ../scripts + if [ ! $? == 0 ] + then + echo "Please move to PROJECT/scripts directory" + exit 1 + fi +fi + +if [ -f ./core ] +then + rm -f ./core +fi + +sudo LD_LIBRARY_PATH=$LD_LIBRARY_PATH ../bin/$ATS 127.0.0.1 12000 + +cd ${CURPWD} diff --git a/scripts/titan_repos.txt b/scripts/titan_repos.txt new file mode 100644 index 0000000000000000000000000000000000000000..8842f4e0283928a94ebbbd37aff6b25fe27c2279 --- /dev/null +++ b/scripts/titan_repos.txt @@ -0,0 +1,56 @@ +https://gitlab.eclipse.org/eclipse/titan/titan.core.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Abstract_Socket.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.HTTPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LANL2asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PCAPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PIPEasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SCTPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SIPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SQLasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TCPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TELNETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UDPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.COMMON.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DIAMETER_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DNS.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTSP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SNMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.TCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.UDP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.XMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.misc.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPasp_RFC4511.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Socket-API.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SSHCLIENTasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.STDINOUTmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SUNRPCasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UNIX_DOMAIN_SOCKETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.IPL4asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.FrameRelay.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.H248_v2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IMAP_4rev1.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICAP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IKEv2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IPsec.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IUA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.JSON_v07_2006.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.L2TP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.M3UA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MIME.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MSRP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.PPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ProtoBuff.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RADIUS_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SRTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.WebSocket.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.HTTP2.0.git +https://gitlab.eclipse.org/eclipse/titan/titan.Libraries.TCCUsefulFunctions.git diff --git a/scripts/update_user_name.sh b/scripts/update_user_name.sh new file mode 100755 index 0000000000000000000000000000000000000000..b5c5d7f3aa7a64d722acac43be8be11ebc2a15df --- /dev/null +++ b/scripts/update_user_name.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Debug mode +#set -e +#set -vx + +# Usage: sudo ./update_user_name.bash +# TODO Use git clone in temporary directory + +USER_NAME='s/etsi/vagrant/g' +for i in `find /home/vagrant/dev/$1 -name "*.cf*"` +do + sed --in-place ${USER_NAME} $i +done + +exit 0 diff --git a/test_purposes/Cx/TP_CX.tplan2 b/test_purposes/Cx/TP_CX.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..bae36f2e95c478eac8ddb240347409b800c0efea --- /dev/null +++ b/test_purposes/Cx/TP_CX.tplan2 @@ -0,0 +1,320 @@ +/* +Copyright (c) ETSI 2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T044 +*/ + + +Package TP_CX { + + import all from Sip_Common; + import all from Diameter_Common; + + Test Purpose { + TP Id TP_CX_HSS_5G_ECO_MAA_01 + //TP_CX_HSS_MAA_01 from TS 103 653-1 V2.1.1 + Test objective "IUT successfully processes all mandatory AVPs in a MA-Request received due to S-CSCF registration notification procedure and sends MA-Answer." + + Reference + "TS 129 228 [3], clause 6.3", + "TS 129 229 [4], clauses 6.1.7 and 6.1.8" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity sends a MAR containing + Session_ID_AVP + Vendor_Specific_Application_Id_AVP + Auth_Session_State_AVP + indicating value NO_STATE_MAINTAINED + Origin_Host_AVP + Origin_Realm_AVP + Destination_Realm_AVP + Public_Identity_AVP + User_Name_AVP + Server_Name_AVP + SIP_Number_Auth_Items_AVP + SIP_Auth_Data_Item_AVP containing + SIP_Authentication_Scheme_AVP + ; + ; + to the IMS_HSS_A entity + } + then { + the IMS_HSS_A entity sends the MAA containing + Session_ID_AVP, + Vendor_Specific_Application_Id_AVP, + Auth_Session_State_AVP, + Origin_Host_AVP, + Origin_Realm_AVP, + not Experimental_Result_AVP, + Result_Code_AVP + indicating value DIAMETER_SUCCESS + User_Name_AVP + SIP_Number_Auth_Items_AVP + SIP_Auth_Data_Item_AVP containing + SIP_Authentication_Scheme_AVP + ; + ; + to the IMS_S_CSCF_A entity + } + } + } // End of TP TP_CX_HSS_5G_ECO_MAA_01 + + Test Purpose { + TP Id TP_CX_HSS_5G_ECO_UAA_01 + //TP_CX_HSS_ECO_UAA_01 from TS 103 795-1 V1.1.1 (LTE) + Test objective "Verify that the IUT successfully processes all mandatory AVPs in a UA-Request received due to first UE emergency registration and sends UA-Answer." + + Reference + "TS 129 228 [3], clause 6.1.1 and tables 6.1.1.1 and 6.1.1.2", + "TS 129 229 [4], clauses 6.1.1 and 6.1.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity sends a UAR containing + Session_ID_AVP + Vendor_Specific_Application_Id_AVP + Auth_Session_State_AVP + indicating value NO_STATE_MAINTAINED, + Origin_Host_AVP + Origin_Realm_AVP + Public_Identity_AVP + Visited_Network_Identifier_AVP + User_Authorization_Type_AVP + indicating value REGISTRATION, + User_Name_AVP + Destination_Host_AVP + Destination_Realm_AVP + UAR_Flags_AVP indicating value '1'; //IMS emergency registration + to the IMS_HSS_A entity + } + then { + the IMS_HSS_A entity sends the UAA containing + Session_ID_AVP, + Vendor_Specific_Application_Id_AVP, + Auth_Session_State_AVP, + Origin_Host_AVP, + Origin_Realm_AVP, + not Result_Code_AVP + Experimental_Result_AVP containing + Experimental_Result_Code_AVP + indicating value DIAMETER_FIRST_REGISTRATION;; + to the IMS_I_CSCF_A entity + } + } + } // End of TP TP_CX_HSS_5G_ECO_UAA_01 + + Test Purpose { + TP Id TP_CX_HSS_5G_ECO_UAA_02 + //TP_CX_HSS_ECO_UAA_02 from TS 103 795-1 V1.1.1 (LTE) + Test objective "Verify that the IUT successfully processes all mandatory AVPs in a UA-Request received due to protected UE emergency registration and sends UA-Answer." + + Reference + "TS 129 228 [3], clause 6.1.1.1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity sends a UAR containing + Public_Identity_AVP + User_Name_AVP + UAR_Flags_AVP indicating value '1'; //IMS emergency registration + to the IMS_HSS_A entity + } + then { + the IMS_HSS_A entity sends the UAA containing + not Result_Code_AVP, + Experimental_Result_AVP containing + Experimental_Result_Code_AVP + indicating value DIAMETER_SUBSEQUENT_REGISTRATION;, + Server_Name_AVP, + not Server_Capabilities_AVP; + to the IMS_I_CSCF_A entity + } + } + } // End of TP TP_CX_HSS_5G_ECO_UAA_02 + + Test Purpose { + TP Id TP_CX_HSS_5G_ECO_UAA_03 + //TP_CX_HSS_UAA_03 from TS 103 653-1 V2.1.1 + Test objective "Verify that the IUT checks that the Private User Identity and the Public User Identity exists in the HSS and if not then IUT sets the appropriate experimental result code in the UA-Answer." + + Reference + "TS 129 228 [3], clause 6.1.1.1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity sends a UAR containing + User_Name_AVP + indicating value "an unknown private user identity" + Public_Identity_AVP + ; + to the IMS_HSS_A entity + } + then { + the IMS_HSS_A entity sends the UAA containing + not Result_Code_AVP, + Experimental_Result_AVP containing + Experimental_Result_Code_AVP + indicating value DIAMETER_ERROR_USER_UNKNOWN;, + not Server_Name_AVP + ; + to the IMS_I_CSCF_A entity + } + } + } // End of TP TP_CX_HSS_5G_ECO_UAA_03 + + Test Purpose { + TP Id TP_CX_HSS_5G_ECO_SAA_01 + //TP_CX_HSS_SAA_01 from TS 103 653-1 V2.1.1 + Test objective "IUT successfully processes all mandatory AVPs in a SA-Request received due to S-CSCF registration notification procedure and sends SA-Answer." + + Reference + "TS 129 228 [3], clause 6.1.2", + "TS 129 229 [4], clauses 6.1.3 and 6.1.4" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity sends a SAR containing + Session_ID_AVP + Vendor_Specific_Application_Id_AVP, + Auth_Session_State_AVP + indicating value NO_STATE_MAINTAINED, + Origin_Host_AVP, + Origin_Realm_AVP, + Public_Identity_AVP, + not User_Name_AVP, + Destination_Realm_AVP, + Server_Name_AVP, + Server_Assignment_Type_AVP + indicating value UNREGISTERED_USER, + User_Data_Already_Available_AVP + ; + to the IMS_HSS_A entity + } + then { + the IMS_HSS_A entity sends the SAA containing + Session_ID_AVP + Vendor_Specific_Application_Id_AVP + Auth_Session_State_AVP + Origin_Host_AVP + Origin_Realm_AVP + Result_Code_AVP + indicating value DIAMETER_SUCCESS + User_Data AVP + Charging_Information_AVP + ; + to the IMS_S_CSCF_A entity + } + } + } // End of TP TP_CX_HSS_5G_ECO_SAA_01 + + Test Purpose { + TP Id TP_CX_HSS_5G_ECO_SAA_03 + //TP_CX_HSS_ECO_SAA_01 from TS 103 795-1 V1.1.1 (LTE) + Test objective "Verify that the IUT successfully processes all mandatory AVPs in a SA-Request received due to S-CSCF registration notification procedure when credentials not matches and sends SA-Answer." + + Reference + "TS 129 228 [3], clause 6.1.2", + "TS 129 229 [4], clauses 6.1.3 and 6.1.4" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity sends a SAR containing + Session_ID_AVP, + Vendor_Specific_Application_Id_AVP, + Auth_Session_State_AVP + indicating value NO_STATE_MAINTAINED, + Origin_Host_AVP, + Origin_Realm_AVP, + Public_Identity_AVP, + not User_Name_AVP, + Destination_Realm_AVP, + Server_Name_AVP, + Server_Assignment_Type_AVP + indicating value AUTHENTICATION_FAILURE //or AUTHENTICATION_TIMEOUT + User_Data_Already_Available_AVP; + to the IMS_HSS_A entity + } + then { + the IMS_HSS_A entity sends the SAA containing + Session_ID_AVP + Vendor_Specific_Application_Id_AVP + Auth_Session_State_AVP + Origin_Host_AVP + Origin_Realm_AVP + Result_Code_AVP + indicating value DIAMETER_SUCCESS + User_Data AVP + Charging_Information_AVP; + to the IMS_S_CSCF_A entity + } + } + } // End of TP TP_CX_HSS_5G_ECO_SAA_03 + +} // End of Package TP_CX + diff --git a/test_purposes/Diameter_Common.tplan2 b/test_purposes/Diameter_Common.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..d9e7cbcc58698f4dcfa647d6ee6d60aa23af4f3a --- /dev/null +++ b/test_purposes/Diameter_Common.tplan2 @@ -0,0 +1,112 @@ +/* +Copyright (c) ETSI 2023. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 +*/ + + + Package Diameter_Common { + Domain { + pics: + - NONE + ; + entities: + - EPC_PCRF_A + - EPC_PCRF_B + - EPC_PGW_A + - EPC_PGW_B + - EPC_MME_A + - EPC_MME_B + - IMS_HSS_A + - IMS_HSS_B + ; + events: + - receives + - sends + - triggers + - detachment + - invokes + - create_session_request + - delete_session_request + - termination_SIP_signalling_session + ; + } // End of Domain section + + Data { + type DiameterMessage; + + // CX DIAMETER Requests/Answers + DiameterMessage UAA; + DiameterMessage UAR; + DiameterMessage MAA; + DiameterMessage MAR; + DiameterMessage SAA; + DiameterMessage SAR; + // RX DIAMETER Requests/Answers + DiameterMessage AAA; + DiameterMessage AAR; + DiameterMessage STA; + DiameterMessage STR; + // GX DIAMETER Requests/Answers + DiameterMessage RAA; + DiameterMessage RAR; + DiameterMessage CCA; + DiameterMessage CCR; + // S6A DIAMETER Requests/Answers + DiameterMessage ULA; + DiameterMessage ULR; + DiameterMessage CLR; + DiameterMessage CLA; + } // End of Data section + + Configuration { + Interface Type defaultGT accepts DiameterMessage; + Component Type DiameterComp with gate g of type defaultGT; + + Test Configuration CF_VxLTE_INT + containing + SUT component EPC_PGW_A of type DiameterComp + SUT component EPC_PCRF_A of type DiameterComp + SUT component S_CSCF_A of type DiameterComp + SUT component I_CSCF_A of type DiameterComp + SUT component P_CSCF_A of type DiameterComp + SUT component HSS_A of type DiameterComp + SUT component EPC_MME_A of type DiameterComp + SUT component IMS_AS_A of type DiameterComp + connection between EPC_MME_A.g and HSS_A.g + connection between EPC_PGW_A.g and EPC_PCRF_A.g + connection between EPC_PCRF_A.g and P_CSCF_A.g + connection between HSS_A.g and S_CSCF_A.g + connection between HSS_A.g and I_CSCF_A.g + connection between IMS_AS_A.g and HSS_A.g + ; + + Test Configuration CF_VxLTE_RMI + containing + SUT component EPC_PGW_B of type DiameterComp + SUT component EPC_PCRF_A of type DiameterComp + SUT component EPC_PCRF_B of type DiameterComp + SUT component P_CSCF_B of type DiameterComp + SUT component HSS_A of type DiameterComp + SUT component EPC_MME_B of type DiameterComp + connection between EPC_MME_B.g and HSS_A.g + connection between EPC_PGW_B.g and EPC_PCRF_B.g + connection between EPC_PCRF_A.g and EPC_PCRF_B.g + connection between EPC_PCRF_B.g and P_CSCF_B.g + ; + + } // End of Configuration section + +} // End of Package Diameter_Common + diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..2424756b040a60a13ee31e75c98b296f897be8bd --- /dev/null +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -0,0 +1,1205 @@ +/* +Copyright (c) ETSI 2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 +*/ + +/* E-CSCF interfaces to + * EATF: I4 + * LRF: Ml + * PSAP: Mm to IP multimedia network for PSAP in the IM CN subsystem of own network + * or Mx to IBCF for PSAP in other network + * or Mi to BGCF (and Mg to MGCF) for PSAP in the PSTN + */ +Package TP_E_CSCF { + + import all from Sip_Common; + + Test Purpose { + + TP Id TP_I4_ECSCF_5G_ECO_INVITE_01 + /* I4 interface at E-CSCF/EATF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the EATF." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2 1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_EATF + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + Contact containing + instanceid_feature_tag + indicating value IMEIURN;, + MessageBody; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_EATF_SERVICE_ROUTE, + Route indicating value PX_E_CSCF_SERVICE_ROUTE_EATF, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_EATF entity + } + } + + } // End of TP_I4_ECSCF_5G_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_ML_ECSCF_5G_ECO_INVITE_01 + /* MI interface at E-CSCF/LRF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the LRF." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_LRF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_LRF entity + } + } + + } // End of TP_ML_ECSCF_5G_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_5G_ECO_INVITE_01 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector, + not PChargingFunctionAddresses, + MessageBody; + to the IM_CN entity + } + } + + } // End of TP_MM_ECSCF_5G_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_5G_ECO_INVITE_02 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network and includes the LRF provided URI in the Route header." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2 and 5.11.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + the IMS_E_CSCF entity supportsRoutingTo the IM_CN + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an r_3xx_Any containing + Contact indicating value LRF_provided_SIP_URI; + from the IMS_LRF entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value LRF_provided_SIP_URI, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + not PChargingFunctionAddresses, + PChargingVector, + MessageBody; + to the IM_CN entity + } + } + + } // End of TP_MM_ECSCF_5G_ECO_INVITE_02 + + Test Purpose { + + TP Id TP_MM_ECSCF_5G_ECO_INVITE_03 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + + Test objective "Verify that the E-CSCF successfully processes an callback INVITE from PSAP over the IM CN subsystem of own network and routes the request to the P-CSCF." + + Reference + "ETSI TS 123 167 [10], Clause 4.1 item 12" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IM_CN entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector, + not PChargingFunctionAddresses, + MessageBody; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MM_ECSCF_5G_ECO_INVITE_03 + + Test Purpose { + + TP Id TP_MX_ECSCF_5G_ECO_INVITE_01 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_IBCF_A_SERVICE_ROUTE, + Route indicating value PX_PSAP_SERVICE_ROUTE_IBCF, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MX_ECSCF_5G_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_MX_ECSCF_5G_ECO_INVITE_02 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network and includes the LRF provided URI in the Route header." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an r_3xx_Any containing + Contact indicating value LRF_provided_SIP_URI; + from the IMS_LRF entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_IBCF_A_SERVICE_ROUTE, + Route indicating value LRF_provided_SIP_URI, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MX_ECSCF_5G_ECO_INVITE_02 + + Test Purpose { + + TP Id TP_MX_ECSCF_5G_ECO_INVITE_03 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a callback INVITE from the PSAP in another network over the IBCF and routes the request to the P-CSCF." + + Reference + "ETSI TS 123 167 [10], Clause 4.1 item 12" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_IBCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_P_SCSF_SERVICE_ROUTE_IBCF, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MX_ECSCF_5G_ECO_INVITE_03 + + Test Purpose { + + TP Id TP_MI_ECSCF_5G_ECO_INVITE_01 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + RequestLine indicating value PX_PSAP_TEL_URI, // see 5.11.2 6) b) + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_BGCF_SERVICE_ROUTE, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_BGCF_A entity + } + } + + } // End of TP_MI_ECSCF_5G_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_MI_ECSCF_5G_ECO_INVITE_02 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN and includes the LRF provided URI in the Request-URI." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + the IMS_E_CSCF entity supportsRoutingTo the BGCF + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an r_3xx_Any containing + Contact indicating value LRF_provided_SIP_URI; + from the IMS_LRF entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + RequestLine indicating value LRF_provided_SIP_URI, // see 5.11.3 2) b) + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_BGCF_SERVICE_ROUTE, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_BGCF_A entity + } + } + + } // End of TP_MI_ECSCF_5G_ECO_INVITE_02 + + Test Purpose { + + TP Id TP_MI_ECSCF_5G_ECO_INVITE_03 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a callback INVITE from PSAP in the PSTN over BGCF and routes the request to the P-CSCF." + + Reference + "ETSI TS 123 167 [10], Clause 4.1 item 12" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_PSAP_TEL_URI,// see 5.11.2 6) b) + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_BGCF_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_BGCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + RequestLine indicating value PX_UE_A_SIP_URI, + From indicating value PX_PSAP_TEL_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_P_CSCD_SERVICE_ROUTE, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MI_ECSCF_5G_ECO_INVITE_03 + + Test Purpose { + + TP Id TP_MM_ECSCF_5G_ECO_BYE_01 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + + Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IM_CN entity + } + } + + } // End of TP_MM_ECSCF_5G_ECO_BYE_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_5G_ECO_BYE_02 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + Test objective "Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; + from the IM_CN entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MM_ECSCF_5G_ECO_BYE_02 + + Test Purpose { + + TP Id TP_MX_ECSCF_5G_ECO_BYE_01 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the IBCF for a PSAP in another network." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MX_ECSCF_5G_ECO_BYE_01 + + Test Purpose { + + TP Id TP_MX_ECSCF_5G_ECO_BYE_02 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a BYE from the IBCF for a PSAP in another network for an Emergency Call and routes the request to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; + from the IMS_IBCF_A entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MX_ECSCF_5G_ECO_BYE_02 + + Test Purpose { + + TP Id TP_MI_ECSCF_5G_ECO_BYE_01 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the BGCF for a PSAP in the PSTN." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_BGCF_A entity + } + } + + } // End of TP_MI_ECSCF_5G_ECO_BYE_01 + + Test Purpose { + + TP Id TP_MI_ECSCF_5G_ECO_BYE_02 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a BYE from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the request to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; + from the IMS_BGCF_A entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MI_ECSCF_5G_ECO_BYE_02 + + Test Purpose { + + TP Id TP_MM_ECSCF_5G_EMC_CANCEL_01 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + + Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + the UE_A entity hasAchievedInitialEmergencyINVITE + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IM_CN entity + } + } + + } // End of TP_MM_ECSCF_5G_EMC_CANCEL_01 + + Test Purpose { + + TP Id TP_MX_ECSCF_5G_EMC_CANCEL_01 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the IBCF for a PSAP in another network." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + the UE_A entity hasAchievedInitialEmergencyINVITE via the IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MX_ECSCF_5G_EMC_CANCEL_01 + + Test Purpose { + + TP Id TP_MI_ECSCF_5G_EMC_CANCEL_01 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the BGCF for a PSAP in the PSTN." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF and + the UE_A entity hasAchievedInitialEmergencyINVITE the PSAP via IMS_BGCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_BGCF_A entity + } + } + + } // End of TP_MI_ECSCF_5G_EMC_CANCEL_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_5G_ECO_480INVITE_01 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + Test objective "Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IM_CN entity + } + then { + the IMS_E_CSCF entity sends a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MM_ECSCF_5G_ECO_480INVITE_01 + + Test Purpose { + + TP Id TP_MX_ECSCF_5G_ECO_480INVITE_01 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a 480 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_IBCF_A entity + } + then { + the IMS_E_CSCF entity sends a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MX_ECSCF_5G_ECO_480INVITE_01 + + Test Purpose { + + TP Id TP_MI_ECSCF_5G_ECO_480INVITE_01 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a 480 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_BGCF_A entity + } + then { + the IMS_E_CSCF entity sends a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MI_ECSCF_5G_ECO_480INVITE_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_5G_EMC_487INVITE_01 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + Test objective "Verify that the E-CSCF successfully processes a 487 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IM_CN entity + } + then { + the IMS_E_CSCF entity sends a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MM_ECSCF_5G_EMC_487INVITE_01 + + Test Purpose { + + TP Id TP_MX_ECSCF_5G_EMC_487INVITE_01 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a 487 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_IBCF_A entity + } + then { + the IMS_E_CSCF entity sends a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MX_ECSCF_5G_EMC_487INVITE_01 + + Test Purpose { + + TP Id TP_MI_ECSCF_5G_EMC_487INVITE_01 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a 487 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clause 5.11.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_BGCF_A entity + } + then { + the IMS_E_CSCF entity sends a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MI_ECSCF_5G_EMC_487INVITE_01 + +} // End of Package TP_E_CSCF + diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..316712ce482827a0362346c638c1f7819d4a9f0e --- /dev/null +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -0,0 +1,753 @@ +/* +Copyright (c) ETSI 2023-2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 / TTF T044 +*/ + +/* Gm interface at UE/P-CSCF */ +Package TP_GM { + + import all from Sip_Common; + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_REGISTER_01 + + Test objective "Verify that the P-CSCF successfully processes initial emergency registration (authorization)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2, 5.2.10.1, 5.1.1.1, 6.1.1 and 6.1.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity not isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization containing + Authentication_Schema indicating value PX_TO_BE_DEFINED, + Authentication_URI indicating value PX_TO_BE_DEFINED, + Username indicating value PX_UE_A_USERNAME, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "", + not term_ioi;, + not SecurityClient, + Contact indicating value "sos"; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 401_Unauthorized containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Path, + Warning, + PAccessNetworkInfo, + WwwAuthenticate containing + Digest, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth";; + to the UE_A entity + } + } + } // End of TP_GM_PCSCF_5G_ECO_REGISTER_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_REGISTER_02 + + Test objective "Verify that the P-CSCF successfully processes a full emergency registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2, 5.2.10.1, 5.1.1.1, 6.1.1 and 6.1.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity hasAchievedFirstRegistration + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization containing + Authentication_Schema indicating value PX_TO_BE_DEFINED, + Authentication_URI indicating value PX_TO_BE_DEFINED, + Username indicating value PX_UE_A_USERNAME, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth", + not SecurityClient, + Contact indicating value "sos";; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + AuthenticationInfo, + PAccessNetworkInfo, + PAssociatedURI indicating value PX_UE_A_SIP_URI, //ListOfImplicitelyRegisteredPublicUserIdentities; + PChargingVector, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA" + Path, + ServiceRoute; + to the UE_A entity + } + } + + } // End of TP_GM_PCSCF_5G_ECO_REGISTER_02 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_REGISTER_03 + + Test objective "Verify that the emergency registration is rejected with 403 (Forbidden) in case invalid credentials sent from UE. (Unsuccessful emergency registration)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity not isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization indicating value "Invalid credentials", + Contact indicating value "sos"; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 403_Forbiden containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA; + to the UE_A entity + } + } + } // End of TP_GM_PCSCF_5G_ECO_REGISTER_03 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_REGISTER_04 + + Test objective "Verify that the emergency registration is rejected with 403 (Forbidden) in case the UE and P-CSCF does not support GPRS-IMS-Bundled authentication. (Unsuccessful emergency registration)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" + + Config Id CF_VoNR_RMI_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_B and + the UE_A entity not isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization not indicating value GPRS_IMS_Bundled_authentication, + Contact indicating value "sos"; + from the UE_A entity + } + then { + the IMS_P_CSCF_B entity sends a 403_Forbidden containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + MessageBody containing + XML containing + ims_3gpp_element indicating value anonymous_emergencycall;;; + to the UE_A entity + } + } + } // End of TP_GM_PCSCF_5G_ECO_REGISTER_04 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_REGISTER_05 + + Test objective "Verify that the emergency registration is rejected with 420 (Bad Extension) in case the UE does not support GPRS-IMS-Bundled authentication while the P-CSCF supports it. (Unsuccessful emergency registration)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" + + Config Id CF_VoNR_RMI_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_B and + the UE_A entity not isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization not indicating value GPRS_IMS_Bundled_authentication, + Contact indicating value "sos"; + from the UE_A entity + } + then { + the IMS_P_CSCF_B entity sends a 420_BadExtension containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Unsupported indicating value sec_agree, + MessageBody containing + XML containing + ims_3gpp_element indicating value anonymous_emergencycall;;; + to the UE_A entity + } + } + } // End of TP_GM_PCSCF_5G_ECO_REGISTER_05 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_INVITE_01 + + Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE." + + Reference + "ETSI TS 124 229 [1], Clause 5.1.6.8.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToEstablishEmergencyCall + } + then { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value "Anonymous", + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, // see 5.1.6.8.2 7 + Route indicating value PX_UE_A_SERVICE_ROUTE, + MessageBody; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_5G_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_INVITE_02 + + Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from an emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clause 5.1.6.8.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToEstablishEmergencyCall + } + then { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + // TODO Geolocation header maybe added later, check! + MessageBody; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_5G_ECO_INVITE_02 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_INVITE_03 + + Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clause 5.1.6.8.4" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + /* This implies that the UE is currently attached and registered + to its home operator's network and the IP-CAN does not define emergency bearers + see 5.1.6.1 3rd paragraph */ + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToEstablishEmergencyCall + } + then { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_5G_ECO_INVITE_03 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_NGC_INVITE_01 + + Test objective "Verify that the P-CSCF successfully receives an initial eCall type INVITE from an emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clause 5.1.6.11" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToEstablisheCallTypeEmergencyCall + } + then { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + Accept indicating value "application/EmergencyCallData.Control+xml", + RecvInfo indicating value "EmergencyCallData.eCall.MSD", + PPreferredIdentity, // one or two instances, + ContentDisposition containing + handling indicating value "optional";, + // TODO Geolocation header maybe added later, check! + MessageBody containing + MIME containing MSD;;; // "application/EmergencyCallData.eCall.MSD" MIME body + // MIME may contain additional parts e.g., sdp, xml + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_5G_NGC_INVITE_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_NGC_INFO_01 + + Test objective "Verify that the P-CSCF successfully receives an INFO from the UE in an + established eCall type emergency call that has been requested to transfer + an updated MSD." + + Reference + "ETSI TS 124 229 [1], Clause 5.1.6.11.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToTransferUpdatedMSD + // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + } + then { + the IMS_P_CSCF_A entity receives an INFO containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + // MSD not exceeding 140 bytes and encoded in binary ASN.1 + ContentDisposition indicating value "By-Reference";; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_5G_NGC_INFO_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_INVITE_05 + + Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clause 5.1.6.8.4" + + Config Id CF_VoNR_RMI_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_B and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + /* This implies that the UE is currently attached and registered + to its home operator's network and the IP-CAN does not define emergency bearers + see 5.1.6.1 3rd paragraph */ + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToEstablishEmergencyCall + } + then { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_5G_ECO_INVITE_05 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_BYE_01 + + Test objective "Verify that the P-CSCF successfully processes a BYE for an emergency call." + + Reference + "ETSI TS 124 229 [1] Clause 5.1.6.9" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend a BYE + } + then { + the IMS_P_CSCF_A entity receives a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_A entity + } + } + + } // End of TP_GM_PCSCF_5G_ECO_BYE_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_EMC_CANCEL_01 + + Test objective "Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity hasAchievedInitialEmergencyINVITE + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend a CANCEL + } + then { + the IMS_P_CSCF_A entity receives a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_A entity + } + } + + } // End of TP_GM_PCSCF_5G_EMC_CANCEL_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_200OK_BYE_01 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5 and 6.1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity sends a 200_Ok containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + to the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a 200_Ok containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + to the UE_A entity + } + } + + } // End of TP_GM_PCSCF_5G_ECO_200OK_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_ECO_200OK_BYE_02 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5 and 6.1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_PSAP_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_PSAP_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_E_CSCF entity + } + } + + } // End of TP_GM_PCSCF_5G_ECO_200OK_02 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_EMC_200OK_CANCEL_01 + // TP_GM_PCSCF_5G_200OK_CANCEL_01 from ETSI TS 103 653-1 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend a CANCEL + } + then { + the IMS_P_CSCF_A entity receives a 200_Ok containing + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + from the IMS_E_CSCF entity + } + } + + } // End of TP_GM_PCSCF_5G_EMC_200OK_CANCEL_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_5G_EMC_487INVITE_01 + // TP_GM_PCSCF_5G_487INVITE_01 from ETSI TS 103 653-1 + + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend an CANCEL + } + then { + the IMS_P_CSCF_A entity sends a 487_INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + to the UE_A entity + } + } + + } // End of TP_GM_PCSCF_5G_EMC_487INVITE_01 + +} // End of Package TP_GM + diff --git a/test_purposes/Http_Common.tplan2 b/test_purposes/Http_Common.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..618be35dba971c20094d26c90b7c3d2ce285574f --- /dev/null +++ b/test_purposes/Http_Common.tplan2 @@ -0,0 +1,151 @@ +/* +Copyright (c) ETSI 2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T044 +*/ + + + Package Rtp_Common { + Domain { + pics: + - NONE + ; + entities: + - EPC_PCRF_A + - EPC_PCRF_B + - EPC_PGW_A + - EPC_PGW_B + - EPC_MME_A + - EPC_MME_B + - IMS_HSS_A + - IMS_HSS_B + - _5GC_PCF_A + ; + events: + - initial_network_attachment + - packets + - media + - filters + - data + - uses_correct_bearers + - service_data_flows + ; + } // End of Domain section + +Data { + type STRING; + type JSON; + type string with s of type STRING; + type IMSI; + type TransportInfo; + + type HttpHeaders with + // content_type is optional, since not present in GET and DELETE + content_type of type STRING, + authorization of type STRING, + accept of type STRING + ; + + type HTTP_REQUEST with + uri of type STRING + ; + + type HttpMsg with + uri of type STRING, + headers of type HttpHeaders, + status_code of type STRING, + // body is optional, since not present in GET and DELETE + body of type JSON + ; + + STRING "application/json;charset=utf-8"; + string CONTENT_JSON containing s set to "application/json;charset=utf-8"; + STRING VALID_TOKEN; + STRING NOT_VALID_TOKEN; + STRING "application/json"; + STRING "application/octet-stream"; + + HttpHeaders vHeadersInvalidToken containing + authorization set to NOT_VALID_TOKEN + ; + + HttpHeaders vHeadersGet containing + accept set to "application/json", + authorization set to VALID_TOKEN + ; + + HttpHeaders vHeadersAcceptKO containing + accept set to "application/octet-stream", + authorization set to VALID_TOKEN + ; + + HttpHeaders vHeaders containing + accept set to CONTENT_JSON, + content_type set to CONTENT_JSON, + authorization set to VALID_TOKEN + ; + + HttpHeaders vHeadersResponse containing + content_type set to CONTENT_JSON + ; + + HttpMsg vGET containing + headers set to vHeadersGet + ; + + HttpMsg vPOST containing + headers set to vHeaders + ; + + HttpMsg vPUT containing + headers set to vHeaders + ; + + HttpMsg vDELETE containing + headers set to vHeadersGet + ; + + HttpMsg HTTP_RESPONSE containing + headers set to vHeadersResponse + ; + + } + + + Configuration { + Interface Type defaultGT accepts HTTP_REQUEST; + Component Type HttpComp with gate g of type defaultGT; + + Test Configuration CF_VoNR_INT_ES + containing + Tester component IMS_PCSCF_A of type HttpComp + Tester component _5GC_PCF_A of type HttpComp + + SUT component IMS_A of type HttpComp + connection between IMS_PCSCF_A.g and _5GC_PCF_A.g + ; + + Test Configuration CF_VoNR_RMI_ES + containing + Tester component EPC_PCF_A of type HttpComp + Tester component EPC_PCF_B of type HttpComp + + SUT component IMS_A of type HttpComp + connection between EPC_PCF_A.g and EPC_PCF_A.g + ; + + } // End of Configuration section + +} // End of Package Diameter_Common + diff --git a/test_purposes/Ic/TP_IC.tplan2 b/test_purposes/Ic/TP_IC.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..f1b8a851cc57f7b5e9b277cc643749494d0122d6 --- /dev/null +++ b/test_purposes/Ic/TP_IC.tplan2 @@ -0,0 +1,59 @@ +/* +Copyright (c) ETSI 2023/2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 / TTF T044 +*/ + + +/* Ic interface at IBCF/IBCF*/ +Package TP_IC { + + import all from Sip_Common; + + + Test Purpose { + TP Id TP_IC_IBCF_5G_ECO_480INVITE_01 + Test objective + "Verify that the IBCF successfully processes a 480 INVITE (Temporary unavailable) originating leg. " + Reference + "TS 124 229 [1], clause 5.10.3.2 and RFC 3261 [18], clause 13.3.1.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the PSAP entity isTemporaryUnavailable + } + + Expected behaviour + ensure that { + when { + the PSAP entity sends a 480_INVITE "addressed to UE_A" to the IMS_A entity + } + then { + the IMS_IBCF_A entity receives the 480_INVITE + from the PSAP entity and + the IMS_IBCF_A entity forwards the 480_INVITE + to the IMS_E_CSCF entity + } + } + } // End of TP_IC_IBCF_ECO_480INVITE_01 + +} // End of Package TP_IC + + + diff --git a/test_purposes/Isc/TP_ISC.tplan2 b/test_purposes/Isc/TP_ISC.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..88fe146aa8aa95c7a00c06388e1d036e5ca50870 --- /dev/null +++ b/test_purposes/Isc/TP_ISC.tplan2 @@ -0,0 +1,66 @@ +/* +Copyright (c) ETSI 2023-2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 / TTF T044 +*/ + +/* Isc interface at S-CSCF<->AS */ +Package TP_ISC { + + import all from Sip_Common; + + Test Purpose { + + TP Id TP_ISC_SCSCF_5G_EMC_INVITE_01 + + Test objective "Verify that the AS successfully identify the request for emergency call and forwards it towards S-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 4.7.3 and 5.7.1.14" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + + } + + Expected behaviour + ensure that { + when { + the IMS_AS_A entity receives an INVITE + from the UE_A entity + } + then { + the IMS_AS_A entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + Request_Uri indicating value PX_SIP_EMERGENCY_SERVICE_URN, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, + PChargingVector, + // TODO Geolocation header maybe added later, check! + MessageBody; + to the IMS_S_CSCF_A entity + } + } + } // End of TP_ISC_SCSCF_EMC_INVITE_01 + + + +} // End of Package TP_ISC + diff --git a/test_purposes/Mw/TP_MW_IS.tplan2 b/test_purposes/Mw/TP_MW_IS.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..5d358f84ce80715b362c2455b83331f45792d9f5 --- /dev/null +++ b/test_purposes/Mw/TP_MW_IS.tplan2 @@ -0,0 +1,252 @@ +/* +Copyright (c) ETSI 2023-2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 / TTF T044 +*/ + +/* Mw interface at I-CSCF/S-CSCF */ +Package TP_MW_IS { + + import all from Sip_Common; + + + + Test Purpose { + + TP Id TP_MW_ICSCF_5G_ECO_REGISTER_01 + + Test objective "Verify that the I-CSCF successfully processes a first registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.1.1 and 6.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity not isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Contact indicating value "sos"; + from the IMS_P_CSCF_A entity + } + then { + the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Path, + Warning, + PAccessNetworkInfo, + WwwAuthenticate containing + Digest, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth";; + to the IMS_S_CSCF_A entity + } + } + } // End of TP_MW_ICSCF_5G_ECO_REGISTER_01 + + Test Purpose { + + TP Id TP_MW_ICSCF_5G_ECO_REGISTER_02 + + Test objective "Verify that the I-CSCF successfully processes a full registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.1.1 and 6.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity hasAchievedFirstREGISTER + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization containing + Authentication_Scheme indicating value PX_TO_BE_DEFINED, + Authentication_URI indicating value PX_TO_BE_DEFINED, + Username indicating value PX_UE_A_USERNAME, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth", + Contact indicating value "sos";; + from the IMS_P_CSCF_A entity + } + then { + the IMS_I_CSCF_A entity sends an 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + AuthenticationInfo, + PAccessNetworkInfo, + PAssociatedURI indicating value PX_UE_A_SIP_URI, + PChargingVector, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA" , + term_ioi_parameter + indicating value "Operator Identifier Of ImsB" + Path, + ServiceRoute; + to the IMS_S_CSCF_A entity + } + } + } // End of TP_MW_ICSCF_5G_ECO_REGISTER_02 + + Test Purpose { + + TP Id TP_MW_ICSCF_5G_ECO_REGISTER_03 + + Test objective "Verify that the I-CSCF successfully processes an registration with invalid credentials (Unsuccessful)." + + Reference + "ETSI TS 124 229 [1], Clause 5.2.2.1 and Clause 6.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity hasAchievedFirstREGISTER + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization indicating value "invalid credentials"; + from the IMS_P_CSCF_A entity + } + then { + the IMS_I_CSCF_A entity sends an 403_Forbiden containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID; + to the IMS_P_CSCF_A entity + } + } + } // End of TP_MW_ICSCF_5G_ECO_REGISTER_03 + + Test Purpose { + + TP Id TP_MW_ICSCF_5G_ECO_REGISTER_04 + + Test objective "Verify that the I-CSCF processes an invalid first registration in visited network and sends 403 response (Unsuccessful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" + + Config Id CF_VoNR_RMI_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_B and + the UE_A entity isNotRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_B entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization indicating value "invalid credentials"; + from the IMS_P_CSCF_B entity + } + then { + the IMS_I_CSCF_B entity sends an 403_Forbiden containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID; + to the IMS_P_CSCF_B entity + } + } + } // End of TP_MW_ICSCF_5G_ECO_REGISTER_04 + + Test Purpose { + + TP Id TP_MW_ICSCF_ECO_REGISTER_05 + + Test objective "Verify that the I-CSCF processes an invalid first registration without SecurityClient header in visited network(GIBA supported) and sends 420 response (Unsuccessful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" + + Config Id CF_VoNR_RMI_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_B and + the UE_A entity isNotRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_B entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + not SecurityClient; + from the IMS_P_CSCF_B entity + } + then { + the IMS_I_CSCF_B entity sends an 420_BadExtension containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID; + to the IMS_P_CSCF_B entity + } + } + } // End of TP_MW_ICSCF_5G_ECO_REGISTER_05 + +} // End of Package TP_MW_IS + diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..e9ba7de959d215c04b200c57fb22d42473c89097 --- /dev/null +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -0,0 +1,912 @@ +/* +Copyright (c) ETSI 2023-2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 / TTF T044 +*/ + +/* Mw interface at P-CSCF/E-CSCF */ +Package TP_MW_PS { + + import all from Sip_Common; + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_REGISTER_01 + + Test objective "Verify that the P-CSCF successfully processes a first emergency registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity not isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Contact indicating value "sos"; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Path indicating value PX_P_CSCF_A_SIP_URI, + PChargingVector containing + icid indicating value PX_TO_BE_DEFINED, + PVisitedNetworkID indicating value PX_TO_BE_DEFINED, + Require indicating value "path", + Supported indicating value "path", + Contact indicating value "sos";; + to the IMS_I_CSCF_A entity + and the IMS_P_CSCF_A entity sends an 401_Unauthorized containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Path, + Warning, + PAccessNetworkInfo, + WwwAuthenticate containing + Digest, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth";; + to the UE_A entity + } + } + } // End of TP_MW_PCSCF_5G_ECO_REGISTER_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_REGISTER_02 + + Test objective "Verify that the P-CSCF successfully processes a full emergency registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity hasAchievedFirstREGISTER + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization containing + Authentication_Scheme indicating value PX_TO_BE_DEFINED, + Authentication_URI indicating value PX_TO_BE_DEFINED, + Username indicating value PX_UE_A_USERNAME, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth", + Contact indicating value "sos";; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization containing + Authentication_Scheme indicating value PX_TO_BE_DEFINED, + Authentication_URI indicating value PX_TO_BE_DEFINED, + Username indicating value PX_UE_A_USERNAME, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth", + PChargingVector, + Contact indicating value "sos";; + to the IMS_I_CSCF_A entity + and the IMS_P_CSCF_A entity sends an 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + AuthenticationInfo, + PAccessNetworkInfo, + PAssociatedURI indicating value PX_UE_A_SIP_URI, + PChargingVector, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA" , + term_ioi_parameter + indicating value "Operator Identifier Of ImsB" + Path, + ServiceRoute; + to the UE_A entity + } + } + } // End of TP_MW_PCSCF_5G_ECO_REGISTER_02 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_REGISTER_03 + + Test objective "Verify that the P-CSCF rejects invalid credentials within registration (Unsuccessful)." + + Reference + "ETSI TS 124 229 [1], Clause 5.2.2.1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_B and + the UE_A entity isNotRegisteredTo the IMS_B and + the UE_B entity isNotRegisteredTo the IMS_B and + the UE_A entity hasAchievedFirstREGISTER + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization indicating value "invalid credentials"; + from the UE_A entity + } + then { + the IMS_P_CSCF_B entity sends a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization indicating value "invalid credentials", + PChargingVector, + PVisitedNetwork; + to the IMS_I_CSCF_B entity + and the IMS_P_CSCF_B entity sends an 403_Forbidden containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID; + to the UE_A entity + } + } + } // End of TP_MW_PCSCF_5G_ECO_REGISTER_03 + + + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_INVITE_01 + + Test objective "Verify that the P-CSCF successfully processes an initial INVITE from an unregistered UE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value "Anonymous", + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + MessageBody; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an INVITE containing + From indicating value "Anonymous", + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, + MessageBody; + to the IMS_E_CSCF entity + } + } + + } // End of TP_MW_PCSCF_5G_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_INVITE_02 + + Test objective "Verify that the P-CSCF successfully processes an initial INVITE from an emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.3 and 5.2.6.3.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + to the IMS_E_CSCF entity + } + } + + } // End of TP_MW_PCSCF_5G_ECO_INVITE_02 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_INVITE_03 + + Test objective "Verify that the P-CSCF successfully processes an initial INVITE from a registered but not emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.4 and 5.2.6.3.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.4 1B) option is assumed + PAssertedIdentity, + MessageBody; + to the IMS_E_CSCF entity + } + } + + } // End of TP_MW_PCSCF_5G_ECO_INVITE_03 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_INVITE_04 + + Test objective "Verify that the P-CSCF rejects an initial INVITE from a not emergency registered UE + if the IM CN subsystem of the P-CSCF is not capable to handle emergency sessions." + + Reference + "ETSI TS 124 229 [1], Clause 5.2.10.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value "Anonymous", + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + MessageBody; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 380_AlternativeService containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + PAssertedIdentity, + MessageBody containing + XML containing + Version indicating value "1", + Type_child indicating value "emergency", + Reason_child, + Action_child;;; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_5G_ECO_INVITE_04 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_INVITE_05 + + Test objective "Verify that the E-CSCF successfully processes a callback INVITE from PSAP towards P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.3 and 5.2.6.3.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_P_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_5G_ECO_INVITE_05 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_480INVITE_01 + + Test objective "Verify that the P-CSCF rejects an initial INVITE from an emergency registered UE + if the E-CSCF informs the P-CSCF that Emergency Services are currently not available." + + Reference + "ETSI TS 124 229 [1], Clause 5.2.10.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity hasAchievedInitialEmergencyINVITE + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 480_INVITE containing // Temporarily Unavailable + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a 380_AlternativeService containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + PAssertedIdentity, + MessageBody containing + XML containing + Version indicating value "1", + Type_child indicating value "emergency", + Reason_child, + Action_child;;; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_5G_ECO_480INVITE_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_380INVITE_01 + + Test objective "Verify that the P-CSCF rejects an initial INVITE from an emergency registered UE + if the IMS is not capable or does not handle emergency sessions." + + Reference + "ETSI TS 124 229 [1], Clause 5.2.10.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 380_AlternativeService containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + PAssertedIdentity, + MessageBody containing + XML containing + Version indicating value "1", + Type_child indicating value "emergency", + Reason_child, + Action_child;;; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_5G_ECO_380INVITE_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_380INVITE_02 + + Test objective "Verify that the P-CSCF rejects an initial INVITE from an emergency registered UE + if received Request-URI is wrong - not in accordance with RFC 5031." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.4 and 5.2.10.5 + RFC 5031" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_WRONG_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 380_AlternativeService containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Content_type, + Via indicating value PX_P_CSCF_A_VIA, + PAssertedIdentity, + MessageBody containing + XML containing + Version indicating value "1", + Type_child indicating value "emergency", + Reason_child, + Action_child;;; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_5G_ECO_380INVITE_02 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_ECO_BYE_01 + + Test objective "Verify that the P-CSCF successfully processes a BYE for an emergency call." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.9, 5.4.5.2 and 6.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_E_CSCF entity + } + } + + } // End of TP_MW_PCSCF_5G_ECO_BYE_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_EMC_CANCEL_01 + + Test objective "Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity hasAchievedInitialEmergencyINVITE and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_E_CSCF entity + } + } + + } // End of TP_MW_PCSCF_5G_EMC_CANCEL_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_EMC_200OK_CANCEL_01 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 200_Ok containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a 200_Ok containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_5G_EMC_200OK_CANCEL_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_EMC_200OK_BYE_01 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_B entity is5GEmergencyRegisteredTo the _5GC_B and + the UE_B entity isEmergencyRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 200_Ok containing + From indicating value PX_UE_B_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_B_CALLID, + Via indicating value PX_UE_B_VIA, + Route indicating value PX_UE_B_SERVICE_ROUTE + ; + from the IMS_S_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends a 200_Ok containing + From indicating value PX_UE_B_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_B_CALLID, + Via indicating value PX_UE_B_VIA, + Route indicating value PX_UE_B_SERVICE_ROUTE + ; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_5G_EMC_200OK_BYE_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_EMC_200OK_BYE_02 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GEmergencyRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_B entity is5GEmergencyRegisteredTo the _5GC_B and + the UE_B entity isEmergencyRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity receives a 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_B_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE + ; + from the IMS_S_CSCF_B entity + } + then { + the IMS_P_CSCF_B entity sends a 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_B_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE + ; + to the UE_B entity + } + } + + } // End of TP_MW_PCSCF_5G_EMC_200OK_BYE_02 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_EMC_487INVITE_01 + // TP_MW_PCSCF_487INVITE_01 from ETSI TS 103 653-1 + + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 487_INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a 487_INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_5G_EMC_487INVITE_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_5G_NGC_INFO_01 + + Test objective "Verify that the P-CSCF sends an INFO request demanding a transfer of updated MSD." + + Reference + "ETSI TS 124 229 [1], clause 5.1.6.11.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_5G_NGC_INFO_01 + +} // End of Package TP_MW_PS + diff --git a/test_purposes/Mw/TP_MW_SI.tplan2 b/test_purposes/Mw/TP_MW_SI.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..74271188eaa36527c9afab91cd7100070812753a --- /dev/null +++ b/test_purposes/Mw/TP_MW_SI.tplan2 @@ -0,0 +1,26 @@ +/* +Copyright (c) ETSI 2023-2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 / TTF T044 +*/ + +/* Mw interface at S-CSCF/IBCF */ +Package TP_MW_SI { + + import all from Sip_Common; + + + +} // End of Package TP_MW_SI + diff --git a/test_purposes/N26/TP_N26_AMF_MME.tplan2 b/test_purposes/N26/TP_N26_AMF_MME.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..38c15cf4b3b1e9b1c0417aa4b805214545776f93 --- /dev/null +++ b/test_purposes/N26/TP_N26_AMF_MME.tplan2 @@ -0,0 +1,138 @@ +/* +Copyright (c) ETSI 2025 +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T044 +*/ + +Package TP_N26_AMF_MME { + + import all from Sip_Common; + import all from Ngnas_Common; + + +//TODO Decide whether to create library for gtp or leave in the present module + + Domain { + events: + - N26_supported + - hasInitiatedFallbackViaN26 + ; + } // End of Domain section + + Data { + + type GtpMessage; + + // ETSI TS 129 274 Table 6.1-1: Message types for GTPv2 + GtpMessage Forward_Relocation_Request; + GtpMessage Forward_Relocation_Response; + GtpMessage Forward_Relocation_Complete_Notification; + GtpMessage Forward_Relocation_Complete_Acknowledge; + } // End of Data section + + Test Purpose { + TP Id TP_N26_AMF_01 + Test objective "Verify that IUT after reception of NGAP HANDOVER REQUIRED from the gNB + sends GTP_v2-C Forward Relocation Request to the MME via the N26 interface." + + Reference + "TS 123 502, Clause 4.11.1, 4.13.4, TS 129 274, Clause 7.3.1" + + Config Id CF_VoNR_FB_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP and + N26_supported + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a HANDOVER_REQUIRED + from the GNB entity + } + then { + the IUT entity sends the Forward_Relocation_Request + to the EPC_MME_A entity + } + } + } // End of TP_N26_AMF_01 + + Test Purpose { + TP Id TP_N26_AMF_02 + Test objective "Verify that IUT after reception of GTP_v2-C Forward Relocation Response from the MME + via the N26 interface sends NGAP HANDOVER_COMMAND to the gNB." + + Reference + "TS 123 502, Clause 4.11.1, 4.13.4, TS 129 274, Clause 7.3.2" + + Config Id CF_VoNR_FB_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP and + N26_supported and IUT hasInitiatedFallbackViaN26 + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a Forward_Relocation_Response + from the EPC_MME_A entity + } + then { + the IUT entity sends the HANDOVER_COMMAND + to the GNB entity + } + } + } // End of TP_N26_AMF_02 + + Test Purpose { + TP Id TP_N26_AMF_03 + Test objective "Verify that IUT after reception of GTP_v2-C Forward Relocation Complete Notification from the MME + via the N26 interface responds GTP_v2-C Forward Relocation Complete Acknowledge to the MME." + + Reference + "TS 123 502, Clause 4.11.1, 4.13.4, TS 129 274, Clause 7.3.3, 7.3.4" + + Config Id CF_VoNR_FB_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP and + N26_supported and IUT hasInitiatedFallbackViaN26 + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a Forward_Relocation_Complete_Notification + from the EPC_MME_A entity + } + then { + the IUT entity sends the Forward_Relocation_Complete_Acknowledge + to the EPC_MME_A entity + } + } + } // End of TP_N26_AMF_03 +} // End Package TP_N26_AMF_MME diff --git a/test_purposes/N5_PCF/TP_N5_PCF.tplan2 b/test_purposes/N5_PCF/TP_N5_PCF.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..eaa3353c84529fba8ef96cd427402e670f618c7c --- /dev/null +++ b/test_purposes/N5_PCF/TP_N5_PCF.tplan2 @@ -0,0 +1,501 @@ +/* +Copyright (c) ETSI 2025 +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T044 +*/ + +// Rx AAR -> N5 Npcf_PolicyAuthorization_Create request -> PCR (TP name) +// POST /npcf-policyauthorization/v1/app-sessions with JSON(ascReqData) +// Rx AAA -> N5 Npcf_PolicyAuthorization_Create response -> PCA (TP name) +// 201 Created with JSON(ascResData) +// Rx AAR -> N5 Npcf_PolicyAuthorization_Update request -> PUR (TP name) +// PATCH /npcf-policyauthorization/v1/app-sessions/{appSessionId} with JSON(ascReqData) +// Rx AAA -> N5 Npcf_PolicyAuthorization_Update response -> PUA (TP name) +// 200 OK with JSON(ascResData) or 204 No Content +// Rx STR -> N5 Npcf_PolicyAuthorization_Delete request -> PDR (TP name) +// DELETE /npcf-policyauthorization/v1/app-sessions/{appSessionId}/delete +// Rx STA -> N5 Npcf_PolicyAuthorization_Delete response -> PDA (TP name) +// 204 No Content +// Rx RAR -> N5 Npcf_PolicyAuthorization_Notify request -> PNR (TP name) +// POST {notifUri}/notify with JSON(evsNotif) +// Rx RAA -> N5 Npcf_PolicyAuthorization_Notify response -> PNA (TP name) +// 204 No Content + +Package TP_N5_PCF { + + //import all from Http_Common; + import all from Sip_Common; + import all from Diameter_Common; + + + Test Purpose { + TP Id TP_N5_PCF_5G_ECO_PCA_01 + + Test objective "Verify that IUT after Npcf_PolicyAuthorization_Create request is received due to provisioning of AF Signaling flow for emergency registration sends Npcf_PolicyAuthorization_Create response." + + Reference + "TS 129 514 [6], Clause 5.3.2.3.1", + "TS 129 514 [6], Clause 5.6.2.3", + "TS 129 514 [6], Clause 5.6.2.4", + "TS 129 514 [6], Annexes A.2, B.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity not is5GRegisteredTo the _5GC_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity sends a vPOST containing + uri indicating value "/npcf-policyauthorization/v1/app_sessions" + body containing + AppSessionContext containing + AppSessionContextReqData containing + suppFeat indicating value "IMS_SBI", + ueIpv4 indicating value "IPv4_Address of UE_A", + "or" ueIpv6 indicating value "IPv6_Address of UE_A", + afReqData indicating value "UE_IDENTITY", + servUrn indicating value "sos*";;;; + to the _5GC_PCF_A entity + } + then { + the _5GC_PCF_A entity sends a HTTP_RESPONSE containing + status set to "201 Created", + headers containing + Location set to "/npcf-policyauthorization/v1/app_sessions/{appSessionId}";, + body containing + AppSessionContext containing + AppSessionContextResData containing + ueIds indicating value "GPSI or PEI or SUPI";;;; + to the IMS_P_CSCF_A entity + } + } + } // End of TP_N5_PCF_5G_ECO_PCA_01 + + Test Purpose { + TP Id TP_N5_PCF_5G_ECO_PCA_02 + + Test objective "Verify that IUT after Npcf_PolicyAuthorization_Create request is received due to AF session for emergency session establishment sends Npcf_PolicyAuthorization_Create response." + + Reference + "TS 129 514 [6], Clause 5.3.2.3.1", + "TS 129 514 [6], Clause 5.6.2.3", + "TS 129 514 [6], Clause 5.6.2.4", + "TS 129 514 [6], Annexes A.2, B.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity sends a vPOST containing + uri indicating value "/npcf-policyauthorization/v1/app_sessions" + body containing + AppSessionContext containing + AppSessionContextReqData containing + suppFeat indicating value "IMS_SBI", + ueIpv4 indicating value "IPv4_Address of UE_A", + "or" ueIpv6 indicating value "IPv6_Address of UE_A", + afReqData indicating value "UE_IDENTITY", + servUrn indicating value "sos*";;;; + to the _5GC_PCF_A entity + } + then { + the IMS_P_CSCF_A entity receives a HTTP_RESPONSE containing + status set to "201 Created", + headers containing + Location set to "/npcf-policyauthorization/v1/app_sessions/{appSessionId}";, + body containing + AppSessionContext containing + AppSessionContextResData containing + ueIds indicating value "GPSI or PEI or SUPI";;;; + from the _5GC_PCF_A entity + } + } + } // End of TP_N5_PCF_5G_ECO_PCA_02 + + Test Purpose { + TP Id TP_N5_PCSCF_5G_ECO_PCR_01 + + Test objective "Verify that IUT, after Emergency REGISTER, sends a Npcf_PolicyAuthorization_Create request due to provisioning of AF Signaling flow." + + Reference + "TS 129 514 [6], Clause 5.3.2.3.1", + "TS 129 514 [6], Clause 5.6.2.3", + "TS 129 514 [6], Clause 5.6.2.4", + "TS 129 514 [6], Annexes A.2, B.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity not is5GRegisteredTo the _5GC_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends a REGISTER + to the IMS_P_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends a vPOST containing + uri indicating value "/npcf-policyauthorization/v1/app_sessions", + body containing + AppSessionContext containing + AppSessionContextReqData containing + suppFeat indicating value "IMS_SBI", + ueIpv4 indicating value "IPv4_Address of UE_A", + "or" ueIpv6 indicating value "IPv6_Address of UE_A", + afReqData indicating value "UE_IDENTITY", + servUrn indicating value "sos*";;;; + to the _5GC_PCF_A entity + and the IMS_P_CSCF_A entity receives a HTTP_RESPONSE containing + status set to "201 Created", + headers containing + Location set to "/npcf-policyauthorization/v1/app_sessions/{appSessionId}";, + body containing + AppSessionContext containing + AppSessionContextResData containing + ueIds indicating value "GPSI or PEI or SUPI";;;; + from the _5GC_PCF_A entity + } + } + } // End of TP_N5_PCSCF_5G_ECO_PCR_01 + + Test Purpose { + TP Id TP_N5_PCSCF_5G_ECO_PCR_02 + + Test objective "Verify that IUT sends a Npcf_PolicyAuthorization_Create request in case of emergency session establishment for originating side after INVITE is received." + + Reference + "TS 129 514 [6], Clause 5.3.2.3.1", + "TS 129 514 [6], Clause 5.6.2.3", + "TS 129 514 [6], Clause 5.6.2.4", + "TS 129 514 [6], Annexes A.2, B.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE_Request_with_SDP_offer + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends the vPOST containing + uri indicating value "/npcf-policyauthorization/v1/app_sessions", + body containing + AppSessionContext containing + AppSessionContextReqData containing + suppFeat indicating value "IMS_SBI", + ueIpv4 indicating value "IPv4_Address of UE_A", + "or" ueIpv6 indicating value "IPv6_Address of UE_A", + afReqData indicating value "UE_IDENTITY", + servUrn indicating value "sos*";;;; + to the _5GC_PCF_A entity + and the IMS_P_CSCF_A entity receives a HTTP_RESPONSE containing + status set to "201 Created", + headers containing + Location set to "/npcf-policyauthorization/v1/app_sessions/{appSessionId}";, + body containing + AppSessionContext containing + AppSessionContextResData containing + ueIds indicating value "GPSI or PEI or SUPI";;;; + from the _5GC_PCF_A entity + } + } + } // End of TP_N5_PCSCF_5G_ECO_PCR_02 + + Test Purpose { + TP Id TP_N5_PCSCF_5G_ECO_PUR_04 + + Test objective "Verify that IUT sends an Npcf_PolicyAuthorization_Update request in case of session establishment for originating side after 183 response with SDP answer is received." + + Reference + "TS 129 514 [6], Clause 5.3.2.3.1", + "TS 129 514 [6], Clause 4.2.3", + "TS 129 514 [6], Clause 5.6.2.3", + "TS 129 514 [6], Clause 5.6.2.4", + "TS 129 514 [6], Annexes B.1, B.2 and B.5" + //See also TS 129 513 Figure B.2.1-2 + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 183_Response_INVITE_with_SDP_offer + from the IMS_S_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends the vPATCH containing + uri indicating value "/npcf-policyauthorization/v1/app-sessions/{appSessionId}", + body containing + ascReqData containing + suppFeat indicating value "IMS_SBI", + ueIpv4 indicating value "IPv4_Address of UE_A", + "or" ueIpv6 indicating value "IPv6_Address of UE_A", + servInfStatus indicating value "FINAL";;; + to the _5GC_PCF_A entity + } + } + } // End of TP_N5_PCSCF_5G_ECO_PUR_04 + + Test Purpose { + TP Id TP_N5_PCF_5G_ECO_PUA_01 + + Test objective "Verify that IUT after Npcf_PolicyAuthorization_Update request is received due to AF session for emergency session establishment sends Npcf_PolicyAuthorization_Update response." + + Reference + "TS 129 514 [6], Clause 5.3.2.3.1", + "TS 129 514 [6], Clause 4.2.3", + "TS 129 514 [6], Clause 5.6.2.3", + "TS 129 514 [6], Clause 5.6.2.4", + "TS 129 514 [6], Annexes B.1, B.2 and B.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity sends the vPATCH containing + uri indicating value "/npcf-policyauthorization/v1/app-sessions/{appSessionId}", + body containing + ascReqData containing + suppFeat indicating value "IMS_SBI", + ueIpv4 indicating value "IPv4_Address of UE_A", + "or" ueIpv6 indicating value "IPv6_Address of UE_A", + servInfStatus indicating value "FINAL";;; + to the _5GC_PCF_A entity + } + then { + the IMS_P_CSCF_A entity receives a HTTP_RESPONSE containing + status set to "200 OK", + headers containing + Location set to "/npcf-policyauthorization/v1/app_sessions/{appSessionId}";, + body containing + AppSessionContext containing + AppSessionContextResData containing + ueIds indicating value "GPSI or PEI or SUPI";;;; + from the _5GC_PCF_A entity + } + } + } // End of TP_N5_PCF_5G_ECO_PUA_01 + + Test Purpose { + TP Id TP_N5_PCSCF_5G_ECO_PNA_01 + Test objective "Verify that IUT sends 204 No Content after Npcf_PolicyAuthorization_Notify request is received from PCF." + + Reference + "TS 129 514 [6], Clause 4.2.5", + "TS 129 514 [6], Clause 5.3.2.3.1", + "TS 129 514 [6], clause 5.5.2", + "TS 129 514 [6], Clause 5.6.2.3", + "TS 129 514 [6], Clause 5.6.2.4", + "TS 129 514 [6], Annex B.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the _5GC_PCF_A entity sends a vPOST containing + uri indicating value "{notifUri}/notify", + body containing + evsNotif containing + event_ indicating value "SUCCESSFUL_RESOURCES_ALLOCATION", + succResourcAllocReports indicating value "any_value";;; + to the IMS_P_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends the HTTP_RESPONSE containing + status set to "204 No Content"; + to the _5GC_PCF_A entity + } + } + } // End of TP_N5_PCSCF_5G_ECO_PNA_01 + + Test Purpose { + TP Id TP_N5_PCF_5G_ECO_PDA_02 + + Test objective "Verify that IUT after reception of Npcf_PolicyAuthorization_Delete request sends Npcf_PolicyAuthorization_Delete response." + + Reference + "TS 129 514 [6], Clause 4.2.4.2", + "TS 129 514 [6], Clause 5.3.4.3.2", + "TS 129 514 [6], Annex B.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity sends an vDELETE containing + uri indicating value "/npcf-policyauthorization/v1/app-sessions/{appSessionId}/delete"; + to the _5GC_PCF_A entity + } + then { + the _5GC_PCF_A entity sends the HTTP_RESPONSE containing + status set to "204 No Content"; + to the IMS_P_CSCF_A entity + } + } + } // End of TP_N5_PCF_5G_ECO_PDA_02 + + Test Purpose { + TP Id TP_N5_PCSCF_5G_ECO_PDR_01 + Test objective "Verify that IUT after reception of BYE sends an Npcf_PolicyAuthorization_Delete request at originating leg." + + Reference + "TS 129 514 [6], Clause 4.2.4.2", + "TS 129 514 [6], Clause 5.3.4.3.2", + "TS 129 514 [6], Annex B.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a BYE + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends the vDELETE containing + uri indicating value "/npcf-policyauthorization/v1/app-sessions/{appSessionId}/delete"; + to the _5GC_PCF_A entity + } + } + } // End of TP_N5_PCSCF_5G_ECO_PDR_01 + + Test Purpose { + TP Id TP_N5_PCSCF_5G_ECO_PDR_03 + Test objective "Verify that IUT after reception of CANCEL sends an Npcf_PolicyAuthorization_Delete request at originating leg." + + Reference + "TS 129 514 [6], Clause 4.2.4.2", + "TS 129 514 [6], Clause 5.3.4.3.2", + "TS 129 514 [6], Annex B.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a CANCEL + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends the vDELETE containing + uri indicating value "/npcf-policyauthorization/v1/app-sessions/{appSessionId}/delete"; + to the _5GC_PCF_A entity + } + } + } // End of TP_N5_PCSCF_5G_ECO_PDR_03 + + Test Purpose { + TP Id TP_N5_PCSCF_5G_ECO_PDR_05 + Test objective "Verify that IUT after reception of 486 response sends an Npcf_PolicyAuthorization_Delete request at originating leg." + + Reference + "TS 129 514 [6], Clause 4.2.4.2", + "TS 129 514 [6], Clause 5.3.4.3.2", + "TS 129 514 [6], Annex B.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 486_Response_INVITE + from the IMS_S_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends the vDELETE containing + uri indicating value "/npcf-policyauthorization/v1/app-sessions/{appSessionId}/delete"; + to the _5GC_PCF_A entity + } + } + } // End of TP_N5_PCSCF_5G_ECO_PDR_05 + +} // End of Package TP_N5_PCF + diff --git a/test_purposes/Ngnas_Common.tplan2 b/test_purposes/Ngnas_Common.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..cc94b01805d893196676e711e433527e8d38176f --- /dev/null +++ b/test_purposes/Ngnas_Common.tplan2 @@ -0,0 +1,399 @@ +/* ETSI Software License +* As long as the here under conditions are respected, non-exclusive permission is hereby granted, +* free of charge, to use, reproduce and modify this software source code, under the following conditions: +* This source code is provided AS IS with no warranties, express or implied, including but not limited to, +* the warranties of merchant ability, fitness for a particular purpose and warranties for non-infringement +* of intellectual property rights. +* ETSI shall not be held liable in any event for any direct or indirect damages whatsoever (including, without +* limitation, damages for loss of profits, business interruption, loss of information, or any other pecuniary +* loss) arising out of or related to the use of or inability to use the source code. +* This permission is granted to facilitate the implementation of the related ETSI standard, provided that +* ETSI is given the right to use, reproduce and amend the modified source code under the same conditions +* as the present permission. +* This permission does not apply to any documentation associated with this source code for which ETSI keeps +* all rights reserved. +* The present ETSI Source Code license shall be included in all copies of whole or part of this source code +* and shall not imply any sub-license right. +* (c) ETSI 2023-2024 +*/ + + +Package Ngnas_Common { + Domain { + pics: + - NONE + //5G NAS PICS + - PICS_A2/1 //AMF + - PICS_A3/1 //5GMM-DEREGISTERED + - PICS_A3/2 //5GMM-COMMON-PROCEDURE-INITIATED + - PICS_A3/3 //5GMM-REGISTERED + - PICS_A3/4 //5GMM-DEREGISTERED-INITIATED + - PICS_A3/5 //5GSM-PDU SESSION INACTIVE + - PICS_A3/6 //5GSM-PDU SESSION ACTIVE + - PICS_A3/7 //5GSM-PDU SESSION INACTIVE PENDING + - PICS_A3/8 //5GSM-PDU SESSION MODIFICATION PENDING + - PICS_A3/9 //5GSM-PROCEDURE TRANSACTION INACTIVE + - PICS_A3/10 //5GSM-PROCEDURE TRANSACTION PENDING + - PICS_A4/1 //5GMM-Primary authentication and key agreement procedures + - PICS_A4/1_1 //Initiation and control of the EAP based primary authentication and key agreement procedures + - PICS_A4/1_2 //Initiation and control of the 5G AKA based primary authentication and key agreement procedures + - PICS_A4/1_2_1_1 //Provision of new authentication parameters to the UE on receipt of an AUTHENTICATION FAILURE message containing 5GMM cause #21 "synch failure" + - PICS_A4/1_2_1_2 //Termination of the 5G AKA based primary authentication and key agreement procedure with AUTHENTICATION REJECT on receipt of two consecutive AUTHENTICATION FAILURE message containing 5GMM cause #21 "synch failure" + - PICS_A4/1_2_2_1 //Initiation of the identification procedure on receipt of an AUTHENTICATION FAILURE message containing 5GMM cause #20 "MAC failure" + - PICS_A4/1_2_2_2 //Termination of the 5G AKA based primary authentication and key agreement procedure on receipt of an AUTHENTICATION FAILURE message containing 5GMM cause #20 "MAC failure" + - PICS_A4/1_2_3_1 //Initiation of the identification procedure on receipt of an AUTHENTICATION FAILURE message containing 5GMM cause #26 "non-5G authentication unacceptable" + - PICS_A4/1_2_3_2 //Termination of the 5G AKA based primary authentication and key agreement procedure on receipt of an AUTHENTICATION FAILURE message containing 5GMM cause #26 "non-5G authentication unacceptable" + - PICS_A4/1_2_4 //Re-initiation of the 5G AKA based primary authentication and key agreement procedure on receipt of an AUTHENTICATION FAILURE message containing 5GMM cause #71 "ngKSI already in use" + - PICS_A4/2 //Security mode control procedures + - PICS_A4/2_1 //Initiation of the security mode control procedure to take a 5G NAS security context into use, and initialise and start NAS signalling security + - PICS_A4/2_2 //Initiation of the security mode control procedure to change the 5G NAS security algorithms for a current 5G NAS security context already in use + - PICS_A4/2_3 //Initiation of the security mode control procedure to change the value of uplink NAS COUNT used in the latest SECURITY MODE COMPLETE message + - PICS_A4/2_4 //Initiation of the security mode control procedure to provide the Selected EPS NAS security algorithms to the UE + - PICS_A4/3 //Identification procedures + - PICS_A4/4 //Generic UE configuration update procedures + - PICS_A4/5 //NAS transport procedures + - PICS_A4/5_1 //UE-initiated NAS transport procedures (receipt of UL NAS TRANSPORT messages) + - PICS_A4/5_1_1 //Sending back to the UE 5GSM messages which were not forwarded due to abnormal case on the network side + - PICS_A4/5_2 //Network-initiated NAS transport procedures (sending of DL NAS TRANSPORT messages) + - PICS_A4/6 //5GMM status procedures + - PICS_A4/7 //Network slice-specific authentication and authorization procedures + - PICS_A4/8 //Registration procedures + - PICS_A4/8_1 //Initial registration procedures + - PICS_A4/8_1_1_1 //Initiation of 5GMM common procedures during the initial registration procedure + - PICS_A4/8_1_1_2 //Skipping of the authentication procedure during an (initial) emergency registration procedure, if the AMF is configured to support emergency registration for unauthenticated SUCIs + - PICS_A4/8_1_2_1 //Inclusion of service area restrictions in the Service area list IE in the REGISTRATION ACCEPT message + - PICS_A4/8_1_2_2 //Inclusion of a list of equivalent PLMNs in the REGISTRATION ACCEPT message + - PICS_A4/8_1_2_3 //Inclusion of rejected NSSAI (S-NSSAIs which are included in the requested NSSAI in the REGISTRATION REQUEST message but rejected by the network) in the REGISTRATION ACCEPT message + - PICS_A4/8_1_2_4 //Inclusion of operator-defined access category definitions in the REGISTRATION ACCEPT message + - PICS_A4/8_2 //Registration procedures for mobility and periodic registration update + - PICS_A4/8_2_1_1 //Initiation of 5GMM common procedures during the mobility and periodic registration update procedure + - PICS_A4/8_2_1_2 //Skipping of the authentication procedure during the registration procedure for mobility and periodic registration update for a UE that has only an emergency PDU session + - PICS_A4/8_2_2_1 //Inclusion of a new TAI list for the UE in the REGISTRATION ACCEPT message + - PICS_A4/8_2_2_2 //Inclusion of a list of equivalent PLMNs in the REGISTRATION ACCEPT message + - PICS_A4/8_2_2_3 //Inclusion of new service area restrictions in the Service area list IE in the REGISTRATION ACCEPT message + - PICS_A4/8_2_2_4 //Inclusion of rejected NSSAI (S-NSSAIs which are included in the requested NSSAI in the REGISTRATION REQUEST message but rejected by the network) in the REGISTRATION ACCEPT message + - PICS_A4/8_2_2_5 //Inclusion of the LADN information IE in the REGISTRATION ACCEPT message + - PICS_A4/8_2_2_6 //Inclusion of operator-defined access category definitions in the REGISTRATION ACCEPT message + - PICS_A4/9 //Deregistration procedures + - PICS_A4/9_1 //UE-initiated deregistration procedures + - PICS_A4/9_2 //Network-initiated deregistration procedures + - PICS_A4/9_2_1 //Inclusion of the 5GMM cause IE to specify the reason for the deregistration in the DEREGISTRATION REQUEST message + - PICS_A4/10 //Service request procedures + - PICS_A4/10_1 //Initiation of common procedures during the service request procedure (receipt of SERVICE REQUEST or CONTROL PLANE SERVICE REQUEST message) + - PICS_A4/11 //Paging procedures + - PICS_A4/11_1 //Re-initiation of network paging on expiry of timer T3513 + - PICS_A4/12 //Notification procedures + - PICS_A5/1 //PDU session authentication and authorization procedures + - PICS_A5/2 //Network-requested PDU session modification procedures + - PICS_A5/3 //Network-requested PDU session release procedures + - PICS_A5/6 //UE-requested PDU session establishment procedures + - PICS_A5/6_1 //Inclusion of the Back-off timer value IE in the PDU SESSION ESTABLISHMENT REJECT message, if a PDU session establishment procedure is not accepted by the network + - PICS_A5/7 //UE-requested PDU session modification procedures + - PICS_A5/7_1 //Inclusion of the Back-off timer value IE in the PDU SESSION MODIFICATION REJECT message, if a PDU session modification procedure is not accepted by the network + - PICS_A5/8 //UE-requested PDU session release procedures + - PICS_A5/9 //5GMM status procedures + - PICS_A5/10 //Exchange of extended protocol configuration options + - PICS_A6/1 //Procedures for handling of unknown, unforeseen, and erroneous protocol data? + - PICS_A6/1_1 //Handling (i.e., ignoring) of messages that are too short to contain a complete message type information element + - PICS_A6/1_2_1 //Handling of an unknown, erroneous, or unforeseen PTI received in a 5GSM message + - PICS_A6/1_2_2 //Handling of an unknown, erroneous, or unforeseen PDU session identity received in the header of a 5GSM message + - PICS_A6/1_3 //Sending of a 5GMM STATUS or 5GSM STATUS message (depending on the EPD) with cause #97 "message type non-existent or not implemented" on receipt of a message with message type not defined for the EPD or not implemented by the receiver + - PICS_A6/1_4_1 //Treating messages (see note) received with non-semantical mandatory information element errors + - PICS_A6/1_4_2 //Ignoring messages (see note) received with non-semantical mandatory information element errors + - PICS_A6/1_4_3 //Rejection of PDU SESSION ESTABLISHMENT REQUEST, PDU SESSION MODIFICATION REQUEST, and PDU SESSION RELEASE REQUEST messages with cause #96 "invalid mandatory information" when an error is encountered with a mandatory information element in the 5GSM message + - PICS_A6/1_5 //Handling of messages containing unknown or unforeseen (out of sequence, repeated) IEs in the non-imperative message part + - PICS_A6/1_6_1 //Treating messages received missing a conditional IE or containing an unexpected or a syntactically incorrect conditional IE + - PICS_A6/1_6_2 //Ignoring messages received missing a conditional IE or containing an unexpected or a syntactically incorrect conditional IE + - PICS_A6/1_6_2_1 //Returning a status message (5GMM STATUS or 5GSM STATUS depending on the EPD) with cause #100 "conditional IE error" when ignoring a message received missing a conditional IE or containing an unexpected or a syntactically incorrect conditional IE + - PICS_A6/1_7 //Responding to messages (where a reaction is foreseen) with semantically incorrect contents with status messages (5GMM STATUS or 5GSM STATUS depending on the EPD) with cause #95 "semantically incorrect message + + ; + entities: + - UE + - GNB + - AMF + - IUT + ; + events: + - receives + - sends + - forwards + - isRequestedToPlaceACall + - aborts + // Initial conditions + - isNotRegisteredTo + - hasAchievedFirstRegistration + - isRegisteredTo + - isNotAttachedTo + - isAttachedTo + - isNotConfiguredForTopologyHiding + - isConfiguredForTopologyHiding + - isExistingIn + - isNotAppropriateToServe + - establishedSecurityRelation + - registeredIdentityTelURI + - registeredIdentitySipURI + - hasInitiatedDialogWith + - hasInitiatedPS2CSinEarlydialog + - hasInitiatedPS2CSinAlertingState + - hasEstablishedDialog + - hasEstablishedPS2CSDialog + - hasEstablishedInitialContext + - hasEstablishedRRCConnection + - hasEstablishedContextInproperly + - hasEstablishedPDUsessionWithSameId + - hasEstablishedPDUsession + - isConfiguredWithENUMentryForTelURI_E164NumberOf + - hasReceivedInitialRequestForDialog + - hasReceived200OkOnInitialRequestForDialogWith + - hasReceived180OnInitialRequest + - hasReceived200OkCancel + - hasReceivedTerminatedRequest + - hasReceivedNASMessage + - hasReceivedPAGINGMessage + - hasReceivedOVERLOADSTARTtMessage + - hasSuspendedContext + - hasPendingDataTransmission + - registeredPublicIdsWithTelUriAndSipUri + - hasReceivedSubsequentOrTargetRefreshRequestInDialog + - previouslyEstablishedCallWith + - isRequestedToSend + - isRequestedToDeregisterUser + - isBusy + - isNoLongerAvailable + - isTriggeredToDetachUser + - isRequestedToDetachfromNetwork + - isTransitioningTo + - hasAchievedFirstREGISTER + - hasResponded486INVITE + - hasAchievedInitialINVITE + - hasAchievedINVITE + - hasAchievedUPDATEuponINVITE + - timerOperatorSpecificTimeout //NOTE: 8 seconds is an appropriate value for the operator policy. + - isAttachingToNetwork + - hasDoneSubscription + - indicate + - trigger + - isCMIDLE + - isCMCONNECTED + - alreadyPreparedHandover + - completedHandover + - isInOverloadedState + - indicates + ; + event templates: + /* This template can be used as default AUTHENTICATION REQUEST message within a DOWNLINK NAS TRANSFER message. */ + - AUTHENTICATION_REQUEST { + the IUT entity sends an DOWNLINK_NAS_TRANSFER containing + NAS_PDU containing + extended_protocol_discriminator set to 5GS_MOBILITY_MANAGEMENT_MESSAGE, //reference ts_124007v180200p: Table 11.2.3.1.1A.1: EPD values + security_header_type set to NOT_SECURITY_PROTECTED, + spare_half_octet, + authentication_request_message_identity set to AUTHENTICATION_REQUEST, + ngKSI containing + nas_key_set_identifier set to "111" + ;, + spare_half_octet, + ABBA, + Authentication_parameter_RAND, + Authentication_parameter_AUTN + ; + ; + to the UE entity + } + ; + } // End of Domain section + + Data { + + type NgapMessage; + type Cause; + type Bitstring; + type PIXIT; + + PIXIT PX_WRONG_ARP_IEI; //0x20 + PIXIT PX_WRONG_ARP_IEI; //0x20 + + //Table 8.1-1 + NgapMessage AMF_CONFIGURATION_UPDATE; + NgapMessage AMF_CONFIGURATION_UPDATE_ACKNOWLEDGE; + NgapMessage AMF_CONFIGURATION_UPDATE_FAILURE; + NgapMessage RAN_CONFIGURATION_UPDATE; + NgapMessage RAN_CONFIGURATION_UPDATE_ACKNOWLEDGE; + NgapMessage RAN_CONFIGURATION_UPDATE_FAILURE; + NgapMessage HANDOVER_CANCEL; + NgapMessage HANDOVER_CANCEL_ACKNOWLEDGE; + NgapMessage HANDOVER_REQUIRED; + NgapMessage HANDOVER_COMMAND; + NgapMessage HANDOVER_PREPARATION_FAILURE; + NgapMessage HANDOVER_REQUEST ; + NgapMessage HANDOVER_REQUEST_ACKNOWLEDGE; + NgapMessage HANDOVER_FAILURE; + NgapMessage INITIAL_CONTEXT_SETUP_REQUEST; + NgapMessage INITIAL_CONTEXT_SETUP_RESPONSE; + NgapMessage INITIAL_CONTEXT_SETUP_FAILURE; + NgapMessage NG_RESET; + NgapMessage NG_RESET_ACKNOWLEDGE; + NgapMessage NG_SETUP_REQUEST; + NgapMessage NG_SETUP_RESPONSE; + NgapMessage NG_SETUP_FAILURE; + NgapMessage PATH_SWITCH_REQUEST; + NgapMessage PATH_SWITCH_REQUEST_ACKNOWLEDGE; + NgapMessage PATH_SWITCH_REQUEST_FAILURE; + NgapMessage PDU_SESSION_RESOURCE_MODIFY_REQUEST; + NgapMessage PDU_SESSION_RESOURCE_MODIFY_RESPONSE; + NgapMessage PDU_SESSION_RESOURCE_MODIFY_INDICATION; + NgapMessage PDU_SESSION_RESOURCE_MODIFY_CONFIRM; + NgapMessage PDU_SESSION_RESOURCE_RELEASE_COMMAND; + NgapMessage PDU_SESSION_RESOURCE_RELEASE_RESPONSE; + NgapMessage PDU_SESSION_RESOURCE_SETUP_REQUEST; + NgapMessage PDU_SESSION_RESOURCE_SETUP_RESPONSE; + NgapMessage UE_CONTEXT_MODIFICATION_REQUEST; + NgapMessage UE_CONTEXT_MODIFICATION_RESPONSE; + NgapMessage UE_CONTEXT_MODIFICATION_FAILURE; + NgapMessage UE_CONTEXT_RELEASE_COMMAND; + NgapMessage UE_CONTEXT_RELEASE_COMPLETE; + NgapMessage WRITE_REPLACE_WARNING_REQUEST; + NgapMessage WRITE_REPLACE_WARNING_RESPONSE; + NgapMessage PWS_CANCEL_REQUEST; + NgapMessage PWS_CANCEL_RESPONSE; + NgapMessage UE_RADIO_CAPABILITY_CHECK_REQUEST; + NgapMessage UE_RADIO_CAPABILITY_CHECK_RESPONSE; + NgapMessage UE_CONTEXT_SUSPEND_REQUEST; + NgapMessage UE_CONTEXT_SUSPEND_RESPONSE; + NgapMessage UE_CONTEXT_SUSPEND_FAILURE; + NgapMessage UE_CONTEXT_RESUME_REQUEST; + NgapMessage UE_CONTEXT_RESUME_RESPONSE; + NgapMessage UE_CONTEXT_RESUME_FAILURE; + NgapMessage UE_RADIO_CAPABILITY_ID_MAPPING_REQUEST; + NgapMessage UE_RADIO_CAPABILITY_ID_MAPPING_RESPONSE; + + //Table 8.1-2 + NgapMessage DOWNLINK_RAN_CONFIGURATION_TRANSFER; + NgapMessage DOWNLINK_RAN_STATUS_TRANSFER; + NgapMessage DOWNLINK_NAS_TRANSPORT; + NgapMessage ERROR_INDICATION; + NgapMessage UPLINK_RAN_CONFIGURATION_TRANSFER; + NgapMessage UPLINK_RAN_STATUS_TRANSFER; + NgapMessage HANDOVER_NOTIFY; + NgapMessage INITIAL_UE_MESSAGE; + NgapMessage NAS_NON_DELIVERY_INDICATION; + NgapMessage PAGING; + NgapMessage PDU_SESSION_RESOURCE_NOTIFY; + NgapMessage REROUTE_NAS_REQUEST; + NgapMessage UE_CONTEXT_RELEASE_REQUEST; + NgapMessage UPLINK_NAS_TRANSPORT; + NgapMessage AMF_STATUS_INDICATION; + NgapMessage PWS_RESTART_INDICATION; + NgapMessage PWS_FAILURE_INDICATION; + NgapMessage DOWNLINK_UE_ASSOCIATED_NRPPA_TRANSPORT; + NgapMessage UPLINK_UE_ASSOCIATED_NRPPA_TRANSPORT; + NgapMessage DOWNLINK_NON_UE_ASSOCIATED_NRPPA_TRANSPORT; + NgapMessage UPLINK_NON_UE_ASSOCIATED_NRPPA_TRANSPORT; + NgapMessage TRACE_START; + NgapMessage TRACE_FAILURE_INDICATION; + NgapMessage DEACTIVATE_TRACE; + NgapMessage CELL_TRAFFIC_TRACE; + NgapMessage LOCATION_REPORTING_CONTROL; + NgapMessage LOCATION_REPORTING_FAILURE_INDICATION; + NgapMessage LOCATION_REPORT; + NgapMessage UE_TNLA_BINDING_RELEASE_REQUEST; + NgapMessage UE_RADIO_CAPABILITY_INFO_INDICATION; + NgapMessage RRC_INACTIVE_TRANSITION_REPORT; + NgapMessage OVERLOAD_START; + NgapMessage OVERLOAD_STOP; + NgapMessage SECONDARY_RAT_DATA_USAGE_REPORT; + NgapMessage UPLINK_RIM_INFORMATION_TRANSFER; + NgapMessage DOWNLINK_RIM_INFORMATION_TRANSFER; + NgapMessage RETRIEVE_UE_INFORMATION; + NgapMessage UE_INFORMATION_TRANSFER; + NgapMessage RAN_CP_RELOCATION_INDICATION; + NgapMessage CONNECTION_ESTABLISHMENT_INDICATION; + NgapMessage AMF_CP_RELOCATION_INDICATION; + NgapMessage HANDOVER_SUCCESS; + NgapMessage UPLINK_RAN_EARLY_STATUS_TRANSFER; + NgapMessage DOWNLINK_RAN_EARLY_STATUS_TRANSFER; + + NgapMessage SECURITY_MODE_COMPLETE; + NgapMessage SECURITY_MODE_REJECT; + + //Table 8.2 + NgapMessage AUTHENTICATION_REQUEST; + NgapMessage AUTHENTICATION_RESPONSE; + + // Table 9.3.1: Security header type + Bitstring PLAIN_5GS_NAS_MESSAGE; // 0 0 0 0 , not security protected + Bitstring INTEGRITY_PROTECTED; // 0 0 0 1 + Bitstring INTEGRITY_PROTECTED_AND_CIPHERED; // 0 0 1 0 + Bitstring INTEGRITY_PROTECTED_WITH_NEW_5G_NAS_SECURITY_CONTEXT; // 0 0 1 1 + Bitstring INTEGRITY_PROTECTED_AND_CIPHERED_WITH_NEW_5G_NAS_SECURITY_CONTEXT; // 0 1 0 0 + + //Section 9.11.3.2 + Cause MAC_failure; + + + + } // End of Data section + + Configuration { + Interface Type defaultGT accepts NgapMessage; + Component Type NgapComponent with gate g of type defaultGT; + Component Type NgapComponent with gate g2 of type defaultGT; + + + Test Configuration CF_GNB_N2N1 + containing + Tester component AMF of type NgapComponent + SUT component IUT of type NgapComponent + connection between AMF.g and IUT.g; + + Test Configuration CF_AMF_N2N1 + containing + Tester component GNB of type NgapComponent + SUT component IUT of type NgapComponent + connection between GNB.g and IUT.g; + + + Test Configuration CF_GNB_2N2 + containing + Tester component AMF of type NgapComponent + SUT component IUT of type NgapComponent + connection between AMF.g and IUT.g; + + Test Configuration CF_AMF_2N2 + containing + Tester component GNB of type NgapComponent + SUT component IUT of type NgapComponent + connection between GNB.g and IUT.g; + + + Test Configuration CF_GNB_N2N1 + containing + Tester component AMF of type NgapComponent + SUT component IUT of type NgapComponent + connection between AMF.g and IUT.g; + + Test Configuration CF_AMF_N2N1 + containing + Tester component GNB of type NgapComponent + SUT component IUT of type NgapComponent + connection between GNB.g and IUT.g; + + + Test Configuration CF_GNB_2N2N1 + containing + Tester component AMF of type NgapComponent + SUT component IUT of type NgapComponent + connection between AMF.g and IUT.g; + + Test Configuration CF_AMF_2N2N1 + containing + Tester component GNB of type NgapComponent + SUT component IUT of type NgapComponent + connection between GNB.g and IUT.g; + + } + + +} // End of Package Ngnas_Common + diff --git a/test_purposes/README.md b/test_purposes/README.md new file mode 100644 index 0000000000000000000000000000000000000000..924aa0afe903abf814c8f57836732ea3015f76d7 --- /dev/null +++ b/test_purposes/README.md @@ -0,0 +1 @@ +This folder will contain the Test Purposes. They are defined in the TPLan2 language. \ No newline at end of file diff --git a/test_purposes/References.txt b/test_purposes/References.txt new file mode 100644 index 0000000000000000000000000000000000000000..330320f2c38722615f8dbe6ee82b58b32631bb6b --- /dev/null +++ b/test_purposes/References.txt @@ -0,0 +1,13 @@ + +[1] ETSI TS 124 229: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; IP multimedia call control protocol based on Session Initiation Protocol (SIP) and Session Description Protocol (SDP); Stage 3 (3GPP TS 24.229 Release 16.16)". +[2] ETSI TS 129 165: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; Inter-IMS Network to Network Interface (NNI) (3GPP TS 29.165 Release 16.6)". +[3] ETSI TS 129 228: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; IP Multimedia (IM) Subsystem Cx and Dx Interfaces; Signalling flows and message contents (3GPP TS 29.228 Release 16.1)". +[4] ETSI TS 129 229: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; Cx and Dx interfaces based on the Diameter protocol; Protocol details (3GPP TS 29.229 Release 16.3)". +[5] ETSI TS 129 214: "Universal Mobile Telecommunications System (UMTS); LTE; Policy and charging control over Rx reference point (3GPP TS 29.214 Release 16.8)". +[6] ETSI TS 129 514: "5G; 5G System; Policy Authorization Service; Stage 3 (3GPP TS 29.514 Release 16.21)". +[7] ETSI TS 124 501: "5G; Non-Access-Stratum (NAS) protocol for 5G System (5GS); Stage 3 (3GPP TS 24.501 version 16.14.0 Release 16)". +[8] ETSI ES 203 119-4: "Methods for Testing and Specification (MTS); The Test Description Language (TDL); Part 4: Structured Test Objective Specification (Extension)". +[9] IETF RFC 3261: "SIP: Session Initiation Protocol". +[10] ETSI TS 123 167: "IP Multimedia Subsystem (IMS) emergency sessions". +[11] IETF RFC 5031: "A Uniform Resource Name (URN) for Emergency and Other Well-Known Services". +[12] ETSI TS 123 228: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; IP Multimedia Subsystem (IMS); Stage 2 (3GPP TS 23.228 version 16.7.0 Release 16)". diff --git a/test_purposes/Rtp/TP_Rtp.tplan2 b/test_purposes/Rtp/TP_Rtp.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..91ccd7e57e903a0f43dfd99f2cfc7a2be2f51c89 --- /dev/null +++ b/test_purposes/Rtp/TP_Rtp.tplan2 @@ -0,0 +1,91 @@ +/* +Copyright (c) ETSI 2023-2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 / TTF T044 +*/ + + +Package TP_RTP { + + import all from Sip_Common; + //import all from Diameter_Common; + import all from Rtp_Common; + + + + Test Purpose { + TP Id TP_RTP_ECO_01 + // TP_RTP_UE_01 from VxLTE TTF T006 + Test objective "Verify that media between UE_A/IVS and PSAP is not delivered in any direction before call establishment." + + Reference + "TS 124 229 [1], clause 6" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends packets to the PSAP entity and + the PSAP entity sends packets to the UE_A entity + } + then { + the PSAP entity not receive media from the UE_A entity and + the UE_A entity not receive media from the PSAP entity + } + + } + } // End of TP_RTP_ECO_01 + + + Test Purpose { + TP Id TP_RTP_ECO_03 + // TP_RTP_UE_03 from VxLTE TTF T006 + Test objective "Verify that media between UE_A and UE_B is successfully routed." + + Reference + "TS 124 229 [1], clause 6" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends packets to the PSAP entity and + the PSAP entity sends packets to the UE_A entity + } + then { + the PSAP entity receives media from the UE_A entity and + the UE_A entity receives media from the PSAP entity + } + + } + } // End of TP_RTP_ECO_03 + + +} // End of Package TP_RTP diff --git a/test_purposes/Rtp_Common.tplan2 b/test_purposes/Rtp_Common.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..6cb40b5d2f2c33c69e62e05213bea820808e61de --- /dev/null +++ b/test_purposes/Rtp_Common.tplan2 @@ -0,0 +1,74 @@ +/* +Copyright (c) ETSI 2023. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 +*/ + + + Package Rtp_Common { + Domain { + pics: + - NONE + ; + entities: + - EPC_PCRF_A + - EPC_PCRF_B + - EPC_PGW_A + - EPC_PGW_B + - EPC_MME_A + - EPC_MME_B + - IMS_HSS_A + - IMS_HSS_B + ; + events: + - initial_network_attachment + - packets + - media + - filters + - data + - uses_correct_bearers + - service_data_flows + ; + } // End of Domain section + + Data { + type RtpMessage; + } // End of Data section + + Configuration { + Interface Type defaultGT accepts RtpMessage; + Component Type RtpComp with gate g of type defaultGT; + + Test Configuration CF_VxLTE_INT + containing + Tester component EPC_PGW_A of type RtpComp + Tester component EPC_PCRF_A of type RtpComp + + SUT component IMS_A of type RtpComp + connection between EPC_PGW_A.g and EPC_PCRF_A.g + ; + + Test Configuration CF_VxLTE_RMI + containing + Tester component EPC_PCRF_A of type RtpComp + Tester component EPC_PCRF_B of type RtpComp + + SUT component IMS_A of type RtpComp + connection between EPC_PCRF_A.g and EPC_PCRF_A.g + ; + + } // End of Configuration section + +} // End of Package Diameter_Common + diff --git a/test_purposes/Rx/TP_RX.tplan2 b/test_purposes/Rx/TP_RX.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..17c65c9c28e7109d3de1296126e4bc10cbae870c --- /dev/null +++ b/test_purposes/Rx/TP_RX.tplan2 @@ -0,0 +1,382 @@ +/* +Copyright (c) ETSI 2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T044 +*/ + + +Package TP_RX { + + import all from Sip_Common; + import all from Diameter_Common; + + + + Test Purpose { + TP Id TP_RX_PCRF_5G_ECO_AAA_01 + + Test objective "Verify that IUT after AA-Request is received due to provisioning of AF Signalling flow for emergency registration sends AA-Answer." + + Reference + "TS 129 214 [5], Annexes A.5 and E.1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity not is5GRegisteredTo the _5GC_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity sends an AAR + to the _5GC_PCF_A entity + } + then { + the _5GC_PCF_A entity sends the AAA containing + Result_Code_AVP + indicating value DIAMETER_SUCCESS + Subscription_Id_AVP containing + Subscription_Id_Type_AVP + indicating value END_USER_IMSI;, //or END_USERE_164 + "and/or" + User_Equipment_Info_AVP containing + User_Equipment_Info_Type + indicating value IMEISV, + User_Equipment_Info_Value;; + to the IMS_P_CSCF_A entity + } + } + } // End of TP_RX_PCRF_5G_ECO_AAA_01 + + Test Purpose { + TP Id TP_RX_PCRF_5G_ECO_AAA_02 + + Test objective "Verify that IUT after AA-Request is received due to AF session for emergency session establishment sends AA-Answer." + + Reference + "TS 129 214 [5], Annexes A.5 and E.1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity sends an AAR + to the _5GC_PCF_A entity + } + then { + the _5GC_PCF_A entity sends the AAA containing + Result_Code_AVP + indicating value DIAMETER_SUCCESS + Subscription_Id_AVP containing + Subscription_Id_Type_AVP + indicating value END_USER_IMSI;, //or END_USERE_164 + "and/or" + User_Equipment_Info_AVP containing + User_Equipment_Info_Type + indicating value IMEISV, + User_Equipment_Info_Value;; + to the IMS_P_CSCF_A entity + } + } + } // End of TP_RX_PCRF_5G_ECO_AAA_02 + + Test Purpose { + TP Id TP_RX_PCSCF_5G_ECO_AAR_01 + + Test objective "Verify that IUT after Emergency REGISTER sends an AA-Request due to provisioning of AF Signalling flow." + + Reference + "TS 129 214 [5], Annexes A.5 and E.1" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity not is5GRegisteredTo the _5GC_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends a REGISTER + to the IMS_P_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends an AAR containing + Framed_IPv4_Address_AVP + indicating value "IPv4_Address of UE_A", + "or" Framed_IPv6_Address_AVP + indicating value "IPv6_Address of UE_A", + AF_Requested_Data_AVP + indicating value "EPC-level identities required", + Service_URN_AVP + indicating value "sos*"; + to the _5GC_PCF_A entity + } + } + } // End of TP_RX_PCSCF_5G_ECO_AAR_01 + + + Test Purpose { + TP Id TP_RX_PCSCF_5G_ECO_AAR_02 + + Test objective "Verify that IUT send AA-Request in case of emergency session establishment for originating side after INVITE is received." + + Reference + "TS 129 214 [5], Annexes A.5 and E.1" //clauses 4.4.1, A.1, A.2 and annex B" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE_Request_with_SDP_offer + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends the AAR containing + Framed_IPv4_Address_AVP + indicating value "IPv4_Address of UE_A", + "or" Framed_IPv6_Address_AVP + indicating value "IPv6_Address of UE_A", + Service_URN_AVP + indicating value "sos*"; + to the _5GC_PCF_A entity + } + } + } // End of TP_RX_PCSCF_5G_ECO_AAR_02 + + Test Purpose { + TP Id TP_RX_PCSCF_5G_ECO_AAR_04 + //TP_RX_PCSCF_AAR_04 from TS 103 795-1 V1.1.1 (LTE) + Test objective "Verify that IUT send AA-Request in case of session establishment for originating side after 183 response with SDP is received." + + Reference + "TS 129 214 [5], clauses 4.4.1, A.1, A.2 and Annex B" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 183_Response_INVITE_with_SDP_offer + from the IMS_S_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends the AAR containing + Framed_IPv4_Address_AVP + indicating value "IPv4_Address of UE_A", + "or" Framed_IPv6_Address_AVP + indicating value "IPv6_Address of UE_A", + "one or more" Media_Component_Description_AVP + Rx_Request_Type_AVP + indicating value UPDATE_REQUEST '(1)', + Service_Info_Status_AVP + indicating value FINAL_SERVICE_INFORMATION '(1)' + ; + to the _5GC_PCF_A entity + } + } + } // End of TP_RX_PCSCF_5G_ECO_AAR_04 + + Test Purpose { + TP Id TP_RX_PCSCF_5G_ECO_RAA_01 + //TP_RX_PCSCF_RAA_01 from TS 103 795-1 V1.1.1 (LTE) + //RAR/RAA messages optional due to ETSI 129 213 but described in below references + Test objective "Verify that IUT sends RA-Answer after RAR is received from PCRF." + + Reference + "TS 129 214 [5], clauses 4.4.6.2, 5.3.13 and A.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the _5GC_PCF_A entity sends a RAR containing + Specific_Action_AVP + indicating value INDICATION_OF_SUCCESSFUL_RESOURCES_ALLOCATION '(8)'; + to the IMS_P_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends the RAA containing + Result_Code_AVP + indicating value DIAMETER_SUCCESS "(2001)"; + to the _5GC_PCF_A entity + } + } + } // End of TP_RX_PCSCF_5G_ECO_RAA_01 + + Test Purpose { + TP Id TP_RX_PCRF_5G_ECO_STA_02 + //TP_RX_PCRF_STA_02 from TS 103 795-1 V1.1.1 (LTE) + Test objective "Verify that IUT after reception of ST-Request sends ST-Answer." + + Reference + "TS 129 214 [5], clauses 4.4.4, 4.4.5, A.8 and A.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity sends an STR + to the _5GC_PCF_A entity + } + then { + the _5GC_PCF_A entity sends the STA containing + Result_Code_AVP + indicating value DIAMETER_SUCCESS; + to the IMS_P_CSCF_A entity + } + } + } // End of TP_RX_PCRF_5G_ECO_STA_02 + + Test Purpose { + TP Id TP_RX_PCSCF_5G_ECO_STR_01 + //TP_RX_PCSCF_STR_01 from TS 103 795-1 V1.1.1 (LTE) + Test objective "Verify that IUT after reception of BYE sends an ST-Request at originating leg." + + Reference + "TS 129 214 [5], clause 4.4.4 and Annex A.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a BYE + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends the STR containing + Session_Id_AVP; + to the _5GC_PCF_A entity + } + } + } // End of TP_RX_PCSCF_5G_ECO_STR_01 + + Test Purpose { + TP Id TP_RX_PCSCF_5G_ECO_STR_03 + //TP_RX_PCSCF_STR_03 from TS 103 795-1 V1.1.1 (LTE) + Test objective "Verify that IUT after reception of CANCEL sends an ST-Request at originating leg." + + Reference + "TS 129 214 [5], clause 4.4.4 and Annex A.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a CANCEL + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends the STR containing + Session_Id_AVP; + to the _5GC_PCF_A entity + } + } + } // End of TP_RX_PCSCF_5G_ECO_STR_03 + + Test Purpose { + TP Id TP_RX_PCSCF_5G_ECO_STR_05 + //TP_RX_PCSCF_STR_05 from TS 103 795-1 V1.1.1 (LTE) + Test objective "Verify that IUT after reception of 486 response sends an ST-Request at originating leg." + + Reference + "TS 129 214 [5], clause 4.4.4 and A.5" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity is5GRegisteredTo the _5GC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 486_Response_INVITE + from the IMS_S_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends the STR containing + Session_Id_AVP; + to the _5GC_PCF_A entity + } + } + } // End of TP_RX_PCSCF_5G_ECO_STR_05 + +} // End of Package TP_RX + diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..3d9c0d5f3d5b3339960efdd6c27c9c8d503c882f --- /dev/null +++ b/test_purposes/Sip_Common.tplan2 @@ -0,0 +1,351 @@ +/* +Copyright (c) ETSI 2023. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 +*/ + + +Package Sip_Common { + Domain { + pics: + - NONE + - PICS_2 + - NOT_PICS_2 + ; + entities: + - UE_A + - UE_B + - NW_UE_A + - NW_UE_B + - Enum_DB + - IMS_A + - IMS_B + - _5GC_A + - _5GC_B + - _5GC_PCF_A + - _5GC_PCF_B + - EPC_PCRF_A + - EPC_PCRF_B + - EPC_PGW_A + - EPC_PGW_B + - EPC_MME_A + - EPC_MME_B + - IMS_EATF + - IMS_LRF + - IMS_E_CSCF + - IMS_P_CSCF_A + - IMS_I_CSCF_A + - IMS_S_CSCF_A + - IMS_BGCF_A + - IMS_IBCF_A + - IMS_AS_A + - IMS_HSS_A + - IMS_P_CSCF_B + - IMS_I_CSCF_B + - IMS_S_CSCF_B + - IMS_IBCF_B + - IMS_HSS_B + - IM_CN // IM CN subsystem of own network + - BGCF + - PSAP + ; + events: + - receives + - sends + - forwards + // to express route to PSAP + - via + // Initial conditions + - isTriggeredToStart + - isTriggeredToStartEmergencyCall + - isNotRegisteredTo + - hasAchievedFirstRegistration + - isRegisteredTo + - isEmergencyRegisteredTo + - isNotAttachedTo + - is5GRegisteredTo + - is5GEmergencyRegisteredTo + - isNotConfiguredForTopologyHiding + - isConfiguredForTopologyHiding + - isExistingIn + - establishedSecurityRelation + - registeredIdentityTelURI + - registeredIdentitySipURI + - hasInitiatedDialogWith + - isConfiguredWithENUMentryForTelURI_E164NumberOf + - hasReceivedInitialRequestForDialog + - hasReceived200OkOnInitialRequestForDialogWith + - hasReceived180OnInitialRequest + - hasReceived200OkCancel + - hasReceivedTerminatedRequest + - registeredPublicIdsWithTelUriAndSipUri + - hasReceivedSubsequentOrTargetRefreshRequestInDialog + - previouslyEstablishedCallWith + - previouslyEstablishedEmergencyCallWith + - isRequestedToSend + - isRequestedToEstablishEmergencyCall + - isRequestedToEstablisheCallTypeEmergencyCall + - isRequestedToTransferUpdatedMSD + - isRequestedToDeregisterUser + - isBusy + - isTemporaryUnavailable + - isNoLongerAvailable + - isTriggeredToDetachUser + - isRequestedToDetachfromNetwork + - hasAchievedFirstREGISTER + - hasResponded486INVITE + - hasAchievedInitialINVITE + - hasAchievedInitialEmergencyINVITE + - hasAchievedINVITE + - hasSentINVITETo + - supportsRoutingTo + - supportsCallbackTo + ; + } // End of Domain section + +// Const { +// PX_Stored_Domain_Uri, +// PX_Affected_IMPU, +// PX_Contact, +// PX_UE_A_SIP_URI, +// PX_UE_A_TEL_URI, +// PX_UE_A_CALLID, +// PX_UE_A_REALM, +// PX_UE_A_USERNAME, +// PX_UE_A_INVALID_USERNAME, +// PX_UE_A_VIA, +// PX_UE_A_AUTH_ALG, +// PX_OPERATOR_ID_A, +// PX_UE_B_SIP_URI, +// PX_UE_B_TEL_URI, +// PX_UE_B_USERNAME, +// PX_UE_B_INVALID_USERNAME, +// PX_UE_B_VIA, +// PX_UE_B_AUTH_ALG, +// PX_OPERATOR_ID_B, +// PX_P_CSCF_A_SIP_URI, +// PX_IMS_A_ICID, +// PX_IMS_A_ORIG_IOI, +// PX_S_CSCF_A_SIP_URI, +// PX_P_CSCF_A_SIP_URI, +// PX_IBCF_B_SIP_URI, +// PX_TO_BE_DEFINED +// ; +// } // End of Const section + + Data { + type SipMessage; + type EnumMessage; + + SipMessage REGISTER; + SipMessage SUBSCRIBE; + SipMessage INVITE; + SipMessage ACK; + SipMessage CANCEL; + SipMessage BYE; + // SIP Responses + SipMessage r_100_Trying; + SipMessage r_180_Ringing; + SipMessage r_200_Ok; + SipMessage r_2xx_Any; + SipMessage r_3xx_Any; + SipMessage r_380_AlternativeService; + SipMessage r_401_Unauthorized; + SipMessage r_403_Forbidden; + SipMessage r_404_NotFound; + SipMessage r_486_INVITE; + SipMessage r_4xx_Any; + } // End of Data section + + Configuration { + Interface Type defaultGT accepts SipMessage; + Interface Type enumGT accepts EnumMessage; + + Component Type SipComponent with gate g of type defaultGT; + Component Type SipEnumComponent with gate gSip of type defaultGT gate gEnum of type enumGT; + Component Type EnumDBComponent with gate gEnum of type enumGT; + + Test Configuration CF_VxLTE_INT + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_A of type SipComponent + SUT component IMS_S_CSCF_A of type SipComponent + SUT component IMS_I_CSCF_A of type SipComponent + SUT component IMS_AS_A of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + connection between UE_A.g and IMS_P_CSCF_A.g + connection between IMS_P_CSCF_A.g and IMS_S_CSCF_A.g + connection between IMS_S_CSCF_A.g and IMS_I_CSCF_A.g + connection between IMS_I_CSCF_A.g and IMS_IBCF_A.g + connection between IMS_IBCF_A.g and IMS_IBCF_B.g + connection between IMS_S_CSCF_A.g and IMS_AS_A.g + ; + + Test Configuration CF_VoLTE_INT_ES + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_A of type SipComponent + SUT component IMS_S_CSCF_A of type SipComponent + SUT component IMS_I_CSCF_A of type SipComponent + SUT component IMS_AS_A of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + connection between UE_A.g and IMS_P_CSCF_A.g + connection between IMS_P_CSCF_A.g and IMS_S_CSCF_A.g + connection between IMS_S_CSCF_A.g and IMS_I_CSCF_A.g + connection between IMS_I_CSCF_A.g and IMS_IBCF_A.g + connection between IMS_IBCF_A.g and IMS_IBCF_B.g + connection between IMS_S_CSCF_A.g and IMS_AS_A.g + ; + + Test Configuration CF_VoNR_INT_ES + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_A of type SipComponent + SUT component IMS_S_CSCF_A of type SipComponent + SUT component IMS_I_CSCF_A of type SipComponent + SUT component IMS_AS_A of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + connection between UE_A.g and IMS_P_CSCF_A.g + connection between IMS_P_CSCF_A.g and IMS_S_CSCF_A.g + connection between IMS_S_CSCF_A.g and IMS_I_CSCF_A.g + connection between IMS_I_CSCF_A.g and IMS_IBCF_A.g + connection between IMS_IBCF_A.g and IMS_IBCF_B.g + connection between IMS_S_CSCF_A.g and IMS_AS_A.g + ; + + Test Configuration CF_VxLTE_RMI + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_B of type SipComponent + SUT component IMS_S_CSCF_B of type SipComponent + SUT component IMS_I_CSCF_B of type SipComponent + SUT component IMS_AS_B of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + connection between UE_A.g and IMS_P_CSCF_B.g + connection between IMS_P_CSCF_B.g and IMS_S_CSCF_B.g + connection between IMS_S_CSCF_B.g and IMS_I_CSCF_B.g + connection between IMS_I_CSCF_B.g and IMS_IBCF_B.g + connection between IMS_IBCF_B.g and IMS_IBCF_A.g + ; + + Test Configuration CF_VoLTE_RMI_ES + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_B of type SipComponent + SUT component IMS_S_CSCF_B of type SipComponent + SUT component IMS_I_CSCF_B of type SipComponent + SUT component IMS_AS_B of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + connection between UE_A.g and IMS_P_CSCF_B.g + connection between IMS_P_CSCF_B.g and IMS_S_CSCF_B.g + connection between IMS_S_CSCF_B.g and IMS_I_CSCF_B.g + connection between IMS_I_CSCF_B.g and IMS_IBCF_B.g + connection between IMS_IBCF_B.g and IMS_IBCF_A.g + ; + + Test Configuration CF_VoNR_RMI_ES + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_B of type SipComponent + SUT component IMS_S_CSCF_B of type SipComponent + SUT component IMS_I_CSCF_B of type SipComponent + SUT component IMS_AS_B of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + connection between UE_A.g and IMS_P_CSCF_B.g + connection between IMS_P_CSCF_B.g and IMS_S_CSCF_B.g + connection between IMS_S_CSCF_B.g and IMS_I_CSCF_B.g + connection between IMS_I_CSCF_B.g and IMS_IBCF_B.g + connection between IMS_IBCF_B.g and IMS_IBCF_A.g + ; + + Test Configuration CF_VxLTE_RMI_A + containing + SUT component UE_B of type SipComponent + SUT component IMS_P_CSCF_A of type SipComponent + SUT component IMS_S_CSCF_A of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + connection between UE_B.g and IMS_P_CSCF_A.g + connection between IMS_P_CSCF_A.g and IMS_S_CSCF_A.g + connection between IMS_S_CSCF_A.g and IMS_IBCF_A.g + connection between IMS_IBCF_A.g and IMS_IBCF_B.g + ; + + Test Configuration CF_VxLTE_RMI_B + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_B of type SipComponent + SUT component IMS_S_CSCF_B of type SipComponent + SUT component IMS_I_CSCF_B of type SipComponent + SUT component IMS_AS_B of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + connection between UE_A.g and IMS_P_CSCF_B.g + connection between IMS_P_CSCF_B.g and IMS_S_CSCF_B.g + connection between IMS_S_CSCF_B.g and IMS_I_CSCF_B.g + connection between IMS_I_CSCF_B.g and IMS_IBCF_B.g + connection between IMS_IBCF_B.g and IMS_IBCF_A.g + ; + + Test Configuration CF_VxLTE_RMI_S8HR + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_A of type SipComponent + SUT component IMS_S_CSCF_A of type SipComponent + SUT component IMS_I_CSCF_A of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + connection between UE_A.g and IMS_P_CSCF_A.g + connection between IMS_P_CSCF_A.g and IMS_S_CSCF_A.g + connection between IMS_S_CSCF_A.g and IMS_I_CSCF_A.g + connection between IMS_I_CSCF_A.g and IMS_IBCF_A.g + connection between IMS_IBCF_A.g and IMS_IBCF_B.g + ; + + Test Configuration CF_VoNR_FB_INT_ES + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_A of type SipComponent + SUT component IMS_S_CSCF_A of type SipComponent + SUT component IMS_I_CSCF_A of type SipComponent + //SUT component IMS_AS_A of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + connection between IMS_P_CSCF_A.g and IMS_S_CSCF_A.g + connection between IMS_S_CSCF_A.g and IMS_I_CSCF_A.g + connection between IMS_I_CSCF_A.g and IMS_IBCF_A.g + connection between IMS_IBCF_A.g and IMS_IBCF_B.g + //connection between IMS_S_CSCF_A.g and IMS_AS_A.g + ; + } // End of Configuration section + + //Type MSG (optional TCP of type CONTENT); + + //Type CONTENT; + //CONTENT tcp; + + //MSG MESSAGE; + + //Type MSG_SIZE; + + //Message_Body_Size MSG_SIZE; + +} // End of Package Sip_Common + diff --git a/test_purposes/ngnas/TP_AMF_NGAP.tplan2 b/test_purposes/ngnas/TP_AMF_NGAP.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..54d136b76c655d54ab0e9371614d37ab2c575ba9 --- /dev/null +++ b/test_purposes/ngnas/TP_AMF_NGAP.tplan2 @@ -0,0 +1,127 @@ +/* +Copyright (c) ETSI 2024. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + +/* interface at AMF */ +Package TP_AMF_NGAP { + + import all from Ngnas_Common; + + Test Purpose { + + TP Id TP_5GAP_NAS_01 + + Test objective "The IUT is able to receive an INITIAL_UE_MESSAGE to indicate a NAS transport procedure and reply with INITIAL_CONTEXT_SETUP_RESPONSE." + + Reference + "ETSI TS 138 413 [1], Clauses 8.6.2.2, 9.2.5.1, 9.2.5.2 and 9.2.2.1-3" + + Config Id CF_AMF_N2N1 + + PICS Selection NONE + + Initial conditions with { + the UE entity isNotRegisteredTo the AMF + } + + Expected behaviour + ensure that { + when { + the IUT entity receives an INITIAL_UE_MESSAGE containing + RAN_UE_NGAP_ID indicating value PX_RAN_UE_NGAP_ID, + NAS_PDU, //(see note) + User_Location_Information containing + nR_CGI containing + pLMNIdentity containing + MCC indicating value PX_MCC, + MNC indicating value PX_MNC;, + nRCellIdentity indicating value PX_NR_CELL_IDENTITY;, + tAI containing + pLMNIdentity containing + MCC indicating value PX_MCC, + MNC indicating value PX_MNC;, + tAC indicating value PX_TAC;;, + RRC_Establishmnet_Cause indicating value "mo-signalling", + UE_Context_Request containing + UEContextRequest indicating value '0';; //requested + from the GNB entity + } + then { + the IUT entity sends a INITIAL_CONTEXT_SETUP_RESPONSE containing + AMF_UE_NGAP_ID indicating value RV_AMF_UE_NGAP_ID, + RAN_UE_NGAP_ID indicating value PX_RAN_UE_NGAP_ID, + GUAMI containing + pLMNIdentity containing + MCC indicating value PX_MCC, + MNC indicating value PX_MNC;, + aMFRegionID indicating value RV_AMFRegionID, + aMFSetID indicating value RV_AMFSetID, + aMFPointerID indicating value RV_AMFPointerID;, + NAS_PDU; //(see note) + to the GNB entity + } + } + }// end TP_5GAP_NAS_01 + + Test Purpose { + + TP Id TP_5GAP_NAS_01 + + Test objective "The IUT is able to receive an INITIAL_UE_MESSAGE to indicate a NAS transport procedure and reply with DOWNLINK_NAS_TRANSPORT." + + Reference + "ETSI TS 138 413 [1], Clauses 8.6.2.2, 9.2.5.1 and 9.2.5.2" + + Config Id CF_AMF_N2N1 + + PICS Selection NONE + + Initial conditions with { + the UE entity isNotRegisteredTo the AMF + } + + Expected behaviour + ensure that { + when { + the IUT entity receives an INITIAL_UE_MESSAGE containing + RAN_UE_NGAP_ID indicating value PX_RAN_UE_NGAP_ID, + NAS_PDU, //(see note) + User_Location_Information containing + nR_CGI containing + pLMNIdentity containing + MCC indicating value PX_MCC, + MNC indicating value PX_MNC;, + nRCellIdentity indicating value PX_NR_CELL_IDENTITY;, + tAI containing + pLMNIdentity containing + MCC indicating value PX_MCC, + MNC indicating value PX_MNC;, + tAC indicating value PX_TAC;;, + RRC_Establishmnet_Cause indicating value "mo-signalling", + UE_Context_Request containing + UEContextRequest indicating value '0';; //requested + from the GNB entity + } + then { + the IUT entity sends a DOWNLINK_NAS_TRANSPORT containing + AMF_UE_NGAP_ID indicating value RV_AMF_UE_NGAP_ID, + RAN_UE_NGAP_ID indicating value PX_RAN_UE_NGAP_ID, + NAS_PDU; //(see note) + to the GNB entity + } + } + }// end TP_5GAP_NAS_01 + +} // End of Package TP_AMF_NGAP + diff --git a/test_purposes/ngnas/TP_AMF_NGNAS.tplan2 b/test_purposes/ngnas/TP_AMF_NGNAS.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..2289f40a1f7f7175194b0861c1f5e3bdb53d91c5 --- /dev/null +++ b/test_purposes/ngnas/TP_AMF_NGNAS.tplan2 @@ -0,0 +1,590 @@ +/* +Copyright (c) ETSI 2024-2025. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + +/* interface at AMF */ +Package TP_AMF { + + Group "5.4 5GMM Common Procedures" { + + Group "5.5.1.2 Registration Procedure for initial registration" { + + import all from Ngnas_Common; + import all from Sip_Common; + + Test Purpose { + + TP Id TP_N1N2_AMF_ECO_REG_01 + + Test objective "Verify that the IUT sends a REGISTRATION ACCEPT message when emergency registration is accepted by the network - With USIM." + + Reference + "ETSI TS 124 501 [7], Clauses 5.5.1.2.2, 5.5.1.2.4, 8.2.6 and 8.2.7" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE //EMERGENCY services supported + + Initial conditions with { + the UE entity isNotRegisteredTo the AMF + } + + Expected behaviour + ensure that { + when { + the IUT entity receives an INITIAL_UE_MESSAGE containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + Registration_request_message_identity set to REGISTRATION_REQUEST, + 5GS_registration_type containing + 5GS_registration_type_value set to EMERGENCY_REGISTRATION, + FOR indicating value 1;, //Follow-on request pending + 5GS_mobile_identity containing + SUPI_format indicating value IMSI, + Type_of_idenity indicating value SUCI, + MCC indicating value PX_MCC, + MNC indicating value PX_MNC, + Routing_indicator indicating value PX_ROUTING_INDICATOR, + Protection_scheme_id indicating value PX_PROTECTION_SCHEME_ID, + Home_network_public_key_identifier indicating value PX_HOME_NETWORK_PUBLIC_KEY_IDENTIFIER, + MSIN indicating value PX_MSIN;;; + from the GNB entity + } + then { + the IUT entity sends a INITIAL_CONTEXT_SETUP_REQUEST containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to INTEGRITY_PROTECTED_AND_CIPHERED, + Registration_reject_message_identity set to REGISTRATION_ACCEPT, + 5GS_registration_result containing + 5GS_registration_result_value set to 3GPP_ACCESS, + Emergency_registered set to 1;, //Registered for emergency services + 5G_GUTI containing + Type_of_identity set to 5G_GUTI, + MCC indicating value PX_MCC, + MNC indicating value PX_MNC, + AMF_Region_ID indicating value PX_AMF_REGION_ID, + AMF_Set_ID indicating value PX_AMF_SET_ID, + AMF_Pointer indicating value PX_AMF_POINTER, + 5G_TMSI indicating value RV_5G_TMSI;, + TAI_list containing + Partial_tracking_area_list_1 containing + Type_of_list, + Number_of_elements, + MCC indicating value PX_MCC, + MNC indicating value PX_MNC, + TAC indicating value PX_TAC;;, + 5GS_network_feature_support containing + Emergency_service_support_indicator set to 1;, //TODO either supported or not; or Fallback is supported + T3512_value containing + Timer_value indicating value nonZeroValue;;; + to the GNB entity + } + } + } // End of TP_N1N2_AMF_ECO_REG_01 + + Test Purpose { + + TP Id TP_N1N2_AMF_ECO_REG_02 + + Test objective "Verify that the IUT sends a REGISTRATION ACCEPT message when emergency registration is accepted by the network - Without USIM." + + Reference + "ETSI TS 124 501 [7], Clauses 5.5.1.2.2, 5.5.1.2.4, 8.2.6 and 8.2.7" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE //EMERGENCY services supported + + Initial conditions with { + the UE entity isNotRegisteredTo the AMF + } + + Expected behaviour + ensure that { + when { + the IUT entity receives an INITIAL_UE_MESSAGE containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + Registration_request_message_identity set to REGISTRATION_REQUEST, + 5GS_registration_type containing + 5GS_registration_type_value set to EMERGENCY_REGISTRATION, + FOR indicating value 1;, //Follow-on request pending + 5GS_mobile_identity containing + Type_of_idenity indicating value IMEISV;;; + from the GNB entity + } + then { + the IUT entity sends a INITIAL_CONTEXT_SETUP_REQUEST containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to INTEGRITY_PROTECTED_AND_CIPHERED, + Registration_reject_message_identity set to REGISTRATION_ACCEPT, + 5GS_registration_result containing + 5GS_registration_result_value set to 3GPP_ACCESS, + Emergency_registered set to 1;, //Registered for emergency services + 5G_GUTI containing + Type_of_identity set to IMEISV, + MCC indicating value PX_MCC, + MNC indicating value PX_MNC, + AMF_Region_ID indicating value PX_AMF_REGION_ID, + AMF_Set_ID indicating value PX_AMF_SET_ID, + AMF_Pointer indicating value PX_AMF_POINTER, + 5G_TMSI indicating value RV_5G_TMSI;, + TAI_list containing + Partial_tracking_area_list_1 containing + Type_of_list, + Number_of_elements, + MCC indicating value PX_MCC, + MNC indicating value PX_MNC, + TAC indicating value PX_TAC;;, + 5GS_network_feature_support containing + Emergency_service_support_indicator set to 1;, //TODO either supported or not; or Fallback is supported + T3512_value containing + Timer_value indicating value nonZeroValue;;; + to the GNB entity + } + } + } // End of TP_N1N2_AMF_ECO_REG_02 + + } // End of Group "5.5.1.2 Registration Procedure for initial registration" + + Group "5.5.2.2.3 UE-initiated de-registration procedure completion" { + + import all from Ngnas_Common; + import all from Sip_Common; + + Test Purpose { + + TP Id TP_N1N2_AMF_ECO_DRG_01 + + Test objective "Verify that the IUT, upon receiving a DEREGISTRATION REQUEST message containing the De-registration type IE with 'Normal de-registration' from the UE, sends a DEREGISTRATION ACCEPT message" + + Reference + "ETSI TS 124 501 [7], Clauses 5.5.2.2.3, 8.2.12 and 8.2.13" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE //EMERGENCY services supported + + Initial conditions with { + the UE entity isRegisteredTo the AMF + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a UPLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + Deregistration_request_message_identity set to DEREGISTRATION_REQUEST, + Deregistration_type containing + Switch_off_value set to NORMAL_DEREGISTRATION, + Reregistration_required_value set to REREGISTRATION_NOT_REQUIRED, + Access_type set to 3GPP_ACCESS;, + 5GS_mobile_identity containing + Type_of_identity set to 5G_GUTI, + MCC indicating value PX_MCC, + MNC indicating value PX_MNC, + AMF_Region_ID indicating value PX_AMF_REGION_ID, + AMF_Set_ID indicating value PX_AMF_SET_ID, + AMF_Pointer indicating value PX_AMF_POINTER, + 5G_TMSI indicating value RV_5G_TMSI;;; + from the GNB entity + } + then { + the IUT entity sends a DOWNLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to INTEGRITY_PROTECTED_AND_CIPHERED, + Deregistration_accept_message_identity set to DEREGISTRATION_ACCEPT;; + to the GNB entity + } + } + } // End of TP_N1N2_AMF_ECO_DRG_01 + + } // End of Group "5.5.2.2.3 UE-initiated de-registration procedure completion" + + Group "5.5.2.3.1 Network-initiated de-registration procedure initiation" { + + import all from Ngnas_Common; + import all from Sip_Common; + + Test Purpose { + + TP Id TP_N1N2_AMF_ECO_DRG_02 + + Test objective "Verify that the IUT initiates network de-registration by sending a DEREGISTRATION REQUEST message" + + Reference + "ETSI TS 124 501 [7], Clauses 5.5.2.2.3 and 8.2.12" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE //EMERGENCY services supported + + Initial conditions with { + the UE entity isRegisteredTo the AMF + } + + Expected behaviour + ensure that { + when { + the IUT entity indicates a UE deactivation + } + then { + the IUT entity sends a UPLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + Deregistration_request_message_identity set to DEREGISTRATION_REQUEST, + Deregistration_type containing + Switch_off_value set to SWITCH_OFF, + Reregistration_required_value set to REREGISTRATION_NOT_REQUIRED, + Access_type set to 3GPP_ACCESS;;; + to the GNB entity + } + } + } // End of TP_N1N2_AMF_ECO_DRG_02 + + } // End of Group "5.5.2.3.1 Network-initiated de-registration procedure initiation" + + Group "5.4.5.2.3 UE-initiated NAS transport of messages accepted by the network" { + + + import all from Ngnas_Common; + import all from Sip_Common; + + Test Purpose { + + TP Id TP_N1N2_AMF_ECO_PDUE_01 + + Test objective "Verify that the IUT responds with a DL NAS transport message containing a PDU SESSION ESTABLISHMENT ACCEPT - Default Internet (IMS)." + + Reference + "ETSI TS 124 501 [7], Clauses 5.4.5.2.3, 6.4.1.2, 8.2.10, 8.2.11, 8.3.1 and 8.3.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE //EMERGENCY services supported + + Initial conditions with { + the UE entity isRegisteredTo the AMF + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a UPLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + uL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION ESTABLISHMENT REQUEST", + pdu_session_type indicating value IPv4, + SSC_mode set to "SSC mode 1";, + Request_type set to "initial emergency request", + not DNN, + not S_NSSAI;; + from the GNB entity + } + then { + the IUT entity sends an PDU_SESSION_RESOURCE_SETUP_REQUEST containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + dL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION ESTABLISHMENT ACCEPT", + pdu_session_type indicating value IPv4, + SSC_mode set to "SSC mode 1";, + 5GQoS indicating value 5, + pDU_address, + pDU_session_ID, + DNN indicating value emergency;; + to the GNB entity + } + } + + } // End of TP_N1N2_AMF_ECO_PDUE_01 + + Test Purpose { + + TP Id TP_N1N2_AMF_ECO_PDUE_02 + + Test objective "Verify that the IUT responds with a DL NAS transport message containing a PDU SESSION ESTABLISHMENT ACCEPT - 5GVoNR call." + + Reference + "ETSI TS 124 501 [7], Clauses 5.4.5.2.3, 6.4.1.2, 8.2.10, 8.2.11, 8.3.1 and 8.3.2" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE //EMERGENCY services supported + + Initial conditions with { + the UE entity isRegisteredTo the AMF + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a UPLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + uL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION ESTABLISHMENT REQUEST", + pdu_session_type indicating value IPv4, + SSC_mode set to "SSC mode 1";, + Request_type set to "initial emergency request", + not DNN, + not S_NSSAI;; + from the GNB entity + } + then { + the IUT entity sends an PDU_SESSION_RESOURCE_SETUP_REQUEST containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + dL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION ESTABLISHMENT ACCEPT", + pdu_session_type indicating value IPv4, + SSC_mode set to "SSC mode 1";, + 5GQoS indicating value 1, + pDU_address, + pDU_session_ID, + DNN indicating value emergency;; + to the GNB entity + } + } + + } // End of TP_N1N2_AMF_ECO_PDUE_02 + + Test Purpose { + + TP Id TP_N1N2_AMF_ECO_PDUM_03 + + Test objective "Verify that the IUT sends a DL NAS transport message containing a PDU SESSION MODIFICATION COMMAND when triggered by the network." + + Reference + "ETSI TS 124 501 [7], Clauses 5.4.5.2.3, 6.3.2.3, 8.2.10, 8.2.11, 8.3.9 and 8.3.10" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE //EMERGENCY services supported + + Initial conditions with { + the UE entity isRegisteredTo the AMF and + the UE entity hasEstablishedPDUsession + } + + Expected behaviour + ensure that { + when { + the IUT entity sends a DOWNLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + dL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION MODIFICATION COMMAND";, + pDU_session_ID;; + to the GNB entity + } + then { + the IUT entity receives an UPLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + uL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION MODIFICATION COMPLETE";;; + from the GNB entity + } + } + + } // End of TP_N1N2_AMF_ECO_PDUM_03 + + Test Purpose { + + TP Id TP_N1N2_AMF_ECO_PDUM_04 + + Test objective "Verify that the IUT sends a DL NAS transport message containing a PDU SESSION MODIFICATION COMMAND when receiving a UL NAS transport message containing a PDU SESSION MODIFICATION REQUEST - Triggered by the UE." + + Reference + "ETSI TS 124 501 [7], Clauses 5.4.5.2.3, 8.2.10, 8.2.11 and 8.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE //EMERGENCY services supported + + Initial conditions with { + the UE entity isRegisteredTo the AMF and + the UE entity hasEstablishedPDUsession + } + + Expected behaviour + ensure that { + when { + the IUT entity sends a UPLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + uL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION MODIFICATION REQUEST";, + pDU_session_ID;; + to the GNB entity + } + then { + the IUT entity receives an DOWNLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + dL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION MODIFICATION COMMAND";;; + from the GNB entity + } + } + + } // End of TP_N1N2_AMF_ECO_PDUM_04 + + Test Purpose { + + TP Id TP_N1N2_AMF_ECO_PDUR_05 + + Test objective "Verify that the IUT sends a DL NAS transport message containing a PDU SESSION RELEASE COMMAND when triggered by the network." + + Reference + "ETSI TS 124 501 [7], Clauses 5.4.5.2.3, 8.2.10, 8.2.11 and 8.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE //EMERGENCY services supported + + Initial conditions with { + the UE entity isRegisteredTo the AMF and + the UE entity hasEstablishedPDUsession + } + + Expected behaviour + ensure that { + when { + the IUT entity sends a DOWNLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + dL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION RELEASE COMMAND";, + pDU_session_ID;; + to the GNB entity + } + then { + the IUT entity receives an UPLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + uL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION RELEASE COMPLETE";;; + from the GNB entity + } + } + + } // End of TP_N1N2_AMF_ECO_PDUR_05 + + Test Purpose { + + TP Id TP_N1N2_AMF_ECO_PDUR_06 + + Test objective "Verify that the IUT responds with a DL NAS transport message containing a PDU SESSION RELEASE REQUEST - Triggered by UE." + + Reference + "ETSI TS 124 501 [7], Clauses 5.4.5.2.3, 8.2.10, 8.2.11 and 8.3" + + Config Id CF_VoNR_INT_ES + + PICS Selection NONE //EMERGENCY services supported + + Initial conditions with { + the UE entity isRegisteredTo the AMF and + the UE entity hasEstablishedPDUsession + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a UPLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + uL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION RELEASE REQUEST";, + pDU_session_ID;; + from the GNB entity + } + then { + the IUT entity sends an DOWNLINK_NAS_TRANSPORT containing + NAS_PDU containing + extended_protocol_discriminator set to 5G_MOBILITY_MANAGEMENT_MESSAGES, + security_header_type set to NOT_SECURITY_PROTECTED, + dL_NAS_TRANSPORT_message_identity, + payload_container containing + payload_container_type set to "N1 SM information", + number_of_optional_IEs set to 1, + optional_IE_1 set to "PDU SESSION RELEASE COMPLETE";;; + to the GNB entity + } + } + + } // End of TP_N1N2_AMF_ECO_PDUR_06 + + } // End of Group "5.4.5.2.3 UE-initiated NAS transport of messages accepted by the network" + + + } // End of Group "5.4 5GMM Common Procedures" + +} // End of Package TP_AMF + diff --git a/titan-test-system-framework b/titan-test-system-framework new file mode 160000 index 0000000000000000000000000000000000000000..e477d327f4df850e487feab5c0f68b1044db3cf1 --- /dev/null +++ b/titan-test-system-framework @@ -0,0 +1 @@ +Subproject commit e477d327f4df850e487feab5c0f68b1044db3cf1 diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_Functions.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..7a594722f77fce14d720c88ef833e60f32dccbc6 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_Functions.ttcn @@ -0,0 +1,323 @@ +module AtsIms5gIot_Functions { + + //LibIms + import from LibIms_UpperTester all; + + //LibIot + import from LibIot_PIXITS all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_Functions all; + import from LibIot_TypesAndValues all; + + //LibUpperTester + import from LibUpperTester all; + + // LibNgap + import from NGAP_IEs language "ASN.1:2002" all; + import from NGAP_Constants language "ASN.1:2002" all; + import from NGAP_PDU_Descriptions language "ASN.1:2002" all; + import from LibNGAP_TypesAndValues all; + //import from LibNGAP_Interface all; + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_Templates all; + // AtsIms5gIot + import from AtsIms5gIot_TypesAndValues all; + import from AtsIms5gIot_TestSystem all; + + group HTTP { + + function f_Iot_Http_receive( + in template HttpMessageList p_passCriteria, + in template HttpMessageList p_failCriteria, + in template HttpSkipType p_skip, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on HttpInterfaceMonitor { + var integer v_size := lengthof(p_failCriteria); + var DefaultList v_defaultArray; + var integer i := 0; + var integer v_size_ai := lengthof(PX_AVAILABLE_INTERFACES); + //log ("### f_Iot_Http_receive: passCriteria=", p_passCriteria); + //log ("### f_Iot_Http_receive: failCriteria=", p_failCriteria); + + // check if interface is available + if (not((isvalue(vc_Interface)) /*and (vc_interfaceName=="")*/)){ + setverdict(inconc, self, "******f_Iot_Http_receive: Interface " & vc_interfaceName & " not available and is not evaluated******" ); + } else {// Interface is available + v_defaultArray[0] := activate(a_default_http(p_tpId)); + f_activateHttpDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage); + f_activateHttpDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage); + f_gen_http_receive(p_tpId, p_skip); + for (i := 0; i < lengthof(v_defaultArray); i := i + 1) { + deactivate(v_defaultArray[i]); + } + } + + } // End of function f_Iot_Http_receive + function f_activateHttpDefaults( + inout DefaultList p_default, + in integer p_startIdx, + in template HttpMessageList p_list, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on HttpInterfaceMonitor { + var integer v_size := lengthof(p_list); + var integer v_idx := p_startIdx; + for (var integer i := 0; i < v_size; i := i + 1) { + if (ischosen(p_list[i].request)) { + //log ("### f_activateHttpDefaults: Adding ", p_list[i].request); + p_default[v_idx] := activate( + a_receive_http_Request(p_list[i],p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } else { + //log ("### f_activateHttpDefaults: Adding ", p_list[i].response); + p_default[v_idx] := activate( + a_receive_http_Response(p_list[i],p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } + v_idx := v_idx + 1; + } + //log ("### f_activateHttpDefaults: ended"); + } // End of function f_activateHttpDefaults + + function f_gen_http_receive( + in charstring p_tpId, + in template HttpSkipType p_skip + ) runs on HttpInterfaceMonitor { + var integer skipCount := valueof(p_skip.skipCount); + tc_wait.start; + alt { + // preamble (consume prior messages) + [skipCount > 0 and ispresent(p_skip.skipMessage) and ischosen(p_skip.skipMessage.request)] httpPort.receive (p_skip.skipMessage) { + skipCount := skipCount - 1; + log("***f_gen_http_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [skipCount > 0 and ispresent(p_skip.skipMessage) and ischosen(p_skip.skipMessage.response)] httpPort.receive (p_skip.skipMessage) { + skipCount := skipCount - 1; + log("***f_gen_http_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [] tc_wait.timeout { + f_setConformanceVerdict(inconc, "***f_gen_http_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****"); + } + } + + } // End of function f_gen_http_receive + + function f_getHttpMsgFromMonitor( + InterfaceMonitor p_monitor, + out HttpMessage p_msg + ) runs on FiveGNRTestCoordinator { + timer t_local := PX_MAX_MSG_WAIT; + t_local.start; + alt { + []fiveGNRPort.receive (HttpMessage:?) /*from p_monitor*/ -> value p_msg { + t_local.stop; + setverdict(pass, self, "***f_getHttpMsgFromMonitor: HTTP message received***"); + } + []t_local.timeout { + setverdict(fail, self, "***f_getHttpMsgFromMonitor: HTTP message not received***"); + } + } + } // End of function f_getHttpMsgFromMonitor + + altstep a_receive_http_Request( + in template HttpMessage p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on HttpInterfaceMonitor { + var HttpMessage v_message; + [not p_checkMessage] httpPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_http_Request: Received expected HTTP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + log("### Forwarding message to MTC"); + fiveGNRPort.send(v_message); + } + } + [p_checkMessage] httpPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_http_Request: Checked expected HTTP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + log("### Forwarding message to MTC"); + fiveGNRPort.send(v_message); + } + } + } + + altstep a_receive_http_Response( + in template HttpMessage p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on HttpInterfaceMonitor { + var HttpMessage v_message; + [not p_checkMessage] httpPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_http_Response: Received expected HTTP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + log("### Forwarding message to MTC"); + fiveGNRPort.send(v_message); + } + } + [p_checkMessage] httpPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_http_Response: Checked expected HTTP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + log("### Forwarding message to MTC"); + fiveGNRPort.send(v_message); + } + } + } + + altstep a_default_http(in charstring p_TP) runs on HttpInterfaceMonitor { + [] httpPort.receive(mw_http_request) { + log(self, "### a_default_http: Request default for " & p_TP ); + repeat; + } + [] httpPort.receive(mw_http_response) { + log(self, "### a_default_http: Response default for " & p_TP ); + repeat; + } + [] httpPort.receive { + log(self, "*** a_default_http: Received/ignored unexpected message when waiting for message complying to " & p_TP ); + repeat; + } + } + + } // End of group HTTP + + group NGAP { + + function f_Iot_Ngap_receive( + in template NGAP_PDUs p_passCriteria, + in template NGAP_PDUs p_failCriteria, + in template NgapSkipType p_skip, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on NgapInterfaceMonitor { + var integer v_size := lengthof(p_failCriteria); + var DefaultList v_defaultArray; + var integer i := 0; + var integer v_size_ai := lengthof(PX_AVAILABLE_INTERFACES); + //log ("### f_Iot_Ngap_receive: passCriteria=", p_passCriteria); + //log ("### f_Iot_Ngap_receive: failCriteria=", p_failCriteria); + + // check if interface is available + if (not((isvalue(vc_Interface)) /*and (vc_interfaceName=="")*/)){ + setverdict(inconc, self, "******f_Iot_Ngap_receive: Interface " & vc_interfaceName & " not available and is not evaluated******" ); + } else {// Interface is available + v_defaultArray[0] := activate(a_default_ngap(p_tpId)); + f_activateNgapDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage); + f_activateNgapDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage); + f_gen_ngap_receive(p_tpId, p_skip); + for (i := 0; i < lengthof(v_defaultArray); i := i + 1) { + deactivate(v_defaultArray[i]); + } + } + + } // End of function f_Iot_Ngap_receive + + function f_activateNgapDefaults( + inout DefaultList p_default, + in integer p_startIdx, + in template NGAP_PDUs p_list, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on NgapInterfaceMonitor { + var integer v_size := lengthof(p_list); + var integer v_idx := p_startIdx; + for (var integer i := 0; i < v_size; i := i + 1) { + //log ("### f_activateNgapDefaults: Adding ", p_list[i]); + p_default[v_idx] := activate( + a_receive_ngap(p_list[i],p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + v_idx := v_idx + 1; + } + //log ("### f_activateNgapDefaults: ended"); + } // End of function f_activateNgapDefaults + + function f_gen_ngap_receive( + in charstring p_tpId, + in template NgapSkipType p_skip + ) runs on NgapInterfaceMonitor { + var integer skipCount := valueof(p_skip.skipCount); + tc_wait.start; + alt { + // preamble (consume prior messages) + [skipCount > 0 and ispresent(p_skip.skipMessage)] ngapPort.receive (p_skip.skipMessage) { + skipCount := skipCount - 1; + log("***f_gen_ngap_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [] tc_wait.timeout { + f_setConformanceVerdict(inconc, "***f_gen_ngap_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****"); + } + } + + } // End of function f_gen_ngap_receive + + function f_getNgapMsgFromMonitor( + InterfaceMonitor p_monitor, + out NGAP_PDU p_msg + ) runs on FiveGNRTestCoordinator { + timer t_local := PX_MAX_MSG_WAIT; + t_local.start; + alt { + []fiveGNRPort.receive (NGAP_PDU:?) /*from p_monitor*/ -> value p_msg { + t_local.stop; + setverdict(pass, self, "***f_getNgapMsgFromMonitor: NGAP message received***"); + } + []t_local.timeout { + setverdict(fail, self, "***f_getNgapMsgFromMonitor: NGAP message not received***"); + } + } + } // End of function f_getNgapMsgFromMonitor + + altstep a_receive_ngap( + in template NGAP_PDU p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on NgapInterfaceMonitor { + var NGAP_PDU v_message; + [not p_checkMessage] ngapPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_ngap_Request: Received expected NGAP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + log("### Forwarding message to MTC"); + fiveGNRPort.send(v_message); + } + } + [p_checkMessage] ngapPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_ngap_Request: Checked expected NGAP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + log("### Forwarding message to MTC"); + fiveGNRPort.send(v_message); + } + } + } + + altstep a_default_ngap(in charstring p_TP) runs on NgapInterfaceMonitor { + [] ngapPort.receive(NGAP_PDU:?) { + log(self, "### a_default_ngap: default for " & p_TP ); + repeat; + } + [] ngapPort.receive { + log(self, "*** a_default_ngap: Received/ignored unexpected message when waiting for message complying to " & p_TP ); + repeat; + } + } + + } // End of group NGAP + +} // End of module AtsIms5gIot_Functions diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_PICs.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_PICs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..8504d9d472737e895b14b81e04af102242b1bd7e --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_PICs.ttcn @@ -0,0 +1,14 @@ +module AtsIms5gIot_PICs { + + modulepar charstring PICS_ROOT_API := "/"; + + modulepar charstring PICS_NPCF_POLICY_AUTHORIZATION := "npcf-policyauthorization/v1/app_sessions"; + + modulepar charstring PICS_NPCF_POLICY_NOTIFY := ""; + + /** + * @desc Set to true for 5G Service-Based Architecture (SBA) deployments + */ + modulepar boolean PICS_5G_SERVICE_BASED_ARCHITECTURE := true; + +} // End of module AtsIms5gIot_PICs diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TD_5GDRG.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_5GDRG.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..b3636577bd7ca3c0bc9c19560a1bb646b29bcb9f --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_5GDRG.ttcn @@ -0,0 +1,145 @@ +module AtsIms5gIot_TD_5GDRG { + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_5GNR_PIXITS all; + import from LibIot_5GNR_Functions all; + // LibImsIot + import from AtsImsIot_Functions all; + // LibImsIot + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_PIXITS all; + // Ims5gIot + import from AtsIms5gIot_TestConfiguration all; + import from AtsIms5gIot_TestSystem all; + import from AtsIms5gIot_Functions all; + import from AtsIms5gIot_TP_behavior_N1N2 all; + import from AtsIms5gIot_TP_behavior_GM all; + import from AtsIms5gIot_TP_behavior_MW_PS all; + import from AtsIms5gIot_TP_behavior_MW_IS all; + import from AtsIms5gIot_TP_behavior_MW_SI all; + import from AtsIms5gIot_TP_behavior_MM all; + import from AtsImsIot_TP_behavior_ISC all; + import from AtsIms5gIot_TP_behavior_MI all; + import from AtsIms5gIot_TP_behavior_MX all; + import from AtsIms5gIot_TP_behavior_N5_PCF all; + import from AtsIms5gIot_TP_behavior_RX all; + + +group Interoperability{ + + group Network_5G_DeRegistration { + + // To perform UE emergency 5G deregistration from the network with/without EMERGENY registration + testcase TD_VoNR_ECO_INT_5DR_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S6A_INTERFACENAME, + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Step 1 + f_mtc_check_TP_N1N2_AMF_ECO_DRG_01(vc_5g_monitor_components.ngap, true); + f_mtc_check_TP_N1N2_AMF_ECO_DRG_02(vc_5g_monitor_components.ngap, true); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_5DR_01 + + + testcase TD_VoNR_ECO_INT_5DR_02() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S6A_INTERFACENAME, + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + /*establish session!!!*/ + // test body + // Step 2 + f_mtc_check_TP_GM_PCSCF_5G_ECO_BYE_01(vc_5g_monitor_components.gmA, true, v_sip); + f_mtc_check_TP_MW_PCSCF_5G_ECO_BYE_01(vc_5g_monitor_components.mwPS, true, v_sip); + f_mtc_check_TP_MM_ECSCF_5G_ECO_BYE_01(vc_5g_monitor_components.mwPI, true, v_sip); + f_mtc_check_TP_MX_ECSCF_5G_ECO_BYE_01(vc_5g_monitor_components.mwEB, true, v_sip); + f_mtc_check_TP_MI_ECSCF_5G_ECO_BYE_01(vc_5g_monitor_components.mwPI, true, v_sip); + f_mtc_check_TP_GM_PCSCF_5G_ECO_200OK_BYE_01(vc_5g_monitor_components.gmA, true, v_sip); + // Step 3 + f_mtc_check_TP_RX_PCRF_5G_ECO_STA_02(vc_5g_monitor_components.rx, true); + f_mtc_check_TP_N5_PCF_5G_ECO_PDA_01(vc_5g_monitor_components.n5, true); + // Step 5 + f_mtc_check_TP_N1N2_AMF_ECO_PDUM_03(vc_5g_monitor_components.ngap, true); + f_mtc_check_TP_N1N2_AMF_ECO_DRG_01(vc_5g_monitor_components.ngap, true); + + // postamble + //f_mtc_userRadioDisabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_5DR_02 + + } // End of group Network_5G_DeRegistration + + } // End of group Interoperability + + + +} // End of module AtsIms5gIot_TD_5GDRG diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TD_5GREG.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_5GREG.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..a9e9865f600ed025e6e841509c70b6501077cd98 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_5GREG.ttcn @@ -0,0 +1,221 @@ +module AtsIms5gIot_TD_5GREG { + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_5GNR_PIXITS all; + import from LibIot_5GNR_Functions all; + // LibImsIot + import from AtsImsIot_Functions all; + // LibImsIot + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_PIXITS all; + // Ims5gIot + import from AtsIms5gIot_TestConfiguration all; + import from AtsIms5gIot_TestSystem all; + import from AtsIms5gIot_Functions all; + import from AtsIms5gIot_TP_behavior_GM all; + import from AtsIms5gIot_TP_behavior_MW_PS all; + import from AtsIms5gIot_TP_behavior_MW_IS all; + import from AtsIms5gIot_TP_behavior_MW_SI all; + import from AtsIms5gIot_TP_behavior_MM all; + import from AtsIms5gIot_TP_behavior_N1N2 all; + import from AtsIms5gIot_TP_behavior_N5_PCF all; + import from AtsIms5gIot_PICs all; + + group Interoperability{ + + group Network_5G_Registration { + + // To perform UE emergency 5G registration to the network with USIM and establish an emergency PDU session + testcase TD_VoNR_ECO_INT_5RG_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S6A_INTERFACENAME, + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Step 1, 2 + f_mtc_check_TP_N1N2_AMF_ECO_REG_01(vc_5g_monitor_components.ngap, true); + // Step 3 + f_mtc_check_TP_N1N2_AMF_ECO_PDUE_01(vc_5g_monitor_components.ngap, true); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_5RG_01 + + // To attempt initial emergency IMS registration via the established emergency PDU session + testcase TD_VoNR_ECO_INT_5RG_02() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S6A_INTERFACENAME, + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Step 1, 2 + f_mtc_check_TP_N1N2_AMF_ECO_REG_02(vc_5g_monitor_components.ngap, true); + // Step 3 + f_mtc_check_TP_N1N2_AMF_ECO_PDUE_01(vc_5g_monitor_components.ngap, true); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_5RG_02 + + } // End of group Network_5G_Registration + + group Network_5G_RegistrationRoaming { + + // To perform UE emergency 5G registration to the network with USIM and establish an emergency PDU session + testcase TD_VoNR_ECO_RMI_5RG_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S6A_INTERFACENAME, + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Step 1, 2 + f_mtc_check_TP_N1N2_AMF_ECO_REG_01(vc_5g_monitor_components.ngap, true); + // Step 3 + f_mtc_check_TP_N1N2_AMF_ECO_PDUE_01(vc_5g_monitor_components.ngap, true); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_RMI_5RG_01 + + // To perform UE emergency 5G registration to the network with USIM and establish an emergency PDU session + testcase TD_VoNR_ECO_RMI_5RG_02() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S6A_INTERFACENAME, + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Step 1, 2 + f_mtc_check_TP_N1N2_AMF_ECO_REG_02(vc_5g_monitor_components.ngap, true); + // Step 3 + f_mtc_check_TP_N1N2_AMF_ECO_PDUE_01(vc_5g_monitor_components.ngap, true); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_RMI_5RG_02 + + } // End of group Network_5G_RegistrationRoaming + + + } // End of group Interoperability + +} // End of module AtsIms5gIot_TD_5GREG diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TD_DRG.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_DRG.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..3ec978f7832b231fc642af62c7608c2220ddb81c --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_DRG.ttcn @@ -0,0 +1,28 @@ +module AtsIms5gIot_TD_DRG { + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_5GNR_PIXITS all; + import from LibIot_5GNR_Functions all; + // LibImsIot + import from AtsImsIot_Functions all; + // LibImsIot + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_PIXITS all; + // Ims5gIot + import from AtsIms5gIot_TestConfiguration all; + import from AtsIms5gIot_TestSystem all; + import from AtsIms5gIot_Functions all; + +} // End of module AtsIms5gIot_TD_DRG diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TD_FB5Gto4G.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_FB5Gto4G.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..9ef9ae8f1e9e3ff32ffed99cc71015b4264b05e0 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_FB5Gto4G.ttcn @@ -0,0 +1,99 @@ +module AtsIms5gIot_TD_FB5Gto4G { + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_5GNR_PIXITS all; + import from LibIot_5GNR_Functions all; + // LibImsIot + import from AtsImsIot_Functions all; + // LibImsIot + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_PIXITS all; + // Ims5gIot + import from AtsIms5gIot_TestConfiguration all; + import from AtsIms5gIot_TestSystem all; + import from AtsIms5gIot_Functions all; + + group Emergency_Fallback5Gto4G { + + testcase TD_VoNR_EMC_INT_FB_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_SIP_ML_E_LRF_INTERFACENAME, // E-CSCF -> LRF + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1,2 + //f_mtc_check_TP_RTP_ECO_03(vc_5g_monitor_components.rtp, true); + + //Event 3 + //f_mtc_check_TP_NGAP_GNB_MMP_01(vc_5g_monitor_components.ngap, true); + //Event 8 + //f_mtc_check_TP_NGAP_AMF_MMP_01(vc_5g_monitor_components.ngap, true); + + //Event 4 + //f_mtc_check_TP_N26_AMF_01(vc_5g_monitor_components.n26, true); + //Event 7 + //f_mtc_check_TP_N26_AMF_02(vc_5g_monitor_components.n26, true); + //Event 12,13 + //f_mtc_check_TP_N26_AMF_03(vc_5g_monitor_components.n26, true); + + //Event 5 + //f_mtc_check_TP_S1AP_MME_HAS_10(vc_5g_monitor_components.s1ap, true); + //Event 6 + //f_mtc_check_TP_S1AP_ENB_HAS_06(vc_5g_monitor_components.s1ap, true); + //Event 11 + //f_mtc_check_TP_S1AP_ENB_HAS_10(vc_5g_monitor_components.s1ap, true); + + //Event 14,15 + //f_mtc_check_TP_RTP_ECO_03(vc_5g_monitor_components.rtp, true); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_EMC_INT_FB_01 + + + }//End of group Emergency_Fallback5Gto4G + +} // End of module AtsIms5gIot_TD_FB5Gto4G diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TD_INI.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_INI.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..fca5274e512c3a90f8f0f19adc9b452807c8677a --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_INI.ttcn @@ -0,0 +1,1771 @@ +module AtsIms5gIot_TD_INI { + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_5GNR_PIXITS all; + import from LibIot_5GNR_Functions all; + // LibImsIot + import from AtsImsIot_Functions all; + // LibImsIot + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_PIXITS all; + // Ims5gIot + import from AtsIms5gIot_TestConfiguration all; + import from AtsIms5gIot_TestSystem all; + import from AtsIms5gIot_Functions all; + import from AtsIms5gIot_TP_behavior_GM all; + import from AtsIms5gIot_TP_behavior_MW_PS all; + import from AtsIms5gIot_TP_behavior_MW_IS all; + import from AtsIms5gIot_TP_behavior_MW_SI all; + import from AtsIms5gIot_TP_behavior_MM all; + import from AtsImsIot_TP_behavior_ISC all; + import from AtsIms5gIot_TP_behavior_MI all; + import from AtsIms5gIot_TP_behavior_MX all; + import from AtsIms5gIot_TP_behavior_N1N2 all; + import from AtsIms5gIot_TP_behavior_N5_PCF all; + import from AtsIms5gIot_TP_behavior_RX all; + import from AtsIms5gIot_PICs all; + + group Interoperability{ + + group UE_calling_PSAP_with_emergency_registration { + + // To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration + testcase TD_VoNR_ECO_INT_INI_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.gmA, -, v_sip); + } // N6 interface not supported, eCall + // Event 3 + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.gmA, true); + // Event 7 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 8 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.mwPI, true); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Event 5, 6 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01(vc_5g_monitor_components.rx, true); + } + // Event 11 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Event 16 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_INI_01 + + } // End of group UE_calling_PSAP_with_emergency_registration + + group UE_calling_PSAP_with_non_emergency_registration { + + // To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within a non-emergency registration + testcase TD_VoNR_ECO_INT_INI_02() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_03(vc_5g_monitor_components.gmA, -, v_sip); + } // N6 interface not supported, eCall + // Event 7 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_03(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 8 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.mwPI, true); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Event 5, 6 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Event 11 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } + // Event 16 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_INI_02 + + } // End of group UE_calling_PSAP_with_non_emergency_registration + + group UE_calling_PSAP_without_any_registration { + + // To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment without any registration + testcase TD_VoNR_ECO_INT_INI_03() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + } // N6 interface not supported, eCall + // Event 7 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 8 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.mwPI, true); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Event 5, 6 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01(vc_5g_monitor_components.rx, true); + } + // Event 11 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Event 16 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_INI_03 + + } // End of group UE_calling_PSAP_without_any_registration + + group UE_calling_PSAP_in_same_network_LRF { + + // To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration + testcase TD_VoNR_ECO_INT_INI_04() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_SIP_ML_E_LRF_INTERFACENAME, // E-CSCF -> LRF + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.gmA, -, v_sip); + } else { + f_mtc_check_TP_GM_PCSCF_5G_NGC_INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + } + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.gmA, true); + // Event 7 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 8 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.mwPI, true); + // Event 9 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mmB_PSAP, true); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Event 5, 6 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01(vc_5g_monitor_components.rx, true); + } + // Event 13 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Event 18 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_INI_04 + + } // End of group UE_calling_PSAP_in_same_network_LRF + + group UE_calling_PSAP_in_another_network_IBCF { + + // To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration + testcase TD_VoNR_ECO_INT_INI_05() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.gmA, -, v_sip); + } else { + f_mtc_check_TP_GM_PCSCF_5G_NGC_INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + } + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.gmA, true); + // Event 7 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 8 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.mwPI, true); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Event 5, 6 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Event 13 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } + // Event 18 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_INI_05 + + } // End of group UE_calling_PSAP_in_another_network_IBCF + + group UE_calling_PSAP_in_another_network_IBCF_LRF { + + // To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration + testcase TD_VoNR_ECO_INT_INI_06() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, // IBCF -> PSAP + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.gmA, -, v_sip); + } else { + f_mtc_check_TP_GM_PCSCF_5G_NGC_INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + } + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.gmA, true); + // Event 10 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 11 + f_mtc_check_TP_MI_ECSCF_5G_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + // Event 12, 13 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mmB_PSAP, true); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Event 5, 6 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01(vc_5g_monitor_components.rx, true); + } + // Event 15 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Event 20 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_INI_06 + + } // End of group UE_calling_PSAP_in_another_network_IBCF_LRF + + group UE_calling_PSAP_PSTN_BGCF { + + // To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration + testcase TD_VoNR_ECO_INT_INI_07() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME, // IBCF -> PSAP + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.gmA, -, v_sip); + } else { + f_mtc_check_TP_GM_PCSCF_5G_NGC_INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + } + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.gmA, true); + // Event 7 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mwPE, -, v_sip); + // Event 12, 13 + f_mtc_check_TP_MI_ECSCF_5G_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + // Event 8 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mmB_PSAP, true); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Event 5, 6 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01(vc_5g_monitor_components.rx, true); + } + // Event 13 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Event 18 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_INI_07 + + } // End of group UE_calling_PSAP_PSTN_BGCF + + group UE_calling_PSAP_PSTN_BGCF_LRF { + + // To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment within an emergency registration + testcase TD_VoNR_ECO_INT_INI_08() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME, // IBCF -> PSAP + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1, 2 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.gmA, -, v_sip); + } else { + f_mtc_check_TP_GM_PCSCF_5G_NGC_INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + } + // Pre test + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.gmA, true); + // Event 7 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mwPE, -, v_sip); + // Event 8 + f_mtc_check_TP_MI_ECSCF_5G_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + // Event 10, 11 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mmB_PSAP, true); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Events 5, 6 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01(vc_5g_monitor_components.rx, true); + } + // Events 15 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Events 20 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_INI_08 + + } // End of group UE_calling_PSAP_PSTN_BGCF_LRF + + group UE_calling_PSAP_over_AS_with_non_emergency_registration { + + // To demonstrate the establishment of dedicated PDU sessions at the originating 5GC due to SIP emergency session establishment over AS with non-emergency registration + testcase TD_VoNR_ECO_INT_INI_09() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> PSAP + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 2 + f_mtc_check_TP_ISC_SCSCF_5G_EMC_INVITE_01(vc_5g_monitor_components.isc, -, v_sip); + // Event 3 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mwPE, -, v_sip); + // Event 4 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mmB_PSAP, true); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_INI_09 + + } // End of group UE_calling_PSAP_over_AS_with_non_emergency_registration + + group Callback_from_PSAP { + + // To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered + testcase TD_VoNR_ECO_INT_INI_10() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> PSAP + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_03(vc_5g_monitor_components.mmB_PSAP, true, v_sip); + // Event 3 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_03(vc_5g_monitor_components.mwPE, -, v_sip); + // Event 5 + f_mtc_check_TP_MI_ECSCF_5G_ECO_INVITE_03(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 6 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_05(vc_5g_monitor_components.mwPE, -, v_sip); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_INI_10 + + } // End of group Callback_from_PSAP + + group UE_Initiated_Emergency_Session_Release { + + // To perform originating UE session release and the tear down of related PDU session + testcase TD_VoNR_ECO_INT_REL_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> PSAP + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 2, 3 + f_mtc_check_TP_GM_PCSCF_5G_ECO_BYE_01(vc_5g_monitor_components.gmA, true, v_sip); + // Event 4 + f_mtc_check_TP_MW_PCSCF_5G_ECO_BYE_01(vc_5g_monitor_components.mwPI, true, v_sip); + // Event 5 + f_mtc_check_TP_MM_ECSCF_5G_ECO_BYE_01(vc_5g_monitor_components.mwPI, true, v_sip); + // Event 5, 7 + f_mtc_check_TP_MX_ECSCF_5G_ECO_BYE_01(vc_5g_monitor_components.mwEB, true, v_sip); + // Event 8, 9 + f_mtc_check_TP_MI_ECSCF_5G_ECO_BYE_01(vc_5g_monitor_components.mwPI, true, v_sip); + // Events 10 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PDR_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_STR_01(vc_5g_monitor_components.rx, true); + } + // Event 18, 19 + f_mtc_check_TP_GM_PCSCF_5G_ECO_200OK_BYE_01(vc_5g_monitor_components.gmA, -, v_sip); + // Event 17 + f_mtc_check_TP_MW_PCSCF_5G_EMC_200OK_BYE_01(vc_5g_monitor_components.mwPI, -, v_sip); + // Events 11 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PDA_02(vc_5g_monitor_components.n5, true); + } else { + f_mtc_check_TP_RX_PCRF_5G_ECO_STR_02(vc_5g_monitor_components.rx, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_REL_01 + + } // End of group UE_Initiated_Emergency_Session_Release + + group PSAP_Initiated_Emergency_Session_Release { + + // To perform originating PSAP emergency session release and the tear down of related PDU session + testcase TD_VoNR_ECO_INT_REL_02() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> PSAP + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 2, 7 + f_mtc_check_TP_GM_PCSCF_5G_ECO_BYE_02(vc_5g_monitor_components.gmA, true, v_sip); + // Event 4, 7 + f_mtc_check_TP_MX_ECSCF_5G_ECO_BYE_02(vc_5g_monitor_components.mwPI, true, v_sip); + // Event 6, 7 + f_mtc_check_TP_MI_ECSCF_5G_ECO_BYE_02(vc_5g_monitor_components.mwPI, true, v_sip); + // Event 13 + f_mtc_check_TP_GM_PCSCF_5G_ECO_200OK_BYE_02(vc_5g_monitor_components.gmA, -, v_sip); + // Event 14 + f_mtc_check_TP_MW_PCSCF_5G_EMC_200OK_BYE_02(vc_5g_monitor_components.mwPI, -, v_sip); + // Events 10 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PDR_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_STR_01(vc_5g_monitor_components.rx, true); + } + // Events 11 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PDA_02(vc_5g_monitor_components.n5, true); + } else { + f_mtc_check_TP_RX_PCRF_5G_ECO_STR_02(vc_5g_monitor_components.rx, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_REL_02 + + } // End of group PSAP_Initiated_Emergency_Session_Release + + group Emergency_Session_Abort { + + // To perform SIP session abort (originating side) and the related interactions with PCF A and 5GC A + testcase TD_VoNR_EMC_INT_ABT_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> PSAP + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1, 2 + f_mtc_check_TP_GM_PCSCF_5G_EMC_CANCEL_01(vc_5g_monitor_components.gmA, true, v_sip); + // Event 5 + f_mtc_check_TP_MW_PCSCF_5G_EMC_CANCEL_01(vc_5g_monitor_components.mwPI, true, v_sip); + // Event 6, 7 + f_mtc_check_TP_MM_ECSCF_5G_EMC_CANCEL_01(vc_5g_monitor_components.mwPI, true, v_sip); + // Event 8, 11 + f_mtc_check_TP_MX_ECSCF_5G_EMC_CANCEL_01(vc_5g_monitor_components.mwEB, true, v_sip); + // Event 12, 15 + f_mtc_check_TP_MI_ECSCF_5G_EMC_CANCEL_01(vc_5g_monitor_components.mwPI, true, v_sip); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PDR_03(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_STR_03(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PDA_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCRF_5G_ECO_STR_02(vc_5g_monitor_components.rx, true); + } + // Event 17, 18 + f_mtc_check_TP_GM_PCSCF_5G_EMC_200OK_CANCEL_01(vc_5g_monitor_components.gmA, -, v_sip); + // Event 16 + f_mtc_check_TP_MW_PCSCF_5G_EMC_200OK_CANCEL_01(vc_5g_monitor_components.mwPI, -, v_sip); + // Events 19 + f_mtc_check_TP_MM_ECSCF_5G_EMC_487INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + // Events 21 + f_mtc_check_TP_MX_ECSCF_5G_EMC_487INVITE_01(vc_5g_monitor_components.mwEB, -, v_sip); + // Events 23 + f_mtc_check_TP_MI_ECSCF_5G_EMC_487INVITE_01(vc_5g_monitor_components.mwPI, -, v_sip); + // Events 25, 26 + f_mtc_check_TP_GM_PCSCF_5G_EMC_487INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + // Events 24 + f_mtc_check_TP_MW_PCSCF_5G_EMC_487INVITE_01(vc_5g_monitor_components.mwPI, -, v_sip); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_EMC_INT_ABT_01 + + } // End of group Emergency_Session_Abort + + group Emergency_Session_Reject_from_PSAP { + + // To demonstrate interaction between UE A and PSAP when an emergency session is rejected - PSAP in IMSA network (option1) + testcase TD_VoNR_ECO_INT_REJ_01_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> PSAP + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 2, 3 + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + /* FIXME FSCOM Not sure of what are: + Gm TP_GM_PCSCF_5G_ECO_INVITE_02 (Event 2, 3) + Gm TP_GM_PCSCF_5G_ECO_INVITE_03 (Event 2, 3) + Gm TP_GM_PCSCF_5G_NGC_INVITE_01 (Event 2, 3) + Gm TP_GM_PCSCF_5G_ECO_INVITE_05 (Event 2, 3) + */ + // Event 10, 19 + f_mtc_check_TP_MM_ECSCF_5G_ECO_480INVITE_01(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 19, 22 + f_mtc_check_TP_MW_PCSCF_5G_ECO_480INVITE_01 (vc_5g_monitor_components.mwPI, -, v_sip); + // Events 20 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PDR_05(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_STR_05(vc_5g_monitor_components.rx, true); + } + // Events 21 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PDA_02(vc_5g_monitor_components.n5, true); + } else { + f_mtc_check_TP_RX_PCRF_5G_ECO_STR_02(vc_5g_monitor_components.rx, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_REJ_01_01 + + // To demonstrate interaction between UE A and PSAP when an emergency session is rejected - PSAP not in IMSA network (option2) + testcase TD_VoNR_ECO_INT_REJ_01_02() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> PSAP + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 2, 3 + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.gmA, -, v_sip); + // Event 14, 19 + f_mtc_check_TP_MX_ECSCF_5G_ECO_480INVITE_01(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 19, 22 + f_mtc_check_TP_MW_PCSCF_5G_ECO_480INVITE_01 (vc_5g_monitor_components.mwPI, -, v_sip); + // Events 20 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PDR_05(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_STR_05(vc_5g_monitor_components.rx, true); + } + // Events 21 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PDA_02(vc_5g_monitor_components.n5, true); + } else { + f_mtc_check_TP_RX_PCRF_5G_ECO_STR_02(vc_5g_monitor_components.rx, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_REJ_01_02 + + // To demonstrate interaction between UE A and PSAP when an emergency session is rejected - PSAP in PSTN network (option3) + testcase TD_VoNR_ECO_INT_REJ_01_03() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> PSAP + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 2, 3 + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_03(vc_5g_monitor_components.gmA, -, v_sip); + // Event 18, 19 + f_mtc_check_TP_MI_ECSCF_5G_ECO_480INVITE_01(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 19, 22 + f_mtc_check_TP_MI_ECSCF_5G_ECO_480INVITE_01(vc_5g_monitor_components.mwEB, -, v_sip); + // Events 20 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PDR_05(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_STR_05(vc_5g_monitor_components.rx, true); + } + // Events 21 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PDA_02(vc_5g_monitor_components.n5, true); + } else { + f_mtc_check_TP_RX_PCRF_5G_ECO_STR_02(vc_5g_monitor_components.rx, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_REJ_01_03 + + } // End of group Emergency_Session_Reject_from_PSAP + + group Emergency_Session_Reject_IMS_not_able_to_handle_emergency_sessions { + + // To demonstrate interaction between UE A and P-CSCF when an emergency session is rejected + testcase TD_VoNR_ECO_INT_REJ_02() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> PSAP + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.gmA, true, v_sip); + // Event 3 + f_mtc_check_TP_MW_PCSCF_5G_ECO_380INVITE_01(vc_5g_monitor_components.gmA, true, v_sip); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_REJ_02 + + } // End of group Emergency_Session_Reject_IMS_not_able_to_handle_emergency_sessions + + group Emergency_Session_Reject_due_to_wrong_urn { + + // To demonstrate interaction between UE A and P-CSCF when an emergency session is rejected due to wrong urn + testcase TD_VoNR_ECO_INT_REJ_03() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> PSAP + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + f_mtc_check_TP_GM_PCSCF_5G_INVITE_01(vc_5g_monitor_components.gmA, true, v_sip); // Normal call instead of emergency call ==> wrong uri + // Event 2 + f_mtc_check_TP_MW_PCSCF_5G_ECO_380INVITE_02(vc_5g_monitor_components.gmA, true, v_sip); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_REJ_03 + + } // End of group Emergency_Session_Reject_due_to_wrong_urn + + group Ng_ecall{ + + testcase TD_VoNR_NGC_INT_INI_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_NGC_INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + } // N6 interface not supported, eCall + // + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.gmA, true); + // Event 6,7 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 6,7 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.mwPI, true); + // Events 2 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 3,9 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Event 4,5 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01(vc_5g_monitor_components.rx, true); + } + // Event 8 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Event 9 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + // Event 25 + //f_mtc_check_TP_RTP_ECO_03(vc_5g_monitor_components.rtp, true); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_NGC_INT_INI_01 + + testcase TD_VoNR_NGC_INT_INF_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 7,8 + if (not PX_ECALL) { + f_mtc_check_TP_MW_PCSCF_5G_NGC_INFO_01(vc_5g_monitor_components.mwPS, -, v_sip); + f_mtc_check_TP_GM_PCSCF_5G_NGC_INFO_01(vc_5g_monitor_components.gmA, -, v_sip); + } // N6 interface not supported, eCall + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_NGC_INT_INF_01 + + } // End of group Ng_ecall + + group Emergency_Session_Establishment_Roaming { + + testcase TD_VoNR_ECO_RMI_INI_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_SIP_ML_E_LRF_INTERFACENAME, // E-CSCF -> LRF + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.gmA, -, v_sip); + } else { + f_mtc_check_TP_GM_PCSCF_5G_NGC_INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + } + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.gmA, true); + // Event 7 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 8 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.mwPI, true); + + // Event 9 + //f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mmB_PSAP, true); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Event 5, 6 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01(vc_5g_monitor_components.rx, true); + } + // Event 11 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Event 12 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + // Event 28 + //f_mtc_check_TP_RTP_ECO_03(vc_5g_monitor_components.rtp, true); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_RMI_INI_01 + + testcase TD_VoNR_ECO_RMI_INI_02() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_SIP_ML_E_LRF_INTERFACENAME, // E-CSCF -> LRF + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.gmA, -, v_sip); + } else { + f_mtc_check_TP_GM_PCSCF_5G_NGC_INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + } + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.gmA, true); + // Event 7 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 8 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.mwPI, true); + + // Event 9 + //f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mmB_PSAP, true); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Event 5, 6 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01(vc_5g_monitor_components.rx, true); + } + // Event 11 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Event 12 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + // Event 28 + //f_mtc_check_TP_RTP_ECO_03(vc_5g_monitor_components.rtp, true); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_RMI_INI_02 + + testcase TD_VoNR_ECO_RMI_INI_04() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_SIP_ML_E_LRF_INTERFACENAME, // E-CSCF -> LRF + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + var SipMessage v_sip; + + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.gmA, -, v_sip); + } else { + f_mtc_check_TP_GM_PCSCF_5G_NGC_INVITE_01(vc_5g_monitor_components.gmA, -, v_sip); + } + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.gmA, true); + // Event 7 + f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mwPI, -, v_sip); + // Event 8 + f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_01(vc_5g_monitor_components.mwPI, true); + + // Event 9 + //f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_02(vc_5g_monitor_components.mmB_PSAP, true); + // Events 3 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02(vc_5g_monitor_components.rx, true); + } + // Events 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_02(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02(vc_5g_monitor_components.rx, true); + } + // Event 5, 6 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PNA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01(vc_5g_monitor_components.rx, true); + } + // Event 11 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUR_04(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04(vc_5g_monitor_components.rx, true); + } + // Event 12 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PUA_01(vc_5g_monitor_components.n5, true); + } + // Event 28 + //f_mtc_check_TP_RTP_ECO_03(vc_5g_monitor_components.rtp, true); + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_RMI_INI_04 + } // End of group Emergency_Session_Establishment_Roaming + + } // End of group Interoperability + +} // End of module AtsIms5gIot_TD_INI diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TD_REG.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_REG.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1a781ff8aefb6b3d729c3f1969ea4aa52d57b22b --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TD_REG.ttcn @@ -0,0 +1,333 @@ +module AtsIms5gIot_TD_REG { + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_5GNR_PIXITS all; + import from LibIot_5GNR_Functions all; + // LibImsIot + import from AtsImsIot_Functions all; + // LibImsIot + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_PIXITS all; + // Ims5gIot + import from AtsIms5gIot_TestConfiguration all; + import from AtsIms5gIot_TestSystem all; + import from AtsIms5gIot_Functions all; + import from AtsIms5gIot_TP_behavior_GM all; + import from AtsIms5gIot_TP_behavior_MW_PS all; + import from AtsIms5gIot_TP_behavior_MW_IS all; + import from AtsIms5gIot_TP_behavior_MW_SI all; + import from AtsIms5gIot_TP_behavior_MM all; + import from AtsIms5gIot_TP_behavior_N1N2 all; + import from AtsIms5gIot_TP_behavior_N5_PCF all; + import from AtsIms5gIot_TP_behavior_RX all; + import from AtsIms5gIot_TP_behavior_CX all; + import from AtsIms5gIot_PICs all; + + group Interoperability{ + + group IMS_Emergency_Registration_Successful { + + // To perform emergency IMS registration via the established emergency PDU session + testcase TD_VoNR_ECO_INT_REG_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 2, 13 + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_01(vc_5g_monitor_components.gmA, true); + // Event 14, 23 + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.gmA, true); + // Events 5, 12 + f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_01(vc_5g_monitor_components.mwPI, true); + // Events 15, 22 + f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.mwPI, true); + // Events 8, 11 + f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_01(vc_5g_monitor_components.mwIS, true); + // Events 18, 21 + f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_02(vc_5g_monitor_components.mwIS, true); + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == false) { + // Events 6, 7 + f_mtc_check_TP_CX_HSS_5G_ECO_UAA_01(vc_5g_monitor_components.gx, true); + // Events 9, 10 + f_mtc_check_TP_CX_HSS_5G_ECO_MAA_01(vc_5g_monitor_components.gx, true); + // Events 16, 17 + f_mtc_check_TP_CX_HSS_5G_ECO_UAA_02(vc_5g_monitor_components.gx, true); + // Events 19, 20 + f_mtc_check_TP_CX_HSS_5G_ECO_SAA_03(vc_5g_monitor_components.gx, true); + } + + // Event 3, 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_01(vc_5g_monitor_components.n5, true); + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_01(vc_5g_monitor_components.rx, true); + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAA_01(vc_5g_monitor_components.rx, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_REG_01 + + } // End of group IMS_Emergency_Registration_Successful + + group IMS_Emergency_Registration_Unsuccessful { + + // To attempt initial emergency IMS registration via the established emergency PDU session + testcase TD_VoNR_ECO_INT_REG_02() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_RX_INTERFACENAME,PX_NGAP_N1N2_INTERFACENAME,PX_HTTP_N5_INTERFACENAME})){ + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 2, 13 + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_01(vc_5g_monitor_components.gmA, true); + // Event 14, 23 + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_03(vc_5g_monitor_components.gmA, true); + // Events 5, 12 + f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_01(vc_5g_monitor_components.mwPI, true); + // Events 15, 22 + f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_03(vc_5g_monitor_components.mwPI, true); + // Events 8, 11 + f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_01(vc_5g_monitor_components.mwIS, true); + // Events 18, 21 + f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_03(vc_5g_monitor_components.mwIS, true); + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == false) { + // Events 6, 7 + f_mtc_check_TP_CX_HSS_5G_ECO_UAA_01(vc_5g_monitor_components.gx, true); + // Events 9, 10 + f_mtc_check_TP_CX_HSS_5G_ECO_MAA_01(vc_5g_monitor_components.gx, true); + // Events 16, 17 + f_mtc_check_TP_CX_HSS_5G_ECO_UAA_02(vc_5g_monitor_components.gx, true); + // Events 19, 20 + f_mtc_check_TP_CX_HSS_5G_ECO_SAA_03(vc_5g_monitor_components.gx, true); + } + + // Event 3, 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_01(vc_5g_monitor_components.n5, true); + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_01(vc_5g_monitor_components.rx, true); + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAA_01(vc_5g_monitor_components.rx, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_INT_REG_02 + + } // End of group IMS_Emergency_Registration_Unsuccessful + + group IMS_Emergency_Registration_Roaming{ + + // To perform emergency roaming IMS registration via the established emergency PDU session + testcase TD_VoNR_ECO_RMI_REG_01() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_set5GNRMonIterfacesAvailability(); + // Check required monitor interfaces due to TD + if (f_check5GNRRequiredMonitorInterface({ + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_NGAP_N1N2_INTERFACENAME, + PX_HTTP_N5_INTERFACENAME + })){ + f_cf_create5GNRMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_5GNRMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Event 1, 9 + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_04(vc_5g_monitor_components.gmA, true); + // Event 1, 11 + f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_05(vc_5g_monitor_components.gmA, true); + // Events 5, 8 + f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_04(vc_5g_monitor_components.mwPI, true); + // Events 5, 10 + f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_05(vc_5g_monitor_components.mwPI, true); + + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == false) { + // Events 6, 7 + f_mtc_check_TP_CX_HSS_5G_ECO_UAA_01(vc_5g_monitor_components.gx, true); + } + + // Event 3, 4 + if (PICS_5G_SERVICE_BASED_ARCHITECTURE == true) { + f_mtc_check_TP_N5_PCSCF_5G_ECO_PCR_01(vc_5g_monitor_components.n5, true); + f_mtc_check_TP_N5_PCF_5G_ECO_PCA_01(vc_5g_monitor_components.n5, true); + } else { + // Use RX interface instead of N5 + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_01(vc_5g_monitor_components.rx, true); + f_mtc_check_TP_RX_PCSCF_5G_ECO_AAA_01(vc_5g_monitor_components.rx, true); + } + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_5GNRMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoNR_ECO_RMI_REG_01 + + + } // End of group IMS_Emergency_Registration_Roaming + + + } // End of group Interoperability + + + + + + + + + + + + + + group validate_diameter_messages { + + // For Diameter codec tests only + import from LibDiameter_TypesAndValues all; + + function f_validate_aar(in octetstring p_aar) { + var bitstring v_conv := oct2bit(p_aar); + var AAR_MSG v_msg; + var integer v_result := decvalue(v_conv, v_msg); + log("msg: ", v_msg); + if (not(isbound(v_msg))) { + log("v_msg not bound"); + setverdict(fail); + } else if (v_result == 0) { + var octetstring v_aar_enc := bit2oct(encvalue(v_msg)); + log("v_aar_enc: ", v_aar_enc); + log("Matching v_aar_enc: ", match(p_aar, v_aar_enc)); + if (match(p_aar, v_aar_enc)) { + setverdict(pass); + } else { + setverdict(fail); + } + } else { + setverdict(fail); + } + } + + function f_validate_uar(in octetstring p_uar) { + var bitstring v_conv := oct2bit(p_uar); + var UAR_MSG v_msg; + var integer v_result := decvalue(v_conv, v_msg); + log("msg: ", v_msg); + if (not(isbound(v_msg))) { + log("v_msg not bound"); + setverdict(fail); + } else if (v_result == 0) { + var octetstring v_uar_enc := bit2oct(encvalue(v_msg)); + log("v_uar_enc: ", v_uar_enc); + log("Matching v_uar_enc: ", match(p_uar, v_uar_enc)); + if (match(p_uar, v_uar_enc)) { + setverdict(pass); + } else { + setverdict(fail); + } + } else { + setverdict(fail); + } + } + + // TC_VxLTE_RMI_REG_01.pcapng + testcase TC_VoNR_Diameter_AAR() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + f_validate_aar('010002acc000010901000014000002334670023300000107400000876174686f6e65742e696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f72673b303b303b7369703a30303130313130303130303232303740696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f72673b696d733a7369703a3139322e3136382e3136362e37333a353036300000000108400000316174686f6e65742e696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f72670000000000012840000029696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f7267000000000001024000000c010000140000011b400000296570632e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f7267000000000000084000000cc0a8a64900000205c000010c000028af00000206c0000010000028af0000000000000207c00000dc000028af000001fdc0000010000028af00000001000001fbc0000046000028af7065726d697420696e2031372066726f6d203139322e3136382e3136362e3733203530363020746f203137322e32392e33362e313020353036300000000001fbc0000047000028af7065726d6974206f75742031372066726f6d203137322e32392e33362e3130203530363020746f203139322e3136382e3136362e3733203530363000000001ffc0000010000028af0000000200000200c0000010000028af000000020000021180000010000028af00000001000001f8c0000013000028af6174686f6e65740000000201c0000010000028af0000000c00000201c0000010000028af0000000200000201c0000010000028af000000040000021880000010000028af000000000000020fc0000010000028af000000000000021580000010000028af00000000'O); + } + testcase TC_VoNR_Diameter_AAA() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + f_validate_aar('010001104000010901000014000002334670023300000107400000876174686f6e65742e696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f72673b303b303b7369703a30303130313130303130303232303740696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f72673b696d733a7369703a3139322e3136382e3136362e37333a3530363000000001024000000c01000014000001084000002e706372662e6570632e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f7267000000000128400000296570632e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f72670000000000010c4000000c000007d1'O); + } + testcase TC_VoNR_Diameter_UAR() runs on FiveGNRTestCoordinator system FiveGNRIotSystemInterface { + f_validate_uar('010001a0c000012c010000000001fc43c521ba2d000001074000002d7363736366696d73342e696d73342e69736b726174656c2e6d616b3b3131303b373131333400000000000104400000200000010a4000000c000028af000001024000000c01000000000001154000000c0000000100000108400000237363736366696d73342e696d73342e69736b726174656c2e6d616b000000012840000019696d73342e69736b726174656c2e6d616b00000000000125400000236873733131696d73342e696d73342e69736b726174656c2e6d616b000000011b40000019696d73342e69736b726174656c2e6d616b00000000000258c000001d000028af696d73342e69736b726174656c2e6d616b0000000000026fc0000010000028af0000000000000259c0000041000028af7369703a30303130313130303130303232303740696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f7267000000000000014000003930303130313130303130303232303740696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f7267000000'O); + } + + } // End of group validate_diameter_messages + + + + + +} // End of module AtsIms5gIot_TD_REG diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_CX.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_CX.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..faa0a4ff4d1ec2239e888f335fc49806aaa09da4 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_CX.ttcn @@ -0,0 +1,1018 @@ +/* + * @author STF 574, TTF006 + * @version $Id$ + * @desc This module provides the TP behaviour functions at CX interface + */ + +module AtsIms5gIot_TP_behavior_CX +{ + + // LibDiameter + import from LibDiameter_Templates all; + import from LibDiameter_TypesAndValues all; + + // LibIot + import from LibIot_PIXITS all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_PIXITS all; + + // AtsImsIot + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + import from AtsImsIot_Diameter_Templates all; + import from AtsImsIot_TestSystem all; + + // LibIms + import from LibIms_UpperTester all; + +group g_HSS { + + + /** + * Starts monitor component behavior for TP_CX_HSS_MAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a MA-Request received due to S-CSCF registration notification procedure and sends SA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a MAR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             Destination_Realm_AVP
+     *             Public_Identity_AVP
+     *             User_Name_AVP
+     *             Server_Name_AVP
+     *             SIP_Number_Auth_Items_AVP
+     *             SIP_Auth_Data_Item_AVP containing
+     *                 SIP_Authentication_Scheme_AVP
+     *             ;
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the MAA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             not Experimental_Result_AVP
+     *             Result_Code_AVP
+     *                  indicating value DIAMETER_SUCCESS
+     *             User_Name_AVP
+     *             SIP_Number_Auth_Items_AVP
+     *             SIP_Auth_Data_Item_AVP containing
+     *                 SIP_Authentication_Scheme_AVP
+     *             ;
+     *         ;
+     *         to the IMS_S_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_5G_ECO_MAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { mAR_MSG := mw_MAR(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { mAR_MSG := mw_MAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_MAA_01 - MAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { mAA_MSG := mw_MAA }; + mw_diameter_msg_fail := { mAA_MSG := mw_MAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_5G_ECO_MAA_01 - MAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_5G_ECO_MAA_01 + + + /** + * Starts monitor component behavior for TP_CX_HSS_RTA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a RT-Request received due to S-CSCF network de-registration notification procedure and sends RT-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a RTR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Destination_Host_AVP
+     *             Destination_Realm_AVP
+     *             User_Name_AVP
+     *             Deregistration_Reason_AVP containing
+     *                 Reason_Code_AVP
+     *         ;;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the RTA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the IMS_S_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_RTA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rTR_MSG := mw_RTR }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rTR_MSG := mw_RTR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_RTA_01 - RTR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { rTA_MSG := mw_RTA }; + mw_diameter_msg_fail := { rTA_MSG := mw_RTA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_RTA_01 - RTA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_RTA_01 + + + /** + * Starts monitor component behavior for TP_CX_HSS_SAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a SA-Request received due to S-CSCF registration notification procedure and sends SA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a SAR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED,
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             Public_Identity_AVP
+     *             not User_Name_AVP
+     *             Destination_Realm_AVP
+     *             Server_Name_AVP
+     *             Server_Assignment_Type_AVP
+     *                 indicating value UNREGISTERED_USER
+     *             User_Data_Already_Available_AVP 
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the SAA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             User_Data AVP
+     *             Charging_Information_AVP
+     *         ;
+     *         to the IMS_S_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_SAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { sAR_MSG := mw_SAR_Registration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sAR_MSG := mw_SAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_SAA_01 - SAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { sAA_MSG := mw_SAA_userData }; + mw_diameter_msg_fail := { sAA_MSG := mw_SAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_SAA_01 - SAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_SAA_01 + + + /** + * Starts monitor component behavior for TP_CX_HSS_SAA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in an SA-Request received due to S-CSCF de-registration procedure and sends SA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a SAR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED,
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             Public_Identity_AVP
+     *             User_Name_AVP
+     *             Destination_Realm_AVP
+     *             Server_Name_AVP
+     *             Server_Assignment_Type_AVP
+     *                 indicating value USER_DEREGISTRATION
+     *             User_Data_Already_Available_AVP 
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the SAA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Result_Code_AVP
+     *                indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the IMS_S_CSCF_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_SAA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { sAR_MSG := mw_SAR_UserDeregistration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sAR_MSG := mw_SAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_SAA_02 -SAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { sAA_MSG := mw_SAA }; + mw_diameter_msg_fail := { sAA_MSG := mw_SAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_SAA_02 - SAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_SAA_02 + + + /** + * Starts monitor component behavior for TP_CX_HSS_5G_ECO_SAA_03 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in an SA-Request received due to S-CSCF de-registration procedure and sends SA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a SAR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED,
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             Public_Identity_AVP
+     *             User_Name_AVP
+     *             Destination_Realm_AVP
+     *             Server_Name_AVP
+     *             Server_Assignment_Type_AVP
+     *                 indicating value USER_DEREGISTRATION
+     *             User_Data_Already_Available_AVP 
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the SAA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Result_Code_AVP
+     *                indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the IMS_S_CSCF_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_5G_ECO_SAA_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { sAR_MSG := mw_SAR_UserDeregistration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sAR_MSG := mw_SAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_5G_ECO_SAR_03 - SAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { sAA_MSG := mw_SAA }; + mw_diameter_msg_fail := { sAA_MSG := mw_SAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_5G_ECO_SAA_03 - SAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_5G_ECO_SAA_03 + + + /** + * Starts monitor component behavior for TP_CX_HSS_UAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a UA-Request received due to first UE initial registration and sends UA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_I_CSCF_A entity sends a UAR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED,
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Public_Identity_AVP
+     *             Visited_Network_Identifier_AVP
+     *             User_Authorization_Type_AVP 
+     *                 indicating value REGISTRATION,
+     *             User_Name_AVP
+     *             Destination_Host_AVP
+     *             Destination_Realm_AVP
+     *             UAR_Flags_AVP 
+     *                 indicating value IMS_Emergency_Registration_bit_not_set
+     *             ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the UAA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             not Result_Code_AVP
+     *             Experimental_Result_AVP containing
+     *                 Experimental_Result_Code_AVP 
+     *                     indicating value DIAMETER_FIRST_REGISTRATION
+     *                 ;
+     *             ;
+     *         to the IMS_I_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_UAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + //"sip:"&v_userInfoA.publicId&@&v_userInfoA.domain + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_UAA_01 - UAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamFirstRegistration }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_UAA_01 - UAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_UAA_01 + + /** + * Starts monitor component behavior for f_mtc_check_TP_CX_HSS_5G_ECO_UAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a UA-Request received due to first UE initial registration and sends UA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_I_CSCF_A entity sends a UAR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED,
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Public_Identity_AVP
+     *             Visited_Network_Identifier_AVP
+     *             User_Authorization_Type_AVP 
+     *                 indicating value REGISTRATION,
+     *             User_Name_AVP
+     *             Destination_Host_AVP
+     *             Destination_Realm_AVP
+     *             UAR_Flags_AVP 
+     *                 indicating value IMS_Emergency_Registration_bit_not_set
+     *             ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the UAA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             not Result_Code_AVP
+     *             Experimental_Result_AVP containing
+     *                 Experimental_Result_Code_AVP 
+     *                     indicating value DIAMETER_FIRST_REGISTRATION
+     *                 ;
+     *             ;
+     *         to the IMS_I_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_5G_ECO_UAA_01 ( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + //"sip:"&v_userInfoA.publicId&@&v_userInfoA.domain + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_5G_ECO_UAR_01 - UAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamFirstRegistration }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_5G_ECO_UAA_01 - UAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_5G_ECO_UAA_01 + + /** + * Starts monitor component behavior for TP_CX_HSS_5G_ECO_UAA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a UA-Request received due to protected UE initial registration and sends UA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_I_CSCF_A entity sends a UAR containing
+     *             Public_Identity_AVP
+     *             User_Name_AVP
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the UAA containing
+     *             not Result_Code_AVP
+     *             Experimental_Result_AVP containing
+     *                 Experimental_Result_Code_AVP
+     *                     indicating value DIAMETER_SUBSEQUENT_REGISTRATION
+     *                 ;,
+     *             Server_Name_AVP
+     *             not Server_Capabilities_AVP
+     *         ;
+     *         to the IMS_I_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_5G_ECO_UAA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_5G_ECO_UAR_02 - UAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamSuccess/*uAA_MSG := mw_UAA_diamSubsequentRegistration*/ }; //TODO:Check TP + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_5G_ECO_UAA_02 - UAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_5G_ECO_UAA_02 + + function f_mtc_check_TP_CX_HSS_ECO_UAA_02( // FIXME To be reviewed + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_UAA_02 - UAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamSuccess/*uAA_MSG := mw_UAA_diamSubsequentRegistration*/ }; //TODO:Check TP + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_UAA_02 - UAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_ECO_UAA_02 + + /** + * Starts monitor component behavior for TP_CX_HSS_UAA_03 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that the IUT checks that the Private User Identity and the Public User Identity exists in the HSS and if not then IUT sets the appropriate experimental result code in the UA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_I_CSCF_A entity sends a UAR containing
+     *         User_Name_AVP
+     *             indicating value "an unknown private user identity"
+     *         Public_Identity_AVP
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the UAA containing
+     *             not Result_Code_AVP
+     *             Experimental_Result_AVP
+     *                 Experimental_Result_Code_AVP
+     *                     indicating value DIAMETER_ERROR_USER_UNKNOWN
+     *             not Server_Name_AVP
+     *         ;
+     *         to the IMS_I_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_UAA_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_unknownPrivateId }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_UAA_03 - UAR", + p_forward_to_mtc, + p_checkMessage ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamErrorUserUnknown }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_UAA_03 - UAA", + p_forward_to_mtc, + p_checkMessage ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_UAA_03 + + /** + * Starts monitor component behavior for TP_CX_HSS_UAA_03 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a UA-Request received due to UE de-registration and sends UA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_I_CSCF_A entity sends a UAR containing
+     *             Public_Identity_AVP
+     *             User_Name_AVP
+     *             User_Authentication_Type_AVP
+     *                 indicating value DE_REGISTRATION
+     *             Visited_Network_Identifier_AVP
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the UAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             Server_Name_AVP
+     *             not Server_Capabilities_AVP
+     *         ;
+     *         to the IMS_I_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_UAA_04( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_deRegistration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_UAA_04 - UAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamSuccess }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_UAA_04 - UAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_UAA_04 + + +} // end group g_HSS + + +} // end module AtsIms5gIot_TP_behavior_CX \ No newline at end of file diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_GM.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_GM.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..2519bde84a10a71cb3cd5be801c91ee35296808b --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_GM.ttcn @@ -0,0 +1,1383 @@ +/** + * @author TTF T044 + * @version $Id$ + * @desc This module provides the TP behaviour functions at GM interface + */ + +module AtsIms5gIot_TP_behavior_GM { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // LibAtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TP_behavior_GM all; + // AtsIms5gIot + import from AtsIms5gIot_TypesAndValues all; + import from AtsIms5gIot_TestSystem all; + + group imsMessages { + + /** + * @desc Verify that the P-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ContentLength indicating value greater than 1300 bytes + * ; + * to the IMS_P_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity receives the MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ContentLength indicating value greater than 1300 bytes + * ; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * PChargingVector containing + * orig_ioi indicating value PX_OPERATOR_ID_A, + * term_ioi indicating value PX_OPERATOR_ID_B, + * not PAccessNetworkInfo + * ;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_MESSAGE_01(p_monitorCompRef, p_checkMessage); + + } // End of function f_mtc_check_TP_GM_PCSCF_MESSAGE_01 + + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the UE_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "", + * not term_ioi, + * not SecurityClient + * ;; + * to the IMS_P_CSCF_A entity + * and the UE_A entity receives an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_REGISTER_01(p_monitorCompRef,p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_01 + + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * WwwAuthenticate containing + * Digest,, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "", + * not term_ioi, + * not SecurityClient, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth";; + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(p_monitorCompRef,p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_01 + + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_REGISTER_02(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_02 + + /** + * @desc Verify that the P-CSCF successfully processes a full emergency registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstRegistration + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_02 + + /** + * @desc Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_REGISTER_03(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_03 + + /** + * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case invalid credentials sent from UE. (Unsuccessful emergency registration). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "Invalid credentials", + * Contact indicating value "sos"; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_03 + + + function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_REGISTER_04(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_04 + + /** + * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case the UE and P-CSCF does not support GPRS-IMS-Bundled authentication. (Unsuccessful emergency registration). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_B and + * the UE_A entity not isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value GPRS_IMS_Bundled_authentication, + * Contact indicating value "sos"; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_B entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * MessageBody containing + * XML containing + * ims_3gpp_element indicating value anonymous_emergencycall;;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_04 + + function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_REGISTER_05(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_05 + + function f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_REGISTER_05 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToDetachUser + * } + * then { + * the UE_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_REGISTER_07(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_07 + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToDetachUser + * } + * then { + * the UE_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_P_CSCF_A entity and + * the UE_A entity receives a BYE + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_10( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_REGISTER_10(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_REGISTER_10 + + } // End of group imsDeRegistration + + group imsSubscribe { + + /** + * @desc Verify that the P-CSCF successfully processes a SUBSCRIBE. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a SUBSCRIBE + * } + * then { + * the IMS_P_CSCF_A entity receives an SUBSCRIBE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_SUBSCRIBE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_01(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_SUBSCRIBE_01 + + function f_mtc_check_TP_GM_PCSCF_5G_SUBSCRIBE_02( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_02(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_SUBSCRIBE_02 + + } // End of group imsSubscribe + + group imsNotify { + + /** + * @desc Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a NOTIFY + * } + * then { + * the IMS_P_CSCF_A entity sends an NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_NOTIFY_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_NOTIFY_01(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_NOTIFY_01 + + } // End of group imsNotify + + group imsPrack { + + /** + * @desc Verify that the P-CSCF successfully processes a PRACK in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a PRACK + * } + * then { + * the IMS_P_CSCF_A entity sends an PRACK + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_PRACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_PRACK_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_PRACK_01 + + } // End of group imsPrack + + group imsInvite { + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend an INVITE + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, // see 5.1.6.8.2 7) + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend an INVITE + * } + * then { + * the IMS_P_CSCF_B entity sends an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_INVITE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_INVITE_02 + + /** + * @desc "Verify that the P-CSCF successfully receives an initial emergency INVITE from an emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * // TODO Geolocation header maybe added later, check! + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_02 + + function f_mtc_check_TP_GM_PCSCF_5G_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_INVITE_03(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_INVITE_03 + + /** + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_03 + + + /** + * @desc Verify that the P-CSCF successfully receives an initial eCall type INVITE from an emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_INVITE_04 + + /** + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.4" + * Config Id CF_VoLTE_RMI_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * // This implies that the UE is currently attached and registered + * to its home operator's network and the IP-CAN does not define emergency bearers + * see 5.1.6.1 3rd paragraph // + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_INVITE_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_05(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_INVITE_05 + + + + /** + * @desc Send out INVITE message with incorrect urn + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_INVALID_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_INVALID_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_INVALID_INVITE_01 + + function f_mtc_check_TP_GM_PCSCF_5G_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_INVITE_04(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_INVITE_04 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_RE_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_RE_INVITE_01(p_monitorCompRef, p_checkMessage); + } // End of function TP_GM_PCSCF_RE_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_B entity previouslyEstablishedCallWith the UE_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives an ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends an ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_RE_INVITE_02( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_RE_INVITE_02(p_monitorCompRef, p_checkMessage); + } // End of function TP_GM_PCSCF_RE_INVITE_02 + + function f_mtc_check_TP_GM_PCSCF_5G_RE_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_RE_INVITE_03(p_monitorCompRef, p_checkMessage); + } // End of function TP_GM_PCSCF_RE_INVITE_03 + + function f_mtc_check_TP_GM_PCSCF_5G_RE_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_RE_INVITE_04(p_monitorCompRef, p_checkMessage); + } // End of function TP_GM_PCSCF_RE_INVITE_04 + + /** + * @desc Verify that the P-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_NGC_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_NGC_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_INVITE_04 + + } // End of group imsInvite + + group imsInfo { + + function f_mtc_check_TP_GM_PCSCF_5G_NGC_INFO_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_NGC_INFO_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_NGC_INFO_01 + + } // End of group imsInfo + + group imsBye { + + /** + * @desc Verify that the P-CSCF successfully processes a BYE for an emergency call. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_B entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_BYE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_BYE_02 + + } // End of group imsBye + + group ims200OkBye { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_200OK_BYE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_200OK_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_200OK_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_ECO_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_ECO_200OK_BYE_02 + + } // End of group ims200OkBye + + group imsCancel { + + function f_mtc_check_TP_GM_PCSCF_5G_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_EMC_CANCEL_01 + + } // End of group imsCancel + + group ims200OkCancel { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_EMC_200OK_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_EMC_200OK_CANCEL_01 + + } // End of group ims200OkCancel + + group imsRequestTermination { + + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_5G_EMC_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_GM_PCSCF_486INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_EMC_487INVITE_01 + + } // End of group imsRequestTermination + +} // End of module AtsIms5gIot_TP_behavior_GM \ No newline at end of file diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_IC.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_IC.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1f9292167dd42ce997931e50a4809c2df62f1cc5 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_IC.ttcn @@ -0,0 +1,123 @@ +/* + * @author STF 574, TTF006 + * @version $Id$ + * @desc This module provides the TP behaviour functions at IC interface + */ + +module AtsIms5gIot_TP_behavior_IC +{ + + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIms_UpperTester all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + + import from LibSip_Common all; + + import from AtsImsIot_Functions all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SDPTypes all; + // LibAtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TP_behavior_IC all; + // AtsIms5gIot + import from AtsIms5gIot_TypesAndValues all; + import from AtsIms5gIot_TestSystem all; + + + group g_IBCF { + + group g_IBCF_GC { + + /** + * @desc + * TP_IMS_4002_01 in CFW step 3 (MESSAGE)
ensure that {
+ * when { UE_A sends a MESSAGE to UE_B containing a Message_Body + * greater than 1300 bytes }
then { IMS_B receives the MESSAGE + * containing the Message_Body greater than 1300 bytes }
} + * @remark source function f_mtc_check_TP_IMS_4002_01_ic + */ + function f_mtc_check_TP_IC_IBCF_5G_GC_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_IC_IBCF_GC_01(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_IC_IBCF_5G_GC_01 + + } // group g_IBCF_GC + + group g_IBCF_INVITE { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_01_ic + */ + function f_mtc_check_TP_IC_IBCF_5G_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_IC_IBCF_INVITE_01(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_IC_IBCF_5G_INVITE_01 + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_INVITE_02 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_02_ic + */ + function f_mtc_check_TP_IC_IBCF_5G_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_IC_IBCF_INVITE_02(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_IC_IBCF_5G_INVITE_02 + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_INVITE_03 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_04_ic + */ + function f_mtc_check_TP_IC_IBCF_5G_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_IC_IBCF_INVITE_03(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_IC_IBCF_5G_INVITE_03 + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5046_01_ic + */ + function f_mtc_check_TP_IC_IBCF_5G_INVITE_04( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_IC_IBCF_INVITE_04(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_IC_IBCF_5G_INVITE_04 + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_INVITE_05 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_02_ic + */ + function f_mtc_check_TP_IC_IBCF_5G_INVITE_05( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_IC_IBCF_INVITE_05(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_IC_IBCF_5G_INVITE_05 + + } // end group g_IBCF_INVITE + + } // end group g_IBCF + +} // end module AtsIms5gIot_TP_behavior_IC \ No newline at end of file diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_ISC.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_ISC.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..86aa92b9fecc1553b971374c9b8eea42e1ae3572 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_ISC.ttcn @@ -0,0 +1,99 @@ +/* + * @author STF 574, TTF006 + * @version $Id$ + * @desc This module provides the TP behaviour functions at IC interface + */ + +module AtsIms5gIot_TP_behavior_ISC +{ + + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIms_UpperTester all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + + import from LibSip_Common all; + + import from AtsImsIot_Functions all; + import from AtsImsIot_Templates_ISC all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SDPTypes all; + // LibAtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TP_behavior_IC all; + import from AtsImsIot_TP_behavior_ISC all; + // AtsIms5gIot + import from AtsIms5gIot_TypesAndValues all; + import from AtsIms5gIot_TestSystem all; + + import from AtsImsIot_Templates_ISC all; + +group g_ISC { + + group imsRegistration { + /** + * @desc Starts monitor component behavior for TP_ISC_SCSCF_REGISTER_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_REGISTER_02 + */ + function f_mtc_check_TP_ISC_SCSCF_5G_REGISTER_01( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_ISC_SCSCF_REGISTER_01(p_monitorCompRef, p_checkMessage); + }//end f_mtc_check_TP_ISC_SCSCF_5G_REGISTER_01 + }// end imsRegistration + + + group imsInvite { + + /** + * @desc Verify that the S-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.7.1.14" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_S_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_ISC_SCSCF_5G_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_ISC_SCSCF_ECO_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_ISC_SCSCF_5G_INVITE_01 + + } + +} // end of g_ISC + +} // end module AtsIms5gIot_TP_behavior_ISC \ No newline at end of file diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MI.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MI.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..c158a629bb7fa5827cbab83add231cefd34815ce --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MI.ttcn @@ -0,0 +1,376 @@ +/* + * @author TTF T044 + * @version $Id$ + * @desc This module provides the TP behaviour functions at MI interface + */ +module AtsIms5gIot_TP_behavior_MI { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // LibAtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TP_behavior_MI all; + // AtsIms5gIot + import from AtsIms5gIot_TypesAndValues all; + import from AtsIms5gIot_TestSystem all; + + group imsInvite { + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_LRF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_5G_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MI_ECSCF_5G_ECO_INVITE_01 + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN and includes the LRF provided URI in the Request-URI." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + * the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + * the IMS_E_CSCF entity supportsRoutingTo the BGCF + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * Contact indicating value LRF_provided_SIP_URI; + * from the IMS_LRF entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_LRF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_5G_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MI_ECSCF_ECO_INVITE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MI_ECSCF_5G_ECO_INVITE_02 + + /** + * @desc "Verify that the E-CSCF successfully processes a callback INVITE from PSAP in the PSTN over BGCF and routes the request to the P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clause 4.1 item 12" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_PSAP_TEL_URI,// see 5.11.2 6) b) + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_BGCF_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_BGCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_P_CSCD_SERVICE_ROUTE, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_5G_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MI_ECSCF_5G_ECO_INVITE_03 + + } // End of group imsInvite + + group imsBye { + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_5G_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MI_ECSCF_ECO_BYE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MI_ECSCF_5G_ECO_BYE_01 + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_CALLID; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_5G_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MI_ECSCF_ECO_BYE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MI_ECSCF_5G_ECO_BYE_02 + + } // End of group imsBye + + group imsCancel { + + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the BGCF for a PSAP in the PSTN + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF and + * the UE_A entity hasAchievedInitialEmergencyINVITE the PSAP via IMS_BGCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_5G_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MI_ECSCF_5G_EMC_CANCEL_01 + + } // End of group imsCancel + + group imsTemporaryUnavailable { + + /** + * @desc Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_5G_ECO_480INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MI_ECSCF_ECO_480INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MI_ECSCF_5G_ECO_480INVITE_01 + + } // End of group imsTemporaryUnavailable + + group imsRequestTermination { + + /** + * @desc Verify that the E-CSCF successfully processes a 487 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_BGCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_5G_EMC_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MI_ECSCF_EMC_487INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MI_ECSCF_5G_EMC_487INVITE_01 + + } // End of group imsRequestTermination + +} // End of module AtsIms5gIot_TP_behavior_MI \ No newline at end of file diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MM.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MM.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..97fd1e53d2af69124573e379bb3e215303a86833 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MM.ttcn @@ -0,0 +1,411 @@ +/* + * @author TTF T044 + * @version $Id$ + * @desc This module provides the TP behaviour functions at MM interface + */ +module AtsIms5gIot_TP_behavior_MM { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // LibAtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TP_behavior_MM all; + // AtsIms5gIot + import from AtsIms5gIot_TypesAndValues all; + import from AtsIms5gIot_TestSystem all; + + group imsInvite { + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector, + * MessageBody; + * to the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_01 + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network and includes the LRF provided URI in the Route header." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + * the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an r_3xx_Any containing + * Contact indicating value LRF_provided_SIP_URI; + * from the IMS_LRF entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * not PChargingFunctionAddresses, + * PChargingVector, + * MessageBody; + * to the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_02 + + /** + * @desc "Verify that the E-CSCF successfully processes an callback INVITE from PSAP over the IM CN subsystem of own network and routes the request to the P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * not PChargingFunctionAddresses, + * PChargingVector, + * MessageBody; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_03(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MM_ECSCF_5G_ECO_INVITE_03 + + + /** + * @desc Verify that the E-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_5G_NGC_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MM_ECSCF_NGC_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MM_ECSCF_5G_NGC_INVITE_01 + + } // End of group imsInvite + + group imsBye { + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_5G_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MM_ECSCF_5G_ECO_BYE_01 + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_5G_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MM_ECSCF_ECO_BYE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MM_ECSCF_5G_ECO_BYE_02 + + } // End of group imsBye + + group imsCancel { + + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity hasAchievedInitialEmergencyINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_5G_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MM_ECSCF_5G_EMC_CANCEL_01 + + } // End of group imsCancel + + group imsRequestTermination { + + /** + * @desc Verify that the E-CSCF successfully processes a 487 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_5G_EMC_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MM_ECSCF_EMC_487INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MM_ECSCF_5G_EMC_487INVITE_01 + + } // End of group imsRequestTermination + + group imsTemporaryUnavailable { + + /** + * @desc Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_5G_ECO_480INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MM_ECSCF_5G_ECO_480INVITE_01 + + } // End of group imsTemporaryUnavailable + +} // End of module AtsIms5gIot_TP_behavior_MM \ No newline at end of file diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MW_IS.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MW_IS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..473f25121ec58bc9512fe4a315a06667fffbb12a --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MW_IS.ttcn @@ -0,0 +1,471 @@ +/** + * @author TTF T044 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at I-CSCF/S-CSCF + */ + +module AtsIms5gIot_TP_behavior_MW_IS { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // LibAtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TP_behavior_MW_IS all; + // AtsIms5gIot + import from AtsIms5gIot_TypesAndValues all; + import from AtsIms5gIot_TestSystem all; + + group imsMessages { + + /** + * @desc Verify that the I-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity forwards the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_5G_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_MESSAGE_01(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_ICSCF_5G_MESSAGE_01 + + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the I-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_REGISTER_01(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_01 + + /** + * @desc Verify that the I-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Contact indicating value "sos"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;, + * Contact indicating value "sos" + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_01 + + /** + * @desc Verify that the I-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_REGISTER_02(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_02 + + /** + * @desc Verify that the I-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth";, + * Contact indicating value "sos"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB";, + * Path, + * ServiceRoute; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_02 + + /** + * @desc Verify that the I-CSCF successfully processes a invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_REGISTER_03(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_03 + + /** + * @desc Verify that the I-CSCF successfully processes a invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_03(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_03 + + /** + * @desc Verify that the I-CSCF processes an invalid first registration in visited network and sends 403 response (Unsuccessful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_04(p_monitorCompRef, p_checkMessage); } // End of function f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_04 + + /** + * @desc Verify that the I-CSCF processes an invalid first registration without SecurityClient header in visited network(GIBA supported) and sends 420 response (Unsuccessful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 420_BadExtension containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_05(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_ICSCF_5G_ECO_REGISTER_05 + + function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_REGISTER_04(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_04 + + function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_REGISTER_05(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_05 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the I-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * Expire indicating value 0 + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends a REGISTER containing + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_ICSCF_REGISTER_07(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_ICSCF_5G_REGISTER_07 + + } // End of group imsDeRegistration + +} // End of module AtsIms5gIot_TP_behavior_MW_IS diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MW_PS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..3ed6c2289404cf2fabc3c41be53fa2bb2ebbfb26 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MW_PS.ttcn @@ -0,0 +1,1353 @@ +/** + * @author TTF T044 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + */ + +module AtsIms5gIot_TP_behavior_MW_PS { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // LibAtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TP_behavior_MW_PS all; + // AtsIms5gIot + import from AtsIms5gIot_TypesAndValues all; + import from AtsIms5gIot_TestSystem all; + + group imsMessages { + + /** + * @desc Verify that the P-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives the MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ContentLength indicating value greater than 1300 bytes + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity forwards the MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * PChargingVector containing + * orig_ioi indicating value PX_OPERATOR_ID_A, + * term_ioi indicating value PX_OPERATOR_ID_B, + * not PAccessNetworkInfo + * ContentLength indicating value greater than 1300 bytes + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_MESSAGE_01(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_MESSAGE_01 + + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * PChargingVector containing + * icid indicating value PX_TO_BE_DEFINED, + * PVisitedNetworkID indicating value PX_TO_BE_DEFINED, + * Require_HDR indicating value "path", + * Supported indicating value "path" + * ;; + * to the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_REGISTER_01(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_01 + + /** + * @desc Verify that the P-CSCF successfully processes a first emergency registration (Successful) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * PChargingVector containing + * icid indicating value PX_TO_BE_DEFINED, + * PVisitedNetworkID indicating value PX_TO_BE_DEFINED, + * Require indicating value "path", + * Supported indicating value "path", + * Contact indicating value "sos";; + * to the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth";; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_01 + + /** + * @desc Verify that the P-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * PChargingVector + * ;; + * from the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_REGISTER_02(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_02 + + /** + * @desc Verify that the P-CSCF successfully processes a full emergency registration (Successful) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * PChargingVector, + * Contact indicating value "sos";; + * to the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_REGISTER_02(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_02 + + /** + * @desc Verify that the P-CSCF successfully processes a invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * to the IMS_I_CSCF_A entity + * and the IMS_I_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_REGISTER_03(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_03 + + /** + * @desc Verify that the P-CSCF rejects invalid credentials within registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_B and + * the UE_A entity isNotRegisteredTo the IMS_B and + * the UE_B entity isNotRegisteredTo the IMS_B and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_B entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials", + * PChargingVector, + * PVisitedNetwork; + * to the IMS_I_CSCF_B entity + * and the IMS_P_CSCF_B entity sends an 403_Forbidden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_03 + + function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_REGISTER_04(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_04 + + function f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_04(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_04 + + function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_REGISTER_05(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_05 + + function f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_05(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_REGISTER_05 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_REGISTER_07(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_07 + + /** + * @desc Verify that the P-CSCF successfully processes a network de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity isTriggeredToDetachUser + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_09( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_REGISTER_09(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_09 + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (with SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * Expire indicating value 0 + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_10( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_REGISTER_10(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_REGISTER_10 + + } // End of group imsDeRegistration + + group imsInvite { + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_INVITE_01 + + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an unregistered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_INVITE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_INVITE_02 + + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_02 + + function f_mtc_check_TP_MW_PCSCF_5G_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_INVITE_03(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_INVITE_03 + + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from a registered but not emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_03 + + function f_mtc_check_TP_MW_PCSCF_5G_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_INVITE_04(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_INVITE_04 + + /** + * @desc "Verify that the P-CSCF rejects an initial INVITE from a not emergency registered UE + * if the IM CN subsystem of the P-CSCF is not capable to handle emergency sessions." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody containing + * XML containing + * Version indicating value "1", + * Type_child indicating value "emergency", + * Reason_child, + * Action_child;;; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_04(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_04 + + /** + * @desc "Verify that the E-CSCF successfully processes a callback INVITE from PSAP towards P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_05(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_INVITE_05 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_RE_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_RE_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function TP_MW_PCSCF_RE_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_B entity previouslyEstablishedCallWith the UE_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_RE_INVITE_02( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_RE_INVITE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function TP_MW_PCSCF_RE_INVITE_02 + + function f_mtc_check_TP_MW_PCSCF_5G_RE_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_RE_INVITE_03(p_monitorCompRef, p_checkMessage); + } // End of function TP_MW_PCSCF_RE_INVITE_03 + + function f_mtc_check_TP_MW_PCSCF_5G_RE_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_RE_INVITE_04(p_monitorCompRef, p_checkMessage); + } // End of function TP_MW_PCSCF_RE_INVITE_04 + + + /** + * @desc Verify that the P-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_NGC_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_NGC_INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_NGC_INVITE_01 + + } // End of group imsInvite + + group imsInfo { + + function f_mtc_check_TP_MW_PCSCF_5G_NGC_INFO_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_NGC_INFO_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_GM_PCSCF_5G_NGC_INFO_01 + + } // End of group imsInfo + + group imsBye { + + /** + * @desc Verify that the P-CSCF successfully processes a BYE for an emergency call. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_BYE_01 + + function f_mtc_check_TP_MW_PCSCF_5G_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_BYE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_BYE_02 + + } // End of group imsBye + + group ims200OkBye { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_EMC_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_EMC_200OK_BYE_01 + + function f_mtc_check_TP_MW_PCSCF_5G_EMC_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_EMC_200OK_BYE_02 + + } // End of group ims200OkBye + + group imsCancel { + + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity hasAchievedInitialEmergencyINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_EMC_CANCEL_01 + + } // End of group imsCancel + + group ims200OkCancel { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_EMC_200OK_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_200OK_CANCEL_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_EMC_200OK_CANCEL_01 + + } // End of group ims200OkCancel + + group imsRequestTermination { + + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_5G_EMC_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_EMC_487INVITE_01 + + } // End of group imsRequestTermination + + group imsTemporaryUnavailable { + + function f_mtc_check_TP_MW_PCSCF_5G_ECO_480INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_480INVITE_01 + + } // End of group imsTemporaryUnavailable + + group imsAlternateService { + + function f_mtc_check_TP_MW_PCSCF_5G_ECO_380INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_380INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_380INVITE_01 + + function f_mtc_check_TP_MW_PCSCF_5G_ECO_380INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_PCSCF_ECO_380INVITE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MW_PCSCF_5G_ECO_380INVITE_02 + + } // End of group imsAlternateService + +} // End of module AtsIms5gIot_TP_behavior_MW_PS diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MW_SI.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MW_SI.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..a8e8b45fa089c0148a251502c6ac33ac497c58b3 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MW_SI.ttcn @@ -0,0 +1,242 @@ +/** + * @author TTF T044 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at S-CSCF/IBCF + */ + +module AtsIms5gIot_TP_behavior_MW_SI { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // LibAtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TP_behavior_MW_SI all; + // AtsIms5gIot + import from AtsIms5gIot_TypesAndValues all; + import from AtsIms5gIot_TestSystem all; + + group imsMessages { + + /** + * @desc Verify that the S-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity forwards the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ;; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_5G_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_SCSCF_MESSAGE_01(p_monitorCompRef, p_checkMessage); + } + + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the S-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_5G_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_SCSCF_REGISTER_01(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_SCSCF_5G_REGISTER_01 + + /** + * @desc Verify that the S-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_5G_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_SCSCF_REGISTER_02(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_SCSCF_5G_REGISTER_02 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the S-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a 200_OK + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_5G_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_SCSCF_REGISTER_07(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_SCSCF_5G_REGISTER_07 + + /** + * @desc Verify that the S-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a REGISTER containing + * Expire indicating value 0 + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a BYE + * to the IMS_P_CSCF_A entity and + * the IMS_S_CSCF_A entity sends a BYE + * to the IMS_IBCF_A entity and + * the IMS_S_CSCF_A entity sends a 200 OK + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_5G_REGISTER_10( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MW_SCSCF_REGISTER_10(p_monitorCompRef, p_checkMessage); + } // End of function f_mtc_check_TP_MW_SCSCF_5G_REGISTER_10 + + } // End of group imsDeRegistration + +} // End of module AtsIms5gIot_TP_behavior_MW_SI diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MX.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MX.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6e8cc6e1b25d17cb7acab8844239c124cf9848f4 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_MX.ttcn @@ -0,0 +1,208 @@ +/** + * @author TTF 010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at S-CSCF/IBCF + */ + +module AtsIms5gIot_TP_behavior_MX { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // LibAtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TP_behavior_MX all; + // AtsIms5gIot + import from AtsIms5gIot_TypesAndValues all; + import from AtsIms5gIot_TestSystem all; + + group imsBye { + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the IBCF for a PSAP in another network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_5G_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + f_mtc_check_TP_MX_ECSCF_ECO_BYE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_BYE_01 + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the IBCF for a PSAP in another network for an Emergency Call and routes the request to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_5G_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + f_mtc_check_TP_MX_ECSCF_ECO_BYE_02(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MX_ECSCF_5G_ECO_BYE_01 + + } // End of group imsBye + + group imsCancel { + + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call and routes the request to the IBCF for a PSAP in another network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_5G_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MX_ECSCF_5G_EMC_CANCEL_01 + + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the IBCF for a PSAP in another network for an Emergency Call and routes the request to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a CANCEL containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_5G_ECO_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MX_ECSCF_5G_ECO_BYE_01 + + } // End of group imsCancel + + group imsRequestTermination { + + function f_mtc_check_TP_MX_ECSCF_5G_EMC_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + f_mtc_check_TP_MX_ECSCF_EMC_487INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MX_ECSCF_5G_EMC_487INVITE_01 + + function f_mtc_check_TP_MX_ECSCF_5G_ECO_480INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on FiveGNRTestCoordinator { + f_mtc_check_TP_MX_ECSCF_ECO_480INVITE_01(p_monitorCompRef, p_checkMessage, p_sip); + } // End of function f_mtc_check_TP_MX_ECSCF_5G_ECO_480INVITE_01 + + } // End of group imsRequestTermination + +} // End of module AtsIms5gIot_TP_behavior_MX diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_N1N2.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_N1N2.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..dfdf9d98ab7085b8b3503c75fe74ae7aad834e42 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TP_behavior_N1N2.ttcn @@ -0,0 +1,1259 @@ +module AtsIms5gIot_TP_behavior_N1N2 { + + //LibIot + import from LibIot_Functions all; + + // Lib_NG_NAS + import from Lib_NG_NAS_Templates all; + import from Lib_NG_NAS_CommonFunctions all; + //import from NAS_CommonTemplates all; + //import from LIB_NG_NAS_Functions all; + + // NG_NAS + import from NG_NAS_TypeDefs all; + import from NG_NAS_Templates all; + import from NAS_CommonTypeDefs all; + import from NG_NAS_Templates all; + + // Lib3GPP + import from NG_NAS_MsgContainers all; + + // LibNGAP + import from NGAP_IEs language "ASN.1:2002" all; + import from NGAP_Constants language "ASN.1:2002" all; + import from NGAP_PDU_Descriptions language "ASN.1:2002" all; + import from LibNGAP_Pixits all; + import from LibNGAP_Templates all; + //import from LibNGAP_Interface all; + //import from LibNGAP_Steps all; + + // AtsIms5gIot + import from AtsIms5gIot_TypesAndValues all; + import from AtsIms5gIot_Functions all; + import from AtsIms5gIot_PICs all; + import from AtsIms5gIot_TestSystem all; + + group helpers { + + /** + * This function is a miroor fiunction of LIB_NG_NAS_Functions.f_NASPDU_Get + */ + function f_iotIms5g_NASPDU_Get( + in NGAP_PDU p_PDU + ) return octetstring { + var octetstring v_nas_pdu := ''O; + + if (ischosen(p_PDU.initiatingMessage)) { + // Nothing to do + if (match(p_PDU.initiatingMessage,mw_n2_NGSetupRequest_base)){ + var integer numOfIEs := lengthof(p_PDU.initiatingMessage.value_.NGSetupRequest.protocolIEs) + //log("Number of IEs:",numOfIEs); + for (var integer i:=0;i + * Test objective "Verify that IUT sends AA-Answer after RAA is received from PGW." + * + *
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when { 
+     *         the IMS_P_CSCF_A entity sends a ASR containing
+     *              Abort_Cause_AVP
+     *                  indicating value BEARER_RELEASED '(0)'
+     *              ;
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the ASA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS "(2001)"
+     *     ;
+     *     to the IMS_P_CSCF_A entity
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_ASA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aSR_MSG := mw_ASR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_ASA_01 - ASR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { aSA_MSG := mw_ASA_resultCode }; + mw_diameter_msg_fail := { aSA_MSG := mw_ASA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_ASA_01 - ASA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_ASA_01 + +} // end group g_PCRF_ASA + +group g_PCRF_AAA { + + /** + * Starts monitor component behavior for TP_RX_PCRF_AAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after AA-Request is received due to provisioning of AF Signalling flow sends AA-Answer."
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity sends an AAR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the AAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS,
+     *             Acceptable_Service_Info_AVP containing
+     *                 "one or more" Media_Component_Description_AVP containing
+     *                     Media_Component_Number_AVP
+     *                         indicating value 0,
+     *                     Media_Sub_Component_AVP containing
+     *                         Flow_Description_AVP
+     *                         Flow_Usage_AVP
+     *                             indicating value AF_SIGNALING,
+     *                         Flow_Status_AVP
+     *                             indicating value ENABLED,
+     *                         AF_Signalling_Protocol_AVP
+     *                             indicating value SIP
+     *                     ;
+     *                 ;
+     *             ;,
+     *             IP_CAN_AVP
+     *             RAT_Type_AVP
+     *         ;
+     *         to the IMS_P_CSCF_A entity
+     *         }
+     *     }
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_5G_ECO_AAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_AAA_01 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { aAA_MSG := mw_AAA_resultCode/*mw_AAA_AcceptableService*/ }; + mw_diameter_msg_fail := { aAA_MSG := mw_AAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_AAA_01 - AAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_5G_ECO_AAA_01 + + /** + * Starts monitor component behavior for TP_RX_PCRF_ECO_AAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after AA-Request is received due to provisioning of AF Signalling flow sends AA-Answer."
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity sends an AAR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the AAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS,
+     *             Acceptable_Service_Info_AVP containing
+     *                 "one or more" Media_Component_Description_AVP containing
+     *                     Media_Component_Number_AVP
+     *                         indicating value 0,
+     *                     Media_Sub_Component_AVP containing
+     *                         Flow_Description_AVP
+     *                         Flow_Usage_AVP
+     *                             indicating value AF_SIGNALING,
+     *                         Flow_Status_AVP
+     *                             indicating value ENABLED,
+     *                         AF_Signalling_Protocol_AVP
+     *                             indicating value SIP
+     *                     ;
+     *                 ;
+     *             ;,
+     *             IP_CAN_AVP
+     *             RAT_Type_AVP
+     *         ;
+     *         to the IMS_P_CSCF_A entity
+     *         }
+     *     }
+     *     
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity sends an AAR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the AAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             Subscription_Id_AVP containing
+     *                 Subscription_Id_Type_AVP
+     *                     indicating value END_USER_IMSI;, //or END_USERE_164   
+     *             "and/or" 
+     *             User_Equipment_Info_AVP containing
+     *                 User_Equipment_Info_Type
+     *                     indicating value IMEISV,
+     *                 User_Equipment_Info_Value;;  
+     *         to the IMS_P_CSCF_A entity
+     *     }
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_ECO_AAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_ECO_AAA_01 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { aAA_MSG := (mw_AAA_resultCode_subscriptionId_userEquipmentInfo, + mw_AAA_resultCode_userEquipmentInfo, + mw_AAA_resultCode_subscriptionId) + }; + mw_diameter_msg_fail := { aAA_MSG := mw_AAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_ECO_AAA_01 - AAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_ECO_AAA_01 + + /** + * Starts monitor component behavior for TP_RX_PCRF_5G_ECO_AAA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT sends AA-Answer after RAA is received from PGW."
+     * ensure that {
+     *     when {
+     *         the EPC_PGW_A entity sends a RAA
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the AAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS "(2001)"
+     *             ;
+     *         ;
+     *         to the IMS_P_CSCF_A entity
+     *     }
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAA_MSG := mw_AAA_resultCode }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAA_MSG := mw_AAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_5G_ECO_AAA_02 - AAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_5G_ECO_AAA_02 + + /** + * Starts monitor component behavior for TP_RX_PCRF_AAA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT receives AA-Request  from home PCRF and sends AA-Answer towards visited P-CSCF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_A entity sends a AAA
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_B entity sends the AAA 
+     *         to the IMS_P_CSCF_B entity
+     *     }
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_AAA_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAA_MSG := mw_AAA_resultCode }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAA_MSG := mw_AAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_AAA_03 - AAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_AAA_03 + +} // end group g_PCRF_AAA + +group g_PCRF_STA { + + /** + * Starts monitor component behavior for TP_RX_PCRF_STA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after reception of RA-Request sends ST-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A and 
+     *     the UE_A entity previouslyEstablishedCallWith the UE_B
+     * }
+     * 
+     * ensure that {
+     *     when { 
+     *         the EPC_PGW_A entity sends an RAA
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the STA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the IMS_P_CSCF_A entity
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_5G_ECO_STA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTA_MSG := mw_STA_diamSuccess }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTA_MSG := mw_STA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_STA_01 - STA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_5G_ECO_STA_01 + + function f_mtc_check_TP_RX_PCRF_5G_ECO_STA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + f_mtc_check_TP_RX_PCSCF_5G_ECO_STA_01(p_monitorCompRef, p_checkMessage, p_forward_to_mtc); + } + + /** + * Starts monitor component behavior for TP_RX_PCRF_5G_ECO_STA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after reception of ST-Request sends ST-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when { 
+     *         the IMS_P_CSCF_A entity sends an STR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the STA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the IMS_P_CSCF_A entity
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_5G_ECO_STR_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_5G_ECO_STR_02 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { sTA_MSG := mw_STA_diamSuccess }; + mw_diameter_msg_fail := { sTA_MSG := mw_STA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_5G_ECO_STA_02 - STA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_5G_ECO_STR_02 + +} // end group g_PCRF_STA + +} // end group g_PCRF + + +group g_PCSCF { + + +group g_PCSCF_ASR { + + /** + * Starts monitor component behavior for TP_RX_PCSCF_ASR_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT receives AS-Request from home PCRF and it sends AS-Request towards visited P-CSCF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_A entity sends a ASR
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_B entity sends the ASR containing
+     *             Session_Id_AVP
+     *             Abort_Cause_AVP
+     *                 indicating value BEARER_RELEASED
+     *         ;
+     *         to the IMS_P_CSCF_B entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_ASR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aSR_MSG := mw_ASR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_ASR_01 - ASR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_ASR_01 +} //end group g_PCSCF_ASR { + + +group g_PCSCF_AAR { + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after 2XX_Response on REGISTER sends an AA-Request due to provisioning of AF Signalling flow."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a 200_Response_REGISTER
+     *         to the IMS_P_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends an AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             Specific_Action_AVP
+     *                 indicating value INDICATION_OF_LOSS_OF_BEARER,
+     *             "one or more" Media_Component_Description_AVP containing 
+     *                 Media_Component_Number_AVP
+     *                     indicating value 0,
+     *                 Media_Sub_Component_AVP containing
+     *                     Flow_Description_AVP
+     *                     Flow_Usage_AVP
+     *                         indicating value AF_SIGNALLING,
+     *                     Flow_Status_AVP
+     *                         indicating value ENABLED,
+     *                     AF_Signalling_Protocol_AVP
+     *                         indicating value SIP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + * @remark source function f_mtc_check_TP_EPC_6013_01 + */ + function f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_MediaComponent_specificActionLossOfBearer }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_AAR_01 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_01 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_ECO_AAR_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after 2XX_Response on REGISTER sends an AA-Request due to provisioning of AF Signalling flow."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity not isEmergencyRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a 200_Response_REGISTER
+     *         to the IMS_P_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends an AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             AF_Requested_Data_AVP
+     *                 indicating value "EPC-level identities required",
+     *             Service_URN_AVP
+     *                 indicating value "sos*";
+     *         to the EPC_PCRF_A entity
+     *     }
+     * }  
+     * 
+ * @see TS 103 795-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_ECO_AAR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_AfRequestedData_ServiceUrn }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_ECO_AAR_01 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_ECO_AAR_01 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_02 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "IUT does not send AA-Request if 4XX_Response REGISTER is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when { 
+     *         the IMS_P_CSCF_A entity receives an 4XX_Response_REGISTER
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity not sends the AAR
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var boolean v_noDiameterMessageExpected := true; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + //check if nothing received + }, + { + mw_diameter_msg_fail //Fail criteria: check if AAR is sent + }, + {0, omit}, + "TP_RX_PCSCF_AAR_02 - AAR", + p_forward_to_mtc, + p_checkMessage, + v_noDiameterMessageExpected + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_02 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_5G_ECO_AAR_02 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of emergency session establishment for originating side after INVITE is received."
+     *
+     * 
+     * 
+     * Config Id CF_VoLTE_INT_ES
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity not isEmergencyRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a 200_Response_REGISTER
+     *         to the IMS_P_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends an AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             Service_URN_AVP
+     *                 indicating value "sos*";
+     *         to the EPC_PCRF_A entity
+     *     }
+     * }  
+     * 
+ * @see TS 103 795-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_ServiceUrn }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_5G_ECO_AAR_02 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_02 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_03 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for originating side after INVITE is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives an INVITE_Request_with_SDP_offer
+     *         from the UE_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value DISABLED '(3)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(INITIAL_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_AAR_03 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_03 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_5G_ECO_AAR_04 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for originating side after 180 Ringing with SDP is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 180_Response_INVITE_with_SDP_offer
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED_DOWNLINK '(1)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_5G_ECO_AAR_04 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_5G_ECO_AAR_04 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_05 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for originating side after 200 OK with SDP is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED '(2)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_05( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_AAR_05 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_05 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_06 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for terminating side after INVITE is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives an INVITE_Request_with_SDP_offer
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value DISABLED '(3)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_06( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(INITIAL_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_AAR_06 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_06 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_07 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for terminating side after 180 Ringing with SDP is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 180_Response_INVITE_with_SDP_offer
+     *         from the UE_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED_UPLINK '(0)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_07( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_AAR_07 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_07 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_08 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for terminating side after 200 OK with SDP is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer
+     *         from the UE_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED '(2)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_08( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_AAR_08 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_08 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_09 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session modification for originating side after 200 OK on re-INVITE is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED_UPLINK '(0)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_09( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_AAR_09 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_09 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_10 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session modification for terminating side after 200 OK on re-INVITE is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer
+     *         from the UE_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED_DOWNLINK '(1)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_10( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_AAR_10 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_10 + +} // end group g_PCSCF_AAR + +group g_PCSCF_RAA { + + + /**TODO update TP description + * Starts monitor component behavior for f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for originating side after 200 OK with SDP is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED '(2)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_SpecificAction }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_5G_ECO_RAR_01 - RAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { rAA_MSG := mw_RAA_Rx_resultCode }; + mw_diameter_msg_fail := { rAA_MSG := mw_RAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_5G_ECO_RAA_01 - RAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_5G_ECO_RAA_01 +}//end group g_PCSCF_RAA + +group g_PCSCF_STR { + + /** + * Starts monitor component behavior for TP_N5_PCSCF_5G_ECO_STR_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of BYE sends an ST-Request at originating leg."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A and 
+     *     the UE_A entity previouslyEstablishedCallWith the UE_B
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a BYE
+     *         from the UE_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_5G_ECO_STR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_N5_PCSCF_RX_ECO_STR_01 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_5G_ECO_STR_01 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_02 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of BYE sends an ST-Request at terminating leg.
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_B entity isAttachedTo the EPC_B and
+     *     the UE_B entity isRegisteredTo the IMS_B and 
+     *     the UE_B entity previouslyEstablishedCallWith the UE_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_B entity receives a BYE
+     *         from the IMS_S_CSCF_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_B entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_B entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_STR_02 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_02 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_03 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of CANCEL sends an ST-Request at originating leg."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a CANCEL
+     *         from the UE_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_5G_ECO_STR_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_STR_03 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_03 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_04 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of CANCEL sends an ST-Request at terminating leg."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_B entity isAttachedTo the EPC_B and
+     *     the UE_B entity isRegisteredTo the IMS_B
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_B entity receives a CANCEL
+     *         from the IMS_S_CSCF_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_B entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_B entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_04( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_STR_04 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_04 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_05 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of 486 response sends an ST-Request at originating leg."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 486_Response_INVITE
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_5G_ECO_STR_05( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_STR_05 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_5G_ECO_STR_05 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_06 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of 486 response sends an ST-Request at terminating leg."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_B entity isAttachedTo the EPC_B and
+     *     the UE_B entity isRegisteredTo the IMS_B
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_B entity receives a 486_Response_INVITE
+     *         from the IMS_S_CSCF_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_B entity sends the STR containing
+     *             Session_Id_AVP;
+     *          to the EPC_PCRF_B entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_06( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_STR_06 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_06 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_07 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of 200 response REGISTER sends an ST-Request."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_REGISTER
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_A entity
+     *    } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_07( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_STR_07 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_07 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_08 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of NOTIFY during administrative de-registration sends an ST-Request."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a NOTIFY
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_A entity
+     *    } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_08( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_STR_08 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_08 + +} // end group g_PCSCF_STR + +} // end group g_PCSCF + + +} // end module AtsIms5gIot_TP_behavior_RX diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_Templates.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..30b6c43ad8f23dc4d3fd2356220e76c745d9a2d9 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_Templates.ttcn @@ -0,0 +1,3 @@ +module AtsIms5gIot_Templates { + +} // End of module module AtsIms5gIot_Templates diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TestConfiguration.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TestConfiguration.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..66993fbf9fb6e40326a2c1c1660b70c6c6c5efcd --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TestConfiguration.ttcn @@ -0,0 +1,65 @@ +/* + * @author STF 370 + * @version $Id $ + * @desc This module contains functions which implement the + * configuration of the SUT adapter and mapping of test + * components for establishing and tearing down different + * test configurations. + */ + +module AtsIms5gIot_TestConfiguration { + + import from LibCommon_VerdictControl all; + /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ + import from LibIms_UpperTester all; + import from LibIot_PIXITS all; + import from LibIot_TypesAndValues all; + /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ + + import from LibIot_Functions all; + import from LibIot_TestConfiguration all; + import from LibIot_TestInterface all; + + import from AtsIms5gIot_TestSystem all; + import from AtsIms5gIot_Templates all; + import from AtsIms5gIot_Functions all; + + import from AtsImsIot_Functions all; + + group constantDefinitions { + //* interface monitor name N1 / N2 + const charstring c_n1n2 := "N1N2"; + //* interface monitor name N5 + const charstring c_n5 := "N5"; + } + + group componentCreation { + + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_ngap(in MonitorInterfaceInfo p_mii) runs on FiveGNRTestCoordinator return NgapInterfaceMonitor { + var NgapInterfaceMonitor v_monitor := NgapInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_http(in MonitorInterfaceInfo p_mii) runs on FiveGNRTestCoordinator return HttpInterfaceMonitor { + var HttpInterfaceMonitor v_monitor := HttpInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + + } // End of group componentCreation +} \ No newline at end of file diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TestControl.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TestControl.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..521148f992ed32e5675243d4da467d9e7d111947 --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TestControl.ttcn @@ -0,0 +1,30 @@ +module AtsIms5gIot_TestControl { + + import from AtsIms5gIot_TD_REG all; + import from AtsIms5gIot_TD_INI all; + import from AtsIms5gIot_TD_5GREG all; + import from AtsIms5gIot_TD_5GREG all; + import from AtsIms5gIot_TD_5GDRG all; + import from AtsIms5gIot_TD_DRG all; + import from AtsIms5gIot_TD_FB5Gto4G all; + + control { + + execute(TD_VoNR_ECO_INT_5RG_01()); + execute(TD_VoNR_ECO_INT_5RG_02()); + + execute(TD_VoNR_ECO_INT_REG_01()); + execute(TD_VoNR_ECO_INT_REG_02()); + + execute(TD_VoNR_ECO_INT_INI_01()); + execute(TD_VoNR_ECO_INT_INI_02()); + execute(TD_VoNR_ECO_INT_INI_03()); + execute(TD_VoNR_ECO_INT_INI_04()); + execute(TD_VoNR_ECO_INT_INI_05()); + execute(TD_VoNR_ECO_INT_INI_06()); + execute(TD_VoNR_ECO_INT_INI_07()); + execute(TD_VoNR_ECO_INT_INI_08()); + + } // End of 'control' statetment + +} // End of module AtsIms5gIot_TestControl diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TestSystem.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TestSystem.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..848ca6763f62188007b3148bf0026cfc5c2aaf8d --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TestSystem.ttcn @@ -0,0 +1,100 @@ +module AtsIms5gIot_TestSystem { + + // LibSip + import from LibSip_SIPTypesAndValues all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + // LibDiameter + import from LibDiameter_TypesAndValues all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_TestInterface all; + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_TestSystem all; + // LibNgap + import from NGAP_IEs language "ASN.1:2002" all; + import from NGAP_Constants language "ASN.1:2002" all; + import from NGAP_PDU_Descriptions language "ASN.1:2002" all; + import from LibNGAP_TypesAndValues all; + //import from LibNGAP_Interface all; + + // AtsImsIot + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TestSystem all; + + type component FiveGNRImsInterfaceMonitor extends ImsInterfaceMonitor { + port ImsMonitorHttpPort httpPort; + port ImsMonitorNgapPort ngapPort; + } + + type component FiveGNRIotSystemInterface extends IotSystemInterface { + port ImsMonitorHttpPort httpPort; + port ImsMonitorNgapPort ngapPort; + } + + type component HttpInterfaceMonitor extends InterfaceMonitor { + port ImsMonitorHttpPort httpPort; + port FiveGNRImsCoordinationPort fiveGNRPort; + } + + type component NgapInterfaceMonitor extends InterfaceMonitor { + port ImsMonitorNgapPort ngapPort; + port FiveGNRImsCoordinationPort fiveGNRPort; + } + + type component FiveGNRTestCoordinator extends ImsTestCoordinator { + port FiveGNRImsCoordinationPort fiveGNRPort; + var FiveGNRMonitorInterfaceList vc_Mon5gIntfList; + var CF_FiveGNR_Interfaces vc_5g_monitor_components; + } + + group portDefinitions { + + type port FiveGNRImsCoordinationPort message { + inout HttpMessage, NGAP_PDU; + } with { + extension "internal" + } + + type port ImsMonitorHttpPort message { + in HttpMessage; + } + + type port ImsMonitorNgapPort message { + in NGAP_PDU; + } + + } // End of group portDefinitions + + group release16 { + + type record CF_FiveGNR_Interfaces{ + SipInterfaceMonitor gmA optional, + SipInterfaceMonitor gmB optional, + SipInterfaceMonitor mmB_PSAP optional,// MmMx interface at IBCF to PSAP + SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF or E-CSCF/BGCF + SipInterfaceMonitor mlE_LRF optional,// Ml interface at E-CSCF/LRF + SipInterfaceMonitor mwS_PSAP optional,// MwMmMx interface at E,SCSCF to PSAP + SipInterfaceMonitor ic optional, + SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + SipInterfaceMonitor mwPS optional, + SipInterfaceMonitor mwPE optional,// Mw interface at P-CSCF to E-CSCF + SipInterfaceMonitor mwIS optional,// Mw interface at I-CSCF/S-CSCF + SipInterfaceMonitor mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF + SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF + SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF + SipInterfaceMonitor isc optional,// ISC interface at AS to S-CSCF + DiameterInterfaceMonitor cxIH optional, + DiameterInterfaceMonitor cxSH optional, + DiameterInterfaceMonitor gx optional, + DiameterInterfaceMonitor rx optional, + DiameterInterfaceMonitor s6a optional, + DiameterInterfaceMonitor s9 optional, + DiameterInterfaceMonitor sh optional , + HttpInterfaceMonitor n5 optional, + NgapInterfaceMonitor ngap optional + } + } // end of g_release16 + +} // End of module AtsIms5gIot_TestSystem diff --git a/ttcn/AtsIms5gIot/AtsIms5gIot_TypesAndValues.ttcn b/ttcn/AtsIms5gIot/AtsIms5gIot_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..aff4e164e9f7eb85d8187b0821858a8770eda9ba --- /dev/null +++ b/ttcn/AtsIms5gIot/AtsIms5gIot_TypesAndValues.ttcn @@ -0,0 +1,42 @@ +module AtsIms5gIot_TypesAndValues { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibNgap + import from NGAP_IEs language "ASN.1:2002" all; + import from NGAP_Constants language "ASN.1:2002" all; + import from NGAP_PDU_Descriptions language "ASN.1:2002" all; + import from LibNGAP_TypesAndValues all; + + // LibHttp + import from LibHttp_TypesAndValues all; + + group HttpMessageTypes { + + /** + * @desc HTTP Message List Type + */ + type record of HttpMessage HttpMessageList; + type record HttpSkipType { + integer skipCount, + HttpMessage skipMessage optional + } + + } // End of group HttpMessageTypes + + group NgapMessageTypes { + + /** + * @desc NGAP Message List Type + */ + type record of NGAP_PDU NGAP_PDUs; + type record NgapSkipType { + integer skipCount, + NGAP_PDU skipMessage optional + } + + } // End of group NgapMessageTypes + + +} // End of module module AtsIms5gIot_TypesAndValues diff --git a/ttcn/AtsIms5gIot/module.mk b/ttcn/AtsIms5gIot/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..2a91984390fa9c208a794e8fd25705e47e8dc7c7 --- /dev/null +++ b/ttcn/AtsIms5gIot/module.mk @@ -0,0 +1,44 @@ +suite := AtsIms5gIot + +sources := \ + AtsIms5gIot_TypesAndValues.ttcn \ + AtsIms5gIot_Templates.ttcn \ + AtsIms5gIot_TestSystem.ttcn \ + AtsIms5gIot_TestConfiguration.ttcn \ + AtsIms5gIot_PICs.ttcn \ + AtsIms5gIot_TestControl.ttcn \ + AtsIms5gIot_Functions.ttcn \ + AtsIms5gIot_TP_behavior_N5_PCF.ttcn \ + AtsIms5gIot_TP_behavior_N1N2.ttcn \ + AtsIms5gIot_TP_behavior_GM.ttcn \ + AtsIms5gIot_TP_behavior_MM.ttcn \ + AtsIms5gIot_TP_behavior_MW_PS.ttcn \ + AtsIms5gIot_TP_behavior_MW_SI.ttcn \ + AtsIms5gIot_TP_behavior_MW_IS.ttcn \ + AtsIms5gIot_TP_behavior_MX.ttcn \ + AtsIms5gIot_TP_behavior_MI.ttcn \ + AtsIms5gIot_TP_behavior_IC.ttcn \ + AtsIms5gIot_TP_behavior_ISC.ttcn \ + AtsIms5gIot_TP_behavior_RX.ttcn \ + AtsIms5gIot_TP_behavior_CX.ttcn \ + AtsIms5gIot_TD_5GREG.ttcn \ + AtsIms5gIot_TD_5GDRG.ttcn \ + AtsIms5gIot_TD_REG.ttcn \ + AtsIms5gIot_TD_DRG.ttcn \ + AtsIms5gIot_TD_INI.ttcn \ + AtsIms5gIot_TD_FB5Gto4G.ttcn + +modules := ../LibAtsImsIot \ + ../LibNGAP \ + ../Lib_NG_NAS \ + ../Lib3gpp/ttcn \ + ../Lib3GPP \ + ../../ccsrc/Ports/ImsMonitorHttpPort \ + ../../ccsrc/Ports/ImsMonitorNgapPort \ + ../../ccsrc/EncDec/LibNgNas \ + ../../ccsrc/Protocols/FiveG_AKA \ + ../../ccsrc/Protocols/NAS \ + ../../ccsrc/Protocols/NAS_layer \ + ../../ccsrc/Protocols/NGAP \ + ../../ccsrc/Protocols/NGAP_layer \ + diff --git a/ttcn/Lib3GPP/Common/CommonDefs.ttcn b/ttcn/Lib3GPP/Common/CommonDefs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..2a54ee4000f8b70e3031ca7cedf0c81699158224 --- /dev/null +++ b/ttcn/Lib3GPP/Common/CommonDefs.ttcn @@ -0,0 +1,1700 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-07-19 14:52:19 +0200 (Wed, 19 Jul 2023) $ +// $Rev: 36499 $ +/******************************************************************************/ + +module CommonDefs { + + //---------------------------------------------------------------------------- + // type definitions: + + type bitstring B1_Type length(1) with { variant "FIELDLENGTH(1)" }; + type bitstring B2_Type length(2) with { variant "FIELDLENGTH(2)" }; + type bitstring B3_Type length(3) with { variant "FIELDLENGTH(3)" }; + type bitstring B4_Type length(4) with { variant "FIELDLENGTH(4)" }; + type bitstring B5_Type length(5) with { variant "FIELDLENGTH(5)" }; + type bitstring B6_Type length(6) with { variant "FIELDLENGTH(6)" }; + type bitstring B7_Type length(7) with { variant "FIELDLENGTH(7)" }; + type bitstring B7_15_Type length(7..15); // NOTE: length restriction can only be a range but not two destinct lengths + type bitstring B8_Type length(8) with { variant "FIELDLENGTH(8)" }; + type bitstring B9_Type length(9) with { variant "FIELDLENGTH(9)" }; + type bitstring B10_Type length(10) with { variant "FIELDLENGTH(10)" }; + type bitstring B11_Type length(11) with { variant "FIELDLENGTH(11)" }; + type bitstring B12_Type length(12) with { variant "FIELDLENGTH(12)" }; + type bitstring B13_Type length(13) with { variant "FIELDLENGTH(13)" }; + type bitstring B14_Type length(14) with { variant "FIELDLENGTH(14)" }; + type bitstring B15_Type length(15) with { variant "FIELDLENGTH(15)" }; + type bitstring B16_Type length(16) with { variant "FIELDLENGTH(16)" }; + type bitstring B18_Type length(18) with { variant "FIELDLENGTH(18)" }; + type bitstring B20_Type length(20) with { variant "FIELDLENGTH(20)" }; + type bitstring B22_Type length(22) with { variant "FIELDLENGTH(22)" }; + type bitstring B24_Type length(24) with { variant "FIELDLENGTH(24)" }; + type bitstring B27_Type length(27) with { variant "FIELDLENGTH(27)" }; + type bitstring B28_Type length(28) with { variant "FIELDLENGTH(28)" }; + type bitstring B32_Type length(32) with { variant "FIELDLENGTH(32)" }; + type bitstring B36_Type length(36) with { variant "FIELDLENGTH(36)" }; + type bitstring B40_Type length(40) with { variant "FIELDLENGTH(40)" }; + type bitstring B41_Type length(41) with { variant "FIELDLENGTH(41)" }; + type bitstring B42_Type length(42) with { variant "FIELDLENGTH(42)" }; + type bitstring B43_Type length(43) with { variant "FIELDLENGTH(43)" }; + type bitstring B45_Type length(45) with { variant "FIELDLENGTH(45)" }; + type bitstring B47_Type length(47) with { variant "FIELDLENGTH(47)" }; + type bitstring B48_Type length(48) with { variant "FIELDLENGTH(48)" }; + type bitstring B56_Type length(56) with { variant "FIELDLENGTH(56)" }; + type bitstring B64_Type length(64) with { variant "FIELDLENGTH(64)" }; + type bitstring B80_Type length(80) with { variant "FIELDLENGTH(80)" }; + type bitstring B112_Type length(112) with { variant "FIELDLENGTH(112)" }; + type bitstring B128_Type length(128) with { variant "FIELDLENGTH(128)" }; + type bitstring B160_Type length(160) with { variant "FIELDLENGTH(160)" }; + type bitstring B184_Type length(184) with { variant "FIELDLENGTH(184)" }; + type bitstring B192_Type length(192) with { variant "FIELDLENGTH(192)" }; + type bitstring B256_Type length(256) with { variant "FIELDLENGTH(256)" }; + type bitstring B32_128_Type length(32..128); + + type B128_Type B128_Key_Type; /* 128 bit security key */ + type B256_Type B256_Key_Type; /* 256 bit security key */ + + type octetstring O1_Type length(1) with { variant "FIELDLENGTH(1)" }; + type octetstring O2_Type length(2) with { variant "FIELDLENGTH(2)" }; + type octetstring O3_Type length(3) with { variant "FIELDLENGTH(3)" }; + type octetstring O4_Type length(4) with { variant "FIELDLENGTH(4)" }; + type octetstring O5_Type length(5) with { variant "FIELDLENGTH(5)" }; + type octetstring O6_Type length(6) with { variant "FIELDLENGTH(6)" }; + type octetstring O8_Type length(8) with { variant "FIELDLENGTH(8)" }; + type octetstring O9_Type length(9) with { variant "FIELDLENGTH(9)" }; + type octetstring O10_Type length(10) with { variant "FIELDLENGTH(10)" }; + type octetstring O13_Type length(13) with { variant "FIELDLENGTH(13)" }; + type octetstring O14_Type length(14) with { variant "FIELDLENGTH(14)" }; + type octetstring O15_Type length(15) with { variant "FIELDLENGTH(15)" }; + type octetstring O16_Type length(16) with { variant "FIELDLENGTH(16)" }; + type octetstring O28_Type length(28) with { variant "FIELDLENGTH(28)" }; + type octetstring O32_Type length(32) with { variant "FIELDLENGTH(32)" }; + type octetstring O43_Type length(43) with { variant "FIELDLENGTH(43)" }; + + type hexstring H1_Type length(1) with { variant "FIELDLENGTH(1)" }; + type hexstring H2_Type length(2) with { variant "FIELDLENGTH(2)" }; + type hexstring H4_Type length(4) with { variant "FIELDLENGTH(4)" }; + type hexstring H12_Type length(12) with { variant "FIELDLENGTH(12)" }; + type hexstring H14_Type length(14) with { variant "FIELDLENGTH(14)" }; + + type O1_Type Octet_Type; + type hexstring HalfOctet_Type length(1) with { variant "FIELDLENGTH(1)" }; + + type record of B8_Type B8_List_Type; + + type boolean Null_Type (true); // dummy type for 'typeless' fields in unions + type boolean Dummy_Type (true); // dummy type for temporary purposes only + + const integer tsc_UInt7Max := 127; + const integer tsc_UInt8Max := 255; + const integer tsc_UInt16Max := 65535; + const integer tsc_UInt20Max := 1048575; + const integer tsc_UInt24Max := 16777215; + const integer tsc_UInt32Max := 4294967295; + + type integer UInt_Type (0 .. infinity); + type integer UInt8_Type (0 .. tsc_UInt8Max); + type integer UInt16_Type (0 .. tsc_UInt16Max); + type integer UInt20_Type (0 .. tsc_UInt20Max); + type integer UInt24_Type (0 .. tsc_UInt24Max); + type integer UInt32_Type (0 .. tsc_UInt32Max); + + type Octet_Type UE_TestLoopMode_Type; + + type charstring Char1_Type length (1); + type charstring Char3_Type length (3); + type record of Char1_Type Char1List_Type; + type record of charstring CharStringList_Type; + type set of charstring SetOfCharString_Type; + + type record of octetstring OctetStringList_Type; + + type record of bitstring BitStringList_Type; + + type record of integer IntegerList_Type; + + + type record NameValue_Type { + charstring Name, + charstring Value + }; + type set of NameValue_Type NameValueList_Type; + + const integer tsc_DirectionUL := 0; /* acc. to 33.401 B.1.1 and B.2.1 @status APPROVED (IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, POS, UTRAN) */ + const integer tsc_DirectionDL := 1; /* acc. to 33.401 B.1.1 and B.2.1 @status APPROVED (IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, POS, UTRAN) */ + const octetstring tsc_WLAN_SSID_AP1 := char2oct("3GPP WLAN InterWorking"); /* @status APPROVED (IMS) */ + + type integer MAC_Direction_Type (tsc_DirectionDL, tsc_DirectionUL); /* direction bit for calculation of MAC acc. to 24.301 cl. 9.5 @status APPROVED (IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, POS, UTRAN) */ + + type enumerated IndicationAndControlMode_Type {enable, disable}; + + type enumerated SinglePLMN_TestedType {SinglePLMN, MultiPLMN, MultiPLMNinPrimaryBand, MultiPLMNinSecondaryBand}; // @sic R5-123667 sic@ + type enumerated EUTRA_ATTACH_TESTED_Type { EPS_ATTACH_ONLY, COMBINED_ATTACH}; + type enumerated EUTRA_FDD_TDD_Mode_Type {FDD, TDD}; + type enumerated UTRAN_FDD_TDD_Type {UTRAN_FDD, UTRAN_TDD}; + type enumerated RATComb_Tested_Type {EUTRA_UTRA, EUTRA_GERAN, EUTRA_Only}; + type enumerated RRCConnectionReleaseRequired_Type { rrcConnectionRelease, noRrcConnectionRelease }; + type enumerated NTN_Satellite_Type {ntn_None, ntn_GSO, ntn_NGSO}; //@sic R5s230512 sic@ + + type enumerated NGC_CellId_Type { + ngc_Cell_NonSpecific, + ngc_CellA, + ngc_CellB, + ngc_CellC, + ngc_CellD, + ngc_CellE, + ngc_CellF, + ngc_CellG, + ngc_CellH, + ngc_CellI, + ngc_CellJ + }; + + type enumerated NR_CellId_Type { + nr_Cell_NonSpecific, + nr_Cell1, + nr_Cell2, + nr_Cell3, + nr_Cell4, + nr_Cell6, + nr_Cell10, + nr_Cell11, + nr_Cell12, + nr_Cell13, + nr_Cell14, + nr_Cell23, + nr_Cell28, + nr_Cell29, + nr_Cell30, + nr_Cell31 + }; + + type record of NR_CellId_Type NR_CellIdList_Type; /* NOTE: there seems to be no need for any length restriction */ + + type enumerated EUTRA_CellId_Type { + eutra_Cell_NonSpecific, + eutra_Cell1, + eutra_Cell2, + eutra_Cell3, + eutra_Cell4, + eutra_Cell6, + eutra_Cell10, + eutra_Cell11, + eutra_Cell12, + eutra_Cell13, + eutra_Cell14, + eutra_Cell23, + eutra_Cell28, + eutra_Cell29, + eutra_Cell30, + eutra_Cell31, + eutra_CellA, + eutra_CellB, + eutra_CellC, + eutra_CellD, + eutra_CellE, + eutra_CellG, + eutra_CellH, + eutra_CellI, + eutra_CellJ, + eutra_CellK, + eutra_CellL, + eutra_CellM + }; + + type record length (0..9) of EUTRA_CellId_Type EUTRA_CellIdList_Type; + + type enumerated UTRAN_CellId_Type { + utran_CellDedicated (-1), + utran_Cell5 (5), + utran_Cell7 (7), + utran_Cell8 (8), + utran_Cell9 (9), + utran34_Cell1 (1000), + utran34_Cell2 (1001), + utran34_Cell3 (1002), + utran34_Cell4 (1003), + utran34_Cell5 (1004), + utran34_Cell6 (1005), + utran34_Cell7 (1006), + utran34_Cell8 (1007), + utran34_CellA (2000), + utran34_CellB (2001), + utran34_CellC (2002), + utran34_CellD (2003), + utran34_CellE (2004), + utran34_CellF (2005), + utran34_CellG (2006), + utran34_CellH (2007) + }; // @sic R5-133563: added utran34_CellA/B/C... for 34.123-1 NAS tc sic@ + + type record of UTRAN_CellId_Type UTRAN_CellIdList_Type; + + type enumerated WLAN_CellId_Type { + wlan_Cell_NonSpecific (-1), + wlan_Cell27 (27), /* WLAN AP in EUTRA environment */ + wlan_Cell27b (272), /* WLAN AP in EUTRA environment */ + wlan_Cell39 (39) /* WLAN AP in UTRA environment */ + }; + + //Common delta types + type record UE_NR_DeltaValues_Type { + DeltaValues_Type DeltaPrimaryBand, + DeltaValues_Type DeltaSecondaryBand + }; + + type union AnyCellId_Type { + EUTRA_CellId_Type Eutra, + NR_CellId_Type Nr + // to be extended when needed + }; + + type record DeltaValues_Type { + /* Delta value for each frequency, by default for FR1 or when the frequency is not available the Delta value is set to 0. */ + integer DeltaNRf1, + integer DeltaNRf2, + integer DeltaNRf3, + integer DeltaNRf4 + }; + + //---------------------------------------------------------------------------- + + type integer IP_DrbId_Type; /* DRB identity type common for all RATs: + * - for EUTRA it corresponds to the ASN.1 type DRB-Identity + * - for UTRAN it corresponds to the ASN.1 type RB-Identity and values are as defined in TS 34.123-3 Table 8.2.4.1 + * - for GERAN the NSAPI value (type record NSAPI) may be used + * NOTE: this is introduced to simplify the dependencies (i.e. to keep IP_ASP_TypeDefs independent from any RAT specific type definitions) */ + + type record IP_EUTRA_DrbInfo_Type { + EUTRA_CellId_Type CellId, /* data is routed to a specific cell regardless of whether the same DRB is configured in any other cell */ + IP_DrbId_Type DrbId optional /* mandatory at the system interface */ + }; + + type record IP_UTRAN_GERAN_DrbInfo_Type { + integer CellId, + IP_DrbId_Type DrbId optional /* mandatory at the system interface */ + }; + + type record IP_WLAN_DrbInfo_Type { + integer CellId + }; + + type record IP_ePDG_IPsecTunnelInfo_Type { + PDN_Index_Type PdnId /* 'index name' of PDN associated to the IPsec tunnel, e.g. for SS to distinguish routing of IP packets in case of more than one IPsec tunnel + * NOTE: In general only 'ePDG_XXX' values shall be used */ + + }; + + type record QosFlow_Identification_Type { + integer PDU_SessionId, /* TS 24.007 clause 11.2.3.1b */ + integer QFI /* TS 24.501 Table 11.2.3.1c.1 */ + }; + + type record IP_NR_QosFlowInfo_Type { + NR_CellId_Type CellId, /* data is routed to a specific cell regardless of whether the same DRB is configured in any other cell */ + QosFlow_Identification_Type QosFlow optional /* mandatory at the system interface */ + }; + + type record IP_EUTRA_QosFlowInfo_Type { + EUTRA_CellId_Type CellId, /* data is routed to a specific cell regardless of whether the same DRB is configured in any other cell */ + QosFlow_Identification_Type QosFlow optional /* mandatory at the system interface */ + }; + + type record IP_NR_DrbInfo_Type { + NR_CellId_Type CellId, + IP_DrbId_Type DrbId optional /* mandatory at the system interface */ + }; + + type union IP_DrbInfo_Type { + IP_EUTRA_DrbInfo_Type Eutra, + IP_EUTRA_QosFlowInfo_Type Eutra5GC, /* used when SDAP is configured in non-transparent mode at the SS */ + IP_UTRAN_GERAN_DrbInfo_Type Utran, + IP_UTRAN_GERAN_DrbInfo_Type Geran, + IP_NR_QosFlowInfo_Type Nr5GC, /* used when SDAP is configured in non-transparent mode at the SS @sic R5-188107, R5w190005r1 sic@ */ + IP_NR_DrbInfo_Type NrEPC, /* used when NR is connected to EPC (S1-U interface) or when SDAP is configured in transparent mode at the SS @sic R5w190118 sic@ */ + IP_WLAN_DrbInfo_Type Wlan, /* @sic R5w160107 slide 7 sic@ */ + IP_ePDG_IPsecTunnelInfo_Type IPsecTunnel /* @sic R5w160107 slide 7 sic@ */ + }; + + //---------------------------------------------------------------------------- + + type enumerated GPRS_CipheringAlgorithm_Type { + gea0(0), + gea2(2), + gea3(3), + gea4(4) + }; + + type O4_Type MessageAuthenticationCode; /* 24.301 cl. 9.5 */ + type O4_Type NasCount_Type; + + type B32_Type PdcpCountValue_Type; + + type enumerated IPCAN_RAN_Type { /* radio access network technology used by the IPCAN PTC */ + GERAN, + UTRAN_FDD, + UTRAN_TDD, + EUTRA_FDD, + EUTRA_TDD, + WLAN, /* @sic R5-163201 sic@ */ + NR /* @sic R5-188107 sic@ */ + }; + + // To indicate which PTCs are configured (EUTRA alone is included for completeness) + type enumerated IRAT_ConfiguredPTCs_Type { EUTRA_Only, EUTRA_UTRAN, EUTRA_GERAN, EUTRA_UTRAN_GERAN, EUTRA_CDMA2000, UTRAN_Only, UTRAN_GERAN, EUTRA_WLAN, UTRAN_WLAN, WLAN_Only, NR5GC_WLAN } + + const float tsc_GuardTimePreamble := 180.0; + const float tsc_GuardTimePreamble_12min := tsc_GuardTimePreamble * int2float(4); // @sic R5s200494 sic@ + + // definitions needed for IP and IMS handling + const integer tsc_NoOfPDNs := 3; /* @sic R5s191074 sic@ */ + const integer tsc_NoOfIMSPDNs := 2; /* @sic R5s201177 sic@ */ + + const integer tsc_Index_IMS1 := 0; + const integer tsc_Index_IMS2 := 1; + + type enumerated PDN_Index_Type { /* 'index name' associated to a PDN: + The major purpose is to associate a PDN specific set of IP addresses to the given PDN (e.g. UE addresses, P-CSCF address etc.); + in general there are one or two PDNs configured at the same time and - from TTCN point of view - the IMS PDN is considered to be the first one; + a second PDN may be configured in case of emergency call or e.g. for XCAP signalling; + the 'internet PDN' (according to TS 36.508 clause 4.5.2) is considered as (optional) second PDN during initial registration and gets released after initial registration; + in case of WLAN a separate group of index names is used to distinguish the different configuration of the emulated IP network */ + PDN_1 (0), /* "default" PDN being kept connected to during a test case (in case of LTE in general the IMS PDN) */ + PDN_2 (1), /* second PDN: during initial registration (TS 36.508 clause 4.5.2) for LTE and "multiple PDN' this is the internet PDN; + after initial registration it is used if needed according to the test purpose (e.g. emergency call) */ + PDN_2a, /* used for the special case when the UE IP address of the second PDN changes in a test case */ + PDN_Internet, /* mainly used as alias for PDN2 during initial registration */ + ePDG_IMS1, /* WLAN: PDN for 'normal' IMS */ + ePDG_IMS2, /* WLAN: PDN for emergency IMS (in general) */ + ePDG_XCAP, /* WLAN: PDN for XCAP in case of XCAP server being part of 3GPP-network + NOTE: In contrast to LTE for WLAN there is a different IP architecture to be consider by TTCN for XCAP and IMS emergency */ + ePDG_Internet, /* place-holder for WLAN-offload scenarios */ + nrPDN_Internet, /* mainly used as alias during initial registration in ENDC @sic R5s191074 sic@ */ + PDN_3 (2), /* used in ENDC and 5GC for the third PDN @sic R5s191074 sic@ */ + PDN_4 (3), /* used in 5GC for the URLLC PDN @sic R5-221467 sic@ */ + PDN_5 (4), /* used in 5GC for the MIoT PDN @sic R5-221467 sic@ */ + PDN_6 (5) /* used in 5GC for the V2X PDN @sic R5-221467 sic@ */ + }; + + const integer tsc_EUTRA_MaxEARFCN := 65535; // @sic R5-173669 moved from UTRANCommonDefs sic@ + + /* @sic R5s220330 sic@ */ + const integer tsc_Max_NR_PDCP_SDU_size := 9000; // TS38.323 cl. 4.3.1 + const integer tsc_Max_LTE_PDCP_SDU_size := 8188; // TS36.323 cl. 4.3.1 + + //---------------------------------------------------------------------------- + + // **** C-RNTI: 16 bit for all EUTRA/NBIOT/NR; same constants to be used for NR unless there is a need for NR-specifc values in which case the constants shall have an NR prefix **** + type UInt16_Type RNTI_Value_Type; /* corresponds to NR ASN.1: RNTI-Value ::= INTEGER (0..65535) */ + type B16_Type RNTI_B16_Type; + + const RNTI_Value_Type tsc_C_RNTI_Value1 := hex2int('1001'H); /* '1001'H acc. to TS 36.523-3 table 7.1.1-1 */ + const RNTI_Value_Type tsc_C_RNTI_Value2 := hex2int('1034'H); /* '1034'H acc. to TS 36.523-3 table 7.1.1-1 */ + const RNTI_Value_Type tsc_C_RNTI_Value3 := hex2int('1111'H); /* '1111'H acc. to TS 36.523-3 table 7.1.1-1 */ + const RNTI_Value_Type tsc_C_RNTI_Value4 := hex2int('1FF1'H); /* '1FF1'H acc. to TS 36.523-3 table 7.1.1-1 */ + const RNTI_Value_Type tsc_C_RNTI_Value5 := hex2int('04D2'H); /* '04D2'H acc. to TS 36.523-3 table 7.1.1-1 */ + const RNTI_Value_Type tsc_C_RNTI_Value6 := hex2int('0929'H); /* '0929'H acc. to TS 36.523-3 table 7.1.1-1 */ + const RNTI_Value_Type tsc_C_RNTI_Value7 := hex2int('0D80'H); /* '0D80'H acc. to TS 36.523-3 table 7.1.1-1 */ + const RNTI_Value_Type tsc_C_RNTI_Value8 := hex2int('11D7'H); /* '11D7'H acc. to TS 36.523-3 table 7.1.1-1 */ + const RNTI_Value_Type tsc_C_RNTI_Value9 := hex2int('162E'H); /* '162E'H acc. to TS 36.523-3 table 7.1.1-1 */ + const RNTI_Value_Type tsc_C_RNTI_Value10 := hex2int('1A85'H); /* '1A85'H acc. to TS 36.523-3 table 7.1.1-1 */ + + + const RNTI_B16_Type tsc_C_RNTI_Def := int2bit(tsc_C_RNTI_Value1, 16); + const RNTI_B16_Type tsc_C_RNTI_Def2 := int2bit(tsc_C_RNTI_Value2, 16); + const RNTI_B16_Type tsc_C_RNTI_Def3 := int2bit(tsc_C_RNTI_Value3, 16); + const RNTI_B16_Type tsc_C_RNTI_Def4 := int2bit(tsc_C_RNTI_Value4, 16); + const RNTI_B16_Type tsc_C_RNTI_Def5 := int2bit(tsc_C_RNTI_Value5, 16); + const RNTI_B16_Type tsc_C_RNTI_Def6 := int2bit(tsc_C_RNTI_Value6, 16); + const RNTI_B16_Type tsc_C_RNTI_Def7 := int2bit(tsc_C_RNTI_Value7, 16); + const RNTI_B16_Type tsc_C_RNTI_Def8 := int2bit(tsc_C_RNTI_Value8, 16); + const RNTI_B16_Type tsc_C_RNTI_Def9 := int2bit(tsc_C_RNTI_Value9, 16); + const RNTI_B16_Type tsc_C_RNTI_Def10 := int2bit(tsc_C_RNTI_Value10, 16); + + template (present) octetstring cr_Octet10_Any := ? length(10); /* @status APPROVED (LTE) */ + + //---------------------------------------------------------------------------- + // constant to generate PRBS sequence + const octetstring tsc_RandomPRBS := + 'FFE665A5C5CA3452085408ABEECE4B0B813FD337873F2CD1E29AE91BD6C8E14F'O + & 'DE630F8195688EBE465F09816A8EEB1B83953DD362DAE3B06D5B76D8E3E53087'O + & 'EA645A09017FD99C3CACBB46DF1CD61DA9C435F89943DF9CC34ADEE31AD6E24F'O + & 'A1903D53778D949742750DD49DE9CE9E430AD448A14575D89C16025508814020'O //octets 0 .. 127 + & '0555DDC9CBCB9EC31F833F866A5BA390680EAB11282EAE44F5E7658F6B247A0C'O + & '54A21057F73278595C235077F267A59097E8CEB4EDE49A16FDB36D2485EA3107'O + & 'D59DC360700D5488BEB9B96C24AF44DF498BC135788C14A8BBEC64A5EF64DA1C'O + & '5608FEB312D7B738D3E2CFB4C74A7458A3EF9B3C79F3CD348740DFE330780C01'O //octets 128 .. 255 + & 'FFCCCB4B8B9468A410A81157DD9C9617027FA66F0E7E59A3C535D237AD91C29F'O + & 'BCC61F032AD11D7C8CBE1302D51DD637072A7BA6C5B5C760DAB6EDB1C7CA610F'O + & 'D4C8B41202FFB3387959768DBE39AC3B53886BF13287BF398695BDC635ADC49F'O + & '43207AA6EF1B292E84EA1BA93BD39D3C8615A891428AEBB1382C04AA11028040'O //octets 256 .. 383 + & '0AABBB9397973D863F067F0CD4B74720D01D5622505D5C89EBCECB1ED648F418'O + & 'A94420AFEE64F0B2B846A0EFE4CF4B212FD19D69DBC9342DFB66DA490BD4620F'O + & 'AB3B86C0E01AA9117D7372D8495E89BE9317826AF118295177D8C94BDEC9B438'O + & 'AC11FD6625AF6E71A7C59F698E94E8B147DF3678F3E79A690E81BFC660F01803'O //octets 384 .. 511 + & 'FF9996971728D148215022AFBB392C2E04FF4CDE1CFCB3478A6BA46F5B23853F'O + & '798C3E0655A23AF9197C2605AA3BAC6E0E54F74D8B6B8EC1B56DDB638F94C21F'O + & 'A991682405FF6670F2B2ED1B7C735876A710D7E2650F7E730D2B7B8C6B5B893E'O + & '8640F54DDE36525D09D4375277A73A790C2B51228515D7627058095422050080'O //octets 512 .. 639 + & '155777272F2E7B0C7E0CFE19A96E8E41A03AAC44A0BAB913D79D963DAC91E831'O + & '5288415FDCC9E165708D41DFC99E96425FA33AD3B792685BF6CDB49217A8C41F'O + & '56770D81C0355222FAE6E5B092BD137D262F04D5E23052A2EFB19297BD936871'O + & '5823FACC4B5EDCE34F8B3ED31D29D1628FBE6CF1E7CF34D21D037F8CC1E03007'O //octets 640 .. 767 + & 'FF332D2E2E51A29042A0455F7672585C09FE99BC39F9668F14D748DEB6470A7E'O + & 'F3187C0CAB4475F232F84C0B547758DC1CA9EE9B16D71D836ADBB6C71F29843F'O + & '5322D0480BFECCE1E565DA36F8E6B0ED4E21AFC4CA1EFCE61A56F718D6B7127D'O + & '0C81EA9BBC6CA4BA13A86EA4EF4E74F21856A2450A2BAEC4E0B012A8440A0100'O //octets 768 .. 895 + & '2AAEEE4E5E5CF618FC19FC3352DD1C834075588941757227AF3B2C7B5923D062'O + & 'A51082BFB993C2CAE11A83BF933D2C84BF4675A76F24D0B7ED9B69242F51883E'O + & 'ACEE1B03806AA445F5CDCB61257A26FA4C5E09ABC460A545DF63252F7B26D0E2'O + & 'B047F59896BDB9C69F167DA63A53A2C51F7CD9E3CF9E69A43A06FF1983C0600F'O //octets 896 .. 1023 + & 'FE665A5C5CA3452085408ABEECE4B0B813FD337873F2CD1E29AE91BD6C8E14FD'O + & 'E630F8195688EBE465F09816A8EEB1B83953DD362DAE3B06D5B76D8E3E53087E'O + & 'A645A09017FD99C3CACBB46DF1CD61DA9C435F89943DF9CC34ADEE31AD6E24FA'O + & '1903D53778D949742750DD49DE9CE9E430AD448A14575D89C160255088140200'O //octets 1024 .. 1151 + & '555DDC9CBCB9EC31F833F866A5BA390680EAB11282EAE44F5E7658F6B247A0C5'O + & '4A21057F73278595C235077F267A59097E8CEB4EDE49A16FDB36D2485EA3107D'O + & '59DC360700D5488BEB9B96C24AF44DF498BC135788C14A8BBEC64A5EF64DA1C5'O + & '608FEB312D7B738D3E2CFB4C74A7458A3EF9B3C79F3CD348740DFE330780C01F'O //octets 1152 .. 1279 + & 'FCCCB4B8B9468A410A81157DD9C9617027FA66F0E7E59A3C535D237AD91C29FB'O + & 'CC61F032AD11D7C8CBE1302D51DD637072A7BA6C5B5C760DAB6EDB1C7CA610FD'O + & '4C8B41202FFB3387959768DBE39AC3B53886BF13287BF398695BDC635ADC49F4'O + & '3207AA6EF1B292E84EA1BA93BD39D3C8615A891428AEBB1382C04AA110280400'O //octets 1280 .. 1407 + & 'AABBB9397973D863F067F0CD4B74720D01D5622505D5C89EBCECB1ED648F418A'O + & '94420AFEE64F0B2B846A0EFE4CF4B212FD19D69DBC9342DFB66DA490BD4620FA'O + & 'B3B86C0E01AA9117D7372D8495E89BE9317826AF118295177D8C94BDEC9B438A'O + & 'C11FD6625AF6E71A7C59F698E94E8B147DF3678F3E79A690E81BFC660F01803F'O //octets 1408 .. 1535 + & 'F9996971728D148215022AFBB392C2E04FF4CDE1CFCB3478A6BA46F5B23853F7'O + & '98C3E0655A23AF9197C2605AA3BAC6E0E54F74D8B6B8EC1B56DDB638F94C21FA'O + & '991682405FF6670F2B2ED1B7C735876A710D7E2650F7E730D2B7B8C6B5B893E8'O + & '640F54DDE36525D09D4375277A73A790C2B51228515D76270580954220500801'O //octets 1536 .. 1663 + & '55777272F2E7B0C7E0CFE19A96E8E41A03AAC44A0BAB913D79D963DAC91E8315'O + & '288415FDCC9E165708D41DFC99E96425FA33AD3B792685BF6CDB49217A8C41F5'O + & '6770D81C0355222FAE6E5B092BD137D262F04D5E23052A2EFB19297BD9368715'O + & '823FACC4B5EDCE34F8B3ED31D29D1628FBE6CF1E7CF34D21D037F8CC1E03007F'O //octets 1664 .. 1791 + & 'F332D2E2E51A29042A0455F7672585C09FE99BC39F9668F14D748DEB6470A7EF'O + & '3187C0CAB4475F232F84C0B547758DC1CA9EE9B16D71D836ADBB6C71F29843F5'O + & '322D0480BFECCE1E565DA36F8E6B0ED4E21AFC4CA1EFCE61A56F718D6B7127D0'O + & 'C81EA9BBC6CA4BA13A86EA4EF4E74F21856A2450A2BAEC4E0B012A8440A01002'O //octets 1792 .. 1919 + & 'AAEEE4E5E5CF618FC19FC3352DD1C834075588941757227AF3B2C7B5923D062A'O + & '51082BFB993C2CAE11A83BF933D2C84BF4675A76F24D0B7ED9B69242F51883EA'O + & 'CEE1B03806AA445F5CDCB61257A26FA4C5E09ABC460A545DF63252F7B26D0E2B'O + & '047F59896BDB9C69F167DA63A53A2C51F7CD9E3CF9E69A43A06FF1983C0600'O; //octets 1920 .. 2046 + + const charstring tsc_AT_ResultOK := "OK"; + const charstring tsc_Fox := "The quick brown fox jumps over the lazy dog's back. Kaufen Sie Ihrer Frau vier bequeme Pelze. - 0123456789 - THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG'S BACK."; + const charstring tsc_Fox_PDU := "06812222222222" + & "11000A9174097538740000A7a054741914afa7c76b9058febebb41e6371ea4aeb7e173d0db5e9683" + & "e8e832881dd6e741e4f7f9340789c3e3b50bb40cd7cd6537689a2e83926879590e32cac375903d5d" + & "9683c4e578bddc2e83a065b6beec02b540b0986c46abd96eb81ca805a2228ba06835395c8284d2e7" + & "d509323eb12065b5099d829ed6a21444451641cca0360b223e8fa72948181c2e5d"; + const charstring tsc_FoxShort := "The quick brown fox jumps over the lazy dog's back. Kaufen Sie Ihrer Frau vier bequeme Pelze. 0123456789 - 153 chars - 134 octets for SMS concatenation."; + + const charstring tsc_CarriageReturnLineFeed := char(0,0,0,13) & char(0,0,0,10); + + const octetstring tsc_Oct1000_0 := int2oct(0, 1000); /* @sic R5s230084 sic@ + @status APPROVED (NR5GC) */ + + //---------------------------------------------------------------------------- + + + /* Verdict control */ + type enumerated VerdictCtrl_Type { + normal, /* verdict assignments as for normal L3 signalling test */ + layer2 /* verdict assignments for layer2 test: FAIL for unexpected events on DRB ports */ + }; + + type enumerated HarqErrorHandling_Type { + ignore, /* ignore HARQ error indications */ + raiseInconc, /* assign INCONC when there is a HARQ error indication */ + allowOneRetransmission /* allow up-to one harq retransmission + @sic R5s110176 BASELINE MOVING 2011 sic@ */ + }; + + //---------------------------------------------------------------------------- + + type integer LineNo_Type; + + /* + * @desc local function + * @param p_FileName + * @param p_LineNo + * @param p_Msg + * @return charstring + */ + function fl_FormatLog(charstring p_FileName, + LineNo_Type p_LineNo, + charstring p_Msg) return charstring + { + var charstring v_LineNoStr := int2str(p_LineNo); + + return p_FileName & ":" & v_LineNoStr & ": " & p_Msg; /* common "UNIX style" format as e.g. used by grep */ + + } + + //---------------------------------------------------------------------------- + /* + * @desc function for common error logging + * @param p_FileName + * @param p_LineNo + * @param p_Msg + */ + function f_ErrorLog(charstring p_FileName, + LineNo_Type p_LineNo, + charstring p_Msg) + { + log(fl_FormatLog(p_FileName, p_LineNo, p_Msg)); + }; + + //---------------------------------------------------------------------------- + /* + * @desc common function for verdict assignment + * @param p_Verdict + * @param p_FileName + * @param p_LineNo + * @param p_Msg + */ + function f_SetVerdict(verdicttype p_Verdict, + charstring p_FileName, + LineNo_Type p_LineNo, + charstring p_Msg) + { + var charstring v_OutputLine := fl_FormatLog(p_FileName, p_LineNo, p_Msg); + setverdict(p_Verdict, v_OutputLine); + } + + //---------------------------------------------------------------------------- + /* + * @desc Common functions to be called in case unrecoverable errors + * (i.e. runtimer errors generated by TTCN) + * @param p_FileName + * @param p_LineNo + * @param p_Msg + */ + function FatalError(charstring p_FileName, + LineNo_Type p_LineNo, + charstring p_Msg) + { + // setverdict(inconc); // setverdict causes problems when FatalError is used in a function called from within a template + f_ErrorLog(p_FileName, p_LineNo, p_Msg); + testcase.stop (p_Msg); // This operation now defined in TTCN3 v4.2.1 + }; + + /* + * @desc set verdict inconc in cases when no pass/fail is possible e.g. due to wrong PICS/PIXIT + * NOTE: as there is no need to evaluate any component specific information ans as "self.kill" can be used to terminate the test case + * (resulting in the final verdict 'inconc') this function is independent from any component and can be call from everywhere where 'setverdict' or 'self.kill' are allowed + * @param p_FileName + * @param p_LineNo + * @param p_Msg + */ + function f_SetVerdictInconc(charstring p_FileName, + LineNo_Type p_LineNo, + charstring p_Msg) + { + f_SetVerdict(inconc, p_FileName, p_LineNo, p_Msg); + self.kill; // => test case will be terminated immediately + } + + + + //---------------------------------------------------------------------------- + /* + * @desc Common function to delay the test case for the given time + * @param p_DelayTime + */ + function f_Delay ( float p_DelayTime ) + { + timer t_Delay; + + t_Delay.start ( p_DelayTime ); + t_Delay.timeout; + }; + + //---------------------------------------------------------------------------- + /* + * @desc return index of the first occurance of the given value in the list or -1 if not found + * @param p_IntegerList + * @param p_Val + * @return integer + */ + function f_IntegerList_Search(IntegerList_Type p_IntegerList, + integer p_Val) return integer + { + var integer i; + + for (i:=0; i < lengthof(p_IntegerList); i:= i+1) { + if (p_IntegerList[i] == p_Val) { + return i; + } + } + return -1; /* @sic R5s190465 sic@ */ + } + + //---------------------------------------------------------------------------- + /* + * @desc return log2 rounded up to the next integer + * @param p_Val + * @return upperbound(log2(p_Val)) + */ + function f_CeilLog2(integer p_Val) return integer + { + var integer N := 1; + var integer i := 0; + + if (p_Val > 0) { + while (N < p_Val) { + N := N * 2; + i := i + 1; + } + } + return i; + } + + /* + * @desc return log2 rounded down to the next integer + * @param p_Val + * @return lowerbound(log2(p_Val)) + */ + function f_FloorLog2(integer p_Val) return integer + { + return f_CeilLog2(p_Val + 1) - 1; // see e.g. wikipedia + } + + /* + * @desc return Base ^ Exponent + * NOTE: current implementation serves positive integer values only + * @param p_Base + * @param p_Exponent + * @return integer + */ + function f_Power(UInt_Type p_Base, + UInt_Type p_Exponent) return UInt_Type + { + var integer i; + var UInt_Type v_Result := 1; + for (i := 0; i < p_Exponent; i := i + 1) { + v_Result := v_Result * p_Base; + } + return v_Result; + } + + /* + * @desc return float value rounded with tie-breaking away from zero (i.e. x.5 is rounded up for positive values but rounded down for negative values) + * @param p_Float + * @return integer + * @status APPROVED (ENDC, NR5GC, NR5GC_IRAT) + */ + function f_Round(float p_Float) return integer + { + var integer v_Result; + + if (p_Float >= 0.0) { + v_Result := float2int(p_Float + 0.5); + } else { // @sic R5s200469: negative values sic@ + v_Result := float2int(p_Float - 0.5); + } + return v_Result; + } + + //---------------------------------------------------------------------------- + + function f_TemplateInt2Bit(template (present) integer p_Val, + integer p_Length) return template (present) bitstring + { /* Auxiliary function + * note: there is no possibility in TTCN-3 to check whether a template parameter + * which is not a value is "*", "?" or omit + * => we restrict p_Val to "template (present)", i.e it shall be a value or "?" */ + if (isvalue(p_Val)) { + return int2bit(valueof(p_Val), p_Length); + } else { + return ?; + } + } + + function f_TemplateInt2Str(template (present) integer p_Val) return template (present) charstring + { + if (isvalue(p_Val)) { + return int2str(valueof(p_Val)); + } else { + return ?; + } + } + + //---------------------------------------------------------------------------- + /* + * @desc returns index of first occurency of any char of p_CharList in p_String starting from p_StartIndex; + * returns -1 if there is no occurency + * @param p_String + * @param p_CharList + * @param p_StartIndex + * @return integer + */ + function f_StringFindChar(charstring p_String, + Char1List_Type p_CharList, + UInt_Type p_StartIndex := 0) return integer + { + var integer v_NoOfChars := lengthof(p_CharList); + var integer v_Index; + var integer i; + var Char1_Type v_Char; + + if (v_NoOfChars == 0) { + return -1; + } + + for (v_Index:=p_StartIndex; v_Index 0) { + for (i:=0; i < k - 1; i := i+1) { + v_String := v_String & v_StringList[i] & p_JoinString; + } + v_String := v_String & v_StringList[i]; + } + return v_String; + } + + function f_CharStringList_Add(CharStringList_Type p_StringList, + charstring p_NewString) return CharStringList_Type + { + var integer v_Length := lengthof(p_StringList); + var CharStringList_Type v_StringList := p_StringList; + + v_StringList[v_Length] := p_NewString; + return v_StringList; + } + + function f_CharStringList_Remove(CharStringList_Type p_StringList, + template (present) charstring p_Pattern) return CharStringList_Type + { + var CharStringList_Type v_NewList := {}; + var integer k := 0; + var integer i; + + for (i:=0; i < lengthof(p_StringList); i := i+1) { + if (not match(p_StringList[i], p_Pattern)) { + v_NewList[k] := p_StringList[i]; + k := k + 1; + } + } + return v_NewList; + } + + //---------------------------------------------------------------------------- + + function f_ConvertBoolToBit(boolean p_Bool) return B1_Type + { + var B1_Type v_Bit := '0'B; + if (p_Bool) { + v_Bit := '1'B; + } + return v_Bit; + } + + //---------------------------------------------------------------------------- + + function f_ConvertStrToBit(charstring p_Charstring) return bitstring + { + var integer i; + var bitstring v_ReturnBitString := ''B; + + for (i := 0; i 0) { // if not already byte aligned + v_PaddingLength := 8 - (v_BitLength mod 8); + for (i:=0; i < v_PaddingLength; i := i+1) { + v_Bitstring := v_Bitstring & '0'B; + } + } + + return v_Bitstring; + } + + //---------------------------------------------------------------------------- + /* + * @desc function to extract output string from random test pattern of a certain length and at a starting point + * @param p_Start + * @param p_N + * @return octetstring + */ + function f_GetN_OctetsFromPRBS(UInt_Type p_Start, + UInt_Type p_N) + return octetstring + { /* @sic R5s180289: code optimisation sic@ */ + var integer v_LengthOfPRBS := lengthof(tsc_RandomPRBS); + var integer v_Start := p_Start mod v_LengthOfPRBS; + var octetstring v_Noctets := substr(tsc_RandomPRBS, v_Start, v_LengthOfPRBS - v_Start); + + while (lengthof(v_Noctets) < p_N) { + v_Noctets := v_Noctets & tsc_RandomPRBS; + } + v_Noctets := substr(v_Noctets, 0, p_N); + return v_Noctets; + } + + //---------------------------------------------------------------------------- + + type enumerated Gsm7BitPacking_Type { SMS_Packing, CBS_Packing, USSD_Packing }; + + const integer tsc_Gsm7BitLookup[32..126][2] := { /* ASCII to GSM 7 bit char conversion table + Self indexing lookup table per ASCII integer value + 1st field - status + 0 => no change + 1 => basic table - no translation required + 2 => escape to ext table 23.038 6.2.1.1 + 3 => char does not exist in gsm char table + 2nd field - translation integer value per 23.038 6.2.1/6.2.1.1 + range 0-127 & dummy entry 256 */ + { 0, 256 }, // 32 - space - no xlat + { 0, 256 }, // 33 - "!" - no xlat + { 0, 256 }, // 34 - """ - no xlat + { 0, 256 }, // 35 - "#" - no xlat + { 1, 2 }, // 36 - "$" - gsm 23.038 6.2.1 - 02 + { 0, 256 }, // 37 - "%" - no xlat + { 0, 256 }, // 38 - "&" - no xlat + { 0, 256 }, // 39 - "'" - no xlat + { 0, 256 }, // 40 - "(" - no xlat + { 0, 256 }, // 41 - ")" - no xlat + { 0, 256 }, // 42 - "*" - no xlat + { 0, 256 }, // 43 - "+" - no xlat + { 0, 256 }, // 44 - "," - no xlat + { 0, 256 }, // 45 - "-" - no xlat + { 0, 256 }, // 46 - "." - no xlat + { 0, 256 }, // 47 - "/" - no xlat + { 0, 256 }, // 48 - "0" - no xlat + { 0, 256 }, // 49 - "1" - no xlat + { 0, 256 }, // 50 - "2" - no xlat + { 0, 256 }, // 51 - "3" - no xlat + { 0, 256 }, // 52 - "4" - no xlat + { 0, 256 }, // 53 - "5" - no xlat + { 0, 256 }, // 54 - "6" - no xlat + { 0, 256 }, // 55 - "7" - no xlat + { 0, 256 }, // 56 - "8" - no xlat + { 0, 256 }, // 57 - "9" - no xlat + { 0, 256 }, // 58 - ":" - no xlat + { 0, 256 }, // 59 - ";" - no xlat + { 0, 256 }, // 60 - "<" - no xlat + { 0, 256 }, // 61 - "=" - no xlat + { 0, 256 }, // 62 - ">" - no xlat + { 0, 256 }, // 63 - "9" - no xlat + { 1, 0 }, // 64 - "@" - gsm 23.038 6.2.1 - 00 + { 0, 256 }, // 65 - "A" - no xlat + { 0, 256 }, // 66 - "B" - no xlat + { 0, 256 }, // 67 - "C" - no xlat + { 0, 256 }, // 68 - "D" - no xlat + { 0, 256 }, // 69 - "E" - no xlat + { 0, 256 }, // 70 - "F" - no xlat + { 0, 256 }, // 71 - "G" - no xlat + { 0, 256 }, // 72 - "H" - no xlat + { 0, 256 }, // 73 - "I" - no xlat + { 0, 256 }, // 74 - "J" - no xlat + { 0, 256 }, // 75 - "K" - no xlat + { 0, 256 }, // 76 - "L" - no xlat + { 0, 256 }, // 77 - "M" - no xlat + { 0, 256 }, // 78 - "N" - no xlat + { 0, 256 }, // 79 - "0" - no xlat + { 0, 256 }, // 80 - "P" - no xlat + { 0, 256 }, // 81 - "Q" - no xlat + { 0, 256 }, // 82 - "R" - no xlat + { 0, 256 }, // 83 - "S" - no xlat + { 0, 256 }, // 84 - "T" - no xlat + { 0, 256 }, // 85 - "U" - no xlat + { 0, 256 }, // 86 - "V" - no xlat + { 0, 256 }, // 87 - "W" - no xlat + { 0, 256 }, // 88 - "X" - no xlat + { 0, 256 }, // 89 - "Y" - no xlat + { 0, 256 }, // 90 - "Z" - no xlat + { 2, 60 }, // 91 - "[" - gsm 23.038 6.2.1.1 ext. - 3C + { 2, 47 }, // 92 - "\" - gsm 23.038 6.2.1.1 ext. - 2F + { 2, 62 }, // 93 - "]" - gsm 23.038 6.2.1.1 ext. - 3E + { 2, 20 }, // 94 - "^" - gsm 23.038 6.2.1.1 ext. - 14 + { 1, 17 }, // 95 - "_" - gsm 23.038 6.2.1 - 11 + { 3, 256 }, // 96 - "`" - char does not exist in gsm 23.038 6.2.1/6.2.1.1 + { 0, 256 }, // 97 - "a" - no xlat + { 0, 256 }, // 98 - "b" - no xlat + { 0, 256 }, // 99 - "c" - no xlat + { 0, 256 }, // 100 - "d" - no xlat + { 0, 256 }, // 101 - "e" - no xlat + { 0, 256 }, // 102 - "f" - no xlat + { 0, 256 }, // 103 - "g" - no xlat + { 0, 256 }, // 104 - "h" - no xlat + { 0, 256 }, // 105 - "i" - no xlat + { 0, 256 }, // 106 - "j" - no xlat + { 0, 256 }, // 107 - "k" - no xlat + { 0, 256 }, // 108 - "l" - no xlat + { 0, 256 }, // 109 - "m" - no xlat + { 0, 256 }, // 110 - "n" - no xlat + { 0, 256 }, // 111 - "o" - no xlat + { 0, 256 }, // 112 - "p" - no xlat + { 0, 256 }, // 113 - "q" - no xlat + { 0, 256 }, // 114 - "r" - no xlat + { 0, 256 }, // 115 - "s" - no xlat + { 0, 256 }, // 116 - "t" - no xlat + { 0, 256 }, // 117 - "u" - no xlat + { 0, 256 }, // 118 - "v" - no xlat + { 0, 256 }, // 119 - "w" - no xlat + { 0, 256 }, // 120 - "x" - no xlat + { 0, 256 }, // 121 - "y" - no xlat + { 0, 256 }, // 122 - "z" - no xlat + { 2, 40 }, // 123 - "{" - gsm 23.038 6.2.1.1 ext. - 28 + { 2, 64 }, // 124 - "|" - gsm 23.038 6.2.1.1 ext. - 40 + { 2, 41 }, // 125 - "}" - gsm 23.038 6.2.1.1 ext. - 29 + { 2, 61 } // 126 - "~" - gsm 23.038 6.2.1.1 ext. - 3D + }; + + function fl_XlatAcsiiToGsm7Bit(octetstring p_AsciiOctetString) return octetstring + { + var octetstring v_GsmOctetString; + var integer v_XlatStatus; + var integer v_AsciiIndex; + var integer i; + var integer j := 0; + + for (i:=0; i '48616C6C6F'O + var bitstring v_BitString := int2bit(0, p_NumFillbits); // => fill bits are the rightmost bits of the first octet carrying the first (rightmost) bits of the first (leftmost) character of the message + var bitstring v_Padding := ''B; + var integer v_TextLength; + var integer v_BitStringLength := p_NumFillbits; + var integer v_IntValue; + var integer v_NoOfOctets; + var integer v_NoOfPaddingBits; + var integer v_Index; + var integer i; + + // convert ascii table to GSM 7 bit table + v_OctetString := fl_XlatAcsiiToGsm7Bit(v_OctetString); // @sic R5s130103 change 3 sic@ + v_TextLength := lengthof(v_OctetString); + + if (((p_Packing == SMS_Packing) and (v_TextLength > 160)) or // a maximum of 160 characters for SMS (i.e. 140 octets) + ((p_Packing == CBS_Packing) and (v_TextLength > 93)) or // a maximum of 93 characters for CBS (i.e. 82 octets) + ((p_Packing == USSD_Packing) and (v_TextLength > 182))) { // a maximum of 182 characters for USSD (i.e. 160 octets) + FatalError(__FILE__, __LINE__, "input string is too long"); + } + + for (i:=0; i 0) { + if ((p_Packing == USSD_Packing) and (v_NoOfPaddingBits == 7)) { + v_Padding := '0001101'B; // use instead of the @ character; see TS 23.038 cl. 6.1.2.3.1 + } else { + v_Padding := int2bit(0, v_NoOfPaddingBits); // 1..7 padding bits, all 0 + } + } + v_BitString := v_Padding & v_BitString; + + // convert bitstring back to octetstring: the first character is at the end of the bitstring + // => we need to take the octets from the end of the bitstring + v_OctetString := ''O; + for (i:=0; i < v_NoOfOctets; i:=i+1) { + v_Index := (v_NoOfOctets - (i+1)) * 8; // get start index of the next octet + v_OctetString[i] := bit2oct(substr(v_BitString, v_Index, 8)); + } + return v_OctetString; + } + + function f_CharPacking_IA5toBCD(charstring p_ASCII_String) return octetstring + { /* Packed BCD coding with "swaping of nibbles" as required e.g. for encoding of called and calling party numbers in NAS messages (e.g. TS 24.004 cl. 10.5.4.7 and 10.5.4.9); + when the length of the input string is odd 'F' is aded as padding: + "0613454120" -> '6031541402'O - even number of digits + "06134541209" -> '6031541402F9'O - odd number of digits (padding) + "A6134541209" -> error */ + var integer i; + var charstring v_BcdString; + var integer v_Length := lengthof(p_ASCII_String); + var charstring v_ASCII_String := p_ASCII_String; + + // check input string + for (i := 0; i < v_Length; i := i+1) { + if (not match(p_ASCII_String[i], pattern "[0-9]")) { + FatalError(__FILE__, __LINE__, "invalid character for BCD string"); + } + } + + // add padding (if needed) + if (v_Length mod 2 != 0) { + v_ASCII_String := v_ASCII_String & "F"; + } + + // swap digits + for (i := 0; i < v_Length; i := i+2) { + v_BcdString[i] := v_ASCII_String[i+1]; + v_BcdString[i+1] := v_ASCII_String[i]; + } + + return str2oct(v_BcdString); + } + + //---------------------------------------------------------------------------- + + function f_BitstringReplaceMSB(bitstring p_Bitstring, + B1_Type p_NewMSB) return bitstring + { + return replace(p_Bitstring, 0, 1, p_NewMSB); + } + + //---------------------------------------------------------------------------- + + function f_Bitstring_BitIsSet(bitstring p_Bitstring, + integer p_Index) return boolean + { + if (p_Index >= lengthof(p_Bitstring)) { + FatalError(__FILE__, __LINE__, "invalid bit position"); + } + return (substr(p_Bitstring, p_Index, 1) == '1'B); + } + + function f_Bitstring_LeastSignificantBits(bitstring p_Bitstring, + integer p_NoOfBis) return bitstring + { + var integer v_Length := lengthof(p_Bitstring); + if (p_NoOfBis > v_Length) { + FatalError(__FILE__, __LINE__, "invalid length"); + } + return substr(p_Bitstring, v_Length - p_NoOfBis, p_NoOfBis); + } + + function f_BitstringTemplate_SetBit(template (present) bitstring p_Bitstring, + integer p_Position, + template (present) B1_Type p_Bit) return template (present) bitstring + { /* ES 201 873-1 clause 15.6.1 does not allow index notation */ + /* p_Bitstring needs to be a bitstring with well-defined length (i.e. allowing lengthof(p_Bitstring)) */ + var bitstring v_Substring1; + var bitstring v_Substring2; + var integer v_Length := lengthof(p_Bitstring); + + if (p_Position >= v_Length) { + FatalError(__FILE__, __LINE__, "out of range"); + } + v_Substring1 := substr(p_Bitstring, 0, p_Position); + v_Substring2 := substr(p_Bitstring, p_Position + 1, v_Length - p_Position - 1); + + return v_Substring1 & valueof(p_Bit) & v_Substring2; + } + + //---------------------------------------------------------------------------- + // Moved here because now needed in Authentication_Init (i.e. GERAN and UTRAN PTCs too) + const integer tsc_KDF_HMAC_SHA_256 := 1; /* @status APPROVED (IMS, IMS_IRAT, LTE, LTE_IRAT, POS, SSNITZ, UTRAN) */ + const integer tsc_KDF_Spare3 := 4; /* @status APPROVED (IMS, IMS_IRAT, LTE, LTE_IRAT, POS, SSNITZ, UTRAN) */ + type integer KDF_Type ( tsc_KDF_HMAC_SHA_256 .. tsc_KDF_Spare3 ); /* @status APPROVED (IMS, IMS_IRAT, LTE, LTE_IRAT, POS, UTRAN) */ + + external function fx_KeyDerivationFunction(KDF_Type p_KDF, + bitstring p_Key, //@sic R5-155058 sic@ + octetstring p_String) return B256_Type; + /* External function to hashing function with algorithm as defined in 33.401; + SHA-256 encoding algorithm used as KEY Description Function + @status APPROVED (LTE) */ + + external function fx_CalculateFCS32 (bitstring p_TMSI) return B32_Type; /* Cyclic Redundancy Check calculation according to ITU-T Recommendation V.42 of CRC-32 Algorithm @sic R5-172046 sic@ */ + + //---------------------------------------------------------------------------- + /* system time acc. to default C library (see time.h) */ + + type record Struct_tm_Type { /* TTCN-3 equivalent for the "struct tm" as defined on C standard library (time.h or ctime.h for C or C++) */ + integer tm_sec, /* seconds after the minute 0..61 (tm_sec is generally 0-59. Extra range to accommodate for leap seconds in certain systems) */ + integer tm_min, /* minutes after the hour 0..59 */ + integer tm_hour, /* hours since midnight 0..23 */ + integer tm_mday, /* day of the month 1..31 */ + integer tm_mon, /* months since January 0..11 */ + integer tm_year, /* years since 1900 */ + integer tm_wday, /* days since Sunday 0..6 */ + integer tm_yday, /* days since January 1 0..365 */ + integer tm_isdst /* Daylight Saving Time flag */ + }; + + external function fx_GetSystemTime(out Struct_tm_Type p_Struct_tm, /* p_Struct_tm returns local system time; + * C implementation: + * time_t v_Now = time(NULL); + * struct tm *v_Tm = localtime(&v_Now); + */ + out integer p_TimezoneInfo); /* p_TimezoneInfo returns the difference (in seconds) between the UTC time (GMT) and the local time; + * C implementation: + * int timezone = (int)difftime(mktime(gmtime(&v_Now)), v_Now); + * NOTE: p_TimezoneInfo does not consider daylight saving e.g. it is always 3600 for CET independent of summer/winter + */ + + + + + + //---------------------------------------------------------------------------- + /* + * @desc returns integer formated as "%02d" + * @param p_Value + * @return charstring + * @status APPROVED (IMS) + */ + function fl_FormatIntegerAsTwoDigits(UInt_Type p_Value) return charstring + { + var UInt_Type v_Value := p_Value mod 100; + var charstring v_String := int2str(v_Value); + + if (v_Value < 10) { + v_String := "0" & v_String; + } + return v_String; + } + + /* + * @desc return HTTP Date/Time formatted according to RFC 2616 cl. 3.3.1 and RFC 822 cl. 5.1 (obsoleted by RFC 2822, obsoleted by RFC 5322) + * @param p_LocalTime + * @param p_TimezoneSeconds + * @return charstring + * @status APPROVED (IMS) + */ + function f_HTTP_FormatHttpDate(Struct_tm_Type p_LocalTime, + integer p_TimezoneSeconds) return charstring + { + const CharStringList_Type tsc_Month := { "Jan", "Feb","Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + const CharStringList_Type tsc_WDay := { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" }; + var charstring v_Year := int2str(p_LocalTime.tm_year + 1900); + var charstring v_Month := tsc_Month[p_LocalTime.tm_mon]; + var charstring v_WDay := tsc_WDay[p_LocalTime.tm_wday]; + var charstring v_MDay := fl_FormatIntegerAsTwoDigits(p_LocalTime.tm_mday); + var charstring v_Hour := fl_FormatIntegerAsTwoDigits(p_LocalTime.tm_hour); + var charstring v_Minute := fl_FormatIntegerAsTwoDigits(p_LocalTime.tm_min); + var charstring v_Second := fl_FormatIntegerAsTwoDigits(p_LocalTime.tm_sec); + var integer v_TimezoneSeconds := p_TimezoneSeconds; + var charstring v_TimezoneSign; + var charstring v_TimezoneHours; + var charstring v_TimezoneMinutes; + + if (p_LocalTime.tm_isdst > 0) { // see f_BCD_TimestampWithTimezone + v_TimezoneSeconds := v_TimezoneSeconds + 3600; + } + if (v_TimezoneSeconds < 0) { + v_TimezoneSeconds := -v_TimezoneSeconds; + v_TimezoneSign := "-"; + } else { + v_TimezoneSign := "+"; + } + v_TimezoneHours := fl_FormatIntegerAsTwoDigits(v_TimezoneSeconds / 3600); + v_TimezoneMinutes := fl_FormatIntegerAsTwoDigits((v_TimezoneSeconds mod 3600) / 60); + + return v_WDay & ", " & v_MDay & " " & v_Month & " " & v_Year & " " & v_Hour & ":" & v_Minute & ":" & v_Second & " " & v_TimezoneSign & v_TimezoneHours & v_TimezoneMinutes; + } + + //---------------------------------------------------------------------------- + /* + * @desc format date and time acc. to UTC + * @param p_LocalTime + * @param p_TimezoneSeconds (default value: omit) + * @return charstring + * @status APPROVED (IMS) + */ + function f_UTC_FormatDateTime(Struct_tm_Type p_LocalTime, + template (omit) integer p_TimezoneSeconds := omit) return charstring + { + var charstring v_Year := int2str(p_LocalTime.tm_year + 1900); + var charstring v_Month := fl_FormatIntegerAsTwoDigits(p_LocalTime.tm_mon + 1); // @sic R5s201156: p_LocalTime.tm_mon + 1 sic@ + var charstring v_MDay := fl_FormatIntegerAsTwoDigits(p_LocalTime.tm_mday); + var charstring v_Hour := fl_FormatIntegerAsTwoDigits(p_LocalTime.tm_hour); + var charstring v_Minute := fl_FormatIntegerAsTwoDigits(p_LocalTime.tm_min); + var charstring v_Second := fl_FormatIntegerAsTwoDigits(p_LocalTime.tm_sec); + var charstring v_Timezone := ""; + var charstring v_Sign; + var integer v_TimezoneSeconds; + var integer v_TimezoneMinutes; + + if (isvalue(p_TimezoneSeconds)) { // @sic R5s201156 sic@ + v_TimezoneSeconds := valueof(p_TimezoneSeconds); + if (v_TimezoneSeconds > 0) { + v_Sign := "-"; + } else { + v_Sign := "+"; + v_TimezoneSeconds := - v_TimezoneSeconds; + } + v_TimezoneMinutes := v_TimezoneSeconds / 60; + v_Timezone := v_Sign & fl_FormatIntegerAsTwoDigits(v_TimezoneMinutes / 60) & ":" & fl_FormatIntegerAsTwoDigits(v_TimezoneMinutes mod 60); + } + return v_Year & "-" & v_Month & "-" & v_MDay & "T" & v_Hour & ":" & v_Minute & ":" & v_Second & v_Timezone; + } + + /* + * @desc return timestamp (current system time) according to ISO 8601 + * @return charstring + */ + function f_UTC_Timestamp() return charstring + { + var Struct_tm_Type v_LocalTime; + var integer v_TimezoneSeconds; + + fx_GetSystemTime(v_LocalTime, v_TimezoneSeconds); + return f_UTC_FormatDateTime(v_LocalTime, v_TimezoneSeconds); + } + + /* + * @desc auxiliary function for f_BCD_TimestampWithTimezone + * @param p_Val + * @return H2_Type + */ + function f_SwappedNibbles(integer p_Val) return H2_Type + { + var integer v_LowNibble := p_Val mod 10; + var integer v_HighNibble := (p_Val / 10) mod 10; + + return int2hex(v_LowNibble, 1) & int2hex(v_HighNibble, 1); + } + + /* + * @desc returns the timestamp as e.g. used as ServiceCentreTimeStamp for SMS with current time + * (see e.g. calculation of the TP Service Centre Time Stamp acc. to TS 23.040 cl. 9.2.3.11) + * Example: + * 2002 April 18, 15:32:46, timezone=4 + * f_BCD_TimestampWithTimezone returns 20408151236440 + * @return H14_Type + */ + function f_BCD_TimestampWithTimezone() return H14_Type + { /* @sic R5-1307270: common function to provide timestamp for MDT test cases too sic@ */ + var Struct_tm_Type v_LocalTime; + var integer v_TimezoneSeconds; + var integer v_TimezoneVal; + var integer v_SignVal := 0; // positive value per default + var H2_Type v_Year; + var H2_Type v_Month; + var H2_Type v_Day; + var H2_Type v_Hour; + var H2_Type v_Minute; + var H2_Type v_Second; + var H2_Type v_Timezone; + + fx_GetSystemTime(v_LocalTime, v_TimezoneSeconds); + + v_Year := f_SwappedNibbles(v_LocalTime.tm_year + 1900); /* acc. to definition of struct tm */ + v_Month := f_SwappedNibbles(v_LocalTime.tm_mon + 1); /* acc. to definition of struct tm */ + v_Day := f_SwappedNibbles(v_LocalTime.tm_mday); + v_Hour := f_SwappedNibbles(v_LocalTime.tm_hour); + v_Minute := f_SwappedNibbles(v_LocalTime.tm_min mod 60); /* v_LocalTime.tm_min can be 0..61 on some systems */ + v_Second := f_SwappedNibbles(v_LocalTime.tm_sec); + + /* Calculation of the timezone (-> 23.040): */ + if (v_LocalTime.tm_isdst > 0) { /* The value contained in the Time Zone field must take into account daylight saving time, such that when the sending entity changes from regular + (winter) time to daylight saving (summer) time, there is a change to the value in the Time Zone field, + for example in the UK the winter setting is 00000000 and the summer setting is 01000000. */ + v_TimezoneSeconds := v_TimezoneSeconds + 3600; + } + + if (v_TimezoneSeconds < 0) { + v_TimezoneSeconds := -v_TimezoneSeconds; + v_SignVal := 128; /* In the first of the two semi octets, the first bit (bit 3 of the seventh octet of the TP Service Centre Time Stamp field) + represents the algebraic sign of this difference (0: positive, 1: negative) */ + } + v_TimezoneVal := v_TimezoneSeconds / (60 * 15); /* The Time Zone indicates the difference, expressed in quarters of an hour, between the local time and GMT. */ + v_TimezoneVal := v_TimezoneVal mod 128; /* ... just to be sure */ + v_TimezoneVal := v_TimezoneVal + v_SignVal; /* set the upper bit */ + + v_Timezone := f_SwappedNibbles(v_TimezoneVal); + + return v_Year & v_Month & v_Day & v_Hour & v_Minute & v_Second & v_Timezone; + } + + /* + * @desc wrapper function to strip the timezone (e.g. for 'AbsoluteTimeInfo' acc. to 36.331 cl. 6.3.6) + * @return H12_Type + * @status + */ + function f_BCD_TimestampWithoutTimezone() return H12_Type + { + var H14_Type v_TimestampWithTimezone := f_BCD_TimestampWithTimezone(); + return substr(v_TimestampWithTimezone, 0, 12); + } + + /* + * @desc wrapper function to convert f_BCD_TimestampWithoutTimezone() to bitstring as needed for MDT + * @return B48_Type + * @status + */ + + function f_MDT_GetAbsolute_TimeStamp() return B48_Type + { + return hex2bit(f_BCD_TimestampWithoutTimezone()); + } + + //---------------------------------------------------------------------------- + /* + * @desc similar to mktime but considering the "TimezoneInfo" as e.g. returned by fx_GetSystemTime + * @param p_TM + * @param p_TimezoneDelta + * @return integer + * @status APPROVED (MCX) + */ + function f_UTC_MKTime(Struct_tm_Type p_TM, + integer p_TimezoneDelta) return integer + { + var integer v_Seconds; + var integer v_MonthsSinceJanuary; + var integer v_CurrentMonth; + var integer v_Days := 0; + var boolean v_CurrentYearIsLeapYear := false; + + if (p_TM.tm_year > 0) { // 1900 has been no leap year in contrast to 2000, 2100 and beyond not considered + v_CurrentYearIsLeapYear := ((p_TM.tm_year mod 4) == 0); + v_Days := p_TM.tm_year * 365; + v_Days := v_Days + ((p_TM.tm_year - 1) / 4); // every 4th year is a leap year; current year is considered in the calculation for the month + } + + for (v_MonthsSinceJanuary := 0; v_MonthsSinceJanuary < p_TM.tm_mon; v_MonthsSinceJanuary := v_MonthsSinceJanuary + 1) { + v_CurrentMonth := v_MonthsSinceJanuary + 1; + select (v_CurrentMonth) { + case (2) { + v_Days := v_Days + 28; + if (v_CurrentYearIsLeapYear) { + v_Days := v_Days + 1; + } + } + case (4, 6, 9, 11) { + v_Days := v_Days + 30; + } + case else { + v_Days := v_Days + 31; + } + } + } + v_Days := v_Days + (p_TM.tm_mday - 1); // "-1" as tm_mday is 1..31 + v_Seconds := (((((v_Days * 24) + p_TM.tm_hour) * 60) + p_TM.tm_min) * 60) + p_TM.tm_sec + p_TimezoneDelta; + if (p_TM.tm_isdst > 0) { + v_Seconds := v_Seconds - 3600; + } + return v_Seconds; + } + + /* + * @desc Return the upper part of the NTP timestamp acc. to RFC 958 (i.e. the seconds since january 1st 1900 UTC) + * @return integer + * @status APPROVED (MCX) + */ + function f_UTC_TimestampSeconds() return integer + { + var Struct_tm_Type v_TM; + var integer v_TimezoneDelta; + + fx_GetSystemTime(v_TM, v_TimezoneDelta); + + return f_UTC_MKTime(v_TM, v_TimezoneDelta); + } + + /* + * @desc seconds since 00:00:00 UTC on 1 January 1970 UTC (GMT) + * @return integer + * @status APPROVED (MCX) + */ + function f_UnixEpoch_TimestampSeconds() return integer + { + return f_UTC_TimestampSeconds() - 2208988800; + } + + //---------------------------------------------------------------------------- + /* + * @desc To convert UTRAN cell ID acc to 34.123-3 clause 8.5 + * @param p_CellId - enumerated type + * @return integer + * @status + */ + function f_UtranCellId2Int(UTRAN_CellId_Type p_CellId) return integer + { // @sic R5s130195 Baseline moving to rel-11: UTRAN cellID enhanced sic@ + var integer v_CellId := enum2int(p_CellId); + + // @sic R5-133563: added utran34_CellA/B/C... for 34.123-1 NAS tc sic@ + if (v_CellId >= 2000) { + v_CellId := v_CellId - 2000; + } else if (v_CellId >= 1000) { + v_CellId := v_CellId - 1000; + } + return v_CellId; + } + + //---------------------------------------------------------------------------- + /* + * @desc check that the result string starts with specific sub-string + * @param p_SourceString + * @param p_StartString + * @return boolean + */ + function f_CheckStringStartWith(charstring p_SourceString, + charstring p_StartString) + return boolean + { + var integer v_Length := lengthof(p_StartString); + var charstring v_SubStr; + var boolean v_Result := false; + + if (v_Length <= lengthof(p_SourceString)) { + v_SubStr := substr(p_SourceString, 0, v_Length); + v_Result := (v_SubStr == p_StartString); + } + return v_Result; + } + + //---------------------------------------------------------------------------- + /* + * @desc Return TRUE if the band is an FDD band or false otherwise + * If the band indication is a placeholder for an ext. band (maxFBI=64) this means as well an FDD band + * as all ext. bands are FDD bands + * @param p_FrequencyBand + * @return boolean + */ + function f_EUTRA_FrequencyBandIsFDD(integer p_FrequencyBand) return boolean + { //@sic R5s160134 sic@ + return (p_FrequencyBand < 33 or p_FrequencyBand >= 64); //@sic R5-162796, R5-193997 sic@ + } + + //---------------------------------------------------------------------------- + /* + * @desc calculation of DRB_Identity associated to EpsBearerId + * @param p_EpsBearerId + * @return integer + * @status APPROVED (IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, POS) + */ + function f_EUTRA_NB_EpsBearerAssociatedDRB(HalfOctet_Type p_EpsBearerId) return integer + { /* @sic R5s141351 change 5: returns integer instead of DRB_Identity sic@ */ + return (hex2int(p_EpsBearerId) - 4); + } + + //---------------------------------------------------------------------------- + /* + * @desc return value for given name from Name-Value list or omit if there is no entry for the given name + * @param p_NameValueList + * @param p_Name + * @return charstring + */ + function f_NameValueList_Get(NameValueList_Type p_NameValueList, + charstring p_Name) return template (omit) charstring + { + var integer i; + + for (i := 0; i < lengthof(p_NameValueList); i := i + 1) { + if (p_NameValueList[i].Name == p_Name) { + return p_NameValueList[i].Value; + } + } + return omit; + } +} with { + encode "RAW" +} diff --git a/ttcn/Lib3GPP/Common/module.mk b/ttcn/Lib3GPP/Common/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..52891f8dd9dd3a4bbd8c4fec2bd430705a812694 --- /dev/null +++ b/ttcn/Lib3GPP/Common/module.mk @@ -0,0 +1,6 @@ +sources := \ + CommonDefs.ttcn + + +modules :=\ + diff --git a/ttcn/Lib3GPP/Common4G5G/Common4G5G.ttcn b/ttcn/Lib3GPP/Common4G5G/Common4G5G.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..e41aafff27fbe45b037f667a39a8cc4666252c67 --- /dev/null +++ b/ttcn/Lib3GPP/Common4G5G/Common4G5G.ttcn @@ -0,0 +1,394 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-08-28 14:15:56 +0200 (Mon, 28 Aug 2023) $ +// $Rev: 36572 $ +/******************************************************************************/ + +module Common4G5G { + + import from CommonDefs all; + + type enumerated NR_Configuration_Type { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + NR_SA, // Option 2 + EN_DC, // Option 3 + NE_DC, // Option 4 + NGE_SA, // Option 5 + NGEN_DC // Option 7 + }; + + type enumerated NR_TESTMODE_STATE_Type {TESTMode_OFF, TESTModeA_ON, TEST_LOOPModeA_ON, PING_Or_TESTModeB_ON, TESTModeB_ON, TEST_LOOPModeB_ON, PING_Or_TEST_LOOPModeB_ON, TESTModeE_ON, TEST_LOOPModeE_ON}; /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + + // Options for Connectivity (E-UTRA/EPC) and parameter Unrestricted nr PDN is set to Off + type ENDC_DRB_Configuration_Type ENDC_Bearer_Type (MCG_SCG, MCG_Split, MCG_Only); /* @status APPROVED (ENDC) */ + + type enumerated NEDC_DRB_Configuration_Type { MCG_SCG, //MCG configured with SRB1/SRB2/Default MCG DRB(s) + SCG DRB configured SN terminated (secured with Secondary keys) + MCG_Split, //MCG configured with SRB1/SRB2/Default MCG DRB(s) + split SCG DRB configured SN terminated (secured with Secondary keys) + MCG_SCG_MNTerminated, //MCG configured with SRB1/SRB2/Default MCG DRB(s) + SCG DRB configured MN terminated (secured with Master keys) + MCG_Split_MNTerminated, //MCG configured with SRB1/SRB2/Default MCG DRB(s) + split SCG DRB configured MN terminated (secured with Master keys) + MCG_SCG_OnNR, //MCG configured with SRB1/SRB2/Default MCG DRB(s) + SCG DRB configured on NR but secured with secondary keys + MCG_SplitOnNR //MCG configured with SRB1/SRB2/Default MCG DRB(s) + split SCG DRB configured on NR, secured with Secondary keys + }; + + + type enumerated NR_TestEnvironment_Type { Conducted, OTA }; /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + + type enumerated ENDC_DRB_Configuration_Type { /* @status APPROVED (ENDC) */ + MCG_Only, // Connectivity (E-UTRA/EPC) when Unrestricted nr PDN is set to Off and SCG is not (yet) configured @sic R5-213443 sic@ + MCG_SCG, + MCG_Split, + RBConfig_Only, // when only RadioBearer is modified in Reconfig msg + SCG_RBConfig, // when both CellGroupConfig and RadioBearer is modified in Reconfig msg (but not for default condition MCG_SCG) + Meas_SCGOnly // when only MeasConfig or CellGroupConfig is modified in Reconfig msg + }; + + type enumerated ENDC_SRB_DRB_Configuration_Type { /* @status APPROVED (ENDC) */ + NONE, + NR_PDCP_MCG, + NR_PDCP_SRB1_2, + NR_PDCP_MCG_SRB1_2, // Used in L2 ciphering test case + NR_PDCP_SRB1_2_SRB3, // Used in L2 integrity test case + SRB3 + }; + + type enumerated ENDC_BandCombination_Type { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + //@sic R5-194369 R5-194370 R5-197106 R5-198959 R5-200921 R5-201061 R5-203634 R5-204800 R5-205771 R5-206715 R5-2182699 R5-218268 R5-220311, R5-220374, R5-221186 R5-223126 R5-225310 R5-227700 R5-230093 sic@ + //@sic R5-230897 R5-231793 sic@ + // Acc to38.508-1 Table 4.3.1.4.1.2-1: Inter-band EN-DC configurations within FR1 (two bands) + DC_1A_n3A, + DC_1A_n5A, + DC_1A_n7A, + DC_1A_n28A, + DC_1A_n41A, + DC_1A_n77A, + DC_1A_n78A, + DC_1A_n79A, + DC_2A_n5A, + DC_2A_n41A, + DC_2A_n48A, + DC_2A_n66A, + DC_2A_n71A, + DC_2A_n77A, + DC_2A_n78A, + DC_3A_n1A, + DC_3A_n5A, + DC_3A_n7A, + DC_3A_n28A, + DC_3A_n41A, + DC_3A_n77A, + DC_3A_n78A, + DC_3A_n79A, + DC_5A_n2A, + DC_5A_n66A, + DC_5A_n77A, + DC_5A_n78A, + DC_7A_n1A, + DC_7A_n3A, + DC_7A_n5A, + DC_7A_n28A, + DC_7A_n66A, + DC_7A_n78A, + DC_8A_n1A, + DC_8A_n3A, + DC_8A_n20A, + DC_8A_n41A, + DC_8A_n77A, + DC_8A_n78A, + DC_11A_n77A, + DC_11A_n78A, + DC_11A_n79A, + DC_12A_n2A, + DC_12A_n5A, + DC_12A_n66A, + DC_12A_n78A, + DC_13A_n2A, + DC_13A_n66A, + DC_13A_n77A, + DC_14A_n2A, + DC_14A_n66A, + DC_18A_n77A, + DC_18A_n78A, + DC_18A_n79A, + DC_19A_n1A, + DC_19A_n77A, + DC_19A_n78A, + DC_19A_n79A, + DC_20A_n1A, + DC_20A_n3A, + DC_20A_n7A, + DC_20A_n8A, + DC_20A_n28A, + DC_20A_n78A, + DC_21A_n1A, + DC_21A_n28A, + DC_21A_n77A, + DC_21A_n78A, + DC_21A_n79A, + DC_25A_n41A, + DC_26A_n41A, + DC_26A_n77A, + DC_26A_n78A, + DC_26A_n79A, + DC_28A_n3A, + DC_28A_n5A, + DC_28A_n7A, + DC_28A_n77A, + DC_28A_n78A, + DC_28A_n79A, + DC_30A_n5A, + DC_30A_n66A, + DC_38A_n78A, + DC_39A_n41A, + DC_39A_n79A, + DC_40A_n1A, + DC_40A_n41A, + DC_40A_n78A, + DC_40A_n79A, + DC_41A_n28A, + DC_41A_n77A, + DC_41A_n78A, + DC_41A_n79A, + DC_42A_n1A, + DC_42A_n77A, + DC_42A_n78A, + DC_42A_n79A, + DC_48A_n5A, + DC_48A_n66A, + DC_66A_n2A, + DC_66A_n41A, + DC_66A_n5A, + DC_66A_n71A, + DC_66A_n77A, + DC_66A_n78A, + DC_71A_n2A, + DC_71A_n66A, + //ACc to 38.508-1 Table 4.3.1.5.1.2-1: Inter-band EN-DC configurations including FR2 (two bands) + DC_1A_n257A, + DC_2A_n257A, + DC_2A_n260A, + DC_3A_n257A, + DC_5A_n257A, + DC_5A_n260A, + DC_5A_n261A, + DC_7A_n257A, + DC_8A_n257A, + DC_8A_n258A, + DC_11A_n257A, + DC_12A_n260A, + DC_13A_n257A, + DC_13A_n260A, + DC_14A_n260A, + DC_18A_n257A, + DC_19A_n257A, + DC_20A_n257A, + DC_21A_n257A, + DC_28A_n257A, + DC_30A_n260A, + DC_41A_n257A, + DC_42A_n257A, + DC_48A_n260A, + DC_66A_n257A, + DC_66A_n260A, + DC_66A_n261A, + //Acc to 38.508-1 Table 6.2.3.2.2-1: Test frequencies for EN-DC Intra-band Contiguous configurations with E-UTRA 1CC and NR 1CC + DC_n41AA, + DC_n71AA, + //Acc to 38.508-1 Table 6.2.3.2.2-2: Test frequencies for EN-DC Intra-Band Non-Contiguous configurations with E-UTRA 1CC and NR 1CC + DC_41A_n41A + }; + + type enumerated ENDC_CombinationType_Type {InterBand, IntraBandContiguous, IntraBandNonContiguous}; /* @status APPROVED (ENDC, NR5GC_IRAT) */ + + type enumerated ENDC_CA_BandCombination_Type { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + //@sic R5-201020 R5s200626 R5-211034 R5-215969 R5-218269 R5-220974 R5-223649 R5-234689 sic@ + //Acc to 38.508-1 Table 4.3.1.4.1.3-1: Inter-band EN-DC configurations within FR1 (three bands) + DC_1A_n28A_n78A, + DC_1A_n78A_n79A, + DC_1A_n78A_n257A, + DC_1A_n79A_n257A, + DC_3A_n28A_n78A, + DC_3A_n78A_n79A, + DC_7A_n5A_n78A, + DC_3A_n78A_n257A, + DC_3A_n79A_n257A, + DC_7A_n28A_n78A, + DC_19A_n78A_n79A, + //Acc to 38.508-1 Table 4.3.1.6.1.2-1: Inter-band EN-DC including FR1 and FR2 (three bands) + DC_19A_n78A_n257A, + DC_19A_n79A_n257A, + DC_20A_n28A_n78A, + DC_21A_n78A_n79A, + DC_28A_n7A_n78A, + //Acc to 38.508-1 Table 4.3.1.4.1.2-1: Inter-band EN-DC configurations within FR1 (two bands) + DC_1A_n78C, + DC_3A_n78C, + DC_5A_n78C, + DC_8A_n77_2A, + DC_19A_n78_2A, + DC_19A_n78C, + DC_21A_n78_2A, + DC_21A_n78C, + DC_28A_n78C, + DC_42A_n78C, + //Acc to 38.508-1 Table 4.3.1.5.1.2-1: Inter-band EN-DC configurations including FR2 (two bands) + DC_1A_n257G, + DC_2A_n260G, + DC_3A_n257G, + DC_5A_n260G, + DC_5A_n261G, + DC_5A_n261_2A, + DC_8A_n257G, + DC_12A_n260G, + DC_14A_n260G, + DC_19A_n257G, + DC_21A_n257G, + DC_30A_n260G, + DC_66A_n260G, + DC_66A_n261G, + DC_66A_n261_2A + } + + + type enumerated NR_CA_BandCombination_Type { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + //@sic R5-200597 R5-200921 R5-203056 R5-206306 R5-214019 R5-212986 R5-214853 R5-214727 R5-214929 R5-215970 R5-2159771 R5-217259 R5-217587 R5-217588 R5-218267 R5-220206 R5-220271 R5-220860 R5-220861 R5-220862 R5-221176 R5-221389 R5-221871 R5-222175 R5-222572 R5-223025 R5-223067 R5-223197 R5-223650 R5-223072 R5-226366 R5-226400 R5-227700 R5-227275 R5-231227 R5-231634 R5-232654 R5-232790 R5-233944 R5-234295 R5-234447 R5-235414 sic@ + //Acc to 38.508-1 Table 4.3.1.1.2.1-1: Inter-band NR CA configurations (FR1, two bands) + CA_n1A_n3A, + CA_n1A_n8A, + CA_n1A_n77A, + CA_n1A_n78A, + CA_n1A_n79A, + CA_n2A_n5A, + CA_n2A_n14A, + CA_n2A_n48A, + CA_n2A_n66A, + CA_n2A_n77A, + CA_n3A_n5A, + CA_n3A_n8A, + CA_n3A_n41A, + CA_n3A_n77A, + CA_n3A_n78A, + CA_n5A_n7A, + CA_n5A_n48A, + CA_n5A_n66A, + CA_n5A_n77A, + CA_n5A_n78A, + CA_n7A_n78A, + CA_n8A_n78A, + CA_n14A_n30A, + CA_n14A_n66A, + CA_n14A_n77A, + CA_n20A_n78A, + CA_n24A_n41A, + CA_n24A_n48A, + CA_n24A_n77A, + CA_n26A_n66A, + CA_n26A_n70A, + CA_n28A_n41A, + CA_n28A_n77A, + CA_n28A_n78A, + CA_n28A_n79A, + CA_n29A_n66A, + CA_n29A_n70A, + CA_n29A_n71A, + CA_n39A_n41A, + CA_n41A_n66A, + CA_n41A_n71A, + CA_n41A_n79A, + CA_n48A_n66A, + CA_n48A_n70A, + CA_n48A_n71A, + CA_n48A_n77A, + CA_n66A_n70A, + CA_n66A_n71A, + CA_n66A_n77A, + CA_n70A_n71A, + CA_n71A_n77A, + CA_n77A_n79A, + CA_n78A_n79A, + //Acc to 38.508-1 Table 4.3.1.6.1.2-1: Inter-band EN-DC including FR1 and FR2 (three bands) + CA_n78A_n257A, + CA_n79A_n257A, + //Acc to 38.508-1 Table 4.3.1.3.2.1-1: NR-CA configurations between FR1 and FR2 (two bands) + CA_n1A_n258A, + //Acc to 38.508-1 Table 4.3.1.2.2-1: NR inter-band CA configurations in FR2 + CA_n260A_n261A, + //Acc to 38.508-1 Table 6.2.3.4-1: Test frequencies for NR CA Intra-band Contiguous configurations with FR1 + CA_n41C, + CA_n48B, + CA_n66B, + CA_n77C, + CA_n78C, + //Acc to 38.508-1 Table 6.2.3.4-2: Test frequencies for NR CA Intra-band Contiguous configurations with FR2 + CA_n257G, + CA_n258G, + CA_n260G, + CA_n261G, + //Acc to 38.508-1 Table 6.2.3.4-3: Test frequencies for NR CA Intra-Band Non-Contiguous configurations with FR1 + CA_n48_2A, + CA_n66_2A, + CA_n71_2A, + CA_n77_2A, + CA_n78_2A, + //Acc to 38.508-1 Table 6.2.3.4-4: Test frequencies for NR CA Intra-Band Non-Contiguous configurations with FR2 + CA_n261_2A + }; + + type enumerated NR_CA_3CC_BandCombination_Type { + // Acc to 38.508-1 Table 6.2.3.4-2a: Test frequencies for NR CA Intra-band Contiguous configurations with FR2 (3CC) + //@sic R5-225367 sic@ + CA_n257H, + CA_n258H, + CA_n260H, + CA_n261H + }; + + type enumerated NR_DC_BandCombination_Type { + /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + //@sic R5-215971 R5-223650 R5-223755 sic@ + //Acc to 38.508-1 Table 4.3.1.1.2.1-1: Inter-band NR CA configurations (FR1, two bands) + DC_n1A_n258A, + DC_n77A_n261A, + DC_n78A_n257A, + DC_n78A_n258A, + DC_n79A_n257A, + //Acc to 38.508-1 cl 4.3.1.1.7.1 NR inter-band NR-DC configurations in FR1 (two bands) + DC_n48A_n70A + }; + + type enumerated NR_DC_CA_BandCombination_Type { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + //Acc to 38.508-1 clause 4.3.1.3.2.1 + DC_n1A_n258G, + DC_n77A_n261G, + DC_n78A_n257G, + DC_n78A_n258G, + DC_n79A_n257G + }; + + type enumerated NEDC_CombinationType_Type { InterBand }; + + type record EUTRA_NR_PduSessionInfo_Type /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + { + integer PDU_SessionId, + integer EPS_Bearer, // @sic R5s201094 sic@ + integer QFI optional, // @sic R5s220883 sic@ + PDN_Index_Type PdnIndex, + boolean IsIMS + }; + + type enumerated NEDC_BandCombination_Type { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + /* @sic R5-221872 sic@ */ + DC_n28A_3A, + DC_n28A_39A + }; + + type record of EUTRA_NR_PduSessionInfo_Type EUTRA_NR_PduSessionInfoList_Type; /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + + type enumerated NR_V2X_ConcurrentOperationBandCombination_Type { + //Acc to 38.508-1 Table 4.3.1.8.2.1-1: Test frequencies for Inter-band concurrent NR sidelink operating bands + V2X_n71_n47 + }; +} diff --git a/ttcn/Lib3GPP/Common4G5G/Common4G5G_LoopBack.ttcn b/ttcn/Lib3GPP/Common4G5G/Common4G5G_LoopBack.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..534e975c93a77d33c2f47a1c9a66c82451be2fb7 --- /dev/null +++ b/ttcn/Lib3GPP/Common4G5G/Common4G5G_LoopBack.ttcn @@ -0,0 +1,174 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-12-07 16:03:11 +0100 (Wed, 07 Dec 2022) $ +// $Rev: 35058 $ +/******************************************************************************/ +module Common4G5G_LoopBack { + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + import from EPS_NAS_LoopBack_TypeDefs all; + import from NAS_CommonTemplates all; + + //---------------------------------------------------------------------------- + // Constant definitions Elements (36.509) + //---------------------------------------------------------------------------- + + // Message Type definitions from 36.509 clause 6.X + const MessageType tsc_MsgType_CloseUE_TestLoop := oct2bit ('80'O); /* @status APPROVED (ENDC, IMS, LTE, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MsgType_CloseUE_TestLoopCmpl := oct2bit ('81'O); /* @status APPROVED (ENDC, IMS, LTE, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MsgType_OpenUE_TestLoop := oct2bit ('82'O); /* @status APPROVED (ENDC, LTE, NBIOT, NR5GC) */ + const MessageType tsc_MsgType_OpenUE_TestLoopCmpl := oct2bit ('83'O); /* @status APPROVED (ENDC, LTE, NBIOT, NR5GC) */ + const MessageType tsc_MsgType_Activate_TestMode := oct2bit ('84'O); /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MsgType_Activate_TestModeCmpl := oct2bit ('85'O); /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MsgType_Deactivate_TestMode := oct2bit ('86'O); /* @status APPROVED (ENDC, LTE, LTE_A_PRO, NBIOT, NR5GC) */ + const MessageType tsc_MsgType_Deactivate_TestModeCmpl := oct2bit ('87'O); /* @status APPROVED (ENDC, LTE, LTE_A_PRO, NBIOT, NR5GC) */ + const MessageType tsc_MsgType_SetULMsgReq := '10101100'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MsgType_SetULMsgResp := '10101101'B; /* @status APPROVED (NR5GC) */ + + + const UE_TestLoopMode_Type tsc_UE_TestLoopMode_TypeA := '00'O; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const UE_TestLoopMode_Type tsc_UE_TestLoopMode_TypeB := '01'O; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const UE_TestLoopMode_Type tsc_UE_TestLoopMode_TypeE := '04'O; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC, NR5GC_IRAT, POS) */ + const SkipIndicator tsc_Gen_SkipIndicator := '0000'B; /* Skip Indicator field consists of latter half byte + after Protocol discriminator field. + Its value is '0000'B in all the messages. + @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const ProtocolDiscriminator tsc_LB_ProtocolDiscriminator := '1111'B; /* Protocol descriminator for test procedures + 24.007 Table 11.2 + @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const B1_Type tsc_LoopModeE_Transmission := '1'B; + const B1_Type tsc_LoopModeE_Reception := '0'B; + const B1_Type tsc_LoopModeE_V2x := '1'B; + + // ============================================================================= + // Close UE Test Loop + // 3G TS 36.509 cl. 6.1 + // Direction: SS to UE + // ----------------------------------------------------------------------------- + + type record NR_CLOSE_UE_TEST_LOOP { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType, /* M V 1 */ + UE_TestLoopMode_Type ueTestLoopMode, /* M V 1 */ + UE_TestLoopModeA_NR_LB_Setup_Type ueTestLoopModeA_LB_Setup optional, /* C LV 1-25 + present if ueTestLoopMode ='00'F */ + UE_TestLoopModeB_LB_Setup_Type ueTestLoopModeB_LB_Setup optional, /* C V 1 + present if ueTestLoopMode ='01'F/ + represents IP PDU delay time 0..255 seconds */ + UE_TestLoopModeE_LB_Setup_Type ueTestLoopModeE_LB_Setup optional /* C LV 1-25 + present if ueTestLoopMode ='04'F */ + }; + + // ============================================================================= + // Structured Type Definition + // *** Comments: + // UE Test Loop Mode A LB Setup 38.509 cl. 6.3.1 + // *** additional Notes: + // The maximum number of LB entities in the LB setup list is less than or equal to 5. + // ----------------------------------------------------------------------------- + type record UE_TestLoopModeA_NR_LB_Setup_Type { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + O1_Type iel, + NR_LB_SetupDRB_IE_List_Type lbSetupDrbList optional + }; + + // ============================================================================= + // LB Setup DRB IE + // UE Test Loop Mode A LB Setup 38.509 cl. 6.3.1 + // ----------------------------------------------------------------------------- + type record NR_LB_SetupDRB_IE_Type { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + B16_Type uplinkPdcpSduSize, + B2_Type reserved, + B1_Type nrDRB, + B5_Type drbIdentity + }; + + type record length (1..tsc_MAX_ModeA_LB_Entities)of NR_LB_SetupDRB_IE_Type NR_LB_SetupDRB_IE_List_Type; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + + // ============================================================================= + // Structured Type Definition + // Set UL Message + // *** Comments: + // 36.509 cl. 6.19 + // ----------------------------------------------------------------------------- + type record SET_UL_MESSAGE_REQUEST { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType, /* M V 1 */ + B7_Type spare, + B1_Type usePreconfiguredULMsg + }; + + type record SET_UL_MESSAGE_RESPONSE { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + }; + + //---------------------------------------------------------------------------- + // Templates for Loop Back PDU's + //---------------------------------------------------------------------------- + + template (value) NR_LB_SetupDRB_IE_Type cs_NR_LB_SetupDRB_IE(integer p_PDCP_SDU_Size, + integer p_DRB_Id, + B1_Type p_NRDRB := '1'B) := + { /* @status APPROVED (ENDC, NR5GC) */ + uplinkPdcpSduSize := int2bit (p_PDCP_SDU_Size,16), /* Uplink PDCP SDU size */ + reserved := '00'B, + nrDRB := p_NRDRB, + drbIdentity := int2bit (p_DRB_Id-1, 5) /* Note: acc. to ASN.1 DRB_Identity is 1..32 but the DRB-Identity of LB setup DRB IE has just 5 bits + => assumption: binary coded DRB identity means ASN.1 coded (i.e. "p_DRB_Id-1") */ + }; + + template (value) UE_TestLoopModeA_NR_LB_Setup_Type cs_UE_TestLoopModeA_NR_LB_Setup_1DRB(integer p_PDCP_SDU_Size, + integer p_DRB_Id, + B1_Type p_NRDRB := '1'B) := + { /* @status APPROVED (ENDC, NR5GC) */ + iel := '03'O, // 3 octets, i.e. one element in LB_SetupDRB_IE_List + lbSetupDrbList := { + cs_NR_LB_SetupDRB_IE(p_PDCP_SDU_Size, p_DRB_Id, p_NRDRB) + } + }; + + template (value) UE_TestLoopModeA_NR_LB_Setup_Type cs_UE_TestLoopModeA_NR_LB_Setup_NoScaling := + { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + iel := '00'O, // 0 octets, i.e. no element in LB_SetupDRB_IE_List + lbSetupDrbList := omit + }; + + template (value) UE_TestLoopModeE_LB_Setup_Type cs_UE_TestLoopModeE_LB_Setup(B1_Type p_CommTransmitOrReceive := tsc_LoopModeE_Reception, + integer p_CommMonitorListLength, + template (omit) CommMonitorList_Type p_CommMonitorList := omit, + B1_Type p_D2dOrV2x := '0'B // @sic R5-175219 sic@ D2D by default + ) := + { /* @status */ + commMonitorListLength := int2bit(p_CommMonitorListLength,8), // Length of UE test loop mode E Monitor setup contents in bytes + reserved := '000000'B, + commTransmitOrReceive := p_CommTransmitOrReceive, // Communication Transmit or Receive + commMonitorList := p_CommMonitorList, + d2dOrV2x := p_D2dOrV2x // @sic R5-175219 sic@ + }; + + template (value) SET_UL_MESSAGE_REQUEST cs_SET_UL_MESSAGE_REQUEST (B1_Type p_UsePreconfigured) := + {/* @status APPROVED (NR5GC) */ + skipIndicator := tsc_Gen_SkipIndicator, /* M V 1/2 */ + protocolDiscriminator := tsc_LB_ProtocolDiscriminator, /* M V 1/2 */ + messageType := tsc_MsgType_SetULMsgReq, /* M V 1 */ + spare := tsc_Spare7, + usePreconfiguredULMsg := p_UsePreconfigured + }; + + template (present) SET_UL_MESSAGE_RESPONSE cr_SET_UL_MESSAGE_RESPONSE := + { /* @status APPROVED (NR5GC) */ + skipIndicator := tsc_Gen_SkipIndicator, /* M V 1/2 */ + protocolDiscriminator := tsc_LB_ProtocolDiscriminator, /* M V 1/2 */ + messageType := tsc_MsgType_SetULMsgResp /* M V 1 */ + }; + + +} with { encode "NAS Types"} // @sic R5s190445 sic@ diff --git a/ttcn/Lib3GPP/Common4G5G/EUTRA_NR_SecurityFunctions.ttcn b/ttcn/Lib3GPP/Common4G5G/EUTRA_NR_SecurityFunctions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..fb87157d35ba5fcc076eb89939701bfb8c459d54 --- /dev/null +++ b/ttcn/Lib3GPP/Common4G5G/EUTRA_NR_SecurityFunctions.ttcn @@ -0,0 +1,325 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-09-13 17:51:49 +0200 (Wed, 13 Sep 2023) $ +// $Rev: 37110 $ +/******************************************************************************/ +module EUTRA_NR_SecurityFunctions { + import from CommonDefs all; + + //============================================================================ + // constants and types + type integer SK_Counter_Type; /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + + const SK_Counter_Type tsc_SK_Counter:= 0; /* @status APPROVED (ENDC, NR5GC_IRAT) */ + const integer tsc_NAS_Enc_Alg := 1; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const integer tsc_NAS_Int_Alg := 2; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const integer tsc_RRC_Enc_Alg := 3; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const integer tsc_RRC_Int_Alg := 4; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const integer tsc_UP_Enc_Alg := 5; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const integer tsc_N_UP_Int_Alg := 6; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + + type integer NR_AlgTypeDistg_Type(tsc_NAS_Enc_Alg, + tsc_NAS_Int_Alg, + tsc_RRC_Enc_Alg, + tsc_RRC_Int_Alg, + tsc_UP_Enc_Alg, + tsc_N_UP_Int_Alg); /* As per Table A.8-1 of 33.501; @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + + type integer AlgTypeDistg_Type(tsc_NAS_Enc_Alg, + tsc_NAS_Int_Alg, + tsc_RRC_Enc_Alg, + tsc_RRC_Int_Alg, + tsc_UP_Enc_Alg); /* As per Table A.8-1 of 33.401; @status */ + + //============================================================================ + // TEMPLATES + //---------------------------------------------------------------------------- + + //============================================================================ + + group Auth_S_Function { // Group of S functions defined in Annex A of 33.401 + + //-------------------------------------------------------------------------- + /* + * @desc KASME to CKSRVCC, IKSRVCC derivation (S1A) + * As per annex A.12 of 33.401 + * @param p_KDF + * @param p_KASME + * @param p_DL_NAS_Count + * @return B256_Type + * @status APPROVED (IMS_IRAT, LTE_A_IRAT, LTE_IRAT) + */ + function f_EUTRA_Authentication_S1A(KDF_Type p_KDF, + B256_Type p_KASME, + O4_Type p_DL_NAS_Count) return B256_Type + { + const octetstring const_S1A_FC :='1A'O; + var octetstring v_S; + + // Generation of String + v_S := const_S1A_FC; + //FC = 0x1A + v_S := ( v_S & p_DL_NAS_Count ); + //P0 = NAS downlink COUNT value + v_S := ( v_S & '0004'O ); + //L0 = length of NAS downlink COUNT value (i.e. 0x00 0x04) + + return fx_KeyDerivationFunction ( p_KDF, p_KASME, v_S ); // @sic R5s160711 sic@ + // The result is 256 bit CKSRVCC ll IKSRVCC each of 128 bits + }; + + //-------------------------------------------------------------------------- + /* + * @desc S-KeNB derivation function used at SeNB + * As per annex A.15 of 33.401 + * @param p_KDF + * @param p_KENB + * @param p_SCG_Counter + * @return B256_Type + * @status APPROVED (ENDC, NR5GC_IRAT) + */ + function f_EUTRA_Authentication_S1C(KDF_Type p_KDF, + B256_Type p_KENB, + SK_Counter_Type p_SCG_Counter) return B256_Type + { + const octetstring const_S1C_FC :='1C'O; + var octetstring v_S; + // Generation of String + v_S := const_S1C_FC; + //FC = 0x1C + v_S := ( v_S & int2oct (p_SCG_Counter,2)); + //P0 = Value of the SCG Counter as a non-negative integer + v_S := ( v_S & '0002'O ); + //L0 = length of the SCG Counter value (i.e. 0x00 0x02) + return fx_KeyDerivationFunction ( p_KDF, p_KENB , v_S ); + } + + //-------------------------------------------------------------------------- + /* + * @desc Algorithm key derivation functions (S15) + * As per annex A.7 of 33.401 + * @param p_AlgTypeDistg + * @param p_Alg + * @param p_Key + * @param p_KDF_Type + * @return B128_Type + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) + */ + function f_EUTRA_NB_Authentication_S15(NR_AlgTypeDistg_Type p_AlgTypeDistg, // @sic R5-235451 sic@ + B3_Type p_Alg, + B256_Type p_Key, + KDF_Type p_KDF_Type) return B128_Type + { + const octetstring const_S15_FC :='15'O; + var octetstring v_S; + // Generation of String + v_S := const_S15_FC; + //FC = 0x15 + v_S := ( v_S & int2oct ( p_AlgTypeDistg, 1 ) ); + //P0 = algorithm type distinguisher + v_S := ( v_S & '0001'O ); + //L0 = length of algorithm type distinguisher (i.e. 0x00 0x01)) + v_S := ( v_S & bit2oct ( p_Alg ) ); + //P1 = algorithm identity + v_S := ( v_S & '0001'O ); + //L1 = length of algorithm identity (i.e. 0x00 0x01) + + return substr(fx_KeyDerivationFunction(p_KDF_Type, p_Key, v_S), 128, 128); + // returns LSB 128 bits[truncated] of the key generated + }; + + //-------------------------------------------------------------------------- + /* + * @desc Algorithm key derivation functions (S69) + * As per annex A.8 of 33.501/ A.19 of 33.401 + * @param p_AlgTypeDistg + * @param p_Alg + * @param p_Key + * @param p_KDF_Type + * @return B128_Type + * @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_Authentication_A8(NR_AlgTypeDistg_Type p_AlgTypeDistg, + B4_Type p_Alg, + B256_Type p_Key, + KDF_Type p_KDF_Type) return B128_Type + { + const octetstring const_S69_FC :='69'O; + var octetstring v_S; + // Generation of String + v_S := const_S69_FC; + //FC = 0x69 + v_S := ( v_S & int2oct ( p_AlgTypeDistg, 1 ) ); + //P0 = algorithm type distinguisher + v_S := ( v_S & '0001'O ); + //L0 = length of algorithm type distinguisher (i.e. 0x00 0x01)) + v_S := ( v_S & bit2oct ( p_Alg ) ); + //P1 = algorithm identity + v_S := ( v_S & '0001'O ); + //L1 = length of algorithm identity (i.e. 0x00 0x01) + + return substr(fx_KeyDerivationFunction(p_KDF_Type, p_Key, v_S), 128, 128); + // returns LSB 128 bits[truncated] of the key generated + } + + //-------------------------------------------------------------------------- + /* + * @desc KAMF to KAMF' horizontal derivation function + * As per annex A.13 of 33.501 + * @param p_Handover + * @param p_Count + * @param p_KAMF + * @param p_KDF_Type + * @return B256_Type + * @status APPROVED (NR5GC) + */ + function f_NG_Authentication_A13(boolean p_Handover, + O4_Type p_Count, + B256_Type p_KAMF, + KDF_Type p_KDF_Type) return B256_Type + { + const octetstring const_S72_FC :='72'O; + var octetstring v_S; + var octetstring v_P0; + + // Generation of String + v_S := const_S72_FC; + //FC = 0x72 + if (p_Handover) { + v_P0 := '01'O; + } else { // mobility registration + v_P0 := '00'O; + } + v_S := (v_S & v_P0); + //P0 = Direction + v_S := (v_S & '0001'O) ; + //L0 = length of direction + v_S := (v_S & p_Count); + //P1 = Count + v_S := (v_S & '0004'O) ; + //L1 = length of count + + return fx_KeyDerivationFunction(p_KDF_Type, p_KAMF, v_S); + }; + + //-------------------------------------------------------------------------- + /* + * @desc KAMF to KASME' derivation function + * As per annex A.14 of 33.501 + * @param p_Handover + * @param p_Count + * @param p_KAMF + * @param p_KDF_Type + * @return B256_Type + * @status APPROVED (NR5GC_IRAT) + */ + function f_NG_Authentication_A14(boolean p_Handover, + O4_Type p_Count, + B256_Type p_KAMF, + KDF_Type p_KDF_Type) return B256_Type + { + const octetstring const_S73_FC :='73'O; + const octetstring const_S74_FC :='74'O; + var octetstring v_S; + + if (p_Handover) { + // Generation of String + v_S := const_S74_FC; + //FC = 0x73 + } else { // mobility registration + // Generation of String + v_S := const_S73_FC; + //FC = 0x74 + } + v_S := (v_S & p_Count); + //P0 = Count + v_S := (v_S & '0004'O) ; + //L0 = length of count + + return fx_KeyDerivationFunction(p_KDF_Type, p_KAMF, v_S); + }; + + //-------------------------------------------------------------------------- + /* + * @desc KASME to KAMF' derivation function + * As per annex A.15 of 33.501 + * @param p_Count + * @param p_KASME + * @param p_KDF_Type + * @return B256_Type + * @status APPROVED (NR5GC_IRAT) + */ + function f_NG_Authentication_A15_IdleMode(O4_Type p_Count, + B256_Type p_KASME, + KDF_Type p_KDF_Type) return B256_Type + { + const octetstring const_S75_FC :='75'O; + var octetstring v_S; + + // Generation of String + v_S := const_S75_FC; + //FC = 0x75 + v_S := (v_S & p_Count); + //P0 = UL Count + v_S := (v_S & '0004'O) ; + //L0 = length of count + + return fx_KeyDerivationFunction(p_KDF_Type, p_KASME, v_S); + }; + + /* + * @desc KASME to KAMF' derivation function + * As per annex A.15 of 33.501 + * @param p_NH + * @param p_KASME + * @param p_KDF_Type + * @return B256_Type + * @status APPROVED (NR5GC_IRAT) + */ + function f_NG_Authentication_A15_HO(B256_Type p_NH, + B256_Type p_KASME, + KDF_Type p_KDF_Type) return B256_Type + { + const octetstring const_S76_FC :='76'O; + var octetstring v_S; + + // Generation of String + v_S := const_S76_FC; + //FC = 0x76 + v_S := (v_S & bit2oct(p_NH)); + //P0 = NH + v_S := (v_S & '0020'O) ; + //L0 = length of NH + + return fx_KeyDerivationFunction(p_KDF_Type, p_KASME, v_S); + }; + + } /* End of group Auth_S_Function */ + + //============================================================================ + /* + * @desc Function to be used for AS KEy derivation for SgNB data encryption. + * @param p_KDF + * @param p_KENB + * @param p_SK_Counter + * @return B256_Type + * @status APPROVED (ENDC, NR5GC_IRAT) + */ + function f_EUTRA_NR_InitAS_KeyChaining_SgNB(KDF_Type p_KDF, + B256_Type p_KENB, + SK_Counter_Type p_SK_Counter) return B256_Type + { + // Derive S-KgNB from KeNB + return f_EUTRA_Authentication_S1C (p_KDF, + p_KENB, + p_SK_Counter); + // Ciphering algorithm for UP is same as RRC + } + + +} diff --git a/ttcn/Lib3GPP/Common4G5G/module.mk b/ttcn/Lib3GPP/Common4G5G/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..88bc4b442392face9cacdfbe2f6c29d5f3366b2d --- /dev/null +++ b/ttcn/Lib3GPP/Common4G5G/module.mk @@ -0,0 +1,8 @@ +sources := \ + Common4G5G.ttcn\ + Common4G5G_LoopBack.ttcn \ + EUTRA_NR_SecurityFunctions.ttcn + + +modules :=\ + diff --git a/ttcn/Lib3GPP/CommonIP/CommonIP.ttcn b/ttcn/Lib3GPP/CommonIP/CommonIP.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6bc0af15c21f7e40b7da3ef15c111b96424685eb --- /dev/null +++ b/ttcn/Lib3GPP/CommonIP/CommonIP.ttcn @@ -0,0 +1,691 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-09-21 20:24:35 +0200 (Wed, 21 Sep 2022) $ +// $Rev: 34317 $ +/******************************************************************************/ + +module CommonIP { + + import from CommonDefs all; + import from Parameters all; + + const integer tsc_IMS_MediaPort_M1 := 60350; /* RTP port Speech @sic R5s130495 Change 19 sic@ + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const integer tsc_IMS_MediaPort_M2 := 60352; /* RTP port Video @sic R5s130495 Change 19 sic@ + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const integer tsc_IMS_MediaPort_M3 := 60354; /* RTP port Text @sic R5s130495 Change 19 sic@ + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT) */ + + + const UInt16_Type tsc_PortNumberHTTP := 80; /* @status APPROVED (IMS) */ + const UInt16_Type tsc_PortNumberHTTPS := 443; + + const UInt8_Type tsc_IP_Protocol_ICMP := 1; /* @status APPROVED (ENDC, LTE, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + const UInt8_Type tsc_IP_Protocol_UDP := 17; /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC, UTRAN) */ + const UInt8_Type tsc_ICMP_Type_EchoReply := 0; /* @status APPROVED (ENDC, LTE, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + const UInt8_Type tsc_ICMPv6_Type_EchoReply := 129; /* @status APPROVED (ENDC, LTE, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + const UInt8_Type tsc_ICMP_Type_EchoRequest := 8; /* @status APPROVED (ENDC, LTE, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + const UInt8_Type tsc_ICMPv6_Type_EchoRequest := 128; /* @status APPROVED (ENDC, LTE, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + const UInt8_Type tsc_IP_Protocol_TCP := 6; /* @status APPROVED (LTE, NBIOT, NR5GC, UTRAN) */ + const UInt8_Type tsc_IP_Protocol_IPSec := 50; /* @status APPROVED (LTE, NBIOT, NR5GC, UTRAN) */ + const UInt8_Type tsc_IP_Protocol_ICMPv6 := 58; /* @status APPROVED (ENDC, LTE, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + const integer tsc_IMS_PortNumber_5060 := 5060; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + + const O2_Type tsc_MulticastPrefix_FF02 := 'FF02'O; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + + const octetstring tsc_IP_AnyData := '00112233445566778899AABBCCDDEEFF'O; //* @status APPROVED (ENDC, LTE, LTE_A_PRO, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, UTRAN) */ + + type record PDN_AddressInfo_Type { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + charstring UE_IPAddressIPv4, + charstring UE_IPAddressIPv6, + charstring Remote_IPAddressIPv4, /* @sic R5s130681 additional change sic@ */ + charstring Remote_IPAddressIPv6, /* @sic R5s130681 additional change sic@ */ + charstring DHCP_ServerAddress, + charstring ICMPv6_ServerAddress, + charstring PCSCF_IPAddressIPv4, + charstring PCSCF_IPAddressIPv6, + charstring DNS_ServerAddressIPv4, + charstring DNS_ServerAddressIPv6, + charstring XCAP_ServerAddressIPv4, /* @sic R5s141051 change 8 sic@ */ + charstring XCAP_ServerAddressIPv6, /* @sic R5s141051 change 8 sic@ */ + charstring ProSe_ServerAddressIPv4, /* @sic R5-160765 sic@ */ + charstring ProSe_ServerAddressIPv6 /* @sic R5-160765 sic@ */ + }; + + const PDN_AddressInfo_Type tsc_PDN1_AddressInfo := { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + UE_IPAddressIPv4 := px_IPv4_Address1_UE, + UE_IPAddressIPv6 := px_IPv6_Address1_UE, + Remote_IPAddressIPv4 := px_IPv4_Address1_RemoteUE, + Remote_IPAddressIPv6 := px_IPv6_Address1_RemoteUE, + DHCP_ServerAddress := px_IPv4_Address1_NW, + ICMPv6_ServerAddress := px_IPv6_Address1_NW, + PCSCF_IPAddressIPv4 := px_IPv4_Address1_NW, + PCSCF_IPAddressIPv6 := px_IPv6_Address1_NW, + DNS_ServerAddressIPv4 := px_IPv4_Address1_NW, + DNS_ServerAddressIPv6 := px_IPv6_Address1_NW, + XCAP_ServerAddressIPv4 := px_IPv4_Address1_NW, /* @sic R5s141051 change 8 sic@ */ + XCAP_ServerAddressIPv6 := px_IPv6_Address1_NW, /* @sic R5s141051 change 8 sic@ */ + ProSe_ServerAddressIPv4 := px_IPv4_Address1_NW, /* @sic R5-160765 sic@ */ + ProSe_ServerAddressIPv6 := px_IPv6_Address1_NW /* @sic R5-160765 sic@ */ + }; + const PDN_AddressInfo_Type tsc_PDN2_AddressInfo := { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + UE_IPAddressIPv4 := px_IPv4_Address2_UE, + UE_IPAddressIPv6 := px_IPv6_Address2_UE, + Remote_IPAddressIPv4 := px_IPv4_Address2_RemoteUE, + Remote_IPAddressIPv6 := px_IPv6_Address2_RemoteUE, + DHCP_ServerAddress := px_IPv4_Address2_NW, + ICMPv6_ServerAddress := px_IPv6_Address2_NW, + PCSCF_IPAddressIPv4 := px_IPv4_Address2_NW, + PCSCF_IPAddressIPv6 := px_IPv6_Address2_NW, + DNS_ServerAddressIPv4 := px_IPv4_Address2_NW, + DNS_ServerAddressIPv6 := px_IPv6_Address2_NW, + XCAP_ServerAddressIPv4 := px_IPv4_Address2_NW, /* @sic R5s141051 change 8 sic@ */ + XCAP_ServerAddressIPv6 := px_IPv6_Address2_NW, /* @sic R5s141051 change 8 sic@ */ + ProSe_ServerAddressIPv4 := px_IPv4_Address2_NW, /* @sic R5-160765 sic@ */ + ProSe_ServerAddressIPv6 := px_IPv6_Address2_NW /* @sic R5-160765 sic@ */ + }; + + // @sic R5s191074 sic@ + const PDN_AddressInfo_Type tsc_PDN3_AddressInfo := { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) To Do: make this equal to new PIXITs for address 3 */ + UE_IPAddressIPv4 := px_IPv4_Address3_UE, + UE_IPAddressIPv6 := px_IPv6_Address3_UE, + Remote_IPAddressIPv4 := px_IPv4_Address3_RemoteUE, + Remote_IPAddressIPv6 := px_IPv6_Address3_RemoteUE, + DHCP_ServerAddress := px_IPv4_Address3_NW, + ICMPv6_ServerAddress := px_IPv6_Address3_NW, + PCSCF_IPAddressIPv4 := px_IPv4_Address3_NW, + PCSCF_IPAddressIPv6 := px_IPv6_Address3_NW, + DNS_ServerAddressIPv4 := px_IPv4_Address3_NW, + DNS_ServerAddressIPv6 := px_IPv6_Address3_NW, + XCAP_ServerAddressIPv4 := px_IPv4_Address3_NW, + XCAP_ServerAddressIPv6 := px_IPv6_Address3_NW, + ProSe_ServerAddressIPv4 := px_IPv4_Address3_NW, + ProSe_ServerAddressIPv6 := px_IPv6_Address3_NW + }; + + // @sic R5-221467 sic@ + const PDN_AddressInfo_Type tsc_PDN4_AddressInfo := { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + UE_IPAddressIPv4 := px_IPv4_Address4_UE, + UE_IPAddressIPv6 := px_IPv6_Address4_UE, + Remote_IPAddressIPv4 := px_IPv4_Address3_RemoteUE, // no new PIXIT defined for this as not expecting to be used + Remote_IPAddressIPv6 := px_IPv6_Address3_RemoteUE, // no new PIXIT defined for this as not expecting to be used + DHCP_ServerAddress := px_IPv4_Address4_NW, + ICMPv6_ServerAddress := px_IPv6_Address4_NW, + PCSCF_IPAddressIPv4 := px_IPv4_Address4_NW, + PCSCF_IPAddressIPv6 := px_IPv6_Address4_NW, + DNS_ServerAddressIPv4 := px_IPv4_Address4_NW, + DNS_ServerAddressIPv6 := px_IPv6_Address4_NW, + XCAP_ServerAddressIPv4 := px_IPv4_Address4_NW, + XCAP_ServerAddressIPv6 := px_IPv6_Address4_NW, + ProSe_ServerAddressIPv4 := px_IPv4_Address4_NW, + ProSe_ServerAddressIPv6 := px_IPv6_Address4_NW + }; + + // @sic R5-221467 sic@ + const PDN_AddressInfo_Type tsc_PDN5_AddressInfo := { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + UE_IPAddressIPv4 := px_IPv4_Address5_UE, + UE_IPAddressIPv6 := px_IPv6_Address5_UE, + Remote_IPAddressIPv4 := px_IPv4_Address3_RemoteUE, // no new PIXIT defined for this as not expecting to be used + Remote_IPAddressIPv6 := px_IPv6_Address3_RemoteUE, // no new PIXIT defined for this as not expecting to be used + DHCP_ServerAddress := px_IPv4_Address5_NW, + ICMPv6_ServerAddress := px_IPv6_Address5_NW, + PCSCF_IPAddressIPv4 := px_IPv4_Address5_NW, + PCSCF_IPAddressIPv6 := px_IPv6_Address5_NW, + DNS_ServerAddressIPv4 := px_IPv4_Address5_NW, + DNS_ServerAddressIPv6 := px_IPv6_Address5_NW, + XCAP_ServerAddressIPv4 := px_IPv4_Address5_NW, + XCAP_ServerAddressIPv6 := px_IPv6_Address5_NW, + ProSe_ServerAddressIPv4 := px_IPv4_Address5_NW, + ProSe_ServerAddressIPv6 := px_IPv6_Address5_NW + }; + + // @sic R5-221467 sic@ + const PDN_AddressInfo_Type tsc_PDN6_AddressInfo := { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + UE_IPAddressIPv4 := px_IPv4_Address6_UE, + UE_IPAddressIPv6 := px_IPv6_Address6_UE, + Remote_IPAddressIPv4 := px_IPv4_Address3_RemoteUE, // no new PIXIT defined for this as not expecting to be used + Remote_IPAddressIPv6 := px_IPv6_Address3_RemoteUE, // no new PIXIT defined for this as not expecting to be used + DHCP_ServerAddress := px_IPv4_Address6_NW, + ICMPv6_ServerAddress := px_IPv6_Address6_NW, + PCSCF_IPAddressIPv4 := px_IPv4_Address6_NW, + PCSCF_IPAddressIPv6 := px_IPv6_Address6_NW, + DNS_ServerAddressIPv4 := px_IPv4_Address6_NW, + DNS_ServerAddressIPv6 := px_IPv6_Address6_NW, + XCAP_ServerAddressIPv4 := px_IPv4_Address6_NW, + XCAP_ServerAddressIPv6 := px_IPv6_Address6_NW, + ProSe_ServerAddressIPv4 := px_IPv4_Address6_NW, + ProSe_ServerAddressIPv6 := px_IPv6_Address6_NW + }; + + // @sic R5s191074, R5-221467 sic@ + const PDN_AddressInfo_Type tsc_PDN_AddressInfo[6] := { tsc_PDN1_AddressInfo, tsc_PDN2_AddressInfo, tsc_PDN3_AddressInfo, tsc_PDN4_AddressInfo, tsc_PDN5_AddressInfo, tsc_PDN6_AddressInfo}; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + + type record WLAN_AddressInfo_Type { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + charstring UE_IPAddressIPv4, + charstring UE_IPAddressIPv6, + charstring DNS_ServerAddressIPv4, + charstring DNS_ServerAddressIPv6, + charstring EPDG_ServerAddressIPv4, + charstring EPDG_ServerAddressIPv6, + charstring EmergencyEPDG_ServerAddressIPv4, + charstring EmergencyEPDG_ServerAddressIPv6, + charstring Non3GPP_XCAP_ServerAddressIPv4, + charstring Non3GPP_XCAP_ServerAddressIPv6 + }; + + /* + * @desc return index of the IP address or IMS server corresponding to the given PdnIndex + * @param p_PdnIndex + * @return integer + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) + */ + function f_PDN_PdnIndex2Integer(PDN_Index_Type p_PdnIndex) return integer + { /* PDN_2a to support change of the IP address for IMS test case 19.5.1 */ + /* @sic R5s150031: fl_IP_ServerIndex -> f_PDN_PdnIndex2Integer sic@ */ + var integer v_Index; + select (p_PdnIndex) { + case (PDN_1, ePDG_IMS1) { + v_Index := 0; + } + case (PDN_2, PDN_2a, PDN_Internet, nrPDN_Internet, ePDG_IMS2, ePDG_XCAP, ePDG_Internet) { // @sic R5s191074 sic@ + v_Index := 1; + } + case (PDN_3) { // @sic R5s191074 sic@ + v_Index := 2; + } + case (PDN_4) { // @sic R5-221467 sic@ + v_Index := 3; + } + case (PDN_5) { // @sic R5-221467 sic@ + v_Index := 4; + } + case (PDN_6) { // @sic R5-221467 sic@ + v_Index := 5; + } + case else { + FatalError(__FILE__, __LINE__, "Invalid PDN index"); + } + } + return v_Index; + } + + /* + * @desc return index of the IMS server or IMS PTC + * @param p_PdnIndex + * @return integer + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NR5GC, NR5GC_IRAT, POS, UTRAN) + */ + function f_PDN_PdnIndex2ImsIndex(PDN_Index_Type p_PdnIndex) return integer + { + var integer v_Index := f_PDN_PdnIndex2Integer(p_PdnIndex); + + if (v_Index >= tsc_NoOfIMSPDNs) { + FatalError(__FILE__, __LINE__, "Invalid PDN index"); + } + return v_Index; + } + + /* + * @desc return PDN_AddressInfo corresponding to the given PdnIndex + * @param p_PdnIndex + * @return PDN_AddressInfo_Type + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) + */ + function f_PDN_AddressInfo_Get(PDN_Index_Type p_PdnIndex) return PDN_AddressInfo_Type + { /* PDN_2a to support change of the IP address for IMS test case 19.5.1 */ + var PDN_AddressInfo_Type v_PDN_AddressInfo; + var integer v_Index := f_PDN_PdnIndex2Integer(p_PdnIndex); + + v_PDN_AddressInfo := tsc_PDN_AddressInfo[v_Index]; + if (p_PdnIndex == PDN_2a) { + v_PDN_AddressInfo.UE_IPAddressIPv4 := px_IPv4_Address2a_UE; /* @sic implementation of IMS TC_19_5_1 sic@ */ + v_PDN_AddressInfo.UE_IPAddressIPv6 := px_IPv6_Address2a_UE; /* @sic implementation of IMS TC_19_5_1 sic@ */ + } + return v_PDN_AddressInfo; + } + + //---------------------------------------------------------------------------- + /* + * @desc Check whether given string is IPv4 address + * @param p_IpAddress + * @return boolean + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) + */ + function f_IpAddressIsIPv4(charstring p_IpAddress) return boolean + { + var template charstring v_Pattern := pattern "[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+"; + return match(p_IpAddress, v_Pattern); + }; + + //---------------------------------------------------------------------------- + /* + * @desc Check whether given string is IPv6 address + * @param p_IpAddress + * @return boolean + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NR5GC, NR5GC_IRAT, POS) + */ + function f_IpAddressIsIPv6(charstring p_IpAddress) return boolean + { + var Char1List_Type v_SplitCharList := {":"}; + var CharStringList_Type v_FieldList := f_StringSplit(p_IpAddress, v_SplitCharList); + var integer v_FieldCnt := lengthof(v_FieldList); + var charstring v_Field; + var charstring v_Pattern; + var integer v_FieldLength; + var integer i; + + if ((v_FieldCnt == 1) or (v_FieldCnt > 8)) { return false; } + + for (i:=0; i 4) { return false; } + if (not match(v_Field, pattern v_Pattern)) { return false; } + } + return true; + } + + //---------------------------------------------------------------------------- + /* + * @desc Return IP address to be used as host name: for IPv6 the IP address gets surrounded with "[" and "]" + * @param p_IpAddress + * @return charstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NR5GC, NR5GC_IRAT, POS) + */ + function f_IpAddressAsHostname(charstring p_IpAddress) return charstring + { + var charstring v_Hostname; + + if (f_IpAddressIsIPv6(p_IpAddress)) { + v_Hostname := "[" & p_IpAddress & "]"; + } else { + v_Hostname := p_IpAddress; + } + return v_Hostname; + } + + //---------------------------------------------------------------------------- + /* + * @desc convert IP address in dot notation into octetstring; + * e.g. "10.11.12.13" results in '0A0B0C0D'O + * @param p_IPv4AddrChar + * @return O4_Type + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) + */ + function f_Convert_IPv4Addr2OctString(charstring p_IPv4AddrChar) return O4_Type + { + var Char1List_Type v_SplitCharList := {"."}; + var CharStringList_Type v_FieldList := f_StringSplit(p_IPv4AddrChar, v_SplitCharList); + var octetstring v_IPv4AddrOct := ''O; + var integer v_FieldCnt := lengthof(v_FieldList); + var integer v_IntVal; + var integer i; + + if (v_FieldCnt != 4) { + FatalError(__FILE__, __LINE__, "invalid IP Address"); + } + for (i:=0; i subsequent empty fields will just be replaced by '0000' */ + var charstring v_Field; + var integer v_NoOfEmptyBlocks; + var integer i; + var integer k; + + if (v_FieldCnt > 8) { + FatalError(__FILE__, __LINE__, "invalid IP Address"); + } + for (i:=0; i tsc_UInt16Max) { + v_Sum := (v_Sum mod (tsc_UInt16Max+1)) + (v_Sum / (tsc_UInt16Max+1)); + } + // get complement + v_Sum := tsc_UInt16Max - v_Sum; + return int2oct(v_Sum, 2); + } + + //---------------------------------------------------------------------------- + /* + * @desc Check whether an address is a IPv6 multicast address + * @param p_IPv6Addr + * @return boolean .. true if the address is a multicast address + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) + */ + function f_IPv6AddrIsMulticast(charstring p_IPv6Addr) return boolean + { + var O2_Type v_Prefix; + v_Prefix := str2oct(substr(p_IPv6Addr, 0, 4)); + if (v_Prefix == tsc_MulticastPrefix_FF02) { // RFC 2375 + return true; + } + return false; + } + + //---------------------------------------------------------------------------- + /* + * @desc convert (global) IPv6 adddress into link-local address + * @param p_IPv6Addr .. global IPv6 address + * @return charstring .. link-local address + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) + */ + function f_IPv6AddrGetLinkLocalAddr(charstring p_IPv6Addr) return charstring + { + var O16_Type v_IPv6AddrOctets := f_Convert_IPv6Addr2OctString(p_IPv6Addr); + var O8_Type v_InterfaceId := substr(v_IPv6AddrOctets, 8, 8); // interface id assuming a /64 prefix + + return f_Convert_OctString2IPv6Addr('FE80000000000000'O & v_InterfaceId); + } + + //---------------------------------------------------------------------------- + /* + * @desc Return ICMP PDU including correct checksum + * @param p_SrcAddress + * @param p_DstAddress + * @param p_IcmpPDU + * @return octetstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) + */ + function f_ICMPv6_UpdateCRCChecksum(charstring p_SrcAddress, + charstring p_DstAddress, + octetstring p_IcmpPDU) return octetstring + { + var octetstring v_PseudoHeader; + var octetstring v_IcmpPDU := p_IcmpPDU; + var O2_Type v_Checksum; + // Build pseudo headers for ICMPv6, see RFC 4443 clause 2.3 + // Pseudo headers are specified in RFC 2460 clause 8.1 + v_PseudoHeader := + f_Convert_IPv6Addr2OctString(p_SrcAddress) & + f_Convert_IPv6Addr2OctString(p_DstAddress) & + int2oct (lengthof(p_IcmpPDU), 4) & '0000003A'O; + + //According to RFC 4443, section 2.3, + //For computing the checksum, the checksum field is first set to zero. + p_IcmpPDU[2] := '00'O; /* @sic R5s190281 sic@ */ + p_IcmpPDU[3] := '00'O; /* @sic R5s190281 sic@ */ + + // Now compute checksum + v_Checksum := f_IpChecksum (v_PseudoHeader & p_IcmpPDU); + + // See RFC 4443 clause 2.1 + v_IcmpPDU[2] := v_Checksum[0]; + v_IcmpPDU[3] := v_Checksum[1]; + return v_IcmpPDU; + } + + //---------------------------------------------------------------------------- + /* + * @desc create an IPv6 packet (currently with typical settings for an UDP packet) + * For IPv6 packet format, see RFC 2460 + * @param p_TrafficClass (default value: '00'O) + * @param p_FlowLabel (default value: 0) + * @param p_Protocol + * @param p_HopCount (default value: 64) + * @param p_SourceAddr + * @param p_DestAddr + * @param p_IPPayload + * @return octetstring + * @status APPROVED (ENDC, LTE, LTE_A_PRO, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, UTRAN) + */ + function f_IPv6Packet_Create(O1_Type p_TrafficClass := '00'O, + UInt20_Type p_FlowLabel := 0, + UInt8_Type p_Protocol, + UInt8_Type p_HopCount := 64, + charstring p_SourceAddr, + charstring p_DestAddr, + octetstring p_IPPayload) + return octetstring + { /* @sic R5s170286: p_HopCount sic@ */ + var hexstring v_Version := '6'H; + var hexstring v_TrafficClass := oct2hex (p_TrafficClass); + var hexstring v_FlowLabel := int2hex (p_FlowLabel, 5); + var O16_Type v_SourceAddrStr := f_Convert_IPv6Addr2OctString(p_SourceAddr); + var O16_Type v_DestAddrStr := f_Convert_IPv6Addr2OctString(p_DestAddr); + var octetstring v_OctetString; + + // IP header + v_OctetString := hex2oct(v_Version & v_TrafficClass & v_FlowLabel); // Version, Traffic Class and Flow Label to be revised + v_OctetString := v_OctetString & int2oct (lengthof(p_IPPayload), 2); // Payload Length + v_OctetString := v_OctetString & int2oct(p_Protocol, 1); // Next header + v_OctetString := v_OctetString & int2oct(p_HopCount, 1); // Hop Limit @sic R5s170286 sic@ + v_OctetString := v_OctetString & v_SourceAddrStr; + v_OctetString := v_OctetString & v_DestAddrStr; + v_OctetString := v_OctetString & p_IPPayload; + return v_OctetString; + } + + //---------------------------------------------------------------------------- + /* + * @desc return MNC and MCC derived from IMSI acc. to 23.003 + * @param p_IMSI + * @param p_LengthOfMNC (default value: 2) + * @return charstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NR5GC, NR5GC_IRAT, POS) + */ + function f_DomainName_MNC_MCC_DerivedFromIMSI(hexstring p_IMSI, + integer p_LengthOfMNC := 2) return charstring + { + var charstring v_IMSI := hex2str(p_IMSI); + var charstring v_MCC := substr(v_IMSI, 0, 3); + var charstring v_MNC := substr(v_IMSI, 3, p_LengthOfMNC); // @sic R5s140356: index = 3 sic@ + + if (p_LengthOfMNC == 2) { + v_MNC := "0" & v_MNC; + } + + return "mnc" & v_MNC & "." & "mcc" & v_MCC; + } + + //---------------------------------------------------------------------------- + /* + * @desc build up a domain name derived from IMSI acc. to 23.003 clause 13.2 + * @param p_FirstLabel + * @param p_IMSI + * @param p_LengthOfMNC (default value: 2) + * @return charstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NR5GC, NR5GC_IRAT, POS) + */ + function f_DomainName_3gppnetwork_DerivedFromIMSI(charstring p_FirstLabel, + hexstring p_IMSI, + integer p_LengthOfMNC := 2) return charstring + { /* NOTE: the length of the MNC in general cannot be derived from the IMSI (some countries have MNCs with 2 and 3 digits; see e.g "Annex to ITU Operational Bulletin No. 992 - 15.XI.2011") + * instead the length of the MNC is stored in the EF-AD file on the SIM card (see 31.102 cl. 4.2.18) and acc. to 31.121 the MNC has 2 digits. */ + /* @sic R5-155363: usage of f_DomainName_MNC_MCC_DerivedFromIMSI sic@ */ + var charstring v_MncMcc := f_DomainName_MNC_MCC_DerivedFromIMSI(p_IMSI, p_LengthOfMNC); + var CharStringList_Type v_LableList := { p_FirstLabel, v_MncMcc, "3gppnetwork.org" }; + + return f_StringJoin(v_LableList, "."); + } + + /* + * @desc build up home network domain name derived from IMSI acc. to 23.003 clause 13.2 + * @param p_IMSI + * @param p_LengthOfMNC (default value: 2) + * @return charstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NR5GC, NR5GC_IRAT, POS) + */ + function f_DomainName_IMS_DerivedFromIMSI(hexstring p_IMSI, + integer p_LengthOfMNC := 2) return charstring + { + return f_DomainName_3gppnetwork_DerivedFromIMSI("ims", p_IMSI, p_LengthOfMNC); + } + + /* + * @desc build up Private User Identity derived from IMSI acc. to 23.003 clause 13.3 + * @param p_IMSI + * @param p_LengthOfMNC (default value: 2) + * @return charstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NR5GC, NR5GC_IRAT, POS) + */ + function f_IMS_PrivateUserIdentityDerivedFromIMSI(hexstring p_IMSI, + integer p_LengthOfMNC := 2) return charstring + { + var charstring v_IMSI := hex2str(p_IMSI); + return v_IMSI & "@" & f_DomainName_IMS_DerivedFromIMSI(p_IMSI, p_LengthOfMNC); + } + + /* + * @desc build up Public User Identity derived from IMSI acc. to 23.003 clause 13.4B + * @param p_IMSI + * @param p_LengthOfMNC (default value: 2) + * @return charstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NR5GC, NR5GC_IRAT, POS) + */ + function f_IMS_TemporaryPublicUserIdentity(hexstring p_IMSI, + integer p_LengthOfMNC := 2) return charstring + { + return "sip:" & f_IMS_PrivateUserIdentityDerivedFromIMSI(p_IMSI, p_LengthOfMNC); + } +} diff --git a/ttcn/Lib3GPP/CommonIP/LoopbackIP.ttcn b/ttcn/Lib3GPP/CommonIP/LoopbackIP.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..968c3d3e85cbb9af6f9f48f4395aa9fc14ec58ad --- /dev/null +++ b/ttcn/Lib3GPP/CommonIP/LoopbackIP.ttcn @@ -0,0 +1,622 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-04-12 17:34:38 +0200 (Wed, 12 Apr 2023) $ +// $Rev: 35833 $ +/******************************************************************************/ + +module LoopbackIP { + + import from CommonDefs all; + import from CommonIP all; + import from Parameters all; + import from EUTRA_NR_Parameters all; + + type enumerated DataPathCheck_BearerType_Type {dedicatedBearer, defaultBearer}; /* @status APPROVED (ENDC, NR5GC, NR5GC_IRAT) */ + + //---------------------------------------------------------------------------- + /* + * @desc auxiliary function + * @param p_UseIPv4 + * @param p_IPv4Addr + * @param p_IPv6Addr + * @return charstring + * @status APPROVED (ENDC, LTE, LTE_A_PRO, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) + */ + function fl_LoopbackModeB_IPv4IPv6Address(boolean p_UseIPv4, + charstring p_IPv4Addr, + charstring p_IPv6Addr) return charstring + { + if (p_UseIPv4) { return p_IPv4Addr; } + else { return p_IPv6Addr; } + } + + /* + * @desc returns IP address to be used for IP packets in loopback mode B depending on IPv4/v6 for the given PDN + * @param p_UseIPv4 (default value: not pc_IPv6) + * @param p_PdnIndex (default value: PDN_1) + * @return charstring + * @status APPROVED (ENDC, LTE, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) + */ + function f_LoopbackModeB_IP_Address_UE(boolean p_UseIPv4 := not pc_IPv6, + PDN_Index_Type p_PdnIndex := PDN_1) return charstring + { /* @sic R5s130362 - MCC160 Implementation: tsc_PDN_AddressInfo sic@ */ + /* @sic R5s190281 change 1: not pc_IPv6 instead of pc_IPv4 sic@ */ + var PDN_AddressInfo_Type v_PDN_AddressInfo := f_PDN_AddressInfo_Get(p_PdnIndex); + return fl_LoopbackModeB_IPv4IPv6Address(p_UseIPv4, v_PDN_AddressInfo.UE_IPAddressIPv4, v_PDN_AddressInfo.UE_IPAddressIPv6); + } + + /* + * @desc returns IP address to be used for IP packets in loopback mode B depending on IPv4/v6 for the given PDN + * @param p_UseIPv4 (default value: not pc_IPv6) + * @param p_PdnIndex (default value: PDN_1) + * @return charstring + * @status APPROVED (ENDC, LTE, LTE_A_PRO, NBIOT, NR5GC, NR5GC_IRAT) + */ + function f_LoopbackModeB_IP_Address_NW(boolean p_UseIPv4 := not pc_IPv6, + PDN_Index_Type p_PdnIndex := PDN_1) return charstring + { /* @sic R5s130362 - MCC160 Implementation: tsc_PDN_AddressInfo sic@ */ + /* @sic R5s190411: not pc_IPv6 instead of pc_IPv4 sic@ */ + var PDN_AddressInfo_Type v_PDN_AddressInfo := f_PDN_AddressInfo_Get(p_PdnIndex); + return fl_LoopbackModeB_IPv4IPv6Address(p_UseIPv4, v_PDN_AddressInfo.PCSCF_IPAddressIPv4, v_PDN_AddressInfo.PCSCF_IPAddressIPv6); + } + + //---------------------------------------------------------------------------- + /* + * @desc create an IPv4 packet ( currently with typical settings for UDP or ICMP packet) + * @param p_Identification (default value: '6d7d'O) + * @param p_TOS (default value: '00'O) + * @param p_Protocol + * @param p_SourceAddr + * @param p_DestAddr + * @param p_IPPayload + * @return octetstring + * @status APPROVED (ENDC, LTE, LTE_A_PRO, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, UTRAN) + */ + function f_IPv4Packet_Create(O2_Type p_Identification := '6d7d'O, // Identification; random value (can be used to generate different packets + O1_Type p_TOS := '00'O, // Differentiated services (RFC 2474), Explicit Congestion Notification (ECN, RFC 3168), former TOS (RFC 791) + UInt8_Type p_Protocol, + charstring p_SourceAddr, + charstring p_DestAddr, + octetstring p_IPPayload) + return octetstring + { + var integer v_TotalLength := lengthof(p_IPPayload) + 20; // 20 bytes IP header + var O4_Type v_SourceAddrStr := f_Convert_IPv4Addr2OctString(p_SourceAddr); + var O4_Type v_DestAddrStr := f_Convert_IPv4Addr2OctString(p_DestAddr); + var octetstring v_OctetString; + + // IP header + v_OctetString := '45'O; // version and header length + v_OctetString := v_OctetString & p_TOS; + v_OctetString := v_OctetString & int2oct(v_TotalLength, 2); + v_OctetString := v_OctetString & p_Identification; + v_OctetString := v_OctetString & '0000'O; // flags (3 bits; typically 0 for UDP) and fragment offset (13 bits; typically 0 for UDP) + v_OctetString := v_OctetString & '80'O; // Time to live (random value) + v_OctetString := v_OctetString & int2oct(p_Protocol, 1); + v_OctetString := v_OctetString & f_IpChecksum(v_OctetString & '0000'O & v_SourceAddrStr & v_DestAddrStr); + v_OctetString := v_OctetString & v_SourceAddrStr; + v_OctetString := v_OctetString & v_DestAddrStr; + v_OctetString := v_OctetString & p_IPPayload; + + return v_OctetString; + } + + //---------------------------------------------------------------------------- + /* + * @desc build an IPv4 UDP datagram + * @param p_SourceAddr + * @param p_DestAddr + * @param p_SourcePort + * @param p_DestPort + * @param p_UdpPayload + * @return octetstring + * @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC, UTRAN) + */ + function f_IPv4UdpDatagram_Create(charstring p_SourceAddr, + charstring p_DestAddr, + UInt16_Type p_SourcePort, + UInt16_Type p_DestPort, + octetstring p_UdpPayload) + return octetstring + { /* @desc create UDP datagram */ + var integer v_UdpDatagramLength := lengthof(p_UdpPayload) + 8; // 8 bytes UDP header + // Pseudo Header: + var O4_Type v_SourceAddrStr := f_Convert_IPv4Addr2OctString(p_SourceAddr); + var O4_Type v_DestAddrStr := f_Convert_IPv4Addr2OctString(p_DestAddr); + var O2_Type v_LengthStr := int2oct(v_UdpDatagramLength, 2); + var O1_Type v_Protocol := '11'O; // UDP + var octetstring v_PseudoHeader := v_SourceAddrStr & v_DestAddrStr &'00'O & v_Protocol & v_LengthStr; + var O2_Type v_ChecksumDummy := '0000'O; + var octetstring v_OctetString := ''O; + + v_OctetString := v_OctetString & int2oct(p_SourcePort, 2); + v_OctetString := v_OctetString & int2oct(p_DestPort, 2); + v_OctetString := v_OctetString & v_LengthStr; + v_OctetString := v_OctetString & f_IpChecksum(v_PseudoHeader & v_OctetString & v_ChecksumDummy & p_UdpPayload); /* Note: the UDP checksum can also be '0000'O what means "no chcksum"; but that is not the usual case */ + v_OctetString := v_OctetString & p_UdpPayload; + + return v_OctetString; + } + + //---------------------------------------------------------------------------- + /* + * @desc create UDP datagram + * @param p_SourceAddr + * @param p_DestAddr + * @param p_SourcePort + * @param p_DestPort + * @param p_UdpPayload + * @return octetstring + * @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC, UTRAN) + */ + function f_IPv6UdpDatagram_Create(charstring p_SourceAddr, + charstring p_DestAddr, + UInt16_Type p_SourcePort, + UInt16_Type p_DestPort, + octetstring p_UdpPayload) + return octetstring + { + var integer v_UdpDatagramLength := lengthof(p_UdpPayload) + 8; // 8 bytes UDP header + var O16_Type v_SourceAddrStr := f_Convert_IPv6Addr2OctString(p_SourceAddr); + var O16_Type v_DestAddrStr := f_Convert_IPv6Addr2OctString(p_DestAddr); + var O4_Type v_LengthStr := int2oct(v_UdpDatagramLength, 4); // RFC 2460 clause 8.1 + var octetstring v_PseudoHeader; + var octetstring v_OctetString; + + // Prepare the pseudo header, see RFC 2460 and illustration in Wikipedia + v_PseudoHeader := v_SourceAddrStr & v_DestAddrStr & v_LengthStr; + v_PseudoHeader := v_PseudoHeader & v_LengthStr; // UDP length + v_PseudoHeader := v_PseudoHeader & '000000'O & '11'O; // Zeros and Next header (= Protocol) + v_PseudoHeader := v_PseudoHeader & int2oct(p_SourcePort, 2) & int2oct(p_DestPort, 2) & int2oct(v_UdpDatagramLength, 2) & '0000'O; + v_PseudoHeader := v_PseudoHeader & p_UdpPayload; + + // Now set the UDP packet + v_OctetString := int2oct(p_SourcePort, 2); + v_OctetString := v_OctetString & int2oct(p_DestPort, 2); + v_OctetString := v_OctetString & int2oct(v_UdpDatagramLength, 2); + v_OctetString := v_OctetString & f_IpChecksum(v_PseudoHeader); + v_OctetString := v_OctetString & p_UdpPayload; + + return v_OctetString; + } + + //---------------------------------------------------------------------------- + /* + * @desc create TCP datagram + * @param p_SourceAddr + * @param p_DestAddr + * @param p_SourcePort + * @param p_DestPort + * @param p_TcpPayload + * @return octetstring + * @status APPROVED (LTE, NBIOT, NR5GC, UTRAN) + */ + function f_IPv4TcpDatagram_Create(charstring p_SourceAddr, + charstring p_DestAddr, + UInt16_Type p_SourcePort, + UInt16_Type p_DestPort, + octetstring p_TcpPayload) + return octetstring + { + var integer v_TcpDatagramLength := lengthof(p_TcpPayload) + 20; // 20 bytes TCP header + // Pseudo Header: + var O4_Type v_SourceAddrStr := f_Convert_IPv4Addr2OctString(p_SourceAddr); + var O4_Type v_DestAddrStr := f_Convert_IPv4Addr2OctString(p_DestAddr); + var O2_Type v_LengthStr := int2oct(v_TcpDatagramLength, 2); + var O1_Type v_Protocol := int2oct(tsc_IP_Protocol_TCP, 1); + var octetstring v_PseudoHeader := v_SourceAddrStr & v_DestAddrStr &'00'O & v_Protocol & v_LengthStr; + var O2_Type v_ChecksumDummy := '0000'O; + var octetstring v_UrgPointer := '0000'O; + var octetstring v_OctetString := ''O; + + v_OctetString := v_OctetString & int2oct(p_SourcePort, 2); + v_OctetString := v_OctetString & int2oct(p_DestPort, 2); + v_OctetString := v_OctetString & int2oct(0, 4); // Sequence Number + v_OctetString := v_OctetString & int2oct(0, 4); // Acknowledgment Number + v_OctetString := v_OctetString & '5011'O; // 4bits HeaderLen/6bits Reserved/URG/ACK/PSH/RST/SYN/FIN + v_OctetString := v_OctetString & int2oct(256, 4); // How to set the windows size? + v_OctetString := v_OctetString & f_IpChecksum(v_PseudoHeader & v_OctetString & v_ChecksumDummy & v_UrgPointer & p_TcpPayload); /* Note: the TCP checksum can also be '0000'O what means "no chcksum"; but that is not the usual case */ + v_OctetString := v_OctetString & v_UrgPointer; + v_OctetString := v_OctetString & p_TcpPayload; + + return v_OctetString; + } + + //---------------------------------------------------------------------------- + /* + * @desc Datagram acc. RFC2406 + * @param p_NextHeader + * @param p_SPI + * @param p_Payload + * @return octetstring + * @status APPROVED (LTE, NBIOT, NR5GC, UTRAN) + */ + function f_IPSecESPDatagram_Create(integer p_NextHeader, + O4_Type p_SPI, + octetstring p_Payload) + return octetstring + { + var octetstring v_OctetString := ''O; + var O4_Type v_SequenceNumber := int2oct(1, 4); + var integer v_PayloadLen := lengthof(p_Payload); + var integer v_PaddingLen := 0; + var integer i; + + v_OctetString := v_OctetString & p_SPI; // Security Parameters Index + v_OctetString := v_OctetString & v_SequenceNumber; // Sequence Number + v_OctetString := v_OctetString & p_Payload; + + // Padding to ensure that the resulting text terminates on a 4-byte boundary. RFC 2406 cl2.4 + select (v_PayloadLen mod 4) { + case (0) { v_PaddingLen := 2; } + case (1) { v_PaddingLen := 1; } + case (2) { v_PaddingLen := 0; } + case (3) { v_PaddingLen := 3; } + } + for (i:=0; i v_Start = 0 .. v_BlockSize-1 */ + var integer v_Length := v_BlockSize + (i mod n); /* => v_Length = v_BlockSize .. p_MaxPayloadSize */ + + while (lengthof(v_Data) < p_MaxPayloadSize + v_BlockSize) { + v_Data := v_Data & tsc_IP_AnyData; + } + v_IcmpPayload := substr(v_Data, v_Start, v_Length); /* @sic R5s200653 sic@ */ + + v_Payload := fl_IcmpDatagram_Create(p_IcmpMsgType, v_IcmpSequenceNumber, v_IcmpPayload); + + select (p_IcmpMsgType) { + case (tsc_ICMP_Type_EchoRequest, tsc_ICMP_Type_EchoReply) { + v_IpPacket := f_IPv4Packet_Create('10'O & int2oct(p_SequenceNumber, 1), -, tsc_IP_Protocol_ICMP, p_SourceAddr, p_DestAddr, v_Payload); /* @sic R5s120642 sic@ */ + } + case (tsc_ICMPv6_Type_EchoRequest, tsc_ICMPv6_Type_EchoReply) { + v_Payload := f_ICMPv6_UpdateCRCChecksum(p_SourceAddr, p_DestAddr, v_Payload); /* @sic R5s190117 - Additional change sic@ */ + v_IpPacket := f_IPv6Packet_Create(-, -, tsc_IP_Protocol_ICMPv6, -, p_SourceAddr, p_DestAddr, v_Payload); + } + } + return v_IpPacket; + } + + /* + * @desc depending on whether p_UE_Addr is an IPv4 or an IPv6 address an IPv4 or IPv6 packet is returned with an IcmpEchoReply as payload; + * when p_DestAddr is empty p_SourceAddr for both source and destination (that is mostly the case for loopback mode) + * @param p_SourceAddr + * @param p_DestAddr (default value: "") + * @param p_SequenceNumber (default value: 1) + * @return octetstring + * @status APPROVED (ENDC, LTE, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) + */ + function f_IPv4IPv6_IcmpEchoReply(charstring p_SourceAddr, + charstring p_DestAddr := "", + integer p_SequenceNumber := 1) return octetstring + { + var charstring v_DestAddr:= p_DestAddr; + var UInt8_Type v_IcmpMsgType; + var octetstring v_IpPacket; + + if (v_DestAddr == "") { v_DestAddr := p_SourceAddr; } + + if (f_IpAddressIsIPv4(p_SourceAddr)) { + v_IcmpMsgType := tsc_ICMP_Type_EchoReply; + } else { + v_IcmpMsgType := tsc_ICMPv6_Type_EchoReply; + } + v_IpPacket := fl_IPv4IPv6_IcmpEchoRequestReply(v_IcmpMsgType, p_SourceAddr, v_DestAddr, p_SequenceNumber); + return v_IpPacket; + } + + /* + * @desc depending on whether p_UE_Addr is an IPv4 or an IPv6 address an IPv4 or IPv6 packet is returned with an IcmpEchoRequest as payload + * @param p_SourceAddr + * @param p_DestAddr + * @param p_SequenceNumber + * @return octetstring + * @status APPROVED (ENDC, NR5GC, NR5GC_IRAT) + */ + function f_IPv4IPv6_IcmpEchoRequest(charstring p_SourceAddr, + charstring p_DestAddr, + integer p_SequenceNumber) return octetstring + { + var UInt8_Type v_IcmpMsgType; + var octetstring v_IpPacket; + + if (f_IpAddressIsIPv4(p_SourceAddr)) { + v_IcmpMsgType := tsc_ICMP_Type_EchoRequest; + } else { + v_IcmpMsgType := tsc_ICMPv6_Type_EchoRequest; + } + v_IpPacket := fl_IPv4IPv6_IcmpEchoRequestReply(v_IcmpMsgType, p_SourceAddr, p_DestAddr, p_SequenceNumber); + return v_IpPacket; + } + + /* + * @desc depending on whether p_UE_Addr is an IPv4 or an IPv6 address an IPv4 or IPv6 packet is returned with a UDP datagram as payload + * @param p_SourceAddr + * @param p_DestAddr + * @param p_SourcePort + * @param p_DestPort + * @param p_Payload (default value: tsc_IP_AnyData) + * @return octetstring + * @status APPROVED (LTE, LTE_A_PRO, NBIOT) + */ + function f_IPv4IPv6_AnyUdpPacket(charstring p_SourceAddr, + charstring p_DestAddr, + UInt16_Type p_SourcePort, + UInt16_Type p_DestPort, + octetstring p_Payload := tsc_IP_AnyData) return octetstring + { + var UInt8_Type v_Protocol := tsc_IP_Protocol_UDP; + var octetstring v_IpPacket; + + if (f_IpAddressIsIPv4(p_SourceAddr)) { + v_IpPacket := f_IPv4Packet_Create(-, -, v_Protocol, p_SourceAddr, p_DestAddr, f_IPv4UdpDatagram_Create(p_SourceAddr, p_DestAddr, p_SourcePort, p_DestPort, p_Payload)); + } else { + v_IpPacket := f_IPv6Packet_Create(-, -, v_Protocol, -, p_SourceAddr, p_DestAddr, f_IPv6UdpDatagram_Create(p_SourceAddr, p_DestAddr, p_SourcePort, p_DestPort, p_Payload)); + } + return v_IpPacket; + } + + //**************************************************************************** + + type record IPv4IPv6PacketInfo_Type { /* @status APPROVED (ENDC, NR5GC, NR5GC_IRAT) */ + UInt8_Type Protocol, + charstring SourceAddr, + charstring DestAddr, + octetstring Payload + }; + + /* + * @desc Get relevant info of IP packet (protocol, source/destination address, payload) + * @param p_IpPacket + * @return IPv4IPv6PacketInfo_Type + * @status APPROVED (ENDC, NR5GC, NR5GC_IRAT) + */ + function f_IPv4IPv6Packet_GetInfo(octetstring p_IpPacket) return IPv4IPv6PacketInfo_Type + { + var IPv4IPv6PacketInfo_Type v_IPv4IPv6PacketInfo; + var UInt8_Type v_Protocol; + var bitstring v_IpVersion; + var bitstring v_IHL; + var integer v_HeaderLength; + var integer v_PayloadLength; + var octetstring v_SourceAddrString; + var octetstring v_DestAddrString; + var charstring v_SourceAddr; + var charstring v_DestAddr; + + v_IpVersion := substr(oct2bit(substr(p_IpPacket, 0, 1)), 0, 4); + select (v_IpVersion) { + case ('0100'B) { // IPv4 + v_IHL := substr(oct2bit(substr(p_IpPacket, 0, 1)), 4, 4); //IHL is the 4 last bits of the first Octet. + v_HeaderLength := bit2int(v_IHL) * 4; /* length in bytes */ + v_Protocol:= oct2int(substr(p_IpPacket, 9, 1)); + v_SourceAddrString := substr(p_IpPacket, 12, 4); + v_DestAddrString := substr(p_IpPacket, 16, 4); + v_SourceAddr := f_Convert_OctString2IPv4Addr(v_SourceAddrString); + v_DestAddr := f_Convert_OctString2IPv4Addr(v_DestAddrString); + } + case ('0110'B) { // IPv6 + v_HeaderLength := 40; + v_Protocol:= oct2int(substr(p_IpPacket, 6, 1)); + v_SourceAddrString := substr(p_IpPacket, 8, 16); + v_DestAddrString := substr(p_IpPacket, 24, 16); + v_SourceAddr := f_Convert_OctString2IPv6Addr(v_SourceAddrString); + v_DestAddr := f_Convert_OctString2IPv6Addr(v_DestAddrString); + } + } + v_PayloadLength := lengthof(p_IpPacket) - v_HeaderLength; + v_IPv4IPv6PacketInfo.Protocol := v_Protocol; + v_IPv4IPv6PacketInfo.SourceAddr := v_SourceAddr; + v_IPv4IPv6PacketInfo.DestAddr := v_DestAddr; + v_IPv4IPv6PacketInfo.Payload := substr(p_IpPacket, v_HeaderLength, v_PayloadLength); + return v_IPv4IPv6PacketInfo; + } + + //---------------------------------------------------------------------------- + /* + * @desc Check received IP packet against sent IP packet for check of user plane connectivity according to 38.508-1 clause 4.9.1 + * @param p_IpPacketTX + * @param p_IpPacketRX + * @param p_CheckPING (default value: true) + * @return boolean + * @status APPROVED (ENDC, NR5GC, NR5GC_IRAT) + */ + function f_LoopbackModeBorPing_CheckDataRX(octetstring p_IpPacketTX, + octetstring p_IpPacketRX, + boolean p_CheckPING := true) return boolean + { + var IPv4IPv6PacketInfo_Type v_PacketInfoTX; + var IPv4IPv6PacketInfo_Type v_PacketInfoRX; + var IPv4IPv6PacketInfo_Type v_PacketInfoExpected; + var integer v_SequenceNumber; + var octetstring v_ExpectedIcmpEchoReplyPacket; + var boolean v_UsePING := p_CheckPING and pc_IP_Ping; // @sic R5-206332 only use PING if required by test case sic@ + + if (v_UsePING) { + v_PacketInfoTX := f_IPv4IPv6Packet_GetInfo(p_IpPacketTX); + v_PacketInfoRX := f_IPv4IPv6Packet_GetInfo(p_IpPacketRX); + v_SequenceNumber := oct2int(substr(v_PacketInfoTX.Payload, 6, 2)); + + v_ExpectedIcmpEchoReplyPacket := f_IPv4IPv6_IcmpEchoReply(v_PacketInfoTX.DestAddr, v_PacketInfoTX.SourceAddr, v_SequenceNumber); + v_PacketInfoExpected := f_IPv4IPv6Packet_GetInfo(v_ExpectedIcmpEchoReplyPacket); + + return ((v_PacketInfoRX.Protocol == v_PacketInfoExpected.Protocol) and + (v_PacketInfoRX.SourceAddr == v_PacketInfoExpected.SourceAddr) and + (v_PacketInfoRX.DestAddr == v_PacketInfoExpected.DestAddr) and + (v_PacketInfoRX.Payload == v_PacketInfoExpected.Payload)); + } + else { + return (p_IpPacketTX == p_IpPacketRX); + } + } + + //---------------------------------------------------------------------------- + /* + * @desc get IP packet to be sent to the UE for check of user plane connectivity according to 38.508-1 clause 4.9.1 + * @param p_PdnType + * @param p_BearerType + * @param p_SequenceNumber + * @param p_CheckPING (default value: true) + * @return octetstring + * @status APPROVED (ENDC, NR5GC, NR5GC_IRAT) + */ + function f_LoopbackModeBorPing_GetDataTX(PDN_Index_Type p_PdnType, + DataPathCheck_BearerType_Type p_BearerType, + integer p_SequenceNumber, + boolean p_CheckPING := true) return octetstring + { /* @sic R5-193981, R5-193983: p_BearerType sic@ */ + var charstring v_IP_AddressUE := f_LoopbackModeB_IP_Address_UE(-, p_PdnType); + var PDN_Index_Type v_PdnIndex := p_PdnType; + var charstring v_SourceAddr; + var charstring v_DestAddr; + var octetstring v_IpPacket; + var boolean v_UsePING := p_CheckPING and pc_IP_Ping; // @sic R5s190554 only use PING if required by test case sic@ + + select (p_BearerType) { + case (dedicatedBearer) { /* Dedicated bearer */ + v_SourceAddr := f_LoopbackModeB_IP_Address_NW(-, v_PdnIndex); /* source address is the NW address of the PDN which the DRB belongs to */ + if (v_UsePING) { + v_DestAddr := v_IP_AddressUE; + } else { + v_DestAddr := v_SourceAddr; /* same IP address for source and destination to match UL and DL packet filters */ + } + } + case (defaultBearer) { /* Default bearer */ + v_DestAddr := v_IP_AddressUE; + if (v_UsePING) { + if (p_PdnType == PDN_1) { + v_PdnIndex := PDN_2; + } else { + v_PdnIndex := PDN_1; + } + v_SourceAddr := f_LoopbackModeB_IP_Address_NW(-, v_PdnIndex); /* different address than NW address of the PDN which the DRB belongs to + => IP packet does not match packet filter of dedicated bearer (if any) */ + } else { + v_SourceAddr := v_DestAddr; /* the UE's IP address as source and destination address as according to 36.523-3 clause 7.14.2 */ + } + } + } + if (v_UsePING) { + v_IpPacket := f_IPv4IPv6_IcmpEchoRequest(v_SourceAddr, v_DestAddr, p_SequenceNumber); + } else { + v_IpPacket := f_IPv4IPv6_IcmpEchoReply(v_SourceAddr, v_DestAddr, p_SequenceNumber); + } + return v_IpPacket; + } + +} diff --git a/ttcn/Lib3GPP/CommonIP/LoopbackIP_PacketFilterTest.ttcn b/ttcn/Lib3GPP/CommonIP/LoopbackIP_PacketFilterTest.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..3a90bc297c336adddadc82dde73d3598cde21a9b --- /dev/null +++ b/ttcn/Lib3GPP/CommonIP/LoopbackIP_PacketFilterTest.ttcn @@ -0,0 +1,269 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2019-11-16 12:44:38 +0100 (Sat, 16 Nov 2019) $ +// $Rev: 26175 $ +/******************************************************************************/ + +module LoopbackIP_PacketFilterTest { + + import from CommonDefs all; + import from CommonIP all; + import from LoopbackIP all; + + //---------------------------------------------------------------------------- + /* + * @desc Common function to create IPv4 or IPv6 datagram + * @param p_IpTypeIsIPv4 + * @param p_Protocol + * @param p_IPv4_SourceAddr + * @param p_IPv4_DestAddr + * @param p_IPv6_SourceAddr + * @param p_IPv6_DestAddr + * @param p_IPv6_FlowLabel + * @param p_SourcePort + * @param p_DestPort + * @param p_IPSecSPI + * @param p_TOS_TC + * @return octetstring + * @status APPROVED (LTE, NBIOT, NR5GC, UTRAN) + */ + function f_PacketFilterTest_CreateDatagram(boolean p_IpTypeIsIPv4, + UInt8_Type p_Protocol, + charstring p_IPv4_SourceAddr, + charstring p_IPv4_DestAddr, + charstring p_IPv6_SourceAddr, + charstring p_IPv6_DestAddr, + UInt20_Type p_IPv6_FlowLabel, + UInt16_Type p_SourcePort, + UInt16_Type p_DestPort, + O4_Type p_IPSecSPI, + O1_Type p_TOS_TC) return octetstring + { + var octetstring v_IpPacket; + var octetstring v_IPPayload; + + if (p_IpTypeIsIPv4) { + select (p_Protocol) { + case (tsc_IP_Protocol_UDP) { + v_IPPayload := f_IPv4UdpDatagram_Create(p_IPv4_SourceAddr, p_IPv4_DestAddr, p_SourcePort, p_DestPort, tsc_IP_AnyData); + } + case (tsc_IP_Protocol_TCP) { + v_IPPayload := f_IPv4TcpDatagram_Create(p_IPv4_SourceAddr, p_IPv4_DestAddr, p_SourcePort, p_DestPort, tsc_IP_AnyData); + } + case (tsc_IP_Protocol_IPSec) { + v_IPPayload := f_IPSecESPDatagram_Create(p_Protocol, + p_IPSecSPI, + f_IPv4UdpDatagram_Create(p_IPv4_SourceAddr, p_IPv4_DestAddr, p_SourcePort, p_DestPort, tsc_IP_AnyData)); + } + } + v_IpPacket := f_IPv4Packet_Create(-, p_TOS_TC, p_Protocol, p_IPv4_SourceAddr, p_IPv4_DestAddr, v_IPPayload); + } + else { + select (p_Protocol) { + case (tsc_IP_Protocol_UDP) { + v_IPPayload := f_IPv6UdpDatagram_Create(p_IPv6_SourceAddr, p_IPv6_DestAddr, p_SourcePort, p_DestPort, tsc_IP_AnyData); + } + case (tsc_IP_Protocol_TCP) { + v_IPPayload := f_IPv6TcpDatagram_Create(p_IPv6_SourceAddr, p_IPv6_DestAddr, p_SourcePort, p_DestPort, tsc_IP_AnyData); + } + case (tsc_IP_Protocol_IPSec) { + v_IPPayload := f_IPSecESPDatagram_Create(p_Protocol, + p_IPSecSPI, + f_IPv6UdpDatagram_Create(p_IPv6_SourceAddr, p_IPv6_DestAddr, p_SourcePort, p_DestPort, tsc_IP_AnyData)); + } + } + v_IpPacket := f_IPv6Packet_Create(p_TOS_TC, p_IPv6_FlowLabel, p_Protocol, -, p_IPv6_SourceAddr, p_IPv6_DestAddr, v_IPPayload); + + } + return v_IpPacket; + } + + //---------------------------------------------------------------------------- + /* + * @desc Establish IP packets used in test case 10.9.1 + * @param p_IpTypeIsIPv4 + * @param p_Index + * @return octetstring + * @status APPROVED (LTE, UTRAN) + */ + function f_PacketFilterTest_CreateDatagram_10_9_1(boolean p_IpTypeIsIPv4, + integer p_Index) return octetstring + { + var charstring v_IPv4_SourceAddr := "192.168.0.1"; + var charstring v_IPv4_DestAddr := "172.168.8.1"; + var charstring v_IPv6_SourceAddr := "fe80::1:1"; + var charstring v_IPv6_DestAddr := "2001:0ba0::0001:0001"; // @sic R5s110645 sic@ + var UInt20_Type v_IPv6_FlowLabel := 10; + var UInt16_Type v_SourcePort; + var UInt16_Type v_DestPort; + var O1_Type v_TOS_TC; + var UInt8_Type v_Protocol; + var O4_Type v_IPSecSPI := '0F80F000'O; // @sic R5s110645 sic@ + + select (p_Index) { // Index is packet number per prose + case (1) { + v_Protocol := tsc_IP_Protocol_UDP; + v_SourcePort := 60001; + v_DestPort := 60350; + v_TOS_TC := 'A9'O; + } + case (2) { + v_Protocol := tsc_IP_Protocol_UDP; + v_SourcePort := 60001; + v_DestPort := 60350; + v_TOS_TC := 'A9'O; + v_IPv4_DestAddr := "172.168.9.1"; // modified wrt base IP packet #1 + v_IPv6_DestAddr := "2001:0bb0::0001:0001"; // modified wrt base IP packet #1 @sic R5s110645 sic@ + } + case (3) { + v_Protocol := tsc_IP_Protocol_TCP; // modified wrt base IP packet #1 + v_SourcePort := 60001; + v_DestPort := 60350; + v_TOS_TC := 'A9'O; + } + case (4) { + v_Protocol := tsc_IP_Protocol_UDP; + v_SourcePort := 60002; // modified wrt base IP packet #1 + v_DestPort := 60350; + v_TOS_TC := 'A9'O; + } + case (5) { + v_Protocol := tsc_IP_Protocol_UDP; + v_SourcePort := 60101; // modified wrt base IP packet #1 + v_DestPort := 60350; + v_TOS_TC := 'A9'O; + } + case (6) { + v_Protocol := tsc_IP_Protocol_UDP; + v_SourcePort := 60001; + v_DestPort := 60351; // modified wrt base IP packet #1 + v_TOS_TC := 'A9'O; + } + case (7) { + v_Protocol := tsc_IP_Protocol_UDP; + v_SourcePort := 60001; + v_DestPort := 60451; // modified wrt base IP packet #1 + v_TOS_TC := 'A9'O; + } + case (8) { + v_Protocol := tsc_IP_Protocol_UDP; + v_SourcePort := 60001; + v_DestPort := 60350; + v_TOS_TC := 'E9'O; // modified wrt base IP packet #1 + } + case (9) { + v_Protocol := tsc_IP_Protocol_IPSec; + v_SourcePort := 60101; + v_DestPort := 60451; + v_TOS_TC := 'A2'O; + } + case (10) { + v_Protocol := tsc_IP_Protocol_IPSec; + v_SourcePort := 60101; + v_DestPort := 60451; + v_TOS_TC := 'A2'O; + v_IPv4_DestAddr := "172.168.9.1"; // modified wrt base IP packet #9 + v_IPv6_DestAddr := "2001:0bb0::0001:0001"; // modified wrt base IP packet #9 @sic R5s110645 sic@ + } + case (11) { + v_Protocol := tsc_IP_Protocol_TCP; // modified wrt base IP packet #9 + v_SourcePort := 60101; + v_DestPort := 60451; + v_TOS_TC := 'A2'O; + } + case (12) { + v_Protocol := tsc_IP_Protocol_IPSec; + v_SourcePort := 60101; + v_DestPort := 60451; + v_TOS_TC := 'A2'O; + v_IPSecSPI := 'F90F0000'O; // modified wrt base IP packet #9 + } + case (13) { + v_Protocol := tsc_IP_Protocol_IPSec; + v_SourcePort := 60101; + v_DestPort := 60451; + v_TOS_TC := 'E9'O; // modified wrt base IP packet #9 + } + case (14) { + v_Protocol := tsc_IP_Protocol_TCP; + v_SourcePort := 60101; + v_DestPort := 60451; + v_TOS_TC := 'B3'O; + v_IPv6_FlowLabel := 5; + + if (p_IpTypeIsIPv4) { + FatalError(__FILE__, __LINE__, "packet id 14 is not for IPv4"); + } + } + case (15) { + v_Protocol := tsc_IP_Protocol_TCP; + v_SourcePort := 60101; + v_DestPort := 60451; + v_TOS_TC := 'B3'O; + v_IPv6_FlowLabel := 5; + v_IPv6_DestAddr := "2001:0bb0::0001:0001"; // modified wrt base IP packet #14 @sic R5s110645 sic@ + + if (p_IpTypeIsIPv4) { + FatalError(__FILE__, __LINE__, "packet id 15 is not for IPv4"); + } + } + case (16) { + v_Protocol := tsc_IP_Protocol_TCP; + v_SourcePort := 60101; + v_DestPort := 60451; + v_TOS_TC := 'E9'O; // modified wrt base IP packet #14 + v_IPv6_FlowLabel := 5; + + if (p_IpTypeIsIPv4) { + FatalError(__FILE__, __LINE__, "packet id 16 is not for IPv4"); + } + } + case (17) { + v_Protocol := tsc_IP_Protocol_TCP; + v_SourcePort := 60101; + v_DestPort := 60451; + v_TOS_TC := 'B3'O; + v_IPv6_FlowLabel := 10; // modified wrt base IP packet #14 + + if (p_IpTypeIsIPv4) { + FatalError(__FILE__, __LINE__, "packet id 17 is not for IPv4"); + } + } + case (18) { + v_Protocol := tsc_IP_Protocol_TCP; + v_SourcePort := 60101; + v_DestPort := 60451; + v_TOS_TC := 'AA'O; + } + case (19) { + v_Protocol := tsc_IP_Protocol_TCP; + v_SourcePort := 60101; + v_DestPort := 60451; + v_TOS_TC := 'AA'O; + v_IPv4_DestAddr := "172.168.9.1"; // modified wrt base IP packet #18 @sic R5s110604 sic@ + v_IPv6_DestAddr := "2001:0ba1::0001:0001"; // modified wrt base IP packet #18 @sic R5s110645 sic@ + } + case else { + // out of supported range + FatalError(__FILE__, __LINE__, "unsupported packet id"); + } + } + return f_PacketFilterTest_CreateDatagram(p_IpTypeIsIPv4, + v_Protocol, + v_IPv4_SourceAddr, + v_IPv4_DestAddr, + v_IPv6_SourceAddr, + v_IPv6_DestAddr, + v_IPv6_FlowLabel, + v_SourcePort, + v_DestPort, + v_IPSecSPI, + v_TOS_TC); + } + +} diff --git a/ttcn/Lib3GPP/CommonIP/module.mk b/ttcn/Lib3GPP/CommonIP/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..e368d13a9153174d8b091b6f1f75b896e4546f4b --- /dev/null +++ b/ttcn/Lib3GPP/CommonIP/module.mk @@ -0,0 +1,6 @@ +sources := \ + CommonIP.ttcn \ + LoopbackIP_PacketFilterTest.ttcn \ + LoopbackIP.ttcn + +modules :=\ diff --git a/ttcn/Lib3GPP/EPS_NAS/EPS_NAS_LoopBack_TypeDefs.ttcn b/ttcn/Lib3GPP/EPS_NAS/EPS_NAS_LoopBack_TypeDefs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..2a519a59ba459fc3d88c2985f2d4b90ace6bd415 --- /dev/null +++ b/ttcn/Lib3GPP/EPS_NAS/EPS_NAS_LoopBack_TypeDefs.ttcn @@ -0,0 +1,343 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2018-06-08 13:10:36 +0200 (Fri, 08 Jun 2018) $ +// $Rev: 21524 $ +/******************************************************************************/ +module EPS_NAS_LoopBack_TypeDefs { + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + + //---------------------------------------------------------------------------- + // General Info Elements (36.509 ) + //---------------------------------------------------------------------------- + + type Octet_Type UE_TestLoopModeB_LB_Setup_Type; +/* type Octet_Type UE_PositioningTechnology_Type; + 36.509 cl 6.9, not needed: corresponding bitstring constants are defined in Positioning ATS @sic R5s170597 - Rel-14 Baseline move sic@ */ + type O4_Type MBMS_PacketCounterValue_Type; + type O4_Type SCPTM_PacketCounterValue_Type; + const integer tsc_MAX_ModeA_LB_Entities := 8; + const integer tsc_MAX_ModeD_Monitor_Entities := 400; // 36.509 cl 7.2 + const integer tsc_MAX_ModeE_Monitor_Entities := 16; // 36.509 cl 7.2 + + //**************************************************************************** + // Test Loop PROTOCOL DEFINITIONS: PDUs + //---------------------------------------------------------------------------- + // Special conformance testing functions for User Equipment messages (36.509 cl. 6) + //---------------------------------------------------------------------------- + + // ============================================================================= + // Close UE Test Loop + // 3G TS 36.509 cl. 6.1 + // Direction: SS to UE + // ----------------------------------------------------------------------------- + + type record CLOSE_UE_TEST_LOOP { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType, /* M V 1 */ + UE_TestLoopMode_Type ueTestLoopMode, /* M V 1 */ + UE_TestLoopModeA_LB_Setup_Type ueTestLoopModeA_LB_Setup optional, /* C LV 1-25 + present if ueTestLoopMode ='00'F */ + UE_TestLoopModeB_LB_Setup_Type ueTestLoopModeB_LB_Setup optional, /* C V 1 + present if ueTestLoopMode ='01'F/ + represents IP PDU delay time 0..255 seconds */ + UE_TestLoopModeC_LB_Setup_Type ueTestLoopModeC_LB_Setup optional, /* C V 3 + present if ueTestLoopMode ='02'H + @sic R5-155362 D2D sic@ */ + UE_TestLoopModeD_LB_Setup_Type ueTestLoopModeD_LB_Setup optional, /* C LV-E 3-803 + This IE is mandatory present if the IE "UE test loop mode" is set to UE test loop Mode D. Else it shall be absent. + @sic R5-155362 D2D sic@ */ + UE_TestLoopModeE_LB_Setup_Type ueTestLoopModeE_LB_Setup optional, /* C LV 2-18 + This IE is mandatory present if the IE "UE test loop mode" is set to UE test loop Mode E. Else it shall be absent. */ + UE_TestLoopModeF_LB_Setup_Type ueTestLoopModeF_LB_Setup optional, /* C V 2 + This IE is mandatory present if the IE "UE test loop mode" is set to UE test loop Mode F. Else it shall be absent. */ + UE_TestLoopModeGH_LB_Setup_Type ueTestLoopModeGH_LB_Setup optional /* C V 2 + This IE is mandatory present if the IE "UE test loop mode" is set to UE test loop Mode G or UE test loop mode H. Else it shall be absent. */ + }; + + // ============================================================================= + // Structured Type Definition + // *** Comments: + // UE Test Loop Mode A LB Setup 36.509 cl. 6.1 + // *** additional Notes: + // The maximum number of LB entities in the LB setup list is less than or equal to 5. + // ----------------------------------------------------------------------------- + type record UE_TestLoopModeA_LB_Setup_Type { + O1_Type iel, + LB_SetupDRB_IE_List_Type lbSetupDrbList optional + }; + + // ============================================================================= + // Structured Type Definition + // *** Comments: + // UE Test Loop Mode C LB Setup 36.509 cl. 6.1 + // ============================================================================= + type record UE_TestLoopModeC_LB_Setup_Type { + B8_Type mBSFN_AreaId, //MBSFN area Identity 0.. 255 Binary coded + B4_Type reservedB1, + B4_Type pMCHIdentity, // MCH identity 0.. 14 (binary coded, + B3_Type reservedB2, + B5_Type logChId //Logical channel identity 0..28 (binary coded, + }; + + // ============================================================================= + // LB Setup DRB IE + // UE Test Loop Mode A LB Setup 36.509 cl. 6.1 + // ----------------------------------------------------------------------------- + type record LB_SetupDRB_IE_Type { + B16_Type uplinkPdcpSduSize, + B3_Type reserved, + B5_Type drbIdentity + }; + + type record length (1..tsc_MAX_ModeA_LB_Entities)of LB_SetupDRB_IE_Type LB_SetupDRB_IE_List_Type; + + // ============================================================================= + // Structured Type Definition + // *** Comments: + // UE Test Loop Mode D LB Setup 36.509 cl. 6.1 + // ============================================================================= + type record UE_TestLoopModeD_LB_Setup_Type { + B16_Type discMonitorListLength, // Length of UE test loop mode D monitor list in bytes + B7_Type reserved, + B1_Type discAnnounceOrMonitor, // D0 - Discovery Announce or Monitor + DiscMonitorList_Type discMonitorList optional + }; + + type record length (1..tsc_MAX_ModeD_Monitor_Entities) of DiscMonitor_Type DiscMonitorList_Type; // Monitor list + + type record DiscMonitor_Type { + //ProSe App Code (LSBs) #n to monitor + B1_Type proSeAppCodeLSB_A7, + B1_Type proSeAppCodeLSB_A6, + B1_Type proSeAppCodeLSB_A5, + B1_Type proSeAppCodeLSB_A4, + B1_Type proSeAppCodeLSB_A3, + B1_Type proSeAppCodeLSB_A2, + B1_Type proSeAppCodeLSB_A1, + B1_Type proSeAppCodeLSB_A0, + B7_Type reserved, + B1_Type proSeAppCodeLSB_A8 + } + + // ============================================================================= + // Structured Type Definition + // *** Comments: + // UE Test Loop Mode E LB Setup 36.509 cl. 6.1 + // ============================================================================= + type record UE_TestLoopModeE_LB_Setup_Type { + B8_Type commMonitorListLength, // Length of UE test loop mode E Monitor setup contents in bytes + B6_Type reserved, + B1_Type commTransmitOrReceive, // Communication Transmit or Receive + CommMonitorList_Type commMonitorList optional, + B1_Type d2dOrV2x // @sic R5-175219: addition of V2x in mode E sic@ + }; + + type record length (1..tsc_MAX_ModeE_Monitor_Entities) of CommMonitor_Type CommMonitorList_Type; + type B8_Type CommMonitor_Type; + + // ============================================================================= + // Structured Type Definition + // *** Comments: + // UE Test Loop Mode F LB Setup 36.509 cl. 6.1 + // ============================================================================= + type record UE_TestLoopModeF_LB_Setup_Type { + B16_Type sC_MTCH_ID //SC-MTCH ID + }; + + // ============================================================================= + // Structured Type Definition + // *** Comments: + // UE Test Loop Mode G/H LB Setup 36.509 cl. 6.1 + // ============================================================================= + type record UE_TestLoopModeGH_LB_Setup_Type { // @sic R5s170591 sic@ + B1_Type uplinkLoopbackMode, + B7_Type repetitions, + B8_Type uplinkDataDelay + }; + + // ============================================================================= + // Close UE Test Loop Complete + // 3G TS 36.509 cl. 6.2 + // Direction: UE to SS + // ----------------------------------------------------------------------------- + type record CLOSE_UE_TEST_LOOP_COMPLETE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + }; + + // ============================================================================= + // OPEN UE Test Loop + // 3G TS 36.509 cl. 6.3 + // Direction: SS to UE + // ----------------------------------------------------------------------------- + type record OPEN_UE_TEST_LOOP { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + }; + + // ============================================================================= + // OPEN UE Test Loop Complete + // 3G TS 36.509 cl. 6.4 + // Direction: UE to SS + // ----------------------------------------------------------------------------- + type record OPEN_UE_TEST_LOOP_COMPLETE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + }; + + // ============================================================================= + // Activate RB Test Mode + // 3G TS 36.509 cl. 6.5 + // Direction: SS to UE + // ----------------------------------------------------------------------------- + type record ACTIVATE_TEST_MODE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType, /* M V 1 */ + UE_TestLoopMode_Type ueTestLoopMode /* M V 1 */ + }; + + // ============================================================================= + // Activate RB Test Mode Complete + // 3G TS 36.509 cl. 6.6 + // Direction: UE to SS + // ----------------------------------------------------------------------------- + type record ACTIVATE_TEST_MODE_COMPLETE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + }; + + // ============================================================================= + // Deactivate RB Test Mode + // 3G TS 36.509 cl. 6.7 + // Direction: SS to UE + // ----------------------------------------------------------------------------- + type record DEACTIVATE_TEST_MODE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + }; + + // ============================================================================= + // Deactivate RB Test Mode Complete + // 3G TS 36.509 cl. 6.8 + // Direction: UE to SS + // ----------------------------------------------------------------------------- + type record DEACTIVATE_TEST_MODE_COMPLETE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + }; + + // ============================================================================= + // UE TEST LOOP MODE C MBMS PACKET COUNTER REQUEST + // 3G TS 36.509 cl. 6.10 + // Direction: SS to UE + // ----------------------------------------------------------------------------- + type record UE_TESTLOOPMODEC_MBMS_PACKETCOUNTERREQUEST { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + }; + + // ============================================================================= + // UE TEST LOOP MODE C MBMS PACKET COUNTER RESPONSE + // 3G TS 36.509 cl. 6.11 + // Direction: UE to SS + // ----------------------------------------------------------------------------- + type record UE_TESTLOOPMODEC_MBMS_PACKETCOUNTERRESPONSE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType, /* M V 1 */ + MBMS_PacketCounterValue_Type MBMS_PacketCounterValue /* M V 4 */ + }; + + // ============================================================================= + // UE TEST LOOP PROSE PACKET COUNTER REQUEST + // 3G TS 36.509 cl. 6.13 + // Direction: SS to UE + // ----------------------------------------------------------------------------- + type record UE_TESTLOOP_PROSE_PACKETCOUNTERREQUEST { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + }; + + // ============================================================================= + // UE TEST LOOP PROSE PACKET COUNTER RESPONSE + // 3G TS 36.509 cl. 6.14 + // Direction: UE to SS + // ----------------------------------------------------------------------------- + type record UE_TESTLOOP_PROSE_PACKETCOUNTERRESPONSE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType, /* M V 1 */ + ProSeDirectDiscPacketCounterValue_Type proSeDirectDiscPacketCounterValue optional, /* CV-ModeD TLV-E 4 * (ND + 1) +3 */ + ProSeDirectCommPSCCH_PacketCounterValue_Type proSeDirectCommPSCCH_PacketCounterValue optional, /* CV-ModeE TLV 4 * (NC + 1) + 2 */ + ProSeDirectCommSTCH_PacketCounterValue_Type proSeDirectCommSTCH_PacketCounterValue optional, /* CV-ModeE TLV 4* (NC + 1) + 2 */ + ProSeDirectCommPSSCH_PacketCounterValue_Type proSeDirectCommPSSCH_PacketCounterValue optional /* CV-ModeE TLV 4 * (NC + 1) + 2 @sic R5-183787 sic@ */ + }; + + type record length(1..tsc_MAX_ModeD_Monitor_Entities) of O4_Type ProSeDirectDiscPacketCounterList_Type; + type record length(1..tsc_MAX_ModeE_Monitor_Entities) of O4_Type ProSeDirectCommPSCCH_PacketCounterList_Type; + type record length(1..tsc_MAX_ModeE_Monitor_Entities) of O4_Type ProSeDirectCommSTCH_PacketCounterList_Type; + type record length(1..tsc_MAX_ModeE_Monitor_Entities) of O4_Type ProSeDirectCommPSSCH_PacketCounterList_Type; // @sic R5-183787 sic@ + + type record ProSeDirectDiscPacketCounterValue_Type { + MessageType proSeDirectDiscPacketCounterValueType, /* shall be '0000 0000'B */ + B16_Type proSeDirectDiscPacketCounterListLength, /* Length of ProSe Direct Discovery Packet Counter(s) Value contents in bytes */ + ProSeDirectDiscPacketCounterList_Type proSeDirectDiscPacketCounterList /* ProSe Direct Discovery Packet Counter IE's */ + }; + + type record ProSeDirectCommPSCCH_PacketCounterValue_Type { + MessageType proSeDirectCommPSCCH_PacketCounterValueType, /* shall be '0000 0001'B */ + B8_Type proSeDirectCommPSCCH_PacketCounterListLength, /* Length of ProSe Direct Communication PSCCH Packet Counter(s) Value contents in bytes */ + ProSeDirectCommPSCCH_PacketCounterList_Type proSeDirectCommPSCCH_PacketCounterList /* ProSe Direct Communication PSCCH Packet Counter IE's */ + }; + + type record ProSeDirectCommSTCH_PacketCounterValue_Type { + MessageType proSeDirectCommSTCH_PacketCounterValueType, /* shall be '0000 0010'B */ + B8_Type proSeDirectCommSTCH_PacketCounterValueLength, /* Length of ProSe Direct Communication PSCCH Packet Counter(s) Value contents in bytes */ + ProSeDirectCommSTCH_PacketCounterList_Type proSeDirectCommSTCH_PacketCounterList /* ProSe Direct Communication PSCCH Packet Counter IE's */ + }; + + type record ProSeDirectCommPSSCH_PacketCounterValue_Type { // @sic R5-183787 sic@ + MessageType proSeDirectCommPSSCH_PacketCounterValueType, /* shall be '0000 0011'B */ + B8_Type proSeDirectCommPSSCH_PacketCounterListLength, /* Length of ProSe Direct Communication PSSCH Packet Counter(s) Value contents in bytes */ + ProSeDirectCommPSSCH_PacketCounterList_Type proSeDirectCommPSSCH_PacketCounterList /* ProSe Direct Communication PSSCH Packet Counter IE's */ + }; + + // ============================================================================= + // UE TEST LOOP MODE F SCPTM PACKET COUNTER REQUEST + // 3G TS 36.509 cl. 6.15 + // Direction: SS to UE + // ----------------------------------------------------------------------------- + type record UE_TESTLOOPMODEF_SCPTM_PACKETCOUNTERREQUEST { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + }; + + // ============================================================================= + // UE TEST LOOP MODE F SCPTM PACKET COUNTER RESPONSE + // 3G TS 36.509 cl. 6.16 + // Direction: UE to SS + // ----------------------------------------------------------------------------- + type record UE_TESTLOOPMODEF_SCPTM_PACKETCOUNTERRESPONSE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType, /* M V 1 */ + SCPTM_PacketCounterValue_Type sCPTM_PacketCounterValue /* M V 4 */ + }; +} with { encode "NAS Types"} diff --git a/ttcn/Lib3GPP/EPS_NAS/EPS_NAS_TypeDefs.ttcn b/ttcn/Lib3GPP/EPS_NAS/EPS_NAS_TypeDefs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..0b40c01e461a21ff33d0a6ac28d793d5be0afec0 --- /dev/null +++ b/ttcn/Lib3GPP/EPS_NAS/EPS_NAS_TypeDefs.ttcn @@ -0,0 +1,1455 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-10-26 11:05:35 +0200 (Wed, 26 Oct 2022) $ +// $Rev: 34526 $ +/******************************************************************************/ + +module EPS_NAS_TypeDefs { + + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + + //**************************************************************************** + // NAS PROTOCOL DEFINITIONS: IEs + //---------------------------------------------------------------------------- + // General Info Elements (24.301 cl. 9) + //---------------------------------------------------------------------------- + + type HalfOctet_Type EPS_BearerIdentity; /* 24.301 cl. 9.3.2 */ + + + // Note: This IE is not needed when SECURITY PROTECTED NAS MESSAGE is + // handled by the NAS emulation An alternative approach would be to + // implement NAS_Message as a union of all NAS messages except + // SECURITY PROTECTED NAS MESSAGE and SERVICE REQUEST - but this would + // have impact on codec implementation and may reduce readability */ + type octetstring NAS_Message; /* 24.301 cl. 9.7 */ + + type O2_Type EPS_MmeGi; + type O1_Type EPS_Mmec; + type O4_Type EPS_M_Tmsi; + type O5_Type EPS_S_Tmsi; + + type B2_Type EPS_PartialTaiListType; + type B4_Type EPS_ServiceTypeValue; + type B3_Type EPS_UpdateTypeValue; + + type O2_Type NAS_Tac; + + //---------------------------------------------------------------------------- + // Common Info Elements (24.301 cl. 9.9.2) + //---------------------------------------------------------------------------- + + type record TrackingAreaId { /* 24.301 cl. 9.9.3.32 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + NAS_PlmnId plmnId, /* MCC + MNC 3 digits each */ + NAS_Tac tac /* TAC */ + }; + + type record length (1..16) of NAS_Tac NAS_TacList; + + type record PartialTai { + NAS_PlmnId plmnId, /* MCC + MNC 3 digits each */ + NAS_Tac tac + }; + + type record Type0Element { // @sic R5s100184 sic@ + NAS_PlmnId plmnId, /* MCC + MNC 3 digits each */ + NAS_TacList tacList + }; + + type record Type1Element { // @sic R5s100184 sic@ + PartialTai partialTac + }; + + type record length (1..16) of PartialTai PlmnAndTacs; + + type record Type2Element { // @sic R5s100184 sic@ + PlmnAndTacs plmnAndTacs + }; + + type record length (1..16) of Type0Element Type0List; + type record length (1..16) of Type1Element Type1List; + type record length (1..16) of Type2Element Type2List; + + type union PartialTaiType { + Type0List type0List, + Type1List type1List, + Type2List type2List + }; + + type record ListOfPartialTaiList { + B1_Type spareBit, + EPS_PartialTaiListType typeOfList, + B5_Type numberOfElements, + PartialTaiType partialTaiList // @sic R5s100184 sic@ + }; + + type record TrackingAreaIdList { /* 24.301 cl. 9.9.3.33 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel, + record length (1..16) of ListOfPartialTaiList listOfPartialTais + }; + + //**************************************************************************** + // NAS PROTOCOL DEFINITIONS: PDUs + //---------------------------------------------------------------------------- + // EPS mobility management messages (24.301 cl. 8.2) + //---------------------------------------------------------------------------- + + type record ATTACH_ACCEPT { /* 24.301 cl. 8.2.1 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.9.2.9 M V 1/2 */ + EPS_AttachResult epsAttachResult, /* cl. 9.9.3.10 M V 1/2 */ + GPRS_Timer t3412, /* cl. 9.9.3.16 M V 1 */ + TrackingAreaIdList taiList, /* cl. 9.9.3.33 M LV 7-97 */ + ESM_MessageContainer esmMessage, /* cl. 9.9.3.15 M LV-E 5-n @sic R5s110176 Baseline Moving sic@ */ + MobileIdentity guti optional, /* cl. 9.9.3.12 O TLV 13 IEI=0x50 */ + LocAreaId lai optional, /* cl. 9.9.2.2 O TV 6 IEI=0x13 */ + MobileIdentity msIdentity optional, /* cl. 9.9.2.3 O TLV 7-10 IEI=0x23 */ + EMM_Cause emmCause optional, /* cl. 9.9.3.9 O TV 2 IEI=0x53 */ + GPRS_Timer t3402 optional, /* cl. 9.9.3.16 O TV 2 IEI=0x17 */ + GPRS_Timer t3423 optional, /* cl. 9.9.3.16 O TV 2 IEI=0x59 */ + PLMN_List equivalentPlmns optional, /* cl. 9.9.2.8 O TLV 5-47 IEI=0x4a */ + EmergNumList emergencyNumberList optional, /* cl. 9.9.3.37 O TLV 5-50 IEI=0x34 */ + EPS_NetworkFeatureSupport epsNetworkFeatureSupport optional, /* cl.9.9.3.12A O TLV 3 IEI=0x64 @sic R5s100135 sic@ */ + AdditionalUpdateResult addUpdateResult optional, /* cl.9.9.3.0A O TV 1 IEI=0xF @sic R5s100135 sic@ */ + GPRS_Timer3 t3412ExtdValue optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x5E @sic R5s120178 Baseline Moving sic@*/ + GPRS_Timer2 t3324Value optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x6A @sic R5s150329 Baseline Moving sic@ */ + ExtdDRXParams extendedDRXParams optional, /* 24.008 cl. 10.5.5.32 O TLV 3 IEI=0x6E @sic R5s160711 Baseline Moving sic@*/ + DCN_ID dcnId optional, /* cl. 9.9.3.48 O TLV 4 IEI=0x65 @sic R5s170597 Baseline Moving sic@ */ + SMSServicesStatus smsServicesStatus optional, /* cl. 9.9.3.4b O TLV 1 IEI=0xE @sic R5s170597 Baseline Moving sic@ */ + Non3GPP_NW_ProvidedPolicies non3GPP_NW_ProvidedPolicies optional, /* cl. 9.9.3.49 O TLV 1 IEI=0xD @sic R5s170597 Baseline Moving sic@ */ + GPRS_Timer2 t3448 optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x6B @sic R5s170597 Baseline Moving sic@ */ + NetworkPolicy networkPolicy optional, /* cl. 9.9.3.52O TV 1 IEI=0xC @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ */ + GPRS_Timer3 t3447Value optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x6C @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ */ + ExtdEmergNumList xtdEmergencyNumList optional, /* cl. 9.9.3.37A O TLV-E 6-65538 IEI=0x7A @sic R5s180552 Baseline Moving 2018 Phase 2 sic@ */ + CipheringKeyData cipheringKeyData optional, /* cl. 9.9.3.56 O TLV-E 35-2291 IEI=0x7C @sic R5s180552 Baseline Moving 2018 Phase 2 sic@ */ + UERadioCapId ueRadioCapId optional, /* cl. 9.9.3.60 O TLV 3-n IEI=0x66 @sic R5s201386 Baseline Moving sic@ */ + UERadioCapIdDeletion ueRadioCapIdDeleteInd optional, /* cl. 9.9.3.61 O TV 1 IEI=0xB @sic R5s201386 Baseline Moving sic@ */ + WUSAssistInfo negotiatedWUSAssistInfo optional, /* cl. 9.9.3.62 O TLV 3-n IEI=0x35 @sic R5s201386 Baseline Moving sic@ */ + NB_S1_DRXParam negotiatedDRXinNB_S1 optional, /* cl. 9.9.3.63 O TLV 3 IEI=0x36 @sic R5s201386 Baseline Moving sic@ */ + IMSI_Offset negotiatedIMSI_Offset optional, /* cl. 9.9.3.64 O TLV 4 IEI=0x38 Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_Roaming optional, /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1D Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_RegProvService optional /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1E Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + type record ATTACH_COMPLETE { /* 24.301 cl. 8.2.2 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ESM_MessageContainer esmMessage /* cl. 9.9.3.15 M LV-E 5-n @sic R5s110176 Baseline Moving sic@ */ + }; + + type record ATTACH_REJECT { /* 24.301 cl. 8.2.3 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + EMM_Cause emmCause, /* cl. 9.9.3.9 M V 1 */ + ESM_MessageContainer esmMessage optional, /* cl. 9.9.3.15 M TLV-E 6-n IEI=0x78 @sic R5s110176 Baseline Moving sic@ */ + GPRS_Timer2 t3346 optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x5F @sic R5s120178 Baseline Moving sic@*/ + GPRS_Timer2 t3402 optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x16 @sic R5s120178 Baseline Moving sic@*/ + Extd_EMM_Cause extdEMMCause optional, /* cl. 9.9.3.26A O TV 1 IEI=0xA @sic R5s150329 Baseline Moving sic@ */ + GPRS_Timer3 lowerBoundTimerValue optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x1C Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_Roaming optional, /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1D Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_RegProvService optional /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1E Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + type record ATTACH_REQUEST { /* 24.301 cl. 8.2.4 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + NAS_KeySetIdentifier nasKeySetId, /* cl. 9.9.3.21 M V 1/2 */ + EPS_AttachType epsAttachType, /* cl. 9.9.3.11 M V 1/2 */ + MobileIdentity epsMobileIdentity, /* cl. 9.9.3.12 M LV 5-12 @sic R5s110176 Baseline Moving sic@ */ + UE_NetworkCap ueNetworkCapability, /* cl. 9.9.3.34 M LV 3-14 */ + ESM_MessageContainer esmMessage, /* cl. 9.9.3.15 M LV-E 5-n */ + PTMSI_Signature oldPtmsiSignature optional, /* cl 10.5.5.8 of 24.008 O TV 4 IEI=Ox19*/ + MobileIdentity additionalGuti optional, /* cl 9.9.3.12 O TLV 13 IEI=Ox50*/ + TrackingAreaId lastVisitedRegisteredTai optional, /* cl. 9.9.3.32 O TV 6 IEI=0x52 */ + DRXparameter drxParameter optional, /* cl. 9.9.3.8 O TV 3 IEI=Ox5c */ + MS_NetworkCap msNetworkCapability optional, /* cl. 9.9.3.20 O TLV 4-10 IEI=Ox31 */ + LocAreaId oldLai optional, /* cl. 9.9.2.2 O TV 6 IEI=0x13 */ + TMSI_Status tmsiStatus optional, /* cl. 9.9.2.31 O TV 1 IEI=0x9- */ + MS_Clsmk2 msClassmark2 optional, /* cl. 9.9.2.4 O TLV 5 IEI=0x11 */ + MS_Clsmk3 msClassmark3 optional, /* cl. 9.9.2.5 O TLV 2-34 IEI=0x20 */ + CodecList supportedCodecList optional, /* cl. 9.9.2.10 O TLV 5-n IEI=0x40 */ + AdditionalUpdateType addUpdateType optional, /* cl.9.9.3.0B O TV 1 IEI=0xF @sic R5s100135 sic@ */ + VoiceDomainPref voiceDomainPref optional, /* cl.9.9.3.44 O TLV 3 IEI=0x5D @sic R5s110176 Baseline Moving sic@ */ + DeviceProperties deviceProperties optional, /* cl. 9.9.2.0A O TV 1 IEI=0xD- @sic R5s120178 Baseline Moving sic@*/ + GUTI_Type oldGUTI_Type optional, /* cl. 9.9.3.45 O TV 1 IEI=0xE- @sic R5s120178 Baseline Moving sic@*/ + MS_NetworkFeatureSupport msNetworkFeatureSupport optional, /* cl. 9.9.2.0A O TV 1 IEI=0xC- @sic R5s120178 Baseline Moving sic@*/ + NwkResourceId tmsiBasedNRIContainer optional, /* cl. 10.5.5.31 O TLV 4 IEI=0x10 @sic R5s130195 Baseline Moving sic@*/ + GPRS_Timer2 t3324Value optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x6A @sic R5s150329 Baseline Moving sic@ */ + GPRS_Timer3 t3412ExtdValue optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x5E @sic R5s150329 Baseline Moving sic@*/ + ExtdDRXParams extendedDRXParams optional, /* 24.008 cl. 10.5.5.32 O TLV 3 IEI=0x6E @sic R5s160711 Baseline Moving sic@*/ + UE_AdditionalSecurityCapability ueAddSecurityCap optional, /* cl. 9.9.3.53 O TLV 6 IEI=0x6F @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ */ + UE_Status ueStatus optional, /* cl. 9.9.3.54 O TLV 3 IEI=0x6D @sic R5s180552 Baseline Moving 2018 Phase 2 sic@ */ + AdditionalInfoReq addInfoReq optional, /* cl. 9.9.3.55 O TLV 2 IEI=0x17 @sic R5s180552 Baseline Moving 2018 Phase 2 sic@ */ + N1_UENetworkCap n1UENetworkCap optional, /* cl. 9.9.3.57 O TLV 3-15 IEI=0x32 @sic R5s201386 Baseline Moving sic@ */ + UERadioCapIdAvailability ueRadioCapIdAvailability optional, /* cl. 9.9.3.58 O TLV 3 IEI=0x34 @sic R5s201386 Baseline Moving sic@ */ + WUSAssistInfo requestedWUSAssistInfo optional, /* cl. 9.9.3.62 O TLV 3-n IEI=0x35 @sic R5s201386 Baseline Moving sic@ */ + NB_S1_DRXParam drxInNB_S1 optional, /* cl. 9.9.3.63 O TLV 3 IEI=0x36 @sic R5s201386 Baseline Moving sic@ */ + IMSI_Offset requestedIMSI_Offset optional /* cl. 9.9.3.64 O TLV 4 IEI=0x38 Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + type record AUTHENTICATION_FAILURE { /* 24.301 cl. 8.2.5 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + EMM_Cause emmCause, /* cl. 9.9.3.9 M V 1 */ + AuthenticationFailureParameter authenticationFailureParameter optional /* cl. 9.9.3.1 O TLV 16 IEI=0x30 */ + }; + + type record AUTHENTICATION_REJECT { /* 24.301 cl. 8.2.6 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType /* cl. 9.8 M V 1 */ + }; + + type record AUTHENTICATION_REQUEST { /* 24.301 cl. 8.2.7 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.9.2.9 M V 1/2 */ + NAS_KeySetIdentifier asmeNasKeySetId, /* cl. 9.9.3.21 M V 1/2 */ + RAND rand, /* cl. 9.9.3.3 M V 16 */ + AUTN autn /* cl. 9.9.3.2 M LV 17 */ + }; + + type record AUTHENTICATION_RESPONSE { /* 24.301 cl. 8.2.8 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + AuthenticationResponseParameter authenticationResponseParameter /* cl. 9.9.3.4 M LV 5-17 */ + }; + + type record CS_SERVICE_NOTIFICATION { /* 24.301 cl. 8.2.9 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + PagingIdentity pagingIdentity, /* cl. 9.9.3.25A M V 1 @sic R5s100135 sic@ */ + CLI cli optional, /* cl. 9.9.3.38 O TLV 3-14 IEI=0x60 */ + SsCode ssCode optional, /* cl. 9.9.3.39 O TV 2 IEI=0x61 */ + LcsIndicator lcsIndicator optional, /* cl. 9.9.3.40 O TV 2 IEI=0x62 */ + LcsClientIdentity lcsClientIdentity optional /* cl. 9.9.3.41 O TLV 3-257 IEI=0x63 */ + }; + + type record DETACH_ACCEPT { /* 24.301 cl. 8.2.10.1/2 (both directions) + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType /* cl. 9.8 M V 1 */ + }; + + type record DETACH_REQUEST_MO { /* 24.301 cl. 8.2.11.1 (UE originating detach) + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + NAS_KeySetIdentifier asmeNasKeySetId, /* cl. 9.9.3.21 M V 1/2 */ + DetachType detachType, /* cl. 9.9.3.7 M V 1/2 */ + MobileIdentity epsMobileIdentity /* cl. 9.9.3.12 M LV 5-12 @sic R5s110176 Baseline Moving sic@ */ + }; + + type record DETACH_REQUEST_MT { /* 24.301 cl. 8.2.11.2 (UE terminated detach) + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.9.2.9 M V 1/2 */ + DetachType detachType, /* cl. 9.9.3.7 M V 1/2 */ + EMM_Cause emmCause optional, /* cl. 9.9.3.9 O TV 2 IEI=0x53 */ + GPRS_Timer3 lowerBoundTimerValue optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x1C Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_Roaming optional, /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1D Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_RegProvService optional /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1E Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + type record DL_NAS_TRANSPORT { /* 24.301 cl. 8.2.12 + Significance: local + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + NAS_MessageContainer nasMessage /* cl. 9.9.3.22 M LV 3-252 */ + }; + + type record EMM_INFORMATION { /* 24.301 cl. 8.2.13 + Significance: local + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + NetworkName fullNetworkName optional, /* cl. 9.9.3.24 O TLV 3-? IEI=0x43 */ + NetworkName shortNetworkName optional, /* cl. 9.9.3.24 O TLV 3-? IEI=0x45 */ + TimeZone localTimeZone optional, /* cl. 9.9.3.29 O TV 2 IEI=0x46 */ + TimeZoneAndTime localTimeZoneAndTime optional, /* cl. 9.9.3.30 O TV 8 IEI=0x47 */ + DaylightSavingTime daylightSavingTime optional /* cl. 9.9.3.6 O TLV 3 IEI=0x49 */ + }; + + type record EMM_STATUS { /* 24.301 cl. 8.2.14 + Significance: local + Direction: both */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + EMM_Cause emmCause /* cl. 9.9.3.9 M V 1 */ + }; + + type record EXT_SERVICE_REQUEST { /* 24.301 cl. 8.2.15 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + NAS_KeySetIdentifier nasKeySetId, /* cl. 9.9.3.21 M V 1/2 */ + EPS_ServiceType serviceType, /* cl. 9.9.3.27 M V 1/2 */ + MobileIdentity mTMSI, /* cl. 9.9.2.3 M LV 6 */ + CSFBResponse csfbResponse optional, /* cl. 9.9.3.5 C TV 1 IEI=0xB- */ + EPS_BearerContextStatus epsBearerContextStatus optional, /* cl. 9.9.2.1 O TLV 4 IEI=0x57 @sic R5s110176 Baseline Moving sic@ */ + DeviceProperties deviceProperties optional, /* cl. 9.9.2.0A O TV 1 IEI=0xD- @sic R5s120178 Baseline Moving sic@*/ + UE_RequestType ueRequestType optional, /* cl. 9.9.3.65 O TLV 3 IEI=0x29 Sep22 @sic R5s221178 Baseline Moving sic@ */ + PagingRestriction pagingRestriction optional /* cl. 9.9.3.66 O TLV 3-5 IEI=0x28 Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + type record GUTI_REALLOCATION_COMMAND { /* 24.301 cl. 8.2.16 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + MobileIdentity guti, /* cl. 9.9.3.12 M LV 12 */ + TrackingAreaIdList taiList optional, /* cl. 9.9.3.33 O TLV 8-98 IEI=0x54 */ + DCN_ID dcnId optional, /* cl. 9.9.3.48 O TLV 4 IEI=0x65 @sic R5s170597 Baseline Moving sic@ */ + UERadioCapId ueRadioCapId optional, /* cl. 9.9.3.60 O TLV 3-n IEI=0x66 @sic R5s201386 Baseline Moving sic@ */ + UERadioCapIdDeletion ueRadioCapIdDeleteInd optional /* cl. 9.9.3.61 O TV 1 IEI=0xB @sic R5s201386 Baseline Moving sic@ */ + }; + + type record GUTI_REALLOCATION_COMPLETE { /* 24.301 cl. 8.2.17 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType /* cl. 9.8 M V 1 */ + }; + + type record IDENTITY_REQUEST { /* 24.301 cl. 8.2.18 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.9.2.9 M V 1/2 */ + IdentityType identityType2 /* cl. 9.9.3.17 M V 1/2 */ + }; + + type record IDENTITY_RESPONSE { /* 24.301 cl. 8.2.19 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + MobileIdentity mobileIdentity /* cl. 9.9.2.3 M LV 4-10 */ + }; + + type record SECURITY_MODE_COMMAND { /* 24.301 cl. 8.2.20 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + NAS_SecurityAlgorithms nasSecurityAlgorithms, /* cl. 9.9.3.23 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.9.2.9 M V 1/2 */ + NAS_KeySetIdentifier asmeNasKeySetId, /* cl. 9.9.3.21 M V 1/2 */ + UE_SecurityCapability replayedSecurityCapability, /* cl. 9.9.3.36 M LV 3-6 */ + IMEISV_Request imeisvRequest optional, /* cl. 9.9.3.18 O TV 1 IEI=0xC- */ + Nonce replayedNonceUe optional, /* cl. 9.9.3.25 O TV 5 IEI=0x55 */ + Nonce nonceMme optional, /* cl. 9.9.3.25 O TV 5 IEI=0x56 */ + HashMME hashMME optional, /* cl. 9.9.3.50 O TLV 10 IEI=0x4F @sic R5s170597 Baseline Moving sic@ */ + UE_AdditionalSecurityCapability replayedUEAddSecurityCap optional, // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + UERadioCapIdRequest ueRadioCapIdRequest optional /* cl. 9.9.3.59 O TLV 3 IEI=0x37 @sic R5s201386 Baseline Moving sic@ */ + }; + + type record SECURITY_MODE_COMPLETE { /* 24.301 cl. 8.2.21 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + MobileIdentity imeisv optional, /* cl. 9.9.2.3 O TLV 11 IEI=0x23 */ + ReplayedNASMessageContainer replayedNASMsg optional, /* cl. 9.9.3.51 O TLV-E 3-n IEI=0x79 @sic R5s170597 Baseline Moving sic@ */ + UERadioCapId ueRadioCapId optional /* cl. 9.9.3.60 O TLV 3-n IEI=0x66 @sic R5s201386 Baseline Moving sic@ */ + }; + + type record SECURITY_MODE_REJECT { /* 24.301 cl. 8.2.22 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + EMM_Cause emmCause /* cl. 9.9.3.9 M V 1 */ + }; + + type record SECURITY_PROTECTED_NAS_MESSAGE { /* 24.301 cl. 8.2.23 + Significance: dual + Direction: both */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageAuthenticationCode messageAuthenticationCode, /* cl. 9.5 M V 4 */ + NAS_SequenceNumber sequenceNumber, /* cl. 9.6 M V 1 */ + NAS_Message nasMessage /* cl. 9.7 M V 1-n */ + }; + + type record SERVICE_REJECT { /* 24.301 cl. 8.2.24 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + EMM_Cause emmCause, /* cl. 9.9.3.9 M V 1 */ + GPRS_Timer t3442 optional, /* cl. 9.9.3.16 C TV 2 IEI=0x5b */ + GPRS_Timer2 t3346 optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x5F @sic R5s120178 Baseline Moving sic@ */ + GPRS_Timer2 t3448 optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x6B @sic R5s170597 Baseline Moving sic@ */ + GPRS_Timer3 lowerBoundTimerValue optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x1C Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_Roaming optional, /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1D Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_RegProvService optional /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1E Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + type record SERVICE_REQUEST { /* 24.301 cl. 8.2.25 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + KSIandSN ksiAndSN, /* cl. 9.9.3.19 M V 1 */ + ShortMAC shortMAC /* cl. 9.9.3.28 M V 2 */ + }; + + type record TRACKING_AREA_UPDATE_ACCEPT { /* 24.301 cl. 8.2.26 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.9.2.9 M V 1/2 */ + EPS_UpdateResult epsUpdateResult, /* cl. 9.9.3.13 M V 1/2 */ + GPRS_Timer t3412 optional, /* cl. 9.9.3.16 O TV 2 IEI=0x5a */ + MobileIdentity guti optional, /* cl. 9.9.3.12 O TLV 13 IEI=0x50 */ + TrackingAreaIdList taiList optional, /* cl. 9.9.3.33 O TLV 8-98 IEI=0x54 */ + EPS_BearerContextStatus epsBearerContextStatus optional, /* cl. 9.9.2.1 O TLV 4 IEI=0x57 */ + LocAreaId lai optional, /* cl. 9.9.2.2 O TV 6 IEI=0x13 */ + MobileIdentity msIdentity optional, /* cl. 9.9.2.3 O TLV 7-10 IEI=0x23 */ + EMM_Cause emmCause optional, /* cl. 9.9.3.9 O TV 2 IEI=0x53 */ + GPRS_Timer t3402 optional, /* cl. 9.9.3.16 O TV 2 IEI=0x17 */ + GPRS_Timer t3423 optional, /* cl. 9.9.3.16 O TV 2 IEI=0x59 */ + PLMN_List equivalentPlmns optional, /* cl. 9.9.2.8 O TLV 5-47 IEI=0x4a */ + NAS_KeySetIdentifier asmeNasKeySetId optional, /* cl. 9.9.3.21 O TV 1 IEI=0x8-*/ + EmergNumList emergencyNumberList optional, /* cl. 9.9.3.37 O TLV 5-50 IEI=0x34 */ + EPS_NetworkFeatureSupport epsNetworkFeatureSupport optional, /* cl.9.9.3.12A O TLV 3 IEI=0x64 @sic R5s100135 sic@ */ + AdditionalUpdateResult addUpdateResult optional, /* cl.9.9.3.0A O TV IEI=0xF @sic R5s100135 sic@ */ + GPRS_Timer3 t3412ExtdValue optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x5E @sic R5s120178 Baseline Moving sic@*/ + GPRS_Timer2 t3324Value optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x6A @sic R5s150329 Baseline Moving sic@ */ + ExtdDRXParams extendedDRXParams optional, /* 24.008 cl. 10.5.5.32 O TLV 3 IEI=0x6E @sic R5s160711 Baseline Moving sic@*/ + HeaderCompressConfigStatus headerCompressionConfigStatus optional, /* cl. 9.9.4.27 O TLV 4 IEI=0x68 @sic R5s160711 Baseline Moving sic@ */ + DCN_ID dcnId optional, /* cl. 9.9.3.48 O TLV 4 IEI=0x65 @sic R5s170597 Baseline Moving sic@ */ + SMSServicesStatus smsServicesStatus optional, /* cl. 9.9.3.4b O TLV 1 IEI=0xE @sic R5s170597 Baseline Moving sic@ */ + Non3GPP_NW_ProvidedPolicies non3GPP_NW_ProvidedPolicies optional, /* cl. 9.9.3.49 O TLV 1 IEI=0xD @sic R5s170597 Baseline Moving sic@ */ + GPRS_Timer2 t3448 optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x6B @sic R5s170597 Baseline Moving sic@ */ + NetworkPolicy networkPolicy optional, // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + GPRS_Timer3 t3447Value optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x6C @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ */ + ExtdEmergNumList xtdEmergencyNumList optional, /* cl. 9.9.3.37A O TLV-E 6-65538 IEI=0x7A @sic R5s180552 Baseline Moving 2018 Phase 2 sic@ */ + CipheringKeyData cipheringKeyData optional, /* cl. 9.9.3.56 O TLV-E 35-2291 IEI=0x7C @sic R5s180552 Baseline Moving 2018 Phase 2 sic@ */ + UERadioCapId ueRadioCapId optional, /* cl. 9.9.3.60 O TLV 3-n IEI=0x66 @sic R5s201386 Baseline Moving sic@ */ + UERadioCapIdDeletion ueRadioCapIdDeleteInd optional, /* cl. 9.9.3.61 O TV 1 IEI=0xB @sic R5s201386 Baseline Moving sic@ */ + WUSAssistInfo negotiatedWUSAssistInfo optional, /* cl. 9.9.3.62 O TLV 3-n IEI=0x35 @sic R5s201386 Baseline Moving sic@ */ + NB_S1_DRXParam negotiatedDRXinNB_S1 optional, /* cl. 9.9.3.63 O TLV 3 IEI=0x36 @sic R5s201386 Baseline Moving sic@ */ + IMSI_Offset negotiatedIMSI_Offset optional, /* cl. 9.9.3.64 O TLV 4 IEI=0x38 Sep22 @sic R5s221178 Baseline Moving sic@ */ + EPS_AddReqResult epsAddRequestResult optional, /* cl. 9.9.3.67 O TLV 3 IEI=0x37 Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_Roaming optional, /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1D Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_RegProvService optional /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1E Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + type record TRACKING_AREA_UPDATE_COMPLETE { /* 24.301 cl. 8.2.27 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType /* cl. 9.8 M V 1 */ + }; + + type record TRACKING_AREA_UPDATE_REJECT { /* 24.301 cl. 8.2.28 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + EMM_Cause emmCause, /* cl. 9.9.3.9 M V 1 */ + GPRS_Timer2 t3346 optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x5F @sic R5s120178 Baseline Moving sic@*/ + Extd_EMM_Cause extdEMMCause optional, /* cl. 9.9.3.26A O TV 1 IEI=0xA @sic R5s150329 Baseline Moving sic@ */ + GPRS_Timer3 lowerBoundTimerValue optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x1C Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_Roaming optional, /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1D Sep22 @sic R5s221178 Baseline Moving sic@ */ + TrackingAreaIdList forbidTAIList_RegProvService optional /* cl. 9.9.3.33 O TLV 8-98 IEI=0x1E Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + type record TRACKING_AREA_UPDATE_REQUEST { /* 24.301 cl. 8.2.29 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + NAS_KeySetIdentifier asmeNasKeySetId, /* cl. 9.9.3.21 M V 1/2 */ + EPS_UpdateType epsUpdateType, /* cl. 9.9.3.14 M V 1/2 */ + MobileIdentity oldGuti, /* cl. 9.9.3.12 M LV 12 */ + NAS_KeySetIdentifier nonCurrentNativeNasKeySetId optional, /* cl. 9.9.3.21 O TV 1 IEI=0xB- */ + CiphKeySeqNum gprsCipheringKeySeqNum optional, /* cl. 9.9.3.4a O TV 1 IEI=0x8- @sic R5s100135 sic@ */ + PTMSI_Signature oldPtmsiSignature optional, /* cl. 9.9.3.26 O TV 4 IEI=0x19 */ + MobileIdentity additionalGuti optional, /* cl. 9.9.3.12 O TLV 13 IEI=0x50 */ + Nonce nonce optional, /* cl. 9.9.3.25 O TV 5 IEI=0x55 */ + UE_NetworkCap ueNetworkCapability optional, /* cl. 9.9.3.34 O TLV 4-10 IEI=0x58 */ + TrackingAreaId lastVisitedRegisteredTai optional, /* cl. 9.9.3.32 O TV 6 IEI=0x52 */ + DRXparameter drxParameter optional, /* cl. 9.9.3.8 O TV 3 IEI=Ox5c */ + UERadioCapInfoUpdateNeeded ueRadioCapNeeded optional, /* cl. 9.9.3.35 O TV 1 IEI=OxA- */ + EPS_BearerContextStatus epsBearerContextStatus optional, /* cl. 9.9.2.1 O TLV 4 IEI=0x57 */ + MS_NetworkCap msNetworkCapability optional, /* cl. 9.9.3.20 O TLV 4-10 IEI=0x31 */ + LocAreaId oldLai optional, /* cl. 9.9.2.2 O TV 6 IEI=0x13 */ + TMSI_Status tmsiStatus optional, /* cl. 9.9.2.31 O TV 1 IEI=0x9- */ + MS_Clsmk2 msClassmark2 optional, /* cl. 9.9.2.4 O TLV 5 IEI=0x11 */ + MS_Clsmk3 msClassmark3 optional, /* cl. 9.9.2.5 O TLV 2-34 IEI=0x20 */ + CodecList supportedCodecList optional, /* cl. 9.9.2.10 O TLV 5-n IEI=0x40 */ + AdditionalUpdateType addUpdateType optional, /* cl.9.9.3.0B O TV IEI=0xF @sic R5s100135 sic@ */ + VoiceDomainPref voiceDomainPref optional, /* cl.9.9.3.44 O TLV 3 IEI=0x5D @sic R5s110176 Baseline Moving sic@ */ + GUTI_Type oldGUTI_Type optional, /* cl. 9.9.3.45 O TV 1 IEI=0xE- @sic R5s120178 Baseline Moving sic@*/ + DeviceProperties deviceProperties optional, /* cl. 9.9.2.0A O TV 1 IEI=0xD- @sic R5s120178 Baseline Moving sic@*/ + MS_NetworkFeatureSupport msNetworkFeatureSupport optional, /* cl. 9.9.2.0A O TV 1 IEI=0xC- @sic R5s120178 Baseline Moving sic@*/ + NwkResourceId tmsiBasedNRIContainer optional, /* cl. 10.5.5.31 O TLV 4 IEI=0x10 @sic R5s130195 Baseline Moving sic@*/ + GPRS_Timer2 t3324Value optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x6A @sic R5s150329 Baseline Moving sic@ */ + GPRS_Timer3 t3412ExtdValue optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x5E @sic R5s150329 Baseline Moving sic@*/ + ExtdDRXParams extendedDRXParams optional, /* 24.008 cl. 10.5.5.32 O TLV 3 IEI=0x6E @sic R5s160711 Baseline Moving sic@*/ + UE_AdditionalSecurityCapability ueAddSecurityCap optional, /* cl. 9.9.3.53 O TLV 6 IEI=0x6F @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ */ + UE_Status ueStatus optional, /* cl. 9.9.3.54 O TLV 3 IEI=0x6D @sic R5s180552 Baseline Moving 2018 Phase 2 sic@ */ + AdditionalInfoReq addInfoReq optional, /* cl. 9.9.3.55 O TLV 2 IEI=0x17 @sic R5s180552 Baseline Moving 2018 Phase 2 sic@ */ + N1_UENetworkCap n1UENetworkCap optional, /* cl. 9.9.3.57 O TLV 3-15 IEI=0x32 @sic R5s201386 Baseline Moving sic@ */ + UERadioCapIdAvailability ueRadioCapIdAvailability optional, /* cl. 9.9.3.58 O TV 3 IEI=0x34 @sic R5s201386 Baseline Moving sic@ */ + WUSAssistInfo requestedWUSAssistInfo optional, /* cl. 9.9.3.62 O TLV 3-n IEI=0x35 @sic R5s201386 Baseline Moving sic@ */ + NB_S1_DRXParam drxInNB_S1 optional, /* cl. 9.9.3.63 O TLV 3 IEI=0x36 @sic R5s201386 Baseline Moving sic@ */ + IMSI_Offset requestedIMSI_Offset optional, /* cl. 9.9.3.64 O TLV 4 IEI=0x38 Sep22 @sic R5s221178 Baseline Moving sic@ */ + UE_RequestType ueRequestType optional, /* cl. 9.9.3.65 O TLV 3 IEI=0x29 Sep22 @sic R5s221178 Baseline Moving sic@ */ + PagingRestriction pagingRestriction optional /* cl. 9.9.3.66 O TLV 3-5 IEI=0x28 Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + type record UL_NAS_TRANSPORT { /* 24.301 cl. 8.2.30 + Significance: local + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + NAS_MessageContainer nasMessage /* cl. 9.9.3.22 M LV 3-252 */ + }; + + type record DL_GENERIC_NAS_TRANSPORT{ /* 24.301 cl. 8.2.31 + Significance: dual + Direction: network to UE @sic R5s110176 Baseline Moving sic@ */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + GenericMessageContainerType genericMessageContainerType, /* cl. 9.9.3.42 M V 1 */ + GenericMessageContainer genericMessageContainer, /* cl. 9.9.3.43 M LV-E 3-n */ + AdditionalInformation additionalInformation optional /* cl. 9.9.2.0 O TLV 3-n IEI=65 */ + }; + + type record UL_GENERIC_NAS_TRANSPORT{ /* 24.301 cl. 8.2.32 + Significance: dual + Direction: UE to network @sic R5s110176 Baseline Moving sic@ */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + GenericMessageContainerType genericMessageContainerType, /* cl. 9.9.3.42 M V 1 */ + GenericMessageContainer genericMessageContainer, /* cl. 9.9.3.43 M LV-E 3-n */ + AdditionalInformation additionalInformation optional /* cl. 9.9.2.0 O TLV 3-n IEI=65 */ + }; + + type record CONTROL_PLANE_SERVICE_REQUEST { /* 24.301 cl. 8.2.33 + Significance: dual + Direction: UE to network */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + NAS_KeySetIdentifier nasKeySetId, /* cl. 9.9.3.21 M V 1/2 */ + ControlPlaneServiceType controlPlaneServiceType, /* cl. 9.9.3.47 M V 1/2 @sic R5s170597 Baseline Moving sic@ */ + ESM_MessageContainer esmMessage optional, /* cl. 9.9.3.15 O TLV-E 3-n IEI = 78 */ + NAS_MessageContainer nasMessage optional, /* cl. 9.9.3.22 O TLV 4-253 IEI = 67 */ + EPS_BearerContextStatus epsBearerContextStatus optional, /* cl. 9.9.2.1 O TLV 4 IEI=0x57*/ + DeviceProperties deviceProperties optional, /* cl. 9.9.2.0A O TV 1 IEI=0xD- */ + UE_RequestType ueRequestType optional, /* cl. 9.9.3.65 O TLV 3 IEI=0x29 Sep22 @sic R5s221178 Baseline Moving sic@ */ + PagingRestriction pagingRestriction optional /* cl. 9.9.3.66 O TLV 3-5 IEI=0x28 Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + type record SERVICE_ACCEPT { /* 24.301 cl. 8.2.34 + Significance: dual + Direction: network to UE */ + SecurityHeaderType securityHeaderType, /* cl. 9.3.1 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + EPS_BearerContextStatus epsBearerContextStatus optional, /* cl. 9.9.2.1 O TLV 4 IEI=0x57 */ + GPRS_Timer2 t3448 optional, /* cl. 9.9.3.16A O TLV 3 IEI=0x6B @sic R5s170597 Baseline Moving sic@ */ + EPS_AddReqResult epsAddRequestResult optional /* cl. 9.9.3.67 O TLV 3 IEI=0x37 Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + //---------------------------------------------------------------------------- + // EPS session management messages (24.301 cl. 8.3) + //---------------------------------------------------------------------------- + + type record ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT { /* 24.301 cl. 8.3.1 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27*/ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT { /* 24.301 cl. 8.3.2 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ESM_Cause esmCause, /* cl. 9.9.4.4 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST { /* 24.301 cl. 8.3.3 + Significance: dual + Direction: network to UE */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.9.2.9 M V 1/2 */ + LinkedEpsBearerIdentity linkedEpsBearerId, /* cl. 9.9.4.6 M V 1/2 */ + EPS_QualityOfService epsQos, /* cl. 9.9.4.3 M LV 2-14 */ + TrafficFlowTemplate tft, /* cl. 9.9.4.16 M LV 2-256 */ + TransactionIdentifier transactionIdentifier optional, /* cl. 9.9.4.17 O TLV 3-4 IEI=0x5d */ + QualityOfService negotiatedQos optional, /* cl. 9.9.4.12 O TLV 14-22 IEI=0x30 */ + LLC_SAPI negotiatedLlcSapi optional, /* cl. 9.9.4.7 O TV 2 IEI=0x32 */ + RadioPriority radioPriority optional, /* cl. 9.9.4.13 O TV 1 IEI=0x8- */ + PacketFlowIdentifier packetFlowIdentifier optional, /* cl. 9.9.4.8 O TLV 3 IEI=0x34 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + WLANOffloadAcceptability wlanOffloadInd optional, /* cl. 9.9.4.18 O TLV 1 IEI=0xC @sic R5s150329 Baseline Moving sic@*/ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional, /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + Extd_EPS_QOS extd_EPS_QOS optional // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + }; + + type record ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT { /* 24.301 cl. 8.3.4 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT { /* 24.301 cl. 8.3.5 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ESM_Cause esmCause, /* cl. 9.9.4.4 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST { /* 24.301 cl. 8.3.6 + Significance: dual + Direction: network to UE */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + EPS_QualityOfService epsQos, /* cl. 9.9.4.3 M LV 2-14 */ + AccessPointName accessPointName, /* cl. 9.9.4.1 M LV 2-101 */ + PDN_Address pdnAdress, /* cl. 9.9.4.9 M LV 6-14 */ + TransactionIdentifier transactionIdentifier optional, /* cl. 9.9.4.17 O TLV 3-4 IEI=0x5d */ + QualityOfService negotiatedQos optional, /* cl. 9.9.4.12 O TLV 14-22 IEI=0x30 */ + LLC_SAPI negotiatedLlcSapi optional, /* cl. 9.9.4.7 O TV 2 IEI=0x32 */ + RadioPriority radioPriority optional, /* cl. 9.9.4.13 O TV 1 IEI=0x8- */ + PacketFlowIdentifier packetFlowIdentifier optional, /* cl. 9.9.4.8 O TLV 3 IEI=0x34 */ + APN_AMBR apnAggMaxBitRate optional, /* cl. 9.9.4.2 O TLV 4-8 IEI=0x5e */ + ESM_Cause esmCause optional, /* cl. 9.9.4.4 O TV 2 IEI=0x58 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + ConnectivityType connectivityType optional, /* cl. 9.9.2.0A O TV 1 IEI=0xB- @sic R5s120178 Baseline Moving sic@*/ + WLANOffloadAcceptability wlanOffloadInd optional, /* cl. 9.9.4.18 O TV 1 IEI=0xC @sic R5s150329 Baseline Moving sic@*/ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + HeaderCompressConfig headerCompressionConfig optional, /* cl. 9.9.4.22 O TLV 6-257 IEI=0x66 @sic R5s160711 Baseline Moving sic@*/ + ControlPlaneInd controlPlaneOnlyIndication optional, /* cl. 9.9.4.23 O TV 1 IEI=0x9- @sic R5s160711 Baseline Moving sic@ */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional, /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + ServingPLMNRateControl servingPLMNRateControl optional, /* cl. 9.9.4.28 O TLV 4 IEI=0x6E @sic R5s160711 Baseline Moving sic@ */ + Extd_APN_AMBR extd_APN_AMBR optional // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + }; + + type record BEARER_RESOURCE_ALLOCATION_REJECT { /* 24.301 cl. 8.3.7 + Significance: dual + Direction: network to UE */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ESM_Cause esmCause, /* cl. 9.9.4.4 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + GPRS_Timer3 backOffTimerValue optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x37 @sic R5s120178, R5s150329 Baseline Moving sic@ Was T3396 Value*/ + ReAttemptIndicator reattemptInd optional, /* cl. 9.9.4.13A O TLV 3 IEI=0x6B @sic R5s150329 Baseline Moving sic@*/ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record BEARER_RESOURCE_ALLOCATION_REQUEST { /* 24.301 cl. 8.3.8 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.9.2.9 M V 1/2 */ + LinkedEpsBearerIdentity linkedEpsBearerId, /* cl. 9.9.4.6 M V 1/2 */ + TrafficFlowTemplate trafficFlowAgg, /* cl. 9.9.4.15 M LV 2-256 */ + EPS_QualityOfService requiredTrafficFlowQoS, /* cl. 9.9.4.3 M LV 2-14 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + DeviceProperties deviceProperties optional, /* cl. 9.9.2.0A O TV 1 IEI=0xC- @sic R5s120178 Baseline Moving sic@*/ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional, /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + Extd_EPS_QOS extd_EPS_QOS optional // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + }; + + type record BEARER_RESOURCE_MODIFICATION_REJECT { /* 24.301 cl. 8.3.9 + Significance: dual + Direction: network to UE */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ESM_Cause esmCause, /* cl. 9.9.4.4 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + GPRS_Timer3 backOffTimerValue optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x37 @sic R5s120178, R5s150329 Baseline Moving sic@ Was T3396 Value*/ + ReAttemptIndicator reattemptInd optional, /* cl. 9.9.4.13A O TLV 3 IEI=0x6B @sic R5s150329 Baseline Moving sic@*/ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record BEARER_RESOURCE_MODIFICATION_REQUEST { /* 24.301 cl. 8.3.10 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.9.2.9 M V 1/2 */ + LinkedEpsBearerIdentity epsBearerIdentityforPacketFilter, /* cl. 9.9.4.6 M V 1/2 */ + TrafficFlowTemplate trafficFlowAgg, /* cl. 9.9.4.15 M LV 2-256 */ + EPS_QualityOfService requiredTrafficFlowQoS optional, /* cl. 9.9.4.3 O TLV 3-15 IEI=0x5b @sic R5s100692 sic@ */ + ESM_Cause esmCause optional, /* cl. 9.9.4.4 O TV 2 IEI=0x58 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + DeviceProperties deviceProperties optional, /* cl. 9.9.2.0A O TV 1 IEI=0xC- @sic R5s120178 Baseline Moving sic@*/ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + HeaderCompressConfig headerCompressionConfig optional, /* cl. 9.9.4.22 O TLV 3-TBD IEI=0x66 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional, /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + Extd_EPS_QOS extd_EPS_QOS optional // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + }; + + type record DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT { /* 24.301 cl. 8.3.11 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST { /* 24.301 cl. 8.3.12 + Significance: dual + Direction: network to UE */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ESM_Cause esmCause, /* cl. 9.9.4.4 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.8 O TLV 3-253 IEI=0x27 */ + GPRS_Timer3 t3396Value optional, /* cl. 10.5.7.4a O TLV 3 IEI=0x37 @sic R5s130195 Baseline Moving sic@*/ + WLANOffloadAcceptability wlanOffloadInd optional, /* cl. 9.9.4.18 O TV 1 IEI=0xC @sic R5s150329 Baseline Moving sic@*/ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record ESM_DUMMY_MESSAGE { /* 24.301 cl. 8.3.12A + Significance: dual + Direction: both */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType /* cl. 9.8 M V 1 */ + }; + + + + type record ESM_INFORMATION_REQUEST { /* 24.301 cl. 8.3.13 + Significance: dual + Direction: network to UE */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType /* cl. 9.8 M V 1 */ + }; + + type record ESM_INFORMATION_RESPONSE { /* 24.301 cl. 8.3.14 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + AccessPointName accessPointName optional, /* cl. 9.9.4.1 O TLV 3-102 IEI=0x28 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record ESM_STATUS { /* 24.301 cl. 8.3.15 + Significance: dual + Direction: both */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ESM_Cause esmCause /* cl. 9.9.4.4 M V 1 */ + }; + + type record MODIFY_EPS_BEARER_CONTEXT_ACCEPT { /* 24.301 cl. 8.3.16 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record MODIFY_EPS_BEARER_CONTEXT_REJECT { /* 24.301 cl. 8.3.17 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ESM_Cause esmCause, /* cl. 9.9.4.4 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record MODIFY_EPS_BEARER_CONTEXT_REQUEST { /* 24.301 cl. 8.3.18 + Significance: dual + Direction: network to UE */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + EPS_QualityOfService newEPSQos optional, /* cl. 9.9.4.3 O TLV 3-15 IEI=0x5b */ + TrafficFlowTemplate tft optional, /* cl. 9.9.4.16 O TLV 3-257 IEI=0x36 */ + QualityOfService newQos optional, /* cl. 9.9.4.12 O TLV 14-22 IEI=0x30 */ + LLC_SAPI negotiatedLlcSapi optional, /* cl. 9.9.4.7 O TV 2 IEI=0x32 */ + RadioPriority radioPriority optional, /* cl. 9.9.4.13 O TV 1 IEI=0x8- */ + PacketFlowIdentifier packetFlowIdentifier optional, /* cl. 9.9.4.5 O TLV 3 IEI=0x34 */ + APN_AMBR apnAggMaxBitRate optional, /* cl. 9.9.4.2 O TLV 4-8 IEI=0x5e */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + WLANOffloadAcceptability wlanOffloadInd optional, /* cl. 9.9.4.18 O TV 1 IEI=0xC @sic R5s150329 Baseline Moving sic@*/ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + HeaderCompressConfig headerCompressionConfig optional, /* cl. 9.9.4.22 O TLV 3-257 IEI=0x66 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional, /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + Extd_APN_AMBR extd_APN_AMBR optional, // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + Extd_EPS_QOS extd_EPS_QOS optional // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + }; + + + type record NOTIFICATION { /* 24.301 cl. 8.3.18A + Significance: local + Direction: network to UE @sic R5s110176 Baseline Moving sic@ */ + + + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + NotificationIndicator notificationIndicator /* cl. 9.9.4.7A M LV 2 */ + }; + + + type record PDN_CONNECTIVITY_REJECT { /* 24.301 cl. 8.3.19 + Significance: dual + Direction: network to UE */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ESM_Cause esmCause, /* cl. 9.9.4.4 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + GPRS_Timer3 backOffTimerValue optional, /* cl. 9.9.3.16B O TLV 3 IEI=0x37 @sic R5s120178, R5s150329 Baseline Moving sic@ Was T3396 Value*/ + ReAttemptIndicator reattemptInd optional, /* cl. 9.9.4.13A O TLV 3 IEI=0x6B @sic R5s150329 Baseline Moving sic@*/ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record PDN_CONNECTIVITY_REQUEST { /* 24.301 cl. 8.3.20 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + PDN_Type pdnType, /* cl. 9.9.4.10 M V 1/2 */ + Request_Type requestType, /* cl. 9.9.4.14 M V 1/2 */ + ESM_InfoTransferFlag esmInfoTransferFlag optional, /* cl. 9.9.4.5 O TV 1 IEI=0xD- */ + AccessPointName accessPointName optional, /* cl. 9.9.4.1 O TLV 3-102 IEI=0x28 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + DeviceProperties deviceProperties optional, /* cl. 9.9.2.0A O TV 1 IEI=0xC- @sic R5s120178 Baseline Moving sic@*/ + NBIFOMContainer nbifomContainer optional, /* 24.008 cl. 10.5.6.21 O TLV 3-257 octets IEI=0x33 @sic R5s160711 Baseline Moving sic@*/ + HeaderCompressConfig headerCompressionConfig optional, /* cl. 9.9.4.22 O TLV 3-257 IEI=0x66 @sic R5s160711 Baseline Moving sic@*/ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record PDN_DISCONNECT_REJECT { /* 24.301 cl. 8.3.21 + Significance: dual + Direction: network to UE */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + ESM_Cause esmCause, /* cl. 9.9.4.2 M V 1 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record PDN_DISCONNECT_REQUEST { /* 24.301 cl. 8.3.22 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.9.2.9 M V 1/2 */ + LinkedEpsBearerIdentity linkedEpsBearerId, /* cl. 9.9.4.6 M V 1/2 */ + ProtocolConfigOptions protocolConfigurationOptions optional, /* cl. 9.9.4.11 O TLV 3-253 IEI=0x27 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.9.4.26 O TLV-E 4-65538 IEI=0x7B @sic R5s160711 Baseline Moving sic@ */ + }; + + type record REMOTE_UE_REPORT { /* 24.301 cl. 8.3.23 + Significance: dual + Direction: UE to network */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + RemoteUEContextList remoteUEContextConnected optional, /* cl. 9.9.4.20 O TLV-E 3-65538 IEI = 79 */ + RemoteUEContextList remoteUEContextDisconnected optional, /* cl. 9.9.4.20 O TLV-E 3-65538 IEI = 7A */ + PKMF_Address ProSeKeyManageFunctionAddress optional /* cl. 9.9.4.21 O TLV 3-19 octets IEI = 6F */ + }; + + type record REMOTE_UE_REPORT_RESPONSE { /* 24.301 cl. 8.3.24 + Significance: dual + Direction: network to UE */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType /* cl. 9.8 M V 1 */ + }; + + type record ESM_DATA_TRANSPORT { /* 24.301 cl. 8.3.25 + Significance: dual + Direction: both */ + EPS_BearerIdentity epsBearerId, /* cl. 9.3.2 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.4 M V 1 */ + MessageType messageType, /* cl. 9.8 M V 1 */ + UserDataContainer userDatacontainer, /* cl. 9.9.4.24 M LV-E 2-n octets */ + ReleaseAssistanceInd releaseAssistanceInd optional /* cl. 9.9.4.25 O TV 1 IEI=0xF- */ + }; + + //---------------------------------------------------------------------------- + // Common Info Elements (24.301 cl. 9.9.2) + //---------------------------------------------------------------------------- + + type record NAS_SecurityParametersfromEUTRA { /* 24.301 cl. 9.9.2.6 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B4_Type spare, /* 8-5 are spare and shall be coded as zero */ + B4_Type dl_nasCountValue /* contains the 4 least significant bits of the binary representation of the downlink NAS COUNT value applicable when + this information element is sent*/ + }; + + type record NAS_SecurityParameterstoEUTRA { /* 24.301 cl. 9.9.2.7 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O4_Type noncevalue, /*NonceMME value */ + B1_Type spare1, /* are spare and shall be coded as zero */ + B3_Type cipherAlgorithmType, /* type of ciphering algorithm in the NAS security algorithms information element */ + B1_Type spare2, /* are spare and shall be coded as zero */ + B3_Type integrityAlgorithmType, /* as the type of integrity protection algorithm */ + B4_Type spare3, /* are spare and shall be coded as zero*/ + B1_Type tsc, /* type of security context flag (TSC) */ + B3_Type naskeysetid /* Nas key set identifier*/ + }; + + + //---------------------------------------------------------------------------- + // EPS Mobility Management (EMM) information elements (24.301 cl. 9.9.3) + //---------------------------------------------------------------------------- + + type record SMSServicesStatus { // 24.301 cl. 9.9.3.4b + IEI4_Type iei, // currently only used as TV + B1_Type spare, + B3_Type smsServicesStatusValue //0 = CS fallback rejected, 1 = accepted by UE + }; + + type record CSFBResponse { // 24.301 cl. 9.9.3.5 + IEI4_Type iei, // currently only used as TV + B1_Type spare, + B3_Type csfbValue //0 = CS fallback rejected, 1 = accepted by UE + }; + + type record EMM_Cause { /* 24.301 cl. 9.9.3.9 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + NAS_CauseValue_Type causeValue + }; + + type record Extd_EMM_Cause { /* 24.301 cl. 9.9.3.26A */ + IEI4_Type iei optional, /* present in case of TV; omit in case of V @sic R5s170597 Baseline Moving sic@ */ + B1_Type spare, + B1_Type nbIoTAllowed, /* @sic R5s180552 Baseline Moving 2018 Phase 2 sic@ */ + B1_Type epsOptimizationInfo, // @sic R5s170597 Baseline Moving sic@ + B1_Type eutranAllowed + }; + + type record EPS_AttachResult { /* 24.301 cl. 9.9.3.10 */ + // IEI is always skipped + B1_Type spare, + NAS_AttDetValue_Type resultValue + }; + + type record EPS_AttachType { /* 24.301 cl. 9.9.3.11 */ + // IEI is always skipped + B1_Type spare, + NAS_AttDetValue_Type typeValue + }; + + type record EPS_NetworkFeatureSupport { /* 24.301 cl 9.9.3.12A @sic R5s100135 sic@ */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B1_Type cp_CIOT, // @sic R5s160711 Baseline Moving sic@ + B1_Type emmRegistered_withoutPDN, // @sic R5s160711 Baseline Moving sic@ + B1_Type esrps, /* @sic R5s120178 Baseline Moving sic@ */ + B2_Type csLCS, /* @sic R5s110176, R5s120178 Baseline Moving sic@ */ + B1_Type epcLCS, /* @sic R5s110176 Baseline Moving sic@ */ + B1_Type emcBS, /* @sic R5s110176, R5s120178 Baseline Moving sic@ */ + B1_Type imsVoPS, + B1_Type bearers15 optional, // @sic R5s160711 Baseline Moving, R5s170597 Baseline Moving, R5s180271 Baseline Moving 2018 Phase 1, R5s180552 Baseline Moving 2018 Phase 2 sic@ + B1_Type iwkN26 optional, // @sic R5s180271 Baseline Moving 2018 Phase 1, R5s180552 Baseline Moving 2018 Phase 2 sic@ + B1_Type restrictDCNR optional, // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + B1_Type restrictEC optional, // @sic R5s170597 Baseline Moving sic@ + B1_Type extdPCO optional, // @sic R5s160711 Baseline Moving sic@ + B1_Type headerComp_CP_CIOT optional, // @sic R5s160711 Baseline Moving sic@ + B1_Type s1_U_data optional, // @sic R5s160711 Baseline Moving sic@ + B1_Type up_CIOT optional, // @sic R5s160711 Baseline Moving sic@ + B3_Type spare optional, /* Sep22 @sic R5s221178 Baseline Moving sic@ */ + B1_Type ptcc optional, /* Sep22 @sic R5s221178 Baseline Moving sic@ */ + B1_Type pr optional, /* Sep22 @sic R5s221178 Baseline Moving sic@ */ + B1_Type rpr optional, /* Sep22 @sic R5s221178 Baseline Moving sic@ */ + B1_Type piv optional, /* Sep22 @sic R5s221178 Baseline Moving sic@ */ + B1_Type ncr optional /* Sep22 @sic R5s221178 Baseline Moving sic@ */ + }; + + type record PagingIdentity { /* 24.301 cl. 9.9.93.25A @sic R5s100135 sic@ */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B7_Type spareBits, + B1_Type pagingId + }; + + type record AdditionalUpdateResult { /* 24.301 cl. 9.9.3.0A @sic R5s100135 sic@ */ + IEI4_Type iei, // currently only used as TV + B2_Type spareBits, // @sic R5s170597 Baseline Moving sic@ + B2_Type addUpdateResultValue + }; + + type record EPS_UpdateResult { /* 24.301 cl. 9.9.3.13 */ + // IEI is always skipped + B1_Type spare, + NAS_AttDetValue_Type resultValue + }; + + type record EPS_UpdateType { /* 24.301 cl. 9.9.3.14 */ + // IEI is always skipped + B1_Type activeFlag, + NAS_AttDetValue_Type typeValue + }; + + type record ESM_MessageContainer { /* 24.301 cl. 9.9.3.15 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel, + octetstring esmPdu /* ESM PDU without NAS security header*/ + }; + + type record KSIandSN { /* 24.301 cl. 9.9.3.19 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B3_Type ksi, + B5_Type sn + }; + + type record NAS_MessageContainer { // 24.301 cl. 9.9.3.22 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel, + octetstring smsmessage length(2..251) /* can contain an SMS message (i.e. CP-DATA, CP-ACK or CP-ERROR) + as defined in subclause 7.2 in 3GPP TS 24.011 */ + }; + + type record NetworkPolicy { // 24.301 cl. 9.9.3.52 + IEI4_Type iei optional, /* present in case of TV; omit in case of V */ + B3_Type spare, + B1_Type redirPolicy + }; + + type record Nonce { /* 24.301 cl. 9.9.3.25 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O4_Type nonceValue + }; + + type record EPS_ServiceType { // 24.301 cl. 9.9.3.27 + IEI4_Type iei optional, /* present in case of TV; omit in case of V */ + EPS_ServiceTypeValue serviceValue + }; + + type record ShortMAC { /* 24.301 cl. 9.9.3.28 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B16_Type macValue + }; + + type record UERadioCapInfoUpdateNeeded { // 24.301 cl. 9.9.3.35 + IEI4_Type iei optional, /* present in case of TV; omit in case of V */ + B3_Type spare, + B1_Type urcUpdate + }; + + type record UE_AdditionalSecurityCapability { /* 24.301 cl. 9.9.3.53 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel, + O1_Type eaCap5G_0_7, + O1_Type eaCap5G_8_15, + O1_Type iaCap5G_0_7, + O1_Type iaCap5G_8_15 + }; + + type record AdditionalInfoReq { /* 24.301 cl. 9.9.3.55 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B7_Type spare, + B1_Type cipherKey + }; + + type record CipheringKey { + O2_Type id, + O16_Type key, + B3_Type spare, + B5_Type c0Length, + octetstring c0 length (1..16), + B8_Type posSIBType1_1to2_1, + B8_Type posSIBType2_2to9, + B8_Type posSIBType2_10to17, + B8_Type posSIBType2_18to3_1, + O5_Type validityStartTime, + O2_Type validityDuration, + TrackingAreaIdList taiList + }; + + type record CipheringKeyData { /* 24.301 cl. 9.9.3.56 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type6Length_Type iel, + record of CipheringKey cipherKey + }; + + type record CLI { /* 24.301 cl. 9.9.3.38 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel, + octetstring cliValue length(1..12) /* The coding of the CLI value part is the same as for octets 3 to + 14 of the Calling party BCD number information element defined + in subclause 10.5.4.9 of 3GPP TS 24.008 */ + }; + + type record SsCode { /* 24.301 cl. 9.9.3.39 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O1_Type ssCodeValue /*The coding of the SS Code value is given in subclause 17.7.5 of 3GPP TS 29.002 */ + }; + + type record LcsIndicator { /* 24.301 cl. 9.9.3.40 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O1_Type lcsIndicator + }; + + type record LcsClientIdentity { /* 24.301 cl. 9.9.3.41 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel, + octetstring lcsClientIdentityValue length(1..255) /* The coding of the value part of the LCS client + identity is given in subclause 17.7.13 of 3GPP TS 29.002 */ + }; + + type B8_Type GenericMessageContainerType; /* 24.301 cl. 9.9.3.42 M V 1 @sic R5s110176 Baseline Moving sic@ */ + + type record GenericMessageContainer{ /* 24.301 cl. 9.9.3.43 M LV-E 3-n @sic R5s110176 Baseline Moving sic@*/ + IEI8_Type iei optional, + Type6Length_Type iel, + octetstring genericMsgContainerValue + }; + + type record GUTI_Type{ /* 24.301 cl. 9.9.3.45 @sic R5s110178 Baseline Moving sic@*/ + IEI4_Type iei, + B3_Type spare, + B1_Type gutiType + }; + + type record ControlPlaneServiceType{ /* 24.301 cl. 9.9.3.47 @sic R5s160711 Baseline Moving sic@*/ + IEI4_Type iei optional, // @sic R5s160758 sic@ + B1_Type activeFlag, + B3_Type controlPlaneServiceType // @sic R5s170597 Baseline Moving sic@ + }; + + //---------------------------------------------------------------------------- + // EPS Session Management (ESM) information elements (24.301 cl. 9.9.4) + //---------------------------------------------------------------------------- + + type record APN_AMBR { // 24.301 cl. 9.9.4.2 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B8_Type downlink, + B8_Type uplink, + B8_Type downlinkExt optional, + B8_Type uplinkExt optional, + B8_Type downlinkExt2 optional, + B8_Type uplinkExt2 optional + }; + + type record Extd_APN_AMBR { // 24.301 cl. 9.9.4.29 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B8_Type unitDL, + B8_Type downlink_1, + B8_Type downlink_2, + B8_Type unitUL, + B8_Type uplink_1, + B8_Type uplink_2 + }; + + type record ESM_Cause { /* 24.301 cl. 9.9.4.4 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + NAS_CauseValue_Type causeValue + }; + + type record ESM_InfoTransferFlag { /* 24.301 cl. 9.9.4.5 */ + IEI4_Type iei optional, + B3_Type spare, + B1_Type eitValue + }; + + type record LinkedEpsBearerIdentity { /* 24.301 cl. 9.9.4.6 */ + // IEI is always skipped + B4_Type idValue + }; + + type record NotificationIndicator{ /* 24.301 cl. 9.9.4.7A @sic R5s110176 Baseline Moving sic@ */ + IEI8_Type iei optional, + Type4Length_Type iel, + B8_Type notificationInd + }; + + type record PDN_Type { /* 24.301 cl. 9.9.4.10 */ + // IEI is always skipped + B1_Type spare, + PdnTypeValue typeValue + }; + + type record TransactionIdentifier { /* 24.301 cl. 9.9.4.17 */ + IEI8_Type iei optional, + Type4Length_Type iel, + B1_Type tiFlag, + B3_Type tiValue, + B4_Type spare, + B1_Type ext optional, // @sic R5s110176 sic@ + B7_Type tiValue_2 optional // @sic R5s110176 sic@ + }; + + type O8_Type EllipsoidPointWithAltitude_Type; + type O3_Type HorizontalVelocity_Type; + type O3_Type Gnss_TOD_msec_Type; + + type record RemoteUEContextList { /* 24.301 cl. 9.9.4.20 */ + IEI8_Type iei optional, + Type6Length_Type iel, + O1_Type numberOfContexts, + ListOfRemoteUEContext remoteUEContexts + }; + + type record of RemoteUEContext ListOfRemoteUEContext; + + type record RemoteUEContext { + O1_Type lengthOfContext, + O1_Type numberOfUserIds, + UserIdentityList userIdentities, + B5_Type spare, + B3_Type addressType, + octetstring addressInfo optional + }; + + type record of UserIdentity UserIdentityList; + + type record UserIdentity { + O1_Type lengthOfUserId, + B4_Type firstDigit, + B1_Type odd_even, + B3_Type typeOfUserId, + record of B4_Type digits + }; + + type record PKMF_Address { /* 24.301 cl. 9.9.4.21 */ + IEI8_Type iei optional, + Type4Length_Type iel, + B5_Type spare, + B3_Type addressType, + octetstring addressInfo + }; + + type record HeaderCompressConfig { /* 24.301 cl. 9.9.4.22 */ + IEI8_Type iei optional, + Type4Length_Type iel, + B1_Type spare, + B1_Type profileP0x0104, + B1_Type profileP0x0103, + B1_Type profileP0x0102, + B1_Type profileP0x0006, + B1_Type profileP0x0004, + B1_Type profileP0x0003, + B1_Type profileP0x0002, + O2_Type maxCID, + O1_Type addHeaderCompressContextSetupParamsType optional, // @sic R5s170597 Baseline Moving sic@ + octetstring addHeaderCompressContextSetupParams optional // @sic R5s170597 Baseline Moving sic@ + }; + + type record UserDataContainer { /* 24.301 cl. 9.9.4.24 */ + IEI8_Type iei optional, + Type6Length_Type iel, // @sic R5s160758 sic@ + octetstring dataContainer + }; + + type record HeaderCompressConfigStatus { /* 24.301 cl. 9.9.4.27 */ + IEI8_Type iei optional, + Type4Length_Type iel, + O1_Type epsBearerInd_0_7, + O1_Type epsBearerInd_8_15 + }; + + type record N1_UENetworkCap { /* 24.301 cl. 9.9.3.57 */ + IEI8_Type iei optional, + Type4Length_Type iel, + B1_Type spare, // Sep22 @sic R5s221178 Baseline Moving sic@ + B1_Type ehc_CP_CIoT, // Sep22 @sic R5s221178 Baseline Moving sic@ + B2_Type ngPNB_CIoT, + B1_Type ngUP_CIoT, + B1_Type ngHC_CP_CIoT, + B1_Type n3Data, + B1_Type ngCP_CIoT + }; + + type record UERadioCapIdAvailability { /* 24.301 cl. 9.9.3.58 */ + IEI8_Type iei optional, + Type4Length_Type iel optional, + B5_Type spare, + B3_Type availability + }; + + type record UERadioCapIdRequest { /* 24.301 cl. 9.9.3.59 */ + IEI8_Type iei optional, + Type4Length_Type iel optional, + B7_Type spare, + B1_Type radioCapIdReq + }; + + type DRXParamCommon NB_S1_DRXParam; /* 24.301 cl. 9.9.3.63 */ + + type record IMSI_Offset { /* 24.301 cl. 9.9.3.64 */ + IEI8_Type iei optional, + Type4Length_Type iel optional, + O2_Type offsetValue + }; + + type record PagingRestriction { /* 24.301 cl. 9.9.3.66 */ + IEI8_Type iei optional, + Type4Length_Type iel optional, + B4_Type spare, + B4_Type prType, + O1_Type ebi7_0 optional, + O1_Type ebi15_8 optional + }; + + type record EPS_AddReqResult { /* 24.301 cl. 9.9.3.67 */ + IEI8_Type iei optional, + Type4Length_Type iel optional, + B7_Type spare, + B1_Type prd + }; + + // ============================================================================= + // Update UE Location Information + // 3G TS 36.509 cl. 6.12 + // Direction: SS to UE + // ----------------------------------------------------------------------------- + type record UPDATE_UE_LOCATION_INFORMATION { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType, /* M V 1 */ + EllipsoidPointWithAltitude_Type ellipsoidPointWithAltitude, /* M V 8 */ + HorizontalVelocity_Type horizontalVelocity, /* M V 3 */ + Gnss_TOD_msec_Type gnss_TOD_msec /* M V 3 */ + }; + +} with { encode "NAS Types"} diff --git a/ttcn/Lib3GPP/EPS_NAS/module.mk b/ttcn/Lib3GPP/EPS_NAS/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..a9645c87edc23fa4bd254df98fa12161f3962cc8 --- /dev/null +++ b/ttcn/Lib3GPP/EPS_NAS/module.mk @@ -0,0 +1,3 @@ +sources := \ + EPS_NAS_TypeDefs.ttcn \ + EPS_NAS_LoopBack_TypeDefs.ttcn \ No newline at end of file diff --git a/ttcn/Lib3GPP/NAS/NAS_AuthenticationCommon.ttcn b/ttcn/Lib3GPP/NAS/NAS_AuthenticationCommon.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..dec7fcc27bb0d05b12245190ebeeba0a72d491d5 --- /dev/null +++ b/ttcn/Lib3GPP/NAS/NAS_AuthenticationCommon.ttcn @@ -0,0 +1,129 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-08-29 15:57:07 +0200 (Mon, 29 Aug 2022) $ +// $Rev: 33841 $ +/******************************************************************************/ + +module NAS_AuthenticationCommon { + import from CommonDefs all; + import from Parameters all; + + type record Common_AuthenticationParams_Type { /* parameters related/used to/by EUTRA/UTRAN/GERAN authentication + @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + B128_Type RandValue, + B128_Type AUTN, + B32_128_Type XRES, + B64_Type KcGSM, + B128_Type Kc128, // @sic R5s150121 sic@ + B3_Type KeySeq, + B128_Type CK, + B128_Type IK, + integer XRESLength optional // @sic R5s120907 sic@ + }; + + type enumerated AuthenticationError_Type {noError, macError, sqnFailure, macErrorPlusSepBit, sepBit0 }; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + + const B32_Type tsc_AuthUndefinedB32 := oct2bit ('FFFFFFFF'O); /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + const B128_Type tsc_AuthUndefinedB128 := tsc_AuthUndefinedB32 & tsc_AuthUndefinedB32 & tsc_AuthUndefinedB32 & tsc_AuthUndefinedB32; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + const B256_Type tsc_AuthUndefinedB256 := tsc_AuthUndefinedB128 & tsc_AuthUndefinedB128; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + + template (value) Common_AuthenticationParams_Type cs_CommonAuthParams_Init (template (value) B128_Type p_Rand) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + RandValue := p_Rand, + AUTN := tsc_AuthUndefinedB128, + XRES := tsc_AuthUndefinedB128, + KcGSM := tsc_AuthUndefinedB32 & tsc_AuthUndefinedB32, + Kc128 := tsc_AuthUndefinedB128, // @sic R5s150121 sic@ + KeySeq := '111'B, + CK := tsc_AuthUndefinedB128, + IK := tsc_AuthUndefinedB128, + XRESLength := omit // @sic R5s120907 sic@ + }; + + //---------------------------------------------------------------------------- + /* + * @desc auxiliary function to increment KeySeq and deal with wrap around + * @param p_KeySeq + * @return B3_Type + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) + */ + function f_Authentication_IncrementKeySeq(B3_Type p_KeySeq) return B3_Type + { + var B3_Type v_KeySeq := int2bit(((bit2int(p_KeySeq)+1) mod 8), 3); //@sic R5s140298 R5s140503 sic@ + // The mod 8 is used as initial value is 7, hence results in first value of 0. + // But if in a test case authentication is performed 7th time, it becomes 7 which is an undefined value, hence the check below added to avoid it. + if (v_KeySeq == '111'B) { + v_KeySeq := '000'B; + } + return v_KeySeq; + } + + //---------------------------------------------------------------------------- + /* + * @desc Calculation is done according to 34.108, clause 8.1.2 and 33.102, clause 6.8.1.2 + * Generation of Ck, Ik, AUTN and XRES + * @param p_Auth_Params + * @param p_AuthenticationError (default value: noError) + * @return Common_AuthenticationParams_Type + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) + */ + function f_AuthenticationInit(Common_AuthenticationParams_Type p_Auth_Params, + AuthenticationError_Type p_AuthenticationError := noError) return Common_AuthenticationParams_Type + { /* @sic R5-123085 harmonisation of IMS (AuthenticationInit and the two error variants are needed for IMS too) sic@ */ + var Common_AuthenticationParams_Type v_Auth_Params := p_Auth_Params; + var B128_Type v_XDOut; + var B80_Type v_AUTN_2; + var B64_Type v_CDOut; + var B64_Type v_XDOut_Half; + var B64_Type v_MAC; + var B48_Type v_AK; + var B48_Type v_AUTN_1; + var B48_Type v_AuthSQN := '000000000000000000000000000000000000000000000000'B; + var B16_Type v_AuthAMF := px_AuthAMF; + + if (p_AuthenticationError == sqnFailure) { + v_AuthAMF := '1111111111111111'B; //AMF_resynch value + } + + if (p_AuthenticationError == sepBit0) { + v_AuthAMF := v_AuthAMF and4b '0111111111111111'B; // separation bit forced to 0 (TC 9.1.2.7), the rest unchanged from PIXIT + } + + if (p_AuthenticationError == macErrorPlusSepBit) { // @sic R5s130201 sic@ + v_AuthAMF := v_AuthAMF or4b '1000000000000000'B; // force the separation to 1, leave the rest unchanged + v_AuthSQN := '111111111111111111111111111111111111111111111111'B; // force SQN out of range + } + + v_XDOut := v_Auth_Params.RandValue xor4b px_AuthK; + v_CDOut := v_AuthSQN & v_AuthAMF; + v_XDOut_Half := substr( v_XDOut, 0, 64); + v_AK := substr( v_XDOut, 24, 48); + v_AUTN_1 := v_AuthSQN xor4b v_AK; + v_MAC := v_XDOut_Half xor4b v_CDOut; + + if ((p_AuthenticationError == macError) or (p_AuthenticationError == macErrorPlusSepBit)) { // @sic R5s130201 sic@ + v_MAC := not4b(v_MAC); // @sic R5s110313 sic@ + } + + v_AUTN_2 := v_AuthAMF & v_MAC; + v_Auth_Params.AUTN := v_AUTN_1 & v_AUTN_2; + // v_IKey := 128 bits of v_XDOut, wrapped, starting from offset 16 + v_Auth_Params.IK := substr( v_XDOut, 16, (128 - 16)) & substr( v_XDOut, 0, 16); + // v_CKey := 128 bits of v_XDOut, wrapped, starting from offset 8 + v_Auth_Params.CK := substr( v_XDOut, 8, (128 - 8)) & substr( v_XDOut, 0, 8); + v_Auth_Params.XRES := v_XDOut; + + if (p_AuthenticationError == noError) { + // ((CK1 XOR CK2) XOR (IK1 XOR IK2)) + v_Auth_Params.KcGSM := (substr( v_Auth_Params.CK, 0, 64) xor4b substr( v_Auth_Params.CK, 64, 64)) xor4b (substr( v_Auth_Params.IK, 0, 64) xor4b substr( v_Auth_Params.IK, 64, 64)); + v_Auth_Params.KeySeq := f_Authentication_IncrementKeySeq(v_Auth_Params.KeySeq); // @sic R5s140894 sic@ + v_Auth_Params.Kc128 := substr (fx_KeyDerivationFunction ( tsc_KDF_HMAC_SHA_256, (v_Auth_Params.CK & v_Auth_Params.IK), '32'O ), 0, 128); // @sic R5s150121, R5s150796 sic@ + } + return v_Auth_Params; + } +} diff --git a/ttcn/Lib3GPP/NAS/NAS_AuxiliaryDefsAndFunctions.ttcn b/ttcn/Lib3GPP/NAS/NAS_AuxiliaryDefsAndFunctions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..e09caa3711625594105a5f952a4f10363062326d --- /dev/null +++ b/ttcn/Lib3GPP/NAS/NAS_AuxiliaryDefsAndFunctions.ttcn @@ -0,0 +1,1041 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-11-29 17:53:31 +0100 (Tue, 29 Nov 2022) $ +// $Rev: 34751 $ +/******************************************************************************/ + +module NAS_AuxiliaryDefsAndFunctions { + + import from CommonDefs all; + import from Parameters all; + import from NAS_CommonTypeDefs all; + import from NAS_CommonTemplates all; + import from CommonIP all; + + template (value) ExtdEmergNum cs_ExtdEmergNum (octetstring p_Digits, + octetstring p_SubServices := ''O) := + { /* @status APPROVED (NR5GC) */ + len := int2oct(lengthof(p_Digits), 1), + digits := p_Digits, // BCD numbers + lengthOfSubService := int2oct(lengthof(p_SubServices), 1), + subServices := p_SubServices + }; + + //============================================================================ + // Protocol Configuration Options (PCO) + //---------------------------------------------------------------------------- + /* + * @desc Function used to check whether the UE requests in its PCO an address allocation via NAS signalling + * If the UE does not send PCO, then address assignment shall be via DHCP. TS 36.508 table 4.7.3-6. + * @param p_Pco + * @return boolean + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS) + */ + function f_CheckPCOforIPallocationViaNas(template (omit) ProtocolConfigOptions p_Pco) return boolean + { + var NAS_ProtocolConfigOptions_Type v_ProtocolContainerList; + var integer i; + + if (isvalue(p_Pco.pco)) { /* @sic R5s170030 change 8 sic@ */ + v_ProtocolContainerList := valueof (p_Pco.pco); + for (i := 0; i < lengthof(v_ProtocolContainerList); i := i + 1) { + if (v_ProtocolContainerList[i].protocolID == '000B'O) { // TS 24.008 clause 10.5.6.3 // @sic R5s090322 sic@ + return false; // @sic R5s090322 sic@ + } + } + } + return true; // @sic R5s090322 sic@ + } + + //---------------------------------------------------------------------------- + /* + * @desc Function used to check whether the UE requests in its PCO an address allocation via NAS signalling + * If the UE does not send PCO, then address assignment shall be via DHCP. TS 36.508 table 4.7.3-6. + * @param p_Pco + * @return boolean + * @status APPROVED (ENDC, IMS, NBIOT, NR5GC, NR5GC_IRAT, POS) + */ + function f_CheckExtdPCOforIPallocationViaNas(template (omit) ExtdProtocolConfigOptions p_Pco) return boolean + { + var ExtdProtocolConfigOptions v_Pco; + var integer i; + + if (isvalue(p_Pco)) { + v_Pco := valueof (p_Pco); + if (ispresent(v_Pco.pco)) { // @sic R5s170233 sic@ + for (i := 0; i < lengthof(v_Pco.pco); i := i + 1 ) { + if(v_Pco.pco[i].protocolID == '000B'O) { // TS 24.008 clause 10.5.6.3 + return false; + } + } + } + } + return true; + } + + //------------------------------------ + /* + * @desc return + * omit when there is no protocol config option with the given id in the given list + * content of the protocol config option (which can be empty or omit) otherwise + * @param p_Pco + * @param p_ProtocolID + * @return template (omit) octetstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS) + */ + function f_ProtocolConfigOptions_Get(template (omit) ProtocolConfigOptions p_Pco, + O2_Type p_ProtocolID) return template (omit) octetstring + { + var NAS_ProtocolConfigOptions_Type v_ProtocolConfigOptions; + var integer i; + + if (isvalue(p_Pco.pco)) { + v_ProtocolConfigOptions := valueof(p_Pco.pco); + for (i := 0; i < lengthof(v_ProtocolConfigOptions); i := i + 1) { + if (v_ProtocolConfigOptions[i].protocolID == p_ProtocolID) { // TS 24.008 clause 10.5.6.3 + return v_ProtocolConfigOptions[i].content; + } + } + } + return omit; + } + + /* + * @desc return + * omit when there is no protocol config option with the given id in the given list + * content of the protocol config option (which can be empty or omit) otherwise + * @param p_Pco + * @param p_ProtocolID + * @return template (omit) octetstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC, NR5GC_IRAT, POS) + */ + function f_ExtdProtocolConfigOptions_Get(template (omit) ExtdProtocolConfigOptions p_Pco, + O2_Type p_ProtocolID) return template (omit) octetstring + { + var NAS_ExtdProtocolConfigOptions_Type v_ProtocolConfigOptions; + var integer i; + + if (isvalue(p_Pco.pco)) { + v_ProtocolConfigOptions := valueof(p_Pco.pco); + for (i := 0; i < lengthof(v_ProtocolConfigOptions); i := i + 1) { + if (v_ProtocolConfigOptions[i].protocolID == p_ProtocolID) { // TS 24.008 clause 10.5.6.3 + return v_ProtocolConfigOptions[i].content; + } + } + } + return omit; + } + + /* + * @desc return SessionId if included in the given list or omit otherwise + * @param p_Pco + * @return template (omit) integer + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS) + */ + function f_ProtocolConfigOptions_GetSessionId(template (omit) ProtocolConfigOptions p_Pco) return template (omit) integer + { + var template (omit) octetstring v_Content := f_ProtocolConfigOptions_Get(p_Pco, '001A'O); + var octetstring v_Octetstring; + if (isvalue(v_Content)) { + v_Octetstring := valueof(v_Content); + if (lengthof(v_Octetstring) > 0) { + return oct2int(v_Octetstring); + } + } + return omit; + } + + /* + * @desc return QosFlowId if included in the given list or omit otherwise + * @param p_Pco + * @return template (omit) integer + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS) + */ + function f_ProtocolConfigOptions_GetQosFlowId(template (omit) ProtocolConfigOptions p_Pco) return template (omit) integer + { + var template (omit) octetstring v_Content := f_ProtocolConfigOptions_Get(p_Pco, '001F'O); + var octetstring v_Octetstring; + if (isvalue(v_Content)) { + v_Octetstring := valueof(v_Content); + if (lengthof(v_Octetstring) > 0) { + return (oct2int(v_Octetstring[0]) mod 64); // QFI of the 1st QoS flow is in the lower 6 bits of the 1st octet + } + } + return omit; + } + + /* + * @desc return SessionId if included in the given list or omit otherwise + * @param p_Pco + * @return template (omit) integer + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS) + */ + function f_ExtdProtocolConfigOptions_GetSessionId(template (omit) ExtdProtocolConfigOptions p_Pco) return template (omit) integer + { + var template (omit) octetstring v_Content := f_ExtdProtocolConfigOptions_Get(p_Pco, '001A'O); + var octetstring v_Octetstring; + if (isvalue(v_Content)) { + v_Octetstring := valueof(v_Content); + if (lengthof(v_Octetstring) > 0) { + return oct2int(v_Octetstring); + } + } + return omit; + } + + /* + * @desc return QosFlowId if included in the given list or omit otherwise + * @param p_Pco + * @return template (omit) integer + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS) + */ + function f_ExtdProtocolConfigOptions_GetQosFlowId(template (omit) ExtdProtocolConfigOptions p_Pco) return template (omit) integer + { + var template (omit) octetstring v_Content := f_ExtdProtocolConfigOptions_Get(p_Pco, '001F'O); + var octetstring v_Octetstring; + if (isvalue(v_Content)) { + v_Octetstring := valueof(v_Content); + if (lengthof(v_Octetstring) > 0) { + return (oct2int(v_Octetstring[0]) mod 64); // QFI of the 1st QoS flow is in the lower 6 bits of the 1st octet + } + } + return omit; + } + //------------------------------------ + /* + * @desc Function used to check whether the UE requests in its PCO a specific protocol + * (SIP signalling) + * @param p_Pco + * @param p_ProtocolID + * @return boolean + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, POS) + */ + function f_CheckPCOforProtocolID(template (omit) ProtocolConfigOptions p_Pco, + O2_Type p_ProtocolID) return boolean + { + var ProtocolConfigOptions v_Pco; + var integer i; + + if (isvalue(p_Pco)) { + v_Pco := valueof (p_Pco); + for (i := 0; i < lengthof(v_Pco.pco); i := i + 1) { + if(v_Pco.pco[i].protocolID == p_ProtocolID) { // TS 24.008 clause 10.5.6.3 + return true; + } + } + } + return false; + } + + /* + * @desc Function used to check whether the UE requests in its PCO a specific protocol + * (SIP signalling) + * @param p_Pco + * @param p_ProtocolID + * @return boolean + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, POS) + */ + function f_CheckExtdPCOforProtocolID(template ExtdProtocolConfigOptions p_Pco, + O2_Type p_ProtocolID) return boolean + { + var ExtdProtocolConfigOptions v_Pco; + var integer i; + + if (isvalue(p_Pco)) { + v_Pco := valueof (p_Pco); + for (i := 0; i < lengthof(v_Pco.pco); i := i + 1) { + if(v_Pco.pco[i].protocolID == p_ProtocolID) { // TS 24.008 clause 10.5.6.3 + return true; + } + } + } + return false; + } + + //------------------------------------ + /* + * @desc Function used to check whether the UE requests a P-CSCF address or DNS server address in its PCO + * If the UE does not support IMS, or doesn't request a P-CSCF address, the function returns the default PCO, PPP + * @param p_ConfigOptionsRX + * @param p_PdnIndex (default value: PDN_1) + * @param p_AdditionalProtocolConfigOptions (default value: {}) + * @param p_IgnoreIM_CN_SubsystemSignalingFlag (default value: true) + * @return template (value) NAS_ProtocolConfigOptions_Type + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS) + */ + function f_NAS_GetProtocolConfigOptionList(NAS_ProtocolConfigOptions_Type p_ConfigOptionsRX, + PDN_Index_Type p_PdnIndex := PDN_1, + template (value) NAS_ProtocolConfigOptions_Type p_AdditionalProtocolConfigOptions := {}, + boolean p_IgnoreIM_CN_SubsystemSignalingFlag := true) return template (value) NAS_ProtocolConfigOptions_Type + { /* @sic R5-198996: p_AdditionalProtocolConfigOptions for 5GC options sic@ */ + var PDN_AddressInfo_Type v_PDN_AddressInfo := f_PDN_AddressInfo_Get(p_PdnIndex); + var template (value) NAS_ProtocolConfigOptions_Type v_ProtocolContainerList := {}; + var integer v_PcoCnt := 0; + var O2_Type v_ProtocolId; + var octetstring v_Contents; + var integer i; + + for (i := 0; i < lengthof(p_ConfigOptionsRX); i := i + 1) { + + v_ProtocolId := p_ConfigOptionsRX[i].protocolID; + v_Contents := ''O; + + select (v_ProtocolId) { // See 24.008 Table 10.5.154 + case ('0001'O) { // P-CSCF IPv6 address + if (pc_IMS) { + v_Contents := f_Convert_IPv6Addr2OctString(v_PDN_AddressInfo.PCSCF_IPAddressIPv6); + } + } + case ('0002'O) { // IM CN Subsystem Signalling Flag, reply with an empty container + if (not p_IgnoreIM_CN_SubsystemSignalingFlag) { + v_ProtocolContainerList[v_PcoCnt] := cs_ProtocolContainer_Common(v_ProtocolId); + v_PcoCnt := v_PcoCnt + 1; + continue; + } + } + case ('0003'O) { // DNS Server IPv6 address + v_Contents := f_Convert_IPv6Addr2OctString(v_PDN_AddressInfo.DNS_ServerAddressIPv6); + } + case ('000C'O) { // P-CSCF IPv4 address + if (pc_IMS) { + v_Contents := f_Convert_IPv4Addr2OctString(v_PDN_AddressInfo.PCSCF_IPAddressIPv4); + } + } + case ('000D'O) { // DNS Server IPv4 address + v_Contents := f_Convert_IPv4Addr2OctString(v_PDN_AddressInfo.DNS_ServerAddressIPv4); + } + } + + if (lengthof(v_Contents) > 0) { + v_ProtocolContainerList[v_PcoCnt] := cs_ProtocolContainer(v_ProtocolId, v_Contents); + v_PcoCnt := v_PcoCnt + 1; + } + } + return valueof(v_ProtocolContainerList) & valueof(p_AdditionalProtocolConfigOptions); + } + + /* + * @desc wrapper for f_GetDefaultProtocolConfigOptionList + * @param p_Pco + * @param p_PdnIndex (default value: PDN_1) + * @param p_AdditionalProtocolConfigOptions (default value: {}) + * @return template (value) ProtocolConfigOptions + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS) + */ + function f_GetDefaultProtocolConfigOptions(template (omit) ProtocolConfigOptions p_Pco, + PDN_Index_Type p_PdnIndex := PDN_1, + template (value) NAS_ProtocolConfigOptions_Type p_AdditionalProtocolConfigOptions := {}) return template (value) ProtocolConfigOptions + { /* @sic R5s130362 - MCC160 Implementation sic@ */ + /* @sic R5s141127 change 4 - MCC160 Comments: split into f_GetDefaultProtocolConfigOptions and f_GetDefaultProtocolConfigOptionList sic@ */ + /* @sic R5-198996: p_AdditionalProtocolConfigOptions for 5GC options sic@ */ + var template (value) NAS_ProtocolConfigOptions_Type v_ProtocolContainerListTX := {}; + var NAS_ProtocolConfigOptions_Type v_ProtocolContainerListRX; + + if (isvalue(p_Pco.pco)) { /* @sic R5s170030 change 8 sic@ */ + v_ProtocolContainerListRX := valueof(p_Pco.pco); + v_ProtocolContainerListTX := f_NAS_GetProtocolConfigOptionList(v_ProtocolContainerListRX, p_PdnIndex, p_AdditionalProtocolConfigOptions); + } + + return f_NAS_ProtocolConfigOptionsTX(v_ProtocolContainerListTX); + } + + //---------------------------------------------------------------------------- + /* + * @desc Common function to build up ProtocolConfigOptions + * @param p_ProtocolContainers + * @return template (value) ExtdProtocolConfigOptions + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) + */ + function f_NAS_ExtdProtocolConfigOptionsTX(template (omit) NAS_ExtdProtocolConfigOptions_Type p_ProtocolContainers) return template (value) ExtdProtocolConfigOptions + { + var integer v_Length := 1; // there are at least ext, spare, configProtocol + var integer i; + + if (isvalue(p_ProtocolContainers)) { // @sic R5s170233 sic@ + for (i:=0; i < lengthof(p_ProtocolContainers); i:=i+1) { + v_Length := v_Length + oct2int(valueof(p_ProtocolContainers[i].protocolLength)) + 3; // 2 octets for protocolID and 1 octet for protocolLength + } + } + return cs_ExtdPCO(int2oct(v_Length, 2), p_ProtocolContainers); + } + + /* + * @desc wrapper for f_GetDefaultExtdProtocolConfigOptionList + * @param p_Pco + * @param p_PdnIndex (default value: PDN_1) + * @return template (value) ExtdProtocolConfigOptions + * @status APPROVED (NBIOT) + */ + function f_GetDefaultExtdProtocolConfigOptions(template (omit) ExtdProtocolConfigOptions p_Pco, + PDN_Index_Type p_PdnIndex := PDN_1) return template (value) ExtdProtocolConfigOptions + { + var template (omit) NAS_ExtdProtocolConfigOptions_Type v_ProtocolContainerList := omit; // @sic R5s170233 sic@ + var ExtdProtocolConfigOptions v_ProtocolConfigOptionsRX; + + if (isvalue(p_Pco)) { + v_ProtocolConfigOptionsRX := valueof(p_Pco); + if (ispresent(p_Pco.pco)) { // @sic R5s170233 sic@ + v_ProtocolContainerList := f_NAS_GetExtdProtocolConfigOptionList(v_ProtocolConfigOptionsRX.pco, -, p_PdnIndex); // @sic R5-200649, R5s200643 sic@ + } + } + + return f_NAS_ExtdProtocolConfigOptionsTX(v_ProtocolContainerList); + } + + /* + * @desc Function used to check whether the UE requests a P-CSCF address or DNS server address in its PCO + * If the UE does not support IMS, or doesn't request a P-CSCF address, the function returns the default PCO, PPP + * @param p_ConfigOptionsRX + * @param p_IgnoreIM_CN_SubsystemSignalingFlag (default value: true) + * @param p_PdnIndex (default value: PDN_1) + * @return template (omit) NAS_ExtdProtocolConfigOptions_Type + * @status APPROVED (NBIOT) + */ + function f_NAS_GetExtdProtocolConfigOptionList(NAS_ExtdProtocolConfigOptions_Type p_ConfigOptionsRX, + boolean p_IgnoreIM_CN_SubsystemSignalingFlag := true, + PDN_Index_Type p_PdnIndex := PDN_1) + return template (omit) NAS_ExtdProtocolConfigOptions_Type + { /* @sic R5s170515 change 1: "template (omit)" for return type sic@ */ + var PDN_AddressInfo_Type v_PDN_AddressInfo := f_PDN_AddressInfo_Get(p_PdnIndex); // @sic R5-200649 sic@ + var template (omit) NAS_ExtdProtocolConfigOptions_Type v_ProtocolContainerList := omit; + var integer v_PcoCnt := 0; + var O2_Type v_ProtocolId; + var octetstring v_Contents; + var integer i; + + for (i := 0; i < lengthof(p_ConfigOptionsRX); i := i + 1) { + + v_ProtocolId := p_ConfigOptionsRX[i].protocolID; + v_Contents := ''O; + + select (v_ProtocolId) { // See 24.008 Table 10.5.154 + case ('0002'O) { // IM CN Subsystem Signalling Flag, reply with an empty container + if (not p_IgnoreIM_CN_SubsystemSignalingFlag) { + v_ProtocolContainerList[v_PcoCnt] := cs_ProtocolContainer_Common(v_ProtocolId); + v_PcoCnt := v_PcoCnt + 1; + continue; + } + } + case ('0003'O) { // DNS Server IPv6 address + v_Contents := f_Convert_IPv6Addr2OctString(v_PDN_AddressInfo.DNS_ServerAddressIPv6); + } + case ('000D'O) { // DNS Server IPv4 address + v_Contents := f_Convert_IPv4Addr2OctString(v_PDN_AddressInfo.DNS_ServerAddressIPv4); + } + } + + if (lengthof(v_Contents) > 0) { + v_ProtocolContainerList[v_PcoCnt] := cs_ProtocolContainer(v_ProtocolId, v_Contents); + v_PcoCnt := v_PcoCnt + 1; + } + } + return v_ProtocolContainerList; // @sic R5-200649, R5s200643 sic@ + } + //---------------------------------------------------------------------------- + /* + * @desc Get Pdn Index to be used in Multi PDN/PDU ATS + * @param p_DNNType + * @return PDN_Index_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_GetMultiPdnIndex(PDU_PDN_DNN_Type p_DNNType) return PDN_Index_Type + { // @sic R5-221467 sic@ + var PDN_Index_Type v_PDN := PDN_3; + select (p_DNNType) { + case (IMS_DNN){ + v_PDN := PDN_1; + } + case (Emergency_PDN){ + v_PDN := PDN_2; + } + case (URLLC_DNN){ + v_PDN := PDN_4; + } + case (MIOT_DNN){ + v_PDN := PDN_5; + } + case (V2X_DNN){ + v_PDN := PDN_6; + } + } + return v_PDN; + } + + /* + * @desc Get Pdn Type from the Index to be used in Multi PDN/PDU ATS + * @param p_PDN_Index + * @return PDU_PDN_DNN_Type + * @status APPROVED (NR5GC_IRAT) + */ + function f_GetMultiPdnTypeFromIndex(PDN_Index_Type p_PDN_Index) return PDU_PDN_DNN_Type + { // @sic R5-221467 sic@ + var PDU_PDN_DNN_Type v_DNNType := Internet_DNN; + select (p_PDN_Index) { + case (PDN_1){ + v_DNNType := IMS_DNN; + } + case (PDN_2){ + v_DNNType := Emergency_PDN; + } + case (PDN_4){ + v_DNNType := URLLC_DNN; + } + case (PDN_5){ + v_DNNType := MIOT_DNN; + } + case (PDN_6){ + v_DNNType := V2X_DNN; + } + } + return v_DNNType; + } + + /* + * @desc Get PDN DNN Type to be used in Multi PDN/PDU ATS from APN + * @param p_APN + * @return PDU_PDN_DNN_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_GetPDN_DNNTypeFromAPN(octetstring p_APN) return PDU_PDN_DNN_Type + { // @sic R5-221467 sic@ + var PDU_PDN_DNN_Type v_PDNType := None; + + if (match (p_APN, f_DomainName_Encode(pc_APN_ID_Internet))) { // @sic R5s210014 sic@ + v_PDNType := Internet_DNN; + } else if (match (p_APN, f_DomainName_Encode(pc_APN_ID_IMS))) { // @sic R5s210014 sic@ + v_PDNType := IMS_DNN; + } else if (match (p_APN, f_DomainName_Encode(pc_APN_ID_URLLC))) { + v_PDNType := URLLC_DNN; + } else if (match (p_APN, f_DomainName_Encode(pc_APN_ID_MIOT))) { + v_PDNType := MIOT_DNN; + } else if (match (p_APN, f_DomainName_Encode(pc_APN_ID_V2X))) { + v_PDNType := V2X_DNN; + } else if (f_IsDNNForEmergency(p_APN)) { // this isn't specified in table 4.8.4-1, but is a valid PDU type + v_PDNType := Emergency_PDN; + } + + return v_PDNType; + } + + /* + * @desc function to get/initialise p_DNN as per PICS + * @param p_PDUType + * @return charstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_GetDNNStringFromPICS(PDU_PDN_DNN_Type p_PDUType) return charstring + { + var charstring v_DNN; + + select (p_PDUType) { + case (Internet_DNN) { + v_DNN := pc_APN_ID_Internet; + } + case (IMS_DNN) { + v_DNN := pc_APN_ID_IMS; + } + case (URLLC_DNN) { + v_DNN := pc_APN_ID_URLLC; + } + case (MIOT_DNN) { + v_DNN := pc_APN_ID_MIOT; + } + case (V2X_DNN) { + v_DNN := pc_APN_ID_V2X; + } + case (Ethernet_DNN) { // @sic R5-227472 sic@ + v_DNN := pc_APN_ID_Ethernet; + } + // @sic R5s220670 sic@ + case else { FatalError(__FILE__, __LINE__, "Unexpected PICS setting in f_GetDNNStringFromPICS"); } + } + return v_DNN; + } + + /* + * @desc Get Default PDN DNN Type to be used in Multi PDN/PDU ATS from PICS + * @return PDU_PDN_DNN_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_GetDefaultAPN_DNNType_FromPICS() return PDU_PDN_DNN_Type + { // @sic R5-221467 sic@ + var PDU_PDN_DNN_Type v_PDNType := None; + + select (pc_APN_Default_Configuration) { + case (internet) { + v_PDNType := Internet_DNN; + } + case (ims) { + v_PDNType := IMS_DNN; + } + case (urllc) { + v_PDNType := URLLC_DNN; + } + case (miot) { + v_PDNType := MIOT_DNN; + } + case (v2x) { + v_PDNType := V2X_DNN; + } + case (ethernet) { // @sic R5-227472 sic@ + v_PDNType := Ethernet_DNN; + } + } + return v_PDNType; + } + + /* + * @desc Checks DNN to see if it requests emergency PDN, based on f_EUTRA_GetAPNForIMS + * @param p_DNNFromReq + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_IsDNNForEmergency(octetstring p_DNNFromReq) return boolean + { + return match(p_DNNFromReq, f_DomainName_EncodeLabels({"sos"})); + } + + /* + * @desc return label for MCC or MNC to be used in APN + * @param p_MncMcc + * @param p_Digits + * @return charstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC, NR5GC_IRAT, POS) + */ + function f_APN_MccMncLabel(charstring p_MncMcc, + charstring p_Digits) return charstring + { /* in case of the MCC there are 3 digits; for MNC it may be 2 or 3 digits */ + var integer v_DigitCnt := lengthof(p_Digits); + var charstring v_Label := ""; + + select (v_DigitCnt) { + case (2) { v_Label := p_MncMcc & "0" & p_Digits; } + case (3) { v_Label := p_MncMcc & p_Digits; } + case else { FatalError(__FILE__, __LINE__, ""); } + } + return v_Label; + } + /* + * @desc Encode APN acc. to TS 23.003 cl. 9.1 and RFC 1035 cl. 4.1.2 + * @param p_LabelList + * @return octetstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC, NR5GC_IRAT, POS) + */ + function f_DomainName_EncodeLabels(CharStringList_Type p_LabelList) return octetstring + { + var octetstring v_EncodedAPN := ''O; + var octetstring v_LabelOctets; + var integer v_Length; + var integer i; + + for (i := 0; i < lengthof(p_LabelList); i := i + 1) { + v_LabelOctets := char2oct(p_LabelList[i]); + v_Length := lengthof(v_LabelOctets); + v_EncodedAPN := v_EncodedAPN & int2oct(v_Length, 1) & v_LabelOctets; + } + return v_EncodedAPN; + } + + /* + * @desc Encode APN acc. to TS 23.003 cl. 9.1 and RFC 1035 cl. 4.1.2 + * @param p_DomainName + * @return octetstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC, NR5GC_IRAT, POS) + */ + function f_DomainName_Encode(charstring p_DomainName) return octetstring + { + var CharStringList_Type v_LabelList := f_StringSplit(p_DomainName, {"."}); + return f_DomainName_EncodeLabels(v_LabelList); + } + + //============================================================================ + + //---------------------------------------------------------------------------- + /* + * @desc Convert from IMSI, IMEI or IMEISV of type hexstring to octetstring (to be used in f_Imsi2MobileIdentity, f_Imei2MobileIdentity and f_Imeisv2MobileIdentity) + * @param p_MobileId + * @return octetstring + * @status APPROVED (IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_R10_R11, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) + */ + function f_ImsiImei2Octetstring(hexstring p_MobileId) return octetstring + { + var integer v_Length := lengthof(p_MobileId); + var integer v_Odd := (v_Length rem 2); + var octetstring v_Other := '00'O; + var integer I; + var integer K; + + if (v_Odd == 0) { // If length is even + v_Length := v_Length + 1; + p_MobileId := p_MobileId & 'F'H; // add '1111' on to the end of the IMSI + } + + // Reverse each pair of digits + // First digit is not included as it is treated differently + K:=0; + for (I:=1; I < v_Length - 1; I:=I+2) { + v_Other[K] := hex2oct(p_MobileId[I+1] & p_MobileId[I]); + K := K + 1; + } + + return v_Other; + } + + //---------------------------------------------------------------------------- + /* + * @desc Convert from IMSI of type hexstring to NAS MobileIdentity + * @param p_IMSI + * @return template (value) MobileIdentity + * @status APPROVED (IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_R10_R11, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) + */ + function f_Imsi2MobileIdentity(hexstring p_IMSI) return template (value) MobileIdentity + { + var integer v_ImsiLength := lengthof(p_IMSI); + var integer v_Odd := (v_ImsiLength rem 2); + var octetstring v_Other := f_ImsiImei2Octetstring (p_IMSI); // @sic R5s100092 sic@ + var B4_Type v_FirstDigit := hex2bit(p_IMSI[0]); + var B1_Type v_OddEvenInd := int2bit(v_Odd, 1); + + return cds_MobileIdentityImsi_lv(v_FirstDigit, v_OddEvenInd, v_Other); + } + + //---------------------------------------------------------------------------- + /* + * @desc Convert from IMEI of type hexstring to NAS MobileIdentity + * When transmitted by the MS the CD/SD bit is set to 0. + * @param p_IMEI + * @param p_NAS_IdType (default value: tsc_IdType_IMEI) + * @return template (present) MobileIdentity + * @status APPROVED (LTE, LTE_A_R10_R11, NBIOT) + */ + function f_Imei2MobileIdentity(hexstring p_IMEI, + NAS_IdType p_NAS_IdType := tsc_IdType_IMEI) return template (present) MobileIdentity // @sic R5s130758 sic@ + { + var integer v_ImeiLength := lengthof(p_IMEI); + var integer v_Odd := (v_ImeiLength rem 2); + var octetstring v_Other := f_ImsiImei2Octetstring (substr(p_IMEI, 0, (v_ImeiLength - 1)) & '0'H); // @sic R5s160006 sic@ + var B4_Type v_FirstDigit := hex2bit(p_IMEI[0]); + var B1_Type v_OddEvenInd := int2bit(v_Odd, 1); + + return cr_MobileIdentityImei(v_FirstDigit, v_OddEvenInd, v_Other, p_NAS_IdType); // @sic R5s130758 sic@ + } + + //---------------------------------------------------------------------------- + /* + * @desc Convert from IMEISV of type hexstring to NAS MobileIdentity + * @param p_IMEISV + * @return template (present) MobileIdentity + * @status APPROVED (LTE, NBIOT) + */ + function f_Imeisv2MobileIdentity(hexstring p_IMEISV) return template (present) MobileIdentity + { // @sic R5-131832 sic@ + var integer v_ImeiLength := lengthof(p_IMEISV); + var integer v_Odd := (v_ImeiLength rem 2); + var octetstring v_Other := f_ImsiImei2Octetstring (p_IMEISV); + var B4_Type v_FirstDigit := hex2bit(p_IMEISV[0]); + var B1_Type v_OddEvenInd := int2bit(v_Odd, 1); + + return cr_MobileIdentityImeisv(v_FirstDigit, v_OddEvenInd, v_Other); + } + + //---------------------------------------------------------------------------- + /* + * @desc Convert from Emergency Number of type hexstring to octetstring (to be used in Emergency Number List in e.g. Attach Accept) + * @param p_EmgNum + * @return octetstring + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC, NR5GC_IRAT, POS) + */ + function fl_EmgNum2Octetstring(hexstring p_EmgNum) return octetstring + { + var integer v_Length := lengthof(p_EmgNum); + var integer v_Odd := (v_Length rem 2); + var octetstring v_Result := '00'O; + var integer I; + var integer K; + + if (v_Odd == 1) { // If length is odd + v_Length := v_Length + 1; + p_EmgNum := p_EmgNum & 'F'H; // add '1111' on to the end of the Emergency Number + } + + // Reverse each pair of digits, note that v_Length is even + K:=0; + for (I:=0; I < v_Length - 1; I:=I+2) { + v_Result[K] := hex2oct(p_EmgNum[I+1] & p_EmgNum[I]); + K := K + 1; + } + + return v_Result; + } + + /* + * @desc To generate an local emergency number list + * @param p_NoOfNums - To specify how many numbers to be included in the list (max = 10) + * @param p_NumList + * @return template (value) EmergNumList + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC, NR5GC_IRAT, POS) + */ + function f_Build_EmergNumList(integer p_NoOfNums, + EmergencyNumList p_NumList) return template (value) EmergNumList + { + var integer i; + var template (value) EmergNumList v_EmergNum; + var octetstring v_LocalNum; + var integer v_LocalLength := 0; + var integer v_TotalLength := 0; + var B7_Type v_ServCat; + + v_EmergNum.iei := '34'O; + for (i := 0; i < p_NoOfNums; i:=i+1) { + v_LocalNum := fl_EmgNum2Octetstring (p_NumList[i]); + v_LocalLength := lengthof(v_LocalNum); + if (i/2 > 0) { + v_ServCat := ('00'B & ('00001'B << i)); + } else { + v_ServCat := ('00'B & ('00001'B << i)); + } + v_EmergNum.emergNum[i]:= cs_EmergencyLocalNumber(int2oct(v_LocalLength + 1, 1), + cs_EmergServCat(v_ServCat), + v_LocalNum); + v_TotalLength := v_TotalLength + 2 + v_LocalLength; // 1 octet for v_LocalLength + 1 for SCValue + length of number + } + v_EmergNum.iel := int2oct (v_TotalLength, 1); + return v_EmergNum; + } + + /* + * @desc To generate an extended emergency number list + * @param p_NoOfNums + * @param p_NumList + * @param p_EENLV (default value: '0'B) + * @param p_SubServices (default value: ''O) + * @return template (value) ExtdEmergNumList + * @status APPROVED (NR5GC) + */ + function f_Build_ExtdEmergNumList(integer p_NoOfNums, + EmergencyNumList p_NumList, + B1_Type p_EENLV := '0'B, + octetstring p_SubServices := ''O) return template (value) ExtdEmergNumList + { + var integer i; + var template (value) ExtdEmergNumList v_EmergNum; + var octetstring v_LocalNum; + var integer v_LocalLength := 0; + var integer v_TotalLength := 0; + + v_EmergNum.iei := '7A'O; + for (i := 0; i < p_NoOfNums; i:=i+1) { + v_LocalNum := fl_EmgNum2Octetstring (p_NumList[i]); + v_EmergNum.emergNum[i]:= cs_ExtdEmergNum(v_LocalNum, p_SubServices); + v_LocalLength := (lengthof(v_LocalNum)+ 2 + lengthof (p_SubServices)); + v_TotalLength := v_TotalLength + v_LocalLength; + } + v_EmergNum.spareBits := tsc_Spare7; + v_EmergNum.extdEmergNumListValidity := p_EENLV; + v_EmergNum.iel := int2oct (v_TotalLength + 1, 2); // 1 octet for EENLV + return v_EmergNum; + } + + /* + * @desc Generation of a new list of local emergency numbers different from existing ones + * @param p_NoOfNums .. maximum 20 + * @param p_ExistingNums + * @return EmergencyNumList .. numbers of 3 decimal digits each + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS) + */ + function f_Get_EmergencyNumList(integer p_NoOfNums, + EmergencyNumList p_ExistingNums) return EmergencyNumList + { /* @sic R5s210369 sic@ */ + var EmergencyNumList v_NewNumbers; + var integer v_Number := 115; // start as implied by LTE test case 11.2.6 @sic R5s141315 sic@ + var boolean v_NumberExists; + var hexstring v_NumberDigits; + var integer i; + + if ( p_NoOfNums > 20 ) { FatalError(__FILE__, __LINE__, "unsupported number of emg nums") }; // max 20 emg nums may be generated + + for (i:=0; i the text between the most inner quotes is returned */ + var charstring v_Expression := p_Expression; + var charstring v_Result; + var template charstring v_ExpectedString := pattern p_ExpectedString; + var boolean v_MatchResult; + var charstring v_CRLF := oct2char('0D'O) & oct2char('0A'O); + + v_Result := regexp(p_AT_Response, v_Expression, p_Group); + + v_MatchResult := match(v_Result, v_ExpectedString); + + if (v_MatchResult == true) { + f_SetVerdict(pass,__FILE__, __LINE__, p_Text); + } else { + f_ErrorLog(__FILE__, __LINE__, v_CRLF & "Value expected: " & p_ExpectedString & v_CRLF & "Value received: " & v_Result); // if anything went wrong, show it + f_SetVerdict(fail,__FILE__, __LINE__, p_Text); + } + } + + /*---------------------------------------------------------------------------- + * @desc Extract UE security capabilities from IEs and store for use later + * @param p_UeNetworkCapability + * @param p_MsNetworkCapability + * @return UE_SecurityCapability + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) + */ + function f_EPS_FillNAS_SecurityCapability_Common(UE_NetworkCap p_UeNetworkCapability, + template (omit) MS_NetworkCap p_MsNetworkCapability) return UE_SecurityCapability + { /* @sic R5s110014, R5-190717 Renamed to be re-used by NR sic@ */ + var UE_SecurityCapability v_SecurityCapability; + var MS_NetworkCap v_MS_NetworkCap; + var B8_Type v_GEA := '00000000'B; + var integer v_Length := 2; + + v_SecurityCapability.eeaCap := bit2oct(p_UeNetworkCapability.eeaCap); // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + v_SecurityCapability.eiaCap := bit2oct(p_UeNetworkCapability.eiaCap); // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + + if (ispresent(p_UeNetworkCapability.ueaCap)) { + v_SecurityCapability.ueaCap := bit2oct(p_UeNetworkCapability.ueaCap); // @sic R5s180271 Baseline Moving 2018 Phase 1 sic@ + v_Length := v_Length + 2; // if octet 5 is present, 6 will be too @sic R5s100485 sic@ + if (ispresent(p_UeNetworkCapability.uiaCap)) { + v_SecurityCapability.uiaCap := bit2oct(p_UeNetworkCapability.uiaCap) and4b '7F'O; // @sic R5s100520, R5s180271 Baseline Moving 2018 Phase 1 sic@ + } else { + v_SecurityCapability.uiaCap := '00'O; // @sic R5s100485 sic@ + } + } else { + v_SecurityCapability.ueaCap := omit; + v_SecurityCapability.uiaCap := omit; // @sic R5s100184 sic@ + } + + if (isvalue (p_MsNetworkCapability)) { + v_MS_NetworkCap := valueof(p_MsNetworkCapability); + if (v_MS_NetworkCap.gea1 == '1'B) { + v_GEA := v_GEA or4b '01000000'B; // error corrected in delivery + } + if (v_MS_NetworkCap.gea2 == '1'B) { + v_GEA := v_GEA or4b '00100000'B; // error corrected in delivery + } + if (v_MS_NetworkCap.gea3 == '1'B) { + v_GEA := v_GEA or4b '00010000'B; // error corrected in delivery + } + if (v_MS_NetworkCap.gea4 == '1'B) { + v_GEA := v_GEA or4b '00001000'B; // error corrected in delivery + } + if (v_MS_NetworkCap.gea5 == '1'B) { + v_GEA := v_GEA or4b '00000100'B; // error corrected in delivery + } + if (v_MS_NetworkCap.gea6 == '1'B) { + v_GEA := v_GEA or4b '00000010'B; // error corrected in delivery + } + if (v_MS_NetworkCap.gea7 == '1'B) { + v_GEA := v_GEA or4b '00000001'B; // error corrected in delivery + } + v_Length := v_Length + 1; + v_SecurityCapability.geaCap := bit2oct (v_GEA); // Now store the completed GEA octet + if (v_Length == 3) { // UE didn't report any UTRAN capabilities, so set them to 0 @sic R5s100485 sic@ + v_Length := 5; + v_SecurityCapability.ueaCap := '00'O; + v_SecurityCapability.uiaCap := '00'O; + } + } else {// MS Network Capability not present @sic R5s100184 sic@ + v_SecurityCapability.geaCap := omit; + // if UE included UTRAN capabilities but they're all zero + if (v_SecurityCapability.ueaCap == '00'O and v_SecurityCapability.uiaCap == '00'O) { // @sic R5s130107 sic@ + v_SecurityCapability.ueaCap := omit; + v_SecurityCapability.uiaCap := omit; + v_Length := 2; + } + } + + v_SecurityCapability.iel := int2oct (v_Length, 1); // Now store the length + + return v_SecurityCapability; + } + + /* + * @desc Calculate current year from System Time + * @return integer + * @status APPROVED (LTE, NR5GC, SSNITZ) + */ + function f_NITZ_GetCurrentYear() return integer + { + var Struct_tm_Type v_LocalTime; + var integer v_TimezoneSeconds; + fx_GetSystemTime(v_LocalTime, v_TimezoneSeconds); + return v_LocalTime.tm_year + 1900; + } + + /* + * @desc Convert current year from integer to 1 octet + * @param p_Year + * @return O1_Type + * @status APPROVED (LTE, NR5GC, SSNITZ) + */ + function f_NITZ_CurrentYear2Oct(integer p_Year) return O1_Type + { + return hex2oct(f_SwappedNibbles(p_Year)); + } + + /* + * @desc Extract the last 2 digits of the current year (as integer value) + * @param p_Year + * @return charstring + * @status APPROVED (LTE, NR5GC, SSNITZ) + */ + function f_NITZ_CurrentYear2Str(integer p_Year) return charstring + { + return int2str(p_Year mod 100); + } + +} diff --git a/ttcn/Lib3GPP/NAS/NAS_CommonTemplates.ttcn b/ttcn/Lib3GPP/NAS/NAS_CommonTemplates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..778f41d4d9068e4ee095a2f04fda72bf1cacd17d --- /dev/null +++ b/ttcn/Lib3GPP/NAS/NAS_CommonTemplates.ttcn @@ -0,0 +1,2050 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-06-08 15:55:51 +0200 (Thu, 08 Jun 2023) $ +// $Rev: 36130 $ +/******************************************************************************/ + +module NAS_CommonTemplates { + + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + import from CommonIP all; + import from Parameters all; + + //============================================================================== + group NAS_CommonConstants { // Constants being used for NAS_CommonTemplates + + const B1_Type tsc_Spare1 := '0'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + const B2_Type tsc_Spare2 := '00'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + const B3_Type tsc_Spare3 := '000'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + const B4_Type tsc_Spare4 := '0000'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + const B5_Type tsc_Spare5 := '00000'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + const B6_Type tsc_Spare6 := '000000'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + const B7_Type tsc_Spare7 := '0000000'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const SpareHalfOctet tsc_SpareHalfOctet := '0'H; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + + const SecurityHeaderType tsc_SHT_NoSecurityProtection := '0000'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + const SecurityHeaderType tsc_SHT_IntegrityProtected := '0001'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + const SecurityHeaderType tsc_SHT_IntegrityProtected_Ciphered := '0010'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + const SecurityHeaderType tsc_SHT_IntegrityProtected_NewSecurityContext := '0011'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const SecurityHeaderType tsc_SHT_IntegrityProtected_Ciphered_NewSecurityContext := '0100'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + const SecurityHeaderType tsc_SHT_IntegrityProtected_PartiallyCiphered := '0101'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, UTRAN) */ + + const NAS_IdType tsc_IdType_IMSI := '001'B; /* suitable for identity type 24.008 cl. 10.5.3.4 and identiy type 2 24.008 cl. 10.5.5.9 + @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_R10_R11, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + const NAS_IdType tsc_IdType_IMEI := '010'B; /* suitable for identity type 24.008 cl. 10.5.3.4 and identiy type 2 24.008 cl. 10.5.5.9 + @status APPROVED (LTE, LTE_A_R10_R11, NBIOT) */ + const NAS_IdType tsc_IdType_IMEI_24301 := '011'B; /* suitable for identity type 24.301 cl. 9.9.3.12.1 + @status APPROVED (LTE) */ + const NAS_IdType tsc_IdType_IMEISV := '011'B; /* @sic R5s130438 sic@ suitable for identity type 24.008 cl. 10.5.3.4 and identiy type 2 24.008 cl. 10.5.5.9 + @status APPROVED (LTE, NBIOT) */ + const NAS_IdType tsc_IdType_TMSI := '100'B; /* suitable for identity type 24.008 cl. 10.5.3.4 and identiy type 2 24.008 cl. 10.5.5.9 + @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + const NAS_IdType tsc_IdType_GUTI := '110'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + + const B3_Type tsc_IMEISV_Requested := '001'B; /* @sic R5s130438 sic@ suitable for IMEISV request type 24.008 cl. 10.5.5.10 + @status APPROVED (IMS, LTE, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + + const NAS_CauseValue_Type tsc_EmmCause_IllegalUe := '00000011'B; /* @status APPROVED (LTE, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + const NAS_CauseValue_Type tsc_EmmCause_IllegalMe := '00000110'B; /* @status APPROVED (LTE, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + + const NAS_CauseValue_Type tsc_Cause_MAC_Failure := '00010100'B; /* @status APPROVED ( LTE, NBIOT, NR5GC) */ + const NAS_CauseValue_Type tsc_Cause_SQN_Failure := '00010101'B; /* @status APPROVED ( LTE, NBIOT, NR5GC) */ + const NAS_CauseValue_Type tsc_Cause_nonEPS_AuthUnacceptable := '00011010'B; /* @status APPROVED (LTE, NBIOT, NR5GC) */ + const NAS_CauseValue_Type tsc_Cause_TA_NotAllowed := '00001100'B; /* @status APPROVED (LTE, LTE_A_R10_R11, LTE_IRAT, NBIOT, NR5GC) */ + const NAS_CauseValue_Type tsc_EmmCause_SemanticallyIncorrect := '01011111'B; /* @status APPROVED (LTE, NBIOT, NR5GC) */ + const NAS_CauseValue_Type tsc_Cause_Roaming_NotAllowed := '00001101'B; /* @status APPROVED (LTE, LTE_IRAT, NBIOT, NR5GC) */ + const NAS_CauseValue_Type tsc_Cause_PLMN_NotAllowed := '00001011'B; /* @status APPROVED (LTE, LTE_IRAT, NBIOT, NR5GC) */ + const NAS_CauseValue_Type tsc_Cause_NoNetworkSlices_Available := '00111110'B; /* @status APPROVED (NR5GC) */ + const NAS_CauseValue_Type tsc_Cause_PLMN_NotAllowedToOperateAtPresentUELocation := '01001110'B; + + const NAS_KsiValue tsc_NasKsi_NoKey := '111'B; /* @status APPROVED (LTE, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + + const TmsiStatusValue tsc_NoValidTmsi := '0'B; /* @status APPROVED (UTRAN) */ + + const GprsTimerUnit tsc_GprsTimerUnit_2sec := '000'B; /* @status APPROVED (LTE, NBIOT) */ + const GprsTimerUnit tsc_GprsTimerUnit_1min := '001'B; /* @status APPROVED (LTE, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, UTRAN) */ + const GprsTimerUnit tsc_Gprs3TimerUnit_1min := '101'B; /* @status APPROVED (IMS, LTE_A_R10_R11, LTE_A_R12, NBIOT, NR5GC, SSNITZ, UTRAN) */ + const GprsTimerUnit tsc_GprsTimerUnit_6min := '010'B; /* @status APPROVED (LTE, LTE_IRAT) */ + const GprsTimerUnit tsc_Gprs3TimerUnit_30sec := '100'B; /* @status APPROVED (LTE_A_R12) */ + const GprsTimerUnit tsc_GprsTimerUnit_deact := '111'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + const O2_Type tsc_PCO_Id_DSMIPv6 := '0007'O; + const O2_Type tsc_PCO_Id_DSMIPv6_IPv4 := '0009'O; + + const O4_Type tsc_IPv4Mask := 'FFFFFFFF'O; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + const O16_Type tsc_IPv6Mask := 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'O; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, UTRAN) */ + + const B2_Type tsc_NonConsecutiveTacs := '00'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const B2_Type tsc_ConsecutiveTacs := '01'B; /* @status APPROVED (LTE, NBIOT, NR5GC) */ + const B2_Type tsc_MultiplePlmns := '10'B; /* @status APPROVED (LTE, NBIOT) */ + + const PdnTypeValue tsc_PdnType_IPv4 := '001'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const PdnTypeValue tsc_PdnType_IPv6 := '010'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const PdnTypeValue tsc_PdnType_IPv4v6 := '011'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + + // TS 24.007 clause 11.2.3.1a + const ProcedureTransactionIdentifier tsc_PTI_Unassigned := '00'O; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const ProcedureTransactionIdentifier tsc_PTI_1 := '01'O; /* @status APPROVED (LTE) */ + + const B4_Type tsc_PayloadContainerESMMsg := '0001'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + const octetstring tsc_APN1 := '0541504E2D31'O; /* Access Point Name APN-1; + @status APPROVED (ENDC, IMS, LTE, LTE_A_R10_R11, NBIOT) */ + const charstring tsc_APN1_String := "APN-1"; /* Access Point Name APN-1; @sic R5s100466 sic@ + @status APPROVED (ENDC, LTE, LTE_A_R10_R11, NBIOT, NR5GC) */ + const octetstring tsc_APN2 := '0541504E2D32'O; /* Access Point Name APN-2; + @status APPROVED (LTE, NBIOT) */ + const charstring tsc_APN2_String := "APN-2"; /* Access Point Name APN-2; @sic R5s100748 sic@ + @status APPROVED (LTE, LTE_A_R10_R11, NBIOT) */ + const octetstring tsc_APN3 := '0541504E2D33'O; /* Access Point Name APN-3; + @status APPROVED (LTE_A_R10_R11) */ + const charstring tsc_APN3_String := "APN-3"; /* Access Point Name APN-3; @sic R5-143213 sic@ + @status APPROVED (LTE_A_R10_R11) */ + + } // end group NAS_CommonConstants + //------------------------------------------------------------------------------ + + template (value) AccessPointName cs_AccessPointName(octetstring p_Name) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + iei := omit, + iel := int2oct(lengthof(p_Name), 1), + nameValue := p_Name + }; + + template (present) AccessPointName cr_AccessPointName(octetstring p_Name) := + { /* @status APPROVED (ENDC, IMS, LTE, LTE_A_R10_R11, NBIOT) */ + iei := '28'O, + iel := int2oct(lengthof(p_Name), 1), + nameValue := p_Name + }; + + template (present) AccessPointName cr_AccessPointName_Any := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, UTRAN) */ + iei := '28'O, + iel := ?, + nameValue := ? + }; + + template (present) AdditionalUpdateType cr_AdditionalUpdateTypeAny := + { /* 24.301 cl. 9.9.3.0B */ + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + /* @sic R5s100135 sic@ */ + iei := 'F'H, // currently only used as TV + pnb_CIOT := ?, // @sic R5s160711 Baseline Moving, R5s210796 sic@ + signallingActiveFlag := tsc_Spare1, // @sic R5s160711 Baseline Moving sic@ + addUpdateTypeValue := ? + }; + + template (present) AuthenticationFailureParameter cr_AuthFailParam_Any := + { /* TLV format to be used in Authentication_Failure */ + /* @status APPROVED (IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_IRAT, NBIOT, NR5GC, POS, SSNITZ, UTRAN) */ + iei := '30'O, // version 110, and value used in GMM + iel := '0E'O, + auts := ? + }; + + template (present) AuthenticationFailureParameter cdr_AuthFailParamGSM_Any modifies cr_AuthFailParam_Any := + { /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) */ + iei := '22'O + }; + + template (value) RAND cs_RAND_v(B128_Type p_RAND) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + iei := omit, + randValue := p_RAND + }; + + template (value) RAND cs_GMM_AuthRAND(B128_Type p_Rand) := + { /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := '21'O, + randValue := p_Rand + }; + + template (value) AUTN cs_AUTN_lv(B128_Type p_AUTN) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + iei := omit, + iel := '10'O, /* AUTN has length of 128 bits i.e. 16 octets */ + aUTN := p_AUTN + }; + + template (value) AUTN cs_GSM_AUTN(template (value) B128_Type p_AUTN) := + { /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := '20'O, + iel := '10'O, // Length of 16 octets + aUTN := p_AUTN // value of Authentication Parameter AUTN + }; + + template (value) AUTN cs_GMM_AUTN(B128_Type p_Autn) := + { /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) */ + iei := '28'O, + iel := '10'O, + aUTN := p_Autn + }; + + template (value) CiphKeySeqNum cs_CiphKeySeqNum(template (omit) IEI4_Type p_IEI, + template (value) KeySeq p_KeySeq) := + { /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + spare1 := '0'B, + keySeq := p_KeySeq + }; + + template (present) CiphKeySeqNum cr_CiphKeySeqNum(template (omit) IEI4_Type p_IEI, + template (present) KeySeq p_KeySeq) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + spare1 := '0'B, + keySeq := p_KeySeq + }; + + // ============================================================================= + // Structured Type Constraint + // Codec + // 3G TS 24.008 cl. 10.5.4.32 + // ----------------------------------------------------------------------------- + template (present) Codec cr_CodecAny := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + sysId := ?, // system identifcation + len := ?, // length + bitMap1to8 := ?, // codec bitmap bits 1-8 + bitMap9to16 := * // codec bitmap bits 9-16 + }; + + // ============================================================================= + // Structured Type Constraint + // Supported Codec List + // 3G TS 24.008 cl. 10.5.3.32 + // ----------------------------------------------------------------------------- + template (present) CodecList cr_CodecListAny := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := '40'O, // '01000000'B (40 hex) + iel := ?, // length + codec := ({cr_CodecAny, cr_CodecAny, cr_CodecAny, *}, {cr_CodecAny, cr_CodecAny, *}, {cr_CodecAny, *}) // Codec list @sic R5s110278 sic@ + }; + + template (value) DCN_ID cs_Dcn_Id (O2_Type p_DCNIdValue) := + { /* @status APPROVED (IMS, SSNITZ, UTRAN) */ + iei := '41'O, + iel := '02'O, + dcnIdValue := p_DCNIdValue + }; + + template (value) DetachType cs_DetachType(NAS_AttDetValue_Type p_TypeOfDetach):= + { /* @status APPROVED (IMS_IRAT, LTE, LTE_A_R10_R11, NBIOT) */ + switchOff := '0'B, + typeOfDetach := p_TypeOfDetach + }; + + template (present) DetachType cr_DetachType(template (present) B1_Type p_SwitchOff, + template (present) NAS_AttDetValue_Type p_TypeOfDetach) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + switchOff := p_SwitchOff, + typeOfDetach := p_TypeOfDetach + }; + + template (present) DetachType cr_DetachTypeOnSwitchOff := cr_DetachType('1'B, ?); /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) */ + + template (present) DeviceProperties cr_DeviceProperties(IEI4_Type p_IEI, + template (present) B1_Type p_LowPriority := ?) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + spare := tsc_Spare3, + lowPriority := p_LowPriority + }; + + template (present) DRXparameter cr_DRXparameter_Any (template (omit) IEI8_Type p_IEI) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + splitPGcycleCode := ?, // Split PG cycle code + cnDRXcoef := ?, // CN specific DRX cycle length coefficient + splitOnCCCH := ?, // Split on CCCCH + nonDRXtimer := ? // non-DRX timer + }; + + template (present) EDGE_Struct cr_EDGE_Struct_Any := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + modulationCapability := ?, + pwrMask1 := ?, + eDGE_RF_PowerCapability1 := *, // not present if pwrMask1 = 0 + pwrMask2 := ?, + eDGE_RF_PowerCapability2 := * // not present if pwrMask2 = 0 + }; + + // ============================================================================= + // Structured Type Constraint + // Emergency Service Category + // 3GPP 24.008 / 10.5.4.33 + // ----------------------------------------------------------------------------- + template (present) EmergServCat cr_EmergServCat (template (present) B7_Type p_Cat) := + { + spare := '0'B, + emergSCValue := p_Cat + }; + + template (value) EmergServCat cs_EmergServCat(B7_Type p_EmergSCValue) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC, NR5GC_IRAT, POS) */ + spare := '0'B, + emergSCValue := p_EmergSCValue // Emergency Service Category value + }; + + template (value) EmergNum cs_EmergencyLocalNumber(Type4Length_Type p_Length, + template (value) EmergServCat p_EmergSCValue, + octetstring p_Number) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC, NR5GC_IRAT, POS) */ + len := p_Length, // length + emergServCat := p_EmergSCValue, // Emergency Service Category + digits := p_Number // BCD numbers + }; + + // ============================================================================= + // Structured Type Constraint + // ----------------------------------------------------------------------------- + template (present) ExtdDRXParams cr_ExtdDRXParamsAny := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := '6E'O, + iel := ?, // length + pagingTimeWindow := ?, + eDRXValue := ?, + extdPTW := * // @sic R5s221182 Baseline Moving Rel-17 sic@ + }; + + template (value) GPRS_Timer cs_GprsTimer_tv(IEI8_Type p_IEI, // @sic R5s100662 sic@ + B3_Type p_Unit, + B5_Type p_Value) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + iei := p_IEI, // '1E'O + unit := p_Unit, + timerValue := p_Value + }; + + template (value) GPRS_Timer cs_GprsTimer_v(GprsTimerUnit p_Unit, + B5_Type p_Value) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := omit, + unit := p_Unit, + timerValue := p_Value + }; + + template (value) GPRS_Timer cs_GprsTimer_v_deact := cs_GprsTimer_v(tsc_GprsTimerUnit_deact, tsc_Spare5); /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + + template (value) IdentityType cs_IdentityType(NAS_IdType p_NAS_IdType) := + { /* @status APPROVED (ENDC, LTE, LTE_A_R10_R11, NBIOT, NR5GC) */ + spare := '0'B, + typeOfId := p_NAS_IdType + }; + + template (present) LocAreaId cr_LAI(template (omit) IEI8_Type p_IEI, + template (present) octetstring p_PLMN := ?, + template (present) octetstring p_LAC := ?) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + plmn := p_PLMN, // MCC + MNC + lac := p_LAC // location area code + }; + + template (present) LocAreaId cr_LAI_Any := cr_LAI('13'O); /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + template (present) LocAreaId cr_LAI_Any_v := cr_LAI(omit); /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) */ + + template (value) LocAreaId cs_LAI(template (omit) IEI8_Type p_IEI, + template (value) octetstring p_PLMN, + template (value) octetstring p_LAC) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + plmn := p_PLMN, // MCC + MNC + lac := p_LAC // location area code + }; + + template (value) LLC_SAPI cs_LLC_SAPI(template (omit) IEI8_Type p_IEI := omit, + B4_Type p_LlcSapiValue) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, UTRAN) */ + iei := p_IEI, + spare := '0000'B, + llcSapiValue := p_LlcSapiValue + }; + + template (value) LLC_SAPI cs_LLC_SAPI_11 (template (omit) IEI8_Type p_IEI := omit) := cs_LLC_SAPI(p_IEI, '1011'B); /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + template (value) LLC_SAPI cs_LLC_SAPI_03 (template (omit) IEI8_Type p_IEI := omit) := cs_LLC_SAPI(p_IEI, '0011'B); /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, UTRAN) */ + + template (present) MobileIdentity cr_MobileIdAny(template (omit) IEI8_Type p_IEI := omit) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + iel := ?, + idDigit1 := ?, + oddEvenInd := ?, + typeOfId := ?, + otherDigits := ? + }; + + template (value) MobileIdentity cs_MobileIdentityGuti(template (omit) IEI8_Type p_IEI, + octetstring p_Guti) := + { + /* Reference: 24.301 cl. 9.9.3.12; + @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + iei := p_IEI, + iel := int2oct(lengthof(p_Guti) + 1, 1), // 11 octets in case of GUTI + idDigit1 := '1111'B, // in case of the GUTI + oddEvenInd := '0'B, // in case of the GUTI + typeOfId := tsc_IdType_GUTI, // 3 bits + otherDigits := p_Guti // 10 octets acc. to 24.301 + }; + + template (value) MobileIdentity cs_MobileIdentityImsi(B4_Type p_FirstDigit, + B1_Type p_OddEvenInd, + octetstring p_OtherDigits) := + { /* @status APPROVED (IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_R10_R11, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := '17'O, + iel := int2oct(lengthof(p_OtherDigits) + 1, 1), + idDigit1 := p_FirstDigit, // 4 bits + oddEvenInd := p_OddEvenInd, // 1 bit + typeOfId := tsc_IdType_IMSI, // 3 bits + otherDigits := p_OtherDigits + }; + + template (value) MobileIdentity cds_MobileIdentityImsi_lv(B4_Type p_FirstDigit, + B1_Type p_OddEvenInd, + octetstring p_OtherDigits) + modifies cs_MobileIdentityImsi := + { /* @status APPROVED (IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_R10_R11, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := omit + }; + + template (value) MobileIdentity cs_MobileIdTMSIorPTMSI(template (omit) IEI8_Type p_IEI, + O4_Type p_TmsiPtmsi) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, // for U/G this is '18'O + iel := '05'O, // TMSI consists of 4 octets + idDigit1 := '1111'B, // special coding for TMSI + oddEvenInd := '0'B, // even + typeOfId := tsc_IdType_TMSI, // TMSI / P-TMSI + otherDigits := p_TmsiPtmsi + }; + + template (value) MobileIdentity cs_MobileIdTMSI(template (omit) IEI8_Type p_IEI, // iei can be '17' (MM) or '13' (GMM) or omit + O4_Type p_Tmsi) := + /* @status APPROVED (IMS_IRAT, LTE_IRAT, SSNITZ) */ + cs_MobileIdTMSIorPTMSI(p_IEI, p_Tmsi); + + template (present) MobileIdentity cr_MobileIdTMSI_lv(template (present) octetstring p_Tmsi := ?) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := omit, + iel := '05'O, // TMSI consists of 4 octets + idDigit1 := '1111'B, // special coding for TMSI + oddEvenInd := '0'B, // even + typeOfId := tsc_IdType_TMSI, // TMSI + otherDigits := p_Tmsi + }; + + template (present) MobileIdentity cdr_MobileIdTMSI_tlv(template (present) octetstring p_Tmsi := ?, + IEI8_Type p_IEI := '18'O) + modifies cr_MobileIdTMSI_lv := + { /* @status APPROVED (IMS_IRAT, LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI + }; + + template (present) MobileIdentity cr_MobileIdentityImei(B4_Type p_FirstDigit, + B1_Type p_OddEvenInd, + octetstring p_OtherDigits, + NAS_IdType p_NAS_IdType := tsc_IdType_IMEI) := // @sic R5s130758 sic@ + { /* @status APPROVED (LTE, LTE_A_R10_R11, NBIOT) */ + iei := omit, + iel := int2oct(lengthof(p_OtherDigits) + 1, 1), + idDigit1 := p_FirstDigit, // 4 bits + oddEvenInd := p_OddEvenInd, // 1 bit + typeOfId := p_NAS_IdType, // 3 bits // @sic R5s130758 sic@ + otherDigits := p_OtherDigits + }; + + template (present) MobileIdentity cr_MobileIdentityImeisv(B4_Type p_FirstDigit, // @sic R5-131832 sic@ + B1_Type p_OddEvenInd, + octetstring p_OtherDigits) := + { /* @status APPROVED (LTE, NBIOT) */ + iei := omit, + iel := int2oct(lengthof(p_OtherDigits) + 1, 1), + idDigit1 := p_FirstDigit, // 4 bits + oddEvenInd := p_OddEvenInd, // 1 bit + typeOfId := tsc_IdType_IMEISV, // 3 bits + otherDigits := p_OtherDigits + }; + + template (present) MS_Clsmk2 cr_MS_Clsmk2_Any_tlv(template (omit) IEI8_Type p_IEI := '11'O) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, // @sic R5s100662, R5s110112 sic@ + iel := '03'O, + spare1_1 := '0'B, + revLvl := ?, + eSIND := ?, + a5_1 := ?, + rFPwrCap := ?, + spare1_2 := '0'B, + pSCap := ?, + sSSI := ?, + sMCap := ?, + vBS := ?, + vGCS := ?, + fC := ?, + cM3 := ?, + spare1_3 := '0'B, + lCSVA := ?, + uCS2 := ?, + soLSA := ?, + cMSP := ?, + a5_3 := ?, + a5_2 := ? + }; + + template (present) MS_Clsmk2 cr_MS_Clsmk2_Any := + /* @status APPROVED (IMS_IRAT, LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) */ + cr_MS_Clsmk2_Any_tlv (omit); + + template (present) MS_Clsmk3 cr_MSCLSMK3_Any := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := '20'O, /* 0x20 */ + iel := ?, /* OCTETSTRING [1] */ + spareBit := '0'B, // spare bit */ + multibandSupported := ?, + a5_7 := ?, /* a5/7 algorithm supported */ + a5_6 := ?, /* a5/6 algorithm supported */ + a5_5 := ?, /* a5/5 algorithm supported */ + a5_4 := ?, /* a5/4 algorithm supported */ + associatedRadioCapabilty2 := *, /* present if multibandSupported = 101 or 110 */ + spareBits1 := *, /* present if multibandSupported = 001 or 010 or 100 */ + associatedRadioCapabilty1 := *, /* present if multibandSupported = 001 or 010 or 100 or 101 or 110 */ + maskBit1 := ?, + rGSM_RadioCapability := *, /* R-GSM band associated radio capability. + not present if maskB1 = 0 */ + maskBit2 := ?, + multiSlotClass := *, /* multi slot class. + not present if multiSlotClass = 0 */ + uCS2Treatment := ?, + extMeasurementCapability := ?, /* extended measurement capability */ + maskBit3 := ?, + msMeasurementCapability := cr_MS_MeasCapability_Any ifpresent, /* MS measurement capability + // not present if maskB3 = 0 */ + maskBit4 := ?, + msPositioningMethod := *, /* MS positioning method capability + not present if maskB4 = 0 */ + maskBit5 := ?, + eDGE_MultiSlot := *, /* EDGE multi slot capability + not present if maskB5 = 0 */ + maskBit6 := ?, + psk8_Struct := cr_EDGE_Struct_Any ifpresent, /* EDGE struct + not present if maskB6 = 0 */ + maskBit7 := ?, + gSM400BandsSupported := *, /* not present if maskBIt7 = 0 */ + gSM400AssociatedRadioCapability := *, /* not present if gSM400BandsSupported = 00 or maskB7 = 0 */ + maskBit8 := ?, + gSM850AssociatedRadiioCapability := *, /* not present if maskBIt8 = 0 */ + maskBit9 := ?, + pCS1900AssociatedRadiioCapability := *, /* not present if maskBIt9 = 0 */ + uMTS_FDD_RAT_Capability := ?, + uMTS384TDD_RAT_Capability := ?, + cDMA2000_RAT_Capability := ?, + maskBit10 := ?, + dTM_GPRS_MultiSlotSubclass := *, /* not present if maskB10 = 0 */ + singleSlotDTM := *, /* not present if maskB10 = 0 */ + maskBit11 := *, /* not present if maskB10 = 0 */ + dTM_EGPRS_MultiSlorSubclass := *, /* not present if maskB10 = 0 or maskB11 = 0 */ + maskBit12 := ?, + singleBandSupport := *, /* not present if maskB12 = 0 */ + maskBit13 := *, + gSM700AssociatedRadioCapability := *, /* not present if maskB13 = 0 */ + uMTS128TDD_RAT_Capability := *, + gERANFeatPack1 := *, + mask14 := *, + extDTM_GPRS_MultiSlotSubclass := *, /* not present if maskB14 = 0 */ + etxDTM_EGPRS_MultiSlotSubclass := *, /* not present if maskB14 = 0 */ + mask15 := *, + highMultislotCap := *, /* not present if mask15 = 0 */ + spare2 := tsc_Spare1, // @sic R5s150329 Baseline Moving sic@ + gERANFeatPack2 := *, + gMSKMultislotPowerProfile := *, + pSKMultislotPowerProfile := *, + mask17 := *, /* rel 6 features */ + tGSM400BandsSupported := *, /* not present if maskB17 = 0 */ + tGSM400AssocRadioCap := *, /* not present if maskB17 = 0 */ + spare := *, // @sic R5s110176 Baseline Moving sic@ + dlAdvancedRxPerf := *, + dTMEhancCap := *, + mask19 := *, + dTMGPRSHighMultislotClass := *, /* not present if maskB19 = 0 */ + offsetReq := *, /* not present if maskB19 = 0 */ + mask20 := *, /* not present if maskB19 = 0 */ + dTMEGPRSHighMultislotClass := *, /* not present if maskB19 and maskB20 = 0 */ + rptdACCHCap := *, + mask21 := *, + gsm710AssocRadioCap := *, /* not present if maskBit21 = 0 */ + mask22 := *, + tgsm810AssocRadioCap := *, /* not present if maskBit22 = 0 */ + cipheringModeSettingCap := *, + addPositionCap := *, + eutraFDDSupport := *, /* rel 8 features */ + eutraTDDSupport := *, + eutraMeasAndReporting := *, /* @sic R5s100135 Baseline moving sic@ */ + priorityBasedReselection:= *, // @sic R5s110176 Baseline Moving sic@ + utraCSGCellsReporting := *, // @sic R5s110176 Baseline Moving sic@ + vamosLevel := *, // @sic R5s110176 Baseline Moving sic@ + tighterCap := *, // @sic R5s120178 Baseline Moving sic@ + selectCipheringDLSACCH := *, // @sic R5s120178 Baseline Moving sic@ + csPS_SRVCC_G2U := *, // @sic R5s130195 Baseline Moving sic@ + csPS_SRVCC_G2E := *, // @sic R5s130195 Baseline Moving sic@ + geranNwkSharing := *, // @sic R5s150329 Baseline Moving sic@ + eutraWidebandRSRQMeas := *, // @sic R5s150329 Baseline Moving sic@ + erBandSupport := *, // @sic R5s150329 Baseline Moving sic@ + utraMultipleFreqBandInd := *, // @sic R5s150329 Baseline Moving sic@ + eutraMultipleFreqBandInd := *, // @sic R5s150329 Baseline Moving sic@ + xtdTSCSetCap := *, // @sic R5s150329 Baseline Moving sic@ + xtdEARFCNValueRange := *, // @sic R5s160712 Baseline Moving sic@ + spareBits2 := * + }; + + template (present) MS_Clsmk3 cdr_MSCLSMK3_EutraCheck (template (omit) IEI8_Type p_IEI) modifies cr_MSCLSMK3_Any := + { /* @status APPROVED (LTE) */ + iei := p_IEI, // @sic R5s110244, R5s140493 sic@ + iel := omit, // @sic R5s110244 sic@ + eutraFDDSupport := ?, + eutraTDDSupport := ? + }; + + template (present) MS_MeasCapability cr_MS_MeasCapability_Any := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + sMS_VALUE := ?, + sM_VALUE := ? + }; + + template (present) MS_NetworkCap cr_MS_NetworkCap_Any := + { /* 24.301 cl. 9.9.3.18 -> 24.008 cl. 10.5.5.12; + @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := '31'O, /* present in case of TV; omit in case of V */ + iel := ?, /* present in case of LV or TLV; omit in case of V */ + gea1 := ?, + smCapDedicated := ?, + smCapGPRS := ?, + ucs2 := ?, + ssScreeningIndicator := ?, + soLSACap := ?, + revLevelIndicator := ?, + pfcFeatureMode := ?, + gea2 := ?, + gea3 := ?, + gea4 := ?, + gea5 := ?, + gea6 := ?, + gea7 := ?, + lcsVACap := ?, + psHOtoUTRAN_IuModeCap := ?, + psHOtoEUTRAN_S1ModeCap := ?, + emmCombinedCap := ?, // @sic R5s110176 Baseline Moving sic@ + isrSupport := ?, + srvccToGERAN_UTRANCap := ?, + epcCap := ?, + nfCap := *, // @sic R5s110176 Baseline Moving R5s110242 sic@ + gERANNtwkShareCap := *, // @sic R5s130195 Baseline Moving sic@ + userPlaneIntegrityProtSupport := *, // @sic R5s160712 Baseline Moving, not present for Rel-12 sic@ + gia4 := *, // @sic R5s160712 Baseline Moving, not present for Rel-12 sic@ + gia5 := *, // @sic R5s160712 Baseline Moving, not present for Rel-12 sic@ + gia6 := *, // @sic R5s160712 Baseline Moving, not present for Rel-12 sic@ + gia7 := *, // @sic R5s160712 Baseline Moving, not present for Rel-12 sic@ + ePCOInd := *, // @sic R5s170598 Baseline Moving sic@ + restrictEnhancedCoverageCap := *, // @sic R5s170598 Baseline Moving sic@ + dualConnectivityEUTRA_NR := *, // @sic R5s180553 Baseline Moving sic@ + spareBits := * + }; + + template (present) MS_NetworkCap cdr_MS_NetworkCapAss_lv modifies cr_MS_NetworkCap_Any := + { /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) */ + iei := omit + }; + + template (present) MS_NetworkFeatureSupport cr_MS_NetworkFeatureSupport(IEI4_Type p_IEI, + template (present) B1_Type p_ExtdPeriodicTimers := ?) := + { /* 24.301 cl. 9.9.2.0A -> 24.008 cl. 10.5.5.15 */ + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + spare := tsc_Spare3, + extdPeriodicTimers := p_ExtdPeriodicTimers + }; + + template (present) NBIFOMContainer cr_NBIFOMContainerAny := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, UTRAN) */ + iei := '33'O, + iel := ?, // length + containerContents := ? + }; + + template (present) NwkResourceId cr_NwkResourceIdAny (IEI8_Type p_IEI := '10'O) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + iel := ?, + nriContainerValue := ?, + spareBits := tsc_Spare6 // @sic R5s140778 sic@ + }; + + template (value) PacketFlowIdentifier cs_PktFlowId := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, UTRAN) */ + iei := '34'O, + iel := '01'O, + spare := '0'B, + idValue := '0000000'B // Best effort + }; + + template (value) PLMN_List cs_PLMN_List(NAS_PlmnIdList_Type p_PlmnIdList) := + { /* @status APPROVED (LTE, LTE_A_IRAT, LTE_A_R10_R11, NBIOT, NR5GC, UTRAN) */ + iei := '4A'O, + iel := int2oct(lengthof(p_PlmnIdList) * 3, 1), + plmnList := p_PlmnIdList + }; + + template (value) PLMN_List cs_PLMN_List_1PLMN(NAS_PlmnId p_Plmn1) := + /* @status APPROVED (LTE, LTE_A_IRAT, LTE_A_R10_R11, NBIOT, NR5GC, UTRAN) */ + cs_PLMN_List({p_Plmn1}); + + template (value) PLMN_List cs_PLMN_List_2PLMNs(NAS_PlmnId p_Plmn1, + NAS_PlmnId p_Plmn2) := + /* @status APPROVED (LTE, LTE_A_R10_R11, NBIOT, NR5GC) */ + cs_PLMN_List({p_Plmn1, p_Plmn2}); + + template (value) PLMN_List cs_PLMN_List_3PLMNs(NAS_PlmnId p_Plmn1, + NAS_PlmnId p_Plmn2, + NAS_PlmnId p_Plmn3) := + /* @status APPROVED (LTE, NBIOT) */ + cs_PLMN_List({p_Plmn1, p_Plmn2, p_Plmn3}); + + template (value) PLMN_List cs_PLMN_List_4PLMNs(NAS_PlmnId p_Plmn1, + NAS_PlmnId p_Plmn2, + NAS_PlmnId p_Plmn3, + NAS_PlmnId p_Plmn4) := + /* @status APPROVED (LTE, NBIOT) */ + cs_PLMN_List({p_Plmn1, p_Plmn2, p_Plmn3, p_Plmn4}); + + template (value) ProtocolContainer cs_ProtocolContainer_Common(O2_Type p_ContainerId, + integer p_ContainerLength := 0, + template (omit) octetstring p_Content := omit) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + protocolID := p_ContainerId, + protocolLength := int2oct(p_ContainerLength, 1), + protocolLongLength := omit, // @sic R5s201386 Baseline Moving sic@ + content := p_Content + }; + + template (value) ProtocolContainer cs_ProtocolContainer(O2_Type p_ProtocolId, + octetstring p_Content) := + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + /* @sic R5s141127 change 4 - MCC160 Comments: cs_ProtocolContainer_Common sic@ */ + cs_ProtocolContainer_Common(p_ProtocolId, lengthof(p_Content), p_Content); + + template (value) ProtocolConfigOptions cs_ProtocolConfigOptions_Common(Type4Length_Type p_Type4Length := '01'O, + template (omit) ProtocolConfigOptions.pco p_ProtocolContainers := omit) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS, UTRAN) */ + iei := '27'O, + iel := p_Type4Length, + ext := '1'B, + spare := '0000'B, + configProtocol := '000'B, + pco := p_ProtocolContainers + }; + + template (value) ProtocolConfigOptions cs_ProtocolConfigOptions_PPP := cs_ProtocolConfigOptions_Common; /* @status APPROVED (LTE_IRAT) */ + + /* + * @desc Common function to build up ProtocolConfigOptions acc. to 24.008 cl. 10.5.6.3 + * @param p_ProtocolContainers + * @return template (value) ProtocolConfigOptions + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NR5GC_IRAT, POS, UTRAN) + */ + function f_NAS_ProtocolConfigOptionsTX(template (value) NAS_ProtocolConfigOptions_Type p_ProtocolContainers) return template (value) ProtocolConfigOptions + { + var integer v_Length := 1; // there are at least ext, spare, configProtocol + var integer i; + + for (i:=0; i < lengthof(p_ProtocolContainers); i:=i+1) { + v_Length := v_Length + oct2int(valueof(p_ProtocolContainers[i].protocolLength)) + 3; // 2 octets for protocolID and 1 octet for protocolLength + } + return cs_ProtocolConfigOptions_Common(int2oct(v_Length, 1), p_ProtocolContainers); + } + + template (value) ProtocolConfigOptions cs_ProtocolConfigOptions_OneOption(template (value) ProtocolContainer p_ProtocolContainer) := + /* @status APPROVED (UTRAN) */ + f_NAS_ProtocolConfigOptionsTX({p_ProtocolContainer}); + + template (present) ProtocolConfigOptions cr_ProtocolConfigOptionsAny := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, UTRAN) */ + iei := '27'O, + iel := ?, + ext := '1'B, + spare := '0000'B, + configProtocol := ?, + pco := * // @sic R5s100800 sic@ + }; + + template (present) ExtdProtocolConfigOptions cr_ExtdPCOAny := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + iei := '7B'O, + iel := ?, + ext := ?, + spare := tsc_Spare4, + configProtocol := ?, + pco := * + }; + + template (value) PTMSI_Signature cs_PTMSI_Signature(octetstring p_Ptmsi) := + { /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) */ + iei := '19'O, + iel := omit, + signatureValue := p_Ptmsi + }; + + template (present) PTMSI_Signature cr_PTMSI_Signature(template (present) O3_Type p_PtmsiSig) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := '19'O, + iel := omit, + signatureValue := p_PtmsiSig + }; + + template (present) PTMSI_Signature cr_PTMSI_SignatureAny := + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + cr_PTMSI_Signature(?); + + template (present) PTMSI_Signature cr_PTMSI_Signature2Any := // Only used in Detach Request MO + { /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) */ + iei := '19'O, + iel := '03'O, + signatureValue := ? + }; + + template (value) QualityOfService cs_QoS_Negotiated_1 := + { /* TS 34.123-3 Table 8.10.2 */ + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + iei := '30'O, + iel := '10'O, + spare1 := '00'B, + delayClass := '100'B, + relabilityClass := '011'B, + peakThroughput := '0100'B, + spare2 := '0'B, + precedenceClass := '011'B, + spare3 := '000'B, + meanThroughput := '11111'B, + trafficClass := '100'B, + deliveryOrder := '10'B, + deliveryErrorSDU := '010'B, + maxSduSize := '00100000'B, + maxBitRateUL := '01000000'B, + maxBitRateDL := '01000000'B, + residualBER := '0111'B, + sduErrorRatio := '0100'B, + transferDelay := '000000'B, + trafficHandlingPrio := '00'B, + guaranteedBitRateUL := '00010000'B, + guaranteedBitRateDL := '00010000'B, + spare4 := '000'B, + signallingInd := '0'B, + sourceStatisticsDescriptor := '0000'B, + maxBitRateDL_Ext := '00000000'B, + guaranteedBitRateDL_Ext := '00000000'B, + maxBitRateUL_Ext := '00000000'B, + guaranteedBitRateUL_Ext := '00000000'B, + maxBitRateDL_Ext2 := omit, // @sic R5s1300195 Baseline Moving sic@ + guaranteedBitRateDL_Ext2 := omit, // @sic R5s1300195 Baseline Moving sic@ + maxBitRateUL_Ext2 := omit, // @sic R5s1300195 Baseline Moving sic@ + guaranteedBitRateUL_Ext2 := omit // @sic R5s1300195 Baseline Moving sic@ + }; + + template (value) QualityOfService cds_QoS_Negotiated_2 modifies cs_QoS_Negotiated_1 := + { /* TS 34.123-3 Table 8.10.2 */ + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + maxSduSize := '10010110'B, + maxBitRateUL := '01001000'B, + maxBitRateDL := '01001000'B, + residualBER := '0100'B, + sduErrorRatio := '0011'B + }; + + template (value) QualityOfService cds_QoS_Negotiated_3 modifies cs_QoS_Negotiated_1 := + { /* TS 34.123-3 Table 8.10.2 */ + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + trafficClass := '001'B, + deliveryErrorSDU := '011'B, + maxSduSize := '10001100'B, + maxBitRateUL := '01101110'B, //432 kbps + maxBitRateDL := '01101110'B, //432 kbps + sduErrorRatio := '0010'B, + transferDelay := '001101'B, + guaranteedBitRateUL := '00000000'B, + guaranteedBitRateDL := '00000000'B + }; + + template (value) QualityOfService cds_QoS_Negotiated_4 (template (omit) IEI8_Type p_IEI := '30'O) modifies cs_QoS_PDP2 := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + relabilityClass := '101'B, + trafficClass := '001'B, + deliveryOrder := '10'B, // @sic R5-133509 sic@ + maxSduSize := '00001111'B, + maxBitRateUL := '01101000'B, + maxBitRateDL := '01101000'B, + residualBER := '0001'B, + sduErrorRatio := '0001'B, + transferDelay := '001000'B, + sourceStatisticsDescriptor := '0001'B + }; + + template (value) QualityOfService cds_QoS_Negotiated_8 modifies cs_QoS_Negotiated_1 := + { /* See in TS 36.508 Table 6.6.2-1A - Context #8 */ + /* @status */ + transferDelay := '000111'B // 70 msec - See 24.008 cl. 10.5.6.5 + }; + + template (value) QualityOfService cs_QoS_PDP2 (template (omit) IEI8_Type p_IEI := '30'O) := + { /* TS 51.010-1 Table 40.5 */ + // @sic R5s120218 sic@ + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + iei := p_IEI, + iel := '10'O, + spare1 := '00'B, + delayClass := '100'B, + relabilityClass := '011'B, + peakThroughput := '0101'B, + spare2 := '0'B, + precedenceClass := '010'B, + spare3 := '000'B, + meanThroughput := '10000'B, + trafficClass := '100'B, + deliveryOrder := '01'B, + deliveryErrorSDU := '011'B, + maxSduSize := '10010110'B, + maxBitRateUL := '01001000'B, + maxBitRateDL := '01001000'B, + residualBER := '0111'B, + sduErrorRatio := '0100'B, + transferDelay := '000000'B, + trafficHandlingPrio := '00'B, + guaranteedBitRateUL := '00000000'B, + guaranteedBitRateDL := '00000000'B, + spare4 := '000'B, + signallingInd := '0'B, + sourceStatisticsDescriptor := '0000'B, + maxBitRateDL_Ext := '00000000'B, + guaranteedBitRateDL_Ext := '00000000'B, + maxBitRateUL_Ext := '00000000'B, + guaranteedBitRateUL_Ext := '00000000'B, + maxBitRateDL_Ext2 := omit, // @sic R5s1300195 Baseline Moving sic@ + guaranteedBitRateDL_Ext2 := omit, // @sic R5s1300195 Baseline Moving sic@ + maxBitRateUL_Ext2 := omit, // @sic R5s1300195 Baseline Moving sic@ + guaranteedBitRateUL_Ext2 := omit // @sic R5s1300195 Baseline Moving sic@ + }; + + template (value) QualityOfService cds_QoS_PDP3 (template (omit) IEI8_Type p_IEI := '30'O) modifies cs_QoS_PDP2 := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + relabilityClass := '101'B, + deliveryErrorSDU := '010'B, + residualBER := '0100'B, + sduErrorRatio := '0011'B + }; + + template (value) QualityOfService cds_QoS_Converstational (template (omit) IEI8_Type p_IEI := '30'O) modifies cs_QoS_PDP2 := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + relabilityClass := '101'B, + trafficClass := '001'B, + deliveryOrder := '10'B, // @sic R5-133509 sic@ + maxSduSize := '00001111'B, // @sic R5-120632 sic@ + maxBitRateUL := '01101000'B, + maxBitRateDL := '01101000'B, + residualBER := '0001'B, + sduErrorRatio := '0001'B, + transferDelay := '001000'B + }; + + template (present) TrafficFlowTemplate cr_Tft(template IEI8_Type p_IEI := omit, + template (present) B3_Type p_Code := ?) := + { /* 24.301 cl. 9.9.4.13 -> 24.008 cl. 10.5.6.12 */ + /* @status APPROVED (ENDC, LTE, LTE_A_R10_R11, NBIOT, UTRAN) */ + iei := p_IEI, /* present in case of TLV; omit in case of LV */ + iel := ?, + tftOperationCode := p_Code, + eBit := ?, + noOfPktFilter := complement ('0000'B), // value must be greater than 0 and <= 16 (only 4 bits) + packetFilterList := ?, + parameterList := * + }; + + template (value) TrafficFlowTemplate cs_TrafficFlowTemplate(integer p_IeLength, + template (value) TrafficFlowTemplate.packetFilterList p_PacketFilterList):= + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, UTRAN) */ + iei := omit, + iel := int2oct(p_IeLength, 1), + tftOperationCode := '001'B, // Create new TFT + eBit := '0'B, // Parameter list not included + noOfPktFilter := int2bit(lengthof(p_PacketFilterList), 4), + packetFilterList := p_PacketFilterList, + parameterList := omit + }; + + template (present) UE_Status cr_UEStatus_Any := + { // 24.501 cl. 9.11.3.56 + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + iei := '6D'O, + iel := ?, + spare := tsc_Spare6, + n1ModeRegistered := ?, + s1ModeRegistered := ? + }; + // ============================================================================= + // A value of 1 is the highest radio priority level + // ----------------------------------------------------------------------------- + + template (value) RadioPriority cs_RadioPriority (template (omit) IEI4_Type p_IEI, + B3_Type p_Val) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + spare := '0'B, + levelValue := p_Val + }; + + template (value) RadioPriority cs_RadioPriorityHigh (template (omit) IEI4_Type p_IEI) := cs_RadioPriority (p_IEI, '001'B); /* @status APPROVED (IMS, LTE_A_IRAT, LTE_IRAT, POS, UTRAN) */ + template (value) RadioPriority cs_RadioPriorityLow (template (omit) IEI4_Type p_IEI) := cs_RadioPriority (p_IEI, '100'B); /* @status APPROVED (LTE_IRAT) */ + + template (present) TMSI_Status cr_TMSI_Status(template (present) TmsiStatusValue p_TmsiStatus := ?) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := '9'H, + spare3 := tsc_Spare3, + flag := p_TmsiStatus + }; + + template (present) UE_NetworkCap cr_UENetworkCap_Any (template (omit) IEI8_Type p_IEI) := + { /* 24.301 cl. 9.9.3.34 + @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, /* present in case of TLV; omit in case of LV */ + iel := ?, /* present in case of LV or TLV; omit in case of V */ + eeaCap := ?, // @sic R5s100135 sic@ + eiaCap := ?, // @sic R5s100135 sic@ + ueaCap := *, // @sic R5s100135 sic@ + uiaCap := *, // @sic R5s100135 sic@ + srvcc_LPP_ProSeCap := *, // @sic R5s100135, R5s150329 Baseline Moving sic@ + cIoT_proSeCap := *, // @sic R5s150329, R5s160711 Baseline Moving sic@ + cIoT_V2X := *, // @sic R5s170598 Baseline Moving sic@ + edt_WUS := *, // @sic R5s201386 Baseline Moving sic@ + musim := *, // Sep22 @sic R5s221179 Baseline Moving sic@ + spare := * // @sic R5s100135 sic@ + }; + + template (present) UE_NetworkCap cdr_NR5GC_UENetworkCap (template (omit) IEI8_Type p_IEI) + modifies cr_UENetworkCap_Any := + { /* @status APPROVED (ENDC, NR5GC_IRAT) */ + cIoT_proSeCap := '1???????'B, // @sic R5-196647, R5-217714 sic@ + cIoT_V2X := '??1?????'B + }; + + template (present) VoiceDomainPref cr_VoiceDomainPref_Any := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := ?, // 01111110'B + iel := ?, // length + spareBits := ?, + ueUsageSetting := ?, + voiceDomainPrefEUTRA := ? + }; + + template (value) GPRS_Timer2 cs_GPRS_Timer2_3_IEI(template (omit) IEI8_Type p_IEI, // @sic R5s150329 Baseline Moving sic@ + B3_Type p_Unit, + B5_Type p_Value) := + { /* @status APPROVED (IMS, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + iel := '01'O, // length + unit := p_Unit, // Unit + gprsTimerValue := p_Value // Timer value + }; + + template (value) GPRS_Timer3 cs_GprsTimer3(template (omit) IEI8_Type p_IEI := '5E'O, // @sic R5s150745 sic@ + GprsTimerUnit p_Unit, + B5_Type p_Value) := cs_GPRS_Timer2_3_IEI(p_IEI, p_Unit, p_Value); /* @status APPROVED (LTE_A_R10_R11, NBIOT) */ + + template (present) GPRS_Timer2 cr_GPRS_Timer2_3(IEI8_Type p_IEI, // @sic R5s150329 Baseline Moving sic@ + template (present) B3_Type p_Unit := ?, + template (present) B5_Type p_Value := ?) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := p_IEI, + iel := '01'O, // length + unit := p_Unit, // Unit + gprsTimerValue := p_Value // Timer value + }; + + template (value) TimeZoneAndTime cs_TimeZoneAndTime (O1_Type p_Year, + O1_Type p_Month, + O1_Type p_Day, + O1_Type p_Hour, + O1_Type p_Minute, + O1_Type p_Second, + O1_Type p_TimeZone):= + { /* @status APPROVED (LTE, NR5GC, SSNITZ) */ + iei := '47'O, // @sic R5s110439 sic@ + year := p_Year, + month := p_Month, + day := p_Day, + hour := p_Hour, + minute := p_Minute, + second := p_Second, + timeZone := p_TimeZone + }; + + template (value) TimeZone cs_TimeZone (O1_Type p_TimeZone):= + { /* @status APPROVED (LTE, NR5GC, SSNITZ) */ + iei := '46'O, + timeZone := p_TimeZone + }; + + template (value) NetworkName cs_NetworkName (IEI8_Type p_Iei, + charstring p_Name, + Gsm7BitPacking_Type p_Packing := SMS_Packing, // default: GSM default 7 + B1_Type p_AddCI := '0'B) := // default: do not include the CI + { /* @status APPROVED (LTE, NR5GC, SSNITZ) */ + iei := p_Iei, + iel := int2oct((lengthof(f_CharPacking_IA5toGsm7Bit(p_Name, p_Packing)) + 1),1), + ext := '1'B, + codingScheme := f_ConvertPackingToCodingScheme (p_Packing), + addCI := p_AddCI, + spareBitCnt := int2bit((lengthof(p_Name) mod 8), 3), // @sic R5s140651 sic@ + text := f_CharPacking_IA5toGsm7Bit(p_Name, p_Packing) + }; + + //---------------------------------------------------------------------------- + /* + * @desc Conversion of the packing type per TS 23.040 into the coding scheme parameter used in the Network Name IE + * @param p_Gsm7BitPacking_Type + * @return B3_Type + * @status APPROVED (LTE, NR5GC, SSNITZ) + */ + function f_ConvertPackingToCodingScheme(Gsm7BitPacking_Type p_Gsm7BitPacking_Type) return B3_Type + { + var B3_Type v_CodingScheme := '000'B; + + if (p_Gsm7BitPacking_Type == SMS_Packing) {v_CodingScheme := '000'B } else {FatalError (__FILE__, __LINE__, "Unexpected Packing for conversion to Coding Scheme")}; + //if (p_Gsm7BitPacking_Type == CBS_Packing) {v_CodingScheme := '000'B }; + //if (p_Gsm7BitPacking_Type == USSD_Packing) {v_CodingScheme := '000'B }; + + return v_CodingScheme; + } + + template (value) DaylightSavingTime cs_DaylightSavingTime_tlv (B2_Type p_DaylightSavingTime) := + { /* 24.301 cl. 9.9.3.6; */ + /* @status APPROVED (LTE, NR5GC, SSNITZ) */ + iei := '49'O, + iel := '01'O, // @sic R5s120508 sic@ + spare := tsc_Spare6, + val := p_DaylightSavingTime + }; + + //============================================================================ + // Packet filters + //---------------------------------------------------------------------------- + template (value) PacketFilterComponent cs_PktFilterCompIPv4RemoteAddress(charstring p_RemoteAddress, + O4_Type p_Mask := tsc_IPv4Mask) := + { // 9 octets + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + /* @sic R5s110604: optional parameters sic@ */ + id := '10'O, // IPv4 remote address + packetFilterComponentValue := { + ipv4RemoteAddress := f_Convert_IPv4Addr2OctString(p_RemoteAddress) & p_Mask // @sic R5s100189, R5-113734 sic@ + } + }; + + template (value) PacketFilterComponent cs_PktFilterCompIPv6RemoteAddress(charstring p_RemoteAddress, + O16_Type p_Mask := tsc_IPv6Mask) := + { // 33 octets + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, UTRAN) */ + id := '20'O, + packetFilterComponentValue := { + ipv6RemoteAddress := f_Convert_IPv6Addr2OctString(p_RemoteAddress) & p_Mask // @sic R5s100189, R5-113734 sic@ + } + }; + + template (value) PacketFilterComponent cs_PktFilterCompProtocolIdNextHeader(O1_Type p_ProtocolIdNextHeader) := + { // 2 octets + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, UTRAN) */ + id := '30'O, // Protocol Identifier / Next header type + packetFilterComponentValue := { + protocolIdNextHeader := p_ProtocolIdNextHeader + } + }; + + template (value) PacketFilterComponent cs_PktFilterCompProtocolIdNextHeaderICMP := cs_PktFilterCompProtocolIdNextHeader('01'O); /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + template (value) PacketFilterComponent cs_PktFilterCompProtocolIdNextHeaderICMPv6 := cs_PktFilterCompProtocolIdNextHeader('3A'O); /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + template (value) PacketFilterComponent cs_PktFilterCompProtocolIdNextHeaderUDP := cs_PktFilterCompProtocolIdNextHeader('11'O); /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, UTRAN) */ + template (value) PacketFilterComponent cs_PktFilterCompProtocolIdNextHeaderTCP := cs_PktFilterCompProtocolIdNextHeader('06'O); /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + template (value) PacketFilterComponent cs_PktFilterCompProtocolIdNextHeaderIPSec := cs_PktFilterCompProtocolIdNextHeader('32'O); /* @status APPROVED (LTE, NBIOT, UTRAN) */ + + template (value) PacketFilterComponent cs_PktFilterCompSingleLocalPort(UInt16_Type p_PortNumber) := + { // 3 octets + /* @status APPROVED (LTE, NBIOT, UTRAN) */ + id := '40'O, // Single local port + packetFilterComponentValue := { + singleLocalPort := int2oct(p_PortNumber, 2) + } + }; + + template (value) PacketFilterComponent cs_PktFilterCompLocalPortRange(UInt16_Type p_PortLow, + UInt16_Type p_PortHigh) := + { // 3 octets + /* @status APPROVED (LTE, NBIOT, UTRAN) */ + id := '41'O, // Local port range + packetFilterComponentValue := { + localPortRange := int2oct(p_PortLow, 2) & int2oct(p_PortHigh, 2) + } + }; + + template (value) PacketFilterComponent cs_PktFilterCompSingleRemotePort(UInt16_Type p_PortNumber) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, UTRAN) */ + id := '50'O, // Single remote port + packetFilterComponentValue := { + singleRemotePort := int2oct(p_PortNumber, 2) + } + }; + + template (value) PacketFilterComponent cs_PktFilterCompRemotePortRange(UInt16_Type p_PortLow, + UInt16_Type p_PortHigh) := + { // 3 octets + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, UTRAN) */ + id := '51'O, // Remote port range + packetFilterComponentValue := { + remotePortRange := int2oct(p_PortLow, 2) & int2oct(p_PortHigh, 2) + } + }; + + template (value) PacketFilterComponent cs_PktFilterCompTOSTrafficClass(O2_Type p_TOSTrafficClass) := + { // 3 octets + /* @status APPROVED (LTE, NBIOT, UTRAN) */ + id := '70'O, // Type of service / Traffic class type + packetFilterComponentValue := { + typeOfServiceTrafficClass := p_TOSTrafficClass + } + }; + + template (value) PacketFilterComponent cs_PktFilterCompIPSecSPI(O4_Type p_IPSecSPI) := + { // 5 octets + /* @status APPROVED (LTE, NBIOT, UTRAN) */ + id := '60'O, // Security parameter index type + packetFilterComponentValue := { + securityParameterIndex := p_IPSecSPI + } + }; + + template (value) PacketFilterComponent cs_PktFilterCompFlowLabel(O3_Type p_FlowLabel) := + { // 4 octets + /* @status APPROVED (LTE, NBIOT, UTRAN) */ + id := '80'O, // Flow label type + packetFilterComponentValue := { + flowLabel := p_FlowLabel + } + }; + + /* + * @desc Calculate Packet Filters applied in test case 10.9.1 of 36.523-1 + * @param p_PacketFilterByRef (by reference) + * @param p_PacketFilterLengthByRef (by reference) + * @param p_IpTypeIsIPv4 + * @param p_PacketFilterID + * @status APPROVED (LTE, NBIOT, UTRAN) + */ + function f_Get_PacketFilter_10_9_1(out template (value) PacketFilter p_PacketFilterByRef, + out integer p_PacketFilterLengthByRef, + boolean p_IpTypeIsIPv4, + integer p_PacketFilterID) + { + var charstring v_IPv4RemoteAddress := "172.168.8.0"; // @sic R5s110776 sic@ + var O4_Type v_IPv4SubnetMask := 'FFFFFF00'O; + var charstring v_IPv6RemoteAddress := "2001:0ba0::"; // @sic R5s110776 sic@ + var O16_Type v_IPv6SubnetMask := 'FFFFFFFF000000000000000000000000'O; // @sic R5s110776 sic@ + + var integer v_FilterCount := 0; + var template (value) PacketFilter v_Filter; + + select (p_PacketFilterID) { // @sic R5-110779 sic@ + case (1) { + // UL only filter, ID=1 + v_Filter.spare := '00'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.direction := '10'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.iei := '1'H; // @sic R5s130195 Baseline Moving sic@ + v_Filter.precedence := int2bit(6, 8); + v_Filter.contents[0] := cs_PktFilterCompProtocolIdNextHeaderUDP; + v_FilterCount := v_FilterCount + 2; + if (p_IpTypeIsIPv4) { + v_Filter.contents[1] := cs_PktFilterCompIPv4RemoteAddress(v_IPv4RemoteAddress, v_IPv4SubnetMask); + v_FilterCount := v_FilterCount + 9; + } + else { // IPv6 + v_Filter.contents[1] := cs_PktFilterCompIPv6RemoteAddress(v_IPv6RemoteAddress, v_IPv6SubnetMask); + v_FilterCount := v_FilterCount + 33; + } + v_Filter.contents[2] := cs_PktFilterCompSingleLocalPort(60001); + v_FilterCount := v_FilterCount + 3; + v_Filter.contents[3] := cs_PktFilterCompRemotePortRange(60350, 60450); + v_FilterCount := v_FilterCount + 5; + v_Filter.contents[4] := cs_PktFilterCompTOSTrafficClass('A8FC'O); + v_FilterCount := v_FilterCount + 3; + } + case (2) { + v_Filter.spare := '00'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.direction := '10'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.iei := '2'H; // @sic R5s130195 Baseline Moving sic@ + v_Filter.precedence := int2bit(7, 8); + v_Filter.contents[0] := cs_PktFilterCompProtocolIdNextHeaderUDP; + v_FilterCount := v_FilterCount + 2; + if (p_IpTypeIsIPv4) { + v_Filter.contents[1] := cs_PktFilterCompIPv4RemoteAddress(v_IPv4RemoteAddress, v_IPv4SubnetMask); + v_FilterCount := v_FilterCount + 9; + } + else { // IPv6 + v_Filter.contents[1] := cs_PktFilterCompIPv6RemoteAddress(v_IPv6RemoteAddress, v_IPv6SubnetMask); + v_FilterCount := v_FilterCount + 33; + } + v_Filter.contents[2] := cs_PktFilterCompLocalPortRange(60000, 60100); + v_FilterCount := v_FilterCount + 5; + v_Filter.contents[3] := cs_PktFilterCompSingleRemotePort(60350); + v_FilterCount := v_FilterCount + 3; + v_Filter.contents[4] := cs_PktFilterCompTOSTrafficClass('A8FC'O); + v_FilterCount := v_FilterCount + 3; + } + case (3) { + v_Filter.spare := '00'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.direction := '10'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.iei := '3'H; // @sic R5s130195 Baseline Moving sic@ + v_Filter.precedence := int2bit(5, 8); + v_Filter.contents[0] := cs_PktFilterCompProtocolIdNextHeaderIPSec; + v_FilterCount := v_FilterCount + 2; + if (p_IpTypeIsIPv4) { + v_Filter.contents[1] := cs_PktFilterCompIPv4RemoteAddress(v_IPv4RemoteAddress, v_IPv4SubnetMask); + v_FilterCount := v_FilterCount + 9; + } + else { // IPv6 + v_Filter.contents[1] := cs_PktFilterCompIPv6RemoteAddress(v_IPv6RemoteAddress, v_IPv6SubnetMask); + v_FilterCount := v_FilterCount + 33; + } + v_Filter.contents[2] := cs_PktFilterCompIPSecSPI('0F80F000'O); // @sic R5s110778 sic@ + v_FilterCount := v_FilterCount + 5; + v_Filter.contents[3] := cs_PktFilterCompTOSTrafficClass('A0FC'O); + v_FilterCount := v_FilterCount + 3; + } + case (4) { + v_Filter.spare := '00'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.direction := '10'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.iei := '4'H; // @sic R5s130195 Baseline Moving sic@ + v_Filter.precedence := int2bit(2, 8); + if (p_IpTypeIsIPv4) { + v_Filter.contents[0] := cs_PktFilterCompIPv4RemoteAddress(v_IPv4RemoteAddress, v_IPv4SubnetMask); + v_FilterCount := v_FilterCount + 9; + } + else { // IPv6 + v_Filter.contents[0] := cs_PktFilterCompIPv6RemoteAddress(v_IPv6RemoteAddress, v_IPv6SubnetMask); + v_FilterCount := v_FilterCount + 33; + } + v_Filter.contents[1] := cs_PktFilterCompTOSTrafficClass('B0FC'O); + v_FilterCount := v_FilterCount + 3; + v_Filter.contents[2] := cs_PktFilterCompFlowLabel('000005'O); + v_FilterCount := v_FilterCount + 4; + } + case (5) { + v_Filter.spare := '00'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.direction := '10'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.iei := '5'H; // @sic R5s130195 Baseline Moving sic@ + v_Filter.precedence := int2bit(255, 8); + if (p_IpTypeIsIPv4) { + v_Filter.contents[0] := cs_PktFilterCompIPv4RemoteAddress(v_IPv4RemoteAddress, v_IPv4SubnetMask); + v_FilterCount := v_FilterCount + 9; + } + else { // IPv6 + v_Filter.contents[0] := cs_PktFilterCompIPv6RemoteAddress(v_IPv6RemoteAddress, v_IPv6SubnetMask); + v_FilterCount := v_FilterCount + 33; + } + } + case else { + // out of supported range + FatalError(__FILE__, __LINE__, "unsupported packet filter id"); + } + } + v_Filter.iel := int2oct(v_FilterCount, 1); + + p_PacketFilterByRef := v_Filter; + p_PacketFilterLengthByRef := v_FilterCount + 3; + } + //---------------------------------------------------------------------------- + template (present) Extd_EPS_QOS cr_Extd_EPS_QOS_Any := + { /* @status APPROVED (ENDC, IMS, LTE, LTE_A_IRAT, LTE_A_R10_R11, LTE_IRAT, NBIOT, POS, UTRAN) */ + iei := '5C'O, + iel := ?, + unitMaxBitRate := ?, + maxBitRateUl_1 := ?, + maxBitRateUl_2 := ?, + maxBitRateDl_1 := ?, + maxBitRateDl_2 := ?, + unitGuaranteedBitRate := ?, + guaranteedBitRateUl_1 := ?, + guaranteedBitRateUl_2 := ?, + guaranteedBitRateDl_1 := ?, + guaranteedBitRateDl_2 := ? + }; + + const B1_Type tsc_NasKsi_NativeSecurityContext := '0'B; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + const B1_Type tsc_NasKsi_MappedSecurityContext := '1'B; /* @status APPROVED (LTE_A_IRAT, LTE_IRAT, NR5GC_IRAT) */ + + template (value) NAS_KeySetIdentifier cs_NAS_KeySetIdentifier_lv(NAS_KsiValue p_NasKeySetId, + B1_Type p_Tsc) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + iei := omit, + tsc := p_Tsc, + nasKeySetId := p_NasKeySetId + }; + + template (present) NAS_KeySetIdentifier cr_NAS_KeySetIdentifier(template (present) NAS_KsiValue p_KsiValue, + template (present) B1_Type p_Tsc) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + iei := omit, + tsc := p_Tsc, + nasKeySetId := p_KsiValue + }; + + template (present) NAS_KeySetIdentifier cdr_NAS_KeySetIdentifier_tlv(template (present) NAS_KsiValue p_KsiValue, + template (present) B1_Type p_Tsc) + modifies cr_NAS_KeySetIdentifier := + { /* @status APPROVED (LTE_A_IRAT, LTE_IRAT, NR5GC_IRAT) */ + iei := 'B'H + }; + + template (present) AuthenticationResponseParameter cr_AuthenticationResponseParameter_lv(template (present) B32_128_Type p_ExpectedRES) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + iei := omit, + iel := ?, /* RES has length of 32..128 bits i.e. 4..16 octets */ + res := p_ExpectedRES + }; + + template (value) IMEISV_Request cs_IMEISV_Request_WithIEI(B3_Type p_Value) := + { /* @status APPROVED (IMS, LTE, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + iei := 'C'H, //@sic R5s090210 sic@ + spare := '0'B, + requestValue := p_Value + }; + + template (value) NAS_SecurityAlgorithms cs_NAS_SecurityAlgorithms(B3_Type p_CipheringType, + B3_Type p_IntegrityType, + template (omit) IEI8_Type p_IEI := omit) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, // @sic R5s190285 sic@ + spare1 := tsc_Spare1, + cipheringType := p_CipheringType, + spare2 := tsc_Spare1, + integrityType := p_IntegrityType + }; + + template (value) ExtdProtocolConfigOptions cs_ExtdPCO(Type6Length_Type p_Length, + template (omit) NAS_ExtdProtocolConfigOptions_Type p_ProtocolContainers) := + { /* 24.301 cl. 9.9.4.26 */ + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + iei := '7B'O, + iel := p_Length, + ext := '1'B, + spare := tsc_Spare4, + configProtocol := tsc_Spare3, + pco := p_ProtocolContainers + }; + + template (present) DRXParamCommon cr_DRXParamCommonAny (IEI8_Type p_IEI):= + { /* 24.301 cl. 9.9.3.63 */ + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + iei := p_IEI, + iel := ?, + spare := tsc_Spare4, + drxValue := ? + }; + + template (present) WUSAssistInfo cr_WUSAssistInfoAny := + { /* 24.301 cl. 9.9.3.62 */ + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + iei := '35'O, + iel := ?, + infoType := ? + }; + + template (present) WusInfoType cr_WusInfoTypeAny := + { + wusType := ?, + pagingProbability := ?, + wusValue := ? + }; + + template (value) UERadioCapIdDeletion cs_UERadioCapIdDeletion(template (omit) IEI4_Type p_IEI:= 'A'H, B3_Type p_DeleteReq:='001'B):= + { /* 24.301 cl. 9.11.3.69 */ + /* @status APPROVED (NR5GC) */ + iei:=p_IEI, + spare:='0'B, + deleteReq:= p_DeleteReq + }; + + template (present) UE_RequestType cr_UE_RequestType (template (present) B4_Type p_ReqType := ?) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC_IRAT, POS) */ + /* 24.301 cl. 9.9.3.65 */ + iei := '29'O, + iel := '01'O, + spare := tsc_Spare4, + requestType := p_ReqType + }; + + + //---------------------------------------------------------------------------- + template (value) QosFlow_Identification_Type cs_IP_QosFlowId(integer p_PDU_SessionId, + integer p_QFI) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + PDU_SessionId := p_PDU_SessionId, + QFI := p_QFI + }; + + /* + * @desc To convert the maximum bit rate for the QoS + * @param p_Val + * @return integer + * @status APPROVED (ENDC, LTE, LTE_A_IRAT, LTE_A_R10_R11, LTE_IRAT, NBIOT, POS, SSNITZ, UTRAN) + */ + function f_QoS_MaximumBitRate(B8_Type p_Val) return integer + { + var integer v_Val := bit2int(p_Val); + if ((v_Val >= bit2int('00000001'B)) and (v_Val <= bit2int('00111111'B))) { + return v_Val; + } + if ((v_Val >= bit2int('01000000'B)) and (v_Val <= bit2int('01111111'B))) { + return (64 + ((v_Val - 64)*8)); + } + if ((v_Val >= bit2int('10000000'B)) and (v_Val <= bit2int('11111110'B))) { + return (576 + ((v_Val - 128)*64)); + } + if (v_Val == bit2int('11111111'B)) { + return 0; + } + return 0; + } + /* + * @desc To convert the transfer delay for the QoS + * @param p_Val + * @return integer + * @status APPROVED (LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) + */ + function fl_QoS_TransferDelay(B6_Type p_Val) return integer + { + var integer v_Val := bit2int(p_Val); + if ((v_Val >= bit2int('000001'B)) and (v_Val <= bit2int('001111'B))) { + return (v_Val*10); + } + if ((v_Val >= bit2int('010000'B)) and (v_Val <= bit2int('011111'B))) { + return (200 + ((v_Val - 16)*50)); + } + if ((v_Val >= bit2int('100000'B)) and (v_Val <= bit2int('111110'B))) { + return (1000 + ((v_Val - 32)*100)); + } + return 0; + } + + /* + * @desc To convert the SDU Error Ratio for the QoS + * @param p_Val + * @return charstring + * @status APPROVED (LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) + */ + function fl_QoS_SDUErrorRatio(B4_Type p_Val) return charstring + { + select (p_Val) { + case ('0001'B) { return ("1E2"); } + case ('0010'B) { return ("7E3"); } + case ('0011'B) { return ("1E3"); } + case ('0100'B) { return ("1E4"); } + case ('0101'B) { return ("1E5"); } + case ('0110'B) { return ("1E6"); } + case ('0111'B) { return ("1E1"); } + } + return ""; + } + + /* + * @desc To convert the Residual BER for the QoS + * @param p_Val + * @return charstring + * @status APPROVED (LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) + */ + function fl_QoS_ResidualBER(B4_Type p_Val) return charstring + { + select (p_Val) { + case ('0001'B) { return ("5E2"); } + case ('0010'B) { return ("1E2"); } + case ('0011'B) { return ("5E3"); } + case ('0100'B) { return ("4E3"); } + case ('0101'B) { return ("1E3"); } + case ('0110'B) { return ("1E4"); } + case ('0111'B) { return ("1E5"); } + case ('1000'B) { return ("1E6"); } + case ('1001'B) { return ("6E8"); } + } + return ""; + } + + /* + * @desc To convert the QualityOfService into a charstring for the UT command + * @param p_QoS + * @return charstring + * @status APPROVED (LTE_A_IRAT, LTE_IRAT, POS, SSNITZ, UTRAN) + */ + function f_ConvertQoS_ForATCommand(template (value) QualityOfService p_QoS) return charstring + { + var QualityOfService v_QoS := valueof(p_QoS); // need to do this to then manipulate the string + var charstring v_QoSstring := ""; + var integer v_SSDesc := bit2int(v_QoS.sourceStatisticsDescriptor); + var integer v_TrafficClass := bit2int(v_QoS.trafficClass); + var integer v_DelOrder := bit2int(v_QoS.deliveryOrder); + var integer v_DeliveryErrorSDU := bit2int(v_QoS.deliveryErrorSDU); + + if (v_SSDesc > 1) { + v_SSDesc := 1; // Only allowed values are 0 or 1 + } + + v_TrafficClass := v_TrafficClass - 1; // in AT command value is one less than in PDP Context + if (v_TrafficClass < 0) { + v_TrafficClass := 0; + } + + select (v_DelOrder) { + case (1) { v_DelOrder := 1; } + case (2) { v_DelOrder := 0; } + case else { v_DelOrder := 2; } + } + + select (v_DeliveryErrorSDU) { + case (1) { v_DeliveryErrorSDU := 2; } + case (2) { v_DeliveryErrorSDU := 1; } + case (3) { v_DeliveryErrorSDU := 0; } + case else { v_DeliveryErrorSDU := 3; } + } + + v_QoSstring := v_QoSstring & int2str(v_TrafficClass); + v_QoSstring := v_QoSstring & "," & int2str(f_QoS_MaximumBitRate(v_QoS.maxBitRateUL)); + v_QoSstring := v_QoSstring & "," & int2str(f_QoS_MaximumBitRate(v_QoS.maxBitRateDL)); + v_QoSstring := v_QoSstring & "," & "," & "," & int2str(v_DelOrder); + v_QoSstring := v_QoSstring & "," & int2str(bit2int(v_QoS.maxSduSize)*10); + v_QoSstring := v_QoSstring & ",""" & fl_QoS_SDUErrorRatio(v_QoS.sduErrorRatio)& """"; + v_QoSstring := v_QoSstring & ",""" & fl_QoS_ResidualBER(v_QoS.residualBER)& """"; + v_QoSstring := v_QoSstring & "," & int2str(v_DeliveryErrorSDU); + v_QoSstring := v_QoSstring & "," & int2str(fl_QoS_TransferDelay(v_QoS.transferDelay)); + v_QoSstring := v_QoSstring & "," & int2str(bit2int(v_QoS.trafficHandlingPrio)); + v_QoSstring := v_QoSstring & "," & int2str(v_SSDesc); + v_QoSstring := v_QoSstring & "," & int2str(bit2int(v_QoS.signallingInd)); + return v_QoSstring; + } + + type enumerated BEARER_CONTEXT_TYPE { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + DEF_1, // EPS Default Bearer#1 defined in the first column of table 6.6.1 + DEF_2, // EPS Default Bearer#2 defined in the second column of table 6.6.1 + DEF_3, // EPS Default Bearer#3 defined in the third column of table 6.6.1 + DED_1, // EPS Dedicated Bearer#1 defined in the first column of table 6.6.2 + DED_2, // EPS Dedicated Bearer#2 defined in the second column of table 6.6.2 + DED_3, // EPS Dedicated Bearer#3 defined in the third column of table 6.6.2 + DED_4, // EPS Dedicated Bearer#4 defined in the fourth column of table 6.6.2 @sic R5-123632 sic@ + DED_5 // EPS Dedicated Bearer#5 defined in the fifth column of table 6.6.2 @sic R5-210201 sic@ + }; + + /* + * @desc return bearer context number: if p_BearerContextNumber is not present bearer context number acc. to UE capabilities + * @param p_BearerContextNumber + * @return BEARER_CONTEXT_TYPE + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) + */ + function fl_BearerContextNumber_Def(template (omit) BEARER_CONTEXT_TYPE p_BearerContextNumber) return BEARER_CONTEXT_TYPE + { + var BEARER_CONTEXT_TYPE v_BearerContextNumber; + + if (isvalue(p_BearerContextNumber)) { + v_BearerContextNumber := valueof(p_BearerContextNumber); + } else { + if (pc_IMS) { + v_BearerContextNumber := DEF_2; /* @sic R5s141367: DEF_2 instead of DEF_1 sic@ */ + } else { + v_BearerContextNumber := DEF_1; /* @sic R5s141367: DEF_1 instead of DEF_2 sic@ */ + } + } + return v_BearerContextNumber; + } + + template (value) EPS_QualityOfService cs_508_EPS_QoS_Default_1 := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + iei := omit, + iel := '09'O, + qci := '00001001'B, + maxBitRateUl := '01000000'B, //64 kbps + maxBitRateDl := '01000000'B, //64 kbps + guaranteedBitRateUl := '01000000'B, //64 kbps + guaranteedBitRateDl := '01000000'B, //64 kbps + maxBitRateUlExt := '00000000'B, + maxBitRateDlExt := '00000000'B, + guaranteedBitRateUlExt := '00000000'B, + guaranteedBitRateDlExt := '00000000'B, + maxBitRateUL_Ext2 := omit, // @sic R5s1300195 Baseline Moving, R5s180640 sic@ + maxBitRateDL_Ext2 := omit, // @sic R5s1300195 Baseline Moving sic@ + guaranteedBitRateUL_Ext2 := omit, // @sic R5s1300195 Baseline Moving sic@ + guaranteedBitRateDL_Ext2 := omit // @sic R5s1300195 Baseline Moving sic@ + }; + + template (value) EPS_QualityOfService cds_508_EPS_QoS_Default_1_tlv + modifies cs_508_EPS_QoS_Default_1 := + { /* according to table 6.6.2.1 in 36.508, including iei */ + /* @status APPROVED (LTE, NBIOT) */ + iei := '5B'O + }; + + template (value) EPS_QualityOfService cds_EPS_QoS_Def_nonGBR_QCI + modifies cs_508_EPS_QoS_Default_1 := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + qci := '00000101'B // non-GBR QCI + }; + + template (value) EPS_QualityOfService cds_EPS_QoS_Def_nonGBR_QCI_tlv + modifies cs_508_EPS_QoS_Default_1 := + { /* 10.7.2 specifies According to reference default Bearer context#2 except for GCI */ + iei := '5B'O, + qci := '00000101'B // non-GBR QCI + }; + + template (value) EPS_QualityOfService cds_508_EPS_QoS_Default_3 + modifies cs_508_EPS_QoS_Default_1 := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + qci := '01000101'B // 69 for MCPTT + }; + + + /* @desc Get the Default QoS according to 36.508 clause 4.7.3-6 + * @param p_BearerContextNumber + * @return template (value) EPS_QualityOfService + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_508_EPSQoS(template (omit) BEARER_CONTEXT_TYPE p_BearerContextNumber) return template (value) EPS_QualityOfService + { /* @sic R5-144797: parameter p_BearerContextNumber sic@ */ + var template (value) EPS_QualityOfService v_QoS; + var BEARER_CONTEXT_TYPE v_BearerContextNumber := fl_BearerContextNumber_Def(p_BearerContextNumber); + + select (v_BearerContextNumber){ /* @sic R5-144797: v_QoS does not depend on pc_IMS anymore sic@ */ + case (DEF_1) { + v_QoS := cs_508_EPS_QoS_Default_1; /* Qos acc. to 36.508 Table 6.6.1-1 column 1 */ + } + case (DEF_3) { /* @sic R5-210201, R5s211690 sic@ */ + v_QoS := cds_508_EPS_QoS_Default_3; /* Qos acc. to 36.508 Table 6.6.1-1 column 3 */ + } + case else { + v_QoS := cds_EPS_QoS_Def_nonGBR_QCI; /* Qos acc. to 36.508 Table 6.6.1-1 column 2 */ + } + } + return v_QoS; + } + + template (value) UERadioCapId cs_UERadioCapId (IEI8_Type p_IEI, octetstring p_Id) := + { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + iei := p_IEI, + iel := int2oct(lengthof(p_Id), 1), + id := p_Id + }; + + //============================================================================ + // Packet filters + //---------------------------------------------------------------------------- + + /* + * @desc local function to calculate single remote port acc. to reference packet filters in 36.508 + * @param p_PortNumber + * @param p_EPS_BearerId + * @return UInt16_Type + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) + */ + function fl_SingleRemoteport508(UInt16_Type p_PortNumber, + HalfOctet_Type p_EPS_BearerId) return UInt16_Type + { + return (p_PortNumber + hex2int(p_EPS_BearerId) - 6); + } + + template (value) PacketFilterComponent cs_PktFilterCompSingleRemotePort61000(HalfOctet_Type p_EPS_BearerId) := + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + cs_PktFilterCompSingleRemotePort(fl_SingleRemoteport508(61000, p_EPS_BearerId)); + + template (value) PacketFilterComponent cs_PktFilterCompSingleRemotePort31160(HalfOctet_Type p_EPS_BearerId) := + /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) */ + cs_PktFilterCompSingleRemotePort(fl_SingleRemoteport508(31160, p_EPS_BearerId)); + + /* + * @desc Get the Dedicated TFT according to 36.508 clause 6.6.2 + * @param p_PacketFilterByRef (by reference) + * @param p_PacketFilterLengthByRef (by reference) + * @param p_PacketFilterNumber ... is the reference packet filter in Table 6.6.2-x + * @param p_EPS_BearerId + * @param p_PdnTypeValue + * @param p_PdnIndex + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) + */ + function fl_Get_508_PacketFilter(out template (value) PacketFilter p_PacketFilterByRef, + out integer p_PacketFilterLengthByRef, + integer p_PacketFilterNumber, + HalfOctet_Type p_EPS_BearerId, + B3_Type p_PdnTypeValue, + PDN_Index_Type p_PdnIndex) + { /* @sic R5-112600 new parameter p_PdnTypeValue to determine whether IPv4 or IPv6 address to be used sic@ */ + /* @sic R5s130362 - MCC160 Implementation: tsc_PDN_AddressInfo; new parameter p_PdnIndex sic@ */ + var integer v_ContentsLength := 0; + var template (value) PacketFilter v_Filter; + var PDN_AddressInfo_Type v_PDN_AddressInfo := f_PDN_AddressInfo_Get(p_PdnIndex); + var charstring v_NetworkIpAddrv4 := v_PDN_AddressInfo.PCSCF_IPAddressIPv4; + var charstring v_NetworkIpAddrv6 := v_PDN_AddressInfo.PCSCF_IPAddressIPv6; + var template (value) PacketFilterComponent v_PacketFilterProtocolId; + var integer v_PortNumber; // kept for readability + + if ((p_PacketFilterNumber != 4) and (p_PacketFilterNumber != 5) and (p_PacketFilterNumber != 10)) { // @sic R5-132085 sic@ in case (4, 5) no addresses used @sic R5s130495, R5s211690 sic@ + if (p_PdnTypeValue == tsc_PdnType_IPv4) { // IPv4 only; @sic R5s110168 change 8.3; R5-112600 sic@ + v_Filter.contents[0] := cs_PktFilterCompIPv4RemoteAddress(v_NetworkIpAddrv4); + v_ContentsLength := v_ContentsLength + 9; + } + else { // IPv4v6 or IPv6 only + v_Filter.contents[0] := cs_PktFilterCompIPv6RemoteAddress(v_NetworkIpAddrv6); + v_ContentsLength := v_ContentsLength + 33; + } + } + + select (p_PacketFilterNumber){ + case (1, 6) { // @sic R5-183239 sic@ + v_Filter.spare := '00'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.direction := '01'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.iei := '0'H; // @sic R5s130195 Baseline Moving sic@ + if (hex2int(p_EPS_BearerId) > 5) { + v_Filter.precedence := int2bit((hex2int(p_EPS_BearerId)-6), 8); // @sic R5-174469 sic@ + } else { + v_Filter.precedence := int2bit(0, 8); + } + if (p_PacketFilterNumber == 6) { // @sic R5-183239, R5-193982 sic@ + if (p_PdnTypeValue == tsc_PdnType_IPv4) { // IPv4 only + v_Filter.contents[1] := cs_PktFilterCompProtocolIdNextHeaderICMP; + } else { + v_Filter.contents[1] := cs_PktFilterCompProtocolIdNextHeaderICMPv6; + } + } else { + v_Filter.contents[1] := cs_PktFilterCompSingleRemotePort31160(p_EPS_BearerId); + v_ContentsLength := v_ContentsLength + 3; + v_Filter.contents[2] := cs_PktFilterCompProtocolIdNextHeaderUDP; + } + v_ContentsLength := v_ContentsLength + 2; + } + case (2, 7) { // @sic R5-183239 sic@ + // Update to values in Reference packet filter #2 + // UL only filter, ID=1 @sic R5-104702 sic@ + v_Filter.spare := '00'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.direction := '10'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.iei := '1'H; // @sic R5s130195 Baseline Moving sic@ + v_Filter.precedence := int2bit((hex2int(p_EPS_BearerId)-6+8), 8); // @sic R5-104702 sic@ + + if (p_PacketFilterNumber == 7) {// @sic R5-183239, R5-193982 sic@ + if (p_PdnTypeValue == tsc_PdnType_IPv4) { // IPv4 only + v_Filter.contents[1] := cs_PktFilterCompProtocolIdNextHeaderICMP; + } else { + v_Filter.contents[1] := cs_PktFilterCompProtocolIdNextHeaderICMPv6; + } + } else { + v_Filter.contents[1] := cs_PktFilterCompSingleRemotePort61000(p_EPS_BearerId); + v_ContentsLength := v_ContentsLength + 3; + v_Filter.contents[2] := cs_PktFilterCompProtocolIdNextHeaderUDP; + } + v_ContentsLength := v_ContentsLength + 2; + } + case (3){ + // Update to values in Reference packet filter #3 + // Bidirectional filter, ID=2 @sic R5-104702 sic@ + v_Filter.spare := '00'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.direction := '11'B; // @sic R5s130195 Baseline Moving sic@ + v_Filter.iei := '2'H; // @sic R5s130195 Baseline Moving sic@ + v_Filter.precedence := '00001111'B; + } + case (4){ // @sic R5-132085 sic@ + // Update to values in Reference packet filter #4 + // Bidirectional filter, ID=3 + v_Filter.spare := '00'B; + v_Filter.direction := '11'B; + v_Filter.iei := '3'H; + if (hex2int(p_EPS_BearerId)>5) + { + v_Filter.precedence := int2bit((hex2int(p_EPS_BearerId)-6), 8); // @sic R5-174469 sic@ + } else { + v_Filter.precedence := int2bit(0, 8); + } + v_Filter.contents[0] := cs_PktFilterCompRemotePortRange(tsc_IMS_MediaPort_M1, tsc_IMS_MediaPort_M1+1); // @sic R5s130495 sic@ + v_ContentsLength := v_ContentsLength + 5; + v_Filter.contents[1] := cs_PktFilterCompProtocolIdNextHeaderUDP; + v_ContentsLength := v_ContentsLength + 2; + } + case (5){ // @sic R5-132085 sic@ + // Update to values in Reference packet filter #5 + // Bidirectional filter, ID=3 + v_Filter.spare := '00'B; + v_Filter.direction := '11'B; + v_Filter.iei := '4'H; + if (hex2int(p_EPS_BearerId)>5) + { + v_Filter.precedence := int2bit((hex2int(p_EPS_BearerId)-6), 8); // @sic R5-174469 sic@ + } else { + v_Filter.precedence := int2bit(0, 8); + } + v_Filter.contents[0] := cs_PktFilterCompRemotePortRange(tsc_IMS_MediaPort_M2, tsc_IMS_MediaPort_M2+1); // @sic R5s130495 sic@ + v_ContentsLength := v_ContentsLength + 5; + v_Filter.contents[1] := cs_PktFilterCompProtocolIdNextHeaderUDP; + v_ContentsLength := v_ContentsLength + 2; + } + case (8) { // @sic R5-187765 sic@ + // Update to values in Reference packet filter #8 + // UL only filter, ID=1 + v_Filter.spare := '00'B; + v_Filter.direction := '10'B; + v_Filter.iei := '1'H; + v_Filter.precedence := int2bit((hex2int(p_EPS_BearerId)-6+8), 8); + } + case (9) { // @sic R5-187765 sic@ + // Update to values in Reference packet filter #9 + // Bidirectional filter, ID=5 + v_Filter.spare := '00'B; + v_Filter.direction := '11'B; + v_Filter.iei := '5'H; + if (hex2int(p_EPS_BearerId)>5) + { + v_Filter.precedence := int2bit((hex2int(p_EPS_BearerId)-6), 8); + } else { + v_Filter.precedence := int2bit(0, 8); + } + v_Filter.contents[0] := cs_PktFilterCompRemotePortRange(tsc_IMS_MediaPort_M2, tsc_IMS_MediaPort_M2+1); + v_ContentsLength := v_ContentsLength + 5; + v_Filter.contents[1] := cs_PktFilterCompProtocolIdNextHeaderUDP; + v_ContentsLength := v_ContentsLength + 2; + } + case (10, 11) { // @sic R5-210201, R5s211690, R5-222015 sic@ + // Update to values in Reference packet filter #10 + // Bidirectional filter, ID=4 + v_Filter.spare := '00'B; + v_Filter.direction := '11'B; // Bidirectional + v_Filter.iei := '4'H; // ID=4 + if (hex2int(p_EPS_BearerId)>5) + { + v_Filter.precedence := int2bit((hex2int(p_EPS_BearerId)-6), 8); + } else { + v_Filter.precedence := int2bit(0, 8); + } + if (p_PacketFilterNumber == 10) { + v_PortNumber := tsc_IMS_MediaPort_M3; // same portnumber as tsc_MCX_MediaControlPortNW + v_PacketFilterProtocolId := cs_PktFilterCompProtocolIdNextHeaderUDP; + } else { // @sic R5-222015: Table 6.6.2-12: Reference packet filter #11 for TCP sic@ + v_PortNumber := tsc_IMS_MediaPort_M1; // same portnumber as tsc_MCData_MediaPort_MSRP + v_PacketFilterProtocolId := cs_PktFilterCompProtocolIdNextHeaderTCP; + } + v_Filter.contents[0] := cs_PktFilterCompSingleRemotePort(tsc_IMS_MediaPort_M3); + v_ContentsLength := v_ContentsLength + 3; + v_Filter.contents[1] := v_PacketFilterProtocolId; + v_ContentsLength := v_ContentsLength + 2; + } + } + v_Filter.iel := int2oct(v_ContentsLength, 1); + + p_PacketFilterByRef := v_Filter; + p_PacketFilterLengthByRef := v_ContentsLength + 3; // length of the filter contents + 3 octets for iei, precedence and iel + } + + //---------------------------------------------------------------------------- + /* + * @desc Create TFT acc. to 36.508 Table 6.6.2-1 + * @param p_BearerContext .. Reference dedicated EPS bearer context #1, #2 + * @param p_EPS_BearerId + * @param p_PdnTypeValue + * @param p_PdnIndex + * @return template (value) TrafficFlowTemplate + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, NBIOT, NR5GC, NR5GC_IRAT) + */ + function f_EUTRA_NB_Get_508_TrafficFlowTemplate(integer p_BearerContext, + HalfOctet_Type p_EPS_BearerId, + B3_Type p_PdnTypeValue, + PDN_Index_Type p_PdnIndex := PDN_1) return template (value) TrafficFlowTemplate + { /* @sic R5-112600: to replace cs_508_Tft_Dedicated_1 and cs_508_Tft_Dedicated_2 sic@ */ + var integer v_PacketFilterLen1ByRef; + var integer v_PacketFilterLen2ByRef; + var integer v_PacketFilterLen3ByRef; + var template (value) PacketFilter v_PacketFilter1ByRef; + var template (value) PacketFilter v_PacketFilter2ByRef; + var template (value) PacketFilter v_PacketFilter3ByRef; + var template (value) TrafficFlowTemplate.packetFilterList v_PacketFilterList; + var integer v_IeLength; + + select (p_BearerContext) { + case (1) { // @sic R5-123632 sic@ + fl_Get_508_PacketFilter(v_PacketFilter1ByRef, v_PacketFilterLen1ByRef, 1, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #1 acc. to 36.508 Table 6.6.2-2 @sic R5s130495 sic@ + fl_Get_508_PacketFilter(v_PacketFilter2ByRef, v_PacketFilterLen2ByRef, 2, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #2 acc. to 36.508 Table 6.6.2-3 @sic R5s130495 sic@ + + v_IeLength := v_PacketFilterLen1ByRef + v_PacketFilterLen2ByRef + 1; // packet filter 1 + packet filter 2 + one octet for tftOperationCode, eBit and noOfPktFilter + v_PacketFilterList := {v_PacketFilter1ByRef, v_PacketFilter2ByRef}; + } + case (2) { // @sic R5-123632, R5-132085 sic@ + fl_Get_508_PacketFilter(v_PacketFilter1ByRef, v_PacketFilterLen1ByRef, 3, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #3 acc. to 36.508 Table 6.6.2-4 @sic R5s130495 sic@ + + v_IeLength := v_PacketFilterLen1ByRef + 1; // packet filter 1 + one octet for tftOperationCode, eBit and noOfPktFilter + v_PacketFilterList := {v_PacketFilter1ByRef}; + } + case (3) { // @sic R5-132085 sic@ + fl_Get_508_PacketFilter(v_PacketFilter1ByRef, v_PacketFilterLen1ByRef, 5, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #3 acc. to 36.508 Table 6.6.2-4 @sic R5s130495 sic@ + + v_IeLength := v_PacketFilterLen1ByRef + 1; // packet filter 1 + one octet for tftOperationCode, eBit and noOfPktFilter + v_PacketFilterList := {v_PacketFilter1ByRef}; + } + case (4) { // @sic R5-132085 sic@ + fl_Get_508_PacketFilter(v_PacketFilter1ByRef, v_PacketFilterLen1ByRef, 4, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #4 acc. to 36.508 Table 6.6.2-4 @sic R5s130495 sic@ + + v_IeLength := v_PacketFilterLen1ByRef + 1; // packet filter 1 + one octet for tftOperationCode, eBit and noOfPktFilter + v_PacketFilterList := {v_PacketFilter1ByRef}; + } + case (5) { // @sic R5-210201, R5s211690 sic@ + fl_Get_508_PacketFilter(v_PacketFilter1ByRef, v_PacketFilterLen1ByRef, 4, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #4 acc. to 36.508 Table 6.6.2-1 + fl_Get_508_PacketFilter(v_PacketFilter2ByRef, v_PacketFilterLen2ByRef, 10, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #10 acc. to 36.508 Table 6.6.2-1 + + v_IeLength := v_PacketFilterLen1ByRef + v_PacketFilterLen2ByRef + 1; // packet filter 1 + packet filter 2 + one octet for tftOperationCode, eBit and noOfPktFilter @sic R5s180640 sic@ + v_PacketFilterList := {v_PacketFilter1ByRef, v_PacketFilter2ByRef}; + } + case (6) { // @sic R5-183239 sic@ + fl_Get_508_PacketFilter(v_PacketFilter1ByRef, v_PacketFilterLen1ByRef, 6, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #6 acc. to 36.508 Table 6.6.2-1A + fl_Get_508_PacketFilter(v_PacketFilter2ByRef, v_PacketFilterLen2ByRef, 7, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #7 acc. to 36.508 Table 6.6.2-1A + + v_IeLength := v_PacketFilterLen1ByRef + v_PacketFilterLen2ByRef + 1; // packet filter 1 + packet filter 2 + one octet for tftOperationCode, eBit and noOfPktFilter @sic R5s180640 sic@ + v_PacketFilterList := {v_PacketFilter1ByRef, v_PacketFilter2ByRef}; // @sic R5s180640 sic@ + } + case (7) { // @sic R5-187765 sic@ + fl_Get_508_PacketFilter(v_PacketFilter1ByRef, v_PacketFilterLen1ByRef, 8, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #8 acc. to 36.508 Table 6.6.2-1A + + v_IeLength := v_PacketFilterLen1ByRef + 1; // packet filter 1 + one octet for tftOperationCode, eBit and noOfPktFilter + v_PacketFilterList := {v_PacketFilter1ByRef}; + } + case (8) { // @sic R5-187765 sic@ + fl_Get_508_PacketFilter(v_PacketFilter1ByRef, v_PacketFilterLen1ByRef, 9, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #9 acc. to 36.508 Table 6.6.2-1A + + v_IeLength := v_PacketFilterLen1ByRef + 1; // packet filter 1 + one octet for tftOperationCode, eBit and noOfPktFilter + v_PacketFilterList := {v_PacketFilter1ByRef}; + } + case (9) { // @sic R5-222015: MCData sic@ + fl_Get_508_PacketFilter(v_PacketFilter1ByRef, v_PacketFilterLen1ByRef, 11, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #11 acc. to 36.508 Table 6.6.2-1A + + v_IeLength := v_PacketFilterLen1ByRef + 1; // packet filter 1 + one octet for tftOperationCode, eBit and noOfPktFilter + v_PacketFilterList := {v_PacketFilter1ByRef}; + } + case (10) { // @sic R5-222015: MCVideo sic@ + fl_Get_508_PacketFilter(v_PacketFilter1ByRef, v_PacketFilterLen1ByRef, 4, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #4 acc. to 36.508 Table 6.6.2-1A + fl_Get_508_PacketFilter(v_PacketFilter2ByRef, v_PacketFilterLen2ByRef, 5, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #5 acc. to 36.508 Table 6.6.2-1A + fl_Get_508_PacketFilter(v_PacketFilter3ByRef, v_PacketFilterLen3ByRef, 10, p_EPS_BearerId, p_PdnTypeValue, p_PdnIndex); // get packet filter #10 acc. to 36.508 Table 6.6.2-1A + + v_IeLength := v_PacketFilterLen1ByRef + v_PacketFilterLen2ByRef + v_PacketFilterLen3ByRef + 1; // packet filter 1 + packet filter 2 + packet filter 3 + one octet for tftOperationCode, eBit and noOfPktFilter + v_PacketFilterList := {v_PacketFilter1ByRef, v_PacketFilter2ByRef, v_PacketFilter3ByRef}; + } + case else { + FatalError(__FILE__, __LINE__, "invalid bearer context"); + } + } + return cs_TrafficFlowTemplate(v_IeLength, v_PacketFilterList); + } + +} diff --git a/ttcn/Lib3GPP/NAS/NAS_CommonTypeDefs.ttcn b/ttcn/Lib3GPP/NAS/NAS_CommonTypeDefs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1b77127ad1e3a3c38a956c3dca62b187a970bdb7 --- /dev/null +++ b/ttcn/Lib3GPP/NAS/NAS_CommonTypeDefs.ttcn @@ -0,0 +1,1506 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-11-29 17:53:31 +0100 (Tue, 29 Nov 2022) $ +// $Rev: 34751 $ +/******************************************************************************/ + +module NAS_CommonTypeDefs { + /* Module containing type definitions for EPS, UTRAN and/or GERAN */ + + import from CommonDefs all; + + //**************************************************************************** + // Common Type definitions: + //---------------------------------------------------------------------------- + + //**************************************************************************** + //**************************************************************************** + + type HalfOctet_Type IEI4_Type; /* 4 bit info element identifier for type 1 IEs */ + type Octet_Type IEI8_Type; /* 8 bit info element identifier */ + + type O1_Type Type4Length_Type with { variant "COMP(nosign), BYTEORDER(last)" }; + type O2_Type Type6Length_Type with { variant "COMP(nosign), BYTEORDER(last)" }; + + type HalfOctet_Type SpareHalfOctet; + + type hexstring NAS_Mcc length(3) with { variant "FIELDLENGTH(3)" }; //* @desc Type which can be used to represent an MCC (as string of 3 decimal digits). + + type record of hexstring EmergencyNumList; + + type enumerated PDU_PDN_DNN_Type {V2X_DNN, MIOT_DNN, URLLC_DNN, IMS_DNN, Internet_DNN, Emergency_PDN, Ethernet_DNN, None}; /* @status APPROVED (NR5GC) @sic R5-204399, R5-221467 sic@ */ + type enumerated APN_DefaultConfiguration_Type {None, internet, ims, urllc, miot, v2x, ethernet}; // @sic R5-221467, R5-227472 sic@ + type enumerated InterworkWithoutN26 {NOT_SUPPORTED, /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + SUPPORTED} + + //**************************************************************************** + // NAS PROTOCOL DEFINITIONS: IEs + //---------------------------------------------------------------------------- + // General Info Elements (24.301 cl. 9) + //---------------------------------------------------------------------------- + + type B4_Type SecurityHeaderType; /* 24.301 cl. 9.3.1 */ + type B4_Type ProtocolDiscriminator; /* 24.301 cl. 9.2 and 24.007 cl. 11.2.3.1.1 */ + type Octet_Type ProcedureTransactionIdentifier; /* 24.301 cl. 9.4 */ + type B4_Type SkipIndicator; /* 24.007 cl. 11.2.3.1.2 */ + type B8_Type MessageType; /* 24.301 cl. 9.8 */ + type Octet_Type NAS_SequenceNumber; /* 24.301 cl. 9.6 */ + + type B3_Type NAS_AttDetValue_Type; + type B3_Type KeySeq; /* ciphering key sequence + 3G TS 24008 cl. 10.5.1.2 */ + type B3_Type NAS_KsiValue; + type O3_Type NAS_PlmnId; + + type O4_Type NAS_Tmsi; + type O4_Type NAS_P_Tmsi; + + type O2_Type NAS_Lac; + type O1_Type NAS_Rac; + + type B3_Type PdnTypeValue; + + type bitstring BcdDigit_Bit length(4) with { variant "FIELDLENGTH(4)" }; + + type B3_Type NAS_IdType; + type B8_Type NAS_CauseValue_Type; + + type B1_Type TmsiStatusValue; + + type enumerated PS_MODE {VOICE_CENTRIC, DATA_CENTRIC}; /* @status @sic R5s120274 sic@ */ + type enumerated CS_PS_MODE {VOICE_CENTRIC, DATA_CENTRIC}; /* @status APPROVED */ + // This is here because it's the best place for it + const NAS_Lac tsc_LAC_Def := '0001'O ; /* Default NAS LAC, the value may need to be updated in CS combined/CS fallback test cases + @status APPROVED + @sic R5s090180 sic@ */ + const NAS_Lac tsc_LAC_Deleted := 'FFFE'O; /* @status APPROVED (UTRAN) */ + + //----------------------------------------------------------------------------- + // Defined in 24.008, but also referenced from 24.301 + //----------------------------------------------------------------------------- + + // ============================================================================= + // Structured Type Definition + // 3G TS 24.008, section 10.5.6.1 + // ----------------------------------------------------------------------------- + type record AccessPointName { /* 24.301 cl. 9.9.4.1 -> 24.008 cl. 10.5.6.1 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel, + octetstring nameValue length(1..100) + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (nameValue)"; + variant (iel) "BYTEORDER(last)"; + variant (nameValue) "BYTEORDER(last)"; + }; + + type record AdditionalUpdateType { /* 24.301 cl. 9.9.3.0B @sic R5s100135 sic@ */ + IEI4_Type iei, // currently only used as TV + B2_Type pnb_CIOT, // 0=no additional info, 1=CP, 2=UP, 3=reserved @sic R5s160711 Baseline Moving sic@ + B1_Type signallingActiveFlag, // @sic R5s160711 Baseline Moving sic@ + B1_Type addUpdateTypeValue + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // Ciphering Key Sequence Number + // 3G TS 24.008 cl. 10.5.1.2 + // ----------------------------------------------------------------------------- + type record CiphKeySeqNum { + IEI4_Type iei optional, // '1000'B + B1_Type spare1, + KeySeq keySeq + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // Priority Level + // 3G TS 24.008 cl. 10.5.6.19 / 24.301 9.9.4.2A + // ----------------------------------------------------------------------------- + type record ConnectivityType { + IEI4_Type iei, + B4_Type connectivityValue + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // 3G TS 24.008, section 10.5.5.5/ 24.301 cl. 9.9.3.7 + // ----------------------------------------------------------------------------- + type record DetachType { + // IEI is always skipped + B1_Type switchOff, + NAS_AttDetValue_Type typeOfDetach + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // Device Properties + // 3G TS 24.008 cl. 10.5.7.8 + // ----------------------------------------------------------------------------- + type record DeviceProperties { + IEI4_Type iei, + B3_Type spare, + B1_Type lowPriority + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // DRX paramter + // 3GPP 24.008 / 10.5.5.6 + // ----------------------------------------------------------------------------- + type record DRXparameter { + IEI8_Type iei optional, // '00100111'B (hex 27) + B8_Type splitPGcycleCode, // Split PG cycle code + B4_Type cnDRXcoef, // CN specific DRX cycle length coefficient + B1_Type splitOnCCCH, // Split on CCCCH + B3_Type nonDRXtimer // non-DRX timer + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // Emergency Service Category + // 3GPP 24.008 / 10.5.4.33 + // ----------------------------------------------------------------------------- + type record EmergServCat { + B1_Type spare, + B7_Type emergSCValue // Emergency Service Category value + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // Emergency Number + // 3G TS 24.008 cl. 10.5.3.13 + // ----------------------------------------------------------------------------- + type record EmergNum { + Type4Length_Type len, // length + EmergServCat emergServCat, // Emergency Service Category + octetstring digits length(0..10) // BCD numbers + } with { + variant "FIELDORDER(msb)"; + variant (len) "LENGTHTO (emergServCat, digits)"; + variant (len) "BYTEORDER(last)"; + variant (digits) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // Emergency Number List + // 3G TS 24.008 cl. 10.5.3.13 + // ----------------------------------------------------------------------------- + type record EmergNumList { + IEI8_Type iei, // '00110100'B (34 hex) @sic R5s110420 sic@ + Type4Length_Type iel, // length @sic R5s110420 sic@ + record length (1..10) of EmergNum emergNum // Emergency Number + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (emergNum)"; + variant (iel) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // GPRS timer + // 3GPP 24.008 / 10.5.7.3 + // ----------------------------------------------------------------------------- + type record GPRS_Timer { /* 24.301 cl. 9.9.3.14 -> 24.008 cl. 10.5.7.3 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + GprsTimerUnit unit, + B5_Type timerValue + } with { + variant "FIELDORDER(msb)"; + }; + + type B3_Type GprsTimerUnit; + + // ============================================================================= + // Structured Type Definition + // GPRS timer 2 or GPRS timer 3 (definition is identical) + // 3GPP 24.008 / 10.5.7.4(a) + // ----------------------------------------------------------------------------- + type record GPRS_Timer2 { + IEI8_Type iei, // @sic R5s110420, R5s160712 Baseline Moving sic@ + Type4Length_Type iel, // length @sic R5s110420 sic@ + GprsTimerUnit unit, // Unit + B5_Type gprsTimerValue // Timer value + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (unit, gprsTimerValue)"; + variant (iel) "BYTEORDER(last)"; + }; + + type GPRS_Timer2 GPRS_Timer3; // definition is identical @sic R5s150329 Baseline Moving sic@ + + // ============================================================================= + // Structured Type Definition + // IMEISV Request + // 3GPP 24.008 / 10.5.5.10 + // ----------------------------------------------------------------------------- + type record IMEISV_Request { /* 24.301 cl. 9.9.3.16 -> 24.008 cl. 10.5.5.10 */ + IEI4_Type iei optional, /* present in case of TV; omit in case of V */ + B1_Type spare, + B3_Type requestValue + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // Location Area Identification Value + // 3G TS 24.008 cl. 10.5.1.3 + // ----------------------------------------------------------------------------- + type record LocAreaId { + IEI8_Type iei optional, + NAS_PlmnId plmn, // MCC + MNC 3 digits each + NAS_Lac lac // LAC + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // RoutingAreaId + // 3GPP 24.008 / 10.5.5.15 + // ----------------------------------------------------------------------------- + type record RoutingAreaId { /* 24.301 cl. 9.9.3.24 -> 24.008 cl. 10.5.5.15 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + LocAreaId lai, /* MCC + MNC + LAC */ + O1_Type rac /* RAC */ + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // 24.007, clause 10.5.6.9 + // ----------------------------------------------------------------------------- + type record LLC_SAPI { /* 24.301 cl. 9.9.4.4 -> 24.008 cl. 10.5.6.9 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B4_Type spare, + B4_Type llcSapiValue + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // Mobile Identity + // 3G TS 24.008 cl. 10.5.1.4 + // Maximum number of digits is 16 (IMEISV). Filler may be used. + // ----------------------------------------------------------------------------- + type record MobileIdentity { + IEI8_Type iei optional, // '00100011'B + Type4Length_Type iel, + BcdDigit_Bit idDigit1, // 1st identitity digit + B1_Type oddEvenInd, // Odd/even indicator + NAS_IdType typeOfId, // Type of identity + octetstring otherDigits length(0..10) // Other identity digits (10 octets rather than 8 to cover Guti as well) + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (idDigit1, oddEvenInd, typeOfId, otherDigits)"; + variant (iel) "BYTEORDER(last)"; + variant (otherDigits) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // Mobile Station Classmark 2 + // 3G TS 24.008 cl. 10.5.1.6 + // ----------------------------------------------------------------------------- + type record MS_Clsmk2 { + IEI8_Type iei optional, + Type4Length_Type iel, // @sic R5s110420 sic@ + B1_Type spare1_1, // Spare bit + B2_Type revLvl, // Revision Level + B1_Type eSIND, // Early Sending Indication + B1_Type a5_1, // Algorithm A5/1 Support + B3_Type rFPwrCap, // RF Power Capability + B1_Type spare1_2, // Spare bit + B1_Type pSCap, // Pseudo Synchronisation Capability + B2_Type sSSI, // SS Screen Indicator + B1_Type sMCap, // Short Message Capability + B1_Type vBS, // VBS Capability + B1_Type vGCS, // VGCS Capability + B1_Type fC, // Frequency Capability + B1_Type cM3, // Classmark 3 Indicator + B1_Type spare1_3, // Spare bit + B1_Type lCSVA, // LCS VA Capability + B1_Type uCS2, // UCS2 Encoding Support + B1_Type soLSA, // SoLSA Support + B1_Type cMSP, // CM Service Prompt Support + B1_Type a5_3, // Algorithm A5/3 Support + B1_Type a5_2 // Algorithm A5/2 Support + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare1_1, revLvl, eSIND, a5_1, rFPwrCap, spare1_2, pSCap, sSSI, sMCap, vBS, vGCS, fC, cM3, spare1_3, lCSVA, uCS2, soLSA, cMSP, a5_3, a5_2)"; + variant (iel) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // Mobile station classmark 3 + // 3GPP TS 24.008 clause 10.5.1.7 + // The information element has 34 octets maximum length + // ----------------------------------------------------------------------------- + type record MS_Clsmk3 { + IEI8_Type iei optional, // 0x20 + Type4Length_Type iel optional, // OCTETSTRING [1] + B1_Type spareBit, // spare bit @sic R5s120178 Baseline Moving sic@ + B3_Type multibandSupported, // @sic R5s120178 Baseline Moving sic@ + B1_Type a5_7, // a5/7 algorithm supported @sic R5s120178 Baseline Moving sic@ + B1_Type a5_6, // a5/6 algorithm supported @sic R5s120178 Baseline Moving sic@ + B1_Type a5_5, // a5/5 algorithm supported @sic R5s120178 Baseline Moving sic@ + B1_Type a5_4, // a5/4 algorithm supported @sic R5s120178 Baseline Moving sic@ + B4_Type associatedRadioCapabilty2 optional, // present if multibandSupported = 101 or 110 + B4_Type spareBits1 optional, // present if multibandSupported = 001 or 010 or 100 + B4_Type associatedRadioCapabilty1 optional, // present if multibandSupported = 001 or 010 or 100 or 101 or 110 + B1_Type maskBit1 optional, + B3_Type rGSM_RadioCapability optional, // R-GSM band associated radio capability not present if maskBit1 = 0 + B1_Type maskBit2 optional, + B5_Type multiSlotClass optional, // multi slot class not present if multiSlotClass = 0 + B1_Type uCS2Treatment optional, + B1_Type extMeasurementCapability optional, // extended measurement capability + B1_Type maskBit3 optional, + MS_MeasCapability msMeasurementCapability optional, // MS measurement capability + // not present if maskBit3 = 0 + B1_Type maskBit4 optional, + B5_Type msPositioningMethod optional, // MS positioning method capability + // not present if maskBit4 = 0 + B1_Type maskBit5 optional, + B5_Type eDGE_MultiSlot optional, // EDGE multi slot capability + // not present if maskB5_Type = 0 + B1_Type maskBit6 optional, + EDGE_Struct psk8_Struct optional, // 8PSK struct + // not present if maskB6_Type = 0 + B1_Type maskBit7 optional, + B2_Type gSM400BandsSupported optional, // not present if maskBIt7 = 0 + B4_Type gSM400AssociatedRadioCapability optional, // not present if gSM400BandsSupported = 00 or maskB7_Type = 0 + B1_Type maskBit8 optional, + B4_Type gSM850AssociatedRadiioCapability optional, // not present if maskBIt8 = 0 + B1_Type maskBit9 optional, + B4_Type pCS1900AssociatedRadiioCapability optional, // not present if maskBIt9 = 0 + B1_Type uMTS_FDD_RAT_Capability optional, + B1_Type uMTS384TDD_RAT_Capability optional, + B1_Type cDMA2000_RAT_Capability optional, + B1_Type maskBit10 optional, + B2_Type dTM_GPRS_MultiSlotSubclass optional, // not present if maskBit10 = 0 + B1_Type singleSlotDTM optional, // not present if maskBit10 = 0 + B1_Type maskBit11 optional, // not present if maskBit10 = 0 + B2_Type dTM_EGPRS_MultiSlorSubclass optional, // not present if maskBit10 = 0 or maskBit11 = 0 + B1_Type maskBit12 optional, + B4_Type singleBandSupport optional, // not present if maskBit12 = 0 + B1_Type maskBit13 optional, + B4_Type gSM700AssociatedRadioCapability optional, // not present if maskBit13 = 0 + B1_Type uMTS128TDD_RAT_Capability optional, + B1_Type gERANFeatPack1 optional, + B1_Type mask14 optional, + B2_Type extDTM_GPRS_MultiSlotSubclass optional, // not present if maskBit14 = 0 + B2_Type etxDTM_EGPRS_MultiSlotSubclass optional, // not present if maskBit14 = 0 + B1_Type mask15 optional, + B2_Type highMultislotCap optional, // not present if mask15 = 0 + B1_Type spare2 optional, // value '1' indicated GERAN Iu Mode Capabilities in earlier versions @sic R5s150329 Baseline Moving sic@ + B1_Type gERANFeatPack2 optional, + B2_Type gMSKMultislotPowerProfile optional, + B2_Type pSKMultislotPowerProfile optional, + B1_Type mask17 optional, // rel 6 features + B2_Type tGSM400BandsSupported optional, // not present if maskBit17 = 0 + B4_Type tGSM400AssocRadioCap optional, // not present if maskBit17 = 0 + B1_Type spare optional, // Set to 0 @sic R5s110176 Baseline Moving sic@ + B2_Type dlAdvancedRxPerf optional, + B1_Type dTMEhancCap optional, + B1_Type mask19 optional, + B3_Type dTMGPRSHighMultislotClass optional, // not present if maskBit19 = 0 + B1_Type offsetReq optional, // not present if maskBit19 = 0 + B1_Type mask20 optional, // not present if maskBit19 = 0 + B3_Type dTMEGPRSHighMultislotClass optional, // not present if maskBit19 and maskBit20 = 0 + B1_Type rptdACCHCap optional, + B1_Type mask21 optional, + B4_Type gsm710AssocRadioCap optional, // not present if maskBit21 = 0 + B1_Type mask22 optional, + B4_Type tgsm810AssocRadioCap optional, // not present if maskBit22 = 0 + B1_Type cipheringModeSettingCap optional, + B1_Type addPositionCap optional, + B1_Type eutraFDDSupport optional, // rel 8 features + B1_Type eutraTDDSupport optional, + B1_Type eutraMeasAndReporting optional, // @sic R5s100135 sic@ + B1_Type priorityBasedReselection optional, // @sic R5s110176 Baseline Moving sic@ + B1_Type utraCSGCellsReporting optional, // @sic R5s110176 Baseline Moving sic@ + B2_Type vamosLevel optional, // @sic R5s110176 Baseline Moving sic@ + B2_Type tighterCap optional, // @sic R5s120178 Baseline Moving sic@ + B1_Type selectCipheringDLSACCH optional, // @sic R5s120178 Baseline Moving sic@ + B2_Type csPS_SRVCC_G2U optional, // @sic R5s130195 Baseline Moving sic@ + B2_Type csPS_SRVCC_G2E optional, // @sic R5s130195 Baseline Moving sic@ + B1_Type geranNwkSharing optional, // @sic R5s150329 Baseline Moving sic@ + B1_Type eutraWidebandRSRQMeas optional, // @sic R5s150329 Baseline Moving sic@ + B1_Type erBandSupport optional, // @sic R5s150329 Baseline Moving sic@ + B1_Type utraMultipleFreqBandInd optional, // @sic R5s150329 Baseline Moving sic@ + B1_Type eutraMultipleFreqBandInd optional, // @sic R5s150329 Baseline Moving sic@ + B1_Type xtdTSCSetCap optional, // @sic R5s150329 Baseline Moving sic@ + B1_Type xtdEARFCNValueRange optional, // @sic R5s160712 Baseline Moving sic@ + bitstring spareBits2 optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spareBit, multibandSupported, a5_7, a5_6, a5_5, a5_4, associatedRadioCapabilty2, spareBits1, associatedRadioCapabilty1, maskBit1, rGSM_RadioCapability, maskBit2, multiSlotClass, uCS2Treatment, extMeasurementCapability, maskBit3, msMeasurementCapability, maskBit4, msPositioningMethod, maskBit5, eDGE_MultiSlot, maskBit6, psk8_Struct, maskBit7, gSM400BandsSupported, gSM400AssociatedRadioCapability, maskBit8, gSM850AssociatedRadiioCapability, maskBit9, pCS1900AssociatedRadiioCapability, uMTS_FDD_RAT_Capability, uMTS384TDD_RAT_Capability, cDMA2000_RAT_Capability, maskBit10, dTM_GPRS_MultiSlotSubclass, singleSlotDTM, maskBit11, dTM_EGPRS_MultiSlorSubclass, maskBit12, singleBandSupport, maskBit13, gSM700AssociatedRadioCapability, uMTS128TDD_RAT_Capability, gERANFeatPack1, mask14, extDTM_GPRS_MultiSlotSubclass, etxDTM_EGPRS_MultiSlotSubclass, mask15, highMultislotCap, spare2, gERANFeatPack2, gMSKMultislotPowerProfile, pSKMultislotPowerProfile, mask17, tGSM400BandsSupported, tGSM400AssocRadioCap, spare, dlAdvancedRxPerf, dTMEhancCap, mask19, dTMGPRSHighMultislotClass, offsetReq, mask20, dTMEGPRSHighMultislotClass, rptdACCHCap, mask21, gsm710AssocRadioCap, mask22, tgsm810AssocRadioCap, cipheringModeSettingCap, addPositionCap, eutraFDDSupport, eutraTDDSupport, eutraMeasAndReporting, priorityBasedReselection, utraCSGCellsReporting, vamosLevel, tighterCap, selectCipheringDLSACCH, csPS_SRVCC_G2U, csPS_SRVCC_G2E, geranNwkSharing, eutraWidebandRSRQMeas, erBandSupport, utraMultipleFreqBandInd, eutraMultipleFreqBandInd, xtdTSCSetCap, xtdEARFCNValueRange, spareBits2)"; + variant (iel) "BYTEORDER(last)"; + variant (spareBits2) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // Reference : 3GPP TS 24.008 clause 10.5.1.7 + // ----------------------------------------------------------------------------- + type record EDGE_Struct { + B1_Type modulationCapability, + B1_Type pwrMask1, + B2_Type eDGE_RF_PowerCapability1 optional, // not present if pwrMask1 = 0 + B1_Type pwrMask2, + B2_Type eDGE_RF_PowerCapability2 optional // not present if pwrMask2 = 0 + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // Reference : 3GPP TS 24.008 clause 10.5.1.7 + // ----------------------------------------------------------------------------- + type record MS_MeasCapability { + B4_Type sMS_VALUE, + B4_Type sM_VALUE + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // MS network capability + // 3GPP 24.008 / 10.5.5.12 + // ----------------------------------------------------------------------------- + type record MS_NetworkCap { /* 24.301 cl. 9.9.3.18 -> 24.008 cl. 10.5.5.12 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel, // @sic R5s110420 sic@ + B1_Type gea1, + B1_Type smCapDedicated, + B1_Type smCapGPRS, + B1_Type ucs2, + B2_Type ssScreeningIndicator, + B1_Type soLSACap, + B1_Type revLevelIndicator, + B1_Type pfcFeatureMode, + B1_Type gea2, + B1_Type gea3, + B1_Type gea4, + B1_Type gea5, + B1_Type gea6, + B1_Type gea7, + B1_Type lcsVACap optional, // @sic R5s130477 not present for r99 sic@ + B1_Type psHOtoUTRAN_IuModeCap optional, // @sic R5s130477 not present for r99 sic@ + B1_Type psHOtoEUTRAN_S1ModeCap optional, // @sic R5s130477 not present for r99 sic@ + B1_Type emmCombinedCap optional, // @sic R5s110176 Baseline Moving, R5s130477 not present for r99 sic@ + B1_Type isrSupport optional, // @sic R5s130477 not present for r99 sic@ + B1_Type srvccToGERAN_UTRANCap optional, // @sic R5s130477 not present for r99 sic@ + B1_Type epcCap optional, // @sic R5s130477 not present for r99 sic@ + B1_Type nfCap optional, // @sic R5s110176 Baseline Moving, not present for Rel-8 R5s110242 sic@ + B1_Type gERANNtwkShareCap optional, // @sic R5s130195 Baseline Moving, not present for Rel-8 sic@ + B1_Type userPlaneIntegrityProtSupport optional, // @sic R5s160712 Baseline Moving, not present for Rel-12 sic@ + B1_Type gia4 optional, // @sic R5s160712 Baseline Moving, not present for Rel-12 sic@ + B1_Type gia5 optional, // @sic R5s160712 Baseline Moving, not present for Rel-12 sic@ + B1_Type gia6 optional, // @sic R5s160712 Baseline Moving, not present for Rel-12 sic@ + B1_Type gia7 optional, // @sic R5s160712 Baseline Moving, not present for Rel-12 sic@ + B1_Type ePCOInd optional, // @sic R5s170598 Baseline Moving sic@ + B1_Type restrictEnhancedCoverageCap optional, // @sic R5s170598 Baseline Moving sic@ + B1_Type dualConnectivityEUTRA_NR optional, // @sic R5s180553 Baseline Moving sic@ + bitstring spareBits length (0..43) optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (gea1, smCapDedicated, smCapGPRS, ucs2, ssScreeningIndicator, soLSACap, revLevelIndicator, pfcFeatureMode, gea2, gea3, gea4, gea5, gea6, gea7, lcsVACap, psHOtoUTRAN_IuModeCap, psHOtoEUTRAN_S1ModeCap, emmCombinedCap, isrSupport, srvccToGERAN_UTRANCap, epcCap, nfCap, gERANNtwkShareCap, userPlaneIntegrityProtSupport, gia4, gia5, gia6, gia7, ePCOInd, restrictEnhancedCoverageCap, dualConnectivityEUTRA_NR, spareBits)"; + variant (iel) "BYTEORDER(last)"; + variant (spareBits) "BYTEORDER(last)"; + }; + +// ============================================================================= +// Structured Type Definition +// Non-3GPP NW provided Policies +// 3G TS 24.008 cl. 10.5.5.37 / 24.301 cl. 9.9.3.49 +// ----------------------------------------------------------------------------- +type record Non3GPP_NW_ProvidedPolicies { + IEI4_Type iei, + B3_Type spareBits, + B1_Type n3ENInd + } with { + variant "FIELDORDER(msb)"; +}; + + // ============================================================================= + // Structured Type Definition + // Additional Network Feature Support + // 3G TS 24.008 cl. 10.5.5.31 + // ----------------------------------------------------------------------------- + type record NwkResourceId { + IEI8_Type iei, // + Type4Length_Type iel, // + B10_Type nriContainerValue, // @sic R5s140778 sic@ + B6_Type spareBits // @sic R5s140778 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (nriContainerValue, spareBits)"; + variant (iel) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // PacketFlowIdentifier + // 24.008, section 10.5.6.11 + // ----------------------------------------------------------------------------- + type record PacketFlowIdentifier { /* 24.301 cl. 9.9.4.5 -> 24.008 cl. 10.5.6.11 */ + IEI8_Type iei, // @sic R5s110420 sic@ + Type4Length_Type iel, // @sic R5s110420 sic@ + B1_Type spare, + B7_Type idValue + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare, idValue)"; + variant (iel) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // PLMN Identity of the CN Operator + // 3G TS 24.008 cl. 10.5.5.36 + // ----------------------------------------------------------------------------- + type record PLMN_IdIE { + IEI8_Type iei, + Type4Length_Type iel, + NAS_PlmnId plmn + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (plmn)"; + variant (iel) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // PLMN list + // 3G TS 24.008 cl. 10.5.1.13 + // ----------------------------------------------------------------------------- + type record PLMN_List { /* 24.301 cl. 9.9.2.4 -> 24.008 cl. 10.5.1.13 */ + IEI8_Type iei, // @sic R5s110420 sic@ + Type4Length_Type iel, // @sic R5s110420 sic@ + record length(1..15) of + NAS_PlmnId plmnList /* list of PLMNs */ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (plmnList)"; + variant (iel) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // MS network feature support + // 3GPP 24.008 / 10.5.5.15 + // ----------------------------------------------------------------------------- + type record MS_NetworkFeatureSupport { /* 24.301 cl. 9.9.2.0A -> 24.008 cl. 10.5.5.15 */ + IEI4_Type iei, + B3_Type spare, + B1_Type extdPeriodicTimers + } with { + variant "FIELDORDER(msb)"; + }; + + type PLMN_List.plmnList NAS_PlmnIdList_Type; + + // ============================================================================= + // Structured Type Definition + // ProtocolConfigOptions + // 3G TS 24.008 cl. 10.5.6.3 + // ----------------------------------------------------------------------------- + type record ProtocolConfigOptions { /* 24.301 cl. 9.9.4.8 -> 24.008 cl. 10.5.6.3 */ + IEI8_Type iei, // @sic R5s110420 sic@ + Type4Length_Type iel, + B1_Type ext, + B4_Type spare, + B3_Type configProtocol, + NAS_ProtocolConfigOptions_Type pco optional + } with { + variant "FIELDORDER(msb)"; + // FIXME variant (pco) "FORCEOMIT(protocolLongLength)"; + variant (iel) "LENGTHTO (ext, spare, configProtocol, pco)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record ProtocolContainer { + O2_Type protocolID, /* id is always 2 octets */ + Type4Length_Type protocolLength optional, // @sic R5s201386 Baseline Moving sic@ + Type6Length_Type protocolLongLength optional, // always set to omit in UL @sic R5s201386 Baseline Moving sic@ + octetstring content optional + } with { + variant "FIELDORDER(msb)"; + variant (protocolLength) "LENGTHTO (content)"; + variant (protocolLength) "BYTEORDER(last)"; + variant (content) "BYTEORDER(last)"; + }; + + type record length (0..83) of ProtocolContainer NAS_ProtocolConfigOptions_Type; + + type record APNRateControlParams { // 3GPP 24.008 / 10.5.6.3.2 + B4_Type spare, + B1_Type aer, + B3_Type uplinkTimeUnit, + O3_Type maxUplinkRate optional // @sic R5s170598 Baseline Moving sic@ + } with { + variant "FIELDORDER(msb)"; + variant (maxUplinkRate) "BYTEORDER(last)"; + }; + // ============================================================================= + // Structured Type Definition + // P-TMSI signature + // 3GPP 24.008 / 10.5.5.8 + // ----------------------------------------------------------------------------- + type record PTMSI_Signature { /* 24.301 cl. 9.9.3.23 -> 24.008 cl. 10.5.5.8 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel optional, // only present in 24.008 version of DETACH REQUEST message + O3_Type signatureValue + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (signatureValue)"; + variant (iel) "BYTEORDER(last)"; + variant (signatureValue) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // 24.008, clause 10.5.6.5 + // ----------------------------------------------------------------------------- + type record QualityOfService { /* 24.301 cl. 9.9.4.9 -> 24.008 cl. 10.5.6.5 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel, + B2_Type spare1, + B3_Type delayClass, + B3_Type relabilityClass, + B4_Type peakThroughput, + B1_Type spare2, + B3_Type precedenceClass, + B3_Type spare3, + B5_Type meanThroughput, + B3_Type trafficClass, + B2_Type deliveryOrder, + B3_Type deliveryErrorSDU, + B8_Type maxSduSize, + B8_Type maxBitRateUL, + B8_Type maxBitRateDL, + B4_Type residualBER, + B4_Type sduErrorRatio, + B6_Type transferDelay, + B2_Type trafficHandlingPrio, + B8_Type guaranteedBitRateUL, + B8_Type guaranteedBitRateDL, + B3_Type spare4, + B1_Type signallingInd, + B4_Type sourceStatisticsDescriptor, + B8_Type maxBitRateDL_Ext optional, + B8_Type guaranteedBitRateDL_Ext optional, + B8_Type maxBitRateUL_Ext optional, + B8_Type guaranteedBitRateUL_Ext optional, + B8_Type maxBitRateDL_Ext2 optional, // @sic R5s1300195 Baseline Moving sic@ + B8_Type guaranteedBitRateDL_Ext2 optional, // @sic R5s1300195 Baseline Moving sic@ + B8_Type maxBitRateUL_Ext2 optional, // @sic R5s1300195 Baseline Moving sic@ + B8_Type guaranteedBitRateUL_Ext2 optional // @sic R5s1300195 Baseline Moving sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare1, delayClass, relabilityClass, peakThroughput, spare2, precedenceClass, spare3, meanThroughput, trafficClass, deliveryOrder, deliveryErrorSDU, maxSduSize, maxBitRateUL, maxBitRateDL, residualBER, sduErrorRatio, transferDelay, trafficHandlingPrio, guaranteedBitRateUL, guaranteedBitRateDL, spare4, signallingInd, sourceStatisticsDescriptor, maxBitRateDL_Ext, guaranteedBitRateDL_Ext, maxBitRateUL_Ext, guaranteedBitRateUL_Ext, maxBitRateDL_Ext2, guaranteedBitRateDL_Ext2, maxBitRateUL_Ext2, guaranteedBitRateUL_Ext2)"; + variant (iel) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // Radio priority + // 3GPP 24.008 / 10.5.7.2 + // ----------------------------------------------------------------------------- + type record RadioPriority { /* 24.301 cl. 9.9.4.10 -> 24.008 cl. 10.5.7.2 */ + IEI4_Type iei optional, /* present in case of TV; omit in case of V */ + B1_Type spare, + B3_Type levelValue + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // Codec + // 3G TS 24.008 cl. 10.5.4.32 + // ----------------------------------------------------------------------------- + type record Codec { + O1_Type sysId, // system identifcation + Type4Length_Type len, // length + B8_Type bitMap1to8, // codec bitmap bits 1-8 + B8_Type bitMap9to16 optional // codec bitmap bits 9-16 + } with { + variant "FIELDORDER(msb)"; + variant (len) "LENGTHTO (bitMap1to8, bitMap9to16)"; + variant (len) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // Supported Codec List + // 3G TS 24.008 cl. 10.5.4.32 + // ----------------------------------------------------------------------------- + type record CodecList { + IEI8_Type iei, // '01000000'B (40 hex) @sic R5s110420 sic@ + Type4Length_Type iel, // length @sic R5s110420 sic@ + record of Codec codec// list of codecs + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (codec)"; + variant (iel) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // TMSI status + // 3GPP 24.008 cl. 10.5.6.17 + // ----------------------------------------------------------------------------- + type record Request_Type { /* 24.301 cl. 9.9.4.11 */ + // IEI is always skipped + B1_Type spare, + B3_Type typeValue + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // TMSI status + // 3GPP 24.008 cl. 10.5.5.4 + // ----------------------------------------------------------------------------- + type record TMSI_Status { + IEI4_Type iei optional, + B3_Type spare3, + TmsiStatusValue flag // Flag + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // TrafficFlowTemplate + // 3GPP 24.008 / 10.5.6.12 + // ----------------------------------------------------------------------------- + type record TrafficFlowTemplate { /* 24.301 cl. 9.9.4.13 -> 24.008 cl. 10.5.6.12 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel, + B3_Type tftOperationCode, + B1_Type eBit, + B4_Type noOfPktFilter, + record of PacketFilter packetFilterList optional, + record of TftParameter parameterList optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (tftOperationCode, eBit, noOfPktFilter, packetFilterList, parameterList)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record TftParameter { + IEI8_Type iei, + Type4Length_Type iel, + octetstring contents + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (contents)"; + variant (iel) "BYTEORDER(last)"; + variant (contents) "BYTEORDER(last)"; + }; + + type record PacketFilter { + B2_Type spare, // @sic R5s130195 Baseline Moving sic@ + B2_Type direction, // @sic R5s130195 Baseline Moving sic@ + IEI4_Type iei, // @sic R5s130195 Baseline Moving sic@ + B8_Type precedence optional, + Type4Length_Type iel optional, + PacketFilterContents contents optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (contents)"; + variant (iel) "BYTEORDER(last)"; + variant (contents) "BYTEORDER(last)"; + }; + + type record of PacketFilterComponent PacketFilterContents; + + type record PacketFilterComponent { + O1_Type id, + PacketFilterComponentValue packetFilterComponentValue + } with { + variant "FIELDORDER(msb)"; + }; + + type union PacketFilterComponentValue { + O8_Type ipv4RemoteAddress, + O32_Type ipv6RemoteAddress, + O1_Type protocolIdNextHeader, + O2_Type singleLocalPort, + O4_Type localPortRange, + O2_Type singleRemotePort, + O4_Type remotePortRange, + O4_Type securityParameterIndex, + O2_Type typeOfServiceTrafficClass, + O3_Type flowLabel + } with { + variant "FIELDORDER(msb)"; + variant (ipv4RemoteAddress) "BYTEORDER(last)"; + variant (ipv6RemoteAddress) "BYTEORDER(last)"; + variant (singleLocalPort) "BYTEORDER(last)"; + variant (localPortRange) "BYTEORDER(last)"; + variant (singleRemotePort) "BYTEORDER(last)"; + variant (remotePortRange) "BYTEORDER(last)"; + variant (securityParameterIndex) "BYTEORDER(last)"; + variant (typeOfServiceTrafficClass) "BYTEORDER(last)"; + variant (flowLabel) "BYTEORDER(last)"; + }; + + type record UE_NetworkCap { // 24.301 cl. 9.9.3.34 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B8_Type eeaCap, // @sic R5s100135, R5s180271 Baseline Moving 2018 Phase 1 sic@ + B8_Type eiaCap, // @sic R5s100135, R5s180271 Baseline Moving 2018 Phase 1 sic@ + B8_Type ueaCap optional, // @sic R5s100135, R5s180271 Baseline Moving 2018 Phase 1 sic@ + B8_Type uiaCap optional, // @sic R5s100135, R5s180271 Baseline Moving 2018 Phase 1 sic@ + B8_Type srvcc_LPP_ProSeCap optional, // @sic R5s150329, R5s180271 Baseline Moving 2018 Phase 1 sic@ + B8_Type cIoT_proSeCap optional, // @sic R5s160711, R5s150329, R5s180271 Baseline Moving 2018 Phase 1 sic@ + B8_Type cIoT_V2X optional, // @sic R5s170598, R5s180271 Baseline Moving 2018 Phase 1 sic@ + B8_Type edt_WUS optional, // @sic R5s201386 Baseline Moving sic@ + B8_Type musim optional, // Sep22 @sic R5s221179 Baseline Moving sic@ + octetstring spare optional // @sic R5s100135 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(eeaCap, eiaCap, ueaCap, uiaCap, srvcc_LPP_ProSeCap, cIoT_proSeCap, cIoT_V2X, edt_WUS, musim, spare)"; + variant (iel) "BYTEORDER(last)"; + } + + type record ReAttemptIndicator { // 24.301 cl. 9.9.4.13A, 24.008 cl. 10.5.6.5A + // The two definitions are exactly the same. + // The only difference is the meaning of the ratcValue bit + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B6_Type spare, // @sic R5s160712 Baseline Moving sic@ + B1_Type eplmncValue, // @sic R5s160712 Baseline Moving sic@ + B1_Type ratcValue + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(spare, eplmncValue, ratcValue)"; + variant (iel) "BYTEORDER(last)"; + } + + // ============================================================================= + // Structured Type Definition + // Authentication Parameter AUTN + // 3G TS 24.008 cl. 10.5.3.1.1 + // ----------------------------------------------------------------------------- + type record AUTN { /* 24.301 cl. 9.9.3.2 -> 24.008 cl. 10.5.3.1.1 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel, // @sic R5s110420 sic@ + B128_Type aUTN /* (as for UMTS) */ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (aUTN)"; + variant (iel) "BYTEORDER(last)"; + variant (aUTN) "BYTEORDER(last)"; + } + + // ============================================================================= + // Structured Type Definition + // Authentication Failure Parameter (TLV) + // 3G TS 24.008 cl. 10.5.3.2.2 + // ----------------------------------------------------------------------------- + type record AuthenticationFailureParameter { + IEI8_Type iei, // '00100010'B for MM (22 hex) + // '00110000'B for GMM (30 hex) + Type4Length_Type iel, // M 1 octet + B112_Type auts // AUTS, 14 octets + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (auts)"; + variant (iel) "BYTEORDER(last)"; + variant (auts) "BYTEORDER(last)"; + } + + // ============================================================================= + // Structured Type Definition + // Authentication Parameter RAND (TV, 17 octets) + // 3G TS 24.008 cl. 10.5.3.1 + // ----------------------------------------------------------------------------- + type record RAND { + IEI8_Type iei optional, // '00100001'B (21 hex) + B128_Type randValue // Authentication Parameter RAND value + } with { + variant "FIELDORDER(msb)"; + variant (randValue) "BYTEORDER(last)"; + } + + type record DaylightSavingTime { /* 24.301 cl. 9.9.3.5 -> 24.008 cl. 10.5.3.12 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B6_Type spare, + B2_Type val + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare, val)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NetworkName { /* 24.301 cl. 9.9.3.21 -> 24.008 cl. 10.5.3.5a */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel, + B1_Type ext, + B3_Type codingScheme, + B1_Type addCI, + B3_Type spareBitCnt, + octetstring text + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (ext, codingScheme, addCI, spareBitCnt, text)"; + variant (iel) "BYTEORDER(last)"; + variant (text) "BYTEORDER(last)"; + }; + + type record TimeZone { /* 24.301 cl. 9.9.3.26 -> 24.008 cl. 10.5.3.8 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O1_Type timeZone + } with { + variant "FIELDORDER(msb)"; + }; + + type record TimeZoneAndTime { /* 24.301 cl. 9.9.3.27 -> 24.008 cl. 10.5.3.9 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O1_Type year, + O1_Type month, + O1_Type day, + O1_Type hour, + O1_Type minute, + O1_Type second, + O1_Type timeZone + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // 3G TS 24.008 cl. 10.5.5.28 + // @sic R5s110176 Baseline Moving sic@ + // ----------------------------------------------------------------------------- + type record VoiceDomainPref { + IEI8_Type iei optional, // 01111110'B + Type4Length_Type iel optional, // length + B5_Type spareBits, + B1_Type ueUsageSetting, + B2_Type voiceDomainPrefEUTRA // @sic R5s110233 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spareBits, ueUsageSetting, voiceDomainPrefEUTRA)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record IdentityType { /* 24.301 cl. 9.9.3.15 -> 24.008 cl. 10.5.3.4 */ + // IEI is always skipped + B1_Type spare, + NAS_IdType typeOfId + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // REGISTER + // ue->n or n->ue, 3GPPP TS 24.080, 2.4 + // ----------------------------------------------------------------------------- + type record REGISTER { + TI ti, // transaction identifier BITSTRING [4] + ProtocolDiscriminator sS_ProtocolDiscriminator, // "1011" Protocol discriminator for supplementary services BITSTRING [4] + MessageType msgType, // message type BITSTRING [8] + FacilityIE facility_Str, // M, BER enconded ASN.1 object + SS_VersionInd sS_VersionInd optional // O for ue->n, N/A for n->ue + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // FACILITY + // n->ue, 3GPPP TS 24.080, 2.3 and 24.008, 10.4 + // ----------------------------------------------------------------------------- + type record FACILITY { + TI ti, // transaction identifier BITSTRING [4] + ProtocolDiscriminator sS_ProtocolDiscriminator, // "1011" Protocol discriminator for supplementary services BITSTRING [4] + MessageType msgType, // message type BITSTRING [8], for n->ue "00111010", for ue->n "xx111010" (see 24.007) + FacilityIE facility_Str // M, BER enconded ASN.1 object + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // FACILITY + // ue->n 3GPPP TS 24.080, 2.3 and 24.008, 10.4 + // ----------------------------------------------------------------------------- + type record FACILITYul { + TI ti, // transaction identifier BITSTRING [4] + ProtocolDiscriminator sS_ProtocolDiscriminator, // "1011" Protocol discriminator for supplementary services BITSTRING [4] + MessageType msgType, // message type BITSTRING [8], for n->ue "00111010", for ue->n "xx111010" (see 24.007) + FacilityIE facility_Str, // M, BER enconded ASN.1 object + SS_VersionInd sS_VersionInd optional // O @sic R5s140989 sic@ + } with { + variant "FIELDORDER(msb)"; + }; + // ============================================================================= + // Structured Type Definition + // Facility Information Element + // 3GPPP TS 24.080, 3.6 / 24.008, 10.5.4.15 + // ----------------------------------------------------------------------------- + type record FacilityIE { + IEI8_Type iei optional, // Facility IE identifier + Type4Length_Type iel, // length of Facility contents + octetstring components // ASN.1 definitions BER encoded + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (components)"; + variant (iel) "BYTEORDER(last)"; + variant (components) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // Transaction identifier + // 3G TS 24.007 cl. 11.2.3.1.3 + // ----------------------------------------------------------------------------- + type record TI { + B1_Type tiFlag, // Flag + B3_Type tiVal // TIO + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // SS version indicator + // 3G TS 24.008 cl. 10.5.4.24 + // 1. Usually this IE has only one octet of content. + // Exact definition see TS 24.080 + // ----------------------------------------------------------------------------- + type record SS_VersionInd { + IEI8_Type iei, // '01111111'B @sic R5s110420 sic@ + Type4Length_Type iel, // length @sic R5s110420 sic@ + O1_Type sS_VersionInfo // ss version information + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (sS_VersionInfo)"; + variant (iel) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // RESETUEPOSITIONINGSTOREDINFORMATION + // n->ue, 3GPPP TS 34.109, 6.10/36.509 6.9 + // ----------------------------------------------------------------------------- + type record RESETUEPOSITIONINGSTOREDINFORMATION { + SkipIndicator skipIndicator, // "0000" skip indicator BITSTRING [4] + ProtocolDiscriminator protocolDiscriminator, // M, "1111" Protocol discriminator for test procedure messages BITSTRING [4] + MessageType msgType, // M, message type BITSTRING [8] + B8_Type uePositioningTech // M, BITSTRING [8] + } with { + variant "FIELDORDER(msb)"; + }; + + // ============================================================================= + // Structured Type Definition + // WLANOffloadAcceptability + // 3GPPP TS 24.008 10.5.6.20 + // ----------------------------------------------------------------------------- + type record WLANOffloadAcceptability { + IEI4_Type iei, + B2_Type spare, + B1_Type utranOffload, + B1_Type eutranOffload + } with { + variant "FIELDORDER(msb)"; +}; + +// ============================================================================= +// Structured Type Definition +// Extended DRX Parameters +// 3GPP 24.008 / 10.5.5.32 +// ----------------------------------------------------------------------------- +type record ExtdDRXParams { + IEI8_Type iei, + Type4Length_Type iel, // length + B4_Type pagingTimeWindow, + B4_Type eDRXValue, + B8_Type extdPTW optional // @sic R5s221182 Baseline Moving Rel-17 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (pagingTimeWindow, eDRXValue, extdPTW)"; + variant (iel) "BYTEORDER(last)"; +}; + +// ============================================================================= +// Structured Type Definition +// NBIFOM Container +// 3GPP 24.008 / 10.5.6.21 +// ----------------------------------------------------------------------------- +type record NBIFOMContainer { + IEI8_Type iei, + Type4Length_Type iel, // length + octetstring containerContents + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (containerContents)"; + variant (iel) "BYTEORDER(last)"; + variant (containerContents) "BYTEORDER(last)"; +}; + +// ============================================================================= +// Structured Type Definition +// DCN Id +// 3G TS 24.008 cl. 10.5.5.35 +// ----------------------------------------------------------------------------- + type record DCN_ID { + IEI8_Type iei, + Type4Length_Type iel, + O2_Type dcnIdValue + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (dcnIdValue)"; + variant (iel) "BYTEORDER(last)"; + variant (dcnIdValue) "BYTEORDER(last)"; + }; + +// ============================================================================= +// Structured Type Definition +// ePCO +// 3G TS 24.008 cl. 10.5.6.3A +// ----------------------------------------------------------------------------- + type record ExtdProtocolConfigOptions { + IEI8_Type iei, + Type6Length_Type iel, + B1_Type ext, + B4_Type spare, + B3_Type configProtocol, + NAS_ExtdProtocolConfigOptions_Type pco optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (ext, spare, configProtocol, pco)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record of ProtocolContainer NAS_ExtdProtocolConfigOptions_Type; /* @sic R5-2001649 sic@ @status APPROVED (LTE_A_PRO, NBIOT) */ + + //----------------------------------------------------------------------------- + // Defined in 24.301, but also referenced from 24.501 + //----------------------------------------------------------------------------- + + type record AdditionalInformation{ /* 24.301 cl. 9.9.2.0 @sic R5s110176 Baseline Moving sic@ */ + IEI8_Type iei, + Type4Length_Type iel, + octetstring additionalInfo + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (additionalInfo)"; + variant (iel) "BYTEORDER(last)"; + variant (additionalInfo) "BYTEORDER(last)"; + }; + + type record AuthenticationResponseParameter { /* 24.301 cl. 9.9.3.4 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B32_128_Type res /* 4..16 octets */ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (res)"; + variant (iel) "BYTEORDER(last)"; + variant (res) "BYTEORDER(last)"; + } + + type record NAS_KeySetIdentifier { /* 24.301 cl. 9.9.3.21 */ + IEI4_Type iei optional, /* present in case of TV; omit in case of V */ + B1_Type tsc, // Type of security context: 0 = cached, 1 = mapped + NAS_KsiValue nasKeySetId + } with { + variant "FIELDORDER(msb)"; + } + + type record HashMME { /* 24.301 cl. 9.9.3.50 @sic R5s170597 Baseline Moving sic@ */ + IEI8_Type iei optional, + Type4Length_Type iel, + O8_Type hashMME + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (hashMME)"; + variant (iel) "BYTEORDER(last)"; + variant (hashMME) "BYTEORDER(last)"; + } + + type record PDN_Address { /* 24.301 cl. 9.9.4.9 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B5_Type spare, + B3_Type typeValue, + octetstring adressInfo length(4..12) + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare, typeValue, adressInfo)"; + variant (iel) "BYTEORDER(last)"; + variant (adressInfo) "BYTEORDER(last)"; + }; + + type record ReplayedNASMessageContainer { /* 24.301 cl. 9.9.3.51 @sic R5s170597 Baseline Moving sic@ */ + IEI8_Type iei optional, + Type6Length_Type iel, + octetstring replayedNASMsgContainerValue + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (replayedNASMsgContainerValue)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NAS_SecurityAlgorithms { /* 24.301 cl. 9.9.3.23 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B1_Type spare1, + B3_Type cipheringType, /* Type of ciphering algorithm */ + B1_Type spare2, + B3_Type integrityType /* Type of integrity protection algorithm */ + } with { + variant "FIELDORDER(msb)"; + }; + + type record Extd_EPS_QOS { /* 24.301 cl. 9.9.4.30 */ + IEI8_Type iei optional, + Type4Length_Type iel, + B8_Type unitMaxBitRate, + B8_Type maxBitRateUl_1, + B8_Type maxBitRateUl_2, + B8_Type maxBitRateDl_1, + B8_Type maxBitRateDl_2, + B8_Type unitGuaranteedBitRate, + B8_Type guaranteedBitRateUl_1, + B8_Type guaranteedBitRateUl_2, + B8_Type guaranteedBitRateDl_1, + B8_Type guaranteedBitRateDl_2 + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (unitMaxBitRate, maxBitRateUl_1, maxBitRateUl_2, maxBitRateDl_1, maxBitRateDl_2, unitGuaranteedBitRate, guaranteedBitRateUl_1, guaranteedBitRateUl_2, guaranteedBitRateDl_1, guaranteedBitRateDl_2)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record UE_Status { // 24.501 cl. 9.11.3.56 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B6_Type spare, + B1_Type n1ModeRegistered, + B1_Type s1ModeRegistered + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare, n1ModeRegistered, s1ModeRegistered)"; + variant (iel) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // Emergency Number List + // 3G TS 24.301 cl. 9.9.3.37A + // ----------------------------------------------------------------------------- + type record ExtdEmergNumList { + IEI8_Type iei, + Type6Length_Type iel, + B7_Type spareBits, // @sic R5s201386 Baseline Moving sic@ + B1_Type extdEmergNumListValidity, + record of ExtdEmergNum emergNum + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spareBits, extdEmergNumListValidity, emergNum)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record ExtdEmergNum { + Type4Length_Type len, + octetstring digits, // BCD numbers + Type4Length_Type lengthOfSubService, + octetstring subServices + } with { + variant "FIELDORDER(msb)"; + variant (lengthOfSubService) "LENGTHTO (subServices)"; + variant (lengthOfSubService) "BYTEORDER(last)"; + variant (digits) "BYTEORDER(last)"; + variant (subServices) "BYTEORDER(last)"; + }; + + // ============================================================================= + // Structured Type Definition + // Emergency Number List + // 3G TS 24.301 cl. 9.9.3.36 + // ----------------------------------------------------------------------------- + type record UE_SecurityCapability { + Type4Length_Type iel, // @sic R5s10035 iei never used, so removed sic@ + O1_Type eeaCap, // @sic R5s100135 sic@ + O1_Type eiaCap, // @sic R5s100135 sic@ + O1_Type ueaCap optional, // @sic R5s100135 sic@ + O1_Type uiaCap optional, // @sic R5s100135 sic@ + O1_Type geaCap optional // @sic R5s100135 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (eeaCap, eiaCap, ueaCap, uiaCap, geaCap)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record EPS_QualityOfService { /* 24.301 cl. 9.9.4.3 */ + IEI8_Type iei optional, + Type4Length_Type iel, + B8_Type qci, + B8_Type maxBitRateUl optional, + B8_Type maxBitRateDl optional, + B8_Type guaranteedBitRateUl optional, + B8_Type guaranteedBitRateDl optional, + B8_Type maxBitRateUlExt optional, + B8_Type maxBitRateDlExt optional, + B8_Type guaranteedBitRateUlExt optional, + B8_Type guaranteedBitRateDlExt optional, + B8_Type maxBitRateUL_Ext2 optional, // @sic R5s1300195 Baseline Moving, R5s180640 sic@ + B8_Type maxBitRateDL_Ext2 optional, // @sic R5s1300195 Baseline Moving, R5s180640 sic@ + B8_Type guaranteedBitRateUL_Ext2 optional, // @sic R5s1300195 Baseline Moving, R5s180640 sic@ + B8_Type guaranteedBitRateDL_Ext2 optional // @sic R5s1300195 Baseline Moving, R5s180640 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (qci, maxBitRateUl, maxBitRateDl, guaranteedBitRateUl, guaranteedBitRateDl, maxBitRateUlExt, maxBitRateDlExt, guaranteedBitRateUlExt, guaranteedBitRateDlExt, maxBitRateUL_Ext2, maxBitRateDL_Ext2, guaranteedBitRateUL_Ext2, guaranteedBitRateDL_Ext2)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record EPS_BearerContextStatus { /* 24.301 cl. 9.9.2.1 */ + IEI8_Type iei optional, /* present in case of TV or TLV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B3_Type ebi5_7, /* EBI(5)- EBI(7) */ + B4_Type ebi4_1, /* EBI(1)- EBI(4) @sic R5s180552 Baseline Moving 2018 Phase 2 sic@ */ + B1_Type spare, /* EBI(0) is spare and shall be coded as zero @sic R5s180552 Baseline Moving 2018 Phase 2 sic@ */ + B8_Type ebi8_15 /* EBI(8)- EBI(15)*/ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (ebi5_7, ebi4_1, spare, ebi8_15)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record UERadioCapId { /* 24.501 cl. 9.11.3.68 */ + IEI8_Type iei optional, /* present in case of TV or TLV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + octetstring id + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (id)"; + variant (iel) "BYTEORDER(last)"; + variant (id) "BYTEORDER(last)"; + }; + + type record UERadioCapIdDeletion { /* 24.501 cl. 9.11.3.69 */ + IEI4_Type iei optional, + B1_Type spare, + B3_Type deleteReq + } with { + variant "FIELDORDER(msb)"; + }; + + type record DRXParamCommon { /* 24.301 cl. 9.9.3.63 */ + IEI8_Type iei optional, + Type4Length_Type iel, + B4_Type spare, + B4_Type drxValue + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare, drxValue)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record ReleaseAssistanceInd { /* 24.301 cl. 9.9.4.25 */ + IEI4_Type iei optional, + B2_Type spare, + B2_Type dlDataExpected + } with { + variant "FIELDORDER(msb)"; + }; + + type record WUSAssistInfo { /* 24.301 cl. 9.9.3.62 */ + IEI8_Type iei optional, + Type4Length_Type iel, + record of WusInfoType infoType + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (infoType)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record WusInfoType { + B3_Type wusType, + B5_Type pagingProbability, + octetstring wusValue optional + } with { + variant "FIELDORDER(msb)"; + variant (wusValue) "BYTEORDER(last)"; + }; + + type record ServingPLMNRateControl { /* 24.301 cl. 9.9.4.28 */ + IEI8_Type iei optional, + Type4Length_Type iel, + O2_Type servingPLMNRate + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (servingPLMNRate)"; + variant (iel) "BYTEORDER(last)"; + variant (servingPLMNRate) "BYTEORDER(last)"; + }; + + type record ControlPlaneInd { /* 24.301 cl. 9.9.4.23 */ + IEI4_Type iei optional, + B3_Type spare, + B1_Type cpIndValue + } with { + variant "FIELDORDER(msb)"; + }; + + type record QoSParameters { + O1_Type id, + Type4Length_Type lenOfContent, + octetstring qosParam + } with { + variant "FIELDORDER(msb)"; + variant (lenOfContent) "LENGTHTO (qosParam)"; + variant (lenOfContent) "BYTEORDER(last)"; + variant (qosParam) "BYTEORDER(last)"; + }; + + type record of QoSParameters QoSParametersList; + + type record UE_RequestType { /* 24.301 cl. 9.9.3.65 */ + IEI8_Type iei optional, + Type4Length_Type iel, + B4_Type spare, + B4_Type requestType + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare, requestType)"; + variant (iel) "BYTEORDER(last)"; + }; + +//} with { encode "NAS Types" } +} with { encode "RAW" } diff --git a/ttcn/Lib3GPP/NAS/NAS_EncdecDeclarations.ttcn b/ttcn/Lib3GPP/NAS/NAS_EncdecDeclarations.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..615455213c0e9c2845a885db8a61fbcd6cca3eef --- /dev/null +++ b/ttcn/Lib3GPP/NAS/NAS_EncdecDeclarations.ttcn @@ -0,0 +1,44 @@ +module NAS_EncdecDeclarations { + + import from NAS_CommonTypeDefs all; +// import from SMS_TypeDefs all; + + + + external function fx_enc_PacketFilterComponent (PacketFilterComponent p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + //external function enc_PacketFilterComponent (PacketFilterComponent p) return octetstring + // with {extension "prototype(convert) encode(RAW)"} + + external function fx_dec_PacketFilterComponent (inout bitstring pdu, out PacketFilterComponent p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + + + external function fx_enc_QoSParametersList (QoSParametersList p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_QoSParametersList (inout bitstring pdu, out QoSParametersList p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + + + external function fx_enc_EPS_QualityOfService (EPS_QualityOfService p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_EPS_QualityOfService (inout bitstring pdu, out EPS_QualityOfService p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + + + external function fx_enc_TrafficFlowTemplate (TrafficFlowTemplate p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_TrafficFlowTemplate (inout bitstring pdu, out TrafficFlowTemplate p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + + + // external function fx_enc_CP_PDU_Type (CP_PDU_Type p) return bitstring + // with {extension "prototype(convert) encode(SMS Types)"} + + // external function fx_dec_CP_PDU_Type (inout bitstring pdu, out CP_PDU_Type p) return integer + // with {extension "prototype(sliding) decode(SMS Types)"} + +} // End of module module NAS_EncdecDeclarations diff --git a/ttcn/Lib3GPP/NAS/SMS_Templates.ttcn b/ttcn/Lib3GPP/NAS/SMS_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1e55af9ab55cbcb5e4beea2d3817f6a53c793010 --- /dev/null +++ b/ttcn/Lib3GPP/NAS/SMS_Templates.ttcn @@ -0,0 +1,506 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-06-14 15:51:23 +0200 (Tue, 14 Jun 2022) $ +// $Rev: 33641 $ +/******************************************************************************/ + +module SMS_Templates { + + import from CommonDefs all; + import from SMS_TypeDefs all; + + template (value) TransactionIdentifier_Type cs_MT_TI0_FromSS := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + tI_Flag := '0'B, + tI_Value := '000'B + }; + + template (value) TransactionIdentifier_Type cs_MT_TI1_FromSS := + { /* @status APPROVED (NR5GC) */ + tI_Flag := '0'B, + tI_Value := '001'B + }; + + template (present) TransactionIdentifier_Type cr_MT_TI0_FromUE := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + tI_Flag := '1'B, + tI_Value := '000'B + }; + + template (present) TransactionIdentifier_Type cr_MT_TI1_FromUE := + { /* @status APPROVED (NR5GC) */ + tI_Flag := '1'B, + tI_Value := '001'B + }; + + template (present) TransactionIdentifier_Type cr_MO_AnyTI_FromUE := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + tI_Flag := '0'B, + tI_Value := '???'B + }; + + template (present) TypeOfNumberingPlan cr_TypeOfNumberingPlanAny := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + extBit := ?, + typeOfNumber := ?, + numberingPlanId := ? + }; + + template (value) TypeOfNumberingPlan cs_TypeOfNumberingPlan := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + extBit := '1'B, + typeOfNumber := '001'B, // international number + numberingPlanId := '0001'B // ISDN/telephony numbering plan (Rec. E.164/E.163) + }; + + /* End Non-SMS Type Constraints */ + + + template (value) CP_UserData_Type cs_CP_UserData_DELIVER (octetstring p_Digits):= + { /* @status APPROVED (LTE, NR5GC) */ + spare := omit, + iei := omit, + iel := int2oct ((162 + lengthof (p_Digits)), 1), // 162 = 153 + 1 + 5 + 3=size of cs_RP_OriginatorAddress_dl + rP_PDU := {RP_DATA_dl := cs_RP_DATA_dl_DELIVER (p_Digits)} + }; + + template (value) CP_UserData_Type cs_CP_UserData_SUBMIT_REPORT(O1_Type p_MsgRef) := + { + // @sic R5s100604 sic@ + spare := omit, + iei := omit, + iel := '0D'O, // the length of RPDU is 13 + rP_PDU := {RP_ACK := cs_RP_ACK_SUBMIT_REPORT(p_MsgRef)} + }; + + template (value) CP_UserData_Type cs_CP_UserData_RP_ACK_dl (O1_Type p_MsgRef):= + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + // @sic R5s100604 sic@ @sic R5s110206 sic@ + spare := omit, + iei := omit, + iel := '02'O, // the length of RPDU is 2 as RP UserData are omitted now + rP_PDU := { + RP_ACK := cs_RP_ACK_dl(p_MsgRef) + } + }; + + template (present) CP_UserData_Type cr_CP_UserData_SUBMIT(template (present) RP_DATA_ul_Type p_RP_DATA_ul := cr_RP_DATA_ul_SUBMIT) := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + spare := omit, + iei := omit, + iel := ?, + rP_PDU := { + RP_DATA_ul := p_RP_DATA_ul + } + }; + + template (present) CP_UserData_Type cr_CP_UserData_DELIVER_REPORT := + { + spare := omit, + iei := omit, + iel := ?, + rP_PDU := { + RP_ACK := cr_RP_ACK_DELIVER_REPORT + } + }; + + template (present) CP_UserData_Type cr_CP_UserData_RP_ACK_ul := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + spare := omit, + iei := omit, + iel := ?, + rP_PDU := { + RP_ACK := cr_RP_ACK_ul + } + }; + /* End SM-CP Type Constraints */ + + /* SM-CP PDU Constraints */ + + template (value) CP_DATA_Type cs_CP_DATA (template (value) TransactionIdentifier_Type p_TransactionIdentifier, + template (omit) CP_UserData_Type p_CP_UserData) := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + transactionIdentifier := p_TransactionIdentifier, + protocolDiscriminator := tsc_PD_SMS, + messageType := tsc_MT_CP_DATA, + cP_UserData := p_CP_UserData + }; + + template (present) CP_DATA_Type cr_CP_DATA (template TransactionIdentifier_Type p_TransactionIdentifier, + template CP_UserData_Type p_CP_UserData) := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + transactionIdentifier := p_TransactionIdentifier, + protocolDiscriminator := tsc_PD_SMS, + messageType := tsc_MT_CP_DATA, + cP_UserData := p_CP_UserData + }; + + template (value) CP_ACK_Type cs_CP_ACK(template (value) TransactionIdentifier_Type p_TransactionIdentifier) := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + transactionIdentifier := p_TransactionIdentifier, + protocolDiscriminator := tsc_PD_SMS, + messageType := tsc_MT_CP_ACK + }; + + template (present) CP_ACK_Type cr_CP_ACK(template TransactionIdentifier_Type p_TransactionIdentifier) := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + transactionIdentifier := p_TransactionIdentifier, + protocolDiscriminator := tsc_PD_SMS, + messageType := tsc_MT_CP_ACK + }; + + template (value) CP_ERROR_Type cs_CP_ERROR(TransactionIdentifier_Type p_TransactionIdentifier, + CP_Cause_Type p_CP_Cause) := + { + transactionIdentifier := p_TransactionIdentifier, + protocolDiscriminator := tsc_PD_SMS, + messageType := tsc_MT_CP_ERROR, + cP_Cause := p_CP_Cause + }; + + template (present) CP_ERROR_Type cr_CP_ERROR(template (value) TransactionIdentifier_Type p_TransactionIdentifier, + CP_Cause_Type p_CP_Cause) := + { + transactionIdentifier := p_TransactionIdentifier, + protocolDiscriminator := tsc_PD_SMS, + messageType := tsc_MT_CP_ERROR, + cP_Cause := p_CP_Cause + }; + + template (present) CP_PDU_Type cr_CP_DATA_PDU(template TransactionIdentifier_Type p_TransactionIdentifier, + template CP_UserData_Type p_CP_UserData) := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + CP_DATA := cr_CP_DATA (p_TransactionIdentifier, p_CP_UserData) + }; + + template (value) CP_PDU_Type cs_CP_DATA_PDU (template (value) TransactionIdentifier_Type p_TransactionIdentifier, + template (value) CP_UserData_Type p_CP_UserData) := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + CP_DATA := cs_CP_DATA (p_TransactionIdentifier, p_CP_UserData) + }; + + template (present) CP_PDU_Type cr_CP_ACK_PDU(template TransactionIdentifier_Type p_TransactionIdentifier) := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + CP_ACK := cr_CP_ACK (p_TransactionIdentifier) + }; + + template (value) CP_PDU_Type cs_CP_ACK_PDU(template (value) TransactionIdentifier_Type p_TransactionIdentifier) := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + CP_ACK := cs_CP_ACK (p_TransactionIdentifier) + }; + + /* End SM-CP PDU Constraints */ + + /* SM-RP Type Constraints */ + + template (omit) RP_OriginatorAddress_dl cs_RP_OriginatorAddress_dl := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + spare := omit, + iei := omit, + iel := '04'O, // 4 semi-octets @sic R5s100586 sic@ + typeOfNumberingPlan := cs_TypeOfNumberingPlan, + digits := '001122'O + }; + + template (present) RP_OriginatorAddress_ul cr_RP_OriginatorAddress_ul := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + spare := omit, + iei := omit, + iel := '00'O + }; + + template (present) RP_DestinationAddress_ul cr_RP_DestinationAddress_ul(template (present) octetstring p_Digits := ?) := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + spare := omit, + iei := omit, + iel := ?, + typeOfNumberingPlan := cr_TypeOfNumberingPlanAny, + digits := p_Digits + }; + + template (value) RP_DestinationAddress_dl cs_RP_DestinationAddress_dl := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + spare := omit, + iei := omit, + iel := '00'O + }; + + template (value) RP_UserData cs_RP_UserData_DELIVER (octetstring p_Digits) := + { /* @status APPROVED (IMS, LTE, NR5GC) */ + spare := omit, + iei := omit, + iel := int2oct ((153 + lengthof (p_Digits)), 1), + tP_PDU := {SMS_DELIVER := cs_SMS_DELIVER (p_Digits)} + }; + + template (value) RP_UserData cs_RP_UserData_SUBMIT_REPORT := + { /* @status APPROVED (IMS, LTE_A_R12, NR5GC) */ + spare := tsc_Sparebit, + iei := tsc_IEI_RP_UserData, + iel := '09'O, // the TPDU data length is 9 octets @sic R5s201325 sic@ + tP_PDU := {SMS_SUBMIT_REPORT := cs_SMS_SUBMIT_REPORT} + }; + + template (present) RP_UserData cr_RP_UserData_SUBMIT(template (present) SMS_SUBMIT_Type p_SMS_SUBMIT := cr_SMS_SUBMIT_VPF_REF) := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + /* NOTE: cr_SMS_SUBMIT_VPF_REF fits with AT command !! */ + spare := omit, + iei := omit, + iel := ?, + tP_PDU := { + SMS_SUBMIT := p_SMS_SUBMIT + } + }; + + template (present) RP_UserData cr_RP_UserData_DELIVER_REPORT := + { /* @status APPROVED (IMS) */ + spare := tsc_Sparebit, + iei := tsc_IEI_RP_UserData, + iel := ?, + tP_PDU := { + SMS_DELIVER_REPORT := cr_SMS_DELIVER_REPORT + } + }; + + /* End SM-RP Type Constraints */ + + /* SM-RP PDU Constraints */ + + template (value) RP_DATA_dl_Type cs_RP_DATA_dl_DELIVER (octetstring p_Digits) := + { /* @status APPROVED (IMS, LTE, NR5GC) */ + spare5 := '00000'B, + rP_MessageTypeIndicator := tsc_MT_RP_DATA_dl, + rP_MessageReference := int2oct(0, 1), + rP_OriginatorAddress := cs_RP_OriginatorAddress_dl, + rP_DestinationAddress := cs_RP_DestinationAddress_dl, + rP_UserData := cs_RP_UserData_DELIVER(p_Digits) + }; + + template (present) RP_DATA_ul_Type cr_RP_DATA_ul_SUBMIT(template (present) RP_UserData p_RP_UserData := cr_RP_UserData_SUBMIT, + template (present) octetstring p_Digits := ?) := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + spare5 := '00000'B, + rP_MessageTypeIndicator := tsc_MT_RP_DATA_ul, + rP_MessageReference := ?, + rP_OriginatorAddress := cr_RP_OriginatorAddress_ul, + rP_DestinationAddress := cr_RP_DestinationAddress_ul(p_Digits), + rP_UserData := p_RP_UserData + }; + + template (value) RP_ACK_Type cs_RP_ACK_SUBMIT_REPORT(O1_Type p_MsgRef) := + { /* @status APPROVED (IMS, LTE_A_R12, NR5GC) */ + spare5 := '00000'B, + rP_MessageTypeIndicator := tsc_MT_RP_ACK_dl, + rP_MessageReference := p_MsgRef, // @sic R5s100604 sic@ + rP_UserData := cs_RP_UserData_SUBMIT_REPORT + }; + + template (present) RP_ACK_Type cr_RP_ACK_DELIVER_REPORT := + { /* @status APPROVED (IMS) */ + spare5 := '00000'B, + rP_MessageTypeIndicator := tsc_MT_RP_ACK_ul, + rP_MessageReference := ?, + rP_UserData := cr_RP_UserData_DELIVER_REPORT + }; + + template (value) RP_ACK_Type cs_RP_ACK_dl(O1_Type p_MsgRef) := + { /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) */ + spare5 := '00000'B, + rP_MessageTypeIndicator := tsc_MT_RP_ACK_dl, + rP_MessageReference := p_MsgRef, // @sic R5s100604 sic@ + rP_UserData := omit + }; + + template (present) RP_ACK_Type cr_RP_ACK_ul := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + spare5 := '00000'B, + rP_MessageTypeIndicator := tsc_MT_RP_ACK_ul, + rP_MessageReference := ?, + rP_UserData := * + }; + + /* End SM-RP PDU Constraints */ + + /* SM-TP Type Constraints */ + template (present) TP_ProtocolIdentifier_Type cr_TP_ProtocolIdentifier := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + // @sic R5s100586 sic@ + pidType := '00'B, + interworking := '0'B, + pidValue := '00000'B // @sic R5s100773 sic@ + }; + + template (value) TP_ProtocolIdentifier_Type cs_TP_ProtocolIdentifier := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + // @sic R5s100586 sic@ + pidType := '00'B, + interworking := '0'B, + pidValue := '00000'B // @sic R5s100773 sic@ + }; + + template (value) TP_DataCodingScheme_Type cs_TP_DataCodingScheme := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, NBIOT, NR5GC) */ + codingGroup := '0000'B, + codeValue := '0000'B + }; + + template (present) TP_Address_Type cr_TP_AddressAny := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + iel := ?, + typeOfNumberingPlan := cr_TypeOfNumberingPlanAny, + digits := * + }; + + template (value) TP_Address_Type cs_TP_Address (octetstring p_Digits) := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, NBIOT, NR5GC) */ + iel := int2oct(2 * lengthof(p_Digits), 1), + // length is number of useful semi-octets + // as p_digits is declared as octetstring the number must be even + typeOfNumberingPlan := cs_TypeOfNumberingPlan, + digits := p_Digits + }; + + template (present) TP_ParameterIndicator_Type cr_TP_ParameterIndicator := // @sic R5s210112, R5s211245, R5-217832 sic@ + { /* @status APPROVED (IMS) */ + extBit1 := '0'B, + spare4 := '0000'B, + tP_UDL := '?'B, + tP_DCS := '?'B, + tP_PID := '?'B // @sic R5s201325 sic@ + }; + + template (value) TP_ParameterIndicator_Type cs_TP_ParameterIndicator := // @sic R5s210112, R5s211245 sic@ + { /* @status APPROVED (IMS, LTE_A_R12, NR5GC) */ + extBit1 := '0'B, + spare4 := '0000'B, + tP_UDL := '0'B, + tP_DCS := '0'B, + tP_PID := '0'B // @sic R5s201325 sic@ + }; + + /* End SM-TP Type Constraints */ + + /* SM-TP PDU Constraints */ + + template (value) SMS_DELIVER_Type cs_SMS_DELIVER (octetstring p_Digits) := + { /* @status APPROVED (IMS, LTE, NR5GC) */ + tP_ReplyPath := '0'B, + tP_UserDataHeaderIndicator := '0'B, + tP_StatusReportIndication := '0'B, + spare2 := '00'B, + tP_MoreMessagesToSend := '1'B, + tP_MessageTypeIndicator := tsc_MT_SMS_DELIVER, + tP_OriginatingAddress := cs_TP_Address (p_Digits), + tP_ProtocolIdentifier := cs_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := cs_TP_DataCodingScheme, + tP_ServiceCentreTimeStamp := f_BCD_TimestampWithTimezone(), + tP_UserDataLength := int2oct(160,1), + tP_UserData := f_CharPacking_IA5toGsm7Bit(tsc_Fox, SMS_Packing) + }; + + template (present) SMS_DELIVER_REPORT_Type cr_SMS_DELIVER_REPORT := + { /* @status APPROVED (IMS) */ + spare1 := '0'B, + tP_UserDataHeaderIndicator := '0'B, + spare4 := '0000'B, + tP_MessageTypeIndicator := tsc_MT_SMS_DELIVER_REPORT, + tP_FailureCause := omit, + tP_ParameterIndicator := cr_TP_ParameterIndicator, // @sic R5s210112, R5s211245 sic@ + tP_ProtocolIdentifier := *, // @sic R5-205345 sic@ + tP_DataCodingScheme_Type := *, + tP_UserDataLength := *, + tP_UserData := * + }; + + template (present) SMS_SUBMIT_Type cr_SMS_SUBMIT(template (present) B2_Type p_ValidityPeriodFormat := '??'B, + template TP_ValidityPeriod_Type p_ValidityPeriod := *, + template (present) TP_UserDataLength_Type p_UserDataLength := ?) := + { /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + tP_ReplyPath := '?'B, + tP_UserDataHeaderIndicator := '?'B, + tP_StatusReportRequest := '?'B, + tP_ValidityPeriodFormat := p_ValidityPeriodFormat, + tP_RejectDuplicates := '?'B, + tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT, + tP_MessageReference := ?, + tP_DestinationAddress := cr_TP_AddressAny, + tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := ?, + tP_ValidityPeriod := p_ValidityPeriod, + tP_UserDataLength := p_UserDataLength, // @sic R5s120530 sic@ + tP_UserData := ? // any data will do + }; + + template (present) TP_ValidityPeriod_Type cr_TP_ValidityPeriod_Relative(integer p_Value) := { TP_ValidityPeriodRelative := int2oct(p_Value, 1) }; /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + template (present) SMS_SUBMIT_Type cr_SMS_SUBMIT_VPF_REF := cr_SMS_SUBMIT('10'B, cr_TP_ValidityPeriod_Relative(167), int2oct(160, 1)); /* @status APPROVED (IMS, LTE, LTE_A_PRO, LTE_A_R12, NBIOT, NR5GC) */ + template (present) SMS_SUBMIT_Type cr_SMS_SUBMIT_AnyVP := cr_SMS_SUBMIT(-, *); /* @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) + @sic R5s141400 sic@ @sic R5s150777 sic@ */ + + template (value) SMS_SUBMIT_REPORT_Type cs_SMS_SUBMIT_REPORT := + { /* @status APPROVED (IMS, LTE_A_R12, NR5GC) */ + spare1 := '0'B, + tP_UserDataHeaderIndicator := '0'B, + spare4 := '0000'B, + tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT_REPORT, + tP_FailureCause := omit, + tP_ParameterIndicator := cs_TP_ParameterIndicator, // @sic R5s210112, R5s211245 sic@ + tP_ServiceCentreTimeStamp := f_BCD_TimestampWithTimezone(), + tP_ProtocolIdentifier := omit, // @sic R5s201325 sic@ + tP_DataCodingScheme_Type := omit, + tP_UserDataLength := omit, + tP_UserData := omit + }; + + /* End SM-TP PDU Constraints */ + //---------------------------------------------------------------------------- + /* + * @desc wrapper function for encvalue + * @param p_CP_PDU + * @return octetstring + * @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) + */ + function f_SMS_PDU_Encvalue(template (value) CP_PDU_Type p_CP_PDU) return octetstring + { + var bitstring v_Bitstring := encvalue(p_CP_PDU); + var octetstring v_Octetstring := bit2oct(f_OctetAlignedBitString(v_Bitstring)); + return v_Octetstring; + } + + //---------------------------------------------------------------------------- + /* + * @desc Decode given bitstring as CP_PDU and match it against the expected CP_PDU + * if the bitstring cannot be fully decoded or it does not match the expected CP_PDU verdict FAIL is assigned + * as the function is always used in the test body + * @param p_EncodedSMS_Message + * @param p_Expected_CP_PDU + * @param p_Testcase + * @param p_Step + * @return CP_PDU_Type + * @status APPROVED (LTE, LTE_A_PRO, NBIOT, NR5GC) + */ + function f_SMS_CP_PDU_DecodeAndMatch(bitstring p_EncodedSMS_Message, + template CP_PDU_Type p_Expected_CP_PDU, + charstring p_Testcase, + charstring p_Step) return CP_PDU_Type + { + var CP_PDU_Type v_Received_CP_PDU; + var integer v_DecodeResult := decvalue(p_EncodedSMS_Message, v_Received_CP_PDU); + + if (v_DecodeResult != 0) { + f_SetVerdict(fail,__FILE__, __LINE__, p_Testcase & ": SMS_CP_PDU cannot be decoded in " & p_Step); + self.kill; // => test case will be terminated immediately @sic R5s210140 sic@ + } + if (not match(v_Received_CP_PDU, p_Expected_CP_PDU)) { + //* @verdict fail Received decoded template does not match with the expected template + f_SetVerdict(fail,__FILE__, __LINE__, p_Testcase & ": SMS_CP_PDU cannot be matched in " & p_Step); + self.kill; // => test case will be terminated immediately @sic R5s210140 sic@ + } + return v_Received_CP_PDU; + } + +} diff --git a/ttcn/Lib3GPP/NAS/SMS_TypeDefs.ttcn b/ttcn/Lib3GPP/NAS/SMS_TypeDefs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..547b20f2b120e442f6fff746fcccdaa60eb772b5 --- /dev/null +++ b/ttcn/Lib3GPP/NAS/SMS_TypeDefs.ttcn @@ -0,0 +1,424 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2020-05-04 20:04:26 +0200 (Mon, 04 May 2020) $ +// $Rev: 27674 $ +/******************************************************************************/ + +module SMS_TypeDefs { + +import from CommonDefs all; +import from NAS_CommonTypeDefs all; + +group SMS_Declarations { + +/* SMS Constant Declarations */ +const ProtocolDiscriminator tsc_PD_SMS := '1001'B; /* 24.007 cl. 11.2.3.1.1 */ + +const MessageType tsc_MT_CP_DATA := '00000001'B; /* CP_DATA */ +const MessageType tsc_MT_CP_ACK := '00000100'B; /* CP_ACK */ +const MessageType tsc_MT_CP_ERROR := '00010000'B; /* CP_ERROR */ + +const RP_MessageTypeIndicator_Type tsc_MT_RP_DATA_ul := '000'B; /* RP_DATA_ul */ +const RP_MessageTypeIndicator_Type tsc_MT_RP_DATA_dl := '001'B; /* RP_DATA_dl */ +const RP_MessageTypeIndicator_Type tsc_MT_RP_ACK_ul := '010'B; /* RP_ACK_ul */ +const RP_MessageTypeIndicator_Type tsc_MT_RP_ACK_dl := '011'B; /* RP_ACK_dl */ +const RP_MessageTypeIndicator_Type tsc_MT_RP_ERROR_ul := '100'B; /* RP_ERROR_ul */ +const RP_MessageTypeIndicator_Type tsc_MT_RP_ERROR_dl := '101'B; /* RP_ERROR_dl */ +const RP_MessageTypeIndicator_Type tsc_MT_RP_SMMA := '110'B; /* RP_SMMA */ + +const TP_MessageTypeIndicator_Type tsc_MT_SMS_DELIVER := '00'B; /* SMS DELIVER */ +const TP_MessageTypeIndicator_Type tsc_MT_SMS_DELIVER_REPORT := '00'B; /* SMS DELIVER REPORT */ +const TP_MessageTypeIndicator_Type tsc_MT_SMS_STATUS_REPORT := '10'B; /* SMS STATUS REPORT */ +const TP_MessageTypeIndicator_Type tsc_MT_SMS_COMMAND := '10'B; /* SMS COMMAND */ +const TP_MessageTypeIndicator_Type tsc_MT_SMS_SUBMIT := '01'B; /* SMS SUBMIT, SMS SUBMIT REPORT */ +const TP_MessageTypeIndicator_Type tsc_MT_SMS_SUBMIT_REPORT := '01'B; /* SMS SUBMIT, SMS SUBMIT REPORT */ + +const B7_Type tsc_IEI_RP_UserData := '1000001'B; /* 24.011 cl. 8.2.5.3 */ +const B1_Type tsc_Sparebit := '0'B; /* 24.011 cl. 8.2.5.3 */ +const B7_Type tsc_RP_ERROR_Cause_NtwOOO := '0100110'B; /* 24.011 cl. 8.2.5.4 */ + +/* Non-SMS Type Declarations */ + +type record TransactionIdentifier_Type { /* 24.007 cl. 11.2.3.1.3 */ + B1_Type tI_Flag, /* A message has a TI flag set to "0" when it belongs to + transaction initiated by its sender, and to "1" otherwise. */ + B3_Type tI_Value /* Values 0 to 6 allowed, value 7 has a special meaning */ +}; + +type record TypeOfNumberingPlan { /* 24.008 cl. 10.5.4.7, 10.5.4.9, 10.5.4.13 */ + B1_Type extBit, /* Extension Bit */ + B3_Type typeOfNumber, /* Type Of Number */ + B4_Type numberingPlanId /* Numbering Plan Identification */ +}; + +/* End Non-SMS Type Declarations */ + +/* SM-CP Type Declarations */ + +type record CP_UserData_Type { /* 24.011 cl. 8.1.4.1 */ + B1_Type spare optional, /* 0, present in case of TLV; omit in case of LV */ + B7_Type iei optional, /* 0000001, present in case of TLV; omit in case of LV */ + O1_Type iel, /* */ + RP_PDU_Type rP_PDU /* <= 248 octets */ +}; + +type record CP_Cause_Type { /* 24.011 cl. 8.1.4.2 */ + B1_Type spare1 optional, /* 0, present in case of TV; omit in case of V */ + B7_Type iei optional, /* 0000001, present in case of TV; omit in case of V */ + B1_Type spare2, /* 0 */ + B7_Type causeValue /* Table 8.2/3GPP TS 24.011 */ +}; + +/* End SM-CP Type Declarations */ + +/* SM-CP PDU Declarations */ + +type record CP_DATA_Type { /* 24.011 cl. 7.2.1 + Direction: both */ + TransactionIdentifier_Type transactionIdentifier, /* 24.007 cl. 11.2.3.1.3 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* 24.007 cl. 11.2.3.1.1 M V 1/2 */ + MessageType messageType, /* cl. 8.1.3 M V 1 */ + CP_UserData_Type cP_UserData /* cl. 8.1.4.1 M LV <= 249 octets */ +}; + +type record CP_ACK_Type { /* 24.011 cl. 7.2.2 + Direction: both */ + TransactionIdentifier_Type transactionIdentifier, /* 24.007 cl. 11.2.3.1.3 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* 24.007 cl. 11.2.3.1.1 M V 1/2 */ + MessageType messageType /* cl. 8.1.3 M V 1 */ +}; + +type record CP_ERROR_Type { /* 24.011 cl. 7.2.3 + Direction: both */ + TransactionIdentifier_Type transactionIdentifier, /* 24.007 cl. 11.2.3.1.3 M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* 24.007 cl. 11.2.3.1.1 M V 1/2 */ + MessageType messageType, /* cl. 8.1.3 M V 1 */ + CP_Cause_Type cP_Cause /* cl. 8.1.4.2 O LV <= 249 octets */ +}; + +type union CP_PDU_Type { + CP_DATA_Type CP_DATA, + CP_ACK_Type CP_ACK, + CP_ERROR_Type CP_ERROR +}; +/* SM-CP PDU Declarations */ + +/* SM-RP Type Declarations */ + +type B3_Type RP_MessageTypeIndicator_Type; /* 24.011 cl. 8.2.2 */ +type O1_Type RP_MessageReference_Type; /* 24.011 cl. 8.2.3 */ + +type record RP_OriginatorAddress_dl { /* 24.011 cl. 8.2.5.1 */ + B1_Type spare optional, /* 0 */ + B7_Type iei optional, /* 0101 1110 */ + O1_Type iel, /* min value 2 and max value is 11 */ + TypeOfNumberingPlan typeOfNumberingPlan, /* */ + octetstring digits length(1..10) +}; + +type record RP_OriginatorAddress_ul { /* 24.011 cl. 8.2.5.1 */ + B1_Type spare optional, /* 0 */ + B7_Type iei optional, /* 0101 1110 */ + O1_Type iel /* 0 */ +}; + +type record RP_DestinationAddress_ul { /* 24.011 cl. 8.2.5.2 */ + B1_Type spare optional, /* 0 */ + B7_Type iei optional, /* 0101 1110 */ + O1_Type iel, /* min value 2 and max value is 11 */ + TypeOfNumberingPlan typeOfNumberingPlan, /* */ + octetstring digits length(1..10) +}; +type record RP_DestinationAddress_dl { /* 24.011 cl. 8.2.5.2 */ + B1_Type spare optional, /* 0 */ + B7_Type iei optional, /* 0101 1110 */ + O1_Type iel /* 0 */ +}; + +type record RP_UserData { /* 24.011 cl. 8.2.5.3 */ + B1_Type spare optional, /* 0, present in case of TLV; omit in case of LV */ + B7_Type iei optional, /* 1000001, present in case of TLV; omit in case of LV */ + O1_Type iel, /* */ + TP_PDU_Type tP_PDU /* <= 232 octets */ +}; + +type record RP_Cause { /* 24.011 cl. 8.2.5.4 */ + B1_Type spare optional, /* present in case of TLV; omit in case of LV */ + B7_Type iei optional, /* present in case of TLV; omit in case of LV */ + O1_Type iel, /* 1 or 2 */ + B1_Type extBit, /* 0 */ + B7_Type causeValue, /* Table 8.4/3GPP TS 24.011 */ + O1_Type diagnostic optional /* Parameters included in the return error from MAP */ +}; + +/* End SM-RP Type Declarations */ + +/* SM-RP PDU Declarations */ + +type record RP_DATA_dl_Type { /* 24.011 cl. 7.3.1.1 + Direction: n -> ue */ + B5_Type spare5, /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ + RP_OriginatorAddress_dl rP_OriginatorAddress, /* cl. 8.2.5.1 M LV 1-12 octets */ + RP_DestinationAddress_dl rP_DestinationAddress, /* cl. 8.2.5.2 M LV 1 */ + RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ +}; + +type record RP_DATA_ul_Type { /* 24.011 cl. 7.3.1.2 + Direction: ue -> n */ + B5_Type spare5, /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ + RP_OriginatorAddress_ul rP_OriginatorAddress, /* cl. 8.2.5.1 M LV 1 */ + RP_DestinationAddress_ul rP_DestinationAddress, /* cl. 8.2.5.2 M LV 1 */ + RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ +}; + +type record RP_SMMA_Type { /* 24.011 cl. 7.3.2 + Direction: ue -> n */ + B5_Type spare5, /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference /* cl. 8.2.3 M LV 1 */ +}; + +type record RP_ACK_Type { /* 24.011 cl. 7.3.3 + Direction: ue <-> n */ + B5_Type spare5, /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ + RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ +}; + +type record RP_ERROR_Type { /* 24.011 cl. 7.3.4 + Direction: ue <-> n */ + B5_Type spare5, /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ + RP_Cause rP_Cause, /* cl. 8.2.5.4 M LV 2-3 */ + RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ +}; + +type union RP_PDU_Type { + RP_DATA_dl_Type RP_DATA_dl, + RP_DATA_ul_Type RP_DATA_ul, + RP_SMMA_Type RP_SMMA, + RP_ACK_Type RP_ACK, + RP_ERROR_Type RP_ERROR +}; + +/* End SM-RP PDU Declarations */ + +/* SM-TP Type Declarations */ + +type record TP_Address_Type { /* 23.040 cl. 9.1.2.5 */ + O1_Type iel, /* min value 2 and max value is 11 */ + TypeOfNumberingPlan typeOfNumberingPlan, + octetstring digits length(0..10) optional +}; + +type B2_Type TP_MessageTypeIndicator_Type; /* 23.040 cl. 9.2.3.1 */ +type O1_Type TP_MessageReference_Type; /* 23.040 cl. 9.2.3.6 */ +type O1_Type TP_UserDataLength_Type; /* 23.040 cl. 9.2.3.16 */ + +type record TP_ProtocolIdentifier_Type { /* 23.040 cl. 9.2.3.9 */ + B2_Type pidType, /* */ + B1_Type interworking, /* */ + B5_Type pidValue /* */ +}; + +type record TP_DataCodingScheme_Type { /* 23.040 cl. 9.2.3.10 + 23.040 cl. 4 */ + B4_Type codingGroup, /* */ + B4_Type codeValue /* */ +}; + +type hexstring TP_ServiceCentreTimeStamp_Type length (14); /* 23.040 cl. 9.2.3.11 */ + +type O1_Type TP_ValidityPeriodRelative_Type; /* 23.040 cl. 9.2.3.12.1 */ + +type hexstring TP_ValidityPeriodAbsolute_Type length (14); /* 23.040 cl. 9.2.3.12.2 */ + +type record TP_ValidityPeriodEnhanced_Type { /* 23.040 cl. 9.2.3.12.3 */ + B1_Type extBit, /* */ + B1_Type singleShot, /* */ + B3_Type spare3, /* */ + B3_Type validityPeriodFormat, /* */ + O6_Type validityPeriod /* */ +}; + +type union TP_ValidityPeriod_Type { /* 23.040 cl. 9.2.3.3 */ + TP_ValidityPeriodRelative_Type TP_ValidityPeriodRelative, /* Relative format */ + TP_ValidityPeriodAbsolute_Type TP_ValidityPeriodAbsolute, /* Absolute format */ + TP_ValidityPeriodEnhanced_Type TP_ValidityPeriodEnhanced /* Enhanced format */ +}; + +type record TP_Status_Type { /* 23.040 cl. 9.2.3.15 */ + B1_Type reserved, /* */ + B7_Type status /* */ +}; + +type B8_Type TP_Command_Type; /* 23.040 cl. 9.2.3.19 */ + +type record TP_ParameterIndicator_Type { /* 23.040 cl. 9.2.3.27 */ + B1_Type extBit1, /* */ + B4_Type spare4, /* */ + B1_Type tP_UDL, /* */ + B1_Type tP_DCS, /* */ + B1_Type tP_PID /* */ +}; + +/* End SM-TP Type Declarations */ + +/* SM-TP PDU Declarations */ + +type record SMS_DELIVER_Type { /* 23.040 cl. 9.2.2.1 + Direction: n -> ue */ + B1_Type tP_ReplyPath, /* 23.040 cl. 9.2.3.17 */ + B1_Type tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ + B1_Type tP_StatusReportIndication, /* 23.040 cl. 9.2.3.4 */ + B2_Type spare2, /* */ + B1_Type tP_MoreMessagesToSend, /* 23.040 cl. 9.2.3.2 */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ + TP_Address_Type tP_OriginatingAddress, /* 23.040 cl. 9.1.2.5 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type, /* 23.040 cl. 9.2.3.10 */ + TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, /* 23.040 cl. 9.2.3.11 */ + TP_UserDataLength_Type tP_UserDataLength, /* 23.040 cl. 9.2.3.16, derived from SUBMIT */ + octetstring tP_UserData length (0..140) optional /* 23.040 cl. 9.2.3.24, derived from SUBMIT */ +}; + +type record SMS_DELIVER_REPORT_Type { /* 23.040 cl. 9.2.2.1a + Direction: ue -> n */ + B1_Type spare1, /* */ + B1_Type tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ + B4_Type spare4, /* */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ + O1_Type tP_FailureCause optional, /* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ + TP_ParameterIndicator_Type tP_ParameterIndicator, /* 23.040 cl. 9.2.3.27 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, /* 23.040 cl. 9.2.3.10 */ + TP_UserDataLength_Type tP_UserDataLength optional, /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length (0..159) optional /* 23.040 cl. 9.2.3.24 */ +}; + +type record SMS_SUBMIT_Type { /* 23.040 cl. 9.2.2.2 + Direction: ue -> n */ + B1_Type tP_ReplyPath, /* 23.040 cl. 9.2.3.17 */ + B1_Type tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ + B1_Type tP_StatusReportRequest, /* 23.040 cl. 9.2.3.5 */ + B2_Type tP_ValidityPeriodFormat, /* 23.040 cl. 9.2.3.3 */ + B1_Type tP_RejectDuplicates, /* 23.040 cl. 9.2.3.25 */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ + TP_MessageReference_Type tP_MessageReference, /* 23.040 cl. 9.2.3.6 */ + TP_Address_Type tP_DestinationAddress, /* 23.040 cl. 9.1.2.5 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type, /* 23.040 cl. 9.2.3.10 */ +// one of the subsequent ValidityPeriod solutions has be removed + TP_ValidityPeriod_Type tP_ValidityPeriod optional, /* 23.040 cl. 9.2.3.12 */ +// TP_ValidityPeriodRelative_Type tP_ValidityPeriodRelative optional, /* 23.040 cl. 9.2.3.12.1 */ +// TP_ValidityPeriodAbsolute_Type tP_ValidityPeriodAbsolute optional, /* 23.040 cl. 9.2.3.12.2 */ +// TP_ValidityPeriodEnhanced_Type tP_ValidityPeriodEnhanced optional, /* 23.040 cl. 9.2.3.12.3 */ + TP_UserDataLength_Type tP_UserDataLength, /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length (0..140) optional /* 23.040 cl. 9.2.3.24 */ +}; +type record SMS_SUBMIT_REPORT_Type { /* 23.040 cl. 9.2.2.2a + Direction: n -> ue */ + B1_Type spare1, /* */ + B1_Type tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ + B4_Type spare4, /* */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ + O1_Type tP_FailureCause optional, /* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ + TP_ParameterIndicator_Type tP_ParameterIndicator, /* 23.040 cl. 9.2.3.27 */ + TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, /* 23.040 cl. 9.2.3.11 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, /* 23.040 cl. 9.2.3.10 */ + TP_UserDataLength_Type tP_UserDataLength optional, /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length (0..152) optional /* 23.040 cl. 9.2.3.24 */ +}; + +type record SMS_STATUS_REPORT_Type { /* 23.040 cl. 9.2.2.3 + Direction: n -> ue */ + B1_Type spare1, /* */ + B1_Type tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ + B1_Type tP_StatusReportQualifier, /* 23.040 cl. 9.2.3.26 */ + B2_Type spare2, /* */ + B1_Type tP_MoreMessagesToSend, /* 23.040 cl. 9.2.3.2 */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ + TP_MessageReference_Type tP_MessageReference, /* 23.040 cl. 9.2.3.6 */ + TP_Address_Type tP_RecipientAddress, /* 23.040 cl. 9.1.2.5 */ + TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, /* 23.040 cl. 9.2.3.11 */ + TP_ServiceCentreTimeStamp_Type tP_DischargeTime, /* 23.040 cl. 9.2.3.12 */ + TP_Status_Type tP_Status, /* 23.040 cl. 9.2.3.15 */ + TP_ParameterIndicator_Type tP_ParameterIndicator optional, /* 23.040 cl. 9.2.3.27 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, /* 23.040 cl. 9.2.3.10 */ + TP_UserDataLength_Type tP_UserDataLength optional, /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length (0..143) optional /* 23.040 cl. 9.2.3.24 */ +}; + +type record SMS_COMMAND_Type { /* 23.040 cl. 9.2.2.4 + Direction: ue -> n */ + B1_Type spare1, /* */ + B1_Type tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ + B1_Type tP_StatRptReq, /* Table 8.4/3GPP TS 24.011 */ + B3_Type spare3, /* */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ + TP_MessageReference_Type tP_MessageReference, /* 23.040 cl. 9.2.3.6 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, /* 23.040 cl. 9.2.3.9 */ + TP_Command_Type tP_CommandType, /* 23.040 cl. 9.2.3.19 */ + TP_MessageReference_Type tP_MessageNumber, /* 23.040 cl. 9.2.3.18 */ + TP_Address_Type tP_DestinationAddress, /* 23.040 cl. 9.1.2.5 */ + TP_UserDataLength_Type tP_CommandDataLength, /* 23.040 cl. 9.2.3.20 (number of octets) */ + octetstring tP_CommandData length (0..156) optional /* 23.040 cl. 9.2.3.21 */ +}; + +type union TP_PDU_Type { + SMS_DELIVER_Type SMS_DELIVER, + SMS_DELIVER_REPORT_Type SMS_DELIVER_REPORT, + SMS_SUBMIT_Type SMS_SUBMIT, + SMS_SUBMIT_REPORT_Type SMS_SUBMIT_REPORT, + SMS_STATUS_REPORT_Type SMS_STATUS_REPORT, + SMS_COMMAND_Type SMS_COMMAND +}; + +/* End SM-TP PDU Declarations */ + +} with { encode "SMS Types"} // group SMS_Declarations + +group SMS_UDH_Declarations { + +type record TP_UDH_ConcSMS_Type { /* 23.040 cl. 9.2.3.24 */ + O1_Type tP_UserDataHeaderMsgRef, /* 23.040 cl. 9.2.3.24.1 */ + O1_Type tP_UserDataHeaderNumSMS, /* 23.040 cl. 9.2.3.24.1 */ + O1_Type tP_UserDataHeaderSN_SMS /* 23.040 cl. 9.2.3.24.1 */ +}; + +type union TP_UDH_Type { + TP_UDH_ConcSMS_Type tP_UDH_ConcSMS +}; + +type record of TP_UDH_IE_Type TP_UDH_IE_Record_Type; + +type record TP_UDH_IE_Type { /* 23.040 cl. 9.2.3.24 */ + // User Data Header IE Type + O1_Type tP_UDH_IEI, /* 23.040 cl. 9.2.3.24.1 */ + O1_Type tP_UDH_IEL, /* 23.040 cl. 9.2.3.24.1 */ + TP_UDH_Type tP_UDH +}; + +type record TP_UserDataHeader_Type { /* 23.040 cl. 9.2.3.24.1 */ + // User Data Header Type + O1_Type tP_UserDataHeaderLength, /* 23.040 cl. 9.2.3.24.1 */ + TP_UDH_IE_Record_Type tP_UDH_IE_Record, + octetstring tP_UserData /* 23.040 cl. 9.2.3.24, derived from SUBMIT */ +}; + + +} with { encode "SMS_UDH Types"} // group UDH_Declarations + +} // module diff --git a/ttcn/Lib3GPP/NAS/module.mk b/ttcn/Lib3GPP/NAS/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..0a03e6179b963edb01d71f68aa4e0ba4037dd0ff --- /dev/null +++ b/ttcn/Lib3GPP/NAS/module.mk @@ -0,0 +1,10 @@ +sources := \ + NAS_AuthenticationCommon.ttcn \ + NAS_CommonTemplates.ttcn \ + NAS_EncdecDeclarations.ttcn \ + NAS_AuxiliaryDefsAndFunctions.ttcn \ + NAS_CommonTypeDefs.ttcn + ##SMS_Templates.ttcn + ##SMS_TypeDefs.ttcn \ + +#modules :=\ diff --git a/ttcn/Lib3GPP/NG_NAS/EAP_TypeDefs.ttcn b/ttcn/Lib3GPP/NG_NAS/EAP_TypeDefs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..9db4601aec73697691f972d496f618bac39fd309 --- /dev/null +++ b/ttcn/Lib3GPP/NG_NAS/EAP_TypeDefs.ttcn @@ -0,0 +1,287 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2020-08-03 13:31:16 +0200 (Mon, 03 Aug 2020) $ +// $Rev: 28340 $ +/******************************************************************************/ + +module EAP_TypeDefs { + + import from CommonDefs all; + +function f_HMAC_SHA_256(bitstring p_Key, + octetstring p_String) return B256_Type + { + return fx_KeyDerivationFunction(tsc_KDF_HMAC_SHA_256, p_Key, p_String); + } + +function f_ExtendedEAPAKA_PRF(bitstring p_Key, + octetstring p_String, + integer p_NumberOfOutputBits := 1664) return bitstring // @sic R5s201020 sic@ + { /* PRF' defined for extended EAP-AKA (EAP-AKA') as according to RFC 5448 clause 3.4.1 */ + var integer v_BlockSize := 256; // HMAC-SHA-256 returns 256 bits + var integer N := (p_NumberOfOutputBits + v_BlockSize - 1) / v_BlockSize; + var octetstring v_String; + var bitstring v_T_i := ''B; + var bitstring v_MK := ''B; + var integer i; + + for (i := 0; i < N; i := i + 1) { + v_String := bit2oct(v_T_i) & p_String & int2oct(i+1, 1); + v_T_i := f_HMAC_SHA_256(p_Key, v_String); + v_MK := v_MK & v_T_i; + } + return substr(v_MK, 0, p_NumberOfOutputBits); + } + + /* Extensible Authentication Protocol (EAP) messages + * according to RFC 5448 which refers in turn to RFC 4187 and RFC 3748 + */ + type union EAP_Message_Type { + EAP_Request_Type akaId_Req, // RFC 4187 cl. 9.1 + EAP_Response_Type akaId_Rsp, // RFC 4187 cl. 9.2 + EAP_Request_Type akaChallenge_Req, // RFC 4187 cl. 9.3 + EAP_Response_Type akaChallenge_Rsp, // RFC 4187 cl. 9.4 + EAP_Response_Type akaAuthReject, // RFC 4187 cl. 9.5 + EAP_Response_Type akaSynchronizationFailure, // RFC 4187 cl. 9.6 + EAP_Request_Type akaReauthentication_Req, // RFC 4187 cl. 9.7 + EAP_Response_Type akaReauthentication_Rsp, // RFC 4187 cl. 9.8 + EAP_Response_Type akaClientError, // RFC 4187 cl. 9.9 + EAP_Request_Type akaNotification_Req, // RFC 4187 cl. 9.10 + EAP_Response_Type akaNotification_Rsp, // RFC 4187 cl. 9.11 + EAP_Success_Type success, // RFC 3748 cl. 4.2 + EAP_Failure_Type failure // RFC 3748 cl. 4.2 + }; + + type record EAP_Request_Type{ + O1_Type code ('01'O), // RFC 4187 cl. 8.1 + O1_Type id, // RFC 3748 cl. 4 + O2_Type len, // RFC 3748 cl. 4 - To be computed by the encoder + O1_Type type_ ('32'O), // RFC 5448 cl. 6.1 + O1_Type subtype, // To be set as in RFC 4187 cl. 11 + O2_Type reserved, // Set to 0 when sending, ignored by the receiver + EAP_Attributes attributes + }; + + type record EAP_Response_Type { + O1_Type code ('02'O), // RFC 4187 cl. 8.1 + O1_Type id, // RFC 3748 cl. 4 + O2_Type len, // RFC 3748 cl. 4 - To be computed by the encoder + O1_Type type_ ('32'O), // RFC 5448 cl. 6.1 + O1_Type subtype, // To be set as in RFC 4187 cl. 11 + O2_Type reserved, // Set to 0 when sending, ignored by the receiver + EAP_Attributes attributes optional // @sic R5-201116 sic@ + }; + + type record EAP_Success_Type { + O1_Type code ('03'O), // RFC 3748 cl. 4.2 + O1_Type id, + O2_Type len ('0004'O) // RFC 3748 cl. 4.1 + }; + + type record EAP_Failure_Type { + O1_Type code ('04'O), // RFC 3748 cl. 4.2 + O1_Type id, + O2_Type len ('0004'O) // RFC 3748 cl. 4.1 + }; + + + type set EAP_Attributes { + EAP_AT_RAND rand optional, + EAP_AT_AUTN autn optional, + EAP_AT_RES res optional, + EAP_AT_AUTS auts optional, + EAP_AT_PADDING padd optional, + EAP_AT_PERMANENT_ID_REQ permIdReq optional, + EAP_AT_MAC mac optional, + EAP_AT_NOTIFICATION notification optional, + EAP_AT_ANY_ID_REQ anyIdReq optional, + EAP_AT_IDENTITY id optional, + EAP_AT_VERSION_LIST versionList optional, + EAP_AT_SELECTED_VERSION selectedVersion optional, + EAP_AT_FULLAUTH_ID_REQ fullauthIdReq optional, + EAP_AT_COUNTER counter optional, + EAP_AT_COUNTER_TOO_SMALL counterTooSmall optional, + EAP_AT_NONCE_S nonceS optional, + EAP_AT_CLIENT_ERROR_CODE clientErrorCode optional, + EAP_AT_IV iv optional, + EAP_AT_NEXT_PSEUDONYM nextPseudonym optional, + EAP_AT_NEXT_REAUTH_ID nextReauthId optional, + EAP_AT_CHECKCODE checkCode optional, + EAP_AT_RESULT_IND resultInd optional, + EAP_AT_KDF_INPUT kdfInput optional, + EAP_AT_KDF kdf optional + }; + + type record EAP_AT_PERMANENT_ID_REQ { + // RFC 4187 cl. 10.2 + O1_Type attributeType ('0A'O), + O1_Type len ('01'O), + O2_Type reserved + }; + type record EAP_AT_ANY_ID_REQ { + // RFC 4187 cl. 10.3 + O1_Type attributeType ('0D'O), + O1_Type len ('01'O), + O2_Type reserved + }; + type record EAP_AT_FULLAUTH_ID_REQ { + // RFC 4187 cl. 10.4 + O1_Type attributeType ('11'O), + O1_Type len ('01'O), + O2_Type reserved + }; + type record EAP_AT_IDENTITY { + // RFC 4187 cl. 10.5 + O1_Type attributeType ('0E'O), + O1_Type len, + O2_Type actualIdlen, + octetstring id + }; + type record EAP_AT_RAND { + // RFC 4187 cl. 10.6 + O1_Type attributeType ('01'O), + O1_Type len ('05'O), + O2_Type reserved, + O16_Type rand + }; + type record EAP_AT_AUTN { + // RFC 4187 cl. 10.7 + O1_Type attributeType ('02'O), + O1_Type len ('05'O), + O2_Type reserved, + O16_Type autn + }; + type record EAP_AT_RES { + // RFC 4187 cl. 10.8 + O1_Type attributeType ('03'O), + O1_Type len, + O2_Type reslen, + octetstring res + }; + type record EAP_AT_AUTS { + // RFC 4187 cl. 10.9 + O1_Type attributeType ('04'O), + O1_Type len ('04'O), + O14_Type auts + }; + type record EAP_AT_NEXT_PSEUDONYM { + // RFC 4187 cl. 10.10 + O1_Type attributeType ('84'O), + O1_Type len, + O2_Type actualPseudonymlen, + octetstring nextPseudonym + }; + type record EAP_AT_NEXT_REAUTH_ID { + // RFC 4187 cl. 10.11 + O1_Type attributeType ('85'O), + O1_Type len, + O2_Type actualReAuthIdlen, + octetstring actualReAuthId + }; + type record EAP_AT_IV { + // RFC 4187 cl. 10.12 + O1_Type attributeType ('81'O), + O1_Type len ('05'O), + O2_Type reserved, + O16_Type autn + }; + type record EAP_AT_ENCR_DATA { + // RFC 4187 cl. 10.12 + O1_Type attributeType ('82'O), + O1_Type len, + O2_Type reserved, + octetstring encrData + }; + type record EAP_AT_PADDING { + // RFC 4187 cl. 10.12 + O1_Type attributeType ('06'O), + O1_Type len, + octetstring padding + }; + type record EAP_AT_CHECKCODE { + // RFC 4187 cl. 10.13 + O1_Type attributeType ('86'O), + O1_Type len, + O2_Type reserved, + octetstring checkCode optional + }; + type record EAP_AT_RESULT_IND { + // RFC 4187 cl. 10.14 + O1_Type attributeType ('87'O), + O1_Type len ('01'O), + O2_Type reserved + }; + type record EAP_AT_MAC { + // RFC 4187 cl. 10.15 + O1_Type attributeType ('0B'O), + O1_Type len ('05'O), + O2_Type reserved, + O16_Type mac + }; + type record EAP_AT_COUNTER { + // RFC 4187 cl. 10.16 + O1_Type attributeType ('13'O), + O1_Type len ('01'O), + O2_Type counter + }; + type record EAP_AT_COUNTER_TOO_SMALL { + // RFC 4187 cl. 10.17 + O1_Type attributeType ('14'O), + O1_Type len ('01'O), + O2_Type reserved + }; + type record EAP_AT_NONCE_S { + // RFC 4187 cl. 10.18 + O1_Type attributeType ('15'O), + O1_Type len ('05'O), + O2_Type reserved, + O16_Type nonceS + }; + type record EAP_AT_NOTIFICATION { + // RFC 4187 cl. 10.19 + O1_Type attributeType ('0C'O), + O1_Type len ('01'O), + B1_Type s, + B1_Type p, + B14_Type notificationCode + }; + type record EAP_AT_CLIENT_ERROR_CODE { + // RFC 4187 cl. 10.20 + O1_Type attributeType ('16'O), + O1_Type len ('01'O), + O2_Type clientErrorCode + }; + type record EAP_AT_VERSION_LIST { + // RFC 4187 cl. 11 + O1_Type attributeType ('0F'O), + O1_Type len, + octetstring versionList + }; + type record EAP_AT_SELECTED_VERSION { + // RFC 4187 cl. 11 + O1_Type attributeType ('10'O), + O1_Type len, + octetstring selectedVersion + }; + + type record EAP_AT_KDF_INPUT { + // RFC 5448 cl. 3.1 + O1_Type attributeType ('17'O), + O1_Type len, + O2_Type actualNetworkNamelen, + octetstring networkName + }; + + type record EAP_AT_KDF { + // RFC 5448 cl. 3.2 + O1_Type attributeType ('18'O), + O1_Type len ('01'O), + O2_Type keyDerivationFunction // Should be '01'O for EAP-AKA' which is the one used in this protocol + }; + +} with { encode "EAP Types"} diff --git a/ttcn/Lib3GPP/NG_NAS/NG_NASTemplateFunctions.ttcn b/ttcn/Lib3GPP/NG_NAS/NG_NASTemplateFunctions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..de2c4eee8dd0ca90f2f52dbfefeecd543ee6309e --- /dev/null +++ b/ttcn/Lib3GPP/NG_NAS/NG_NASTemplateFunctions.ttcn @@ -0,0 +1,2697 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-09-14 09:54:06 +0200 (Thu, 14 Sep 2023) $ +// $Rev: 37128 $ +/******************************************************************************/ + +module NG_NASTemplateFunctions { + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + import from NG_NAS_MsgContainers all; + import from NG_NAS_TypeDefs all; + import from NG_NAS_Templates all; + import from NG_NAS_Common all; + import from NAS_CommonTemplates all; + import from NG_NAS_SecurityFunctions all; + import from NAS_AuthenticationCommon all; + import from NAS_AuxiliaryDefsAndFunctions all; + import from CommonIP all; + import from NAS_5GC_Parameters all; + import from Parameters all; + import from NR_Parameters all; + import from EAP_TypeDefs all; + import from TestcaseProperties all; + + //---------------------------------------------------------------------------- + /* + * @desc check the REGISTRATION REQUEST + * @param p_GMM_MobilityInfo (by reference) + * @param p_ReceivedMsgs + * @param p_RegType + * @param p_GUTI (default value: ?) + * @param p_KeySetId (default value: ?) + * @param p_Tsc (default value: ?) + * @param p_NonCurrentKSI (default value: *) + * @param p_GMM_Cap (default value: *) + * @param p_UESecurityCap (default value: *) + * @param p_ReqNSSAI (default value: *) + * @param p_TAI (default value: *) + * @param p_UE_NetworkCap (default value: *) + * @param p_ULDataStatus (default value: *) + * @param p_PDU_SessionStatus (default value: *) + * @param p_MICO_Ind (default value: *) + * @param p_UE_Status (default value: *) + * @param p_AddGUTI (default value: *) + * @param p_AllowedPDU_SessionStatus (default value: *) + * @param p_UE_UsageSetting (default value: *) + * @param p_DRXparam (default value: *) + * @param p_EPSMsg (default value: *) + * @param p_LADN_Ind (default value: *) + * @param p_Payload (default value: *) + * @param p_ContainerType (default value: cr_PayloadContainerType ('0101'B) ifpresent + * @param + * @param p_NetworkSlicingInd (default value: *) + * @param p_NG_UpdateType (default value: *) + * @param p_MS_Clsmk2 (default value: *) + * @param p_SupportedCodecs (default value: *) + * @param p_EPS_BearerContextStatus (default value: *) + * @param p_ExtdDRXParams (default value: *) + * @param p_T3324 (default value: *) + * @param p_UERadioCapId (default value: *) + * @param p_MappedNSSAI (default value: *) + * @param p_AddInfoRequest (default value: *) + * @param p_WUSAssistInfo (default value: *) + * @param p_N5GCInd (default value: *) + * @param p_NB_N1ModeDRXParams (default value: *) + * @param p_UeRequestType (default value: *) + * @param p_PagingRestrict (default value: *) + * @param p_ServiceLvlAA (default value: *) + * @param p_NId (default value: *) + * @param p_MSPLMNwDisasterCondition (default value: *) + * @param p_RequestedPEIPS_AssistInfo (default value: *) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Check_NG_RegistrationReqMsg(out GMM_MobilityInfo_Type p_GMM_MobilityInfo, + NG_NAS_UL_Pdu_Type p_ReceivedMsgs, + template (present) TypeOfRegistration_Type p_RegType, + template (present) NG_MobileIdentity p_GUTI := ?, + template (present) NAS_KsiValue p_KeySetId := ?, + template (present) B1_Type p_Tsc := ?, + template NAS_KeySetIdentifier p_NonCurrentKSI := *, + template NG_GMM_Cap p_GMM_Cap := *, + template NG_UE_SecurityCapability p_UESecurityCap := *, + template NSSAI p_ReqNSSAI := *, + template NG_TrackingAreaId p_TAI := *, + template UE_NetworkCap p_UE_NetworkCap := *, + template ULDataStatus p_ULDataStatus := *, + template PDU_SessionStatus p_PDU_SessionStatus := *, + template MICO_Ind p_MICO_Ind := *, + template UE_Status p_UE_Status := *, + template NG_MobileIdentity p_AddGUTI := *, + template AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus := *, + template UE_UsageSetting p_UE_UsageSetting := *, + template NG_DRXparameter p_DRXparam := *, + template EPS_MessageContainer p_EPSMsg := *, + template LADN_Ind p_LADN_Ind := *, + template PayloadContainer p_Payload := *, + template PayloadContainerType p_ContainerType := cr_PayloadContainerType ('0101'B, '8'H) ifpresent, // @sic R5w190113, R5-216156 sic@ + template NetworkSlicingInd p_NetworkSlicingInd := *, + template NG_UpdateType p_NG_UpdateType := *, + template MS_Clsmk2 p_MS_Clsmk2 := *, + template CodecList p_SupportedCodecs := *, + template EPS_BearerContextStatus p_EPS_BearerContextStatus := *, // @sic R5s190543 sic@ + template ExtdDRXParams p_ExtdDRXParams := *, + template GPRS_Timer3 p_T3324 := *, + template UERadioCapId p_UERadioCapId := *, + template MappedNSSAI p_MappedNSSAI := *, + template AddInfoRequest p_AddInfoRequest := *, + template WUSAssistInfo p_WUSAssistInfo := *, + template N5GCInd p_N5GCInd := *, + template NB_N1ModeDRXParams p_NB_N1ModeDRXParams := *, + template UE_RequestType p_UeRequestType := *, + template NG_PagingRestriction p_PagingRestrict := *, + template ServiceLvlAAContainer p_ServiceLvlAA := *, + template NID p_NId := *, + template PLMN_IdIE p_MSPLMNwDisasterCondition := *, + template PEIPS_AssistInfo p_RequestedPEIPS_AssistInfo := *, + template GPRS_Timer3 p_T3512 := *) return boolean + { + var NG_NAS_UL_Message_Type v_NASMsg; + var boolean v_Result := false; + var template (present) RegistrationType v_RegistrationType; + + v_NASMsg := p_ReceivedMsgs.Msg; + + if (isvalue(p_RegType)) { // @sic R5s200436 sic@ + select (valueof(p_RegType)) { // @sic R5-201143 sic@ + case (Mobility) { + v_RegistrationType := cr_RegistrationType(tsc_NG_RegistrationMobility, ?); + } + case (Periodic) { + v_RegistrationType := cr_RegistrationType(tsc_NG_RegistrationPeriodic, ?); + } + case (Emergency) { + v_RegistrationType := cr_RegistrationType(tsc_NG_RegistrationEmergency, '1'B); + } + case (SNPN_Onboarding) { // @sic R5-233987 sic@ + v_RegistrationType := cr_RegistrationType(tsc_NG_RegistrationSNPN, ?); + } + case else { + v_RegistrationType := cr_RegistrationType(tsc_NG_RegistrationInitial, ?); + // Check the 'first' message to make sure it only includes cleartext IEs + if (not match (v_NASMsg, cr_NG_REGISTRATION_REQUEST(v_RegistrationType, // @sic R5-196637 sic@ + p_KeySetId, + p_Tsc, + p_GUTI, + omit, + omit, + p_UESecurityCap, + omit, + omit, + omit, + omit, + omit, + omit, + p_UE_Status, // default * + p_AddGUTI, // default * + omit, + omit, + omit, + p_EPSMsg, // default * + omit, + omit, + omit, + omit, + omit, + omit, + omit, // @sic R5s201387 Baseline Moving sic@ + omit, // @sic R5s201387 Baseline Moving sic@ + *, + omit, // @sic R5s201387 Baseline Moving sic@ + omit, + omit, + omit, + omit, + omit, + omit, + omit, + omit, // @sic R5s221179 Baseline Moving sic@ + omit, // @sic R5s221179 Baseline Moving sic@ + omit, // @sic R5s221179 Baseline Moving sic@ + omit, // @sic R5s221179 Baseline Moving sic@ + omit, // @sic R5s221179 Baseline Moving sic@ + omit, // @sic R5s230533 sic@ + omit))) { + FatalError(__FILE__, __LINE__, "Initial Registration Req included non-cleartext IEs"); + } + } // @sic R5s200309 sic@ + } + } else { // @sic R5s200436 sic@ + v_RegistrationType := cr_RegistrationType((tsc_NG_RegistrationInitial, tsc_NG_RegistrationMobility), ?); + } + if (isvalue(p_ReceivedMsgs.PiggybackedPduList)) { + /* this will be the un-ciphered message from the NAS Container + if the SS couldn't decipher the message (because it doesn't have the security context, e.g. at the start of a test) + this field will be set to omit + */ + v_NASMsg := valueof(p_ReceivedMsgs.PiggybackedPduList[0].Msg); + } + + // Now check the full message, if present, against all expected values + if (match (v_NASMsg, cr_NG_REGISTRATION_REQUEST(v_RegistrationType, // @sic R5-196637 sic@ + p_KeySetId, + p_Tsc, + p_GUTI, + p_NonCurrentKSI, + p_GMM_Cap, + p_UESecurityCap, + p_ReqNSSAI, + p_TAI, + p_UE_NetworkCap, + p_ULDataStatus, + p_PDU_SessionStatus, + p_MICO_Ind, + p_UE_Status, + p_AddGUTI, + p_AllowedPDU_SessionStatus, + p_UE_UsageSetting, + p_DRXparam, + p_EPSMsg, + p_LADN_Ind, + p_ContainerType, + p_Payload, + p_NetworkSlicingInd, + p_NG_UpdateType, + p_MS_Clsmk2, // @sic R5s201387 Baseline Moving sic@ + p_SupportedCodecs, // @sic R5s201387 Baseline Moving sic@ + p_EPS_BearerContextStatus, + *, + p_ExtdDRXParams, // @sic R5s201387 Baseline Moving sic@ + p_T3324, + p_UERadioCapId, + p_MappedNSSAI, + p_AddInfoRequest, + p_WUSAssistInfo, + p_N5GCInd, + p_NB_N1ModeDRXParams, + p_UeRequestType, // @sic R5s221179 Baseline Moving sic@ + p_PagingRestrict, + p_ServiceLvlAA, + p_NId, + p_MSPLMNwDisasterCondition, + p_RequestedPEIPS_AssistInfo, + p_T3512))) { // @sic R5s230533 sic@ + v_Result := true; + } + // Finally, store the values received + p_GMM_MobilityInfo.Guti := v_NASMsg.registration_Request.ngMobileId; + if (ispresent(v_NASMsg.registration_Request.gmmCapability)) { + p_GMM_MobilityInfo.GMMCap := v_NASMsg.registration_Request.gmmCapability; + } else { + p_GMM_MobilityInfo.GMMCap := omit; + } + if (ispresent(v_NASMsg.registration_Request.ueSecurityCapability)) { + p_GMM_MobilityInfo.UECap := v_NASMsg.registration_Request.ueSecurityCapability; + } else { + p_GMM_MobilityInfo.UECap := omit; + } + if (ispresent(v_NASMsg.registration_Request.s1_UE_Capability)) { // @sic R5s190285 sic@ + p_GMM_MobilityInfo.S1NwkCap := v_NASMsg.registration_Request.s1_UE_Capability; + } else { + p_GMM_MobilityInfo.S1NwkCap := omit; + } + if (ispresent(v_NASMsg.registration_Request.pduSessionStatus)) { + p_GMM_MobilityInfo.SessionStatus := v_NASMsg.registration_Request.pduSessionStatus; + } else { + p_GMM_MobilityInfo.SessionStatus := omit; + } + if (ispresent(v_NASMsg.registration_Request.epsBearerContextStatus)) { // @sic R5-206426 sic@ + p_GMM_MobilityInfo.EPSBearerStatus := v_NASMsg.registration_Request.epsBearerContextStatus; + } else { + p_GMM_MobilityInfo.EPSBearerStatus := omit; + } + if (ispresent(v_NASMsg.registration_Request.ueRadioCapabilityId)) { // @sic R5-206419 sic@ + p_GMM_MobilityInfo.UERadioCapId := v_NASMsg.registration_Request.ueRadioCapabilityId; + } else { + p_GMM_MobilityInfo.UERadioCapId := omit; + } + return v_Result; + } + + /* + * @desc build the REGISTRATION ACCEPT + * @param p_RegType + * @param p_GMM_MobilityInfo + * @param p_GUTI + * @param p_TAIList + * @param p_EPLMNs (default value: omit) + * @param p_AllowedNSSAI (default value: cs_NSSAI_Allowed_Def) + * @param p_RejectedNSSAI (default value: omit) + * @param p_ConfiguredNSSAI (default value: omit) + * @param p_NwkFeatureSupport (default value: cs_NG_NetworkFeatureSupport_Def) + * @param p_PDU_SessionStatus (default value: omit) + * @param p_PDU_SessionReactResult (default value: omit) + * @param p_PDU_SessionReactError (default value: omit) + * @param p_LADN_Info (default value: omit) + * @param p_MICO_Ind (default value: omit) + * @param p_NetworkSlicingInd (default value: omit) + * @param p_SAIList (default value: omit) + * @param p_T3512 (default value: omit) + * @param p_Non3GPPDereg (default value: omit) + * @param p_T3502 (default value: omit) + * @param p_EmergNumList (default value: omit) + * @param p_ExtdEmergNumList (default value: omit) + * @param p_SOR (default value: omit) + * @param p_EAP (default value: omit) + * @param p_InclusionModeNSSAI (default value: omit) + * @param p_AccessCatDefinition (default value: omit) + * @param p_NG_DRXparameter (default value: omit) + * @param p_Non3GPP_NW_ProvidedPolicies (default value: omit) + * @param p_EPS_BearerContextStatus (default value: omit) + * @param p_Access (default value: Access_3GPP) + * @param p_SMSOverNAS (default value: '0'B) + * @param p_EmergencyRegistered (default value: '0'B) + * @param p_NssaaPerformed (default value: '0'B) + * @param p_NegotiatedExtdDRXParams (default value: omit) + * @param p_T3447 (default value: omit) + * @param p_T3448 (default value: omit) + * @param p_T3324 (default value: omit) + * @param p_UERadioCapId (default value: omit) + * @param p_UERadioCapIdDeletion (default value: omit) + * @param p_PendingNSSAI (default value: omit) + * @param p_CipheringKeyData (default value: omit) + * @param p_CAGInfoList (default value: omit) + * @param p_TruncatedS_TMSIConfig (default value: omit) + * @param p_WUSAssistInfo (default value: omit) + * @param p_NB_N1ModeDRXParams (default value: omit) + * @param p_ExtdRejectedNSSAI (default value: omit) + * @param p_ServiceLvlAA (default value: omit) + * @param p_NegotiatedPEIPS_AssistInfo (default value: omit) + * @param p_AddRequestResult (default value: omit) + * @param p_NssrgInfo (default value: omit) + * @param p_DisasterRoamingWaitRange (default value: omit) + * @param p_DisasterReturnWaitRange (default value: omit) + * @param p_DisasterPLMNList (default value: omit) + * @param p_ForbidTAIList_Roaming (default value: omit) + * @param p_ForbidTAIList_RegProvService (default value: omit) + * @param p_ExtdCAGInfoList (default value: omit) + * @param p_NsagInfo (default value: omit) + * @param p_DisasterRoamingResult (default value: '0'B) + * @return template (value) NG_NAS_DL_Message_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_NG_RegistrationAcceptMsg(TypeOfRegistration_Type p_RegType, + GMM_MobilityInfo_Type p_GMM_MobilityInfo, // @sic R5-206426 sic@ + template (omit) NG_MobileIdentity p_GUTI, // @sic R5s190719 sic@ + template (omit) NG_TrackingAreaIdList p_TAIList, + template (omit) PLMN_List p_EPLMNs := omit, + template (omit) NSSAI p_AllowedNSSAI := cs_NSSAI_Allowed_Def, // @sic R5s190109, R5-216256 sic@ + template (omit) RejectedNSSAI p_RejectedNSSAI := omit, + template (omit) NSSAI p_ConfiguredNSSAI := omit, + template (omit) NG_NetworkFeatureSupport p_NwkFeatureSupport := cs_NG_NetworkFeatureSupport_Def, + template (omit) PDU_SessionStatus p_PDU_SessionStatus := omit, + template (omit) PDU_SessionReactivationResult p_PDU_SessionReactResult := omit, + template (omit) PDU_SessionReactivationError p_PDU_SessionReactError := omit, + template (omit) LADN_Info p_LADN_Info := omit, + template (omit) MICO_Ind p_MICO_Ind := omit, + template (omit) NetworkSlicingInd p_NetworkSlicingInd := omit, + template (omit) ServiceAreaIdList p_SAIList := omit, + template (omit) GPRS_Timer3 p_T3512 := omit, + template (omit) GPRS_Timer2 p_Non3GPPDereg := omit, + template (omit) GPRS_Timer2 p_T3502 := omit, + template (omit) EmergNumList p_EmergNumList := omit, + template (omit) ExtdEmergNumList p_ExtdEmergNumList := omit, + template (omit) SORTransparentContainer p_SOR := omit, + template (omit) EAP_Message p_EAP := omit, + template (omit) InclusionModeNSSAI p_InclusionModeNSSAI := omit, + template (omit) OperatorAccessCatDefinitions p_AccessCatDefinition := omit, + template (omit) NG_DRXparameter p_NG_DRXparameter := omit, + template (omit) Non3GPP_NW_ProvidedPolicies p_Non3GPP_NW_ProvidedPolicies := omit, + template (omit) EPS_BearerContextStatus p_EPS_BearerContextStatus := omit, // @sic R5s190543 sic@ + RegistrationAccessType p_Access := Access_3GPP, + B1_Type p_SMSOverNAS := '0'B, + B1_Type p_EmergencyRegistered := '0'B, // @sic R5s201387 Baseline Moving sic@ + B1_Type p_NssaaPerformed := '0'B, // @sic R5s201387 Baseline Moving sic@ + template (omit) ExtdDRXParams p_NegotiatedExtdDRXParams := omit, // @sic R5s201387 Baseline Moving sic@ + template (omit) GPRS_Timer3 p_T3447 := omit, // @sic R5s201387 Baseline Moving sic@ + template (omit) GPRS_Timer3 p_T3448 := omit, + template (omit) GPRS_Timer3 p_T3324 := omit, + template (omit) UERadioCapId p_UERadioCapId := omit, + template (omit) UERadioCapIdDeletion p_UERadioCapIdDeletion := omit, + template (omit) NSSAI p_PendingNSSAI := omit, + template (omit) NG_CipheringKeyData p_CipheringKeyData := omit, + template (omit) CAGInfoList p_CAGInfoList := omit, + template (omit) TruncatedS_TMSIConfig p_TruncatedS_TMSIConfig := omit, + template (omit) WUSAssistInfo p_WUSAssistInfo := omit, + template (omit) NB_N1ModeDRXParams p_NB_N1ModeDRXParams := omit, + template (omit) ExtdRejectedNSSAI p_ExtdRejectedNSSAI := omit, + template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit, + template (omit) PEIPS_AssistInfo p_NegotiatedPEIPS_AssistInfo := omit, + template (omit) NG_AddReqResult p_AddRequestResult := omit, + template (omit) NSSRG_Info p_NssrgInfo := omit, + template (omit) RegistrationWaitRange p_DisasterRoamingWaitRange := omit, + template (omit) RegistrationWaitRange p_DisasterReturnWaitRange := omit, + template (omit) DisasterPLMNList p_DisasterPLMNList := omit, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming := omit, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := omit, + template (omit) ExtdCAGInfoList p_ExtdCAGInfoList := omit, + template (omit) NSAG_Info p_NsagInfo := omit, + B1_Type p_DisasterRoamingResult := '0'B) return template (value) NG_NAS_DL_Message_Type + { + var template (value) NG_NAS_DL_Message_Type v_NASMsg; + var B3_Type v_Access; + var template (omit) NG_NetworkFeatureSupport v_NwkFeatureSupport := p_NwkFeatureSupport; + var template (omit) GPRS_Timer3 v_T3512 := omit; + var template (omit) PDU_SessionStatus v_PDU_SessionStatus; + var template (omit) EPS_BearerContextStatus v_EPS_BearerContextStatus; + var template (omit) UERadioCapId v_UERadioCapId := omit; + + select (p_Access) { + case (Access_3GPP) { + v_Access := tsc_NG_RegResult_3GPP; + } + case (Non3GPP) { + v_Access := tsc_NG_RegResult_Non3GPP; + } + case (Both_3GPP_Non3GPP) { + v_Access := tsc_NG_RegResult_Both; + } + case else { + FatalError(__FILE__, __LINE__, "invalid access type"); + } + } + if (isvalue(p_T3512)) { + v_T3512 := p_T3512; + } else { + select (p_RegType) { + case (Mobility, Periodic) { // Do nothing + } + case (Emergency) { // @sic R5-196637 R5-198540 sic@ + } + case (Initial_NoSecurity, Initial_Secure) { + v_T3512 := cs_GPRS_Timer2_3_IEI ('5E'O, '111'B, '00000'B); + } + } + } + if (isvalue(p_PDU_SessionStatus)) { // @sic R5-206426 sic@ + v_PDU_SessionStatus := p_PDU_SessionStatus; + } else { + v_PDU_SessionStatus := p_GMM_MobilityInfo.SessionStatus; + } + if (isvalue(p_EPS_BearerContextStatus)) { // @sic R5-206426 sic@ + v_EPS_BearerContextStatus := p_EPS_BearerContextStatus; + } else { + v_EPS_BearerContextStatus := p_GMM_MobilityInfo.EPSBearerStatus; + } + + if (isvalue(p_UERadioCapId)) { // @sic R5-206419 sic@ + v_UERadioCapId := p_UERadioCapId; + } else if (pc_5GC_RACS) { + v_UERadioCapId := p_GMM_MobilityInfo.UERadioCapId; + } + + // if (p_GSM_MobilityInfo.PDUType == SST_URLLC or SST_V2X ) v_NwkFeatureSupport := omit FFS + v_NASMsg := cs_NG_REGISTRATION_ACCEPT(cs_RegistrationResult (v_Access, p_SMSOverNAS, p_EmergencyRegistered, p_NssaaPerformed, p_DisasterRoamingResult), // @sic R5s221179 Baseline Moving sic@ + p_GUTI, + p_EPLMNs, + p_TAIList, + p_AllowedNSSAI, + p_RejectedNSSAI, + p_ConfiguredNSSAI, + v_NwkFeatureSupport, + v_PDU_SessionStatus, + p_PDU_SessionReactResult, + p_PDU_SessionReactError, + p_LADN_Info, + p_MICO_Ind, + p_NetworkSlicingInd, + p_SAIList, + v_T3512, + p_Non3GPPDereg, + p_T3502, + p_EmergNumList, + p_ExtdEmergNumList, + p_SOR, + p_EAP, + p_InclusionModeNSSAI, + p_AccessCatDefinition, + p_NG_DRXparameter, + p_Non3GPP_NW_ProvidedPolicies, + v_EPS_BearerContextStatus, + p_NegotiatedExtdDRXParams, // @sic R5s201387 Baseline Moving sic@ + p_T3447, + p_T3448, + p_T3324, + v_UERadioCapId, + p_UERadioCapIdDeletion, + p_PendingNSSAI, + p_CipheringKeyData, + p_CAGInfoList, + p_TruncatedS_TMSIConfig, + p_WUSAssistInfo, + p_NB_N1ModeDRXParams, + p_ExtdRejectedNSSAI, // @sic R5s221179 Baseline Moving sic@ + p_ServiceLvlAA, + p_NegotiatedPEIPS_AssistInfo, + p_AddRequestResult, + p_NssrgInfo, + p_DisasterRoamingWaitRange, + p_DisasterReturnWaitRange, + p_DisasterPLMNList, + p_ForbidTAIList_Roaming, + p_ForbidTAIList_RegProvService, + p_ExtdCAGInfoList, + p_NsagInfo); + return v_NASMsg; + } + + /* + * @desc build the SECURITY MODE COMMAND + * @param p_SecurityParams + * @param p_RegType + * @param p_GMM_MobilityInfo + * @param p_IMEISVReq (default value: false) + * @param p_AddInfo (default value: omit) + * @param p_EAP (default value: omit) + * @param p_ABBA (default value: omit) + * @return template (value) NG_NAS_DL_Message_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_NG_SecurityModeCmdMsg(NG_NAS_SecurityParams_Type p_SecurityParams, + TypeOfRegistration_Type p_RegType, + GMM_MobilityInfo_Type p_GMM_MobilityInfo, + boolean p_IMEISVReq := false, + template (omit) AdditionalSecurityInfo p_AddInfo := omit, + template (omit) EAP_Message p_EAP := omit, + template (omit) ABBA p_ABBA := omit) return template (value) NG_NAS_DL_Message_Type + { + var template (value) NG_NAS_DL_Message_Type v_NASMsg; + var template (omit) AdditionalSecurityInfo v_AddInfo := p_AddInfo; + var template (omit) IMEISV_Request v_IMEISV_Request := omit; + var template (omit) NAS_SecurityAlgorithms v_EPSAlgs := omit; + var NG_UE_SecurityCapability v_NG_UE_SecurityCapability; + var template (omit) S1_UE_SecurityCapability v_ReplayedCap := omit; + + if (isvalue(p_GMM_MobilityInfo.UECap)) { // @sic R5s190109 sic@ + v_NG_UE_SecurityCapability := p_GMM_MobilityInfo.UECap; + v_NG_UE_SecurityCapability.iei := omit; + } else { + FatalError(__FILE__, __LINE__, "UE Capabilities not included in Registration Request"); + } + + if (isvalue(p_GMM_MobilityInfo.GMMCap)) { + if (match('1'B, p_GMM_MobilityInfo.GMMCap.s1Cap)) { + v_EPSAlgs := cs_NAS_SecurityAlgorithms(px_NAS_CipheringAlgorithm, px_NAS_IntegrityProtAlgorithm, '57'O); // @sic R5s190285 sic@ + if (isvalue(p_GMM_MobilityInfo.S1NwkCap)) { + v_ReplayedCap.ieValue := f_EPS_FillNAS_SecurityCapability_Common(p_GMM_MobilityInfo.S1NwkCap, omit); // @sic R5s190421 sic@ + v_ReplayedCap.iei := '19'O; // @sic R5s190421 sic@ + } + } + } + + if (p_IMEISVReq) { + v_IMEISV_Request := cds_NG_IMEISV_Request; + } + + if (p_RegType == Initial_NoSecurity) { + // Must ensure UE sends complete initial message if SS doesn't have security + if (isvalue(v_AddInfo)) { + v_AddInfo.rinmr := '1'B; + } else { + v_AddInfo := cs_AdditionalSecurityInfo('1'B); + } + } + v_NASMsg := cs_NG_SECURITY_MODE_COMMAND(cs_NG_NAS_SecurityAlgorithms (p_SecurityParams.NAS_Ciphering.Algorithm, p_SecurityParams.NAS_Integrity.Algorithm), + p_SecurityParams.KSIamf, + v_NG_UE_SecurityCapability, + v_IMEISV_Request, + v_EPSAlgs, + v_AddInfo, + p_EAP, + p_ABBA, + v_ReplayedCap); + return v_NASMsg; + } + + /* + * @desc Check the SECURITY MODE COMPLETE + * @param p_NASMsgs + * @param p_RegType + * @param p_IMEISVReq (default value: false) + * @param p_NonIMEISV_PEI (default value: *) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Check_NG_SecurityModeCompleteMsg(NG_NAS_UL_Pdu_Type p_NASMsgs, + TypeOfRegistration_Type p_RegType, + boolean p_IMEISVReq := false, + template NG_MobileIdentity p_NonIMEISV_PEI := *) return boolean + { + var template NG_MobileIdentity v_IMEISV := omit; + var template ReplayedNASMessageContainer v_ExpectedMsg := omit; + + if (p_IMEISVReq) { // if IMEISV is requested + v_IMEISV := f_NG_Imeisv2MobileIdentity (px_IMEISV_Def); + v_IMEISV.iei := '77'O; + } + if (p_RegType == Initial_NoSecurity) { + // don't check the contents here as it's encoded, but it should be present + v_ExpectedMsg := ?; + } + return match(p_NASMsgs.Msg, cr_NG_SECURITY_MODE_COMPLETE (v_IMEISV, v_ExpectedMsg, p_NonIMEISV_PEI)); // @sic R5s201387 Baseline Moving sic@ + } + + /* + * @desc Check the SERVICE REQUEST message + * @param p_ReceivedMsgs + * @param p_KSI + * @param p_S_TMSI + * @param p_ServiceType (default value: '0010'B) + * @param p_ConnectionType (default value: STATE_IDLE_1A) + * @param p_ULDataStatus (default value: *) + * @param p_PDU_SessionStatus (default value: *) + * @param p_AllowedPDU_SessionStatus (default value: *) + * @param p_UeRequestType (default value: *) + * @param p_PagingRestrict (default value: *) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Check_NG_ServiceReqMsg(NG_NAS_UL_Pdu_Type p_ReceivedMsgs, + template (present) NAS_KeySetIdentifier p_KSI, + template (present) NG_MobileIdentity p_S_TMSI, + template (present) B4_Type p_ServiceType := '0010'B, // @sic R5s190109 sic@ + NG_STATE_Type p_ConnectionType := STATE_IDLE_1A, + template ULDataStatus p_ULDataStatus := *, + template PDU_SessionStatus p_PDU_SessionStatus := *, + template AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus := *, + template UE_RequestType p_UeRequestType := *, + template NG_PagingRestriction p_PagingRestrict := *) return boolean + { + var NG_NAS_UL_Message_Type v_NASMsg; + + v_NASMsg := p_ReceivedMsgs.Msg; + + if (p_ConnectionType == STATE_IDLE_1A) { + // If this is an initial NAS message check the 'first' message to make sure it only includes cleartext IEs + if (not match (v_NASMsg, cr_NG_SERVICE_REQUEST (p_ServiceType, + p_KSI, + p_S_TMSI, + omit, + omit, + omit, + *, + omit, + omit))) { + FatalError(__FILE__, __LINE__, "Initial Service Req included non-cleartext IEs"); + } + if (isvalue(p_ReceivedMsgs.PiggybackedPduList)) { + /* this will be the un-ciphered message from the NAS Container + if the SS couldn't decipher the message (because it doesn't have the security context, e.g. at the start of a test) + this field will be set to omit + */ + v_NASMsg := valueof(p_ReceivedMsgs.PiggybackedPduList[0].Msg); + } + } + // Now check the full message, if present, against all expected values + return match(v_NASMsg, cr_NG_SERVICE_REQUEST (p_ServiceType, + p_KSI, + p_S_TMSI, + p_ULDataStatus, + p_PDU_SessionStatus, + p_AllowedPDU_SessionStatus, + *, + p_UeRequestType, // @sic R5s221179 Baseline Moving sic@ + p_PagingRestrict)); + } + + /* + * @desc Check the CONTROL PLANE SERVICE REQUEST message + * @param p_ReceivedMsgs + * @param p_KSI + * @param p_CP_ServiceType + * @param p_CIoTSmallDataContainer (default value: false) If this is expected, the value must be checked outside this function + * @param p_PayloadContainerType (default value: *) + * @param p_PayloadContainer (default value: *) + * @param p_NG_PDU_SessionId (default value: *) + * @param p_PDU_SessionStatus (default value: *) + * @param p_ReleaseAssistanceInd (default value: *) + * @param p_ULDataStatus (default value: *) + * @param p_AdditionalInfo (default value: *) + * @param p_ConnectionType (default value: STATE_IDLE_1A) + * @param p_UeRequestType (default value: *) + * @param p_PagingRestrict (default value: *) + * @return boolean + */ + function f_Check_NG_ControlPlaneServiceReqMsg(NG_NAS_UL_Pdu_Type p_ReceivedMsgs, + template (present) NAS_KeySetIdentifier p_KSI, + template (present) CP_ServiceType p_CP_ServiceType, + boolean p_CIoTSmallDataContainer := false, + template PayloadContainerType p_PayloadContainerType := *, + template PayloadContainer p_PayloadContainer := *, + template NG_PDU_SessionId p_NG_PDU_SessionId := *, + template PDU_SessionStatus p_PDU_SessionStatus := *, + template ReleaseAssistanceInd p_ReleaseAssistanceInd := *, + template ULDataStatus p_ULDataStatus := omit, + template AdditionalInformation p_AdditionalInfo := *, + template AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus, + template UE_RequestType p_UeRequestType := *, + template NG_PagingRestriction p_PagingRestrict := *, + NG_STATE_Type p_ConnectionType := STATE_IDLE_1A) return boolean + { + var NG_NAS_UL_Message_Type v_NASMsg; + var template CIoTSmallDataRxdString v_SmallData := omit; + + if (p_CIoTSmallDataContainer) { + v_SmallData := ?; + } + v_NASMsg := p_ReceivedMsgs.Msg; + + if (p_ConnectionType == STATE_IDLE_1A) { + // If this is an initial NAS message check the 'first' message to make sure it only includes cleartext IEs + if (not match (v_NASMsg, cr_NG_CP_SERVICE_REQUEST (p_KSI, + p_CP_ServiceType, + v_SmallData, // The small data container may be present, but still ciphered + omit, + omit, + omit, + omit, + omit, + omit, + omit, + omit, + *, + omit, + omit))) { + FatalError(__FILE__, __LINE__, "Initial Service Req included non-cleartext IEs"); + } + if (isvalue(p_ReceivedMsgs.PiggybackedPduList)) { + /* this will be the un-ciphered message + if the SS couldn't decipher the message (because it doesn't have the security context, e.g. at the start of a test) + this field will be set to omit + + This will either be cleartext IEs + unciphered small data container, + or cleartext + noncleartext IEs (but not small data container) + */ + v_NASMsg := valueof(p_ReceivedMsgs.PiggybackedPduList[0].Msg); + } + } + // Now check the full message, if present, against all expected values + return match(v_NASMsg, cr_NG_CP_SERVICE_REQUEST (p_KSI, + p_CP_ServiceType, + v_SmallData, + p_PayloadContainerType, + p_PayloadContainer, + p_NG_PDU_SessionId, + p_PDU_SessionStatus, + p_ReleaseAssistanceInd, + p_ULDataStatus, + p_AdditionalInfo, + p_AllowedPDU_SessionStatus, + *, + p_UeRequestType, // @sic R5s221179 Baseline Moving sic@ + p_PagingRestrict)); + } + + /* + * @desc Check the CIoT Small Data Container in the CONTROL PLANE SERVICE REQUEST message + * @param p_ReceivedIE + * @param p_IEL + * @param p_DataType + * @param p_DDX + * @param p_PduSessionId + * @param p_DataContents + * @param p_LengthOfAddInfo (default value: omit) + * @param p_AddInfo (default value: omit) + * @return boolean + */ + function f_Check_CIoTSmallDataContainer(CIoTSmallDataRxdString p_ReceivedIE, + template (present) B3_Type p_DataType, + template (present) B2_Type p_DDX, /* set to 00 for dataType = 001 */ + template (present) B3_Type p_PduSessionId, /* set to 00 for dataType = 010 or 001 */ + octetstring p_DataContents, + template Type4Length_Type p_LengthOfAddInfo := omit, + template octetstring p_AddInfo := omit) return boolean + { + var template (omit) CIoTSmallDataContainer v_SmallData := fl_Decode_CIoTSmallDataContainer (p_ReceivedIE); + + if (not (isvalue(v_SmallData))){ + return false; + } else { + return match (valueof(v_SmallData), cr_CIoTSmallDataContainer (p_DataType, + p_DDX, + p_PduSessionId, + p_LengthOfAddInfo, + p_AddInfo, + p_DataContents)); + } + } + + /* + * @desc Decode the CIoT Small Data Container in the CONTROL PLANE SERVICE REQUEST message + * @param p_ReceivedIE + * @return template (omit) CIoTSmallDataContainer + */ + function fl_Decode_CIoTSmallDataContainer(CIoTSmallDataRxdString p_ReceivedIE) return template (omit) CIoTSmallDataContainer + { + var template (omit) CIoTSmallDataContainer v_ReturnOmit := omit; + var CIoTSmallDataContainer v_SmallData; + var octetstring v_OctetString := p_ReceivedIE.encodedstring; + var bitstring v_Bitstring := oct2bit(v_OctetString); + + if (decvalue(v_Bitstring, v_SmallData) != 0) { + return v_ReturnOmit; + } else if (p_ReceivedIE.iei != '6F'O) { // check iei separately + return v_ReturnOmit; + } else { + return v_SmallData; + } + } + + /* + * @desc Get the SERVICE ACCEPT message + * @param p_PDU_SessionStatus (default value: omit) + * @param p_PDU_SessionReactivationResult (default value: omit) + * @param p_PDU_SessionReactivationError (default value: omit) + * @param p_EAP (default value: omit) + * @param p_T3448 (default value: omit) + * @param p_AddRequestResult (default value: omit) + * @param p_ForbidTAIList_Roaming (default value: omit) + * @param p_ForbidTAIList_RegProvService (default value: omit) + * @return template (value) NG_NAS_DL_Message_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_NG_ServiceAcceptMsg(template (omit) PDU_SessionStatus p_PDU_SessionStatus := omit, + template (omit) PDU_SessionReactivationResult p_PDU_SessionReactivationResult := omit, + template (omit) PDU_SessionReactivationError p_PDU_SessionReactivationError := omit, + template (omit) EAP_Message p_EAP := omit, + template (omit) GPRS_Timer2 p_T3448 := omit, + template (omit) NG_AddReqResult p_AddRequestResult := omit, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming := omit, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := omit) return template (value) NG_NAS_DL_Message_Type + { + return cs_NG_SERVICE_ACCEPT (p_PDU_SessionStatus, + p_PDU_SessionReactivationResult, + p_PDU_SessionReactivationError, + p_EAP, + p_T3448, // @sic R5s201387 Baseline Moving sic@ + p_AddRequestResult, // @sic R5s221179 Baseline Moving sic@ + p_ForbidTAIList_Roaming, + p_ForbidTAIList_RegProvService); + } + + /* + * @desc Check the DEREGISTRATION REQUEST MO message + * @param p_NASMsg + * @param p_DeregisterType + * @param p_MobileId (default value: ?) + * @param p_KSI (default value: ?) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Check_NG_DeregistrationReqMOMsg(NG_NAS_UL_Message_Type p_NASMsg, + template (present) DeregisterType p_DeregisterType, + template (present) NG_MobileIdentity p_MobileId := ?, + template (present) NAS_KeySetIdentifier p_KSI := ?) return boolean + { + return match (p_NASMsg, cr_NG_DEREGISTRATION_REQUEST_MO (p_DeregisterType, p_KSI, p_MobileId)); + } + + /* + * @desc Get the DEREGISTRATION REQUEST MT message + * @param p_DeregisterType + * @param p_Cause + * @param p_T3346 (default value: omit) + * @param p_RejectedNSSAI (default value: omit) + * @param p_CAGInfoList (default value: omit) + * @return template (value) NG_NAS_DL_Message_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_NG_DeregistrationReqMTMsg(template (value) DeregisterType p_DeregisterType, + template (omit) GMM_GSM_Cause p_Cause, + template (omit) GPRS_Timer2 p_T3346 := omit, + template (omit) RejectedNSSAI p_RejectedNSSAI := omit, // @sic R5s201387 Baseline Moving sic@ + template (omit) CAGInfoList p_CAGInfoList := omit) return template (value) NG_NAS_DL_Message_Type + { + return cs_NG_DEREGISTRATION_REQUEST_MT (p_DeregisterType, p_Cause, p_T3346, p_RejectedNSSAI, p_CAGInfoList); // @sic R5s201387 Baseline Moving sic@ + } + + /* + * @desc build the AUTHENTICATION REQUEST for 5G AKA + * @param p_SecurityParams (by reference) + * @param p_PLMN + * @param p_AuthenticationError (default value: noError) + * @param p_NID (default value: omit) + * @param p_Identity (default value: := px_IMSI_Def) + * @return template (value) NG_NAS_DL_Message_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_5GAKA_AuthenticationReqMsg(inout NG_NAS_SecurityParams_Type p_SecurityParams, + NAS_PlmnId p_PLMN, + AuthenticationError_Type p_AuthenticationError := noError, + template (omit) hexstring p_NID := omit, + hexstring p_Identity := px_IMSI_Def) return template (value) NG_NAS_DL_Message_Type + { + var template (value) NG_NAS_DL_Message_Type v_NASMsg; + + // Evaluate Authentication parameters and generate new keys + p_SecurityParams := f_NG_NAS_AuthenticationInit(p_SecurityParams, p_PLMN, p_Identity, p_AuthenticationError, -, p_NID); // @sic R5-197217, R5s220753, R5s230215 sic@ + v_NASMsg := cs_NG_AUTHENTICATION_REQUEST (p_SecurityParams.KSIamf, + cs_ABBA (p_SecurityParams.ABBA, omit), // @sic R5s190109 sic@ + cs_GMM_AuthRAND(p_SecurityParams.AuthParams.RandValue), + cs_GSM_AUTN(p_SecurityParams.AuthParams.AUTN)); + return v_NASMsg; + } + + /* + * @desc build the AUTHENTICATION REQUEST for EAP AKA + * @param p_SecurityParams (by reference) + * @param p_PLMN + * @param p_NID (default value: omit) + * @param p_Identity (default value: := px_IMSI_Def) + * @return template (value) NG_NAS_DL_Message_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_EAP_AuthenticationReqMsg(inout NG_NAS_SecurityParams_Type p_SecurityParams, + NAS_PlmnId p_PLMN, + template (omit) hexstring p_NID := omit, + hexstring p_Identity := px_IMSI_Def) return template (value) NG_NAS_DL_Message_Type + { + var template (value) NG_NAS_DL_Message_Type v_NASMsg; + var template (value) EAP_Message v_EAP; + + // Evaluate Authentication parameters and generate new keys + p_SecurityParams := f_NG_EAP_AuthenticationInit(p_SecurityParams, p_PLMN, hex2str(p_Identity), -, -, p_NID); // @sic R5s220753, R5s230215 sic@ + v_EAP := cs_EAP_Message (f_NG_EAP_ChallengeReq (p_SecurityParams, p_PLMN, -, p_NID)); // @sic R5s230229 sic@ + v_NASMsg := cs_NG_AUTHENTICATION_REQUEST (p_SecurityParams.KSIamf, + cs_ABBA (p_SecurityParams.ABBA, omit), // @sic R5s190109 sic@ + -, + -, + v_EAP); + return v_NASMsg; + } + //---------------------------------------------------------------------------- + /* + * @desc Check if received message is either an Authentication Response or an Authenticationfailure + * @param p_SecurityParams (by reference) + * @param p_ReceivedMsg + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Check_5GAKA_AuthenticationResponseFailure(inout NG_NAS_SecurityParams_Type p_SecurityParams, + NG_NAS_UL_Message_Type p_ReceivedMsg) return boolean + { + var boolean v_Result := false; + var B32_128_Type v_ReceivedRES; + + if (match (p_ReceivedMsg, cr_NG_AUTHENTICATION_RESPONSE)) { + v_ReceivedRES := p_ReceivedMsg.authentication_Response.authResponseParam.res; + if (v_ReceivedRES == substr(p_SecurityParams.AuthParams.XRES, 0, lengthof(v_ReceivedRES))) { + v_Result := true; + } else { + v_Result := false; + } + p_SecurityParams.AuthParams.XRESLength := px_NAS_5GC_XRES_Length; // @sic R5w190117 sic@ + } else if (match (p_ReceivedMsg, cr_NG_AUTHENTICATION_FAILURE)) { + v_Result := false; + } + return v_Result; + } + + /* + * @desc Check received Authentication Response message + * @param p_SecurityParams (by reference) + * @param p_ReceivedMsg + * @param p_ResultInd (default value: *) + * @param p_Id (default value: '00'O) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Check_EAPAKA_AuthenticationResponse (inout NG_NAS_SecurityParams_Type p_SecurityParams, + NG_NAS_UL_Message_Type p_ReceivedMsg, + template EAP_AT_RESULT_IND p_ResultInd := *, + O1_Type p_Id := '00'O) return boolean + { + if (not match (p_ReceivedMsg, cr_NG_AUTHENTICATION_RESPONSE (omit, cr_EAP_Message()))) { // @sic R5-201142 sic@ + return false; + } + return f_NG_EAP_SuccessfulAuthenticationResponse(p_SecurityParams, p_ReceivedMsg.authentication_Response.eapMessage.eapMsg, p_ResultInd, p_Id); // @sic R5-201142, R5s201483 sic@ + } + + /* + * @desc build the AUTHENTICATION RESULT + * @param p_SecurityParams + * @param p_EAP_Msg (default: cs_EAP_Success) + * @return template (value) NG_NAS_DL_Message_Type + * @status APPROVED (NR5GC) + */ + function f_Get_NG_AuthenticationResultMsg(NG_NAS_SecurityParams_Type p_SecurityParams, + template (value) EAP_Message_Type p_EAP_Msg := cs_EAP_Success) return template (value) NG_NAS_DL_Message_Type + { + return cs_NG_AUTHENTICATION_RESULT(p_SecurityParams.KSIamf, + cs_EAP_Message(bit2oct(encvalue(p_EAP_Msg)), omit), // @sic R5s201223, R5-205579 sic@ + cs_ABBA (p_SecurityParams.ABBA)); + } + + //---------------------------------------------------------------------------- + /* + * @desc Check the PDU SESSION ESTABLISHMENT REQUEST, Piggybacked into the UL NAS Transport + * @param p_GSM_MobilityInfo (by reference) + * @param p_ReceivedMsgs + * @param p_PDU_SessionId (default value: ?) + * @param p_PTI (default value: omit) + * @param p_IntegrityProtMaxDataRate (default value: ?) + * @param p_PDU_SessionType (default value: omit) + * @param p_SSC_Mode (default value: *) + * @param p_UECap (default value: *) + * @param p_MaxNumPacketFilters (default value: *) + * @param p_AlwaysOnPDUSessionReq (default value: *) + * @param p_PDUReq (default value: *) + * @param p_ExtdPCO (default value: *) + * @param p_OldPDU_SessionId (default value: *) + * @param p_RequestType (default value: cr_NG_Request_Type('001'B)) + * @param p_S_NSSAI (default value: *) + * @param p_DNN (default value: *) + * @param p_AdditionalInfo (default value: *) + * @param p_MA_PDUSessionInfo (default value: *) + * @param p_ReleaseAssistanceInd (default value: *) + * @param p_IPHeaderCompConfig (default value: *) + * @param p_DS_TT_EthernetPortMACAddr (default value: *) + * @param p_UE_DS_TT_ResidenceTime (default value: *) + * @param p_PortManagementInfoContainer (default value: *) + * @param p_EthernetHeaderCompConfig (default value: *) + * @param p_SuggestedInterfaceId (default value: *) + * @param p_ServiceLvlAA (default value: *) + * @param p_RequestedMBS (default value: *) + * @param p_PduSessionPairId (default value: *) + * @param p_RSN (default value: *) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Check_NG_PDUSessionEstablishmentReq(out GSM_MobilityInfo_Type p_GSM_MobilityInfo, + NG_NAS_UL_Pdu_Type p_ReceivedMsgs, + template (present) O1_Type p_PDU_SessionId := ?, + template ProcedureTransactionIdentifier p_PTI := omit, + template IntegrityProtMaxDataRate p_IntegrityProtMaxDataRate := ?, + template PDU_SessionType p_PDU_SessionType := omit, + template SSC_Mode p_SSC_Mode := *, // @sic R5s200162 sic@ + template NG_UE_SM_Cap p_UECap := *, // @sic R5s200162 sic@ + template MaxNumPacketFilters p_MaxNumPacketFilters := *, // @sic R5s200162 sic@ + template AlwaysOnPDUSessionReq p_AlwaysOnPDUSessionReq := *, // @sic R5s200106 sic@ + template SM_PDU_DN_RequestContainer p_PDUReq := *, // @sic R5s200162 sic@ + template ExtdProtocolConfigOptions p_ExtdPCO := *, // @sic R5s200162 sic@ + template NG_PDU_SessionId p_OldPDU_SessionId := *, + template NG_Request_Type p_RequestType := cr_NG_Request_Type('001'B), + template S_NSSAI_Type p_S_NSSAI := *, + template DNN p_DNN := *, + template AdditionalInformation p_AdditionalInfo := *, + template MA_PDUSessionInfo p_MA_PDUSessionInfo := *, // @sic R5s201387 Baseline Moving sic@ + template ReleaseAssistanceInd p_ReleaseAssistanceInd := *, + template IPHeaderCompressionConfig p_IPHeaderCompConfig := *, + template DS_TT_EthernetPortMACAddr p_DS_TT_EthernetPortMACAddr := *, + template UE_DS_TT_ResidenceTime p_UE_DS_TT_ResidenceTime := *, + template PortManagementInfoContainer p_PortManagementInfoContainer := *, + template EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := *, + template PDU_Address p_SuggestedInterfaceId := *, + template ServiceLvlAAContainer p_ServiceLvlAA := *, + template RequestedMBSContainer p_RequestedMBS := *, + template PDUSessionPairId p_PduSessionPairId := *, + template RSN p_RSN := *) return boolean + { + var boolean v_Result := false; + var NG_NAS_UL_Message_Type v_GSMMsg := p_ReceivedMsgs.PiggybackedPduList[0].Msg; + var template (present) ProcedureTransactionIdentifier v_PTI; + var template (present) PDU_SessionType v_SessionType; + + if (ispresent(p_PTI)) { + v_PTI := p_PTI; + } else { + v_PTI := complement('00'O, 'FF'O); + } + if (ispresent(p_PDU_SessionType)) { + v_SessionType := p_PDU_SessionType; + } else { + v_SessionType := cr_PDU_SessionType(('001'B, '010'B, '011'B, '101'B)); // @sic R5s190704, R5-221493 sic@ + } + // Check NAS Transport msg first + v_Result := f_Check_NG_ULNASTransport (p_ReceivedMsgs.Msg, + cr_PayloadContainerType(tsc_PayloadContainerESMMsg), // @sic R5w190208 sic@ + p_PDU_SessionId, + p_OldPDU_SessionId, + p_RequestType, + p_S_NSSAI, + p_DNN, + p_AdditionalInfo, + p_MA_PDUSessionInfo, // @sic R5s201387 Baseline Moving sic@ + p_ReleaseAssistanceInd); + if (not v_Result) { + return v_Result; + } else if (match (v_GSMMsg, cr_NG_PDU_SESSION_ESTABLISHMENT_REQUEST (cr_NG_PDU_SessionId(omit, p_ReceivedMsgs.Msg.ul_Nas_Transport.pduSessionId.sessionId), // @sic R5-191222 sic@ + v_PTI, + v_SessionType, + p_SSC_Mode, + p_UECap, + p_MaxNumPacketFilters, + p_IntegrityProtMaxDataRate, + p_AlwaysOnPDUSessionReq, + p_PDUReq, + p_ExtdPCO, + p_IPHeaderCompConfig, // @sic R5s201387 Baseline Moving sic@ + p_DS_TT_EthernetPortMACAddr, + p_UE_DS_TT_ResidenceTime, + p_PortManagementInfoContainer, + p_EthernetHeaderCompConfig, + p_SuggestedInterfaceId, + p_ServiceLvlAA, // @sic R5s221179 Baseline Moving sic@ + p_RequestedMBS, + p_PduSessionPairId, + p_RSN))) { + v_Result := true; + } else { // @sic R5s190944 sic@ + v_Result := false; + } + p_GSM_MobilityInfo.SessionId := v_GSMMsg.pdu_Session_Establishment_Request.pduSessionId.sessionId; // @sic R5s00564 sic@ + p_GSM_MobilityInfo.PTI := v_GSMMsg.pdu_Session_Establishment_Request.procedureTransactionIdentifier; + p_GSM_MobilityInfo.SessionType := v_GSMMsg.pdu_Session_Establishment_Request.pduSessionType.typeValue; + p_GSM_MobilityInfo.EPS_Bearer := omit; // these will be set in the Accept message @sic R5-204400 sic@ + p_GSM_MobilityInfo.PdnIndex := omit; // these will be set in the Accept message @sic R5-204400 sic@ + + if (ispresent (p_ReceivedMsgs.Msg.ul_Nas_Transport.dnn)) { + p_GSM_MobilityInfo.DNN := p_ReceivedMsgs.Msg.ul_Nas_Transport.dnn; + } else { + p_GSM_MobilityInfo.DNN := omit; + } + p_GSM_MobilityInfo.PDUType := f_GetPDNTypeFromDNN(p_GSM_MobilityInfo.DNN); // @sic R5-206296 sic@ + + if (isvalue(p_PDU_SessionType)) { // @sic R5-227473 sic@ + if (match ('101'B, p_PDU_SessionType.typeValue)) { + // make sure the correct PDU Type is set as this is used to decide other IE values + p_GSM_MobilityInfo.PDUType := Ethernet_DNN; + } + } + + if (ispresent (v_GSMMsg.pdu_Session_Establishment_Request.alwaysOnPDUSessionReq)) { + p_GSM_MobilityInfo.AlwaysOn := v_GSMMsg.pdu_Session_Establishment_Request.alwaysOnPDUSessionReq; + } else { + p_GSM_MobilityInfo.AlwaysOn := omit; + } + if (match(p_GSM_MobilityInfo.PDUType, (URLLC_DNN, Ethernet_DNN))) { // @sic R5s221179, R5-227473 sic@ + if (not match(p_GSM_MobilityInfo.AlwaysOn, cr_AlwaysOnRequested)) { + v_Result := false; + } + } + + if (ispresent (v_GSMMsg.pdu_Session_Establishment_Request.extdProtocolConfigurationOptions)) { + p_GSM_MobilityInfo.PCO := v_GSMMsg.pdu_Session_Establishment_Request.extdProtocolConfigurationOptions; + } else { + p_GSM_MobilityInfo.PCO := omit; + } + if (pc_PS_data_off) { // @sic R5-216155 sic@ + v_Result := f_ExtdProtocolConfigOptions_CheckPSDataOff(p_GSM_MobilityInfo.PCO); + } + if (ispresent (p_ReceivedMsgs.Msg.ul_Nas_Transport.s_NSSAI)) { // @sic R5s210148 sic@ + p_GSM_MobilityInfo.NSSAI := p_ReceivedMsgs.Msg.ul_Nas_Transport.s_NSSAI; + } else { + p_GSM_MobilityInfo.NSSAI := omit; + } + return v_Result; + } + + /* + * @desc function to get/initialise p_DNN + * @param p_PLMN + * @param p_PDUType + * @param p_DNN + * @return template (value) DNN + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_GetDNN(NAS_PlmnId p_PLMN, + PDU_PDN_DNN_Type p_PDUType, + template (omit) DNN p_DNN) return template (value) DNN + { // @sic R5-221467 sic@ + var octetstring v_DNNValue; + + if (isvalue (p_DNN)) { // @sic R5s210130 sic@ + v_DNNValue := valueof(p_DNN.dnnValue); + } else if (p_PDUType == IMS_DNN) { + v_DNNValue := f_NG_GetDNNForIMS(p_PLMN); + } else { + v_DNNValue := f_DomainName_Encode(f_GetDNNStringFromPICS(p_PDUType)); + } + return cs_DNN(-, v_DNNValue); + } + + /* + * @desc function to get PDN Type from p_DNN + * @param p_DNN + * @return PDU_PDN_DNN_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_GetPDNTypeFromDNN(template (omit) DNN p_DNN) return PDU_PDN_DNN_Type + { + var PDU_PDN_DNN_Type v_PDUType; + + if (ispresent(p_DNN)) { + v_PDUType := f_GetPDN_DNNTypeFromAPN (valueof(p_DNN.dnnValue)); + } else { // APN/DNN not present so check what to use as default + v_PDUType := f_GetDefaultAPN_DNNType_FromPICS(); + } + + return v_PDUType; + } + + /* + * @desc Get the PDU Session which uses a particular DNN + * @param p_PDUSessionInfo + * @param p_DNNType + * @return template (omit) GSM_MobilityInfo_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT) + */ + function f_Get_PDUSessionForDNNType(PDUSessionInfoList_Type p_PDUSessionInfo, template (present) PDU_PDN_DNN_Type p_DNNType) return template (omit) GSM_MobilityInfo_Type + { + var GSM_MobilityInfo_Type v_GSM_MobilityInfo; + var integer i; + + for (i :=0; i < lengthof(p_PDUSessionInfo); i := i+1) { // @sic R5s200548 sic@ + v_GSM_MobilityInfo := p_PDUSessionInfo[i]; + if (match (v_GSM_MobilityInfo.PDUType, p_DNNType)) { // @sic R5-206296 sic@ + return v_GSM_MobilityInfo; + } + } + return omit; + } + + /* + * @desc Get the DNN for PDU Session id + * @param p_PDUSessionInfo + * @param p_PDUSessionId + * @return template (omit) DNN + * @status APPROVED (NR5GC) + */ + function f_Get_DNNForPDUSessionId(PDUSessionInfoList_Type p_PDUSessionInfo, O1_Type p_PDUSessionId) return template (omit) DNN + { + var GSM_MobilityInfo_Type v_GSM_MobilityInfo; + var integer i; + + for (i :=0; i < lengthof(p_PDUSessionInfo); i := i+1) { + v_GSM_MobilityInfo := p_PDUSessionInfo[i]; + if (match (v_GSM_MobilityInfo.SessionId, p_PDUSessionId)) { // @sic R5s200564 sic@ + return v_GSM_MobilityInfo.DNN; + } + } + return omit; + } + + /* + * @desc Get the PDN Index for PDU Session id + * @param p_PDUSessionInfo + * @param p_PDUSessionId + * @return template (omit) PDN_Index_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_PDN_IndexForPDUSessionId(PDUSessionInfoList_Type p_PDUSessionInfo, O1_Type p_PDUSessionId) return template (omit) PDN_Index_Type + { + var GSM_MobilityInfo_Type v_GSM_MobilityInfo; + var integer i; + + for (i :=0; i < lengthof(p_PDUSessionInfo); i := i+1) { + v_GSM_MobilityInfo := p_PDUSessionInfo[i]; + if (match (v_GSM_MobilityInfo.SessionId, p_PDUSessionId)) { + return v_GSM_MobilityInfo.PdnIndex; + } + } + return omit; + } + + /* + * @desc Get the PDU Session Id which uses a particular DNN + * @param p_PDUSessionInfo + * @param p_DNNType + * @return integer + * @status APPROVED (NR5GC) + */ + function f_Get_PDUSessionIdForDNNType(PDUSessionInfoList_Type p_PDUSessionInfo, template (present) PDU_PDN_DNN_Type p_DNNType) return integer + { + var GSM_MobilityInfo_Type v_GSM_MobilityInfo; + var integer i; + + for (i :=0; i < lengthof(p_PDUSessionInfo); i := i+1) { // @sic R5s200548 sic@ + v_GSM_MobilityInfo := p_PDUSessionInfo[i]; + if (match (v_GSM_MobilityInfo.PDUType, p_DNNType)) { // @sic R5-206296 sic@ + return oct2int(v_GSM_MobilityInfo.SessionId); // @sic R5s200564 sic@ + } + } + return -1; + } + + /* + * @desc build the PDU SESSION AUTHENTICATION COMMAND, Piggybacked into the DL NAS Transport + * @param p_SecurityParams (by reference) + * @param p_GSM_MobilityInfo + * @param p_PLMN + * @param p_BackOff (default value: omit) + * @param p_Identity (default value: := px_IMSI_Def) + * @return template (value) NG_NAS_DL_Pdu_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_PDUSessionAuthenticationCmd(inout NG_NAS_SecurityParams_Type p_SecurityParams, + GSM_MobilityInfo_Type p_GSM_MobilityInfo, + NAS_PlmnId p_PLMN, + template (omit) GPRS_Timer3 p_BackOff := omit, + hexstring p_Identity := px_IMSI_Def) return template (value) NG_NAS_DL_Pdu_Type + { + var template (value) NG_NAS_DL_Message_Type v_GSMMsg; + var template (value) EAP_Message v_EAP; + + // Evaluate Authentication parameters and generate new keys + p_SecurityParams := f_NG_EAP_AuthenticationInit(p_SecurityParams, p_PLMN, hex2str(p_Identity)); // @sic R5s230215 sic@ + v_EAP := cs_EAP_Message (f_NG_EAP_ChallengeReq (p_SecurityParams, p_PLMN), omit); // @sic R5s201382 sic@ + v_GSMMsg := cs_NG_PDU_SESSION_AUTHENTICATION_COMMAND (cs_NG_PDU_SessionId(p_GSM_MobilityInfo.SessionId, omit), // @sic R5s00564 sic + tsc_PTI_Unassigned, + v_EAP, + omit); + return f_Get_NG_DLNASTransport (cs_PayloadContainerType(tsc_PayloadContainerESMMsg), // @sic R5w190208 sic@ + v_GSMMsg, + -, + p_GSM_MobilityInfo.SessionId, // @sic R5s190626, R5s200564 sic@ + omit, + omit, + p_BackOff); } + + /* + * @desc Check the PDU SESSION AUTHENTICATION COMPLETE, Piggybacked into the UL NAS Transport + * @param p_GSM_MobilityInfo + * @param p_SecurityParams + * @param p_ReceivedMsgs + * @param p_S_NSSAI (default value: *) + * @param p_DNN (default value: *) + * @param p_MA_PDUSessionInfo (default value: *) + * @param p_ReleaseAssistanceInd (default value: *) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Check_NG_PDUSessionAuthenticationComplete(GSM_MobilityInfo_Type p_GSM_MobilityInfo, + NG_NAS_SecurityParams_Type p_SecurityParams, + NG_NAS_UL_Pdu_Type p_ReceivedMsgs, + template S_NSSAI_Type p_S_NSSAI := *, + template DNN p_DNN := *, + template MA_PDUSessionInfo p_MA_PDUSessionInfo := *, // @sic R5s201387 Baseline Moving sic@ + template ReleaseAssistanceInd p_ReleaseAssistanceInd := *) return boolean + { + var boolean v_Result := false; + var NG_NAS_UL_Message_Type v_GSMMsg := p_ReceivedMsgs.PiggybackedPduList[0].Msg; + // Check NAS Transport msg first + if (not f_Check_NG_ULNASTransport (p_ReceivedMsgs.Msg, + cr_PayloadContainerType(tsc_PayloadContainerESMMsg), // @sic R5w190208 sic@ + p_GSM_MobilityInfo.SessionId, + omit, + omit, + p_S_NSSAI, + p_DNN, + omit, + p_MA_PDUSessionInfo, // @sic R5s201387 Baseline Moving sic@ + p_ReleaseAssistanceInd)) { + return v_Result; + } else if (match (v_GSMMsg, cr_NG_PDU_SESSION_AUTHENTICATION_COMPLETE (cr_NG_PDU_SessionId(-, p_GSM_MobilityInfo.SessionId), // @sic R5s00564 sic@ + tsc_PTI_Unassigned, + cr_EAP_Message(omit), + cr_ExtdPCOAny ifpresent))) { + // Check received EAP Msg + v_Result := f_NG_EAP_SuccessfulAuthenticationResponse(p_SecurityParams, v_GSMMsg.pdu_Session_Authentication_Complete.eapMessage.eapMsg); + } + return v_Result; + } + + /* + * @desc build the PDU SESSION AUTHENTICATION RESULT, Piggybacked into the DL NAS Transport + * @param p_GSM_MobilityInfo + * @param p_EAP + * @param p_BackOff (default value: omit) + * @return template (value) NG_NAS_DL_Pdu_Type + * @status APPROVED (NR5GC) + */ + function f_Get_PDUSessionAuthenticationResult(GSM_MobilityInfo_Type p_GSM_MobilityInfo, + template (value) EAP_Message p_EAP, + template (omit) GPRS_Timer3 p_BackOff := omit) return template (value) NG_NAS_DL_Pdu_Type + { + var template (value) NG_NAS_DL_Message_Type v_GSMMsg; + + v_GSMMsg := cs_NG_PDU_SESSION_AUTHENTICATION_RESULT (cs_NG_PDU_SessionId(p_GSM_MobilityInfo.SessionId, omit), // @sic R5s00564 sic@ + tsc_PTI_Unassigned, + p_EAP, + omit); + return f_Get_NG_DLNASTransport (cs_PayloadContainerType(tsc_PayloadContainerESMMsg), + v_GSMMsg, + -, + p_GSM_MobilityInfo.SessionId, + omit, + omit, + p_BackOff); + } + + /* + * @desc build the PDU SESSION ESTABLISHMENT ACCEPT, Piggybacked into the DL NAS Transport + * @param p_GSM_MobilityInfo + * @param p_GMM_MobilityInfo + * @param p_DNN + * @param p_SSC_Mode (default value: crs_SSC_Mode(-, '001'B) + * @param p_Session_AMBR (default value: cs_Session_AMBR ('06'O, '05'O, '0004'O, '05'O, '0004'O) + * @param p_PDU_SessionType (default value: omit) + * @param p_Cause (default value: omit) + * @param p_RQTimer (default value: omit) + * @param p_S_NSSAI (default value: cs_S_NSSAI_SST1eMBB_WithIEI) + * @param p_AlwaysOnPDUSessionInd (default value: omit) + * @param p_EAP (default value: omit) + * @param p_QoS_Rules (default value: omit) + * @param p_QoSFlowDescr (default value: omit) + * @param p_ExtdPCO (default value: omit) + * @param p_BackOff (default value: omit) + * @param p_BuildQosFlow (default value: omit) set to required value if a specific QoSFlow must be built (with interworkingWithEPS parameters) + * @param p_InterworkWithEPS (default value: true) only set to false when called from f_MultipleQoSPreamble_Part2 + * @param p_NGSM_NtwkFeatSupport (default value: omit) + * @param p_ServingPLMNRateCtrl (default value: omit) + * @param p_ATSSSContainer (default value: omit) + * @param p_ControlPlaneInd (default value: omit) + * @param p_IPHeaderCompConfig (default value: omit) + * @param p_EthernetHeaderCompConfig (default value: omit) + * @param p_ExtraPDN_Address (default value: omit) + * @param p_ServiceLvlAA (default value: omit) + * @param p_ReceivedMBS (default value: omit) + * @return template (value) NG_NAS_DL_Pdu_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_NG_PDUSessionEstablishmentAccept(GSM_MobilityInfo_Type p_GSM_MobilityInfo, + GMM_MobilityInfo_Type p_GMM_MobilityInfo, + template (value) DNN p_DNN, // @sic R5-205939 sic@ + template (value) SSC_Mode p_SSC_Mode := crs_SSC_Mode(-, '001'B), + template (value) Session_AMBR p_Session_AMBR := cs_Session_AMBR ('06'O, '05'O, '0004'O, '05'O, '0004'O), + template (omit) PDU_SessionType p_PDU_SessionType := omit, + template (omit) GMM_GSM_Cause p_Cause := omit, + template (omit) GPRS_Timer p_RQTimer := omit, + template (omit) S_NSSAI_Type p_S_NSSAI := omit, // @sic R5s190919, R5-211168 sic@ + template (omit) AlwaysOnPDUSessionInd p_AlwaysOnPDUSessionInd := omit, + template (omit) EAP_Message p_EAP := omit, + template (omit) QoS_Rules p_QoS_Rules := omit, + template (omit) QoSFlowDescr p_QoSFlowDescr := omit, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit, + template (omit) GPRS_Timer3 p_BackOff := omit, + template (omit) charstring p_BuildQosFlow := omit, + boolean p_InterworkWithEPS := true, + template (omit) NGSM_NetworkFeatureSupport p_NGSM_NtwkFeatSupport := omit, // @sic R5s201387 Baseline Moving sic@ + template (omit) ServingPLMNRateControl p_ServingPLMNRateCtrl := omit, + template (omit) ATSSSContainer p_ATSSSContainer := omit, + template (omit) ControlPlaneInd p_ControlPlaneInd := omit, + template (omit) IPHeaderCompressionConfig p_IPHeaderCompConfig := omit, + template (omit) EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := omit, + template (omit) PDN_AddressInfo_Type p_ExtraPDN_Address := omit, + template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit, + template (omit) ReceivedMBSContainer p_ReceivedMBS := omit) return template (value) NG_NAS_DL_Pdu_Type + { + var template (value) NG_NAS_DL_Message_Type v_GSMMsg; + var template (value) PDU_SessionType v_PDU_SessionType; + var B3_Type v_PDN_TypeToBeUsed; + var ListOfPDN_AddressInfo_Type v_PDN_Addresses := {}; + var template (omit) PDU_Address v_PDU_Address := omit; + var template (omit) AlwaysOnPDUSessionInd v_AlwaysOn := omit; + var template (value) QoS_Rules v_QoS_Rules := f_BuildDefaultQoSRules ("1"); // @sic R5-202585 sic@ + var template (value) QoSFlowDescr v_QoSFlowDescr; + var template (omit) ExtdProtocolConfigOptions v_ExtdPCO; + var template (omit) MappedEPSBearerContexts v_MappedEPSBearerContexts := omit; + var template (value) MappedEPSContext v_MappedEPSContext; + var bitstring v_EPSParam; // If used + var O1_Type v_EPSBearerId := '00'O; // If used + var boolean v_InterworkWithEPS := false; + var template (value) QoS_Flow v_QoS_Flow; + var octetstring v_ParamOctets; + var template (value) S_NSSAI_Type v_S_NSSAI; + + if (isvalue(p_PDU_SessionType)) { + v_PDU_SessionType := valueof(p_PDU_SessionType); + } else { + v_PDU_SessionType := cs_PDU_SessionType (p_GSM_MobilityInfo.SessionType); + } + + if (isvalue(p_GMM_MobilityInfo.GMMCap) and p_InterworkWithEPS) { // @sic R5s190464 R5s191172, R5s201367 sic@ + if (p_GMM_MobilityInfo.GMMCap.s1Cap == '1'B) { // @sic R5-195328 sic@ + v_InterworkWithEPS := true; + if (isvalue(p_GSM_MobilityInfo.EPS_Bearer)) { // @sic R5-204400 sic@ + v_EPSBearerId := hex2oct(int2hex(valueof(p_GSM_MobilityInfo.EPS_Bearer), 1) & '0'H); + } else { + FatalError(__FILE__, __LINE__, "EPS Supported but no bearer id calculated"); + } + if (p_GSM_MobilityInfo.PDUType == IMS_DNN) { // @sic R5-205939 sic@ + v_EPSParam := encvalue(f_Get_508_EPSQoS(DEF_2)); + } else { + v_EPSParam := encvalue(f_Get_508_EPSQoS(DEF_1)); + } + v_ParamOctets := bit2oct(v_EPSParam); // @sic R5s210302 sic@ + // This is only correct if the mappedEPSContext contains EPSQoS + v_MappedEPSContext := cs_OneMappedEPSContext(v_EPSBearerId, lengthof(v_ParamOctets), cs_EPSParameter_QoS(v_ParamOctets)); // @sic R5s210302 sic@ + v_MappedEPSBearerContexts := cs_OneMappedEPSBearerContextList (v_MappedEPSContext); + } + } + + if (isvalue(p_QoS_Rules)) { + v_QoS_Rules := valueof(p_QoS_Rules); + } else { + select(p_GSM_MobilityInfo.PDUType) { // @sic R5-221467 sic@ + case (IMS_DNN) { // @sic R5-205939 sic@ + v_QoS_Rules := f_BuildDefaultQoSRules ("2"); // @sic R5-202585 sic@ + } + case (URLLC_DNN) { // @sic R5-221467 sic@ + v_QoS_Rules := f_BuildDefaultQoSRules ("8"); + } + } + } // else use QoS 1 already defined above + + if (isvalue(p_QoSFlowDescr)) { // @sic R5-194896 sic@ + v_QoSFlowDescr := valueof(p_QoSFlowDescr); + } else { + if (isvalue(p_BuildQosFlow)) { // @sic R5-202550 sic@ + // need to build a specific QoS flow + v_QoS_Flow := f_BuildDefaultQosFlow(valueof(p_BuildQosFlow), v_InterworkWithEPS, v_EPSBearerId); + } else { + select(p_GSM_MobilityInfo.PDUType) { // @sic R5-221467 sic@ + case (IMS_DNN) { // @sic R5-205939 sic@ + v_QoS_Flow := cs_QoS_Flow2(v_InterworkWithEPS, v_EPSBearerId); // @sic R5-204400, R5s201323 sic@ + } + case (URLLC_DNN) { // @sic R5-221467 sic@ + v_QoS_Flow := f_BuildDefaultQosFlow ("7"); + } case else { + v_QoS_Flow := cs_QoS_Flow1(v_InterworkWithEPS, v_EPSBearerId); // @sic R5-204400, R5s201323 sic@ + } + } + } + v_QoSFlowDescr := cs_QoSFlowDescr ({v_QoS_Flow}); // @sic R5s220471 sic@ + } + + if (isvalue(p_S_NSSAI)) { // @sic R5-211168 sic@ + v_S_NSSAI := p_S_NSSAI; // compiler warning may be ignored due to check + } else { + // 38.508-1 table 4.8.4-1 specifies SST_eMMB for both Config#1 and #2, but there is currently no other option + // This to be updated when another Config is specified. FFS + select (p_GSM_MobilityInfo.PDUType) { // @sic R5s221179 sic@ + case (URLLC_DNN, Ethernet_DNN) { // @sic R5-227473 sic@ + v_S_NSSAI := cs_S_NSSAI_WithIEI('22'O, cs_S_NSSAI_SST2_URLLC); + } + case (MIOT_DNN) { + v_S_NSSAI := cs_S_NSSAI_WithIEI('22'O, cs_S_NSSAI_SST3_MIoT); + } + case (V2X_DNN) { + v_S_NSSAI := cs_S_NSSAI_WithIEI('22'O, cs_S_NSSAI_SST4_V2X); + } + case else { + v_S_NSSAI := cs_S_NSSAI_SST1eMBB_WithIEI; + } + } + } + + if (isvalue(p_AlwaysOnPDUSessionInd)) { + v_AlwaysOn := p_AlwaysOnPDUSessionInd; + } else if (isvalue(p_GSM_MobilityInfo.AlwaysOn)) { + v_AlwaysOn := cs_AlwaysOnNotAllowed; + if (match(p_GSM_MobilityInfo.PDUType, (URLLC_DNN, Ethernet_DNN))) { // @sic R5s221179, R5-227473 sic@ + v_AlwaysOn := cs_AlwaysOnAllowed; + } + } + + v_PDN_TypeToBeUsed := valueof(v_PDU_SessionType.typeValue); + select (v_PDN_TypeToBeUsed){ + case (tsc_PdnType_IPv4, tsc_PdnType_IPv6, tsc_PdnType_IPv4v6) { + v_PDN_Addresses[0] := f_PDN_AddressInfo_Get (f_NR5GC_GetPdnIndex(p_GSM_MobilityInfo)); // @sic R5s200643 sic@ + v_PDU_Address := f_NG_GetPDNAddress(f_CheckExtdPCOforIPallocationViaNas(p_GSM_MobilityInfo.PCO), v_PDN_TypeToBeUsed, v_PDN_Addresses[0]); // @sic R5s200571, R5s200643 sic@ + } + } + + if (isvalue(p_ExtdPCO)) { + v_ExtdPCO := p_ExtdPCO; + } else { + if (isvalue(p_ExtraPDN_Address)) { // @sic R5-213400, R5-217830 sic@ + v_PDN_Addresses[1] := valueof(p_ExtraPDN_Address); + } + v_ExtdPCO := f_NG_GetDefaultExtdProtocolConfigOptions (p_GSM_MobilityInfo.PCO, v_PDN_Addresses); // @sic R5s200643, R5-213400 sic@ + } + + v_GSMMsg := cs_NG_PDU_SESSION_ESTABLISHMENT_ACCEPT (cr_NG_PDU_SessionId(-, p_GSM_MobilityInfo.SessionId), // @sic R5s00564 sic@ + p_GSM_MobilityInfo.PTI, + p_SSC_Mode, + v_PDU_SessionType, + v_QoS_Rules, + p_Session_AMBR, + p_Cause, + v_PDU_Address, + p_RQTimer, + v_S_NSSAI, + v_AlwaysOn, + v_MappedEPSBearerContexts, // @sic R5-195328 sic@ + p_EAP, + v_QoSFlowDescr, + v_ExtdPCO, + p_DNN, // @sic R5-205939 sic@ + p_NGSM_NtwkFeatSupport, // @sic R5s201387 Baseline Moving sic@ + p_ServingPLMNRateCtrl, + p_ATSSSContainer, + p_ControlPlaneInd, + p_IPHeaderCompConfig, + p_EthernetHeaderCompConfig, + p_ServiceLvlAA, // @sic R5s221179 Baseline Moving sic@ + p_ReceivedMBS); + return f_Get_NG_DLNASTransport (cs_PayloadContainerType(tsc_PayloadContainerESMMsg), // @sic R5w190208 sic@ + v_GSMMsg, + -, + p_GSM_MobilityInfo.SessionId, // @sic R5s190338, R5s190626, R5s200564 sic@ + omit, + omit, + p_BackOff); + } + + /* + * @desc Check the PDU SESSION RELEASE REQUEST, Piggybacked into the UL NAS Transport + * @param p_GSM_MobilityInfo (by reference) + * @param p_PDUSessionGlobalInfo + * @param p_ReceivedMsgs + * @param p_PDU_SessionId + * @param p_PTI (default value: ?) + * @param p_Cause (default value: *) + * @param p_ExtdPCO (default value: *) + * @param p_OldPDU_SessionId (default value: *) + * @param p_RequestType (default value: *) + * @param p_S_NSSAI (default value: *) + * @param p_DNN (default value: *) + * @param p_AdditionalInfo (default value: *) + * @param p_MA_PDUSessionInfo (default value: *) + * @param p_ReleaseAssistanceInd (default value: *) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Check_NG_PDUSessionReleaseReq( out GSM_MobilityInfo_Type p_GSM_MobilityInfo, + PDUSessionInfoList_Type p_PDUSessionGlobalInfo, + NG_NAS_UL_Pdu_Type p_ReceivedMsgs, + template (present) O1_Type p_PDU_SessionId, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template GMM_GSM_Cause p_Cause := *, + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template NG_PDU_SessionId p_OldPDU_SessionId := *, + template NG_Request_Type p_RequestType := *, + template S_NSSAI_Type p_S_NSSAI := *, + template DNN p_DNN := *, + template AdditionalInformation p_AdditionalInfo := *, + template MA_PDUSessionInfo p_MA_PDUSessionInfo := *, // @sic R5s201387 Baseline Moving sic@ + template ReleaseAssistanceInd p_ReleaseAssistanceInd := *) return boolean + { + var boolean v_Result := false; + var boolean v_ExistingId := false; + var NG_NAS_UL_Message_Type v_GSMMsg := p_ReceivedMsgs.PiggybackedPduList[0].Msg; + var integer i; + + // Check NAS Transport msg first + v_Result := f_Check_NG_ULNASTransport (p_ReceivedMsgs.Msg, + cr_PayloadContainerType(tsc_PayloadContainerESMMsg), // @sic R5w190208 sic@ + p_PDU_SessionId, + p_OldPDU_SessionId, + p_RequestType, + p_S_NSSAI, + p_DNN, + p_AdditionalInfo, + p_MA_PDUSessionInfo, // @sic R5s201387 Baseline Moving sic@ + p_ReleaseAssistanceInd); + if (not v_Result) { + return v_Result; + } else if (match (v_GSMMsg, cr_NG_PDU_SESSION_RELEASE_REQUEST (cr_NG_PDU_SessionId(-, p_PDU_SessionId), // @sic R5s200564 sic@ + p_PTI, + p_Cause, + p_ExtdPCO))) { + v_Result := true; + } else { // @sic R5s190944 sic@ + return false; // @sic R5s220989 sic@ + } + // Default message contents specifies this must match an existing session establishment id + for (i := 0; i < lengthof(p_PDUSessionGlobalInfo); i := i+1) { + if (match (v_GSMMsg.pdu_Session_Release_Request.pduSessionId.sessionId, p_PDUSessionGlobalInfo[i].SessionId)) { + v_ExistingId := true; + } + } + if (not v_ExistingId) { + v_Result := v_ExistingId; + } + + // Store info for this release + p_GSM_MobilityInfo.SessionId := v_GSMMsg.pdu_Session_Release_Request.pduSessionId.sessionId; // @sic R5s200564 sic@ + p_GSM_MobilityInfo.PTI := v_GSMMsg.pdu_Session_Release_Request.procedureTransactionIdentifier; + p_GSM_MobilityInfo.SessionType := omit; + p_GSM_MobilityInfo.EPS_Bearer := omit; // @sic R5s201533 sic@ + p_GSM_MobilityInfo.PdnIndex := omit; // @sic R5s201533 sic@ + + if (ispresent (p_ReceivedMsgs.Msg.ul_Nas_Transport.dnn)) { + p_GSM_MobilityInfo.DNN := p_ReceivedMsgs.Msg.ul_Nas_Transport.dnn; + } else { + p_GSM_MobilityInfo.DNN := omit; + } + p_GSM_MobilityInfo.PDUType := f_GetPDNTypeFromDNN(p_GSM_MobilityInfo.DNN); // @sic R5-206296 sic@ + p_GSM_MobilityInfo.AlwaysOn := omit; + + if (ispresent (v_GSMMsg.pdu_Session_Release_Request.extdProtocolConfigurationOptions)) { + p_GSM_MobilityInfo.PCO := v_GSMMsg.pdu_Session_Release_Request.extdProtocolConfigurationOptions; + } else { + p_GSM_MobilityInfo.PCO := omit; + } + p_GSM_MobilityInfo.NSSAI := omit; // @sic R5s210408 sic@ + return v_Result; + } + + /* + * @desc build the PDU SESSION RELEASE COMMAND, Piggybacked into the DL NAS Transport + * @param p_PDU_SessionId + * @param p_Cause (default value: cs_GMM_GSM_Cause (omit, '00011010'B) + * @param p_BackOff (default value: omit) + * @param p_NGSM_CongestionReattemptInd (default value: omit) + * @param p_ExtdPCO (default value: omit) + * @param p_EAP (default value: omit) + * @param p_PTI (default value: '00'O) + * @param p_AccessType (default value: '00'O) + * @param p_ServiceLvlAA (default value: '00'O) + * @return template (value) NG_NAS_DL_Pdu_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_NG_PDUSessionReleaseCommand(template (value) O1_Type p_PDU_SessionId, + template (value) GMM_GSM_Cause p_Cause := cs_GMM_GSM_Cause (omit, '00011010'B), + template (omit) GPRS_Timer3 p_BackOff := omit, + template (omit) NGSM_CongestionReattemptInd p_NGSM_CongestionReattemptInd := omit, // @sic R5s190543 sic@, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit, + template (omit) EAP_Message p_EAP := omit, + ProcedureTransactionIdentifier p_PTI := '00'O, + template (omit) AccessType p_AccessType := omit, + template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit) return template (value) NG_NAS_DL_Pdu_Type // @sic R5s201063 sic@, + { + var template (value) NG_NAS_DL_Message_Type v_GSMMsg; + + v_GSMMsg := cs_NG_PDU_SESSION_RELEASE_COMMAND (cs_NG_PDU_SessionId (p_PDU_SessionId, omit), // @sic R5s200564 sic@ + p_PTI, + p_Cause, + p_BackOff, + p_EAP, + p_NGSM_CongestionReattemptInd, + p_ExtdPCO, + p_AccessType, // @sic R5s201387 Baseline Moving sic@ + p_ServiceLvlAA); // @sic R5s221179 Baseline Moving sic@ + return f_Get_NG_DLNASTransport (cs_PayloadContainerType(tsc_PayloadContainerESMMsg), // @sic R5w190208 sic@ + v_GSMMsg, + -, + p_PDU_SessionId, // @sic R5s190626, R5s200564 sic@ + omit, + omit, + p_BackOff); + } + + /* + * @desc Check the PDU SESSION RELEASE COMPLETE, Piggybacked into the UL NAS Transport + * @param p_PDUSessionGlobalInfo (by reference) + * @param p_ReceivedMsgs + * @param p_PDU_SessionId + * @param p_PTI (default value: ?) + * @param p_Cause (default value: *) + * @param p_ExtdPCO (default value: *) + * @param p_OldPDU_SessionId (default value: *) + * @param p_RequestType (default value: *) + * @param p_S_NSSAI (default value: *) + * @param p_DNN (default value: *) + * @param p_AdditionalInfo (default value: *) + * @param p_MA_PDUSessionInfo (default value: *) + * @param p_ReleaseAssistanceInd (default value: *) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Check_NG_PDUSessionReleaseComplete( inout PDUSessionInfoList_Type p_PDUSessionGlobalInfo, + NG_NAS_UL_Pdu_Type p_ReceivedMsgs, + template (present) O1_Type p_PDU_SessionId, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template GMM_GSM_Cause p_Cause := *, + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template NG_PDU_SessionId p_OldPDU_SessionId := *, + template NG_Request_Type p_RequestType := *, + template S_NSSAI_Type p_S_NSSAI := *, + template DNN p_DNN := *, + template AdditionalInformation p_AdditionalInfo := *, + template MA_PDUSessionInfo p_MA_PDUSessionInfo := *, // @sic R5s201387 Baseline Moving sic@ + template ReleaseAssistanceInd p_ReleaseAssistanceInd := *) return boolean + { + var boolean v_Result := false; + var NG_NAS_UL_Message_Type v_GSMMsg := p_ReceivedMsgs.PiggybackedPduList[0].Msg; + var PDUSessionInfoList_Type v_NewList := {}; // @sic R5s190626 sic@ + var integer i; + var integer j := 0; + + // Check NAS Transport msg first + v_Result := f_Check_NG_ULNASTransport (p_ReceivedMsgs.Msg, + cr_PayloadContainerType(tsc_PayloadContainerESMMsg), // @sic R5w190208 sic@ + p_PDU_SessionId, + p_OldPDU_SessionId, + p_RequestType, + p_S_NSSAI, + p_DNN, + p_AdditionalInfo, + p_MA_PDUSessionInfo, // @sic R5s201387 Baseline Moving sic@ + p_ReleaseAssistanceInd); + if (not v_Result) { + return v_Result; + } else if (match (v_GSMMsg, cr_NG_PDU_SESSION_RELEASE_COMPLETE (cr_NG_PDU_SessionId(-, p_PDU_SessionId), // @sic R5s200564 sic@ + p_PTI, + p_Cause, + p_ExtdPCO))) { + v_Result := true; + } else { // @sic R5s190944 sic@ + v_Result := false; + } + // Delete any stored info for this Session Id as it's now released + for (i := 0; i < lengthof(p_PDUSessionGlobalInfo); i := i+1) { // @sic R5s190388 sic@ + if (not (v_GSMMsg.pdu_Session_Release_Complete.pduSessionId.sessionId == p_PDUSessionGlobalInfo[i].SessionId)) { // @sic R5s190388, R5s200564 sic@ + v_NewList[j] := p_PDUSessionGlobalInfo[i]; + j := j+ 1; + } + } + + p_PDUSessionGlobalInfo := v_NewList; + + return v_Result; + } + + /* + * @desc Check the PDU SESSION MODIFICATION REQUEST, Piggybacked into the UL NAS Transport + * @param p_GSM_MobilityInfo (by reference) + * @param p_PDUSessionGlobalInfo + * @param p_ReceivedMsgs + * @param p_PDU_SessionId (default value: ?) + * @param p_PTI (default value: ?) + * @param p_NG_UE_SM_Cap (default value: *) + * @param p_Cause (default value: *) + * @param p_MaxNumPacketFilters (default value: *) + * @param p_AlwaysOnPDUSessionReq (default value: *) + * @param p_IntegrityProtMaxDataRate (default value: *) + * @param p_QoS_Rules (default value: *) + * @param p_QoSFlowDescr (default value: *) + * @param p_MappedEPSBearerContexts (default value: *) + * @param p_ExtdPCO (default value: *) + * @param p_OldPDU_SessionId (default value: *) + * @param p_RequestType (default value: *) + * @param p_S_NSSAI (default value: *) + * @param p_DNN (default value: *) + * @param p_AdditionalInfo (default value: *) + * @param p_MA_PDUSessionInfo (default value: *) + * @param p_ReleaseAssistanceInd (default value: *) + * @param p_PortManagementInfoContainer (default value: *) + * @param p_IPHeaderCompConfig (default value: *) + * @param p_EthernetHeaderCompConfig (default value: *) + * @param p_RequestedMBS (default value: *) + * @param p_ServiceLvlAA (default value: *) + * @return boolean + * @status APPROVED (NR5GC, NR5GC_IRAT) + */ + function f_Check_NG_PDUSessionModificationReq( out GSM_MobilityInfo_Type p_GSM_MobilityInfo, + PDUSessionInfoList_Type p_PDUSessionGlobalInfo, + NG_NAS_UL_Pdu_Type p_ReceivedMsgs, + template (present) O1_Type p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template NG_UE_SM_Cap p_NG_UE_SM_Cap := *, + template GMM_GSM_Cause p_Cause := *, + template MaxNumPacketFilters p_MaxNumPacketFilters := *, + template AlwaysOnPDUSessionReq p_AlwaysOnPDUSessionReq := *, + template IntegrityProtMaxDataRate p_IntegrityProtMaxDataRate := *, + template QoS_Rules p_QoS_Rules := *, + template QoSFlowDescr p_QoSFlowDescr := *, + template MappedEPSBearerContexts p_MappedEPSBearerContexts := *, + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template NG_PDU_SessionId p_OldPDU_SessionId := *, + template NG_Request_Type p_RequestType := *, + template S_NSSAI_Type p_S_NSSAI := *, + template DNN p_DNN := *, + template AdditionalInformation p_AdditionalInfo := *, + template MA_PDUSessionInfo p_MA_PDUSessionInfo := *, // @sic R5s201387 Baseline Moving sic@ + template ReleaseAssistanceInd p_ReleaseAssistanceInd := *, + template PortManagementInfoContainer p_PortManagementInfoContainer := *, + template IPHeaderCompressionConfig p_IPHeaderCompConfig := *, + template EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := *, + template RequestedMBSContainer p_RequestedMBS := *, + template ServiceLvlAAContainer p_ServiceLvlAA := *) return boolean + { + var boolean v_Result := false; + var boolean v_ExistingId := false; + var NG_NAS_UL_Message_Type v_GSMMsg := p_ReceivedMsgs.PiggybackedPduList[0].Msg; + var integer i; + + // Check NAS Transport msg first + v_Result := f_Check_NG_ULNASTransport (p_ReceivedMsgs.Msg, + cr_PayloadContainerType(tsc_PayloadContainerESMMsg), // @sic R5w190208 sic@ + p_PDU_SessionId, + p_OldPDU_SessionId, + p_RequestType, + p_S_NSSAI, + p_DNN, + p_AdditionalInfo, + p_MA_PDUSessionInfo, // @sic R5s201387 Baseline Moving sic@ + p_ReleaseAssistanceInd); + if (not v_Result) { + return v_Result; + } else if (match (v_GSMMsg, cr_NG_PDU_SESSION_MODIFICATION_REQUEST (cr_NG_PDU_SessionId(-, p_PDU_SessionId), // @sic R5s200564 sic@ + p_PTI, + p_NG_UE_SM_Cap, + p_Cause, + p_MaxNumPacketFilters, + p_AlwaysOnPDUSessionReq, + p_IntegrityProtMaxDataRate, + p_QoS_Rules, + p_QoSFlowDescr, + p_MappedEPSBearerContexts, + p_ExtdPCO, + p_PortManagementInfoContainer, // @sic R5s201387 Baseline Moving sic@ + p_IPHeaderCompConfig, + p_EthernetHeaderCompConfig, + p_RequestedMBS, // @sic R5s221179 Baseline Moving sic@ + p_ServiceLvlAA))) { + v_Result := true; + } else { // @sic R5s190944 sic@ + return false; // @sic R5s220989 sic@ + } + // Default message contents specifies this must match an existing session establishment id + for (i := 0; i < lengthof(p_PDUSessionGlobalInfo); i := i+1) { + if (match (v_GSMMsg.pdu_Session_Modification_Request.pduSessionId.sessionId, p_PDUSessionGlobalInfo[i].SessionId)) { // @sic R5s200564 sic@ + v_ExistingId := true; + p_GSM_MobilityInfo := p_PDUSessionGlobalInfo[i]; // @sic R5s220577 sic@ + } + } + if (not v_ExistingId) { + v_Result := v_ExistingId; + } + + // Store info for this modification + p_GSM_MobilityInfo.SessionId := v_GSMMsg.pdu_Session_Modification_Request.pduSessionId.sessionId; // @sic R5s200564 sic@ + p_GSM_MobilityInfo.PTI := v_GSMMsg.pdu_Session_Modification_Request.procedureTransactionIdentifier; + p_GSM_MobilityInfo.SessionType := omit; + p_GSM_MobilityInfo.EPS_Bearer := omit; // @sic R5s201533 sic@ + p_GSM_MobilityInfo.PdnIndex := omit; // @sic R5s201533 sic@ + + // @sic R5s220577 sic@ + if (ispresent (p_ReceivedMsgs.Msg.ul_Nas_Transport.dnn)) { + p_GSM_MobilityInfo.DNN := p_ReceivedMsgs.Msg.ul_Nas_Transport.dnn; + p_GSM_MobilityInfo.PDUType := f_GetPDNTypeFromDNN(p_GSM_MobilityInfo.DNN); // @sic R5-206296 sic@ + } + if (ispresent (v_GSMMsg.pdu_Session_Modification_Request.alwaysOnPDUSessionReq)) { + p_GSM_MobilityInfo.AlwaysOn := v_GSMMsg.pdu_Session_Modification_Request.alwaysOnPDUSessionReq; + } + if (ispresent (v_GSMMsg.pdu_Session_Modification_Request.extdProtocolConfigurationOptions)) { + p_GSM_MobilityInfo.PCO := v_GSMMsg.pdu_Session_Modification_Request.extdProtocolConfigurationOptions; + } + return v_Result; + } + + /* + * @desc build the PDU SESSION MODIFICATION COMMAND, Piggybacked into the DL NAS Transport + * @param p_PDU_SessionId + * @param p_GSM_MobilityInfo (default value: omit) + * @param p_Cause (default value: omit) + * @param p_Session_AMBR (default value: omit) + * @param p_RQTimer (default value: omit) + * @param p_AlwaysOnPDUSessionInd (default value: omit) + * @param p_QoS_Rules (default value: omit) + * @param p_QoSFlowDescr (default value: omit) + * @param p_MappedEPSBearerContexts (default value: omit) + * @param p_ExtdPCO (default value: omit) + * @param p_ATSSSContainer (default value: omit) + * @param p_IPHeaderCompConfig (default value: omit) + * @param p_PortManagementInfoContainer (default value: omit) + * @param p_ServingPLMNRateCtrl (default value: omit) + * @param p_EthernetHeaderCompConfig (default value: omit) + * @param p_ReceivedMBS (default value: omit) + * @param p_ServiceLvlAA (default value: omit) + * @param p_BackOff (default value: omit) + * @return template (value) NG_NAS_DL_Pdu_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT) + */ + function f_Get_NG_PDUSessionModificationCommand(template (value) O1_Type p_PDU_SessionId, + template (omit) GSM_MobilityInfo_Type p_GSM_MobilityInfo := omit, + template (omit) GMM_GSM_Cause p_Cause := omit, + template (omit) Session_AMBR p_Session_AMBR := omit, + template (omit) GPRS_Timer p_RQTimer := omit, + template (omit) AlwaysOnPDUSessionInd p_AlwaysOnPDUSessionInd := omit, + template (omit) QoS_Rules p_QoS_Rules := omit, + template (omit) QoSFlowDescr p_QoSFlowDescr := omit, + template (omit) MappedEPSBearerContexts p_MappedEPSBearerContexts := omit, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit, + template (omit) ATSSSContainer p_ATSSSContainer := omit, // @sic R5s201387 Baseline Moving sic@ + template (omit) IPHeaderCompressionConfig p_IPHeaderCompConfig := omit, + template (omit) PortManagementInfoContainer p_PortManagementInfoContainer := omit, + template (omit) ServingPLMNRateControl p_ServingPLMNRateCtrl := omit, + template (omit) EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := omit, + template (omit) ReceivedMBSContainer p_ReceivedMBS := omit, + template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit, + template (omit) GPRS_Timer3 p_BackOff := omit) return template (value) NG_NAS_DL_Pdu_Type + { + var template (value) NG_NAS_DL_Message_Type v_GSMMsg; + var template (value) O1_Type v_PDU_SessionId := p_PDU_SessionId; + var ProcedureTransactionIdentifier v_PTI := '00'O; + var template (omit) AlwaysOnPDUSessionInd v_AlwaysOn := omit; + + if (isvalue(p_GSM_MobilityInfo)) { // Modification was triggered by UE sending Request message + v_PDU_SessionId := p_GSM_MobilityInfo.SessionId; + v_PTI := valueof(p_GSM_MobilityInfo.PTI); + if (isvalue(p_GSM_MobilityInfo.AlwaysOn)) { + v_AlwaysOn := cs_AlwaysOnNotAllowed; + if (valueof(p_GSM_MobilityInfo.PDUType) == URLLC_DNN) { // @sic R5s221179 sic@ + v_AlwaysOn := cs_AlwaysOnAllowed; + } + } + } + if (isvalue(p_AlwaysOnPDUSessionInd)) { + v_AlwaysOn := p_AlwaysOnPDUSessionInd; + } + + v_GSMMsg := cs_NG_PDU_SESSION_MODIFICATION_COMMAND (cs_NG_PDU_SessionId(v_PDU_SessionId, omit), // @sic R5s200564 sic@ + v_PTI, + p_Cause, + p_Session_AMBR, + p_RQTimer, + v_AlwaysOn, + p_QoS_Rules, + p_QoSFlowDescr, + p_MappedEPSBearerContexts, + p_ExtdPCO, + p_ATSSSContainer, // @sic R5s201387 Baseline Moving sic@ + p_IPHeaderCompConfig, + p_PortManagementInfoContainer, + p_ServingPLMNRateCtrl, + p_EthernetHeaderCompConfig, + p_ReceivedMBS, // @sic R5s221179 Baseline Moving sic@ + p_ServiceLvlAA); // @sic R5s221179 Baseline Moving sic@ + return f_Get_NG_DLNASTransport (cs_PayloadContainerType(tsc_PayloadContainerESMMsg), // @sic R5w190208 sic@ + v_GSMMsg, + -, + v_PDU_SessionId, // @sic R5s190626 sic@ + omit, + omit, + p_BackOff); + } + + /* + * @desc Check the PDU SESSION MODIFICATION COMPLETE, Piggybacked into the UL NAS Transport + * @param p_ReceivedMsgs + * @param p_PDU_SessionId + * @param p_PTI (default value: ?) + * @param p_ExtdPCO (default value: *) + * @param p_OldPDU_SessionId (default value: *) + * @param p_RequestType (default value: *) + * @param p_S_NSSAI (default value: *) + * @param p_DNN (default value: *) + * @param p_AdditionalInfo (default value: *) + * @param p_MA_PDUSessionInfo (default value: *) + * @param p_ReleaseAssistanceInd (default value: *) + * @param p_PortManagementInfoContainer (default value: *) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT) + */ + function f_Check_NG_PDUSessionModificationComplete( NG_NAS_UL_Pdu_Type p_ReceivedMsgs, + template (present) O1_Type p_PDU_SessionId, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template NG_PDU_SessionId p_OldPDU_SessionId := *, + template NG_Request_Type p_RequestType := *, + template S_NSSAI_Type p_S_NSSAI := *, + template DNN p_DNN := *, + template AdditionalInformation p_AdditionalInfo := *, + template MA_PDUSessionInfo p_MA_PDUSessionInfo := *, // @sic R5s201387 Baseline Moving sic@ + template ReleaseAssistanceInd p_ReleaseAssistanceInd := *, + template PortManagementInfoContainer p_PortManagementInfoContainer := *) return boolean + { + var boolean v_Result := false; + var NG_NAS_UL_Message_Type v_GSMMsg := p_ReceivedMsgs.PiggybackedPduList[0].Msg; + + // Check NAS Transport msg first + v_Result := f_Check_NG_ULNASTransport (p_ReceivedMsgs.Msg, + cr_PayloadContainerType(tsc_PayloadContainerESMMsg), // @sic R5w190208 sic@ + p_PDU_SessionId, + p_OldPDU_SessionId, + p_RequestType, + p_S_NSSAI, + p_DNN, + p_AdditionalInfo, + p_MA_PDUSessionInfo, // @sic R5s201387 Baseline Moving sic@ + p_ReleaseAssistanceInd); + if (not v_Result) { + return v_Result; + } else if (match (v_GSMMsg, cr_NG_PDU_SESSION_MODIFICATION_COMPLETE (cr_NG_PDU_SessionId(-, p_PDU_SessionId), // @sic R5s200564 sic@ + p_PTI, + p_ExtdPCO, + p_PortManagementInfoContainer))) { // @sic R5s201387 Baseline Moving sic@ + v_Result := true; + } else { // @sic R5s190944 sic@ + v_Result := false; + } + return v_Result; + } + + /* + * @desc build the PDU SESSION ESTABLISHMENT REJECT COMMAND, Piggybacked into the DL NAS Transport + * @param p_PDU_SessionId + * @param p_PTI + * @param p_Cause (default value: cs_GMM_GSM_Cause (omit, '00011010'B) + * @param p_BackOff (default value: omit) + * @param p_SSC_Mode (default value: omit) + * @param p_EAP (default value: omit) + * @param p_ExtdPCO (default value: omit) + * @param p_ReAttemptIndicator (default value: omit) + * @param p_NGSM_CongestionReattemptInd (default value: omit) + * @param p_ServiceLvlAA (default value: omit) + * @return template (value) NG_NAS_DL_Pdu_Type + * @status APPROVED (NR5GC) + */ + function f_Get_NG_PDUSessionEstablishmentReject(template (value) O1_Type p_PDU_SessionId, + template (value) ProcedureTransactionIdentifier p_PTI, + template (value) GMM_GSM_Cause p_Cause := cs_GMM_GSM_Cause (omit, '00011010'B), + template (omit) GPRS_Timer3 p_BackOff := omit, + template (omit) AllowedSSCMode p_SSC_Mode := omit, + template (omit) EAP_Message p_EAP := omit, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit, + template (omit) ReAttemptIndicator p_ReAttemptIndicator := omit, + template (omit) NGSM_CongestionReattemptInd p_NGSM_CongestionReattemptInd := omit, + template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit) return template (value) NG_NAS_DL_Pdu_Type + { + // @sic R5-198184 sic@ + var template (value) NG_NAS_DL_Message_Type v_GSMMsg; + v_GSMMsg := cs_NG_PDU_SESSION_ESTABLISHMENT_REJECT (cs_NG_PDU_SessionId (p_PDU_SessionId, omit), + p_PTI, + p_Cause, + p_BackOff, + p_SSC_Mode, + p_EAP, + p_ExtdPCO, + p_ReAttemptIndicator, + p_NGSM_CongestionReattemptInd, // @sic R5s201387 Baseline Moving sic@ + p_ServiceLvlAA); // @sic R5s221179 Baseline Moving sic@ + return f_Get_NG_DLNASTransport (cs_PayloadContainerType(tsc_PayloadContainerESMMsg), + v_GSMMsg, + -, + p_PDU_SessionId, + omit, + omit, + p_BackOff); + } + + /* + * @desc Check the GSM STATUS, Piggybacked into the UL NAS Transport + * @param p_ReceivedMsgs + * @param p_PDU_SessionId + * @param p_PTI (default value: ?) + * @param p_Cause + * @param p_OldPDU_SessionId (default value: *) + * @param p_RequestType (default value: *) + * @param p_S_NSSAI (default value: *) + * @param p_DNN (default value: *) + * @param p_AdditionalInfo (default value: *) + * @param p_MA_PDUSessionInfo (default value: *) + * @param p_ReleaseAssistanceInd (default value: *) + * @return boolean + * @status APPROVED (NR5GC) + */ + function f_Check_NG_GSMStatus(NG_NAS_UL_Pdu_Type p_ReceivedMsgs, + template (present) O1_Type p_PDU_SessionId, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template (present) GMM_GSM_Cause p_Cause, + template NG_PDU_SessionId p_OldPDU_SessionId := *, + template NG_Request_Type p_RequestType := *, + template S_NSSAI_Type p_S_NSSAI := *, + template DNN p_DNN := *, + template AdditionalInformation p_AdditionalInfo := *, + template MA_PDUSessionInfo p_MA_PDUSessionInfo := *, // @sic R5s201387 Baseline Moving sic@ + template ReleaseAssistanceInd p_ReleaseAssistanceInd := *) return boolean + { + var boolean v_Result := false; + var NG_NAS_UL_Message_Type v_GSMMsg := p_ReceivedMsgs.PiggybackedPduList[0].Msg; + + // Check NAS Transport msg first + v_Result := f_Check_NG_ULNASTransport (p_ReceivedMsgs.Msg, + cr_PayloadContainerType(tsc_PayloadContainerESMMsg), // @sic R5w190208 sic@ + p_PDU_SessionId, + p_OldPDU_SessionId, + p_RequestType, + p_S_NSSAI, + p_DNN, + p_AdditionalInfo, + p_MA_PDUSessionInfo, // @sic R5s201387 Baseline Moving sic@ + p_ReleaseAssistanceInd); + if (not v_Result) { + return v_Result; + } else if (match (v_GSMMsg, cr_NG_GSM_STATUS (cr_NG_PDU_SessionId(-, p_PDU_SessionId), // @sic R5s200564 sic@ + p_PTI, + p_Cause))) { + v_Result := true; + } else { // @sic R5s190944 sic@ + v_Result := false; + } + return v_Result; + } + + /* + * @desc check the UL NAS TRANSPORT + * @param p_NASTransport + * @param p_PayloadContainerType + * @param p_PDU_SessionId (default value: *) + * @param p_OldPDU_SessionId (default value: *) + * @param p_RequestType (default value: *) + * @param p_S_NSSAI (default value: *) + * @param p_DNN (default value: *) + * @param p_AdditionalInfo (default value: *) + * @param p_MA_PDUSessionInfo (default value: *) + * @param p_ReleaseAssistanceInd (default value: *) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Check_NG_ULNASTransport(NG_NAS_UL_Message_Type p_NASTransport, + template (present) PayloadContainerType p_PayloadContainerType, + template O1_Type p_PDU_SessionId := *, + template NG_PDU_SessionId p_OldPDU_SessionId := *, + template NG_Request_Type p_RequestType := *, + template S_NSSAI_Type p_S_NSSAI := *, + template DNN p_DNN := *, + template AdditionalInformation p_AdditionalInfo := *, + template MA_PDUSessionInfo p_MA_PDUSessionInfo := *, // @sic R5s201387 Baseline Moving sic@ + template ReleaseAssistanceInd p_ReleaseAssistanceInd := *) return boolean + { + var template NG_PDU_SessionId v_PDU_SessionId := omit; + if (match(tsc_PayloadContainerESMMsg, p_PayloadContainerType.container) or match(tsc_PayloadContainerCIoTUserData, p_PayloadContainerType.container)) { // @sic R5s201387 Baseline Moving sic@ + if(ispresent(p_PDU_SessionId)) { // @sic R5s190626, R5s200564 sic@ + v_PDU_SessionId := cr_NG_PDU_SessionId ('12'O, p_PDU_SessionId); // @sic R5s200564 sic@ + } + } + + return match(p_NASTransport, cr_NG_UL_NAS_TRANSPORT(p_PayloadContainerType, + v_PDU_SessionId, + p_OldPDU_SessionId, + p_RequestType, + p_S_NSSAI, + p_DNN, + p_AdditionalInfo, + p_MA_PDUSessionInfo, // @sic R5s201387 Baseline Moving sic@ + p_ReleaseAssistanceInd)); + } + + /* + * @desc build the DL NAS TRANSPORT + * @param p_PayloadContainerType + * @param p_PiggyBackedGSMMsg + * @param p_Payload (default value: cs_DummyPayloadContainer) + * @param p_PDU_SessionId (default value: omit) + * @param p_AdditionalInfo (default value: omit) + * @param p_Cause (default value: omit) + * @param p_BackOff (default value: omit) + * @param p_LowerBoundTimerValue (default value: omit) + * @return template (value) NG_NAS_DL_Pdu_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_Get_NG_DLNASTransport(template (value) PayloadContainerType p_PayloadContainerType, + template (omit) NG_NAS_DL_Message_Type p_PiggyBackedGSMMsg, + template (value) PayloadContainer p_Payload := cs_DummyPayloadContainer, // dummy value for p_PiggyBackedGSMMsg is encoded in emulator + template (omit) O1_Type p_PDU_SessionId := omit, + template (omit) AdditionalInformation p_AdditionalInfo := omit, + template (omit) GMM_GSM_Cause p_Cause := omit, + template (omit) GPRS_Timer3 p_BackOff := omit, + template (omit) GPRS_Timer3 p_LowerBoundTimerValue := omit) return template (value) NG_NAS_DL_Pdu_Type + { + var template (omit) NG_PDU_SessionId v_PDU_SessionId := omit; + var template (value) NG_NAS_DL_Message_Type v_GMMMsg; + + if (match(tsc_PayloadContainerESMMsg, p_PayloadContainerType.container) and isvalue(p_PDU_SessionId)) { // @sic R5s190626 sic@ + v_PDU_SessionId := cs_NG_PDU_SessionId(p_PDU_SessionId); + } + + v_GMMMsg := cs_NG_DL_NAS_TRANSPORT (p_PayloadContainerType, + p_Payload, + v_PDU_SessionId, + p_AdditionalInfo, + p_Cause, + p_BackOff, + p_LowerBoundTimerValue); // @sic R5s221179 Baseline Moving sic@ + if (isvalue(p_PiggyBackedGSMMsg)) { // @sic R5s210234 sic@ + return cs_NG_NAS_DL_PduWithPiggybacking (v_GMMMsg, p_PiggyBackedGSMMsg); + } else { + return cs_NG_NAS_DL_PduWithoutPiggyback (v_GMMMsg); + } + } + + /* + * @desc build the NSSAI_DELETE_REQUEST test mode message + * @param p_DeleteType + * @param p_PLMN (default value: omit) + * @param p_AccessType (default value: omit) + * @return template (value) NG_NAS_DL_Message_Type + * @status APPROVED (NR5GC) + */ + function f_Get_NSSAI_DELETE_REQUEST(DeleteNSSAI_Type p_DeleteType, + template (omit) NAS_PlmnId p_PLMN := omit, + template (omit) B2_Type p_AccessType := omit) return template (value) NG_NAS_DL_Message_Type + { + var template (omit) NAS_PlmnId v_PLMN := omit; // compiler warning may be ignored due to check + var B2_Type v_AccessType := '10'B; // must set to a valid value, so assume for both if not specified + var template (omit) AllowedNSSAI v_AllowedNSSAI := omit; + var B8_Type v_DeleteNSSAIType; + + select (p_DeleteType) { + case (Delete_Default_Configured) { + v_DeleteNSSAIType := tsc_DeleteNSSAI_DefaultConfiguredNSSAI; + } + case (Delete_Configured) { + v_DeleteNSSAIType := tsc_DeleteNSSAI_ConfiguredNSSAI; + if (isvalue(p_PLMN)){ + v_PLMN := p_PLMN; + } else { + v_PLMN := '000000'O + } + } + case (Delete_Allowed) { + v_DeleteNSSAIType := tsc_DeleteNSSAI_AllowedNSSAI; + if (isvalue(p_PLMN)){ + v_PLMN := p_PLMN; + } else { + v_PLMN := '000000'O + } + if (isvalue(p_AccessType)) { + v_AccessType := valueof(p_AccessType); + } + v_AllowedNSSAI := cs_AllowedNSSAI (v_PLMN, v_AccessType); // compiler warning may be ignored due to check + } + } + return cs_NSSAI_DELETE_REQUEST (v_DeleteNSSAIType, + v_PLMN, + v_AllowedNSSAI); + } + + // =========================================================================== + + /* + * @desc NR5GC GetPdnIndex + * @param p_GSM_MobilityInfo + * @return PDN_Index_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NR5GC_GetPdnIndex(GSM_MobilityInfo_Type p_GSM_MobilityInfo) return PDN_Index_Type + { + // @sic R5-200256, R5-202550, R5-206296 sic@ + // Make sure the PDN is the same in both EUTRA and NR @sic R5s210149 sic@ + return f_GetMultiPdnIndex(p_GSM_MobilityInfo.PDUType); + } + + //---------------------------------------------------------------------------- + /* + * @desc PDN Address TS 24.501 clause 9.11.4.10 + * Default value according to TS 36.508 table 6.6.1-1 (which requires a 'static' value) and table 4.7.3-6 + * Based on f_EUTRA_NB_GetPDNAddress + * @param p_IPv4AllocationViaNas + * @param p_PDN_TypeToBeUsed + * @param p_PDN_Address + * @return PDU_Address + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_GetPDNAddress(boolean p_IPv4AllocationViaNas, + B3_Type p_PDN_TypeToBeUsed, + PDN_AddressInfo_Type p_PDN_Address) return PDU_Address + { + var O4_Type v_Addr4 := f_Convert_IPv4Addr2OctString(p_PDN_Address.UE_IPAddressIPv4); // @sic R5s200643 sic@ + var octetstring v_Addr6:= f_Convert_IPv6Addr2OctString(p_PDN_Address.UE_IPAddressIPv6); // @sic R5s200643 sic@ + var Type4Length_Type v_IeLength; + var octetstring v_AddressInfo; + var PDU_Address v_PDU_Address; + + // set IP addresses + v_Addr6 := substr(v_Addr6, 8, 8); // Use only the IPv6 interface identifier, which are the 8 least significant octets of theIPv6 address + + if (not p_IPv4AllocationViaNas) { // => IPv4 address via DHCP signalling (if IPv4) + v_Addr4 := '00000000'O; + } + + // set IE + select (p_PDN_TypeToBeUsed) { + case (tsc_PdnType_IPv4) { + if (not pc_IPv4) { + FatalError(__FILE__, __LINE__, "IPv4 selected but is not supported"); + } + v_IeLength := '05'O; + v_AddressInfo := v_Addr4; + } + case (tsc_PdnType_IPv6) { + if (not pc_IPv6) { + FatalError(__FILE__, __LINE__, "IPv6 selected but is not supported"); + } + v_IeLength := '09'O; + v_AddressInfo := v_Addr6; + } + case (tsc_PdnType_IPv4v6) { + if (not pc_IPv4 or not pc_IPv6) { + FatalError(__FILE__, __LINE__, "IPv4v6 selected but at least one is not supported"); + } + v_IeLength := '0D'O; + v_AddressInfo := v_Addr6 & v_Addr4; + } + } + + v_PDU_Address := { + iei := '29'O, + iel := v_IeLength, + spare := tsc_Spare4, // @sic R5s201526 sic@ + si16LLA := '0'B, // @sic R5s201526 sic@ + typeValue := p_PDN_TypeToBeUsed, + adressInfo := v_AddressInfo, + ipv6Address := omit // @sic R5s210267 sic@ + }; + + return v_PDU_Address; + } + + /* + * @desc Checks DNN to see if it requests IMS, based on f_EUTRA_GetAPNForIMS + * @param p_DNNFromReq + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT) + */ + /* + function f_NG_IsDNNForIMS(DNN p_DNNFromReq) return boolean + { + return match(IMS_DNN, f_GetPDNTypeFromDNN (p_DNNFromReq)); + } +*/ + /* + * @desc Returns the DNN Name to be used in Accept message + * returns "IMS" and the operator id "mnc.mcc.gprs" + * @param p_PLMN + * @return octetstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_GetDNNForIMS(NAS_PlmnId p_PLMN) return octetstring + { // @sic R5s201327 sic@ : removed the test of the incoming DNN. Always return the IMS DNN + var hexstring v_PLMN_hexstring := oct2hex(p_PLMN); + var charstring v_MNC := ""; + var charstring v_MCC := ""; + var octetstring v_OperatorId; + var CharStringList_Type v_LabelList; + + v_MCC := int2str(hex2int(v_PLMN_hexstring[1])) & int2str(hex2int(v_PLMN_hexstring[0])) & int2str(hex2int(v_PLMN_hexstring[3])); + v_MNC := int2str(hex2int(v_PLMN_hexstring[5])) & int2str(hex2int(v_PLMN_hexstring[4])); + if (v_PLMN_hexstring[2] != 'F'H) { + v_MNC := v_MNC & int2str(hex2int(v_PLMN_hexstring[2])); + } + + v_LabelList := {f_APN_MccMncLabel("mnc", v_MNC), f_APN_MccMncLabel("mcc", v_MCC), "gprs" }; + v_OperatorId := f_DomainName_EncodeLabels(v_LabelList); + + return f_DomainName_EncodeLabels({"IMS"}) & v_OperatorId; + } + + //---------------------------------------------------------------------------- + type record of PDN_AddressInfo_Type ListOfPDN_AddressInfo_Type; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + /* + * @desc Function used to check whether the UE requests a P-CSCF address in its PCO + * If the UE does not support IMS, or doesn't request a P-CSCF address, the function returns omit + * @param p_ConfigOptionsRX + * @param p_PDN_AddressInfo + * @return template (omit) NAS_ExtdProtocolConfigOptions_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_NAS_GetExtdProtocolConfigOptionList(NAS_ExtdProtocolConfigOptions_Type p_ConfigOptionsRX, + ListOfPDN_AddressInfo_Type p_PDN_AddressInfo) return template (omit) NAS_ExtdProtocolConfigOptions_Type + { + var template (omit) NAS_ExtdProtocolConfigOptions_Type v_ProtocolContainerList := omit; + var integer v_PcoCnt := 0; + var O2_Type v_ProtocolId; + var octetstring v_Contents; + var integer i; + var integer j; + + for (j := 0; j < lengthof(p_PDN_AddressInfo); j := j + 1) { // @sic R5-213400 sic@ + for (i := 0; i < lengthof(p_ConfigOptionsRX); i := i + 1) { + + v_ProtocolId := p_ConfigOptionsRX[i].protocolID; + v_Contents := ''O; + + select (v_ProtocolId) { // See 24.008 Table 10.5.154 + case ('0001'O) { // P-CSCF IPv6 address + v_Contents := f_Convert_IPv6Addr2OctString(p_PDN_AddressInfo[j].PCSCF_IPAddressIPv6); // @sic R5s200643 sic@ + } + case ('000C'O) { // P-CSCF IPv4 address + v_Contents := f_Convert_IPv4Addr2OctString(p_PDN_AddressInfo[j].PCSCF_IPAddressIPv4); // @sic R5s200643 sic@ + } + case ('0003'O) { // DNS Server IPv6 address @sic R5-224166 sic@ + if (f_GetTestcaseAttrib_XCAP(testcasename())) { // @sic R5-231185 sic@ + v_Contents := f_Convert_IPv6Addr2OctString(p_PDN_AddressInfo[j].DNS_ServerAddressIPv6); + } + } + case ('000D'O) { // DNS Server IPv4 address @sic R5-224166 sic@ + if (f_GetTestcaseAttrib_XCAP(testcasename())) { // @sic R5-231185 sic@ + v_Contents := f_Convert_IPv4Addr2OctString(p_PDN_AddressInfo[j].DNS_ServerAddressIPv4); + } + } + } + + if (lengthof(v_Contents) > 0) { + v_ProtocolContainerList[v_PcoCnt] := cs_ProtocolContainer(v_ProtocolId, v_Contents); + v_PcoCnt := v_PcoCnt + 1; + } + } + } + return v_ProtocolContainerList; + } + + /* + * @desc check PS Data Off is deactivated if included in the given list, or omit otherwise + * @param p_Pco + * @param p_Status (default value: '01'O) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_ExtdProtocolConfigOptions_CheckPSDataOff(template (omit) ExtdProtocolConfigOptions p_Pco, + O1_Type p_Status:='01'O) return boolean + { + var template (omit) octetstring v_Content := f_ExtdProtocolConfigOptions_Get(p_Pco, '0017'O); + var boolean v_Result := false; + + if (isvalue(v_Content)) { + if (lengthof(v_Content) > 0) { + v_Result := match (p_Status, v_Content); //@sic R5s220424 R5s220828 sic@ + } + } + return v_Result; + } + + //---------------------------------------------------------------------------- + /* + * @desc wrapper for f_NG_NAS_GetExtdProtocolConfigOptionList + * @param p_Pco + * @param p_PDN_AddressInfo + * @return template (omit) ExtdProtocolConfigOptions + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_GetDefaultExtdProtocolConfigOptions(template (omit) ExtdProtocolConfigOptions p_Pco, + ListOfPDN_AddressInfo_Type p_PDN_AddressInfo) return template (omit) ExtdProtocolConfigOptions + { + var template (omit) NAS_ExtdProtocolConfigOptions_Type v_ProtocolContainerList := omit; + var ExtdProtocolConfigOptions v_ProtocolConfigOptionsRX; + + if (isvalue(p_Pco)) { + v_ProtocolConfigOptionsRX := valueof(p_Pco); + if (ispresent(p_Pco.pco)) { + v_ProtocolContainerList := f_NG_NAS_GetExtdProtocolConfigOptionList(v_ProtocolConfigOptionsRX.pco, p_PDN_AddressInfo); // @sic R5s200643 sic@ + } + } + + return f_NG_NAS_ExtdProtocolConfigOptionsTX(v_ProtocolContainerList); + } + + /* + * @desc Common function to build up ProtocolConfigOptions + * @param p_ProtocolContainers + * @return template (omit) ExtdProtocolConfigOptions + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_NAS_ExtdProtocolConfigOptionsTX(template (omit) NAS_ExtdProtocolConfigOptions_Type p_ProtocolContainers) return template (omit) ExtdProtocolConfigOptions + { + if (isvalue(p_ProtocolContainers)) { + + return f_NAS_ExtdProtocolConfigOptionsTX (p_ProtocolContainers); // @sic R5s200643 sic@ + } else { + return omit; + } + } + + /* + * @desc To calculate the Bit Rate for 5G QoSFlow for the UT command + * @param p_Unit - 1st octet of Qos Parameter + * @param p_Value - 2nd & 3rd octets of Qos Parameter + * @return integer + * @status APPROVED (NR5GC) + */ + function fl_Calculate5G_BitRate(integer p_Unit, integer p_Value) return integer + { + var integer v_BitRate := p_Value; + var integer v_Exponent := 0; + + if (p_Unit > 0) { // Do nothing if 0 + v_Exponent := ((p_Unit-1) mod 5); // multiply by either 1, 4, 16, 64 or 256 + if (v_Exponent > 0) { + v_BitRate := v_BitRate * f_Power(4, v_Exponent); + } + v_Exponent := (((p_Unit-1) / 5) * 3); // multiply by multiples of 1000 + if (v_Exponent > 0) { + v_BitRate := v_BitRate * f_Power(10, v_Exponent); + } + } + return v_BitRate; + } + + /* + * @desc To convert a 5G QoSFlow into a charstring for the UT command + * @param p_QoSFlow + * @return charstring + * @status APPROVED (NR5GC) + */ + function f_Convert5G_QoSFlow_ForATCommand(template (value) QoS_Flow p_QoSFlow) return charstring + { + var QoS_Flow v_QoSFlow := valueof(p_QoSFlow); + var charstring v_QoSstring := ""; + var integer i; + var O1_Type v_Identifier; + var octetstring v_Contents; + var integer v_QI5 := 0; + var integer v_Unit := 0; + var integer v_DL_GFBR := 0; + var integer v_UL_GFBR := 0; + var integer v_DL_MFBR := 0; + var integer v_UL_MFBR := 0; + + for (i := 0; i < bit2int(v_QoSFlow.numOfParameters); i := i+1){ + v_Identifier := v_QoSFlow.parameterList[i].id; // @sic R5s190673 sic@ + v_Contents := v_QoSFlow.parameterList[i].qosParam; + select (v_Identifier) { // check the 1st octet of each parameter + case ('01'O){ + v_QI5 := oct2int(v_Contents); + } + case ('03'O){ + v_Unit := oct2int(substr(v_Contents, 0, 1)); + v_DL_GFBR := oct2int(substr(v_Contents, 1, 2)); + v_DL_GFBR := fl_Calculate5G_BitRate(v_Unit, v_DL_GFBR); + } + case ('02'O){ + v_Unit := oct2int(substr(v_Contents, 0, 1)); + v_UL_GFBR := oct2int(substr(v_Contents, 1, 2)); + v_UL_GFBR := fl_Calculate5G_BitRate(v_Unit, v_UL_GFBR); + } + case ('05'O){ + v_Unit := oct2int(substr(v_Contents, 0, 1)); + v_DL_MFBR := oct2int(substr(v_Contents, 1, 2)); + v_DL_MFBR := fl_Calculate5G_BitRate(v_Unit, v_DL_MFBR); + } + case ('04'O){ + v_Unit := oct2int(substr(v_Contents, 0, 1)); + v_UL_MFBR := oct2int(substr(v_Contents, 1, 2)); + v_UL_MFBR := fl_Calculate5G_BitRate(v_Unit, v_UL_MFBR); + } + } + } + if (v_QI5 != 0) { + v_QoSstring := v_QoSstring & int2str(v_QI5); + } else { + FatalError(__FILE__, __LINE__, "There must be a 5QI in the QosFlow"); + } + if (v_DL_GFBR != 0) { + v_QoSstring := v_QoSstring &","& int2str(v_DL_GFBR); + } + if (v_UL_GFBR != 0) { + v_QoSstring := v_QoSstring &","& int2str(v_UL_GFBR); + } + if (v_DL_MFBR != 0) { + v_QoSstring := v_QoSstring &","& int2str(v_DL_MFBR); + } + if (v_UL_MFBR != 0) { + v_QoSstring := v_QoSstring &","& int2str(v_UL_MFBR); + } + return v_QoSstring; + } + + /* + * @desc to convert the PDU_SessionStatus into an integer list of transferred session ids + * @param p_SessionStatus + * @return IntegerList_Type + * @status APPROVED (NR5GC_IRAT) + */ + function f_NG_ConvertPDU_SessionStatus (PDU_SessionStatus p_SessionStatus) return IntegerList_Type + { + var IntegerList_Type v_List := {}; + var integer v_ListPosition := 0; + var integer v_TypePosition; + var integer v_SessionId; + + // check ids 7 - 0 + v_SessionId := 7; + for (v_TypePosition := 0; v_TypePosition < 8; v_TypePosition := v_TypePosition + 1) { + if (p_SessionStatus.psi0_7[v_TypePosition] == '1'B) { + v_List[v_ListPosition] := v_SessionId; + v_ListPosition := v_ListPosition + 1; + } + v_SessionId := v_SessionId - 1; + } + + // check ids 15 to 8 + v_SessionId := 15; + for (v_TypePosition := 0; v_TypePosition < 8; v_TypePosition := v_TypePosition + 1) { + if (p_SessionStatus.psi8_15[v_TypePosition] == '1'B) { + v_List[v_ListPosition] := v_SessionId; + v_ListPosition := v_ListPosition + 1; + } + v_SessionId := v_SessionId - 1; + } + + return v_List; + } + + +} diff --git a/ttcn/Lib3GPP/NG_NAS/NG_NAS_Common.ttcn b/ttcn/Lib3GPP/NG_NAS/NG_NAS_Common.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..e2e974cea37a4114a014159d6ca33e65dc36e729 --- /dev/null +++ b/ttcn/Lib3GPP/NG_NAS/NG_NAS_Common.ttcn @@ -0,0 +1,727 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-09-14 09:54:06 +0200 (Thu, 14 Sep 2023) $ +// $Rev: 37128 $ +/******************************************************************************/ + +module NG_NAS_Common { + + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + import from NG_NAS_TypeDefs all; + import from NAS_AuxiliaryDefsAndFunctions all; + import from NAS_CommonTemplates all; + import from Parameters all; + import from CommonIP all; + import from LoopbackIP_PacketFilterTest all; + + type record GMM_MobilityInfo_Type { /* structured type to be stored & passed in/out of GMM Msgs + @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + NG_MobileIdentity Guti, + NG_GMM_Cap GMMCap optional, + NG_UE_SecurityCapability UECap optional, + UE_NetworkCap S1NwkCap optional, + PDU_SessionStatus SessionStatus optional, + EPS_BearerContextStatus EPSBearerStatus optional, // @sic R5-206426 sic@ + UERadioCapId UERadioCapId optional // @sic R5-206419 sic@ + } with { + variant "FIELDORDER(msb)"; + }; + + type record GSM_MobilityInfo_Type { /* structured type to be stored & passed in/out of GSM Msgs + @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + O1_Type SessionId, // @sic R5s200564 sic@ + ProcedureTransactionIdentifier PTI, + PDU_PDN_DNN_Type PDUType, // @sic R5-206296 sic@ + B3_Type SessionType optional, + DNN DNN optional, + AlwaysOnPDUSessionInd AlwaysOn optional, + ExtdProtocolConfigOptions PCO optional, + integer EPS_Bearer optional, // @sic R5s201094 sic@ + PDN_Index_Type PdnIndex optional, // @sic R5s201094 sic@ + S_NSSAI_Type NSSAI optional // @sic R5s210148 sic@ + } with { + variant "FIELDORDER(msb)"; + }; + + type record of GSM_MobilityInfo_Type PDUSessionInfoList_Type; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + type enumerated DeleteNSSAI_Type {Delete_Default_Configured, Delete_Configured, Delete_Allowed}; /* @status APPROVED (NR5GC) */ + + const ExtdProtocolDiscriminator tsc_EPD_GMM := '01111110'B; // from 24.007 /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const ExtdProtocolDiscriminator tsc_EPD_GSM := '00101110'B; // from 24.007 /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + // NAS message types acc. 24.501 cl.9.7 + const MessageType tsc_MT_NG_RegistrationRequest := '01000001'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_RegistrationAccept := '01000010'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_RegistrationComplete := '01000011'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_RegistrationReject := '01000100'B; /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + const MessageType tsc_MT_NG_DeregistrationRequest_MO := '01000101'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_DeregistrationAccept_MO := '01000110'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_DeregistrationRequest_MT := '01000111'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_DeregistrationAccept_MT := '01001000'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_ServiceRequest := '01001100'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_ServiceReject := '01001101'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_ServiceAccept := '01001110'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_CP_Service_Request := '01001111'B; + const MessageType tsc_MT_NG_NetworkSliceSpecificAuthenticationCommand := '01010000'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_NetworkSliceSpecificAuthenticationComplete:= '01010001'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_NetworkSliceSpecificAuthenticationResult := '01010010'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_ConfigurationUpdateCommand := '01010100'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_ConfigurationUpdateComplete := '01010101'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_AuthenticationRequest := '01010110'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_AuthenticationResponse := '01010111'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_AuthenticationReject := '01011000'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_AuthenticationFailure := '01011001'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_AuthenticationResult := '01011010'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_IdentityRequest := '01011011'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_IdentityResponse := '01011100'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_SecurityModeCommand := '01011101'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_SecurityModeComplete := '01011110'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_SecurityModeReject := '01011111'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_GMM_Status := '01100100'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_Notification := '01100101'B; + const MessageType tsc_MT_NG_NotificationResponse := '01100110'B; + const MessageType tsc_MT_NG_UL_NASTransport := '01100111'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_DL_NASTransport := '01101000'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + const MessageType tsc_MT_NG_PDUSessionEstablishmentRequest := '11000001'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_PDUSessionEstablishmentAccept := '11000010'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_PDUSessionEstablishmentReject := '11000011'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_PDUSessionAuthenticationCommand := '11000101'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_PDUSessionAuthenticationComplete:= '11000110'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_PDUSessionAuthenticationResult := '11000111'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_PDUSessionModificationRequest := '11001001'B; /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + const MessageType tsc_MT_NG_PDUSessionModificationReject := '11001010'B; + const MessageType tsc_MT_NG_PDUSessionModificationCommand := '11001011'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT) */ + const MessageType tsc_MT_NG_PDUSessionModificationComplete := '11001100'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT) */ + const MessageType tsc_MT_NG_PDUSessionModificationCommandReject := '11001101'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MT_NG_PDUSessionReleaseRequest := '11010001'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_PDUSessionReleaseReject := '11010010'B; + const MessageType tsc_MT_NG_PDUSessionReleaseCommand := '11010011'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_PDUSessionReleaseComplete := '11010100'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const MessageType tsc_MT_NG_GSM_Status := '11010110'B; /* @status APPROVED (NR5GC) */ + + const MessageType tsc_MsgType_NSSAI_DeleteReq := '10100110'B; /* @sic R5-201207 sic@ + @status APPROVED (NR5GC) */ + const MessageType tsc_MsgType_NSSAI_DeleteResp := '10100111'B; /* @sic R5s200339 sic@ + @status APPROVED (NR5GC) */ + const MessageType tsc_MsgType_SetUAIReq := '10101000'B; /* @status APPROVED (NR5GC) */ + const MessageType tsc_MsgType_SetUAIResp := '10101001'B; /* @status APPROVED (NR5GC) */ + + const B8_Type tsc_DeleteNSSAI_DefaultConfiguredNSSAI := '00000000'B; /* @status APPROVED (NR5GC) */ + const B8_Type tsc_DeleteNSSAI_ConfiguredNSSAI := '00000001'B; /* @sic R5s200339 sic@ + @status APPROVED (NR5GC) */ + const B8_Type tsc_DeleteNSSAI_AllowedNSSAI := '00000010'B; /* @sic R5s200339 sic@ + @status APPROVED (NR5GC) */ + + type enumerated TypeOfRegistration_Type {Initial_NoSecurity, Initial_Secure, Mobility, Periodic, Emergency, SNPN_Onboarding}; /* @sic R5-233987 sic@ @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + type enumerated RegistrationAccessType {Access_3GPP, Non3GPP, Both_3GPP_Non3GPP}; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + type enumerated NG_ALL_STATE_Type {STATE_OFF_0A, STATE_OFF_0B, STATE_IDLE_1A, STATE_INACTIVE_2A, STATE_CONNECTED_3A, STATE_CONNECTED_3A_T3540, /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + STATE_DEREGISTERED, STATE_EMERGENCY_RELEASE_CONNECTED, STATE_EMERGENCY_RELEASE_IDLE}; // Used for Postamble @sic R5-214620 sic@ + type NG_ALL_STATE_Type NG_STATE_Type (STATE_OFF_0A, STATE_OFF_0B, STATE_IDLE_1A, STATE_INACTIVE_2A, STATE_CONNECTED_3A, STATE_CONNECTED_3A_T3540); // Used for Preamble /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + const B3_Type tsc_NG_RegistrationInitial := '001'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const B3_Type tsc_NG_RegistrationMobility := '010'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const B3_Type tsc_NG_RegistrationPeriodic := '011'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const B3_Type tsc_NG_RegistrationEmergency := '100'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const B3_Type tsc_NG_RegistrationSNPN := '101'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const B3_Type tsc_NG_RegResult_3GPP := '001'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const B3_Type tsc_NG_RegResult_Non3GPP := '010'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const B3_Type tsc_NG_RegResult_Both := '011'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + const B4_Type tsc_PayloadContainerSMSMsg := '0010'B; /* @status APPROVED (NR5GC) */ + const B4_Type tsc_PayloadContainerLPPMsg := '0011'B; /* @status APPROVED (POS) */ + const B4_Type tsc_PayloadContainerSORMsg := '0100'B; /* @status APPROVED (NR5GC) */ + const B4_Type tsc_PayloadContainerUEPolicyMsg := '0101'B; + const B4_Type tsc_PayloadContainerCIoTUserData := '1000'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + const O1_Type tsc_QoSFlowParameter_5QI := '01'O; /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + const O1_Type tsc_QoSFlowParameter_GFBR_UL := '02'O; /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + const O1_Type tsc_QoSFlowParameter_GFBR_DL := '03'O; /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + const O1_Type tsc_QoSFlowParameter_MFBR_UL := '04'O; /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + const O1_Type tsc_QoSFlowParameter_MFBR_DL := '05'O; /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + const O1_Type tsc_QoSFlowParameter_AvWindow := '06'O; + const O1_Type tsc_QoSFlowParameter_EPSBearerId := '07'O; /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + + type enumerated NG_NAS_NumOfPLMN_Type {NG_AllCellsOnSamePLMN, NG_CellsOnDifferentPLMN}; /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + + const B32_Type tsc_NG_TMSI1 := oct2bit('C2345678'O); /* Maps to EUTRA M-TMSI + @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + const NAS_IdType tsc_IdType_NG_Noidentity := '000'B; /* @status APPROVED (NR5GC) */ + const NAS_IdType tsc_IdType_NG_SUCI := '001'B; /* @status APPROVED (NR5GC) */ + const NAS_IdType tsc_IdType_NG_GUTI := '010'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const NAS_IdType tsc_IdType_NG_IMEI := '011'B; /* @status APPROVED (NR5GC) */ + const NAS_IdType tsc_IdType_NG_STMSI := '100'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + const NAS_IdType tsc_IdType_NG_IMEISV := '101'B; /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + const NAS_CauseValue_Type tsc_NR5GCCause_ServNetNotAuthorized := '01001001'B; /* @status APPROVED (NR5GC) */ + const NAS_CauseValue_Type tsc_NR5GCCause_InvalidPDUSessionIdentity := '00101011'B; /* @status APPROVED (NR5GC) */ + const NAS_CauseValue_Type tsc_NR5GCCause_NoSuitableCellsInTA := '00001111'B; /* @status APPROVED (NR5GC) */ + const NAS_CauseValue_Type tsc_NR5GCCause_Congestion := '00010110'B; /* @status APPROVED (NR5GC) */ + + type record NG_NAS_GutiParameters_Type { /* to be stored in component + @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + B8_Type AMF_RegionId, + B10_Type AMF_SetId, + B6_Type AMF_Pointer, + B32_Type NG_TMSI + }; + + template (value) NG_PacketFilterList cs_PacketFilterList_RemoteAddress (B4_Type p_Id, octetstring p_Component) := + { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + new := {{ + spare := tsc_Spare2, + direction := '11'B, // bi-directional + packetFilterId := p_Id, + len := int2oct(lengthof(p_Component), 1), + contents := p_Component + + }} + }; + + template (value) QoS_Rule cs_QoS_RuleRemoteAccess (O1_Type p_Id, + B1_Type p_DQR, + O1_Type p_Precedence, + B6_Type p_FlowId, + octetstring p_Component, + O2_Type p_Length, + B4_Type p_FilterId) := + { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + identifier := p_Id, + iel := p_Length, + ruleOperationCode := '001'B, + dqrBit := p_DQR, + numOfPacketFilters := '0001'B, + packetFilterList := cs_PacketFilterList_RemoteAddress (p_FilterId, p_Component), + precedence := p_Precedence, + spare := tsc_Spare1, + segregation := tsc_Spare1, + flowIdentifier := p_FlowId + }; + + template (value) NG_NAS_GutiParameters_Type cs_NG_NAS_GutiParameters(B8_Type p_AMF_RegionId, + B32_Type p_NG_TMSI) := + { // to be stored in component + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + AMF_RegionId := p_AMF_RegionId, + AMF_SetId := int2bit(1, 10), + AMF_Pointer := int2bit(1,6), + NG_TMSI := p_NG_TMSI + }; + + template (value) NG_MobileIdentity cs_NG_MobileIdentity_Guti(template (omit) IEI8_Type p_IEI, + octetstring p_Guti) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, + iel := int2oct(lengthof(p_Guti) + 1, 2), // 11 octets in case of GUTI + idDigit1 := '1111'B, // in case of the GUTI + oddEvenInd := '0'B, // in case of the GUTI + typeOfId := tsc_IdType_NG_GUTI, + otherDigits := p_Guti + }; + + template (value) NG_MobileIdentity cs_NG_MobileIdentity_STMSI(template (omit) IEI8_Type p_IEI, + octetstring p_Guti) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, + iel := int2oct(lengthof(p_Guti) + 1, 2), // 11 octets in case of GUTI + idDigit1 := '1111'B, // in case of the GUTI + oddEvenInd := '0'B, // in case of the GUTI + typeOfId := tsc_IdType_NG_STMSI, + otherDigits := p_Guti + }; + + template (present) NG_MobileIdentity cr_NG_MobileIdentity_TypeOfId(template (present) B4_Type p_FirstDigit, + template (present) B1_Type p_OddEvenInd, + template (present) octetstring p_OtherDigits, + template (present) NAS_IdType p_TypeOfId := tsc_IdType_NG_IMEISV + ) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := omit, + iel := ?, // @sic R5s190719 sic@ + idDigit1 := p_FirstDigit, // 4 bits + oddEvenInd := p_OddEvenInd, // 1 bit + typeOfId := p_TypeOfId, // 3 bits + otherDigits := p_OtherDigits + }; + + template (present) NG_MobileIdentity cr_NG_MobileIdentitySUCI(template (present) B4_Type p_SUPIFormat, + template (present) octetstring p_OtherDigits) := + { /* @status APPROVED (NR5GC) */ + iei := omit, + iel := ?, // @sic R5s190719 sic@ + idDigit1 := p_SUPIFormat, // 4 bits + oddEvenInd := '0'B, // 1 bit + typeOfId := tsc_IdType_NG_SUCI, // 3 bits + otherDigits := p_OtherDigits + }; + + template (present) NG_MobileIdentity cr_NG_MobileIdentityNoIdentity := + { /* @status APPROVED (NR5GC) */ + iei := omit, + iel := '0001'O, + idDigit1 := tsc_Spare4, // 4 bits + oddEvenInd := tsc_Spare1, // 1 bit + typeOfId := tsc_IdType_NG_Noidentity, // 3 bits + otherDigits := omit + }; + + //------------------------------------------------------------------------------------------ + /* + * @desc convert from PLMN and GutiParameters_Type to NAS NG_MobileIdentity + * @param p_NasPLMN + * @param p_GutiParams + * @param p_IEI (default value: '77'O) + * @return template (value) NG_MobileIdentity + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_GutiParameters2MobileIdentity(NAS_PlmnId p_NasPLMN, + NG_NAS_GutiParameters_Type p_GutiParams, + template (omit) IEI8_Type p_IEI := '77'O) return template (value) NG_MobileIdentity + { + var bitstring v_AMFId := p_GutiParams.AMF_RegionId & p_GutiParams.AMF_SetId & p_GutiParams.AMF_Pointer; + var octetstring v_GutiString := p_NasPLMN & bit2oct(v_AMFId) & bit2oct(p_GutiParams.NG_TMSI); + return cs_NG_MobileIdentity_Guti(p_IEI, v_GutiString); + } + + //------------------------------------------------------------------------------------------ + /* + * @desc convert from GutiParameters_Type to NAS NG_MobileIdentity + * @param p_IEI + * @param p_GutiParams + * @return template (value) NG_MobileIdentity + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_S_TMSI2MobileIdentity(template (omit) IEI8_Type p_IEI, + NG_NAS_GutiParameters_Type p_GutiParams) return template (value) NG_MobileIdentity + { + var bitstring v_AMFId := p_GutiParams.AMF_SetId & p_GutiParams.AMF_Pointer; + var octetstring v_STMSIString := bit2oct(v_AMFId) & bit2oct(p_GutiParams.NG_TMSI); + return cs_NG_MobileIdentity_STMSI(p_IEI, v_STMSIString); + } + + //---------------------------------------------------------------------------- + /* + * @desc Convert from IMEISV of type hexstring to NAS NG_MobileIdentity + * @param p_IMEISV + * @return template (present) NG_MobileIdentity + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_Imeisv2MobileIdentity(hexstring p_IMEISV) return template (present) NG_MobileIdentity + { + var integer v_ImeiLength := lengthof(p_IMEISV); + var integer v_Odd := (v_ImeiLength rem 2); + var octetstring v_Other := f_ImsiImei2Octetstring (p_IMEISV); + var B4_Type v_FirstDigit := hex2bit(p_IMEISV[0]); + var B1_Type v_OddEvenInd := int2bit(v_Odd, 1); + + return cr_NG_MobileIdentity_TypeOfId(v_FirstDigit, v_OddEvenInd, v_Other); + } + + //---------------------------------------------------------------------------- + /* + * @desc To convert the RejectedS_NSSAI into a charstring for the AT command + * @param p_S_NSSAI + * @return charstring + * @status APPROVED (NR5GC) + */ + function f_ConvertRejectedS_NSSAI_ForATCommand(template (value) RejectedS_NSSAI p_S_NSSAI) return charstring + { + var RejectedS_NSSAI v_S_NSSAI := valueof(p_S_NSSAI); + var charstring v_S_NSSAIstring := ""; + + v_S_NSSAIstring := oct2str(v_S_NSSAI.sst); + if (ispresent(v_S_NSSAI.sd)) { + v_S_NSSAIstring := v_S_NSSAIstring & "." & oct2str(v_S_NSSAI.sd); + } + v_S_NSSAIstring := v_S_NSSAIstring & "#" & int2str(bit2int(v_S_NSSAI.causeValue)); // @sic R5s201142 sic@ + return v_S_NSSAIstring; + } + + /* + * @desc To convert the NSSAI (list of S_NSSAI_Type) into a charstring for the AT command + * @param p_NSSAI + * @return charstring + * @status APPROVED (NR5GC) + */ + function f_Convert_ListOfRejectedNSSAI_ForATCommand(template (value) RejectedNSSAI p_NSSAI) return charstring + { + var integer i; + var integer v_Length := lengthof(p_NSSAI.rejectS_NSSAI); + var charstring v_ListOfNSSAI := ""; + var charstring v_S_NSSAI := ""; + + for (i := 0; i < v_Length; i := i+1) { + v_S_NSSAI := f_ConvertRejectedS_NSSAI_ForATCommand(p_NSSAI.rejectS_NSSAI[i]); + v_ListOfNSSAI := v_ListOfNSSAI & v_S_NSSAI; + if (i < (v_Length-1)) { // add a colon to all but the last one + v_ListOfNSSAI := v_ListOfNSSAI & ":"; + } + } + return v_ListOfNSSAI; + } + + /* + * @desc To convert the NSSAI (list of ExtdRejectedNSSAI) into a charstring for the MMI command + * @param p_NSSAI + * @return charstring + */ + function f_Convert_ListOfExtdRejectedNSSAI_ForMMICommand(template (value) ExtdRejectedNSSAI p_NSSAI) return charstring + { + var integer i; + var integer v_Length := lengthof(p_NSSAI.partialXtd); + var charstring v_ListOfNSSAI := ""; + var charstring v_S_NSSAI := ""; + + for (i := 0; i < v_Length; i := i+1) { + v_S_NSSAI := f_ConvertPartialXtdRejectedS_NSSAI_ForMMICommand(p_NSSAI.partialXtd[i]); + v_ListOfNSSAI := v_ListOfNSSAI & v_S_NSSAI; + if (i < (v_Length-1)) { // add a colon to all but the last one + v_ListOfNSSAI := v_ListOfNSSAI & ":"; + } + } + return v_ListOfNSSAI; + } + + /* + * @desc To convert the PartialXtdRejectedNSSAI into a charstring for the AT command + * @param p_Partial_NSSAI + * @return charstring + */ + function f_ConvertPartialXtdRejectedS_NSSAI_ForMMICommand(template (value) PartialXtdRejectedNSSAI p_Partial_NSSAI) return charstring + { + var PartialXtdRejectedNSSAI v_Partial_NSSAI := valueof(p_Partial_NSSAI); + var XtdRejectedS_NSSAI_List v_Xtd_List; + var XtdRejectedS_NSSAI v_XtdRejectedS_NSSAI; + var integer v_NumOfElements; + var integer i; + var charstring v_S_NSSAIstring := ""; + + if (ischosen (v_Partial_NSSAI.type0)) { + v_NumOfElements := bit2int(v_Partial_NSSAI.type0.numOfElements); + v_Xtd_List := v_Partial_NSSAI.type0.rejectS_NSSAI; + } else { // must be type 1 + // ignore extra field: back off timer + v_NumOfElements := bit2int(v_Partial_NSSAI.type1.numOfElements); + v_Xtd_List := v_Partial_NSSAI.type1.rejectS_NSSAI; + } + + for (i := 0; i < v_NumOfElements; i := i+1) { + v_XtdRejectedS_NSSAI := v_Xtd_List[i]; + v_S_NSSAIstring := v_S_NSSAIstring & f_ConvertXtdRejectedS_NSSAI_ForMMICommand(v_XtdRejectedS_NSSAI); + if (i < (v_NumOfElements-1)) { // add a colon to all but the last one + v_S_NSSAIstring := v_S_NSSAIstring & ":"; + } + } + return v_S_NSSAIstring; + } + + /* + * @desc To convert the XtdRejectedS_NSSAI into a charstring for the AT command + * @param p_Xtd_NSSAI + * @return charstring + */ + function f_ConvertXtdRejectedS_NSSAI_ForMMICommand(XtdRejectedS_NSSAI p_Xtd_NSSAI) return charstring + { + var charstring v_S_NSSAIstring := ""; + + v_S_NSSAIstring := f_ConvertS_NSSAI_VForMMICommand(p_Xtd_NSSAI.snssai); + v_S_NSSAIstring := v_S_NSSAIstring & "#" & int2str(bit2int(p_Xtd_NSSAI.causeValue)); + return v_S_NSSAIstring; + } + + /* + * @desc To convert the S_NSSAI_V into a charstring for the AT command + * @param p_S_NSSAI + * @return charstring + */ + function f_ConvertS_NSSAI_VForMMICommand(S_NSSAI_V p_S_NSSAI) return charstring + { + var charstring v_S_NSSAIstring := ""; + + v_S_NSSAIstring := oct2str(p_S_NSSAI.sst); + if (ispresent(p_S_NSSAI.sd)) { + v_S_NSSAIstring := v_S_NSSAIstring & "." & oct2str(p_S_NSSAI.sd); + } + if (ispresent(p_S_NSSAI.mappedSST)) { + v_S_NSSAIstring := v_S_NSSAIstring & "." & oct2str(p_S_NSSAI.mappedSST); + } + if (ispresent(p_S_NSSAI.mappedSD)) { + v_S_NSSAIstring := v_S_NSSAIstring & "." & oct2str(p_S_NSSAI.mappedSD); + } + return v_S_NSSAIstring; + } + + /* + * @desc To convert the S_NSSAI into a charstring for the AT command + * @param p_S_NSSAI + * @return charstring + * @status APPROVED (IMS, NR5GC) + */ + function f_ConvertS_NSSAI_ForATCommand(template (value) S_NSSAI_LV p_S_NSSAI) return charstring + { + var S_NSSAI_LV v_S_NSSAI := valueof(p_S_NSSAI); + var charstring v_S_NSSAIstring := ""; + + v_S_NSSAIstring := oct2str(v_S_NSSAI.vPart.sst); // @sic R5s221179 Baseline Moving sic@ + if (ispresent(v_S_NSSAI.vPart.sd)) { + v_S_NSSAIstring := v_S_NSSAIstring & "." & oct2str(v_S_NSSAI.vPart.sd); // @sic R5s221179 Baseline Moving sic@ + } + if (ispresent(v_S_NSSAI.vPart.mappedSST)) { + v_S_NSSAIstring := v_S_NSSAIstring & ";" & oct2str(v_S_NSSAI.vPart.mappedSST); // @sic R5s221179 Baseline Moving sic@ + } + if (ispresent(v_S_NSSAI.vPart.mappedSD)) { + v_S_NSSAIstring := v_S_NSSAIstring & "." & oct2str(v_S_NSSAI.vPart.mappedSD); // @sic R5s221179 Baseline Moving sic@ + } + return v_S_NSSAIstring; + } + + /* + * @desc To convert the NSSAI (list of S_NSSAI_Type) into a charstring for the AT command + * @param p_NSSAI + * @return charstring + * @status APPROVED (NR5GC) + */ + function f_Convert_ListOfNSSAI_ForATCommand(template (value) NSSAI p_NSSAI) return charstring + { + var integer i; + var integer v_Length := lengthof(p_NSSAI.lvPart.s_nssai); // @sic R5s221179 Baseline Moving sic@ + var charstring v_ListOfNSSAI := ""; + var charstring v_S_NSSAI := ""; + + for (i := 0; i < v_Length; i := i+1) { + v_S_NSSAI := f_ConvertS_NSSAI_ForATCommand(p_NSSAI.lvPart.s_nssai[i]); // @sic R5s221179 Baseline Moving sic@ + v_ListOfNSSAI := v_ListOfNSSAI & v_S_NSSAI; // @sic R5s200339 sic@ + if (i < (v_Length-1)) { // add a colon to all but the last one + v_ListOfNSSAI := v_ListOfNSSAI & ":"; + } + } + return v_ListOfNSSAI; + } + + /* + * @desc To build QoS Rule for Remote Access + * @param p_RuleNum + * @return template (value) QoS_Rule + * @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_BuildQoSRuleRemoteAccess (charstring p_RuleNum) return template (value) QoS_Rule + { + var O1_Type v_Id; + var B1_Type v_DQR; + var O1_Type v_Precedence; + var B6_Type v_FlowId; + var octetstring v_Component; + var O2_Type v_Length; + var B4_Type v_FilterId; + + select (p_RuleNum) { + case ("3") { + v_Id := int2oct(str2int(p_RuleNum),1); + v_DQR := '0'B; + v_Precedence := int2oct(str2int(p_RuleNum),1); + v_FlowId := '000001'B; + v_FilterId := '0010'B; + v_Component := fl_BuildRemoteAddressPacketFilter("2"); + } + case ("4") { + v_Id := int2oct(str2int(p_RuleNum),1); + v_DQR := '1'B; + v_Precedence := int2oct(str2int(p_RuleNum),1); + v_FlowId := '000010'B; + v_FilterId := '0011'B; + v_Component := fl_BuildRemoteAddressPacketFilter("3"); + } + case ("4a") { + v_Id := '0F'O; + v_DQR := '0'B; + v_Precedence := '0F'O; + v_FlowId := '000100'B; + v_FilterId := '1111'B; + v_Component := fl_BuildRemoteAddressPacketFilter("3a"); + } + case ("5") { + v_Id := int2oct(str2int(p_RuleNum),1); + v_DQR := '0'B; + v_Precedence := int2oct(str2int(p_RuleNum),1); + v_FlowId := '000101'B; + v_FilterId := '0100'B; + v_Component := fl_BuildRemoteAddressPacketFilter("4"); + } + case ("6") { + v_Id := int2oct(str2int(p_RuleNum),1); + v_DQR := '0'B; + v_Precedence := int2oct(str2int(p_RuleNum),1); + v_FlowId := '000110'B; + v_FilterId := '0101'B; + v_Component := fl_BuildRemoteAddressPacketFilter("5"); + } + } + v_Length := int2oct(lengthof(v_Component) + 5, 2); // @sic R5s190944 sic@ + return cs_QoS_RuleRemoteAccess(v_Id, v_DQR, v_Precedence, v_FlowId, v_Component, v_Length, v_FilterId); + } + + /* + * @desc Build a Remote Address Packet Filter according to 38.508-1 cl. 4.8.2 + * @param p_FilterNum + * @return octetstring + * @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_BuildRemoteAddressPacketFilter (charstring p_FilterNum) return octetstring + { + if (pc_IPv6) { + return fl_BuildRemoteAddressPrefixLengthIPv6 (p_FilterNum); + } else { // Must be IPv4 only + return fl_BuildRemoteAddressPacketFilterIPv4 (p_FilterNum); + } + } + + /* + * @desc Build a Remote Address Packet Filter for IPv4 according to 38.508-1 cl. 4.8.2 + * @param p_FilterNum + * @return octetstring + * @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_BuildRemoteAddressPacketFilterIPv4 (charstring p_FilterNum) return octetstring + { + var template (value) PacketFilterComponent v_Component; + var bitstring v_EncodedComponent; + + v_Component := cs_PktFilterCompIPv4RemoteAddress(fl_GetIPv4Address(p_FilterNum), tsc_IPv4Mask); + v_EncodedComponent := encvalue(v_Component); + return bit2oct(v_EncodedComponent); + } + + /* + * @desc Build a Remote Address Packet Filter for IPv6 according to 38.508-1 cl. 4.8.2 + * @param p_FilterNum + * @return octetstring + * @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_BuildRemoteAddressPrefixLengthIPv6 (charstring p_FilterNum) return octetstring + { + var O1_Type v_PrefixLength := '64'O; + var octetstring v_PacketFilter; + + v_PacketFilter := '21'O; // id = IPv6 remote address / Prefix length + v_PacketFilter := v_PacketFilter & f_Convert_IPv6Addr2OctString(fl_GetIPv6Address(p_FilterNum)); + v_PacketFilter := v_PacketFilter & v_PrefixLength; + return v_PacketFilter; + } + + /* + * @desc Build an IPv4 address according to 38.508-1 cl. 4.8.2 + * @param p_FilterNum + * @return charstring + * @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_GetIPv4Address (charstring p_FilterNum) return charstring + { + var charstring v_IPv4_Address := "10.10.10."; + select (p_FilterNum) { + case ("2") { + v_IPv4_Address := v_IPv4_Address & "2"; + } + case ("3") { + v_IPv4_Address := v_IPv4_Address & "3"; + } + case ("3a") { + v_IPv4_Address := v_IPv4_Address & "30"; + } + case ("4") { + v_IPv4_Address := v_IPv4_Address & "4"; + } + case ("5") { + v_IPv4_Address := v_IPv4_Address & "5"; + } + case else { + // out of supported range + FatalError(__FILE__, __LINE__, "unsupported packet filter"); + } + } + return v_IPv4_Address; + } + + /* + * @desc Build an IPv4 address according to 38.508-1 cl. 4.8.2 + * @param p_FilterNum + * @return charstring + * @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_GetIPv6Address (charstring p_FilterNum) return charstring + { + var charstring v_IPv6_Address; + select (p_FilterNum) { + case ("2") { + v_IPv6_Address := "C0C0:C0C0:C0C0:C002:C0C0:C0C0:C0C0:C0C0"; + } + case ("3") { + v_IPv6_Address := "C0C0:C0C0:C0C0:C003:C0C0:C0C0:C0C0:C0C0"; + } + case ("3a") { + v_IPv6_Address := "C0C0:C0C0:C0C0:C030:C0C0:C0C0:C0C0:C0C0"; + } + case ("4") { + v_IPv6_Address := "C0C0:C0C0:C0C0:C004:C0C0:C0C0:C0C0:C0C0"; + } + case ("5") { + v_IPv6_Address := "C0C0:C0C0:C0C0:C005:C0C0:C0C0:C0C0:C0C0"; + } + case else { + // out of supported range + FatalError(__FILE__, __LINE__, "unsupported packet filter"); + } + } + return v_IPv6_Address; + } + + //---------------------------------------------------------------------------- + /* + * @desc Create a datagram that will fit the packet filter indicated in the parameter + * @param p_FilterNum + * @return octetstring + * @status APPROVED (NR5GC) + */ + function f_SdapTests_CreateDatagram(charstring p_FilterNum) return octetstring + { + var charstring v_IPv4_DestAddr := fl_GetIPv4Address(p_FilterNum); + var charstring v_IPv6_DestAddr := fl_GetIPv6Address(p_FilterNum); + var charstring v_IPv4_SourceAddr := "192.168.0.1"; + var charstring v_IPv6_SourceAddr := "fe80::1:1"; + var UInt20_Type v_IPv6_FlowLabel := 10; + var UInt16_Type v_SourcePort := 60001; + var UInt16_Type v_DestPort := 60350; + var O1_Type v_TOS_TC := 'A9'O; + var UInt8_Type v_Protocol := tsc_IP_Protocol_UDP; + var O4_Type v_IPSecSPI := '0F80F000'O; + var boolean v_IpTypeIsIPv4 := false; + + if (pc_IPv6) {} //variable initialised to false + else if (pc_IPv4) { + v_IpTypeIsIPv4 := true; + } + else { + FatalError(__FILE__, __LINE__, "Neither IPv4 nor IPv6 supported"); + } + + return f_PacketFilterTest_CreateDatagram(v_IpTypeIsIPv4, + v_Protocol, + v_IPv4_SourceAddr, + v_IPv4_DestAddr, + v_IPv6_SourceAddr, + v_IPv6_DestAddr, + v_IPv6_FlowLabel, + v_SourcePort, + v_DestPort, + v_IPSecSPI, + v_TOS_TC); + } + +} with { encode "RAW"/*"NAS Types"*/} diff --git a/ttcn/Lib3GPP/NG_NAS/NG_NAS_EncdecDeclarations.ttcn b/ttcn/Lib3GPP/NG_NAS/NG_NAS_EncdecDeclarations.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..d8d7202ae29048046bbb7cd3ceb71f4f8fdf1b48 --- /dev/null +++ b/ttcn/Lib3GPP/NG_NAS/NG_NAS_EncdecDeclarations.ttcn @@ -0,0 +1,46 @@ +module NG_NAS_EncdecDeclarations { + + import from NG_NAS_MsgContainers all; + import from NG_NAS_TypeDefs all; + import from EAP_TypeDefs all; + + + external function fx_enc_NG_NAS_UL_Message_Type (NG_NAS_UL_Message_Type p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_NG_NAS_UL_Message_Type (inout bitstring pdu, out NG_NAS_UL_Message_Type p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + + + external function fx_enc_NG_NAS_DL_Message_Type (NG_NAS_DL_Message_Type p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_NG_NAS_DL_Message_Type (inout bitstring pdu, out NG_NAS_DL_Message_Type p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + //external function fx_dec_NG_NAS_DL_Message_Type (in octetstring pdu) return NG_NAS_DL_Message_Type + //with {extension "prototype(convert)" + // extension "decode(RAW)" + // }; + + external function fx_enc_IntraN1TransparentContainer (IntraN1TransparentContainer p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_IntraN1TransparentContainer (inout bitstring pdu, out IntraN1TransparentContainer p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + + + external function fx_enc_CIoTSmallDataContainer (CIoTSmallDataContainer p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_CIoTSmallDataContainer (inout bitstring pdu, out CIoTSmallDataContainer p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + + + + external function fx_enc_EAP_Message_Type (EAP_Message_Type p) return bitstring + with {extension "prototype(convert) encode(EAP Types)"} + + external function fx_dec_EAP_Message_Type (inout bitstring pdu, out EAP_Message_Type p) return integer + with {extension "prototype(sliding) decode(EAP Types)"} + +} // End of module module NG_NAS_EncdecDeclarations diff --git a/ttcn/Lib3GPP/NG_NAS/NG_NAS_MsgContainers.ttcn b/ttcn/Lib3GPP/NG_NAS/NG_NAS_MsgContainers.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1444d4020cee593e9384a4e6a94982019238c02a --- /dev/null +++ b/ttcn/Lib3GPP/NG_NAS/NG_NAS_MsgContainers.ttcn @@ -0,0 +1,234 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-09-13 13:03:05 +0200 (Tue, 13 Sep 2022) $ +// $Rev: 34148 $ +/******************************************************************************/ + +module NG_NAS_MsgContainers +{ + // import from NR_RRC_ASN1_Definitions language "ASN.1:2002" all with {encode "UNALIGNED_PER_OctetAligned"}; // needed to get definition of maxDRB */ + import from NG_NAS_TypeDefs all; + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + import from EPS_NAS_LoopBack_TypeDefs all; + import from Common4G5G_LoopBack all; + import from EPS_NAS_TypeDefs all; + + type union NG_NAS_UL_Message_Type { /* NAS message with direction 'UE to network ' or 'both' */ + NG_SECURITY_PROTECTED_NAS_MESSAGE security_Protected_Nas_Message, + NG_AUTHENTICATION_FAILURE authentication_Failure, + NG_AUTHENTICATION_RESPONSE authentication_Response, + NG_CONFIGURATION_UPDATE_COMPLETE configuration_Update_Complete, + NG_CP_SERVICE_REQUEST cp_Service_Request, // @sic R5s201387 Baseline Moving sic@ + NG_DEREGISTRATION_ACCEPT deregistration_Accept, + NG_DEREGISTRATION_REQUEST_MO deregistration_RequestMO, + NG_GMM_STATUS gmm_Status, + NG_GSM_STATUS gsm_Status, + NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMPLETE network_Slice_Specific_Authentication_Complete, // @sic R5s201387 Baseline Moving sic@ + NG_IDENTITY_RESPONSE identity_Response, + NG_NOTIFICATION_RESPONSE notification_Response, + NG_PDU_SESSION_AUTHENTICATION_COMPLETE pdu_Session_Authentication_Complete, + NG_PDU_SESSION_ESTABLISHMENT_REQUEST pdu_Session_Establishment_Request, + NG_PDU_SESSION_MODIFICATION_COMMAND_REJECT pdu_Session_Modification_Command_Reject, + NG_PDU_SESSION_MODIFICATION_COMPLETE pdu_Session_Modification_Complete, + NG_PDU_SESSION_MODIFICATION_REQUEST pdu_Session_Modification_Request, + NG_PDU_SESSION_RELEASE_COMPLETE pdu_Session_Release_Complete, + NG_PDU_SESSION_RELEASE_REQUEST pdu_Session_Release_Request, + NG_REGISTRATION_COMPLETE registration_Complete, + NG_REGISTRATION_REQUEST registration_Request, + NG_SECURITY_MODE_COMPLETE security_Mode_Complete, + NG_SECURITY_MODE_REJECT security_Mode_Reject, + NG_SERVICE_REQUEST service_Request, + NG_UL_NAS_TRANSPORT ul_Nas_Transport, + + ACTIVATE_TEST_MODE_COMPLETE activate_Test_Mode_Complete, + DEACTIVATE_TEST_MODE_COMPLETE deactivate_Test_Mode_Complete, + + CLOSE_UE_TEST_LOOP_COMPLETE close_Ue_Test_Loop_Complete, + OPEN_UE_TEST_LOOP_COMPLETE open_Ue_Test_Loop_Complete, + + NSSAI_DELETE_RESPONSE nssai_Delete_Response, + SET_UAI_RESPONSE set_UAI_Response, + SET_UL_MESSAGE_RESPONSE set_UL_Message_Response, + UE_TEST_LOOP_NR_SIDELINK_COUNTER_RESPONSE test_Loop_Sidelink_Counter_Response // @sic R5-225291 sic@ + } with { // FIXME FSCOM Check messageType for deregistration_RequestMO + variant "TAG( + security_Protected_Nas_Message, securityHeaderType = '0001'B; + security_Protected_Nas_Message, securityHeaderType = '0010'B; + security_Protected_Nas_Message, securityHeaderType = '0011'B; + security_Protected_Nas_Message, securityHeaderType = '0100'B; + authentication_Failure, messageType = '01011001'B; + authentication_Response, messageType = '01010111'B; + configuration_Update_Complete, messageType = '01010101'B; + cp_Service_Request, messageType = '01001111'B; + deregistration_Accept, messageType = '01000110'B; + deregistration_RequestMO, messageType = '01001000'B; + gmm_Status, messageType = '01100100'B; + gsm_Status, messageType = '11010110'B; + network_Slice_Specific_Authentication_Complete, messageType = '01010001'B; + identity_Response, messageType = '01011100'B; + notification_Response, messageType = '01100110'B; + pdu_Session_Authentication_Complete, messageType = '11000110'B; + pdu_Session_Establishment_Request, messageType = '11000001'B; + pdu_Session_Modification_Command_Reject, messageType = '11001101'B; + pdu_Session_Modification_Complete, messageType = '11001100'B; + pdu_Session_Modification_Request, messageType = '11001001'B; + pdu_Session_Release_Complete, messageType = '11010100'B; + pdu_Session_Release_Request, messageType = '11010001'B; + registration_Request, messageType = '01000001'B; + registration_Complete, messageType = '01000011'B; + security_Mode_Complete, messageType = '01011110'B; + security_Mode_Reject, messageType = '01011111'B; + service_Request, messageType = '01001100'B; + ul_Nas_Transport, messageType = '01100111'B; + )" + + } + + type union NG_NAS_DL_Message_Type { /* NAS message with direction 'network to UE' or 'both' */ + NG_SECURITY_PROTECTED_NAS_MESSAGE security_Protected_Nas_Message, + NG_AUTHENTICATION_REJECT authentication_Reject, + NG_AUTHENTICATION_REQUEST authentication_Request, + NG_AUTHENTICATION_RESULT authentication_Result, + NG_CONFIGURATION_UPDATE_COMMAND configuration_Update_Command, + NG_DEREGISTRATION_ACCEPT deregistration_Accept, + NG_DEREGISTRATION_REQUEST_MT deregistration_RequestMT, + NG_DL_NAS_TRANSPORT dl_Nas_Transport, + NG_GMM_STATUS gmm_Status, + NG_GSM_STATUS gsm_Status, + NG_IDENTITY_REQUEST identity_Request, + NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMMAND network_Slice_Specific_Authentication_Command, // @sic R5s201387 Baseline Moving sic@ + NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_RESULT network_Slice_Specific_Authentication_Result, // @sic R5s201387 Baseline Moving sic@ + NG_NOTIFICATION notification, + NG_PDU_SESSION_AUTHENTICATION_COMMAND pdu_Session_Authentication_Command, + NG_PDU_SESSION_AUTHENTICATION_RESULT pdu_Session_Authentication_Result, + NG_PDU_SESSION_ESTABLISHMENT_ACCEPT pdu_Session_Establishment_Accept, + NG_PDU_SESSION_ESTABLISHMENT_REJECT pdu_Session_Establishment_Reject, + NG_PDU_SESSION_MODIFICATION_COMMAND pdu_Session_Modification_Command, + NG_PDU_SESSION_MODIFICATION_REJECT pdu_Session_Modification_Reject, + NG_PDU_SESSION_RELEASE_COMMAND pdu_Session_Release_Command, + NG_PDU_SESSION_RELEASE_REJECT pdu_Session_Release_Reject, + NG_REGISTRATION_ACCEPT registration_Accept, + NG_REGISTRATION_REJECT registration_Reject, + NG_SECURITY_MODE_COMMAND security_Mode_Command, + NG_SERVICE_ACCEPT service_Accept, + NG_SERVICE_REJECT service_Reject, + + RESETUEPOSITIONINGSTOREDINFORMATION reset_UE_Positioning_Stored_Information, // For AGNSS + + ACTIVATE_TEST_MODE activate_Test_Mode, + DEACTIVATE_TEST_MODE deactivate_Test_Mode, + + NR_CLOSE_UE_TEST_LOOP close_Ue_Test_Loop, + OPEN_UE_TEST_LOOP open_Ue_Test_Loop, + + NSSAI_DELETE_REQUEST nssai_Delete_Request, + SET_UAI_REQUEST set_UAI_Request, + SET_UL_MESSAGE_REQUEST set_UL_Message_Request, // @sic R5-216275 sic@ + UE_TEST_LOOP_NR_SIDELINK_COUNTER_REQUEST test_Loop_Sidelink_Counter_Request, // @sic R5-225291 sic@ + + UPDATE_UE_LOCATION_INFORMATION update_Ue_Location_Information //@sic R5-213421 sic@ + + } with { // FIXME FSCOM Check messageType for deregistration_RequestMT + variant "TAG( + security_Protected_Nas_Message, securityHeaderType = '0001'B; + security_Protected_Nas_Message, securityHeaderType = '0010'B; + security_Protected_Nas_Message, securityHeaderType = '0011'B; + security_Protected_Nas_Message, securityHeaderType = '0100'B; + authentication_Reject, messageType = '01011000'B; + authentication_Request, messageType = '01010110'B; + authentication_Result, messageType = '01011010'B; + configuration_Update_Command, messageType = '01010100'B; + deregistration_Accept, messageType = '01000110'B; + deregistration_RequestMT, messageType = '01001000'B; + dl_Nas_Transport, messageType = '01101000'B; + gmm_Status, messageType = '01100100'B; + gsm_Status, messageType = '11010110'B; + identity_Request, messageType = '01011011'B; + network_Slice_Specific_Authentication_Command, messageType = '01010000'B; + network_Slice_Specific_Authentication_Result, messageType = '01010010'B; + notification, messageType = '01100101'B; + pdu_Session_Authentication_Command, messageType = '11000101'B; + pdu_Session_Authentication_Result, messageType = '11000111'B; + pdu_Session_Establishment_Accept, messageType = '11000010'B; + pdu_Session_Establishment_Reject, messageType = '11000011'B; + pdu_Session_Modification_Command, messageType = '11001011'B; + pdu_Session_Modification_Reject, messageType = '11001010'B; + pdu_Session_Release_Command, messageType = '11010011'B; + pdu_Session_Release_Reject, messageType = '11010010'B; + registration_Accept, messageType = '01000010'B; + registration_Reject, messageType = '01000100'B; + security_Mode_Command, messageType = '01011101'B; + service_Accept, messageType = '01001110'B; + service_Reject, messageType = '01001101'B; + )" + } + + //**************************************************************************** + // NAS SECURITY PROTECTION + //**************************************************************************** + + type record NG_NAS_SecurityProtectionInfoUL_Type { + SecurityHeaderType Status, + NasCount_Type NasCount + }; + + type record NG_NAS_SecurityProtectionInfoDL_Type { + SecurityHeaderType Status, + boolean ForceMacError /* Force the NAS emulator to send NAS PDU with erroneous MAC */ + }; + + //**************************************************************************** + // Generic definition of NAS PDUs containing other piggy-backed PDUs + //**************************************************************************** + // Note: the type definition allows much more combinitions than being valid acc. to the NAS standard + // appropriate templates shall restrict the generic type definitions + // Working Assumptions: + // - acc. to DEC 08 ASN.1 in RRCConnectionReconfiguration there can be up to maxDRB times DedicatedInfoNAS + // => several EMM messages can be contained each having its own security protection + // - within any DedicatedInfoNAS there is one security protected NAS PDU + // (i.e. the assumption is that the security container contains just one PDU) + // - the EMM PDU being contained in the DedicatedInfoNAS may contain further piggy-backing: + // even though in 24.301 V8.0.0 it is stated that + // "The purpose of the ESM message container information element is to enable piggybacked transfer of + // a single ESM message within an EMM message" (cl. 9.9.3.15) + // the type definition allows even more than one piggy-backed PDU and as well further levels of piggybacking + // => type definitions can be applied even when the standard will be enhanced in the future + + // recursive type definition: + type record NG_NAS_UL_Pdu_Type { + NG_NAS_UL_Message_Type Msg, + NG_NAS_UL_PduList_Type PiggybackedPduList optional + }; + + type record of NG_NAS_UL_Pdu_Type NG_NAS_UL_PduList_Type; + + // recursive type definition: + type record NG_NAS_DL_Pdu_Type { + NG_NAS_DL_Message_Type Msg, + NG_NAS_DL_PduList_Type PiggybackedPduList optional + }; + + type record of NG_NAS_DL_Pdu_Type NG_NAS_DL_PduList_Type; + + type record NG_NAS_MSG_Indication_Type { + NG_NAS_SecurityProtectionInfoUL_Type SecurityProtection, /* contains security status and NAS COUNT */ + NG_NAS_UL_Pdu_Type Pdu /* => only one NAS PDU on top level */ + }; + + type record length(1) of NG_NAS_MSG_Indication_Type NG_NAS_MSG_IndicationList_Type; + + type record NG_NAS_MSG_Request_Type { + NG_NAS_SecurityProtectionInfoDL_Type SecurityProtection, /* contains security status */ + NG_NAS_DL_Pdu_Type Pdu /* => only one NAS PDU on top level */ + }; + + type record of NG_NAS_MSG_Request_Type NG_NAS_MSG_RequestList_Type; + +// The encoding rule is needed because the types in this file are part of the overall message sent over the air +} with { encode "RAW"/*"NAS Types"*/extension "errorbehavior(ALL:WARNING)"} diff --git a/ttcn/Lib3GPP/NG_NAS/NG_NAS_SecurityFunctions.ttcn b/ttcn/Lib3GPP/NG_NAS/NG_NAS_SecurityFunctions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..5a90d5b1ed3d07c78fd281aeb585132e58e8263b --- /dev/null +++ b/ttcn/Lib3GPP/NG_NAS/NG_NAS_SecurityFunctions.ttcn @@ -0,0 +1,917 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-03-21 13:21:41 +0100 (Tue, 21 Mar 2023) $ +// $Rev: 35672 $ +/******************************************************************************/ +module NG_NAS_SecurityFunctions { + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + import from NAS_AuthenticationCommon all; + import from NG_NasEmu_CtrlAspTypes all; + import from EUTRA_NR_SecurityFunctions all; + import from Parameters all; + import from NAS_5GC_Parameters all; + import from EAP_TypeDefs all; + + //============================================================================ + // constants and types + + type record NG_NAS_SecurityParams_Type { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + // Keys shared with NR + KDF_Type KDF, + B3_Type KSIamf, // 3 bit KSIasme used when Authentication is performed by MME. + B256_Type Ks, // = Ck || IK + B256_Type KAMF, + // NAS keys + bitstring MK, // Master key MK in RFC 5448 to be used to derive other keys acc. TS 33.501 cl. 6.2.1 + B256_Type KAUSF, + B256_Type KSEAF, + octetstring ABBA, + // NAS Security structures + NG_NAS_SecurityInfo_Type NAS_Integrity, + NG_NAS_SecurityInfo_Type NAS_Ciphering, + Common_AuthenticationParams_Type AuthParams + }; + + //============================================================================ + // TEMPLATES + //---------------------------------------------------------------------------- + + const B4_Type tsc_NG_Integrity_Snow3G := '0001'B; /* @status APPROVED (NR5GC) */ + const B4_Type tsc_NG_Integrity_AES := '0010'B; /* @status APPROVED (NR5GC) */ + const B4_Type tsc_NG_Integrity_ZUC := '0011'B; /* @status APPROVED (NR5GC) */ + const B4_Type tsc_NG_Encryption_Snow3G := '0001'B; /* @status APPROVED (NR5GC) */ + const B4_Type tsc_NG_Encryption_AES := '0010'B; /* @status APPROVED (NR5GC) */ + const B4_Type tsc_NG_Encryption_ZUC := '0011'B; /* @status APPROVED (NR5GC) */ + + template (value) NG_NAS_SecurityParams_Type cs_NG_NAS_SecurityParamsInit := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + KDF := tsc_KDF_HMAC_SHA_256, + KSIamf := '111'B, //un initialised + Ks := tsc_AuthUndefinedB256, + KAMF := tsc_AuthUndefinedB256, + MK := tsc_AuthUndefinedB256, + KAUSF := tsc_AuthUndefinedB256, + KSEAF := tsc_AuthUndefinedB256, + ABBA := '0000'O, + NAS_Integrity := cs_NG_NAS_SecurityInfo (px_NAS_5GC_IntegrityAlgorithm, tsc_AuthUndefinedB128), + NAS_Ciphering := cs_NG_NAS_SecurityInfo (px_NAS_5GC_CipheringAlgorithm, tsc_AuthUndefinedB128), + AuthParams := cs_CommonAuthParams_Init (px_eAuthRAND) + }; + + template (value) NG_NAS_SecurityInfo_Type cs_NG_NAS_SecurityInfo(B4_Type p_Algo, + B128_Key_Type p_Key) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Algorithm := p_Algo, + K_NAS := p_Key + }; + + template (value) EAP_Message_Type cs_EAP_Request_AKAChallenge(O2_Type p_Length, + template (value) EAP_AT_RAND p_RAND, + template (value) EAP_AT_AUTN p_AUTN, + template (value) EAP_AT_KDF p_KDF, + template (value) EAP_AT_KDF_INPUT p_KDF_INPUT, + template (value) EAP_AT_MAC p_MAC, + O1_Type p_Id) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + akaChallenge_Req := { // @sic R5s200288 sic@ + code := '01'O, // Request - RFC 4187 cl. 8.1 + id := p_Id, // RFC 3748 cl. 4 @sic R5s201410 sic@ + len := p_Length, // RFC 3748 cl. 4 + type_ := '32'O, // RFC 5448 cl. 6.1 + subtype := '01'O, // AKA-Challenge as in RFC 4187 cl. 11 + reserved := '0000'O, // Set to 0 when sending, ignored by the receiver + attributes := { + rand := p_RAND, + autn := p_AUTN, + kdf := p_KDF, + kdfInput := p_KDF_INPUT, + mac := p_MAC, + res := omit, + auts := omit, + padd := omit, + permIdReq := omit, + notification := omit, + anyIdReq := omit, + id := omit, + versionList := omit, + selectedVersion := omit, + fullauthIdReq := omit, + counter := omit, + counterTooSmall := omit, + nonceS := omit, + clientErrorCode := omit, + iv := omit, + nextPseudonym := omit, + nextReauthId := omit, + checkCode := omit, + resultInd := omit + } + } + }; + + template (present) EAP_Message_Type cr_EAP_Response_AKAChallenge(O2_Type p_Length, + template (present) EAP_AT_RES p_RES, + template (present) EAP_AT_MAC p_MAC, + template EAP_AT_RESULT_IND p_ResultInd := *, + O1_Type p_Id) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + akaChallenge_Rsp := { // @sic R5200288, R5s200400 sic@ + code := '02'O, // Response - RFC 4187 cl. 8.1 + id := p_Id, // RFC 3748 cl. 4 @sic R5s201483 sic@ + len := p_Length, // RFC 3748 cl. 4 + type_ := '32'O, // RFC 5448 cl. 6.1 + subtype := '01'O, // AKA-Challenge as in RFC 4187 cl. 11 + reserved := ?, // Set to 0 when sending, ignored by the receiver + attributes := { + res := p_RES, + mac := p_MAC, + resultInd := p_ResultInd, // @sic R5-201142 sic@ + padd := *, + iv := *, + checkCode := *, + rand := omit, + autn := omit, + auts := omit, + permIdReq := omit, + notification := omit, + anyIdReq := omit, + id := omit, + versionList := omit, + selectedVersion := omit, + fullauthIdReq := omit, + counter := omit, + counterTooSmall := omit, + nonceS := omit, + clientErrorCode := omit, + nextPseudonym := omit, + nextReauthId := omit, + kdf := omit, + kdfInput := omit + } + } + }; + + template (value) EAP_Message_Type cs_EAP_Success (O1_Type p_Id := '00'O) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + success := { + code := '03'O, // Success + id := p_Id, // RFC 3748 cl. 4 + len := '0004'O // RFC 3748 cl. 4.1 + } + }; + + template (value) EAP_Message_Type cs_EAP_Failure (O1_Type p_Id := '00'O) := + { /* @status APPROVED (NR5GC) */ + failure := { + code := '04'O, // Failure + id := p_Id, // RFC 3748 cl. 4 + len := '0004'O // RFC 3748 cl. 4.1 + } + }; + + template (value) EAP_AT_RAND cs_EAP_AT_RAND (O16_Type p_Rand) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + // RFC 4187 cl. 10.6 + attributeType := '01'O, + len := '05'O, + reserved := '0000'O, + rand := p_Rand + }; + template (value) EAP_AT_AUTN cs_EAP_AT_AUTN (O16_Type p_AUTN) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + // RFC 4187 cl. 10.7 + attributeType := '02'O, + len := '05'O, + reserved := '0000'O, + autn := p_AUTN + }; + template (value) EAP_AT_KDF cs_EAP_AT_KDF := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + // RFC 5448 cl. 3.2 + attributeType := '18'O, + len := '01'O, + keyDerivationFunction := '0001'O // RFC 5448 cl. 3.3 + }; + template (value) EAP_AT_KDF_INPUT cs_EAP_AT_KDF_INPUT (octetstring p_Name, O2_Type p_ActualLength) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + // RFC 5448 cl. 3.1 + attributeType := '17'O, + len := int2oct(lengthof(p_Name)/4 + 1, 1), + actualNetworkNamelen := p_ActualLength, + networkName := p_Name + }; + template (value) EAP_AT_MAC cs_EAP_AT_MAC (O16_Type p_MAC) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + // RFC 4187 cl. 10.15 + attributeType := '0B'O, + len := '05'O, + reserved := '0000'O, + mac := p_MAC + }; + template (present) EAP_AT_RES cr_EAP_AT_RES (octetstring p_Res, O2_Type p_ActualLength) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + // RFC 4187 cl. 10.8 + attributeType := ('03'O), + len := int2oct(lengthof(p_Res)/4 + 1, 1), + reslen := p_ActualLength, + res := p_Res + }; + + //---------------------------------------------------------------------------- + /* + * @desc Used when building the network name from the PLMN + * @param p_NAS_PlmnId + * @return charstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_Nas2SNN_MNC(NAS_PlmnId p_NAS_PlmnId) return charstring + { + var charstring v_MNC := ""; + var hexstring v_PLMN_hexstring := oct2hex(p_NAS_PlmnId); + + if (v_PLMN_hexstring[2] == 'F'H) { + v_MNC := "0"; + } + v_MNC := v_MNC & hex2str(v_PLMN_hexstring[5]) & hex2str(v_PLMN_hexstring[4]); + if (v_PLMN_hexstring[2] != 'F'H) { // add last digit if not F + v_MNC := v_MNC & hex2str(v_PLMN_hexstring[2]); + } + return v_MNC; + } + + /* + * @desc Used when building the network name from the PLMN + * @param p_NAS_PlmnId + * @return charstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_Nas2SNN_MCC(NAS_PlmnId p_NAS_PlmnId) return charstring + { + var charstring v_MCC; + var hexstring v_PLMN_hexstring := oct2hex(p_NAS_PlmnId); + + v_MCC := hex2str(v_PLMN_hexstring[1]) & hex2str(v_PLMN_hexstring[0]) & hex2str(v_PLMN_hexstring[3]); + + return v_MCC; + } + + /* + * @desc To build the Serving Network Name + * @param p_PLMN + * @param p_NID (default value: omit) + * @return octetstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_GetServingNetworkName (NAS_PlmnId p_PLMN, + template (omit) hexstring p_NID := omit) return octetstring + { + var charstring v_P0 := "5G:mnc" & fl_Nas2SNN_MNC(p_PLMN) & ".mcc" & fl_Nas2SNN_MCC(p_PLMN) & ".3gppnetwork.org"; + if (isvalue(p_NID)) { // @sic R5s220753 sic@ + v_P0 := v_P0 & ":" & hex2str (valueof(p_NID)); + } + return char2oct (v_P0); + } + + /* + * @desc To build the NAI + * @param p_PLMN + * @param p_Identity + * @return octetstring + */ + function fl_GetNAI (NAS_PlmnId p_PLMN, hexstring p_Identity := px_IMSI_Def) return octetstring + { + var charstring v_P0 := hex2str(p_Identity) & "@nai.5gc.mnc" & fl_Nas2SNN_MNC(p_PLMN) & ".mcc" & fl_Nas2SNN_MCC(p_PLMN) & ".3gppnetwork.org"; // @sic R5s230215 sic@ + return char2oct (v_P0); + } + + //============================================================================ + // Group of S functions defined in Annex A of 33.501 + //---------------------------------------------------------------------------- + /* + * @desc KAUSF derivation function; As per annex A.2 of 33.501 + * @param p_AuthParams + * @param p_KDF + * @param p_Ks + * @param p_PLMN + * @param p_NID (default value: omit) + * @return B256_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_Authentication_A2(Common_AuthenticationParams_Type p_AuthParams, + KDF_Type p_KDF, + B256_Type p_Ks, + NAS_PlmnId p_PLMN, + template (omit) hexstring p_NID := omit) return B256_Type + { + const octetstring const_S6A_FC := '6A'O; + var octetstring v_S; + var octetstring v_P0; + + // Generation of String + v_S := const_S6A_FC; + //FC = 0x6A + v_P0 := fl_GetServingNetworkName(p_PLMN, p_NID); // @sic R5s220753 sic@ + v_S := (v_S & v_P0); + //P0 = serving network ID + v_S := (v_S & int2oct(lengthof(v_P0), 2)) ; + //L0 = length of serving network ID (i.e. 0x00 0x03) + v_S := ( v_S & ( substr (( bit2oct ( p_AuthParams.AUTN )) , 0,6 ))); + //P1 = SQN XOR AK + // to have MSB 6 bytes which is SQN xor AK and truncated as SQN xor AK is first 6 bytes of AUTN + v_S := ( v_S & '0006'O ); + //L1 = length of SQN XOR AK (i.e. 0x00 0x06) + return fx_KeyDerivationFunction( p_KDF, p_Ks, v_S ); + } + + //-------------------------------------------------------------------------- + /* + * @desc CK' and IK' derivation function; As per annex A.3 of 33.501 + * @param p_AuthParams + * @param p_KDF + * @param p_Ks + * @param p_PLMN + * @param p_NID (default value: omit) + * @return B256_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_Authentication_A3(Common_AuthenticationParams_Type p_AuthParams, + KDF_Type p_KDF, + B256_Type p_Ks, + NAS_PlmnId p_PLMN, + template (omit) hexstring p_NID := omit) return B256_Type + { + const octetstring const_S20_FC := '20'O; + var octetstring v_S; + var octetstring v_P0; + + // Generation of String + v_S := const_S20_FC; + //FC = 0x20 + v_P0 := fl_GetServingNetworkName(p_PLMN, p_NID); // @sic R5s220753 sic@ + v_S := (v_S & v_P0); + //P0 = serving network ID + v_S := (v_S & int2oct(lengthof(v_P0), 2)) ; + //L0 = length of serving network ID (i.e. 0x00 0x03) + v_S := ( v_S & ( substr (( bit2oct ( p_AuthParams.AUTN )) , 0,6 ))); + //P1 = SQN XOR AK + // to have MSB 6 bytes which is SQN xor AK and truncated as SQN xor AK is first 6 bytes of AUTN + v_S := ( v_S & '0006'O ); + //L1 = length of SQN XOR AK (i.e. 0x00 0x06) + return fx_KeyDerivationFunction( p_KDF, p_Ks, v_S ); + } + + //-------------------------------------------------------------------------- + /* + * @desc RES* and XRES* derivation functions + * As per annex A.4 of 33.501 + * @param p_PLMN + * @param p_AuthParams + * @param p_KDF + * @param p_Key + * @param p_NID (default value: omit) + * @return B128_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_Authentication_A4(NAS_PlmnId p_PLMN, + Common_AuthenticationParams_Type p_AuthParams, + KDF_Type p_KDF, + B256_Type p_Key, + template (omit) hexstring p_NID := omit) return B128_Type + { + const octetstring const_S6B_FC :='6B'O; + var octetstring v_S; + var octetstring v_P0; + + log(">>> f_NG_Authentication_A4: p_PLMN=", p_PLMN); + log(">>> f_NG_Authentication_A4: p_AuthParams=", p_AuthParams); + log(">>> f_NG_Authentication_A4: p_KDF=", p_KDF); + log(">>> f_NG_Authentication_A4: p_Key=", p_Key); + + + // Generation of String + v_S := const_S6B_FC; + //FC = 0x6B + v_P0 := fl_GetServingNetworkName(p_PLMN, p_NID); // @sic R5s220753 sic@ + log("f_NG_Authentication_A4: v_P0=", v_P0); + v_S := (v_S & v_P0); + log("f_NG_Authentication_A4: v_S=", v_S); + //P0 = serving network ID + v_S := (v_S & int2oct(lengthof(v_P0), 2)) ; + log("f_NG_Authentication_A4: v_S=", v_S); + //L0 = length of serving network ID + v_S := ( v_S & bit2oct ( p_AuthParams.RandValue ) ); + log("f_NG_Authentication_A4: v_S=", v_S); + //P1 = RAND + v_S := ( v_S & '0010'O ); + //L1 = length of RAND (i.e. 0x00 0x10) + log("f_NG_Authentication_A4: v_S=", v_S); + v_S := ( v_S & bit2oct (substr(p_AuthParams.XRES, 0, px_NAS_5GC_XRES_Length*8))); // @sic R5s190394 sic@ + log("f_NG_Authentication_A4: v_S=", v_S); + //P2 = RES or XRES + v_S := ( v_S & int2oct(px_NAS_5GC_XRES_Length, 2) ); // @sic R5w190117 sic@ + log("f_NG_Authentication_A4: v_S=", v_S); + //L2 = length of RES/XRES (e.g. 0x00 0x10) + + var bitstring bs := fx_KeyDerivationFunction(p_KDF, p_Key, v_S); // Already 128 bits length + + return bs; + //return substr(fx_KeyDerivationFunction(p_KDF, p_Key, v_S), 128, 128); + // returns LSB 128 bits[truncated] of the key generated + } + + //-------------------------------------------------------------------------- + /* + * @desc KSEAF derivation function + * As per annex A.6 of 33.501 + * @param p_PLMN + * @param p_KAUSF + * @param p_KDF_Type + * @param p_NID (default value: omit) + * @return B256_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_Authentication_A6(NAS_PlmnId p_PLMN, + B256_Type p_KAUSF, + KDF_Type p_KDF_Type, + template (omit) hexstring p_NID := omit) return B256_Type + { + const octetstring const_S6C_FC :='6C'O; + var octetstring v_S; + var octetstring v_P0; + + // Generation of String + v_S := const_S6C_FC; + //FC = 0x6C + v_P0 := fl_GetServingNetworkName(p_PLMN, p_NID); // @sic R5s220753 sic@ + v_S := (v_S & v_P0); + //P0 = serving network ID + v_S := (v_S & int2oct(lengthof(v_P0), 2)) ; + //L0 = length of serving network ID + + return fx_KeyDerivationFunction(p_KDF_Type, p_KAUSF, v_S); + }; + + //-------------------------------------------------------------------------- + /* + * @desc KAMF derivation function + * As per annex A.7 of 33.501 + * @param p_SUPI + * @param p_KSEAF + * @param p_ABBA + * @param p_KDF_Type + * @return B256_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_Authentication_A7(charstring p_SUPI, + B256_Type p_KSEAF, + octetstring p_ABBA, + KDF_Type p_KDF_Type) return B256_Type + { + const octetstring const_S6D_FC :='6D'O; + var octetstring v_S; + var octetstring v_P0 := char2oct(p_SUPI); // @sic R5s190109 sic@ + var octetstring v_P1 := p_ABBA; + + // Generation of String + v_S := const_S6D_FC; + //FC = 0x6D + v_S := (v_S & v_P0); + //P0 = serving network ID + v_S := (v_S & int2oct(lengthof(v_P0), 2)) ; + //L0 = length of SUPI + v_S := (v_S & v_P1); + //P0 = serving network ID + v_S := (v_S & int2oct(lengthof(v_P1), 2)) ; + //L1 = length of ABBA + + return fx_KeyDerivationFunction(p_KDF_Type, p_KSEAF, v_S); + } + + //-------------------------------------------------------------------------- + /* + * @desc SOR MAC-I AUSF derivation function + * As per annex A.17 of 33.501 + * @param p_SoRHeader + * @param p_KAUSF + * @param p_Counter + * @param p_PLMNandAccessTechnologyList (default value: ''O) + * @param p_KDF_Type + * @return B128_Type + * @status APPROVED (NR5GC) + */ + function f_NG_Authentication_A17(O1_Type p_SoRHeader, + B256_Type p_KAUSF, + O2_Type p_Counter, + octetstring p_PLMNandAccessTechnologyList := ''O, + KDF_Type p_KDF_Type) return B128_Type + { + const octetstring const_S77_FC :='77'O; + var octetstring v_S; + + // Generation of String + v_S := const_S77_FC; + //FC = 0x77 + v_S := (v_S & p_SoRHeader); + //P0 = SOR Header + v_S := (v_S & '0001'O); + //L0 = length of SOR Header + v_S := (v_S & p_Counter); + //P1 = Counter + v_S := (v_S & '0002'O) ; + //L1 = length of Counter + if (lengthof (p_PLMNandAccessTechnologyList) > 0) { //P2 & L2 are optional + v_S := (v_S & p_PLMNandAccessTechnologyList); + v_S := (v_S & int2oct(lengthof(p_PLMNandAccessTechnologyList), 2)) ; + } + return substr(fx_KeyDerivationFunction(p_KDF_Type, p_KAUSF, v_S), 128, 128); + // returns LSB 128 bits[truncated] of the key generated + } + + //-------------------------------------------------------------------------- + /* + * @desc SOR MAC-I UE derivation function + * As per annex A.18 of 33.501 + * @param p_KAUSF + * @param p_Counter + * @param p_KDF_Type + * @return B128_Type + * @status APPROVED (NR5GC) + */ + function f_NG_Authentication_A18(B256_Type p_KAUSF, + O2_Type p_Counter, + KDF_Type p_KDF_Type) return B128_Type + { + const octetstring const_S78_FC :='78'O; + var octetstring v_S; + + // Generation of String + v_S := const_S78_FC; + //FC = 0x78 + v_S := (v_S & '01'O); + //P0 = SOR Ack + v_S := (v_S & '0001'O); + //L0 = length of SOR Ack + v_S := (v_S & p_Counter); + //P1 = Counter + v_S := (v_S & '0002'O) ; + //L1 = length of Counter + + return substr(fx_KeyDerivationFunction(p_KDF_Type, p_KAUSF, v_S), 128, 128); + // returns LSB 128 bits[truncated] of the key generated + } + + //-------------------------------------------------------------------------- + /* + * @desc HASH AMF derivation function + * As per annex H.2 of 33.501 + * @param p_NASMsg (encoded as octetstring) + * @param p_KDF_Type + * @return B64_Type + */ + function f_NG_HASH_AMF_H2(octetstring p_NASMsg, + KDF_Type p_KDF_Type) return B64_Type + { + var B256_Type v_Key := int2bit(0, 256); + var B256_Type v_Result := fx_KeyDerivationFunction(p_KDF_Type, v_Key, p_NASMsg); + + return substr(v_Result, 192, 64); + }; + + //-------------------------------------------------------------------------- + //============================================================================ + // Initialisations: + + /* + * @desc Function to be used before executing Authentication procedure in NG NAS. + * The structure for NG_NAS_SecurityParams_Type passed as parameter shall have at least valid parameters for: + * IMSI, PLMN, NAS_IntegrityInfo_Type.NAS_IntAlgo, NAS_CipheringInfo_Type.NAS_CipherAlgo + * Execution of this fucntion will initialise following parameters + * randValue, CK, IK, Ks, aUTN, XRES,KSIamf, KAMF, KNASenc & KNASint + * @param p_Auth_Params + * @param p_PLMN + * @param p_Identity (default value: := px_IMSI_Def) + * @param p_AuthenticationError (default value: noError) + * @param p_Common_AuthenticationParams (default value: omit) + * @param p_NID (default value: omit) + * @return NG_NAS_SecurityParams_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_NAS_AuthenticationInit(NG_NAS_SecurityParams_Type p_Auth_Params, + NAS_PlmnId p_PLMN, + hexstring p_Identity := px_IMSI_Def, + AuthenticationError_Type p_AuthenticationError := noError, + template (omit) Common_AuthenticationParams_Type p_Common_AuthenticationParams := omit, + template (omit) hexstring p_NID := omit) return NG_NAS_SecurityParams_Type + { + var NG_NAS_SecurityParams_Type v_Auth_Params := p_Auth_Params; + var B128_Type v_XRESstar; + + // Generates Ck, Ik, AUTN, XRES + if (isvalue(p_Common_AuthenticationParams)) { + v_Auth_Params.AuthParams := valueof(p_Common_AuthenticationParams); + } else { + v_Auth_Params.AuthParams := f_AuthenticationInit(v_Auth_Params.AuthParams, p_AuthenticationError); // @sic R5-197217 sic@ + } + + v_Auth_Params.Ks := v_Auth_Params.AuthParams.CK & v_Auth_Params.AuthParams.IK; + // As per 33.501 clause 6.1.3.2 + // Generates KAUSF + v_Auth_Params.KAUSF := f_NG_Authentication_A2(v_Auth_Params.AuthParams, + v_Auth_Params.KDF, + v_Auth_Params.Ks, + p_PLMN, + p_NID); // @sic R5s220753 sic@ + // Generates XRES* @sic R5s200400 sic@ + v_XRESstar := f_NG_Authentication_A4(p_PLMN, + v_Auth_Params.AuthParams, + v_Auth_Params.KDF, + v_Auth_Params.Ks, + p_NID); // @sic R5s220753 sic@ + // Store value for later comparison with value received in Response + v_Auth_Params.AuthParams.XRES := v_XRESstar; + + // Now update the other parameters (common to 5GAKA and EAP) + v_Auth_Params := fl_NG_NAS_AuthenticationInitOtherParams (v_Auth_Params, p_PLMN, hex2str(p_Identity), p_NID); // @sic R5s220753, R5s230215 sic@ + return v_Auth_Params; + } + + /* + * @desc Function to initialise authentication parameters common to both 5G AKA and EAP + * @param p_Auth_Params + * @param p_PLMN + * @param p_Identity + * @param p_NID (default value: omit) + * @return NG_NAS_SecurityParams_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_NG_NAS_AuthenticationInitOtherParams(NG_NAS_SecurityParams_Type p_Auth_Params, + NAS_PlmnId p_PLMN, + charstring p_Identity, + template (omit) hexstring p_NID := omit) return NG_NAS_SecurityParams_Type + { + var NG_NAS_SecurityParams_Type v_Auth_Params := p_Auth_Params; + + // update KSI + v_Auth_Params.KSIamf := f_Authentication_IncrementKeySeq(v_Auth_Params.KSIamf); + + // Generate KSEAF + v_Auth_Params.KSEAF := f_NG_Authentication_A6(p_PLMN, + v_Auth_Params.KAUSF, + v_Auth_Params.KDF, + p_NID); //@sic R5s220753 sic@ + + // Generate KAMF + v_Auth_Params.KAMF := f_NG_Authentication_A7(p_Identity, // @sic R5s190109, R5s230215 sic@ + v_Auth_Params.KSEAF, + v_Auth_Params.ABBA, + v_Auth_Params.KDF); + + // Derive KNASenc key + v_Auth_Params.NAS_Ciphering.K_NAS := f_NG_Authentication_A8(tsc_NAS_Enc_Alg, + v_Auth_Params.NAS_Ciphering.Algorithm, + v_Auth_Params.KAMF, + v_Auth_Params.KDF); + // Derive KNASint key + v_Auth_Params.NAS_Integrity.K_NAS := f_NG_Authentication_A8(tsc_NAS_Int_Alg, + v_Auth_Params.NAS_Integrity.Algorithm, + v_Auth_Params.KAMF, + v_Auth_Params.KDF); + return v_Auth_Params; + } + + /* + * @desc Function to be used before executing Authentication procedure in NG EAP-AKA to generated + * Key material and tokens according to TS 33.501 clause 6.1.3.1. + * References: TS 33.501 clause 6.1.3.1. RFC 5448 and RFC 4187 + * TS 33.102 for AUTN computation and TS TS 34.108 for XRES, CK, IK for Test USIM + * @param p_Auth_Params + * @param p_PLMN + * @param p_Identity + * @param p_Common_AuthenticationParams (default value: omit) + * @param p_AuthenticationError (default value: noError) + * @param p_NID (default value: omit) + * @return NG_NAS_SecurityParams_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_EAP_AuthenticationInit(NG_NAS_SecurityParams_Type p_Auth_Params, + NAS_PlmnId p_PLMN, + charstring p_Identity, + template (omit) Common_AuthenticationParams_Type p_Common_AuthenticationParams := omit, + AuthenticationError_Type p_AuthenticationError := noError, + template (omit) hexstring p_NID := omit) return NG_NAS_SecurityParams_Type + { + var NG_NAS_SecurityParams_Type v_Auth_Params := p_Auth_Params; + var B256_Type v_Ck_Ik_; + var B128_Type v_Ck_; + var B128_Type v_Ik_; + var bitstring v_MK; + var B256_Type v_K; + var charstring v_S; + + if (isvalue(p_Common_AuthenticationParams)) { + v_Auth_Params.AuthParams := valueof(p_Common_AuthenticationParams); + } else { + // Generates Ck, Ik, AUTN, XRES according to TS 33.102 and TS 34.108 + v_Auth_Params.AuthParams := f_AuthenticationInit(v_Auth_Params.AuthParams, p_AuthenticationError); // @sic R5s201223 sic@ + } + + v_Auth_Params.Ks := v_Auth_Params.AuthParams.CK & v_Auth_Params.AuthParams.IK; + // Generates Ck' and IK' + v_Ck_Ik_ := f_NG_Authentication_A3(v_Auth_Params.AuthParams, + v_Auth_Params.KDF, + v_Auth_Params.Ks, + p_PLMN, + p_NID); // @sic R5s220753 sic@ + v_Ck_ := substr (v_Ck_Ik_, 0, 128); + v_Ik_ := substr (v_Ck_Ik_, 128, 128); + + // RFC 5448 cl. 3.3 + v_K := v_Ik_ & v_Ck_; + v_S := "EAP-AKA'" & p_Identity; + // Master Key + v_MK := f_ExtendedEAPAKA_PRF (v_K, char2oct (v_S)); + v_Auth_Params.MK := v_MK; + + // As per 33.501 clause 6.1.3.1 + // KAUSF is EMSK in RFC 5448 cl. 3.3 + v_Auth_Params.KAUSF := substr (v_MK, 1152, 256); + + // Now update the other parameters (common to 5GAKA and EAP) + v_Auth_Params := fl_NG_NAS_AuthenticationInitOtherParams (v_Auth_Params, p_PLMN, p_Identity, p_NID); // @sic R5s220753, R5s230215 sic@ + return v_Auth_Params; + } + + /* + * @desc Generate and encode EAP-AKA' challenge according TS 33.501 clause 6.1.3.1 and RFC 5448 + * @param p_Auth_Params + * @param p_PLMN + * @param p_Id (default: '00'O) + * @param p_NID (default value: omit) + * @return octetstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_EAP_ChallengeReq(NG_NAS_SecurityParams_Type p_Auth_Params, + NAS_PlmnId p_PLMN, + O1_Type p_Id := '00'O, + template (omit) hexstring p_NID := omit) + return octetstring + { + var template (value) EAP_AT_RAND v_RAND; + var template (value) EAP_AT_AUTN v_AUTN; // @sic R5s200400 sic@ + var template (value) EAP_AT_KDF v_KDF; + var template (value) EAP_AT_KDF_INPUT v_KDF_INPUT; + var template (value) EAP_AT_MAC v_MAC; + var O16_Type v_MACValue := '00000000000000000000000000000000'O; + var bitstring v_K_aut; + var template (value) EAP_Message_Type v_EAP_Message; + var integer v_Msglen := 8; // @sic R5s200400 sic@ + var octetstring v_NetworkName := fl_GetServingNetworkName (p_PLMN, p_NID); // @sic R5s220753 sic@ + var bitstring v_EncodedMsg; + var integer v_Len; + var integer v_Paddinglen; + var integer i; + + + v_RAND := cs_EAP_AT_RAND (bit2oct(p_Auth_Params.AuthParams.RandValue)); + v_Msglen := v_Msglen + 5*4; + + v_AUTN := cs_EAP_AT_AUTN (bit2oct(p_Auth_Params.AuthParams.AUTN)); + v_Msglen := v_Msglen + 5*4; + + v_KDF := cs_EAP_AT_KDF; + v_Msglen := v_Msglen + 4; + + v_Len := lengthof(v_NetworkName); + if (v_Len mod 4 > 0) { + v_Paddinglen := 4 - v_Len mod 4; + for (i:=0; i < v_Paddinglen; i:=i+1) { + v_NetworkName := v_NetworkName & '00'O; + } + } + + v_KDF_INPUT := cs_EAP_AT_KDF_INPUT (v_NetworkName, int2oct(v_Len, 2)); + v_Msglen := v_Msglen + lengthof(v_NetworkName) + 4; + + v_MAC := cs_EAP_AT_MAC (v_MACValue); + v_Msglen := v_Msglen + 5*4; + + // Build the message with MAC=0 + v_EAP_Message := cs_EAP_Request_AKAChallenge(int2oct(v_Msglen, 2), + v_RAND, v_AUTN, v_KDF, + v_KDF_INPUT, v_MAC, p_Id); // @sic R5s201410 sic@ + + // Compute MAC according to RFC 5448 cl. 3.4.2 + v_EncodedMsg := encvalue(v_EAP_Message); + v_K_aut := substr(p_Auth_Params.MK, 128,256); // RFC 5448 cl. 3.3 K_aut to be used for computing MAC @sic R5s200400 sic@ + v_MACValue := bit2oct(substr(f_HMAC_SHA_256(v_K_aut, bit2oct(v_EncodedMsg)), 0, 128)); // @sic R5s200400 sic@ + v_MAC := cs_EAP_AT_MAC (v_MACValue); + + // Finally return the complete EAP-AKA' challenge with correct MAC + return (bit2oct(encvalue(cs_EAP_Request_AKAChallenge (int2oct(v_Msglen, 2), + v_RAND, v_AUTN, v_KDF, + v_KDF_INPUT, v_MAC, p_Id)))); // @sic R5s201410 sic@ + + } + + /* + * @desc Decode and check EAP-AKA' challenge according TS 24.501 clause 5.4.1.2.2 and RFC 5448 + * This function only checks for a successful Authentication Response - it doesn't check for any EAP failure messages + * @param p_Auth_Params (by reference) + * @param p_ReceivedEAP + * @param p_ResultInd (default value: *) + * @param p_Id (default value: '00'O) + * @return boolean + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_EAP_SuccessfulAuthenticationResponse(inout NG_NAS_SecurityParams_Type p_Auth_Params, + octetstring p_ReceivedEAP, + template EAP_AT_RESULT_IND p_ResultInd := *, + O1_Type p_Id := '00'O) + return boolean + { + var boolean v_Result := false; + var bitstring v_ReceivedEAP := oct2bit(p_ReceivedEAP); + var O16_Type v_RxdMAC; + var O16_Type v_MACValue := '00000000000000000000000000000000'O; + var bitstring v_K_aut; + var EAP_Message_Type v_EAP_Message; + var B32_128_Type v_RESValue; + var octetstring v_ModifiedEAP; + var integer v_Len; + var integer v_Paddinglen; + var integer i; + + if (decvalue(v_ReceivedEAP, v_EAP_Message) != 0) { + FatalError(__FILE__, __LINE__, "EAP message cannot be decoded"); + } + + //get length in bits of received RES (as it's a variable length, need to compare the correct length) + v_Len := oct2int(v_EAP_Message.akaChallenge_Rsp.attributes.res.reslen); + // store this in the global info + p_Auth_Params.AuthParams.XRESLength := v_Len / 8; + + // Get the RES value from the global info + v_RESValue := substr(p_Auth_Params.AuthParams.XRES, 0, v_Len); + // Now pad it so that it's (hopefully) the same length of the received value + if (v_Len mod 8 > 0 or (v_Len/8) mod 4 > 0) { + v_Paddinglen := 8 - v_Len mod 8; // pad to end of octet, in bits + v_Paddinglen := (4 - ((v_Len + v_Paddinglen)/8) mod 4)*8; // pad to multiple of 4 octets, in bits + for (i:=0; i < v_Paddinglen; i:=i+1) { + v_RESValue := v_RESValue & '0'B; + } + } + + // Check message is AKAChallenge, length and AT_RES is correct + if (match (v_EAP_Message, cr_EAP_Response_AKAChallenge(int2oct(lengthof(p_ReceivedEAP), 2), cr_EAP_AT_RES (bit2oct(v_RESValue), int2oct(v_Len, 2)), ?, p_ResultInd, p_Id))) { // @sic R5-201142, R5s201483 sic@ + // Then test MAC + v_RxdMAC := v_EAP_Message.akaChallenge_Rsp.attributes.mac.mac; + + // First build the message with MAC=0 + v_ModifiedEAP := fl_NG_EAP_Response_ClearMACValue(p_ReceivedEAP); // @sic R5s210153 sic@ + // Compute MAC according to RFC 5448 cl. 3.4.2 + v_K_aut := substr(p_Auth_Params.MK, 128, 256); // RFC 5448 cl. 3.3 K_aut to be used for computing MAC @sic R5s200400 sic@ + v_MACValue := bit2oct(substr(f_HMAC_SHA_256(v_K_aut, v_ModifiedEAP), 0, 128)); // @sic R5s200400, R5s210153 sic@ + // Then test it against the received value + if (match(v_RxdMAC, v_MACValue)) { // if the MAC also matches then the whole message is correct + v_Result := true; + } + } + return v_Result; + } + + + /* + * @desc Local function to find then replace the value in the MAC attribute of the received EAP message with all 0s, + * so that the MAC value can be calculated and checked in the TTCN. This function is required because + * the EAP attributes are defined as a set + * => the order of the attributes in the template received in the TTCN may not match order in undecoded message + * @param p_ReceivedEAP + * @return octetstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_NG_EAP_Response_ClearMACValue(octetstring p_ReceivedEAP) return octetstring + { + var octetstring v_ModifiedEAP := p_ReceivedEAP; + var integer i := 8; /* according to RFC 4187 clause 8.1 the EAP-AKA header is 8 octets */ + var integer k; + + while (p_ReceivedEAP[i] != '0B'O) { /* MAC attribute type is 11 according to RFC 4187 clause 11 */ + i := i + (oct2int(p_ReceivedEAP[i+1]) * 4); + if (i > lengthof(p_ReceivedEAP)) { + FatalError(__FILE__, __LINE__, "no MAC attribute found"); + } + } + i := i + 4; /* first 4 octets are type, length, reserved (RFC 4187 clause 10.15) */ + for (k := 0; k < 16; k := k + 1) { + v_ModifiedEAP[i+k] := '00'O; + } + return v_ModifiedEAP; + } + +} diff --git a/ttcn/Lib3GPP/NG_NAS/NG_NAS_Templates.ttcn b/ttcn/Lib3GPP/NG_NAS/NG_NAS_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6707134423bdc8c632d928191545b3f434fb1064 --- /dev/null +++ b/ttcn/Lib3GPP/NG_NAS/NG_NAS_Templates.ttcn @@ -0,0 +1,2733 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-09-14 09:54:06 +0200 (Thu, 14 Sep 2023) $ +// $Rev: 37128 $ +/******************************************************************************/ + +module NG_NAS_Templates { + + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + import from NG_NAS_TypeDefs all; + import from NG_NAS_MsgContainers all; + import from NAS_CommonTemplates all; + import from NG_NAS_Common all; + import from Common4G5G_LoopBack all; + import from CommonIP all; + + //**************************************************************************** + // common NAS message (security protected or non security protected) + //---------------------------------------------------------------------------- + // templates for NAS_SecurityProtectionInfo_Type + + template (value) NG_NAS_SecurityProtectionInfoDL_Type cs_NG_NAS_SecurityProtectionInfo(SecurityHeaderType p_Status, + boolean p_ForceMacError := false) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Status := p_Status, + ForceMacError := p_ForceMacError + }; + + template (present) NG_NAS_SecurityProtectionInfoUL_Type cr_NG_NAS_SecurityProtectionInfo(template (present) SecurityHeaderType p_ExpectedStatus) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Status := p_ExpectedStatus, + NasCount := ? + }; + + // common templates for security-protected or non security-protected NAS messages + + template (value) NG_NAS_MSG_Request_Type cs_NG_NAS_Request(SecurityHeaderType p_SecurityStatus, + template (value) NG_NAS_DL_Message_Type p_Msg) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + SecurityProtection := cs_NG_NAS_SecurityProtectionInfo(p_SecurityStatus), + Pdu := { + Msg := p_Msg, + PiggybackedPduList := omit + } + }; + + + template (present) NG_NAS_MSG_Indication_Type cr_NG_NAS_Ind(template (present) SecurityHeaderType p_ExpectedSecurityStatus, + template (present) NG_NAS_UL_Message_Type p_Msg := ?) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + SecurityProtection := cr_NG_NAS_SecurityProtectionInfo(p_ExpectedSecurityStatus), + Pdu := { + Msg := p_Msg, + PiggybackedPduList := omit + } + }; + + template (value) NG_NAS_MSG_Request_Type cs_NG_NAS_RequestWithPiggybacking(SecurityHeaderType p_SecurityStatus, + template (value) NG_NAS_DL_Pdu_Type p_PiggyBackList) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + SecurityProtection := cs_NG_NAS_SecurityProtectionInfo(p_SecurityStatus), + Pdu := p_PiggyBackList + }; + + template (value) NG_NAS_DL_Pdu_Type cs_NG_NAS_DL_PduWithPiggybacking(template (value) NG_NAS_DL_Message_Type p_GmmMsg, + template (value) NG_NAS_DL_Message_Type p_PiggyBackedMsg) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Msg := p_GmmMsg, + PiggybackedPduList := { + { + Msg := p_PiggyBackedMsg, + PiggybackedPduList := omit + } + } + }; + + template (value) NG_NAS_DL_Pdu_Type cs_NG_NAS_DL_PduWithoutPiggyback(template (value) NG_NAS_DL_Message_Type p_GmmMsg) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Msg := p_GmmMsg, + PiggybackedPduList := omit + }; + + template (present) NG_NAS_MSG_Indication_Type cr_NG_NAS_IndWithPiggybacking(template (present) SecurityHeaderType p_ExpectedSecurityStatus, + template (present) NG_NAS_UL_Pdu_Type p_PiggyBackList := ?) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + SecurityProtection := cr_NG_NAS_SecurityProtectionInfo(p_ExpectedSecurityStatus), + Pdu := p_PiggyBackList + }; + + //**************************************************************************** + // NG mobility management messages (24.501 cl. 8.2) + //---------------------------------------------------------------------------- + + template (omit) NG_NAS_DL_Message_Type cs_NG_AUTHENTICATION_REQUEST(NAS_KsiValue p_KeySetId, + template (value) ABBA p_ABBA, + template (omit) RAND p_RAND := omit, + template (omit) AUTN p_AUTN := omit, + template (omit) EAP_Message p_EAP := omit) := + { /* 24.501 cl. 8.2.1 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + authentication_Request := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationRequest, /* cl. 9.7 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + ngNasKeySetId := cs_NAS_KeySetIdentifier_lv(p_KeySetId, tsc_NasKsi_NativeSecurityContext), /* cl. 9.11.3.32 M V 1/2 */ + abba := p_ABBA, /* cl. 9.11.3.10 M LV 3-n */ + rand := p_RAND, /* cl. 9.11.3.16 O TV 17 IEI=21 */ + autn := p_AUTN, /* cl. 9.11.3.15 O TLV 18 IEI=20 */ + eapMessage := p_EAP /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_AUTHENTICATION_RESPONSE (template AuthenticationResponseParameter p_Res := cr_AuthenticationResponseParameter(?), + template EAP_Message p_EAP := omit) := + { /* 24.501 cl. 8.2.2 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + authentication_Response := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationResponse, /* cl. 9.7 M V 1 */ + authResponseParam := p_Res, /* cl. 9.11.3.17 O TLV 18 IEI=2D */ + eapMessage := p_EAP /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_AUTHENTICATION_RESULT (NAS_KsiValue p_KeySetId, + template (omit) EAP_Message p_EAP, + template (omit) ABBA p_ABBA) := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.3 */ + authentication_Result := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationResult, /* cl. 9.7 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + ngNasKeySetId := cs_NAS_KeySetIdentifier_lv(p_KeySetId, tsc_NasKsi_NativeSecurityContext), /* cl. 9.11.3.32 M V 1/2 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + abba := p_ABBA /* cl. 9.11.3.10 M LV 3-n */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_AUTHENTICATION_FAILURE (template (present) GMM_GSM_Cause p_Cause := cr_GMM_GSM_Cause(omit), + template AuthenticationFailureParameter p_AuthFailParam := omit) := + { /* 24.501 cl. 8.2.4 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + authentication_Failure := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationFailure, /* cl. 9.7 M V 1 */ + gmmCause := p_Cause, /* cl. 9.11.3.2 M V 1 */ + authFailureParam := p_AuthFailParam /* cl. 9.11.3.12 O TLV 16 IEI=30 */ + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_AUTHENTICATION_REJECT (template (omit) EAP_Message p_EAP):= + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.5 */ + authentication_Reject := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationReject, /* cl. 9.7 M V 1 */ + eapMessage := p_EAP /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_REGISTRATION_REQUEST(template (present) RegistrationType p_RegistrationType, + template (present) NAS_KsiValue p_KeySetId, + template (present) B1_Type p_Tsc, + template (present) NG_MobileIdentity p_MobileId, + template NAS_KeySetIdentifier p_NonCurrentKSI, + template NG_GMM_Cap p_GMM_Cap, + template NG_UE_SecurityCapability p_UESecurityCap, + template NSSAI p_ReqNSSAI, + template NG_TrackingAreaId p_TAI, + template UE_NetworkCap p_UE_NetworkCap, + template ULDataStatus p_ULDataStatus, + template PDU_SessionStatus p_PDU_SessionStatus, + template MICO_Ind p_MICO_Ind, + template UE_Status p_UE_Status, + template NG_MobileIdentity p_AddGUTI, + template AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus, + template UE_UsageSetting p_UE_UsageSetting, + template NG_DRXparameter p_DRXparam, + template EPS_MessageContainer p_EPSMsg, + template LADN_Ind p_LADN_Ind, + template PayloadContainerType p_ContainerType, // @sic R5w190113 sic@ + template PayloadContainer p_Payload, + template NetworkSlicingInd p_NetworkSlicingInd, + template NG_UpdateType p_NG_UpdateType, + template MS_Clsmk2 p_MS_Clsmk2, + template CodecList p_SupportedCodecs, + template EPS_BearerContextStatus p_EPS_BearerContextStatus, // @sic R5s190543 sic@ + template NASMessageContainer p_Msg, + template ExtdDRXParams p_ExtdDRXParams, + template GPRS_Timer3 p_T3324, + template UERadioCapId p_UERadioCapId, + template MappedNSSAI p_MappedNSSAI, + template AddInfoRequest p_AddInfoRequest, + template WUSAssistInfo p_WUSAssistInfo, + template N5GCInd p_N5GCInd, + template NB_N1ModeDRXParams p_NB_N1ModeDRXParams, + template UE_RequestType p_UeRequestType, + template NG_PagingRestriction p_PagingRestrict, + template ServiceLvlAAContainer p_ServiceLvlAA, + template NID p_NId, + template PLMN_IdIE p_MSPLMNwDisasterCondition, + template PEIPS_AssistInfo p_RequestedPEIPS_AssistInfo, + template GPRS_Timer3 p_T3512) := + { /* 24.501 cl. 8.2.6 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + registration_Request := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_RegistrationRequest, /* cl. 9.7 M V 1 */ + ngNasKSI := cr_NAS_KeySetIdentifier(p_KeySetId, p_Tsc), /* cl. 9.11.3.32 M V 1/2 */ + registrationType := p_RegistrationType, /* cl. 9.11.3.7 M LV 2 */ + ngMobileId := p_MobileId, /* cl. 9.11.3.4 M LV 5-? */ + nonCurrentNativeKSI := p_NonCurrentKSI, /* cl. 9.11.3.32 O TV 1 IEI=C- */ + gmmCapability := p_GMM_Cap, /* cl. 9.11.3.1 O TLV 3-15 IEI=10 */ + ueSecurityCapability := p_UESecurityCap, /* cl. 9.11.3.54 O TLV 4-10 IEI=2E */ + requestedNSSAI := p_ReqNSSAI, /* cl. 9.11.3.37 O TLV 4-74 IEI=2F */ + lastVisitedRegisteredTai := p_TAI, /* cl. 9.11.3.8 O TV 7 IEI=52 */ + s1_UE_Capability := p_UE_NetworkCap, /* cl. 9.11.3.48 O LV 4-15 IEI=65 */ + ulDataStatus := p_ULDataStatus, /* cl. 9.11.3.57 O TLV 4-34 IEI=40 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.3.44 O TLV 4-34 IEI=50 */ + micoInd := p_MICO_Ind, /* cl. 9.11.3.31 O TLV 1 IEI=B */ + ueStatus := p_UE_Status, /* cl. 9.11.3.56 O TLV 3 IEI=2B */ + additionalGUTI := p_AddGUTI, /* cl. 9.11.3.4 O TLV 5-? IEI=2C */ + allowedPDUSessionStatus := p_AllowedPDU_SessionStatus, /* cl. 9.11.3.13 O TLV 4-34 IEI=25 */ + ueUsageSetting := p_UE_UsageSetting, /* cl. 9.11.3.55 O TLV 3 IEI=60 */ + reqDRXParams := p_DRXparam, /* cl. 9.11.3.22 O TLV ? IEI=51 */ + epsMessage := p_EPSMsg, /* cl. 9.11.3.24 O TLV-E ? IEI=7C */ + ladnInd := p_LADN_Ind, /* cl. 9.11.3.29 O TLV-E 3-811 IEI=7E */ + payloadContainerType := p_ContainerType, /* cl. 9.11.3.40 O TV 1 IEI=8 Mar 19 @sic R5w190113 sic@*/ + payload := p_Payload, /* cl. 9.11.3.39 O TLV-E 4-65538 IEI=7B */ + networkSlicingInd := p_NetworkSlicingInd, /* cl. 9.11.3.36 O TV 1 IEI=9 Dec18 */ + updateType := p_NG_UpdateType, /* cl. 9.11.3.9A O TLV 3 IEI=53 Dec18 */ + msClassmark2 := p_MS_Clsmk2, /* cl. 9.11.3.31C O TLV 5 IEI=41 Sep20 @sic R5s201387 Baseline Moving sic@ */ + supportedCodecs := p_SupportedCodecs, /* cl. 9.11.3.51A O TLV 5-n IEI=42 Sep20 @sic R5s201387 Baseline Moving sic@ */ + nasMsg := p_Msg, /* cl. 9.11.3.33 O TLV-E 4-n IEI=71 Dec18 */ + epsBearerContextStatus := p_EPS_BearerContextStatus, /* cl. 9.11.3.23A O TLV 4 IEI=60 Jun19 @sic R5s190543 sic@ */ + requestedExtdDRXParams := p_ExtdDRXParams, /* cl. 9.11.3.26A O TLV 3 IEI=6E Sep20 @sic R5s201387 Baseline Moving sic@ */ + t3324Value := p_T3324, /* cl. 9.11.2.5 O TLV 3 IEI=6A Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRadioCapabilityId := p_UERadioCapId, /* cl. 9.11.3.68 O TLV 3-n IEI=67 Sep20 @sic R5s201387 Baseline Moving sic@ */ + requestedMappedNSSAI := p_MappedNSSAI, /* cl. 9.11.3.31B O TLV 3-42 IEI=35 Sep20 @sic R5s201387 Baseline Moving sic@ */ + additionalInfoReq := p_AddInfoRequest, /* cl. 9.11.3.12A O TLV 3 IEI=48 Sep20 @sic R5s201387 Baseline Moving sic@ */ + requestedWUSAssistanceInfo := p_WUSAssistInfo, /* cl. 9.11.3.71 O TLV 3-n IEI=1A Sep20 @sic R5s201387 Baseline Moving sic@ */ + n5GCInd := p_N5GCInd, /* cl. 9.11.3.72 O T 1 IEI=A Sep20 @sic R5s201387 Baseline Moving sic@ */ + requestedNB_N1DRXParams := p_NB_N1ModeDRXParams, /* cl. 9.11.3.73 O TLV 3 IEI=30 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRequestType := p_UeRequestType, /* cl. 9.11.3.76 O TLV 3 IEI=29 Sep22 @sic R5s221179 Baseline Moving sic@ */ + pagingRestrict := p_PagingRestrict, /* cl. 9.11.3.77 O TLV 3-35 IEI=28 Sep22 @sic R5s221179 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA, /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + nId := p_NId, /* cl. 9.11.3.79 O TLV 8 IEI=32 Sep22 @sic R5s221179 Baseline Moving sic@ */ + msPLMNwDisasterCondition := p_MSPLMNwDisasterCondition, /* cl. 9.11.3.85 O TLV 5 IEI=16 Sep22 @sic R5s221179 Baseline Moving sic@ */ + requestedPEIPS_AssistInfo := p_RequestedPEIPS_AssistInfo, /* cl. 9.11.3.80 O TLV 3-n IEI=2A Sep22 @sic R5s221179 Baseline Moving sic@ */ + t3512Value := p_T3512 /* cl. 9.11.2.5 O TLV 3 IEI=3B Jun23 @sic R5s230533 sic@ */ + } + }; + + template (present) NG_UpdateType cr_NG_Update (template (present) B1_Type p_NgRAN_RCU := ?, + template (present) B1_Type p_SmsRequested := ?, + template (present) B2_Type p_EPS_PNB_CIoT := ?, + template (present) B2_Type p_NG_PNB_CIoT := ?):= + { /* 24.501 cl. 9.11.3.9A; + @sic R5s201387 Baseline Moving sic@ */ + /* @status APPROVED (NR5GC) */ + iei := '53'O, + iel := '01'O, + spare := '00'B, + eps_PNB_CIoT := p_EPS_PNB_CIoT, + ng_PNB_CIoT := p_NG_PNB_CIoT, + ngRAN_RCU := p_NgRAN_RCU, + smsRequested := p_SmsRequested + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_REGISTRATION_ACCEPT(template (value) RegistrationResult p_RegistrationResult, + template (omit) NG_MobileIdentity p_GUTI, + template (omit) PLMN_List p_EPLMNs, + template (omit) NG_TrackingAreaIdList p_TAIList, + template (omit) NSSAI p_AllowedNSSAI, + template (omit) RejectedNSSAI p_RejectedNSSAI, + template (omit) NSSAI p_ConfiguredNSSAI, + template (omit) NG_NetworkFeatureSupport p_NwkFeatureSupport, + template (omit) PDU_SessionStatus p_PDU_SessionStatus, + template (omit) PDU_SessionReactivationResult p_PDU_SessionReactResult, + template (omit) PDU_SessionReactivationError p_PDU_SessionReactError, + template (omit) LADN_Info p_LADN_Info, + template (omit) MICO_Ind p_MICO_Ind, + template (omit) NetworkSlicingInd p_NetworkSlicingInd, + template (omit) ServiceAreaIdList p_SAIList, + template (omit) GPRS_Timer3 p_T3512, + template (omit) GPRS_Timer2 p_Non3GPPDereg, + template (omit) GPRS_Timer2 p_T3502, + template (omit) EmergNumList p_EmergNumList, + template (omit) ExtdEmergNumList p_ExtdEmergNumList, + template (omit) SORTransparentContainer p_SOR, + template (omit) EAP_Message p_EAP, + template (omit) InclusionModeNSSAI p_InclusionModeNSSAI, + template (omit) OperatorAccessCatDefinitions p_AccessCatDefinition, + template (omit) NG_DRXparameter p_NG_DRXparameter, + template (omit) Non3GPP_NW_ProvidedPolicies p_Non3GPP_NW_ProvidedPolicies, + template (omit) EPS_BearerContextStatus p_EPS_BearerContextStatus, + template (omit) ExtdDRXParams p_NegotiatedExtdDRXParams, + template (omit) GPRS_Timer3 p_T3447, + template (omit) GPRS_Timer3 p_T3448, + template (omit) GPRS_Timer3 p_T3324, + template (omit) UERadioCapId p_UERadioCapId, + template (omit) UERadioCapIdDeletion p_UERadioCapIdDeletion, + template (omit) NSSAI p_PendingNSSAI, + template (omit) NG_CipheringKeyData p_CipheringKeyData, + template (omit) CAGInfoList p_CAGInfoList, + template (omit) TruncatedS_TMSIConfig p_TruncatedS_TMSIConfig, + template (omit) WUSAssistInfo p_WUSAssistInfo, + template (omit) NB_N1ModeDRXParams p_NB_N1ModeDRXParams, + template (omit) ExtdRejectedNSSAI p_ExtdRejectedNSSAI, + template (omit) ServiceLvlAAContainer p_ServiceLvlAA, + template (omit) PEIPS_AssistInfo p_NegotiatedPEIPS_AssistInfo, + template (omit) NG_AddReqResult p_AddRequestResult, + template (omit) NSSRG_Info p_NssrgInfo, + template (omit) RegistrationWaitRange p_DisasterRoamingWaitRange, + template (omit) RegistrationWaitRange p_DisasterReturnWaitRange, + template (omit) DisasterPLMNList p_DisasterPLMNList, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService, + template (omit) ExtdCAGInfoList p_ExtdCAGInfoList, + template (omit) NSAG_Info p_NsagInfo) := + { /* 24.501 cl. 8.2.7 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + registration_Accept := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_RegistrationAccept, /* cl. 9.7 M V 1 */ + registrationResult := p_RegistrationResult, /* cl. 9.11.3.6 M LV 2 */ + guti := p_GUTI, /* cl. 9.11.3.4 O TLV 13 IEI=2C */ + equivalentPlmns := p_EPLMNs, /* cl. 9.11.3.45 O TLV 5-47 IEI=4A */ + taiList := p_TAIList, /* cl. 9.11.3.9 O TLV 9-114 IEI=54 */ + allowedNSSAI := p_AllowedNSSAI, /* cl. 9.11.3.37 O TLV 4-74 IEI=70 */ + rejectedNSSAI := p_RejectedNSSAI, /* cl. 9.11.3.46 O TLV 4-42 IEI=0x11 */ + configuredNSSAI := p_ConfiguredNSSAI, /* cl. 9.11.3.37 O TLV 4-146 IEI=31 */ + ngs_NetworkFeatureSupport := p_NwkFeatureSupport, /* cl. 9.11.3.5 O TLV 3-5 IEI=21*/ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.3.44 O TLV 4-34 IEI=50 */ + pduSessionReactivationResult := p_PDU_SessionReactResult, /* cl. 9.11.3.42 O TLV 4-32 IEI=26 */ + pduSessionReactResultError := p_PDU_SessionReactError, /* cl. 9.11.3.43 O TLV-E 5-515 IEI=7E */ + ladnInfo := p_LADN_Info, /* cl. 9.11.3.30 O TLV-E 12-1707 IEI=79 */ + micoInd := p_MICO_Ind, /* cl. 9.11.3.31 O TV 1 IEI=B */ + networkSlicingInd := p_NetworkSlicingInd, /* cl. 9.11.3.36 O TV 1 IEI=9 */ + saiList := p_SAIList, /* cl. 9.11.3.49 O TLV 6-114 IEI=27 */ + t3512Value := p_T3512, /* cl. 9.11.2.5 O TLV 3 IEI=5E */ + non3GPPDeregisterValue := p_Non3GPPDereg, /* cl. 9.11.2.4 O TLV 3 IEI=5D */ + t3502Value := p_T3502, /* cl. 9.11.2.4 O TLV 3 IEI=16 */ + emergencyNumberList := p_EmergNumList, /* cl. 9.11.3.23 O TLV 5-50 IEI=34 */ + xtdEmergencyNumberList := p_ExtdEmergNumList, /* cl. 9.11.3.26 O TLV-E 6-65538 IEI=7A */ + sorTransparentContainer := p_SOR, /* cl. 9.11.3.51 O TLV-E 20-2048 IEI=7F */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78*/ + inclusionModeNSSAI := p_InclusionModeNSSAI, /* cl. 9.11.3.37A O TV 1 IEI=A */ + operatorAccessCatDefs := p_AccessCatDefinition, /* cl. 9.11.3.38 O TLV-E 4-n IEI=76 */ + negotiatedDRXParams := p_NG_DRXparameter, /* cl. 9.11.3.2A O TLV 3 IEI=51 */ + non3GPP_NW_ProvidedPolicies := p_Non3GPP_NW_ProvidedPolicies, /* cl. 9.11.3.58 O TV 1 IEI = ? Mar 19 @sic R5w190113 sic@ */ + epsBearerContextStatus := p_EPS_BearerContextStatus, /* cl. 9.11.3.23A O TLV 4 IEI=60 Jun19 @sic R5s190543 sic@ */ + negotiatedExtdDRXParams := p_NegotiatedExtdDRXParams, /* cl. 9.11.3.26A O TLV 3 IEI=6E Sep20 @sic R5s201387 Baseline Moving sic@ */ + t3447Value := p_T3447, /* cl. 9.11.2.5 O TLV 3 IEI=6C Sep20 @sic R5s201387 Baseline Moving sic@ */ + t3448Value := p_T3448, /* cl. 9.11.2.4 O TLV 3 IEI=6B Sep20 @sic R5s201387 Baseline Moving sic@ */ + t3324Value := p_T3324, /* cl. 9.11.2.5 O TLV 3 IEI=6A Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRadioCapabilityId := p_UERadioCapId, /* cl. 9.11.3.68 O TLV 3-n IEI=67 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRadioCapIdDeletionInd := p_UERadioCapIdDeletion, /* cl. 9.11.3.69 O TV 1 IEI=E Sep20 @sic R5s201387 Baseline Moving sic@ */ + pendingNSSAI := p_PendingNSSAI, /* cl. 9.11.3.37 O TLV 4-146 IEI=39 Sep20 @sic R5s201387 Baseline Moving sic@ */ + cipheringKeyData := p_CipheringKeyData, /* cl. 9.11.3.18C O TLV-E 34-n IEI=74 Sep20 @sic R5s201387 Baseline Moving sic@ */ + cagInfoList := p_CAGInfoList, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + truncatedS_TMSIConfig := p_TruncatedS_TMSIConfig, /* cl. 9.11.3.70 O TLV 3 IEI=1B Sep20 @sic R5s201387 Baseline Moving sic@ */ + negotiatedWUSAssistanceInfo := p_WUSAssistInfo, /* cl. 9.11.3.71 O TLV 3-n IEI=1C Sep20 @sic R5s201387 Baseline Moving sic@ */ + negotiatedNB_N1DRXParams := p_NB_N1ModeDRXParams, /* cl. 9.11.3.73 O TLV 3 IEI=29 Sep20 @sic R5s201387 Baseline Moving sic@ */ + extdRejectedNSSAI := p_ExtdRejectedNSSAI, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA, /* cl. 9.11.2.10 O TLV-E 6-n IEI=7B Sep22 @sic R5s221179 Baseline Moving sic@ */ + negotiatedPEIPS_AssistInfo := p_NegotiatedPEIPS_AssistInfo, /* cl. 9.11.3.80 O TLV 3-n IEI=33 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ngAddRequestResult := p_AddRequestResult, /* cl. 9.11.3.81 O TLV 3 IEI=34 Sep22 @sic R5s221179 Baseline Moving sic@ */ + nssrgInfo := p_NssrgInfo, /* cl. 9.11.3.82 O TLV-E 7-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterRoamingWaitRange := p_DisasterRoamingWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=14 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterReturnWaitRange := p_DisasterReturnWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterPLMNList := p_DisasterPLMNList, /* cl. 9.11.3.83 O TLV 2-n IEI=13 Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_Roaming := p_ForbidTAIList_Roaming, /* cl. 9.11.3.9 O TLV 9-114 IEI=1D Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_RegProvService := p_ForbidTAIList_RegProvService, /* cl. 9.11.3.9 O TLV 9-114 IEI=1E Sep22 @sic R5s221179 Baseline Moving sic@ */ + extdCAGInfoList := p_ExtdCAGInfoList, /* cl. 9.11.3.86 O TLV-E 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + nsagInfo := p_NsagInfo /* cl. 9.11.3.87 O TLV-E 10-n IEI=7C Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_REGISTRATION_COMPLETE(template SORTransparentContainer p_SOR := *) := + { /* 24.501 cl. 8.2.8 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + registration_Complete := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_RegistrationComplete, /* cl. 9.7 M V 1 */ + sorTransparentContainer := p_SOR /* cl. 9.11.3.49 O TLV-E 20-2048 IEI=7F */ + } + }; + + template (present) SORTransparentContainer cr_NG_SORTransparentContainer(template (present) SOR_Header p_Header, + O16_Type p_Mac, + template (omit) IEI8_Type p_IEI := '73'O, + template (omit) Type6Length_Type p_IEL := '0011'O):= + /* @status APPROVED (NR5GC) */ + cr_NG_SORTransparentContainerValue (p_Header, + p_Mac, + omit, + omit, + p_IEI, + p_IEL); + + template (value) SORTransparentContainer cs_NG_SORTransparentContainer_IeiIel(template (value) SOR_Header p_Header, + O16_Type p_Mac, + O2_Type p_Counter, + octetstring p_Data) := + /* @status APPROVED (NR5GC) */ + cs_NG_SORTransparentContainerValue (p_Header, + p_Mac, + p_Counter, + p_Data, + '73'O, + int2oct(lengthof(p_Data) + 19, 2)); + + + template (omit) SORTransparentContainer cs_NG_SORTransparentContainerValue(template (value) SOR_Header p_Header, + O16_Type p_Mac_UE, + template (omit) O2_Type p_Counter := omit, + template (omit) octetstring p_Data := omit, + template (omit) IEI8_Type p_IEI := omit, + template (omit) Type6Length_Type p_IEL := omit):= + { + /* @status APPROVED (NR5GC) */ + iei := p_IEI, + iel := p_IEL, + header :=p_Header, + mac := p_Mac_UE, + counter := p_Counter, + data := p_Data + }; + + template (present) SORTransparentContainer cr_NG_SORTransparentContainerValue(template (present) SOR_Header p_Header, + O16_Type p_Mac_UE, + template (omit) O2_Type p_Counter := omit, + template (omit) octetstring p_Data := omit, + template (omit) IEI8_Type p_IEI := omit, + template (omit) Type6Length_Type p_IEL := omit):= + { + /* @status APPROVED (NR5GC) */ + iei := p_IEI, + iel := p_IEL, + header :=p_Header, + mac := p_Mac_UE, + counter := p_Counter, + data := p_Data + }; + + template (value) SOR_Header cs_NG_SOR_Header(B1_Type p_Ack, + B1_Type p_ListType, + B1_Type p_ListInd, + B1_Type p_DataType, + B1_Type p_Ap := '0'B):= + { /* @status APPROVED (NR5GC) */ + /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + spare :=tsc_Spare3, + ap := p_Ap, + ack :=p_Ack, + listType_MSSNPNSI :=p_ListType, + listInd_MSSI :=p_ListInd, + dataType :=p_DataType + }; + + template(present) SOR_Header cr_NG_SOR_Header(B1_Type p_Ack, + template(present) B1_Type p_ListType, + template(present) B1_Type p_ListInd, + template(present) B1_Type p_DataType, + template(present) B1_Type p_Ap := '0'B):= + { /* @status APPROVED (NR5GC) */ + /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + spare :=tsc_Spare3, + ap := p_Ap, + ack :=p_Ack, + listType_MSSNPNSI :=p_ListType, + listInd_MSSI :=p_ListInd, + dataType :=p_DataType + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_REGISTRATION_REJECT (template (value) GMM_GSM_Cause p_Cause, + template (omit) GPRS_Timer2 p_T3346 := omit, + template (omit) GPRS_Timer2 p_T3502 := omit, + template (omit) EAP_Message p_EAP := omit, + template (omit) RejectedNSSAI p_RejectedNSSAI := omit, + template (omit) CAGInfoList p_CAGInfoList := omit, + template (omit) ExtdRejectedNSSAI p_ExtdRejectedNSSAI := omit, + template (omit) RegistrationWaitRange p_DisasterReturnWaitRange := omit, + template (omit) ExtdCAGInfoList p_ExtdCAGInfoList := omit, + template (omit) GPRS_Timer3 p_LowerBoundTimerValue := omit, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming := omit, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := omit) := + { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + /* 24.501 cl. 8.2.9 */ + registration_Reject := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_RegistrationReject, /* cl. 9.7 M V 1 */ + gmmCause := p_Cause, /* cl. 9.11.3.2 M V 1 */ + t3346 := p_T3346, /* cl. 9.11.2.4 O TLV 3 IEI=5F */ + t3502 := p_T3502, /* cl. 9.11.2.4 O TLV 3 IEI=16 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + rejectedNSSAI := p_RejectedNSSAI, /* cl. 9.11.3.46 O TLV 4-42 IEI=69 Sep20 @sic R5s201387 Baseline Moving sic@ */ + cagInfoList := p_CAGInfoList, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + extdRejectedNSSAI := p_ExtdRejectedNSSAI, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterReturnWaitRange := p_DisasterReturnWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + extdCAGInfoList := p_ExtdCAGInfoList, /* cl. 9.11.3.86 O TLV-E 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + lowerBoundTimerValue := p_LowerBoundTimerValue, /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_Roaming := p_ForbidTAIList_Roaming, /* cl. 9.11.3.9 O TLV 9-114 IEI=3B Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_RegProvService := p_ForbidTAIList_RegProvService /* cl. 9.11.3.9 O TLV 9-114 IEI=3C Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_UL_NAS_TRANSPORT (template (present) PayloadContainerType p_PayloadContainerType, + template NG_PDU_SessionId p_PDU_SessionId, + template NG_PDU_SessionId p_OldPDU_SessionId, + template NG_Request_Type p_RequestType, + template S_NSSAI_Type p_S_NSSAI, + template DNN p_DNN, + template AdditionalInformation p_AdditionalInfo, + template MA_PDUSessionInfo p_MA_PDUSessionInfo, + template ReleaseAssistanceInd p_ReleaseAssistanceInd) := + { /* 24.501 cl. 8.2.10 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + ul_Nas_Transport := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_UL_NASTransport, /* cl. 9.7 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + payloadContainerType := p_PayloadContainerType, /* cl. 9.11.3.40 M V 1/2 */ + payload := cr_PayloadContainer, /* cl. 9.11.3.39 M LV-E 3-65537 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.11.3.41 C TV 2 IEI=70 */ + oldPDUSessionId := p_OldPDU_SessionId, /* cl. 9.11.3.41 O TV 3 IEI=61 */ + requestType := p_RequestType, /* cl. 9.`0.3.47 O TV 1 IEI=8 */ + s_NSSAI := p_S_NSSAI, /* cl. 9.11.2.8 O TLV 3-10 IEI=22 */ + dnn := p_DNN, /* cl. 9.11.3.21 O TLV 3-102 IEI=25 */ + additionalInfo := p_AdditionalInfo, /* cl. 9.11.2.1 O TLV 3-n IEI=24 */ + maPDUSessionInfo := p_MA_PDUSessionInfo, /* cl. 9.11.3.31A O TV 1 IEI=A Sep20 @sic R5s201387 Baseline Moving sic@ */ + releaseAssistanceInd := p_ReleaseAssistanceInd /* cl. 9.11.3.46A O TV 1 IEI=F Sep20 @sic R5s201387 Baseline Moving sic@ */ + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_DL_NAS_TRANSPORT(template (value) PayloadContainerType p_PayloadContainerType, + template (value) PayloadContainer p_Payload, + template (omit) NG_PDU_SessionId p_PDU_SessionId, + template (omit) AdditionalInformation p_AdditionalInfo, + template (omit) GMM_GSM_Cause p_Cause, + template (omit) GPRS_Timer3 p_BackOff, + template (omit) GPRS_Timer3 p_LowerBoundTimerValue) := + { /* 24.501 cl. 8.2.11 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + dl_Nas_Transport := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_DL_NASTransport, /* cl. 9.7 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + payloadContainerType := p_PayloadContainerType, /* cl. 9.11.3.40 M V 1/2 */ + payload := p_Payload, /* cl. 9.11.3.39 M LV-E 3-65537 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.11.3.41 C TV 2 IEI=70 */ + additionalInfo := p_AdditionalInfo, /* cl. 9.11.2.1 O TLV 3-n IEI=24 */ + gmmCause := p_Cause, /* cl. 9.11.3.2 O TV 2 IEI=58 */ + backOffTimerValue := p_BackOff, /* cl. 9.11.2.5 O TLV 3 IEI=37 */ + lowerBoundTimerValue := p_LowerBoundTimerValue /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_DEREGISTRATION_REQUEST_MO(template (present) DeregisterType p_DeregisterType, + template (present) NAS_KeySetIdentifier p_KSI, + template (present) NG_MobileIdentity p_MobileId) := + { /* 24.501 cl. 8.2.12 (UE originating deregister) */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + deregistration_RequestMO := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_DeregistrationRequest_MO, /* cl. 9.7 M V 1 */ + ngKSI := p_KSI, /* cl. 9.11.3.32 M V 1/2 */ + deregistrationType := p_DeregisterType, /* cl. 9.11.3.20 M V 1/2 */ + ngMobileId := p_MobileId /* cl. 9.11.3.4 M LV 5-? */ + } + }; + + template (value) NG_NAS_DL_Message_Type cs_NG_DEREGISTRATION_ACCEPT := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.13/15 (DL) */ + deregistration_Accept := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_DeregistrationAccept_MO /* cl. 9.7 M V 1 */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_DEREGISTRATION_ACCEPT := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.2.13/15 (UL) */ + deregistration_Accept := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_DeregistrationAccept_MT /* cl. 9.7 M V 1 */ + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_DEREGISTRATION_REQUEST_MT (template (value) DeregisterType p_Type, + template (omit) GMM_GSM_Cause p_Cause, + template (omit) GPRS_Timer2 p_T3346 := omit, + template (omit) RejectedNSSAI p_RejectedNSSAI := omit, + template (omit) CAGInfoList p_CAGInfoList := omit, + template (omit) ExtdRejectedNSSAI p_ExtdRejectedNSSAI := omit, + template (omit) RegistrationWaitRange p_DisasterReturnWaitRange := omit, + template (omit) ExtdCAGInfoList p_ExtdCAGInfoList := omit, + template (omit) GPRS_Timer3 p_LowerBoundTimerValue := omit, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming := omit, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := omit) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.2.14 (UE terminated deregister) */ + deregistration_RequestMT := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_DeregistrationRequest_MT, /* cl. 9.7 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + deregistrationType := p_Type, /* cl. 9.11.3.20 M V 1/2 */ + gmmCause := p_Cause, /* cl. 9.11.3.2 O TV 2 IEI=058 */ + t3346 := p_T3346, /* cl. 9.11.2.4 O TLV 3 IEI=5F */ + rejectedNSSAI := p_RejectedNSSAI, /* cl. 9.11.3.46 O TLV 4-42 IEI=69 Sep20 @sic R5s201387 Baseline Moving sic@ */ + cagInfoList := p_CAGInfoList, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + extdRejectedNSSAI := p_ExtdRejectedNSSAI, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterReturnWaitRange := p_DisasterReturnWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + extdCAGInfoList := p_ExtdCAGInfoList, /* cl. 9.11.3.86 O TLV-E 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + lowerBoundTimerValue := p_LowerBoundTimerValue, /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_Roaming := p_ForbidTAIList_Roaming, /* cl. 9.11.3.9 O TLV 9-114 IEI=3B Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_RegProvService := p_ForbidTAIList_RegProvService /* cl. 9.11.3.9 O TLV 9-114 IEI=3C Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_CP_SERVICE_REQUEST (template (present) NAS_KeySetIdentifier p_NAS_KeySetIdentifier, + template (present) CP_ServiceType p_CP_ServiceType, + template CIoTSmallDataRxdString p_CIoTSmallDataContainer, + template PayloadContainerType p_PayloadContainerType, + template PayloadContainer p_PayloadContainer, + template NG_PDU_SessionId p_NG_PDU_SessionId, + template PDU_SessionStatus p_PDU_SessionStatus, + template ReleaseAssistanceInd p_ReleaseAssistanceInd, + template ULDataStatus p_ULDataStatus, + template AdditionalInformation p_AdditionalInfo, + template AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus, + template NASMessageContainer p_NASMsg, + template UE_RequestType p_UeRequestType, + template NG_PagingRestriction p_PagingRestrict) := + { /* 24.501 cl. 8.2.30 @sic R5s201387 Baseline Moving sic@ */ + cp_Service_Request := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_CP_Service_Request, /* cl. 9.7 M V 1 */ + ngKSI := p_NAS_KeySetIdentifier, /* cl. 9.11.3.32 M V 1/2 */ + cpServiceType := p_CP_ServiceType, /* cl. 9.11.3.18D M V 1/2 */ + cIoTSmallDataContainer := p_CIoTSmallDataContainer, /* cl. 9.11.3.18B O TLV 4-257 IEI=6F */ + payloadContainerType := p_PayloadContainerType, /* cl. 9.11.3.40 O TV 1 IEI=8 */ + payload := p_PayloadContainer, /* cl. 9.11.3.39 O TLV-E 4-65538 IEI=7B */ + pduSessionId := p_NG_PDU_SessionId, /* cl. 9.11.3.41 C TV 2 IEI=12 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + releaseAssistanceInd := p_ReleaseAssistanceInd, /* cl. 9.11.3.46A O TV 1 IEI=F */ + ulDataStatus := p_ULDataStatus, /* cl. 9.11.2.57 O TLV 4-34 IEI=40 */ + nasMsg := p_NASMsg, /* cl. 9.11.3.33 O TLV-E 3-n IEI=71 */ + additionalInfo := p_AdditionalInfo, /* cl. 9.11.2.1 O TLV 3-n IEI=24 */ + allowedPDUSessionStatus := p_AllowedPDU_SessionStatus, /* cl. 9.11.3.13 O TLV 4-34 IEI=25 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ueRequestType := p_UeRequestType, /* cl. 9.11.3.76 O TLV 3 IEI=29 Sep22 @sic R5s221179 Baseline Moving sic@ */ + pagingRestrict := p_PagingRestrict /* cl. 9.11.3.77 O TLV 3-35 IEI=28 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_SERVICE_REQUEST (template (present) B4_Type p_ServiceType, + template (present) NAS_KeySetIdentifier p_KSI, + template (present) NG_MobileIdentity p_S_TMSI, + template ULDataStatus p_ULDataStatus, + template PDU_SessionStatus p_PDU_SessionStatus, + template AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus, + template NASMessageContainer p_Msg, + template UE_RequestType p_UeRequestType, + template NG_PagingRestriction p_PagingRestrict):= + { /* 24.501 cl. 8.2.16 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + service_Request := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_ServiceRequest, /* cl. 9.7 M V 1 */ + serviceType := p_ServiceType, /* cl. 9.11.3.50 M V 1/2 */ + ngKSI := p_KSI, /* cl. 9.11.3.32 M V 1/2 */ + s_TMSI := p_S_TMSI, /* cl. 9.11.3.4 M LV 6 */ + ulDataStatus := p_ULDataStatus, /* cl. 9.11.2.57 O TLV 4-34 IEI=40 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + allowedPDUSessionStatus := p_AllowedPDU_SessionStatus, /* cl. 9.11.3.13 O TLV 4-34 IEI=25 */ + nasMsg := p_Msg, /* cl. 9.11.3.33 O TLV-E 4-n IEI=71 Dec18 */ + ueRequestType := p_UeRequestType, /* cl. 9.11.3.76 O TLV 3 IEI=29 Sep22 @sic R5s221179 Baseline Moving sic@ */ + pagingRestrict := p_PagingRestrict /* cl. 9.11.3.77 O TLV 3-35 IEI=28 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_SERVICE_ACCEPT (template (omit) PDU_SessionStatus p_PDU_SessionStatus, + template (omit) PDU_SessionReactivationResult p_PDU_SessionReactivationResult, + template (omit) PDU_SessionReactivationError p_PDU_SessionReactivationError, + template (omit) EAP_Message p_EAP, + template (omit) GPRS_Timer2 p_T3448, + template (omit) NG_AddReqResult p_AddRequestResult, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService) := + { /* 24.501 cl. 8.2.17 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + service_Accept := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_ServiceAccept, /* cl. 9.7 M V 1 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + pduSessionReactivationResult := p_PDU_SessionReactivationResult, /* cl. 9.11.3.42 O TLV 4-32 IEI=26 */ + pduSessionReactResultError := p_PDU_SessionReactivationError, /* cl. 9.11.3.43 O TLV-E 5-515 IEI=7E */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78*/ + t3448 := p_T3448, /* cl. 9.11.2.4 O TLV 3 IEI=6B Sep20 @sic R5s201387 Baseline Moving sic@ */ + ngAddRequestResult := p_AddRequestResult, /* cl. 9.11.3.81 O TLV 3 IEI=34 Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_Roaming := p_ForbidTAIList_Roaming, /* cl. 9.11.3.9 O TLV 9-114 IEI=1D Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_RegProvService := p_ForbidTAIList_RegProvService /* cl. 9.11.3.9 O TLV 9-114 IEI=1E Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_SERVICE_REJECT (template (value) GMM_GSM_Cause p_Cause, + template (omit) PDU_SessionStatus p_PDU_SessionStatus, + template (omit) GPRS_Timer2 p_T3346, + template (omit) EAP_Message p_EAP, + template (omit) GPRS_Timer2 p_T3448, + template (omit) CAGInfoList p_CAGInfoList, + template (omit) RegistrationWaitRange p_DisasterReturnWaitRange, + template (omit) ExtdCAGInfoList p_ExtdCAGInfoList, + template (omit) GPRS_Timer3 p_LowerBoundTimerValue, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming, + template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService) := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.18 */ + service_Reject := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_ServiceReject, /* cl. 9.7 M V 1 */ + gmmCause := p_Cause, /* cl. 9.11.3.2 M V 1 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + t3346 := p_T3346, /* cl. 9.11.2.4 O TLV 3 IEI=5F */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + t3448 := p_T3448, /* cl. 9.11.2.4 O TLV 3 IEI=6B Sep20 @sic R5s201387 Baseline Moving sic@ */ + cagInfoList := p_CAGInfoList, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + disasterReturnWaitRange := p_DisasterReturnWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + extdCAGInfoList := p_ExtdCAGInfoList, /* cl. 9.11.3.86 O TLV-E 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + lowerBoundTimerValue := p_LowerBoundTimerValue, /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_Roaming := p_ForbidTAIList_Roaming, /* cl. 9.11.3.9 O TLV 9-114 IEI=3B Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_RegProvService := p_ForbidTAIList_RegProvService /* cl. 9.11.3.9 O TLV 9-114 IEI=3C Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_CONFIGURATION_UPDATE_COMMAND (template (omit) ConfigUpdateInd p_ConfigUpdateInd := omit, + template (omit) NG_MobileIdentity p_Guti := omit, + template (omit) NG_TrackingAreaIdList p_TaiList := omit, + template (omit) NSSAI p_AllowedNSSAI := omit, + template (omit) ServiceAreaIdList p_SaiList := omit, + template (omit) NetworkName p_FullNetworkName := omit, + template (omit) NetworkName p_ShortNetworkName := omit, + template (omit) TimeZone p_LocalTimeZone := omit, + template (omit) TimeZoneAndTime p_LocalTimeZoneAndTime := omit, + template (omit) DaylightSavingTime p_DaylightSavingTime := omit, + template (omit) LADN_Info p_LadnInfo := omit, + template (omit) MICO_Ind p_MicoInd := omit, + template (omit) NetworkSlicingInd p_NetworkSlicingInd := omit, + template (omit) NSSAI p_ConfiguredNSSAI := omit, + template (omit) RejectedNSSAI p_RejectedNSSAI := omit, + template (omit) OperatorAccessCatDefinitions p_OperatorAccessCatDefs := omit, + template (omit) SMSInd p_SmsInd := omit, + template (omit) GPRS_Timer3 p_T3447 := omit, + template (omit) CAGInfoList p_CAGInfoList := omit, + template (omit) UERadioCapId p_UERadioCapId := omit, + template (omit) UERadioCapIdDeletion p_UERadioCapIdDeletion := omit, + template (omit) RegistrationResult p_RegistrationResult := omit, + template (omit) TruncatedS_TMSIConfig p_TruncatedS_TMSIConfig := omit, + template (omit) AddConfigInfo p_AddConfigInfo := omit, + template (omit) ExtdRejectedNSSAI p_ExtdRejectedNSSAI := omit, + template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit, + template (omit) NSSRG_Info p_NssrgInfo := omit, + template (omit) RegistrationWaitRange p_DisasterRoamingWaitRange := omit, + template (omit) RegistrationWaitRange p_DisasterReturnWaitRange := omit, + template (omit) DisasterPLMNList p_DisasterPLMNList := omit, + template (omit) ExtdCAGInfoList p_ExtdCAGInfoList := omit, + template (omit) PEIPS_AssistInfo p_UpdatedPEIPS_AssistInfo := omit, + template (omit) NSAG_Info p_NsagInfo := omit, + template (omit) PriorityInd p_PriorityInd := omit) := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.19.1 */ + configuration_Update_Command := { + protocolDiscriminator := tsc_EPD_GMM , /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, /* cl. 9.3 M V 1/2 */ + messageType := tsc_MT_NG_ConfigurationUpdateCommand, /* cl. 9.7 M V 1 */ + configUpdateInd := p_ConfigUpdateInd, /* cl. 9.11.3.18 M TV 1 IEI=D */ + guti := p_Guti, /* cl. 9.11.3.4 O TLV 13 IEI=77 Dec18 */ + taiList := p_TaiList, /* cl. 9.11.3.9 O TLV 9-114 IEI=54 */ + allowedNSSAI := p_AllowedNSSAI, /* cl. 9.11.3.37 O TLV 4-74 IEI=15 */ + saiList := p_SaiList, /* cl. 9.11.3.49 O TLV 6-114 IEI=27 */ + fullNetworkName := p_FullNetworkName, /* cl. 9.11.3.35 O TLV 3-? IEI=43 */ + shortNetworkName := p_ShortNetworkName, /* cl. 9.11.3.35 O TLV 3-? IEI=45 */ + localTimeZone := p_LocalTimeZone, /* cl. 9.11.3.52 O TV 2 IEI=46 */ + localTimeZoneAndTime := p_LocalTimeZoneAndTime, /* cl. 9.11.3.53 O TV 8 IEI=47 */ + daylightSavingTime := p_DaylightSavingTime, /* cl. 9.11.3.19 O TLV 3 IEI=49 */ + ladnInfo := p_LadnInfo, /* cl. 9.11.3.30 O TLV-E 3-1715 IEI=79 */ + micoInd := p_MicoInd, /* cl. 9.11.3.31 O TLV 1 IEI=B */ + networkSlicingInd := p_NetworkSlicingInd, /* cl. 9.11.3.36 O TV 1 IEI=9 */ + configuredNSSAI := p_ConfiguredNSSAI, /* cl. 9.11.3.37 O TLV 4-146 IEI=31 */ + rejectedNSSAI := p_RejectedNSSAI, /* cl. 9.11.3.46 O TLV 4-42 IEI=11 */ + operatorAccessCatDefs := p_OperatorAccessCatDefs, /* cl. 9.11.3.38 O TLV-E 4-n IEI=76 Dec18 */ + smsInd := p_SmsInd, /* cl. 9.10.3.50A O TV 1 IEI=F Dec18 */ + t3447Value := p_T3447, /* cl. 9.11.2.5 O TLV 3 IEI=6C Sep20 @sic R5s201387 Baseline Moving sic@ */ + cagInfoList := p_CAGInfoList, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRadioCapabilityId := p_UERadioCapId, /* cl. 9.11.3.68 O TLV 3-n IEI=67 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRadioCapIdDeletionInd := p_UERadioCapIdDeletion, /* cl. 9.11.3.69 O TV 1 IEI=E Sep20 @sic R5s201387 Baseline Moving sic@ */ + registrationResult := p_RegistrationResult, /* cl. 9.11.3.6 O TLV 3 IEI=44 Sep20 @sic R5s201387 Baseline Moving sic@ */ + truncatedS_TMSIConfig := p_TruncatedS_TMSIConfig, /* cl. 9.11.3.70 O TLV 3 IEI=1B Sep20 @sic R5s201387 Baseline Moving sic@ */ + addConfigInfo := p_AddConfigInfo, /* cl. 9.11.3.74 O TV 1 IEI=C Sep20 @sic R5s201387 Baseline Moving sic@ */ + extdRejectedNSSAI := p_ExtdRejectedNSSAI, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA, /* cl. 9.11.2.10 O TLV-E 6-n IEI=7B Sep22 @sic R5s221179 Baseline Moving sic@ */ + nssrgInfo := p_NssrgInfo, /* cl. 9.11.3.82 O TLV-E 7-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterRoamingWaitRange := p_DisasterRoamingWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=14 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterReturnWaitRange := p_DisasterReturnWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterPLMNList := p_DisasterPLMNList, /* cl. 9.11.3.83 O TLV 2-n IEI=13 Sep22 @sic R5s221179 Baseline Moving sic@ */ + extdCAGInfoList := p_ExtdCAGInfoList, /* cl. 9.11.3.86 O TLV-E 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + updatedPEIPS_AssistInfo := p_UpdatedPEIPS_AssistInfo, /* cl. 9.11.3.80 O TLV 3-n IEI=33 Sep22 @sic R5s221179 Baseline Moving sic@ */ + nsagInfo := p_NsagInfo, /* cl. 9.11.3.87 O TLV-E 10-n IEI=7C Sep22 @sic R5s221179 Baseline Moving sic@ */ + priorityInd := p_PriorityInd /* cl. 9.11.3.91 O TV 1 IEI=E- Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } + + template (present) NG_NAS_UL_Message_Type cr_NG_CONFIGURATION_UPDATE_COMPLETE := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.20 */ + configuration_Update_Complete := { + protocolDiscriminator := tsc_EPD_GMM , /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, /* cl. 9.3 M V 1/2 */ + messageType := tsc_MT_NG_ConfigurationUpdateComplete /* cl. 9.7 M V 1 */ + } + }; + + template (value) NG_NAS_DL_Message_Type cs_NG_IDENTITY_REQUEST(NAS_IdType p_IdType) := + { /* @status APPROVED (NR5GC) */ + identity_Request :={ + protocolDiscriminator := tsc_EPD_GMM, + spareHalfOctet := tsc_SpareHalfOctet, + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_IdentityRequest, + spareHalfOctet2 := tsc_SpareHalfOctet, + identityType := cs_IdentityType(p_IdType) + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_IDENTITY_RESPONSE(template (present) NG_MobileIdentity p_MobileId) := + { /* @status APPROVED (NR5GC) */ + identity_Response :={ + protocolDiscriminator := tsc_EPD_GMM, + spareHalfOctet := tsc_SpareHalfOctet, + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_IdentityResponse, + ngMobileId := p_MobileId + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_SECURITY_MODE_COMMAND(template (value) NG_NAS_SecurityAlgorithms p_Algs, + NAS_KsiValue p_KeySetId, + NG_UE_SecurityCapability p_UECap, + template (omit) IMEISV_Request p_IMEISV, + template (omit) NAS_SecurityAlgorithms p_EPSAlgs, + template (omit) AdditionalSecurityInfo p_AddInfo, + template (omit) EAP_Message p_EAP, + template (omit) ABBA p_ABBA, + template (omit) S1_UE_SecurityCapability p_ReplayedSecurityCap) := + { /* 24.501 cl. 8.2.25 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + security_Mode_Command := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_SecurityModeCommand, /* cl. 9.7 M V 1 */ + nasSecurityAlgorithms := p_Algs, /* cl. 9.11.3.34 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + ngNasKSI := cs_NAS_KeySetIdentifier_lv(p_KeySetId, tsc_NasKsi_NativeSecurityContext), /* cl. 9.11.3.32 M V 1/2 */ + ueSecurityCapability := p_UECap, /* cl. 9.11.3.54 M LV 3-9 */ + imeisvRequest := p_IMEISV, /* cl. 9.11.3.28 O TV 1 IEI=E */ + epsSecurityAlgorithms := p_EPSAlgs, /* cl. 9.11.3.25 O TV 2 IEI=57 */ + add5GSecurityInfo := p_AddInfo, /* cl. 9.11.3.12 O TLV 3 IEI=36 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + abba := p_ABBA, /* cl. 9.11.3.10 O TLV 4-n IEI=38 Dec18 */ + replayedUESecurityCap := p_ReplayedSecurityCap /* cl. 9.11.3.48 O TLV 4-7 IEI=19 Dec18 */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_SECURITY_MODE_COMPLETE (template (present) NG_MobileIdentity p_IMEISV, + template (present) ReplayedNASMessageContainer p_NASMsg, + template (present) NG_MobileIdentity p_NonIMEISV_PEI) := + { /* 24.501 cl. 8.2.26 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + security_Mode_Complete := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_SecurityModeComplete, /* cl. 9.7 M V 1 */ + imeisv := p_IMEISV, /* cl. 9.11.3.4 O TLV 11 IEI=2C */ + nasMsg := p_NASMsg, /* cl. 9.11.3.33 O TLV-E 3-n IEI=7D */ + nonIMEISV_PEI := p_NonIMEISV_PEI /* cl. 9.11.3.4 O TLV-E 7-n IEI=78 Sep20 @sic R5s201387 Baseline Moving sic@ */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_SECURITY_MODE_REJECT (template (present) GMM_GSM_Cause p_Cause) := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.27 */ + security_Mode_Reject := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_SecurityModeReject, /* cl. 9.7 M V 1 */ + gmmCause := p_Cause /* cl. 9.11.3.2 M V 1 */ + } + }; + + //---------------------------------------------------------------------------- + // NG session management messages (24.501 cl. 8.3) + //---------------------------------------------------------------------------- + + template (present) NG_NAS_UL_Message_Type cr_NG_PDU_SESSION_ESTABLISHMENT_REQUEST(template (present) NG_PDU_SessionId p_PDU_SessionId, + template (present) ProcedureTransactionIdentifier p_PTI, + template PDU_SessionType p_PDU_SessionType, + template SSC_Mode p_SSC_Mode, + template NG_UE_SM_Cap p_UECap, + template MaxNumPacketFilters p_MaxNumPacketFilters, + template IntegrityProtMaxDataRate p_IntegrityProtMaxDataRate, + template AlwaysOnPDUSessionReq p_AlwaysOnPDUSessionReq, + template SM_PDU_DN_RequestContainer p_PDUReq, + template ExtdProtocolConfigOptions p_ExtdPCO, + template IPHeaderCompressionConfig p_IPHeaderCompConfig, + template DS_TT_EthernetPortMACAddr p_DS_TT_EthernetPortMACAddr, + template UE_DS_TT_ResidenceTime p_UE_DS_TT_ResidenceTime, + template PortManagementInfoContainer p_PortManagementInfoContainer, + template EthernetHeaderCompressConfig p_EthernetHeaderCompConfig, + template PDU_Address p_SuggestedInterfaceId, + template ServiceLvlAAContainer p_ServiceLvlAA, + template RequestedMBSContainer p_RequestedMBS, + template PDUSessionPairId p_PduSessionPairId, + template RSN p_RSN) := + { /* 24.501 cl. 8.3.1 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + pdu_Session_Establishment_Request := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionEstablishmentRequest, /* cl. 9.7 M V 1 */ + integrityProtMaxDataRate := p_IntegrityProtMaxDataRate, /* cl. 9.11.4.7 M V 2 */ + pduSessionType := p_PDU_SessionType, /* cl. 9.11.4.11 O TV 1 IEI=9 */ + sscMode := p_SSC_Mode, /* cl. 9.11.4.16 O TV 1 IEI=A */ + smCapability := p_UECap, /* cl. 9.11.4.1 O TLV 3-15 IEI=28 */ + maxNumPacketFilters := p_MaxNumPacketFilters, /* cl. 9.11.4.6 O TV 3 IEI=55 */ + alwaysOnPDUSessionReq := p_AlwaysOnPDUSessionReq, /* cl. 9.11.4.4 O TV 1 IEI=B */ + smPDU_RequestContainer := p_PDUReq, /* cl. 9.11.4.15 O TLV ? ? */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + ipHeaderCompressionConfig := p_IPHeaderCompConfig, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ds_TT_EthernetPortMACAddr := p_DS_TT_EthernetPortMACAddr, /* cl. 9.11.4.25 O TLV 8 IEI=6E Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueDS_TT_ResidenceTime := p_UE_DS_TT_ResidenceTime, /* cl. 9.11.4.26 O TLV 10 IEI=6F Sep20 @sic R5s201387 Baseline Moving sic@ */ + portManagementInfoContainer := p_PortManagementInfoContainer, /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */ + ethernetHeaderCompressConfig := p_EthernetHeaderCompConfig, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + suggestedInterfaceId := p_SuggestedInterfaceId, /* cl. 9.11.4.10 O TLV 11 IEI=29 Sep20 @sic R5s201387 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA, /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + requestedMBS := p_RequestedMBS, /* cl. 9.11.4.30 O TLV-E 8-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + pduSessionPairId := p_PduSessionPairId, /* cl. 9.11.4.32 O TLV 3 IEI=34 Sep22 @sic R5s221179 Baseline Moving sic@ */ + rsn := p_RSN /* cl. 9.11.4.33 O TLV 3 IEI=35 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_PDU_SESSION_ESTABLISHMENT_ACCEPT (template (value) NG_PDU_SessionId p_PDU_SessionId, + ProcedureTransactionIdentifier p_PTI, + template (value) SSC_Mode p_SSC_Mode, + template (value) PDU_SessionType p_PDU_SessionType, + template (value) QoS_Rules p_QoS_Rules, + template (value) Session_AMBR p_Session_AMBR, + template (omit) GMM_GSM_Cause p_Cause, + template (omit) PDU_Address p_PDU_Address, + template (omit) GPRS_Timer p_RQTimer, + template (omit) S_NSSAI_Type p_S_NSSAI, + template (omit) AlwaysOnPDUSessionInd p_AlwaysOnPDUSessionInd, + template (omit) MappedEPSBearerContexts p_MappedEPSBearerContexts, + template (omit) EAP_Message p_EAP, + template (omit) QoSFlowDescr p_QoSFlowDescr, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO, + template (omit) DNN p_DNN, + template (omit) NGSM_NetworkFeatureSupport p_NGSM_NtwkFeatSupport, + template (omit) ServingPLMNRateControl p_ServingPLMNRateCtrl, + template (omit) ATSSSContainer p_ATSSSContainer, + template (omit) ControlPlaneInd p_ControlPlaneInd, + template (omit) IPHeaderCompressionConfig p_IPHeaderCompConfig, + template (omit) EthernetHeaderCompressConfig p_EthernetHeaderCompConfig, + template (omit) ServiceLvlAAContainer p_ServiceLvlAA, + template (omit) ReceivedMBSContainer p_ReceivedMBS) := + { /* 24.501 cl. 8.3.2 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + pdu_Session_Establishment_Accept := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionEstablishmentAccept, /* cl. 9.7 M V 1 */ + sscMode := p_SSC_Mode, /* cl. 9.11.4.16 M V 1/2 */ + pduSessionType := p_PDU_SessionType, /* cl. 9.11.4.11 M V 1/2 */ + authorizedQoSRules := p_QoS_Rules, /* cl. 9.11.4.13 M LV-E 7-65538 */ + sessionAMBR := p_Session_AMBR, /* cl. 9.11.4.14 M LV ? */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + pduAddress := p_PDU_Address, /* cl. 9.11.4.10 O TLV 7-15 IEI=29 */ + rqTimerValue := p_RQTimer, /* cl. 9.11.2.3 O TLV 2 IEI=56 */ + s_NSSAI := p_S_NSSAI, /* cl. 9.11.2.6 O TLV 3-10 IEI=22 */ + alwaysOnPDUSessionInd := p_AlwaysOnPDUSessionInd, /* c. 9.11.4.3 O TV 1 IEI=8 */ + mappedEPSContexts := p_MappedEPSBearerContexts, /* cl. 9.11.4.9 O TLV-E 7-65538 IEI=7F */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + authorizedQoSFlowDescr := p_QoSFlowDescr, /* cl. 9.11.4.12 O TLV-E 6-65538 IEI=79 */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + dnn := p_DNN, /* cl. 9.11.2.1A O TLV 3-102 IEI=25 */ + ngs_NetworkFeatureSupport := p_NGSM_NtwkFeatSupport, /* cl. 9.11.4.18 O TLV 3-15 IEI=17 Sep20 @sic R5s201387 Baseline Moving sic@ */ + servingPLMNRateControl := p_ServingPLMNRateCtrl, /* cl. 9.11.4.20 O TLV 4 IEI=18 Sep20 @sic R5s201387 Baseline Moving sic@ */ + atsssContainer := p_ATSSSContainer, /* cl. 9.11.4.22 O TLV-E 3-65538 IEI=77 Sep20 @sic R5s201387 Baseline Moving sic@ */ + controlPlaneOnlyIndication := p_ControlPlaneInd, /* cl. 9.11.4.23 O TV 1 IEI=C Sep20 @sic R5s201387 Baseline Moving sic@ */ + ipHeaderCompressionConfig := p_IPHeaderCompConfig, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ethernetHeaderCompressConfig := p_EthernetHeaderCompConfig, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA, /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + receivedMBS := p_ReceivedMBS /* cl. 9.11.4.30 O TLV-E 8-65538 IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_PDU_SESSION_ESTABLISHMENT_REJECT (template (value) NG_PDU_SessionId p_PDU_SessionId, + template (value) ProcedureTransactionIdentifier p_PTI, + template (value) GMM_GSM_Cause p_Cause, + template (omit) GPRS_Timer3 p_BackOff, + template (omit) AllowedSSCMode p_SSC_Mode, + template (omit) EAP_Message p_EAP, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO, + template (omit) ReAttemptIndicator p_ReAttemptIndicator, + template (omit) NGSM_CongestionReattemptInd p_NGSM_CongestionReattemptInd, // @sic R5s190543 sic@ + template (omit) ServiceLvlAAContainer p_ServiceLvlAA ) := + { /* 24.501 cl. 8.3.3 */ + /* @status APPROVED (NR5GC) */ + pdu_Session_Establishment_Reject := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionEstablishmentReject, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 M V 1 */ + backOffTimerValue := p_BackOff, /* cl. 9.11.2.5 O TLV 3 IEI=37 */ + allowedSSCMode := p_SSC_Mode, /* cl. 9.11.4.5 O TV 1 IEI=F */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + ngsmCongestionReattemptInd := p_NGSM_CongestionReattemptInd, /* cl. 9.11.4.2A O TLV 3 IEI=61 Jun19 @sic R5s201387, R5s210444 Baseline Moving sic@ */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + reattemptInd := p_ReAttemptIndicator, /* cl. 9.11.4.17 O TLV 3 IEI=1D Sep20 @sic R5s201387 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_PDU_SESSION_AUTHENTICATION_COMMAND (template (value) NG_PDU_SessionId p_PDU_SessionId, + ProcedureTransactionIdentifier p_PTI, + template (value) EAP_Message p_EAP, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.3.4 */ + pdu_Session_Authentication_Command := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionAuthenticationCommand, /* cl. 9.7 M V 1 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 M LV-E 6-1502 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_PDU_SESSION_AUTHENTICATION_COMPLETE (template (present) NG_PDU_SessionId p_PDU_SessionId, + template (present) ProcedureTransactionIdentifier p_PTI, + template (present) EAP_Message p_EAP, + template ExtdProtocolConfigOptions p_ExtdPCO) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.3.5 */ + pdu_Session_Authentication_Complete := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionAuthenticationComplete, /* cl. 9.7 M V 1 */ + eapMessage := p_EAP , /* cl. 9.11.2.2 M LV-E 6-1502 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + }; + + template (value) NG_NAS_DL_Message_Type cs_NG_PDU_SESSION_AUTHENTICATION_RESULT (template (value) NG_PDU_SessionId p_PDU_SessionId, + ProcedureTransactionIdentifier p_PTI, + template (omit) EAP_Message p_EAP, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO) := + { /* 24.501 cl. 8.3.6 */ + /* @status APPROVED (NR5GC) */ + pdu_Session_Authentication_Result := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionAuthenticationResult, /* cl. 9.7 M V 1 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_PDU_SESSION_MODIFICATION_REQUEST (template (present) NG_PDU_SessionId p_PDU_SessionId, + template (present) ProcedureTransactionIdentifier p_PTI, + template NG_UE_SM_Cap p_NG_UE_SM_Cap, + template GMM_GSM_Cause p_Cause, + template MaxNumPacketFilters p_MaxNumPacketFilters, + template AlwaysOnPDUSessionReq p_AlwaysOnPDUSessionReq, + template IntegrityProtMaxDataRate p_IntegrityProtMaxDataRate, + template QoS_Rules p_QoS_Rules, + template QoSFlowDescr p_QoSFlowDescr, + template MappedEPSBearerContexts p_MappedEPSBearerContexts, + template ExtdProtocolConfigOptions p_ExtdPCO, + template PortManagementInfoContainer p_PortManagementInfoContainer, + template IPHeaderCompressionConfig p_IPHeaderCompConfig, + template EthernetHeaderCompressConfig p_EthernetHeaderCompConfig, + template RequestedMBSContainer p_RequestedMBS, + template ServiceLvlAAContainer p_ServiceLvlAA) := + { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + /* 24.501 cl. 8.3.7 */ + pdu_Session_Modification_Request := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionModificationRequest, /* cl. 9.7 M V 1 */ + smCapability := p_NG_UE_SM_Cap, /* cl. 9.11.4.1 O TLV 3-15 IEI=28 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + maxNumPacketFilters := p_MaxNumPacketFilters, /* c. 9.11.4.9 O TV 3 IEI=55 */ + alwaysOnPDUSessionReq := p_AlwaysOnPDUSessionReq, /* c. 9.11.4.4 O TV 1 IEI=B */ + integrityProtMaxDataRate := p_IntegrityProtMaxDataRate, /* c. 9.11.4.7 O TV 2 IEI=13 */ + requestedQoSRules := p_QoS_Rules, /* cl. 9.11.4.13 O TLV-E 7-65538 IEI=7A */ + requestedQoSFlowDescr := p_QoSFlowDescr, /* cl. 9.11.4.12 O TLV-E 5-65538 IEI=79 */ + mappedEPSbearerContexts := p_MappedEPSBearerContexts, /* cl. 9.11.4.8 O TLV-E 7-65538 IEI=7F Dec18 */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + portManagementInfoContainer := p_PortManagementInfoContainer, /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */ + ipHeaderCompressionConfig := p_IPHeaderCompConfig, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ethernetHeaderCompressConfig := p_EthernetHeaderCompConfig, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + requestedMBS := p_RequestedMBS, /* cl. 9.11.4.30 O TLV-E 8-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (value) NG_NAS_DL_Message_Type cs_NG_PDU_SESSION_MODIFICATION_COMMAND (template (value) NG_PDU_SessionId p_PDU_SessionId, + ProcedureTransactionIdentifier p_PTI, + template (omit) GMM_GSM_Cause p_Cause, + template (omit) Session_AMBR p_Session_AMBR, + template (omit) GPRS_Timer p_RQTimer, + template (omit) AlwaysOnPDUSessionInd p_AlwaysOnPDUSessionInd, + template (omit) QoS_Rules p_QoS_Rules, + template (omit) QoSFlowDescr p_QoSFlowDescr, + template (omit) MappedEPSBearerContexts p_MappedEPSBearerContexts, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO, + template (omit) ATSSSContainer p_ATSSSContainer, + template (omit) IPHeaderCompressionConfig p_IPHeaderCompConfig, + template (omit) PortManagementInfoContainer p_PortManagementInfoContainer, + template (omit) ServingPLMNRateControl p_ServingPLMNRateCtrl, + template (omit) EthernetHeaderCompressConfig p_EthernetHeaderCompConfig, + template (omit) ReceivedMBSContainer p_ReceivedMBS, + template (omit) ServiceLvlAAContainer p_ServiceLvlAA) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT) */ + /* 24.501 cl. 8.3.9 */ + pdu_Session_Modification_Command := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionModificationCommand, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + sessionAMBR := p_Session_AMBR, /* cl. 9.11.4.14 O TLV 8 IEI=2A */ + rqTimerValue := p_RQTimer, /* cl. 9.11.2.3 O TV 2 IEI=56 */ + alwaysOnPDUSessionInd := p_AlwaysOnPDUSessionInd, /* c. 9.11.4.3 O TV 1 IEI=8 */ + authorizedQoSRules := p_QoS_Rules, /* cl. 9.11.4.13 O TLV-E 7-65538 IEI=7A */ + mappedEPSContexts := p_MappedEPSBearerContexts, /* cl. 9.11.4.8 O TLV-E 7-65538 IEI=7F */ + authorizedQoSFlowDescr := p_QoSFlowDescr, /* cl. 9.11.4.12 O TLV-E 6-65538 IEI=79 */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + atsssContainer := p_ATSSSContainer, /* cl. 9.11.4.22 O TLV-E 3-65538 IEI=77 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ipHeaderCompressionConfig := p_IPHeaderCompConfig, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + portManagementInfoContainer := p_PortManagementInfoContainer, /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */ + servingPLMNRateControl := p_ServingPLMNRateCtrl, /* cl. 9.11.4.20 O TLV 4 IEI=18 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ethernetHeaderCompressConfig := p_EthernetHeaderCompConfig, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + receivedMBS := p_ReceivedMBS, /* cl. 9.11.4.30 O TLV-E 8-65538 IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_PDU_SESSION_MODIFICATION_COMPLETE (template (present) NG_PDU_SessionId p_PDU_SessionId, + template (present) ProcedureTransactionIdentifier p_PTI := '00'O, + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template PortManagementInfoContainer p_PortManagementInfoContainer := *) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT) */ + /* 24.501 cl. 8.3.10 */ + pdu_Session_Modification_Complete := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionModificationComplete, /* cl. 9.7 M V 1 */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + portManagementInfoContainer := p_PortManagementInfoContainer /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_PDU_SESSION_MODIFICATION_COMMAND_REJECT (template (present) NG_PDU_SessionId p_PDU_SessionId, + template (present) ProcedureTransactionIdentifier p_PTI := '00'O, + template (present) GMM_GSM_Cause p_Cause := ?, + template ExtdProtocolConfigOptions p_ExtdPCO := *) := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.3.11 */ + pdu_Session_Modification_Command_Reject := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionModificationCommandReject, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_PDU_SESSION_RELEASE_REQUEST (template (present) NG_PDU_SessionId p_PDU_SessionId, + template (present) ProcedureTransactionIdentifier p_PTI, + template GMM_GSM_Cause p_Cause, + template ExtdProtocolConfigOptions p_ExtdPCO) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.3.12 */ + pdu_Session_Release_Request := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionReleaseRequest, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + }; + + template (value) NG_NAS_DL_Message_Type cs_NG_PDU_SESSION_RELEASE_REJECT (NG_PDU_SessionId p_PDU_SessionId, + ProcedureTransactionIdentifier p_PTI, + GMM_GSM_Cause p_Cause, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO) := + { /* 24.501 cl. 8.3.13 */ + pdu_Session_Release_Reject := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionReleaseReject, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 M V 1 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + }; + + template (omit) NG_NAS_DL_Message_Type cs_NG_PDU_SESSION_RELEASE_COMMAND (template (value) NG_PDU_SessionId p_PDU_SessionId, + ProcedureTransactionIdentifier p_PTI, + template (value) GMM_GSM_Cause p_Cause, + template (omit) GPRS_Timer3 p_BackOffTimer, + template (omit) EAP_Message p_EAP, + template (omit) NGSM_CongestionReattemptInd p_NGSM_CongestionReattemptInd, // @sic R5s190543 sic@ + template (omit) ExtdProtocolConfigOptions p_ExtdPCO, + template (omit) AccessType p_AccessType, + template (omit) ServiceLvlAAContainer p_ServiceLvlAA) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.3.14 */ + pdu_Session_Release_Command := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionReleaseCommand, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 M V 1 */ + backOffTimerValue := p_BackOffTimer, /* cl. 9.11.2.5 O TLV 3 IEI=37 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + ngsmCongestionReattemptInd := p_NGSM_CongestionReattemptInd, /* cl. 9.11.4.2A O TLV 3 IEI=61 Jun19 @sic R5s190543 sic@ */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + accessType := p_AccessType, /* cl. 9.11.2.1A O TV 1 IEI=D Sep20 @sic R5s201387 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_PDU_SESSION_RELEASE_COMPLETE (template (present) NG_PDU_SessionId p_PDU_SessionId, + template (present) ProcedureTransactionIdentifier p_PTI := '00'O, + template GMM_GSM_Cause p_Cause := *, + template ExtdProtocolConfigOptions p_ExtdPCO := *) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.3.15 */ + pdu_Session_Release_Complete := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionReleaseComplete, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NG_GSM_STATUS (template (present) NG_PDU_SessionId p_PDU_SessionId, + template ProcedureTransactionIdentifier p_PTI := *, + template GMM_GSM_Cause p_Cause := *) := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.3.16 */ + gsm_Status := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_GSM_Status, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause /* cl. 9.11.4.2 M V 1 IEI=59 */ + } + }; + + //---------------------------------------------------------------------------- + // NG Mobility Management (GMM) information elements (24.501 cl. 9.11.3) + //---------------------------------------------------------------------------- + + template (value) EAP_Message cs_DummyEAP_Message := + { /* 24.501 cl. 9.11.2.2 */ + iei := omit, + iel := '0000'O, + eapMsg := ''O + }; + + template (present) EAP_Message cr_EAP_Message (template IEI8_Type p_IEI := '78'O, template (present) octetstring p_EAPMsg := ?) := + { /* 24.501 cl. 9.11.2.2 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, + iel := ?, + eapMsg := p_EAPMsg + }; + + template (value) EAP_Message cs_EAP_Message (octetstring p_EncodedEapMsg, + template (omit) IEI8_Type p_IEI := '78'O) := + { /* 24.501 cl. 9.11.2.2 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, + iel := int2oct(lengthof(p_EncodedEapMsg), 2), + eapMsg := p_EncodedEapMsg + }; + + template (value) NG_NetworkFeatureSupport cs_NG_NetworkFeatureSupport_Def := + { /* 24.501 cl 9.11.3.5 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := '21'O, /* @sic R5s190109 sic@ */ + iel := '03'O, /* present in case of LV or TLV; omit in case of V @sic R5s201526 sic@ */ + mpsi := '0'B, + iwk_N26 := '0'B, + emf := '00'B, + emc := '11'B, //@sic R5-198540 sic@ + imsVoPS_n3GPP := '0'B, + imsVoPS_3GPP := '1'B, + ng_UP_CIoT := '0'B, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + ngIPHC_CP_CIoT := '0'B, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + n3Data := '0'B, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + ng_CP_CIoT := '0'B, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + restrictEC := '00'B, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + mcsi := '0'B, + emcn3 := '0'B, + spareBit := tsc_Spare1, + pr := '0'B, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + rpr := '0'B, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + piv := '0'B, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ncr := '0'B, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ngEHC_CP_CIoT := '0'B, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + atsInd := '0'B, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + ngLCS := '0'B /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + }; + + template (value) NG_NetworkFeatureSupport cds_NG_NetworkFeatureSupport_NoN26 + modifies cs_NG_NetworkFeatureSupport_Def := + { /* @status APPROVED (NR5GC_IRAT) */ + iwk_N26 := '1'B + }; + + template (value) NG_NetworkFeatureSupport cds_NG_NetworkFeatureSupport_NoImsVoPS_3GPP + modifies cs_NG_NetworkFeatureSupport_Def := + { /* @status APPROVED (NR5GC) */ + imsVoPS_3GPP := '0'B + }; + + template (value) RegistrationResult cs_RegistrationResult(B3_Type p_Result, + B1_Type p_SMS, + B1_Type p_EmergencyRegistered, + B1_Type p_NssaaPerformed, + B1_Type p_DisasterRoamingResult) := + { /* 24.501 cl. 9.11.3.6 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iel := '01'O, /* present in case of LV or TLV; omit in case of V */ + spare := tsc_Spare1, + disasterRoamingResult := p_DisasterRoamingResult, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + emergencyRegistered := p_EmergencyRegistered, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + nssaaPerformed := p_NssaaPerformed, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + smsAllowed := p_SMS, + resultValue := p_Result + }; + + template (present) RegistrationType cr_RegistrationType (template (present) B3_Type p_Type, + template (present) B1_Type p_FOR) := + { /* 24.501 cl. 9.11.3.7 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + fOR := p_FOR, + registrationType := p_Type + }; + + template (value) CAGInfoList cs_EmptyCAGInfoList := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 9.11.3.18A */ + iei := '75'O, // @sic R5-213413 sic@ + iel := '0000'O, + listOfCAGInfos := omit + }; + + template (present) AuthenticationResponseParameter cr_AuthenticationResponseParameter(template (present) B32_128_Type p_ExpectedRES) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := '2D'O, + iel := ?, /* RES has length of 32..128 bits i.e. 4..16 octets */ + res := p_ExpectedRES + }; + + template (value) NG_PartialTaiType cs_NG_NonConsecutivePartialTaiList(NAS_PlmnId p_PlmnId, + NG_NAS_TacList p_TacList):= + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + type0List := { + { + plmnId := p_PlmnId, + tacList := p_TacList + } + } + }; + + template (value) NG_ListOfPartialTaiList cs_NG_ListNonConsecutivePartialTaiList (NAS_PlmnId p_PlmnId, + NG_NAS_TacList p_TacList):= + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + allowedType := tsc_Spare1, + typeOfList := tsc_NonConsecutiveTacs, + numberOfElements := int2bit(lengthof(p_TacList) - 1, 5), + partialTaiList := cs_NG_NonConsecutivePartialTaiList (p_PlmnId, p_TacList) + }; + + template (value) NG_TrackingAreaIdList cs_NG_TAIListNonConsecutive(NAS_PlmnId p_PlmnId, + NG_NAS_TacList p_TacList) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := '54'O, + lvPart := { /* separated definition into TLV and LV parts Sep22 @sic R5s221179 Baseline Moving sic@ */ + iel := int2oct(4 + 3 * lengthof(p_TacList), 1), + listOfPartialTais := {cs_NG_ListNonConsecutivePartialTaiList (p_PlmnId, p_TacList) } + } + }; + + template (value) NG_PartialTaiType cs_NG_ConsecutivePartialTaiList(NG_PartialTai p_PartialTac):= + { /* @status APPROVED (NR5GC) */ + type1List := { + { + partialTac := p_PartialTac + } + } + }; + + template (value) NG_ListOfPartialTaiList cs_NG_ListConsecutivePartialTaiList ( B5_Type p_NumberOfElements, + NG_PartialTai p_PartialTac):= + { /* @status APPROVED (NR5GC) */ + allowedType := tsc_Spare1, + typeOfList := tsc_ConsecutiveTacs, + numberOfElements := p_NumberOfElements, + partialTaiList := cs_NG_ConsecutivePartialTaiList (p_PartialTac) + }; + + template (value) NG_TrackingAreaIdList cs_NG_TAIListConsecutive(B5_Type p_NumberOfElements, + NG_PartialTai p_PartialTac) := + { /* @status APPROVED (NR5GC) */ + iei := '54'O, + lvPart := { /* separated definition into TLV and LV parts Sep22 @sic R5s221179 Baseline Moving sic@ */ + iel := int2oct(7, 1), + listOfPartialTais := {cs_NG_ListConsecutivePartialTaiList(p_NumberOfElements, p_PartialTac) } + } + }; + + template (value) NG_PartialTai cs_NG_PartialTai(NAS_PlmnId p_PlmnId, O3_Type p_Tac) := + { /* @status APPROVED (NR5GC) */ + plmnId :=p_PlmnId, + tac :=p_Tac + }; + template (present) NG_TrackingAreaId cr_NG_TAI(NAS_PlmnId p_PlmnId, // O3_Type + O3_Type p_Tac) := // O3_Type + { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + iei := '52'O, + plmnId := p_PlmnId, + tac := p_Tac + }; + + template (value) NG_NAS_SecurityAlgorithms cs_NG_NAS_SecurityAlgorithms (B4_Type p_CipherAlg, + B4_Type p_IntAlg) := + { /* 24.501 cl. 9.11.3.34 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := omit, /* present in case of TV; omit in case of V */ + cipheringType := p_CipherAlg, /* Type of ciphering algorithm */ + integrityType := p_IntAlg /* Type of integrity protection algorithm */ + }; + + template (present) CIoTSmallDataContainer cr_CIoTSmallDataContainer (template (present) B3_Type p_DataType, + template (present) B2_Type p_DDX, + template (present) B3_Type p_PDUSessionId, + template (present) octetstring p_DataContents, + template Type4Length_Type p_AddInfoLength, + template octetstring p_AddInfo):= + { /* 24.501 cl. 9.11.3.18B */ + iel := ?, + dataType := p_DataType, + ddx := p_DDX, /* set to 00 for dataType = 001 */ + pduSessionId := p_PDUSessionId, /* set to 00 for dataType = 010 or 001 */ + lengthOfAddInfo := p_AddInfoLength, /* only present for dataType = 010 */ + addInfo := p_AddInfo, /* not present for dataType = 000 or 001 */ + dataContents := p_DataContents + }; + + template (value) ConfigUpdateInd cs_ConfigUpdateInd (B1_Type p_Red := '0'B, + B1_Type p_Ack := '0'B):= + { /* @status APPROVED (NR5GC) */ + iei := 'D'H, // currently only used as TV cl. 9.11.3.18 + spare := '00'B, //B2_Type cl. 9.11.3.18 + red := p_Red, //B1_Type cl. 9.11.3.18 + ack := p_Ack //B1_Type cl. 9.11.3.18 + }; + + template (value) DNN cs_DNN (template (omit) IEI8_Type p_IEI := '25'O, // @sic R5s190109 sic@ + octetstring p_DNN) := + { /* 24.501 cl. 9.11.3.21 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, /* present in case of TV; omit in case of V */ + iel := int2oct(lengthof (p_DNN), 1), /* present in case of LV or TLV; omit in case of V */ + dnnValue := p_DNN + }; + + template (value) DeregisterType crs_DeregisterType (B1_Type p_SwitchOff, + B1_Type p_ReReg, + B2_Type p_Access := '01'B) := + { // 24.501 cl. 9.11.3.20 + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + // IEI is always skipped + switchOff := p_SwitchOff, + reRegistration := p_ReReg, + accessType := p_Access + }; + + template (value) AdditionalSecurityInfo cs_AdditionalSecurityInfo (B1_Type p_Rinmr, + B1_Type p_Hdp := '0'B) := + { /* 24.501 cl 9.11.3.12 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := '36'O, + iel := '01'O, // @sic R5s211480 sic@ + spareBits := tsc_Spare6, + rinmr := p_Rinmr, + hdp := p_Hdp + }; + + template (value) NetworkSlicingInd cs_NetworkSlicingInd (B1_Type p_DCNI, + B1_Type p_NSSCI) := + { // 24.501 cl. 9.11.3.36 + /* @status APPROVED (NR5GC) */ + iei := '9'H, + spare := tsc_Spare2, + dcni := p_DCNI, + nssci := p_NSSCI + }; + + template (value) S_NSSAI_Type cs_S_NSSAI_WithIEI(IEI8_Type p_IEI, + template (value) S_NSSAI_LV p_LvPart) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, + lvPart := p_LvPart + + }; + + template (value) S_NSSAI_LV cs_S_NSSAI(Type4Length_Type p_Length, + O1_Type p_SST, + template (omit) O3_Type p_SD, + template (omit) O1_Type p_MappedSST := omit, + template (omit) O3_Type p_MappedSD := omit) := + { // 24.501 cl. 9.11.2.8 + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* @sic R5s221179 Baseline Moving sic@ */ + iel := p_Length, + vPart := { /* @sic R5s221179 Baseline Moving sic@ */ + sst := p_SST, + sd := p_SD, + mappedSST := p_MappedSST, + mappedSD := p_MappedSD + } + }; + + template (value) S_NSSAI_Type cs_S_NSSAI_SST1eMBB_WithIEI := cs_S_NSSAI_WithIEI('22'O, cs_S_NSSAI_SST1eMBB); /* @sic R5s221179 sic@ @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + template (value) S_NSSAI_LV cs_S_NSSAI_SST1eMBB := cs_S_NSSAI('01'O, '01'O, omit); /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + template (value) S_NSSAI_LV cs_S_NSSAI_SST2_URLLC := cs_S_NSSAI('01'O, '02'O, omit); /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + template (value) S_NSSAI_LV cs_S_NSSAI_SST3_MIoT := cs_S_NSSAI('01'O, '03'O, omit); /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + template (value) S_NSSAI_LV cs_S_NSSAI_SST4_V2X := cs_S_NSSAI('01'O, '04'O, omit); /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + template (value) NSSAI cs_NSSAI_SST1eMBB (template (value) IEI8_Type p_IEI) := + // 24.501 cl. 9.11.3.37 + /* @status */ + cs_NSSAI_Def (p_IEI, {cs_S_NSSAI_SST1eMBB}); + + template (value) NSSAI cs_NSSAI_SSTs (template (value) IEI8_Type p_IEI) := + /* @status APPROVED (NR5GC) */ + // @sic R5s210440 Ch. 1 sic@ + cs_NSSAI_Def (p_IEI, {cs_S_NSSAI('02'O, '01'O, omit, '01'O)}); + + template (value) NSSAI cs_NSSAI_Allowed_Def := + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + cs_NSSAI_Def ('15'O, {cs_S_NSSAI_SST1eMBB, cs_S_NSSAI_SST2_URLLC, cs_S_NSSAI_SST3_MIoT, cs_S_NSSAI_SST4_V2X}); + + template (value) NSSAI cs_NSSAI_Def (template (value) IEI8_Type p_IEI, template (value) S_NSSAI_TypeList p_List) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + // 24.501 cl. 9.11.3.37 + iei := p_IEI, /* present in case of TLV; omit in case of LV */ + lvPart := { /* @sic R5s221179 Baseline Moving sic@ */ + iel := fl_NR5GC_NSSAILength(p_List), + s_nssai := p_List + } + }; + + template (value) RejectedS_NSSAI cs_RejectedS_NSSAI(B4_Type p_Length, + B4_Type p_CauseValue, + O1_Type p_SST, + template (omit) O3_Type p_SD := omit + ) := + { /* @status APPROVED (NR5GC) */ + // 24.501 cl. 9.11.3.46 + len := p_Length, + causeValue := p_CauseValue, + sst := p_SST, + sd := p_SD + }; + + /* + * @desc Returns length of S-NSSAI list + * @param p_List + * @return Type4Length_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_NR5GC_NSSAILength (template (value) S_NSSAI_TypeList p_List) return Type4Length_Type + { + var integer j; + var integer v_Length:=0; + + for (j:= 0; j < lengthof(p_List); j:= j+1) { + v_Length := v_Length + oct2int(valueof(p_List[j].iel)); + v_Length := v_Length + 1; // for iel + } + return int2oct(v_Length, 1); + } + + /* + * @desc To extract a single NSSAI from part of an AT command + * *** For common module use only *** + * Incoming string MUST be already parsed for ':' + * @param p_Cause (by reference) + * @param p_ATCommand + * @return template (value) S_NSSAI_LV + * @status APPROVED (NR5GC) + */ + function fl_ExtractNSSAI_FromEachATCommandLine(out integer p_Cause, charstring p_ATCommand) return template (value) S_NSSAI_LV + { + var CharStringList_Type v_ListOfSubStr := {}; + var CharStringList_Type v_ListOfRejCause := {}; + var CharStringList_Type v_ListOfSst_Sd := {}; + var O1_Type v_SST; + var template (omit) O3_Type v_SD; + var template (omit) O1_Type v_MappedSST; + var template (omit) O3_Type v_MappedSD; + var integer v_Length := 0; + + p_Cause := -1; + + // AT Command format is sst.sd;mappedsst.mappedsd[if rejectedNSSAI #cause]: + v_ListOfRejCause := f_StringSplit(p_ATCommand, {"#"}); + if (lengthof(v_ListOfRejCause) > 1) { // There is a cause value + p_Cause := str2int(v_ListOfRejCause[1]); + // now parse the string with the cause value removed + p_ATCommand := v_ListOfRejCause[0]; + } + v_ListOfSubStr := f_StringSplit(p_ATCommand, {";"}); + v_ListOfSst_Sd := f_StringSplit(v_ListOfSubStr[0], {"."}); + v_SST := str2oct(v_ListOfSst_Sd[0]); + v_Length := v_Length + 1; // SST = 1 octet + if (lengthof(v_ListOfSst_Sd) > 1) { + v_SD := str2oct(v_ListOfSst_Sd[1]); + v_Length := v_Length + 3; // SD = 3 octets + } else { + v_SD := omit; + } + if (lengthof(v_ListOfSubStr) > 1) { + // now get mapped values + v_ListOfSst_Sd := f_StringSplit(v_ListOfSubStr[1], {"."}); + v_MappedSST := str2oct(v_ListOfSst_Sd[0]); + v_Length := v_Length + 1; // SST = 1 octet + if (lengthof(v_ListOfSst_Sd) > 1) { + v_MappedSD := str2oct(v_ListOfSst_Sd[1]); + v_Length := v_Length + 3; // SD = 3 octets + } else { + v_MappedSD := omit; + } + } else { + // No mapped values + v_MappedSST := omit; + v_MappedSD := omit; + } + + return cs_S_NSSAI (int2oct(v_Length, 1), v_SST, v_SD, v_MappedSST, v_MappedSD); + } + + /* + * @desc To match the AT command with a listed NSSAI in any order + * @param p_NSSAI + * @param p_ATCommand + * @return boolean + * @status APPROVED (NR5GC) + */ + function f_MatchListOfNSSAI_WithATCommand(template (value) NSSAI_LV p_NSSAI, charstring p_ATCommand) return boolean + { + var CharStringList_Type v_ListOfAllowed := {}; + var template (value) S_NSSAI_TypeList v_ListOfNSSAI := {}; + var template S_NSSAI_TypeList v_PermutationNSSAI := {}; + var integer v_Cause; // ignore cause value for NSSAI_LV types + var integer v_NumAllowed; + + // AT Command format is NSSAI:NSSAI + v_ListOfAllowed := f_StringSplit(p_ATCommand, {":"}); + for (v_NumAllowed := 0; v_NumAllowed < lengthof(v_ListOfAllowed); v_NumAllowed := v_NumAllowed +1 ) { + v_ListOfNSSAI[v_NumAllowed] := fl_ExtractNSSAI_FromEachATCommandLine(v_Cause, v_ListOfAllowed[v_NumAllowed]); + } + v_PermutationNSSAI := {permutation (all from p_NSSAI.s_nssai)}; + return match (valueof(v_ListOfNSSAI), v_PermutationNSSAI); + } + + /* + * @desc To match the AT command with a list of RejectNSSAI in any order + * @param p_NSSAI - of type XtdRejectedS_NSSAI_List + * @param p_ATCommand + * @param p_AtLeastThisList - other values can be included in list. Set to false if AT command should ONLY consist of p_NSSAI + * @return boolean + */ + function f_MatchXtdRejectedNSSAI_WithATCommand(template (value) XtdRejectedS_NSSAI_List p_NSSAI, + charstring p_ATCommand, + boolean p_AtLeastThisList := true) return boolean + { + var CharStringList_Type v_ListOfAllowed := {}; + var template (value) XtdRejectedS_NSSAI_List v_ListOfNSSAI := {}; + var template XtdRejectedS_NSSAI_List v_PermutationNSSAI := {}; + var template (value) S_NSSAI_LV v_NSSAI_LV; + var integer v_Cause; + var integer v_NumAllowed; + + // AT Command format is NSSAI:NSSAI + v_ListOfAllowed := f_StringSplit(p_ATCommand, {":"}); + for (v_NumAllowed := 0; v_NumAllowed < lengthof(v_ListOfAllowed); v_NumAllowed := v_NumAllowed +1 ) { + v_NSSAI_LV := fl_ExtractNSSAI_FromEachATCommandLine(v_Cause, v_ListOfAllowed[v_NumAllowed]); + // Fit returned template into XtdRejectedNSSAI type + v_ListOfNSSAI[v_NumAllowed] := cs_XtdRejectedS_NSSAI(int2bit(oct2int(valueof(v_NSSAI_LV.iel)), 4), + int2bit(v_Cause, 4), + valueof(v_NSSAI_LV.vPart.sst), + v_NSSAI_LV.vPart.sd, + v_NSSAI_LV.vPart.mappedSST, + v_NSSAI_LV.vPart.mappedSD); + } + if (p_AtLeastThisList) { + v_PermutationNSSAI := {permutation (all from p_NSSAI, *)}; + } else { + v_PermutationNSSAI := {permutation (all from p_NSSAI)}; + } + return match (valueof(v_ListOfNSSAI), v_PermutationNSSAI); + } + + /* + * @desc Returns length of XtdRejectedS_NSSAI list + * @param p_List + * @return integer + */ + function fl_XtdRejectedS_NSSAILength (template (value) XtdRejectedS_NSSAI_List p_List) return integer + { + var integer j; + var integer v_Length:=0; + + for (j:= 0; j < lengthof(p_List); j:= j+1) { + v_Length := v_Length + bit2int(valueof(p_List[j].len)); + v_Length := v_Length + 1; // for len & cause + } + return v_Length; + } + + /* + * @desc Returns a template of type PartialXtdRejectedNSSAIType0 + * @param p_List + * @return template (value) PartialXtdRejectedNSSAI + */ + function f_BuildNR5GC_PartialXtdRejectedNSSAIType0 (template (value) XtdRejectedS_NSSAI_List p_List) return template (value) PartialXtdRejectedNSSAI + { + var integer j; + var integer v_Length:=0; + var integer v_NumOfElements := -1; + + for (j:= 0; j < lengthof(p_List); j:= j+1) { + v_NumOfElements := v_NumOfElements +1; + v_Length := v_Length + bit2int(valueof(p_List[j].len)); + v_Length := v_Length + 2; // for type of list etc + back off timer + } + return cs_PartialXtdRejectedNSSAIType0(int2bit(v_NumOfElements, 4), + p_List); + } + + /* + * @desc Returns a template of type PartialXtdRejectedNSSAIType1 + * @param p_List + * @return template (value) PartialXtdRejectedNSSAI + */ + function f_BuildNR5GC_PartialXtdRejectedNSSAIType1 (template (value) XtdRejectedS_NSSAI_List p_List, + O1_Type p_BackOffTimer) return template (value) PartialXtdRejectedNSSAI + { + var integer j; + var integer v_Length:=0; + var integer v_NumOfElements := -1; + + for (j:= 0; j < lengthof(p_List); j:= j+1) { + v_NumOfElements := v_NumOfElements +1; + v_Length := v_Length + bit2int(valueof(p_List[j].len)); + v_Length := v_Length + 2; // for type of list etc + back off timer + } + return cs_PartialXtdRejectedNSSAIType1(int2bit(v_NumOfElements, 4), + p_BackOffTimer, + p_List); + } + + /* + * @desc Returns a template of type ExtdRejectedNSSAI + * @param p_List + * @return template (value) ExtdRejectedNSSAI + */ + function f_BuildNR5GC_ExtdRejectedNSSAI (template (value) PartialXtdRejectedNSSAI_List p_List) return template (value) ExtdRejectedNSSAI + { + var integer j; + var integer v_Length:=0; + + for (j:= 0; j < lengthof(p_List); j:= j+1) { + if (ischosen(p_List[j].type0)){ + v_Length := v_Length + fl_XtdRejectedS_NSSAILength(p_List[j].type0.rejectS_NSSAI); + v_Length := v_Length + 1; // for type of list etc + } else { + v_Length := v_Length + fl_XtdRejectedS_NSSAILength(p_List[j].type1.rejectS_NSSAI); + v_Length := v_Length + 2; // for type of list etc + back off timer + } + } + return cs_ExtdRejectedNSSAI(int2oct(v_Length, 1), p_List); + } + + template (value) ExtdRejectedNSSAI cs_ExtdRejectedNSSAI(Type4Length_Type p_Len, + template(value) PartialXtdRejectedNSSAI_List p_List) := + { + iei := '68'O, + iel := p_Len, + partialXtd := p_List + }; + + template (value) PartialXtdRejectedNSSAI cs_PartialXtdRejectedNSSAIType0 (B4_Type p_NumOfElements, + template (value) XtdRejectedS_NSSAI_List p_List):= + { + type0 := { + spare := '0'B, + typeOfList := '000'B, + numOfElements := p_NumOfElements, + rejectS_NSSAI := p_List + } + }; + + template (value) PartialXtdRejectedNSSAI cs_PartialXtdRejectedNSSAIType1 (B4_Type p_NumOfElements, + O1_Type p_BackOffTimer, + template (value) XtdRejectedS_NSSAI_List p_List):= + { + type1 := { + spare := '0'B, + typeOfList := '001'B, + numOfElements := p_NumOfElements, + backOffTimerValue := p_BackOffTimer, + rejectS_NSSAI := p_List + } + }; + + template (value) XtdRejectedS_NSSAI cs_XtdRejectedS_NSSAI (B4_Type p_Len, + B4_Type p_Cause, + O1_Type p_SST, + template (omit) O3_Type p_SD := omit, + template (omit) O1_Type p_MappedSST := omit, + template (omit) O3_Type p_MappedSD := omit) := + { + len := p_Len, + causeValue := p_Cause, + snssai := { + sst := p_SST, + sd := p_SD, + mappedSST := p_MappedSST, + mappedSD := p_MappedSD + } + }; + + template (present) NG_GMM_Cap cr_NG_GMM_CapAny := + { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + /* 24.501 cl. 9.11.3.1 */ + iei := '10'O, /* present in case of TLV; omit in case of LV */ + iel := ?, /* @sic R5s210786 sic@ */ + sgc := ?, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + ngIPHC_CP_CIoT := ?, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + n3Data := ?, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + ng_CP_CIoT := ?, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + restrictEC := ?, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + lpp := ?, /* Dec18 */ + hoAttach := ?, + s1Cap := ?, + racs := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + nssaa := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + ngLCS := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + v2xNPC5 := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + v2xEPC5 := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + v2x := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + ng_UP_CIoT := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + ngSRVCC := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + ngProSeL2relay := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ngProSe_dc := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ngProSe_dd := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + erNSSAI := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ngEHC_CP_CIoT := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + multipleUP := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + wusa := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + cag := *, /* Sep20 @sic R5s201387 Baseline Moving, R5s201531 sic@ */ + pr := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + rpr := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + piv := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ncr := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + nrPSSI := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ngProSeL3rmt := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ngProSeL2rmt := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ngProSeL3relay := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + mpsiu := *, /* Jun23 @sic R5s230533 sic@ */ + uas := *, /* Jun23 @sic R5s230533 sic@ */ + nsag := *, /* Jun23 @sic R5s230533 sic@ */ + exCAG := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + ssnpnsi := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + eventNotification := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + mint := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + nssrg := *, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + spareBits := *, /* Jun23 @sic R5s230533 sic@ */ + rcman := *, /* Jun23 @sic R5s230533 sic@ */ + rcmap := *, /* Jun23 @sic R5s230533 sic@ */ + spare := omit + }; + + template (present) NG_GMM_Cap cdr_NG_GMM_Cap_RACS modifies cr_NG_GMM_CapAny := + { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + racs := '1'B + }; + + template (present) NG_GMM_Cap cdr_NG_GMM_Cap_S1 modifies cr_NG_GMM_CapAny := + { /* @status APPROVED (NR5GC_IRAT) */ + s1Cap := '1'B + }; + + template (present) NG_GMM_Cap cdr_NG_GMM_Cap_ERNSSAI modifies cr_NG_GMM_CapAny := + { + erNSSAI := '1'B + }; + + template (value) PayloadContainer cs_DummyPayloadContainer := + { // 24.501 cl. 9.11.3.39 + /* This is just a dummy to use in the GMM message as the NAS Emulator encodes the payload */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := omit, + iel := '0000'O, + payload := ''O + }; + + template (present) PayloadContainer cr_PayloadContainer(template IEI8_Type p_IEI := omit) := + { // 24.501 cl. 9.11.3.39 + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, /* present in case of TLV; omit in case of LV */ + iel := ?, /* allow any length */ + payload := ? /* allow any value for now */ + }; + + template (value) PayloadContainerType cs_PayloadContainerType (B4_Type p_ContainerType, + template (omit) IEI4_Type p_IEI := omit) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 9.11.3.40 */ + iei := p_IEI, + container := p_ContainerType + }; + + template (present) PayloadContainerType cr_PayloadContainerType (B4_Type p_ContainerType, + template IEI4_Type p_IEI := omit) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 9.11.3.40 */ + iei := p_IEI, + container := p_ContainerType + }; + + template (present) NG_PDU_SessionId cr_NG_PDU_SessionId(template IEI8_Type p_IEI := omit, + template (present) O1_Type p_Id := '00'O) := + { /* 24.501 cl. 9.11.3.41 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, + sessionId := p_Id + }; + + template (value) NG_PDU_SessionId cs_NG_PDU_SessionId(template (value) O1_Type p_Id := '00'O, + template (omit) IEI8_Type p_IEI := '12'O) := // @sic R5s190338 sic@ + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 9.11.3.41 */ + iei := p_IEI, + sessionId := p_Id + }; + + template (value) GMM_GSM_Cause cs_GMM_GSM_Cause(template (omit) IEI8_Type p_IEI, + NAS_CauseValue_Type p_Cause) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 9.11.3.2, 9.11.4.2 */ + iei := p_IEI, /* present in case of TV; omit in case of V */ + causeValue := p_Cause + }; + + template (value) ABBA cs_ABBA(octetstring p_ABBA, + template (omit) IEI8_Type p_IEI := '38'O, + Type4Length_Type p_Length := '02'O) := + { /* 24.501 cl. 9.11.3.10 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, + iel := p_Length, + abbaValue := p_ABBA + }; + + template (present) GMM_GSM_Cause cr_GMM_GSM_Cause(template IEI8_Type p_IEI, + template (present) NAS_CauseValue_Type p_Cause := ?) := + { /* 24.501 cl. 9.11.3.2, 9.11.4.2 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, /* present in case of TV; omit in case of V */ + causeValue := p_Cause + }; + + template (present) PDU_SessionStatus cr_PDU_SessionStatusAny (IEI8_Type p_IEI := '50'O) := + { /* 24.501 cl. 9.11.3.44 */ + /* @status APPROVED (NR5GC_IRAT) */ + iei := p_IEI, /* present in case of TV or TLV; omit in case of V */ + iel := ?, /* present in case of LV or TLV; omit in case of V */ + psi0_7 := ?, /* PSI(0)- PSI(7) */ + psi8_15 := ?, /* PSI(8)- PSI(15)*/ + spare := * + }; + + template (present) PDU_SessionStatus cr_PDU_SessionStatus(B8_Type p_Psi0_7, B8_Type p_Psi8_15):= + { /* @status APPROVED (NR5GC_IRAT) */ + /* 24.501 cl. 9.11.3.44 */ + iei := '50'O, + iel := '02'O, + psi0_7 := p_Psi0_7, + psi8_15 := p_Psi8_15, + spare := omit + }; + + template (present) NG_Request_Type cr_NG_Request_Type (B3_Type p_RequestValue) := + { /* 24.501 cl. 9.11.3.47 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := '8'H, // currently only used as TV + spare := tsc_Spare1, + requestValue := p_RequestValue + }; + + //---------------------------------------------------------------------------- + // NG Session Management (GSM) information elements (24.501 cl. 9.11.4) + //---------------------------------------------------------------------------- + + template (present) AlwaysOnPDUSessionReq cr_AlwaysOnRequested := crs_AlwaysOn('1'B); /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + template (value) AlwaysOnPDUSessionInd cs_AlwaysOnAllowed := crs_AlwaysOn('1'B); /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + template (value) AlwaysOnPDUSessionInd cs_AlwaysOnNotAllowed := crs_AlwaysOn('0'B); /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + template (value) AlwaysOnPDUSessionInd crs_AlwaysOn (B1_Type p_Apsi) := + { // 24.501 cl. 9.11.4.3 + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := '8'H, + spare := tsc_Spare3, + apsi := p_Apsi + }; + + template (value) EPSParameters cs_EPSParameter_QoS (octetstring p_Param) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + id := '01'O, + lenOfContent := omit, // this field is included in the EPS QoS template @sic R5s210302 sic@ + epsParam := p_Param + }; + + template (value) EPSParameters cs_EPSParameter_TFT (octetstring p_Param) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT) */ + id := '03'O, + lenOfContent := omit, // this field is included in the TFT template + epsParam := p_Param + }; + + template (value) MappedEPSContext cs_OneMappedEPSContext (O1_Type p_EPSBearerId, + integer p_ParamLength, + template (value) EPSParameters p_EPSParams) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + epsBearerId := p_EPSBearerId, + lenOfContext := int2oct(p_ParamLength + 2, 2), // @sic R5s190987, R5s210302 sic@ operation code line + id1 + operationCode := '01'B, + spare := tsc_Spare1, + eBit := '1'B, + numOfParams := '0001'B, + epsParamsList := {p_EPSParams} + }; + + template (value) MappedEPSContext cs_OneMappedEPSContextTwoParams (O1_Type p_EPSBearerId, + integer p_ParamLength, + template (value) EPSParameters p_EPSParam1, + template (value) EPSParameters p_EPSParam2) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT) */ + epsBearerId := p_EPSBearerId, + lenOfContext := int2oct(p_ParamLength + 3, 2), // operation code line + id1 + id2 + operationCode := '01'B, + spare := tsc_Spare1, + eBit := '1'B, + numOfParams := '0010'B, + epsParamsList := {p_EPSParam1, p_EPSParam2} + }; + + template (value) MappedEPSBearerContexts cs_OneMappedEPSBearerContextList (template (value) MappedEPSContext p_MappedEPSContext) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 9.11.4.8 */ + iei := '75'O, + iel := int2oct(oct2int(valueof(p_MappedEPSContext.lenOfContext)) + 3, 2), // @sic R5s190987 sic@ bearer id + 2 octets of len + mappedContextList := {p_MappedEPSContext} + }; + + template (value) MappedEPSBearerContexts cs_TwoMappedEPSBearerContextList (template (value) MappedEPSContext p_MappedEPSContext1, + template (value) MappedEPSContext p_MappedEPSContext2) := + { /* @status APPROVED (IMS, NR5GC) */ + /* 24.501 cl. 9.11.4.8 */ + iei := '75'O, + iel := int2oct(oct2int(valueof(p_MappedEPSContext1.lenOfContext)) + 3 + oct2int(valueof(p_MappedEPSContext2.lenOfContext)) + 3, 2), // @sic R5s211478 sic@ + mappedContextList := {p_MappedEPSContext1, p_MappedEPSContext2} + }; + + template (value) PDU_SessionType cs_PDU_SessionType (B3_Type p_Type) := + { /* 24.501 cl. 9.11.4.11 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := omit, + spare := tsc_Spare1, + typeValue := p_Type + }; + + template (present) PDU_SessionType cr_PDU_SessionType(template (present) B3_Type p_Type) := + { /* 24.501 cl. 9.11.4.11 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := '9'H, // @sic R5s190703 sic@ + spare := tsc_Spare1, + typeValue := p_Type + }; + + template (value) SSC_Mode crs_SSC_Mode(template (omit) IEI4_Type p_IEI := omit, + B3_Type p_SSCMode) := + { // 24.501 cl. 9.11.4.16 + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, + spare := tsc_Spare1, + sscModeValue := p_SSCMode + }; + + template (value) QoSParameters cs_QoSParameters (O1_Type p_Id, + Type4Length_Type p_Length, + octetstring p_Param) := + { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + id := p_Id, + lenOfContent := p_Length, + qosParam := p_Param + }; + + template (value) QoS_Flow cs_QoS_Flow (B6_Type p_QFI, template (value) QoSParametersList p_ParamList) := + { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + // @sic R5-194896 sic@ + spare2 := tsc_Spare2, + qfi := p_QFI, + operationCode := '001'B, + spare6 := tsc_Spare6, + eBit := '1'B, + numOfParameters := int2bit(lengthof(p_ParamList), 6), + parameterList := p_ParamList + }; + + template (value) PEIPS_AssistInfo cs_PEIPS_AssistInfo(template (value) IEI8_Type p_IEI, + template (value) Type4Length_Type p_IEL, + template (value)PEIPS_AssistIEList p_EIPS_AssistIEList):= + { + iei := p_IEI, + iel := p_IEL, + list:= p_EIPS_AssistIEList + }; + //================================================================== + // QoS Templates + //================================================================== + + /* + * @desc To convert the bit rate used in the QoS Flow parameters GFBR and MFBR + * according to 24.501 table 9.11.4.12.1 + * @param p_Value + * @param p_Multiplier + * @return O3_Type + * @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_FlowParameterBitRate(integer p_Value, + integer p_Multiplier) return O3_Type + { + var integer v_BitValue; + var integer v_Unit; + var integer i := 256; + + while ((p_Value mod i) != 0) { + i := i / 4; + } + v_BitValue := p_Value / i; + v_Unit := (f_FloorLog2(i) / 2) + 1; + + v_Unit := v_Unit + (5* (p_Multiplier -1)); + + return int2oct(v_Unit, 1) & int2oct(v_BitValue, 2); + } + + /* + * @desc Returns default Qos Flow according to 38.508-1 cl.4.8.2.3 + * @param p_FlowNumber + * @param p_InterworkWithEPS (default value: false) + * @param p_EPSBearerId (default value: '0'H - invalid value, but will not be used if not InterworkingWithEPS) + * @return template (value) QoS_Flow + * @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_BuildDefaultQosFlow (charstring p_FlowNumber, + boolean p_InterworkWithEPS := false, + O1_Type p_EPSBearerId := '00'O) return template (value) QoS_Flow + { + var template (value) QoSParametersList v_QoSParametersList; + var B6_Type v_QFI; + + select (p_FlowNumber) { + case ("1") { + v_QFI := '000001'B; + v_QoSParametersList := { cs_QoSParameters(tsc_QoSFlowParameter_5QI, '01'O, '09'O)}; + if (p_InterworkWithEPS) { + v_QoSParametersList[1] := cs_QoSParameters(tsc_QoSFlowParameter_EPSBearerId, '01'O, p_EPSBearerId); // @sic R5-204400 sic@ + } + } + case ("2") { + v_QFI := '000010'B; + v_QoSParametersList := { cs_QoSParameters(tsc_QoSFlowParameter_5QI, '01'O, '05'O)}; + if (p_InterworkWithEPS) { + v_QoSParametersList[1] := cs_QoSParameters(tsc_QoSFlowParameter_EPSBearerId, '01'O, p_EPSBearerId); // @sic R5-214436 sic@ + } + } + case ("2a") { + v_QFI := '000100'B; + v_QoSParametersList := { cs_QoSParameters(tsc_QoSFlowParameter_5QI, '01'O, '05'O)}; + } + case ("3") { + v_QFI := '000101'B; + v_QoSParametersList := { cs_QoSParameters(tsc_QoSFlowParameter_5QI, '01'O, '05'O)}; + } + case ("4") { + v_QFI := '000110'B; + v_QoSParametersList := { cs_QoSParameters(tsc_QoSFlowParameter_5QI, '01'O, '05'O)}; + } + case ("5") { + v_QFI := '000111'B; + v_QoSParametersList := { cs_QoSParameters(tsc_QoSFlowParameter_5QI, '01'O, '01'O), + cs_QoSParameters(tsc_QoSFlowParameter_GFBR_UL, '03'O, fl_FlowParameterBitRate(128, 1)), // @sic R5s210330, R5s210462 sic@ + cs_QoSParameters(tsc_QoSFlowParameter_GFBR_DL, '03'O, fl_FlowParameterBitRate(128, 1)), + cs_QoSParameters(tsc_QoSFlowParameter_MFBR_UL, '03'O, fl_FlowParameterBitRate(320, 1)), + cs_QoSParameters(tsc_QoSFlowParameter_MFBR_DL, '03'O, fl_FlowParameterBitRate(320, 1))}; // @sic R5s210330 sic@ + if (p_InterworkWithEPS) { + v_QoSParametersList[5] := cs_QoSParameters(tsc_QoSFlowParameter_EPSBearerId, '01'O, p_EPSBearerId); // @sic R5s210330, R5-213155 sic@ + } + } + case ("6") { + v_QFI := '001000'B; + v_QoSParametersList := { cs_QoSParameters(tsc_QoSFlowParameter_5QI, '01'O, '02'O), + cs_QoSParameters(tsc_QoSFlowParameter_GFBR_UL, '03'O, fl_FlowParameterBitRate(72, 1)), + cs_QoSParameters(tsc_QoSFlowParameter_GFBR_DL, '03'O, fl_FlowParameterBitRate(72, 1)), + cs_QoSParameters(tsc_QoSFlowParameter_MFBR_UL, '03'O, fl_FlowParameterBitRate(816, 1)), + cs_QoSParameters(tsc_QoSFlowParameter_MFBR_DL, '03'O, fl_FlowParameterBitRate(816, 1))}; + if (p_InterworkWithEPS) { + v_QoSParametersList[5] := cs_QoSParameters(tsc_QoSFlowParameter_EPSBearerId, '01'O, p_EPSBearerId); // @sic R5-213155 sic@ + } + } + case ("7") { // @sic R5-211499 sic@ + v_QFI := '001001'B; + v_QoSParametersList := { cs_QoSParameters(tsc_QoSFlowParameter_5QI, '01'O, '52'O)}; // 5QI 82 + } + } + return cs_QoS_Flow (v_QFI, v_QoSParametersList); + } + + template (value) QoS_Flow cs_QoS_Flow1(boolean p_InterworkWithEPS := false, + O1_Type p_EPSBearerId := '00'O) := f_BuildDefaultQosFlow("1", p_InterworkWithEPS, p_EPSBearerId); /* @sic R5-204400 sic@ @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + template (value) QoS_Flow cs_QoS_Flow2(boolean p_InterworkWithEPS := false, + O1_Type p_EPSBearerId := '00'O) := f_BuildDefaultQosFlow("2", p_InterworkWithEPS, p_EPSBearerId); /* @sic R5-204400 sic@ @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + template (value) QoS_Flow cs_QoS_Flow2a := f_BuildDefaultQosFlow("2a"); /* @sic R5s201094 sic@ @status APPROVED (NR5GC) */ + template (value) QoS_Flow cs_QoS_Flow3 := f_BuildDefaultQosFlow("3"); /* @sic R5s201094 sic@ @status APPROVED (NR5GC) */ + template (value) QoS_Flow cs_QoS_Flow4 := f_BuildDefaultQosFlow("4"); /* @sic R5s201094 sic@ @status APPROVED (NR5GC) */ + template (value) QoS_Flow cs_QoS_Flow5(boolean p_InterworkWithEPS := true, O1_Type p_EPSBearerId := '00'O) := f_BuildDefaultQosFlow("5", p_InterworkWithEPS, p_EPSBearerId); /* @status APPROVED (IMS, NR5GC) */ + template (value) QoS_Flow cs_QoS_Flow6(boolean p_InterworkWithEPS := true, O1_Type p_EPSBearerId := '00'O) := f_BuildDefaultQosFlow("6", p_InterworkWithEPS, p_EPSBearerId); /* @status APPROVED (IMS, NR5GC) */ + + /* + * @desc Returns length of QoS Flow list + * @param p_FlowList + * @return Type6Length_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_NR5GC_QoSFlowsLength (template (value) QoS_FlowList p_FlowList) return Type6Length_Type + { + var integer i; + var integer j; + var integer v_Length:=0; + + for (j:= 0; j < lengthof(p_FlowList); j:= j+1) { + if (isvalue(p_FlowList[j].parameterList)) { // @sic R5s210671 sic@ + for (i:= 0; i < lengthof(p_FlowList[j].parameterList); i:= i+1) { + v_Length := v_Length + oct2int(valueof(p_FlowList[j].parameterList[i].lenOfContent)); + v_Length := v_Length + 2; // Parameter identifier & length @sic R5s190856 sic@ + } + } + v_Length := v_Length + 3; // QFI + Operation Code + Num of Parameters + } + return int2oct(v_Length, 2); + } + + template (value) QoSFlowDescr cs_QoSFlowDescr (template (value) QoS_FlowList p_QoS_Flows) := + { /* 24.501 cl. 9.11.4.12 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := '79'O, + iel := fl_NR5GC_QoSFlowsLength(p_QoS_Flows), // @sic R5s190109, R5-194896 sic@ + listofFlows := p_QoS_Flows + }; + + template (value) QoSFlowDescr cs_QoSFlowDescr1 := cs_QoSFlowDescr ({cs_QoS_Flow1}); /* @status */ + template (value) QoSFlowDescr cs_QoSFlowDescr2 := cs_QoSFlowDescr ({cs_QoS_Flow2}); /* @status */ + + template (value) NG_PacketFilterList cs_PacketFilterList_1MatchAll := + { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + new := { + { + spare := tsc_Spare2, + direction := '11'B, // bi-directional + packetFilterId := '0001'B, // @sic R5-216158 sic@ + len := '01'O, + contents := '01'O // match-all + } + } + }; + + template (value) NG_PacketFilterList cs_PacketFilterList_MediaUDP (B4_Type p_Id, integer p_Port) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + new := { + cs_NG_PacketFilter_Type2 ('11'B, // bi-directional + p_Id, + fl_BuildRemotePortRange(p_Port) & fl_BuildProtocolIdNextHeaderUDP()) // @sic R5s220046 sic@ // Protocol id / Next Header UDP + } + }; + + template (value) NG_PacketFilter_Type2 cs_NG_PacketFilter_Type2 (B2_Type p_Dir, + B4_Type p_Id, + octetstring p_Contents) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + spare := tsc_Spare2, + direction := p_Dir, + packetFilterId := p_Id, + len := int2oct(lengthof(p_Contents), 1), + contents := p_Contents + }; + + /* + * @desc Build a Remote Port Range Packet Filter according to 38.508-1 cl. 4.8.2 + * @param p_Port + * @return octetstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_BuildRemotePortRange (integer p_Port) return octetstring + { + var octetstring v_PacketFilter; + + v_PacketFilter := '51'O; // id = remote port range + v_PacketFilter := v_PacketFilter & int2oct(p_Port, 2) & int2oct(p_Port+1, 2); // @sic R5s220046 sic@ + return v_PacketFilter; + } + + /* + * @desc Build a Protocol Id Next Header Packet Filter according to 38.508-1 cl. 4.8.2 + * @return octetstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_BuildProtocolIdNextHeaderUDP () return octetstring + { + var octetstring v_PacketFilter; + + v_PacketFilter := '30'O; // id = remote port range + v_PacketFilter := v_PacketFilter & int2oct(17, 1); + return v_PacketFilter; + } + + + template (value) QoS_Rule cs_QoS_Rule (O1_Type p_Id, + B6_Type p_QFI, + O1_Type p_Precedence, + B3_Type p_OperationCode := '001'B, + template (value) NG_PacketFilterList p_FilterList := cs_PacketFilterList_1MatchAll, + B1_Type p_DQR := '1'B) := + { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + identifier := p_Id, + iel := fl_NR5GC_QoSRuleLength(p_FilterList), // @sic R5s210074 sic@ + ruleOperationCode := p_OperationCode, // @sic R5s190987 sic@ + dqrBit := p_DQR, + numOfPacketFilters := '0001'B, + packetFilterList := p_FilterList, + precedence := p_Precedence, + spare := tsc_Spare1, + segregation := tsc_Spare1, + flowIdentifier := p_QFI + }; + + /* + * @desc To build the default QoS Rules as defined in 38.508-1 cl. 4.8.2.1 + * Builds rules #1 to #7 + * If you need a (non-default) combination, please use f_BuildDefaultQoSRule and/or f_BuildQoSRuleRemoteAccess + * For #7, please use identifier 7_Voice or 7_VoiceVideo + * @param p_RuleNum + * @param p_IEI (default value: omit) + * @return template (value) QoS_Rules + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_BuildDefaultQoSRules (charstring p_RuleNum, + template (omit) IEI8_Type p_IEI := omit) return template (value) QoS_Rules + { + var template (value) QoS_Rules v_QoS_Rules; + var template (value) QoS_Rule v_VoiceQoS := cs_QoS_Rule('03'O, int2bit(7, 6), '01'O, -, cs_PacketFilterList_MediaUDP('0110'B, tsc_IMS_MediaPort_M1), '0'B); // @sic R5-210627, R5s220046 sic@; + + if (p_RuleNum == "7_Voice") { + v_QoS_Rules := cs_QoS_Rules ({v_VoiceQoS}, p_IEI) // @sic R5-213440 sic@ + } else if (p_RuleNum == "7_Video") { + v_QoS_Rules := cs_QoS_Rules ({cs_QoS_Rule('04'O, int2bit(8, 6), '02'O, -, cs_PacketFilterList_MediaUDP('0111'B, tsc_IMS_MediaPort_M2), '0'B)}, p_IEI) // @sic R5-217796, R5s220046, R5s220336 sic@ + } else if (p_RuleNum == "7_VoiceVideo") { + v_QoS_Rules := cs_QoS_Rules ({v_VoiceQoS, cs_QoS_Rule('04'O, int2bit(8, 6), '02'O, -, cs_PacketFilterList_MediaUDP('0111'B, tsc_IMS_MediaPort_M2), '0'B)}, p_IEI) // @sic R5-210627, R5-216161, R5s220046 sic@ + } else { + v_QoS_Rules := cs_QoS_Rules ({f_BuildDefaultQoSRule(p_RuleNum)}, p_IEI); + } + return v_QoS_Rules; + } + + /* + * @desc To build a single default QoS Rule as defined in 38.508-1 cl. 4.8.2.1 + * Builds rules #1 to #6 + * @param p_RuleNum + * @return template (value) QoS_Rule + * @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_BuildDefaultQoSRule (charstring p_RuleNum) return template (value) QoS_Rule + { + var template (value) QoS_Rule v_QoS_Rule; + + select (p_RuleNum) { + case ("1") { + v_QoS_Rule := cs_QoS_Rule('01'O, int2bit(1, 6), 'FF'O); // @sic R5-202585 sic@ + } + case ("2") { + v_QoS_Rule := cs_QoS_Rule('02'O, int2bit(2, 6), 'FF'O); // @sic R5-202585 sic@ + } + case ("3", "4", "4a", "5", "6") { + v_QoS_Rule := f_BuildQoSRuleRemoteAccess (p_RuleNum); + } + case ("8") { + v_QoS_Rule := cs_QoS_Rule('07'O, int2bit(9, 6), 'FF'O); // @sic R5-211499 sic@ + } + } + return v_QoS_Rule; + } + + /* + * @desc Returns length of QoS Rule for a given input + * @param p_FilterList + * @return Type6Length_Type + * @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_NR5GC_QoSRuleLength (template (value) NG_PacketFilterList p_FilterList) return Type6Length_Type + { + var integer i; + var integer v_Length:=0; + + if (ischosen(p_FilterList.modify)) { + v_Length := 1; + } + if (ischosen(p_FilterList.new)) { + for (i:= 0; i < lengthof(p_FilterList.new); i:= i+1) { + v_Length := v_Length + oct2int(valueof(p_FilterList.new[i].len)); + v_Length := v_Length + 2; // 1 octet of header + length + } + } + v_Length := v_Length + 3; // 1 octet of header + precedence + 1 octet of footer + return int2oct(v_Length, 2); + } + + /* + * @desc Returns length of QoS Rules List + * @param p_Rules + * @return Type6Length_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function fl_NR5GC_QosRulesLength (template (value) QoS_RuleList p_Rules) return Type6Length_Type + { + var integer i; + var integer v_Length:=0; + + for (i:= 0; i < lengthof(p_Rules); i:= i+1) { + v_Length := v_Length + oct2int (valueof(p_Rules[i].iel)) + 3; // @sic R5s190109 sic@ + } + return int2oct(v_Length, 2); + } + + template (value) QoS_Rules cs_QoS_Rules (template (value) QoS_RuleList p_Rules, + template (omit) IEI8_Type p_IEI := omit) := // @sic R5s190673 sic@ + { // 24.501 cl. 9.11.4.13 + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, /* present in case of TLV; omit in case of LV */ + iel := fl_NR5GC_QosRulesLength(p_Rules), // @sic R5s190109 sic@ + listofQoSRules := p_Rules + }; + + template (value) Session_AMBR cs_Session_AMBR(template (omit) Type4Length_Type p_Length, + O1_Type p_UnitDL, + O2_Type p_DL, + O1_Type p_UnitUL, + O2_Type p_UL) := + { // 24.501 cl. 9.11.4.14 + /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := omit, /* present in case of TLV; omit in case of LV */ + iel := p_Length, /* present in case of LV or TLV; omit in case of V */ + unitDL := p_UnitDL, + downlink := p_DL, + unitUL := p_UnitUL, + uplink := p_UL + }; + + template (value) IMEISV_Request cds_NG_IMEISV_Request (B3_Type p_Value := tsc_IMEISV_Requested) modifies cs_IMEISV_Request_WithIEI := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := 'E'H + }; + + template (value) AllowedNSSAI cs_AllowedNSSAI (template (value) NAS_PlmnId p_PLMN, + B2_Type p_AccessType) := + { /* @status APPROVED (NR5GC) */ + allowedNSSAI := p_PLMN, + spareBits := tsc_Spare6, + accessType := p_AccessType + }; + + template (value) NG_NAS_DL_Message_Type cs_NSSAI_DELETE_REQUEST (B8_Type p_DeleteNSSAI_Type, + template (omit) NAS_PlmnId p_Configured, + template (omit) AllowedNSSAI p_Allowed) := + { /* @status APPROVED (NR5GC) */ + nssai_Delete_Request:= { + skipIndicator := tsc_Gen_SkipIndicator, /* M V 1/2 */ + protocolDiscriminator := tsc_LB_ProtocolDiscriminator, /* M V 1/2 */ + messageType := tsc_MsgType_NSSAI_DeleteReq, /* M V 1 */ + deleteNSSAI_Type := p_DeleteNSSAI_Type, + configuredNSSAI := p_Configured, /* only present if deleteNSSAI_Type = DeleteConfigured */ + allowedNSSAI := p_Allowed /* only present if deleteNSSAI_Type = DeleteAllowed */ + } + }; + + template (present) NG_NAS_UL_Message_Type cr_NSSAI_DELETE_RESPONSE := + { /* @status APPROVED (NR5GC) */ + nssai_Delete_Response:= { + skipIndicator := tsc_Gen_SkipIndicator, /* M V 1/2 */ + protocolDiscriminator := tsc_LB_ProtocolDiscriminator, /* M V 1/2 */ + messageType := tsc_MsgType_NSSAI_DeleteResp /* M V 1 */ + } + }; + + template (value) NG_NAS_DL_Message_Type cs_SET_UAI_REQUEST (B2_Type p_PreferredRRCState) := + { /* @status APPROVED (NR5GC) */ + set_UAI_Request:= { + skipIndicator := tsc_Gen_SkipIndicator, /* M V 1/2 */ + protocolDiscriminator := tsc_LB_ProtocolDiscriminator, /* M V 1/2 */ + messageType := tsc_MsgType_SetUAIReq, /* M V 1 */ + spare := tsc_Spare6, + preferredRRCState := p_PreferredRRCState + } + }; + + template (present) NG_NAS_UL_Message_Type cr_SET_UAI_RESPONSE := + { /* @status APPROVED (NR5GC) */ + set_UAI_Response:= { + skipIndicator := tsc_Gen_SkipIndicator, /* M V 1/2 */ + protocolDiscriminator := tsc_LB_ProtocolDiscriminator, /* M V 1/2 */ + messageType := tsc_MsgType_SetUAIResp /* M V 1 */ + } + }; + +template (present) NG_NAS_UL_Message_Type cr_NG_GMM_STATUS (template (present) GMM_GSM_Cause p_Cause) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.2.29 */ + gmm_Status := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, /* cl. 9.3 M V 1/2 */ + messageType := tsc_MT_NG_GMM_Status, /* cl. 9.7 M V 1 */ + gmmCause := p_Cause /* cl. 9.11.3.2 M V 1 */ + } + }; + + template (value) NSSAI_LV cs_NSSAI_LV(Type4Length_Type p_Length, + template (value) S_NSSAI_TypeList p_S_NSSAI):= + { /* 24.501 cl. 9.11.3.37 */ + iel := p_Length, + s_nssai := p_S_NSSAI + }; + + /* + * @desc Returns length of NSAG info element + * @param p_NSAG + * @param p_TaiList + * @return Type4Length_Type + */ + function fl_NR5GC_NSAGLength (template (value) NSSAI_LV p_NSAG, template(omit) NG_TrackingAreaIdList_LV p_TaiList) return Type4Length_Type + { + var integer v_Length := oct2int(valueof(p_NSAG.iel)); + + v_Length := v_Length + 3; // id + length of S-NSSAI list + priority + + if (isvalue(p_TaiList)) { + v_Length := v_Length + oct2int(valueof(p_TaiList.iel)) + 1; // + length of TAIList + } + return int2oct(v_Length, 1); + } + + template (value) NSAG cs_NSAG_InfoElement(O1_Type p_Id, + template(value) NSSAI_LV p_NSAG, + O1_Type p_Priority, + template(omit) NG_TrackingAreaIdList_LV p_TaiList) := + { // 24.501 cl. 9.11.3.87, Figure 9.11.3.87.2: NSAG + iel := fl_NR5GC_NSAGLength(p_NSAG, p_TaiList), + id := p_Id, + sNSSAIList := p_NSAG, + priority := p_Priority, + taiList := p_TaiList + }; + + template (value) NSAG_Info cs_NSAG_2Elements(template(value) NSAG p_NSAG1, + template(value) NSAG p_NSAG2) := + { // 24.501 cl. 9.11.3.87, Figure 9.11.3.87.1: NSAG information information element + iei := '7C'O, + iel := int2oct(oct2int(valueof(p_NSAG1.iel)) + oct2int(valueof(p_NSAG2.iel)) + 2, 2), // 1 + 1 + (p_NSAG1.iel) + (p_NSAG2.iel) + nsagList := {p_NSAG1, p_NSAG2} + }; + + /* + * @desc Build an NID according to 24.502 cl. 9.2.7 + * @return template (value) NID + */ + function fl_BuildNIDTemplate (integer p_NID, integer p_AssignmentMode := 1) return template (value) NID + { + var hexstring v_Hex := int2hex(p_NID, 10); + var hexstring v_Digits2_9 := '00000000'H; + var template (value) NID v_NIDTemplate := cs_NIDBlank (int2bit(p_AssignmentMode, 4)); + + // arrange digits 2 to 9 in the order specified in 24.502 cl. 9.2.7 + v_Digits2_9 := v_Hex[2] & v_Hex[1] & + v_Hex[4] & v_Hex[3] & + v_Hex[6] & v_Hex[5] & + v_Hex[8] & v_Hex[7]; + + v_NIDTemplate.digit1 := v_Hex[0]; + v_NIDTemplate.digits2_9 := v_Digits2_9; + v_NIDTemplate.digit10 := v_Hex[9]; + + return v_NIDTemplate; + } + + template (value) NID cs_NIDBlank (B4_Type p_AssignmentMode) := + { /* 24.301 cl. 9.11.3.79 */ + iei := '32'O, /* present in case of TV; omit in case of V */ + iel := '06'O, /* present in case of LV or TLV; omit in case of V */ + digit1 := '0'H, + assignmentMode := p_AssignmentMode, + digits2_9 := '00000000'H, + spare := '0000'B, + digit10 := '0'H + }; + + template (value) ExtdDRXParams cs_NG_NAS_EDRXParams (B4_Type p_PTW, + B4_Type p_EDRXVal, + template (omit) B8_Type p_ExtdPTW := omit) := + { /* @status */ + iei := '6E'O, + iel := '01'O, // length + pagingTimeWindow := p_PTW, + eDRXValue := p_EDRXVal, + extdPTW := p_ExtdPTW + }; + + +} + diff --git a/ttcn/Lib3GPP/NG_NAS/NG_NAS_TypeDefs.ttcn b/ttcn/Lib3GPP/NG_NAS/NG_NAS_TypeDefs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..f8249d2d15dc4135dbd76301559821f69ef07c37 --- /dev/null +++ b/ttcn/Lib3GPP/NG_NAS/NG_NAS_TypeDefs.ttcn @@ -0,0 +1,2981 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-07-21 18:08:50 +0200 (Fri, 21 Jul 2023) $ +// $Rev: 36506 $ +/******************************************************************************/ + +module NG_NAS_TypeDefs { + + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + + type enumerated NAS_5GC_AKA_Type {AKA_5G, AKAP_EAP}; + + //**************************************************************************** + // NAS PROTOCOL DEFINITIONS: IEs + //---------------------------------------------------------------------------- + // General Info Elements (24.501 cl. 9) + //---------------------------------------------------------------------------- + + type B8_Type ExtdProtocolDiscriminator; /* 24.501 cl. 9.2 */ + + + // Note: This IE is not needed when SECURITY PROTECTED NAS MESSAGE is + // handled by the NAS emulation An alternative approach would be to + // implement NAS_Message as a union of all NAS messages except + // SECURITY PROTECTED NAS MESSAGE and SERVICE REQUEST - but this would + // have impact on codec implementation and may reduce readability */ + type octetstring NG_NAS_Message; /* 24.501 cl. 9.9 */ + + //**************************************************************************** + // NAS PROTOCOL DEFINITIONS: PDUs + //---------------------------------------------------------------------------- + // NG mobility management messages (24.501 cl. 8.2) + //---------------------------------------------------------------------------- + + type record NG_AUTHENTICATION_REQUEST { /* 24.501 cl. 8.2.1 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + SpareHalfOctet spareHalfOctet2, /* cl. 9.5 M V 1/2 */ + NAS_KeySetIdentifier ngNasKeySetId, /* cl. 9.11.3.29 M V 1/2 */ + ABBA abba, /* cl. 9.11.3.10 M LV 3-n Dec18 */ + RAND rand optional, /* cl. 9.11.3.16 O TV 17 IEI=21 */ + AUTN autn optional, /* cl. 9.11.3.15 O TLV 18 IEI=20 */ + EAP_Message eapMessage optional /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + } with { + variant "FIELDORDER(msb)"; + variant (ngNasKeySetId) "FORCEOMIT(iei)"; + variant (abba) "FORCEOMIT(iei)"; + variant "TAG(rand, iei = '21'O; + autn, iei = '20'O; + eapMessage, iei = '78'O)"; + } + + type record NG_AUTHENTICATION_RESPONSE { /* 24.501 cl. 8.2.2 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + AuthenticationResponseParameter authResponseParam optional, /* cl. 9.11.3.17 O TLV 18 IEI=2D */ + EAP_Message eapMessage optional /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + } with { + variant "FIELDORDER(msb)"; + variant "TAG(authResponseParam, iei = '2D'O; + eapMessage, iei = '78'O)"; + } + + type record NG_AUTHENTICATION_RESULT { /* 24.501 cl. 8.2.3 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + SpareHalfOctet spareHalfOctet2, /* cl. 9.5 M V 1/2 */ + NAS_KeySetIdentifier ngNasKeySetId, /* cl. 9.11.3.32 M V 1/2 */ + EAP_Message eapMessage, /* cl. 9.11.2.2 M LV-E 6-1502 */ + ABBA abba optional /* cl. 9.11.3.10 O TLV 3-n IEI=38 Dec18 */ + } with { + variant "FIELDORDER(msb)"; + variant (ngNasKeySetId) "FORCEOMIT(iei)"; + variant (eapMessage) "FORCEOMIT(iei)"; + variant "TAG(abba, iei = '38'O)"; + } + + type record NG_AUTHENTICATION_FAILURE { /* 24.501 cl. 8.2.4 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gmmCause, /* cl. 9.11.3.2 M V 1 */ + AuthenticationFailureParameter authFailureParam optional /* cl. 9.11.3.14 O TLV 16 IEI=30 */ + } with { + variant "FIELDORDER(msb)"; + variant (gmmCause) "FORCEOMIT(iei)"; + variant "TAG(authFailureParam, iei = '30'O)"; + } + + type record NG_AUTHENTICATION_REJECT { /* 24.501 cl. 8.2.5 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1/2 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + EAP_Message eapMessage optional /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 Dec18 */ + } with { + variant "FIELDORDER(msb)"; + variant "TAG(eapMessage, iei = '78'O)"; + } + + type record NG_REGISTRATION_REQUEST { /* 24.501 cl. 8.2.6 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + NAS_KeySetIdentifier ngNasKSI, /* cl. 9.11.3.32 M V 1/2 */ + RegistrationType registrationType, /* cl. 9.11.3.7 M V 1/2 Dec18 */ + NG_MobileIdentity ngMobileId, /* cl. 9.11.3.4 M LV-E 6-n */ + NAS_KeySetIdentifier nonCurrentNativeKSI optional, /* cl. 9.11.3.32 O TV 1 IEI=C- */ + NG_GMM_Cap gmmCapability optional, /* cl. 9.11.3.1 O TLV 3-15 IEI=10 */ + NG_UE_SecurityCapability ueSecurityCapability optional, /* cl. 9.11.3.54 O TLV 4-10 IEI=2E */ + NSSAI requestedNSSAI optional, /* cl. 9.11.3.37 O TLV 4-74 IEI=2F */ + NG_TrackingAreaId lastVisitedRegisteredTai optional, /* cl. 9.11.3.8 O TV 7 IEI=52 */ + UE_NetworkCap s1_UE_Capability optional, /* cl. 9.11.3.48 O LV 4-15 IEI=17 */ + ULDataStatus ulDataStatus optional, /* cl. 9.11.3.57 O TLV 4-34 IEI=40 */ + PDU_SessionStatus pduSessionStatus optional, /* cl. 9.11.3.44 O TLV 4-34 IEI=50 */ + MICO_Ind micoInd optional, /* cl. 9.11.3.31 O TLV 1 IEI=B */ + UE_Status ueStatus optional, /* cl. 9.11.3.56 O TLV 3 IEI=2B */ + NG_MobileIdentity additionalGUTI optional, /* cl. 9.11.3.4 O TLV-E 14 IEI=77 */ + AllowedPDU_SessionStatus allowedPDUSessionStatus optional, /* cl. 9.11.3.13 O TLV 4-34 IEI=25 */ + UE_UsageSetting ueUsageSetting optional, /* cl. 9.11.3.55 O TLV 3 IEI=18 */ + NG_DRXparameter reqDRXParams optional, /* cl. 9.11.3.2A O TLV 3 IEI=51 */ + EPS_MessageContainer epsMessage optional, /* cl. 9.11.3.24 O TLV-E ? IEI=70 */ + LADN_Ind ladnInd optional, /* cl. 9.11.3.29 O TLV-E 3-811 IEI=74 */ + PayloadContainerType payloadContainerType optional, /* cl. 9.11.3.40 O TV 1 IEI=8 Mar 19 @sic R5w190113 sic@*/ + PayloadContainer payload optional, /* cl. 9.11.3.39 O TLV-E 4-65538 IEI=7B */ + NetworkSlicingInd networkSlicingInd optional, /* cl. 9.11.3.36 O TV 1 IEI=9 Dec18 */ + NG_UpdateType updateType optional, /* cl. 9.11.3.9A O TLV 3 IEI=53 Dec18 */ + MS_Clsmk2 msClassmark2 optional, /* cl. 9.11.3.31C O TLV 5 IEI=41 Sep20 @sic R5s201387 Baseline Moving sic@ */ + CodecList supportedCodecs optional, /* cl. 9.11.3.51A O TLV 5-n IEI=42 Sep20 @sic R5s201387 Baseline Moving sic@ */ + NASMessageContainer nasMsg optional, /* cl. 9.11.3.33 O TLV-E 4-n IEI=71 Dec18 */ + EPS_BearerContextStatus epsBearerContextStatus optional, /* cl. 9.11.3.23A O TLV 4 IEI=60 Jun19 @sic R5s190543 sic@ */ + ExtdDRXParams requestedExtdDRXParams optional, /* cl. 9.11.3.26A O TLV 3-4 IEI=6E Sep20 @sic R5s201387 Baseline Moving sic@ */ + GPRS_Timer3 t3324Value optional, /* cl. 9.11.2.5 O TLV 3 IEI=6A Sep20 @sic R5s201387 Baseline Moving sic@ */ + UERadioCapId ueRadioCapabilityId optional, /* cl. 9.11.3.68 O TLV 3-n IEI=67 Sep20 @sic R5s201387 Baseline Moving sic@ */ + MappedNSSAI requestedMappedNSSAI optional, /* cl. 9.11.3.31B O TLV 3-42 IEI=35 Sep20 @sic R5s201387 Baseline Moving sic@ */ + AddInfoRequest additionalInfoReq optional, /* cl. 9.11.3.12A O TLV 3 IEI=48 Sep20 @sic R5s201387 Baseline Moving sic@ */ + WUSAssistInfo requestedWUSAssistanceInfo optional, /* cl. 9.11.3.71 O TLV 3-n IEI=1A Sep20 @sic R5s201387 Baseline Moving sic@ */ + N5GCInd n5GCInd optional, /* cl. 9.11.3.72 O TV 1 IEI=A Sep20 @sic R5s201387 Baseline Moving sic@ */ + NB_N1ModeDRXParams requestedNB_N1DRXParams optional, /* cl. 9.11.3.73 O TLV 3 IEI=30 Sep20 @sic R5s201387 Baseline Moving sic@ */ + UE_RequestType ueRequestType optional, /* cl. 9.11.3.76 O TLV 3 IEI=29 Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_PagingRestriction pagingRestrict optional, /* cl. 9.11.3.77 O TLV 3-35 IEI=28 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ServiceLvlAAContainer serviceLvlAA optional, /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + NID nId optional, /* cl. 9.11.3.79 O TLV 8 IEI=32 Sep22 @sic R5s221179 Baseline Moving sic@ */ + PLMN_IdIE msPLMNwDisasterCondition optional, /* cl. 9.11.3.85 O TLV 5 IEI=16 Sep22 @sic R5s221179 Baseline Moving sic@ */ + PEIPS_AssistInfo requestedPEIPS_AssistInfo optional, /* cl. 9.11.3.80 O TLV 3-n IEI=2A Sep22 @sic R5s221179 Baseline Moving sic@ */ + GPRS_Timer3 t3512Value optional /* cl. 9.11.2.5 O TLV 3 IEI=3B Jun23 @sic R5s230533 sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (ngNasKSI) "FORCEOMIT(iei)"; + variant (ngMobileId) "FORCEOMIT(iei)"; + variant "TAG(nonCurrentNativeKSI, iei = 'B'H; + gmmCapability, iei = '10'O; + ueSecurityCapability, iei = '2E'O; + requestedNSSAI, iei = '2F'O; + lastVisitedRegisteredTai, iei = '52'O; + s1_UE_Capability, iei = '17'O; + ulDataStatus, iei = '40'O; + pduSessionStatus, iei = '50'O; + micoInd, iei = 'B'H; + ueStatus, iei = '2B'O; + additionalGUTI, iei = '77'O; + allowedPDUSessionStatus, iei = '25'O; + ueUsageSetting, iei = '18'O; + reqDRXParams, iei = '51'O; + epsMessage, iei = '70'O; + ladnInd, iei = '74'O; + payloadContainerType, iei = '8'H; + payload, iei = '7B'O; + networkSlicingInd, iei = '9'H; + updateType, iei = '53'O; + msClassmark2, iei = '41'O; + supportedCodecs, iei = '42'O; + nasMsg, iei = '71'O; + epsBearerContextStatus, iei = '60'O; + requestedExtdDRXParams, iei = '6E'O; + t3324Value, iei = '6A'O; + ueRadioCapabilityId, iei = '67'O; + requestedMappedNSSAI, iei = '35'O; + additionalInfoReq, iei = '48'O; + requestedWUSAssistanceInfo, iei = '1A'O; + n5GCInd, iei = 'A'H; + requestedNB_N1DRXParams, iei = '30'O; + ueRequestType, iei = '29'O; + pagingRestrict, iei = '28'O; + serviceLvlAA, iei = '72'O; + nId, iei = '32'O; + msPLMNwDisasterCondition, iei = '16'O; + requestedPEIPS_AssistInfo, iei = '2A'O; + t3512Value, iei = '3B'O)"; + } + + type record NG_REGISTRATION_ACCEPT { /* 24.501 cl. 8.2.7 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + RegistrationResult registrationResult, /* cl. 9.11.3.6 M LV 2 */ + NG_MobileIdentity guti optional, /* cl. 9.11.3.4 O TLV 13 IEI=77 Dec18 */ + PLMN_List equivalentPlmns optional, /* cl. 9.11.3.45 O TLV 5-47 IEI=4A */ + NG_TrackingAreaIdList taiList optional, /* cl. 9.11.3.9 O TLV 9-114 IEI=54 */ + NSSAI allowedNSSAI optional, /* cl. 9.11.3.37 O TLV 4-74 IEI=15 */ + RejectedNSSAI rejectedNSSAI optional, /* cl. 9.11.3.46 O TLV 4-42 IEI=11 */ + NSSAI configuredNSSAI optional, /* cl. 9.11.3.37 O TLV 4-146 IEI=31 */ + NG_NetworkFeatureSupport ngs_NetworkFeatureSupport optional, /* cl. 9.11.3.5 O TLV 3-5 IEI=21 */ + PDU_SessionStatus pduSessionStatus optional, /* cl. 9.11.3.44 O TLV 4-34 IEI=50 */ + PDU_SessionReactivationResult pduSessionReactivationResult optional, /* cl. 9.11.3.42 O TLV 4-34 IEI=26 */ + PDU_SessionReactivationError pduSessionReactResultError optional, /* cl. 9.11.3.43 O TLV-E 5-515 IEI=72 */ + LADN_Info ladnInfo optional, /* cl. 9.11.3.30 O TLV-E 12-1715 IEI=79 */ + MICO_Ind micoInd optional, /* cl. 9.11.3.31 O TV 1 IEI=B */ + NetworkSlicingInd networkSlicingInd optional, /* cl. 9.11.3.36 O TV 1 IEI=9 */ + ServiceAreaIdList saiList optional, /* cl. 9.11.3.49 O TLV 6-114 IEI=27 */ + GPRS_Timer3 t3512Value optional, /* cl. 9.11.2.5 O TLV 3 IEI=5E */ + GPRS_Timer2 non3GPPDeregisterValue optional, /* cl. 9.11.2.4 O TLV 3 IEI=5D */ + GPRS_Timer2 t3502Value optional, /* cl. 9.11.2.4 O TLV 3 IEI=16 */ + EmergNumList emergencyNumberList optional, /* cl. 9.11.3.23 O TLV 5-50 IEI=34 */ + ExtdEmergNumList xtdEmergencyNumberList optional, /* cl. 9.11.3.26 O TLV-E 7-65538 IEI=7A */ + SORTransparentContainer sorTransparentContainer optional, /* cl. 9.11.3.51 O TLV-E 20-2048 IEI=73 */ + EAP_Message eapMessage optional, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78*/ + InclusionModeNSSAI inclusionModeNSSAI optional, /* cl. 9.11.3.37A O TV 1 IEI=A Dec18 */ + OperatorAccessCatDefinitions operatorAccessCatDefs optional, /* cl. 9.11.3.38 O TLV-E 4-n IEI=76 Dec18 */ + NG_DRXparameter negotiatedDRXParams optional, /* cl. 9.11.3.2A O TLV 3 IEI=51 Dec18 */ + Non3GPP_NW_ProvidedPolicies non3GPP_NW_ProvidedPolicies optional, /* cl. 9.11.3.58 O TV 1 IEI = D Mar 19 @sic R5w190113 sic@ */ + EPS_BearerContextStatus epsBearerContextStatus optional, /* cl. 9.11.3.23A O TLV 4 IEI=60 Jun19 @sic R5s190543 sic@ */ + ExtdDRXParams negotiatedExtdDRXParams optional, /* cl. 9.11.3.26A O TLV 3 IEI=6E Sep20 @sic R5s201387 Baseline Moving sic@ */ + GPRS_Timer3 t3447Value optional, /* cl. 9.11.2.5 O TLV 3 IEI=6C Sep20 @sic R5s201387 Baseline Moving sic@ */ + GPRS_Timer2 t3448Value optional, /* cl. 9.11.2.4 O TLV 3 IEI=6B Sep20 @sic R5s201387 Baseline Moving sic@ */ + GPRS_Timer3 t3324Value optional, /* cl. 9.11.2.5 O TLV 3 IEI=6A Sep20 @sic R5s201387 Baseline Moving sic@ */ + UERadioCapId ueRadioCapabilityId optional, /* cl. 9.11.3.68 O TLV 3-n IEI=67 Sep20 @sic R5s201387 Baseline Moving sic@ */ + UERadioCapIdDeletion ueRadioCapIdDeletionInd optional, /* cl. 9.11.3.69 O TV 1 IEI=E Sep20 @sic R5s201387 Baseline Moving sic@ */ + NSSAI pendingNSSAI optional, /* cl. 9.11.3.37 O TLV 4-146 IEI=39 Sep20 @sic R5s201387 Baseline Moving sic@ */ + NG_CipheringKeyData cipheringKeyData optional, /* cl. 9.11.3.18C O TLV-E 34-n IEI=74 Sep20 @sic R5s201387 Baseline Moving sic@ */ + CAGInfoList cagInfoList optional, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + TruncatedS_TMSIConfig truncatedS_TMSIConfig optional, /* cl. 9.11.3.70 O TLV 3 IEI=1B Sep20 @sic R5s201387 Baseline Moving sic@ */ + WUSAssistInfo negotiatedWUSAssistanceInfo optional, /* cl. 9.11.3.71 O TLV 3-n IEI=1C Sep20 @sic R5s201387 Baseline Moving sic@ */ + NB_N1ModeDRXParams negotiatedNB_N1DRXParams optional, /* cl. 9.11.3.73 O TLV 3 IEI=29 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ExtdRejectedNSSAI extdRejectedNSSAI optional, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ServiceLvlAAContainer serviceLvlAA optional, /* cl. 9.11.2.10 O TLV-E 6-n IEI=7B Sep22 @sic R5s221179 Baseline Moving sic@ */ + PEIPS_AssistInfo negotiatedPEIPS_AssistInfo optional, /* cl. 9.11.3.80 O TLV 3-n IEI=33 Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_AddReqResult ngAddRequestResult optional, /* cl. 9.11.3.81 O TLV 3 IEI=35 Sep22 @sic R5s221179 Baseline Moving sic@ */ + NSSRG_Info nssrgInfo optional, /* cl. 9.11.3.82 O TLV-E 7-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + RegistrationWaitRange disasterRoamingWaitRange optional, /* cl. 9.11.3.84 O TLV 4 IEI=14 Sep22 @sic R5s221179 Baseline Moving sic@ */ + RegistrationWaitRange disasterReturnWaitRange optional, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + DisasterPLMNList disasterPLMNList optional, /* cl. 9.11.3.83 O TLV 2-n IEI=13 Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_TrackingAreaIdList forbidTAIList_Roaming optional, /* cl. 9.11.3.9 O TLV 9-114 IEI=1D Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_TrackingAreaIdList forbidTAIList_RegProvService optional, /* cl. 9.11.3.9 O TLV 9-114 IEI=1E Sep22 @sic R5s221179 Baseline Moving sic@ */ + ExtdCAGInfoList extdCAGInfoList optional, /* cl. 9.11.3.86 O TLV-E 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + NSAG_Info nsagInfo optional /* cl. 9.11.3.87 O TLV-E 10-n IEI=7C Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant "TAG(guti, iei = '77'O; + equivalentPlmns, iei = '4a'O; + taiList, iei = '54'O; + allowedNSSAI, iei = '15'O; + rejectedNSSAI, iei = '11'O; + configuredNSSAI, iei = '31'O; + ngs_NetworkFeatureSupport, iei = '21'O; + pduSessionStatus, iei = '50'O; + pduSessionReactivationResult, iei = '26'O; + pduSessionReactResultError, iei = '72'O; + ladnInfo, iei = '79'O; + micoInd, iei = 'B'H; + networkSlicingInd, iei = '9'H; + saiList, iei = '27'O; + t3512Value, iei = '5E'O; + non3GPPDeregisterValue, iei = '5D'O; + t3502Value, iei = '16'O; + emergencyNumberList, iei = '34'O; + xtdEmergencyNumberList, iei = '7A'O; + sorTransparentContainer, iei = '73'O; + eapMessage, iei = '78'O; + inclusionModeNSSAI, iei = 'A'H; + operatorAccessCatDefs, iei = '76'O; + negotiatedDRXParams, iei = '51'O; + non3GPP_NW_ProvidedPolicies, iei = 'D'H; + epsBearerContextStatus, iei = '60'O; + negotiatedExtdDRXParams, iei = '6E'O; + t3447Value, iei = '6C'O; + t3448Value, iei = '6B'O; + t3324Value, iei = '6A'O; + ueRadioCapabilityId, iei = '67'O; + ueRadioCapIdDeletionInd, iei = 'E'H; + pendingNSSAI, iei = '39'O; + cipheringKeyData, iei = '74'O; + cagInfoList, iei = '75'O; + truncatedS_TMSIConfig, iei = '1B'O; + negotiatedWUSAssistanceInfo, iei = '1C'O; + negotiatedNB_N1DRXParams, iei = '29'O; + extdRejectedNSSAI, iei = '68'O; + serviceLvlAA, iei = '7B'O; + negotiatedPEIPS_AssistInfo, iei = '33'O; + ngAddRequestResult, iei = '35'O; + nssrgInfo, iei = '70'O; + disasterRoamingWaitRange, iei = '14'O; + disasterReturnWaitRange, iei = '2C'O; + disasterPLMNList, iei = '13'O; + forbidTAIList_Roaming, iei = '1D'O; + forbidTAIList_RegProvService, iei = '1E'O; + extdCAGInfoList, iei = '71'O; + nsagInfo, iei = '7C'O)" + } + + type record NG_REGISTRATION_COMPLETE { /* 24.501 cl. 8.2.8 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + SORTransparentContainer sorTransparentContainer optional /* cl. 9.11.3.51 O TLV-E 20-2048 IEI=73 */ + } with { + variant "FIELDORDER(msb)"; + variant "TAG(sorTransparentContainer, iei = '73'O)" + } + + type record NG_REGISTRATION_REJECT { /* 24.501 cl. 8.2.9 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gmmCause, /* cl. 9.11.3.2 M V 1 */ + GPRS_Timer2 t3346 optional, /* cl. 9.11.2.4 O TLV 3 IEI=5F */ + GPRS_Timer2 t3502 optional, /* cl. 9.11.2.4 O TLV 3 IEI=16 */ + EAP_Message eapMessage optional, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + RejectedNSSAI rejectedNSSAI optional, /* cl. 9.11.3.46 O TLV 4-42 IEI=69 Sep20 @sic R5s201387 Baseline Moving sic@ */ + CAGInfoList cagInfoList optional, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ExtdRejectedNSSAI extdRejectedNSSAI optional, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + RegistrationWaitRange disasterReturnWaitRange optional, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + ExtdCAGInfoList extdCAGInfoList optional, /* cl. 9.11.3.86 O TLV 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + GPRS_Timer3 lowerBoundTimerValue optional, /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_TrackingAreaIdList forbidTAIList_Roaming optional, /* cl. 9.11.3.9 O TLV 9-114 IEI=1D Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_TrackingAreaIdList forbidTAIList_RegProvService optional /* cl. 9.11.3.9 O TLV 9-114 IEI=1E Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (gmmCause) "FORCEOMIT(iei)"; + variant "TAG(t3346, iei = '5f'O; + t3502, iei = '16'O; + eapMessage, iei = '78'O; + rejectedNSSAI, iei = '69'O; + cagInfoList, iei = '75'O; + extdRejectedNSSAI, iei = '68'O; + disasterReturnWaitRange, iei = '2C'O; + extdCAGInfoList, iei = '71'O; + lowerBoundTimerValue, iei = '3A'O; + forbidTAIList_Roaming, iei = '1D'O; + forbidTAIList_RegProvService, iei = '1E'O)" + } + + type record NG_UL_NAS_TRANSPORT { /* 24.501 cl. 8.2.10 + Significance: local + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + SpareHalfOctet spareHalfOctet2, /* cl. 9.5 M V 1/2 */ + PayloadContainerType payloadContainerType, /* cl. 9.11.3.40 M V 1/2 */ + PayloadContainer payload, /* cl. 9.11.3.39 M LV-E 3-65537 */ + NG_PDU_SessionId pduSessionId optional, /* cl. 9.11.3.41 C TV 2 IEI=12 */ + NG_PDU_SessionId oldPDUSessionId optional, /* cl. 9.11.3.41 O TV 3 IEI=59 */ + NG_Request_Type requestType optional, /* cl. 9.`0.3.47 O TV 1 IEI=8 */ + S_NSSAI_Type s_NSSAI optional, /* cl. 9.11.2.8 O TLV 3-10 IEI=22 */ + DNN dnn optional, /* cl. 9.11.3.21 O TLV 3-102 IEI=25 */ + AdditionalInformation additionalInfo optional, /* cl. 9.11.2.1 O TLV 3-n IEI=24 */ + MA_PDUSessionInfo maPDUSessionInfo optional, /* cl. 9.11.3.31A O TV 1 IEI=A Sep20 @sic R5s201387 Baseline Moving sic@ */ + ReleaseAssistanceInd releaseAssistanceInd optional /* cl. 9.11.3.46A O TV 1 IEI=F Sep20 @sic R5s201387 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (payloadContainerType) "FORCEOMIT(iei)"; + variant (payload) "FORCEOMIT(iei)"; + variant "TAG(pduSessionId, iei = '12'O; + oldPDUSessionId, iei = '59'O; + requestType, iei = '8'H; + s_NSSAI, iei = '22'O; + dnn, iei = '25'O; + additionalInfo, iei = '24'O; + maPDUSessionInfo, iei = 'A'H; + releaseAssistanceInd, iei = 'F'H)" + } + + type record NG_DL_NAS_TRANSPORT { /* 24.501 cl. 8.2.11 + Significance: dual + Direction: Network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + SpareHalfOctet spareHalfOctet2, /* cl. 9.5 M V 1/2 */ + PayloadContainerType payloadContainerType, /* cl. 9.11.3.40 M V 1/2 */ + PayloadContainer payload, /* cl. 9.11.3.39 M LV-E 3-65537 */ + NG_PDU_SessionId pduSessionId optional, /* cl. 9.11.3.41 C TV 2 IEI=12 */ + AdditionalInformation additionalInfo optional, /* cl. 9.11.2.1 O TLV 3-n IEI=24 */ + GMM_GSM_Cause gmmCause optional, /* cl. 9.11.3.2 O TV 2 IEI=58 */ + GPRS_Timer3 backOffTimerValue optional, /* cl. 9.11.2.5 O TLV 3 IEI=37 */ + GPRS_Timer3 lowerBoundTimerValue optional /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (payloadContainerType) "FORCEOMIT(iei)"; + variant (payload) "FORCEOMIT(iei)"; + variant "TAG(pduSessionId, iei = '12'O; + additionalInfo, iei = '24'O; + gmmCause, iei = '58'O; + backOffTimerValue, iei = '37'O; + lowerBoundTimerValue, iei = '3a'O)"; + } + + type record NG_DEREGISTRATION_REQUEST_MO { /* 24.501 cl. 8.2.12 (UE originating deregister) + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + NAS_KeySetIdentifier ngKSI, /* cl. 9.11.3.32 M V 1/2 */ + DeregisterType deregistrationType, /* cl. 9.11.3.20 M V 1/2 */ + NG_MobileIdentity ngMobileId /* cl. 9.11.3.4 M LV-E 6-n */ + } with { + variant "FIELDORDER(msb)"; + variant (ngKSI) "FORCEOMIT(iei)"; + variant (ngMobileId) "FORCEOMIT(iei)"; + } + + type record NG_DEREGISTRATION_ACCEPT { /* 24.501 cl. 8.2.13/15 (both directions) + Significance: dual + Direction: network to UE/ UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType /* cl. 9.7 M V 1 */ + } with { + variant "FIELDORDER(msb)"; + } + + type record NG_DEREGISTRATION_REQUEST_MT { /* 24.501 cl. 8.2.14 (UE terminated deregister) + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + SpareHalfOctet spareHalfOctet2, /* cl. 9.5 M V 1/2 */ + DeregisterType deregistrationType, /* cl. 9.11.3.20 M V 1/2 */ + GMM_GSM_Cause gmmCause optional, /* cl. 9.11.3.2 O TV 2 IEI=58 */ + GPRS_Timer2 t3346 optional, /* cl. 9.11.2.4 O TLV 3 IEI=5F */ + RejectedNSSAI rejectedNSSAI optional, /* cl. 9.11.3.46 O TLV 4-42 IEI=6D Sep20 @sic R5s201387 Baseline Moving sic@ */ + CAGInfoList cagInfoList optional, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ExtdRejectedNSSAI extdRejectedNSSAI optional, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + RegistrationWaitRange disasterReturnWaitRange optional, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + ExtdCAGInfoList extdCAGInfoList optional, /* cl. 9.11.3.86 O TLV 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + GPRS_Timer3 lowerBoundTimerValue optional, /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_TrackingAreaIdList forbidTAIList_Roaming optional, /* cl. 9.11.3.9 O TLV 9-114 IEI=1D Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_TrackingAreaIdList forbidTAIList_RegProvService optional /* cl. 9.11.3.9 O TLV 9-114 IEI=1E Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant "TAG(gmmCause, iei = '58'O; + t3346, iei = '5f'O; + rejectedNSSAI, iei = '6d'O; + cagInfoList, iei = '75'O; + extdRejectedNSSAI, iei = '68'O; + disasterReturnWaitRange, iei = '2c'O; + extdCAGInfoList, iei = '71'O; + lowerBoundTimerValue, iei = '3a'O; + forbidTAIList_Roaming, iei = '1d'O; + forbidTAIList_RegProvService, iei = '1e'O)"; + } + + type record NG_SERVICE_REQUEST { /* 24.501 cl. 8.2.16 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + B4_Type serviceType, /* cl. 9.11.3.50 M V 1/2 */ + NAS_KeySetIdentifier ngKSI, /* cl. 9.11.3.32 M V 1/2 */ + NG_MobileIdentity s_TMSI, /* cl. 9.11.3.4 M LV-E 8 */ + ULDataStatus ulDataStatus optional, /* cl. 9.11.2.57 O TLV 4-34 IEI=40 */ + PDU_SessionStatus pduSessionStatus optional, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + AllowedPDU_SessionStatus allowedPDUSessionStatus optional, /* cl. 9.11.3.13 O TLV 4-34 IEI=25 */ + NASMessageContainer nasMsg optional, /* cl. 9.11.3.33 O TLV-E 3-n IEI=71 Dec18 */ + UE_RequestType ueRequestType optional, /* cl. 9.11.3.76 O TLV 3 IEI=29 Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_PagingRestriction pagingRestrict optional /* cl. 9.11.3.77 O TLV 3-35 IEI=28 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (ngKSI) "FORCEOMIT(iei)"; + variant (s_TMSI) "FORCEOMIT(iei)"; + variant "TAG(ulDataStatus, iei = '40'O; + pduSessionStatus, iei = '50'O; + allowedPDUSessionStatus, iei = '25'O; + nasMsg, iei = '71'O; + ueRequestType, iei = '29'O; + pagingRestrict, iei = '28'O)"; + } + + type record NG_SERVICE_ACCEPT { /* 24.501 cl. 8.2.17 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + PDU_SessionStatus pduSessionStatus optional, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + PDU_SessionReactivationResult pduSessionReactivationResult optional, /* cl. 9.11.3.42 O TLV 4-32 IEI=26 */ + PDU_SessionReactivationError pduSessionReactResultError optional, /* cl. 9.11.3.43 O TLV-E 5-515 IEI=72 */ + EAP_Message eapMessage optional, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78*/ + GPRS_Timer2 t3448 optional, /* cl. 9.11.2.4 O TLV 3 IEI=6B Sep20 @sic R5s201387 Baseline Moving sic@ */ + NG_AddReqResult ngAddRequestResult optional, /* cl. 9.11.3.81 O TLV 3 IEI=34 Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_TrackingAreaIdList forbidTAIList_Roaming optional, /* cl. 9.11.3.9 O TLV 9-114 IEI=1D Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_TrackingAreaIdList forbidTAIList_RegProvService optional /* cl. 9.11.3.9 O TLV 9-114 IEI=1E Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant "TAG(pduSessionStatus, iei = '50'O; + pduSessionReactivationResult, iei = '26'O; + pduSessionReactResultError, iei = '72'O; + eapMessage, iei = '78'O; + t3448, iei = '6b'O; + ngAddRequestResult, iei = '34'O; + forbidTAIList_Roaming, iei = '1d'O; + forbidTAIList_RegProvService, iei = '1e'O)"; + } + + type record NG_SERVICE_REJECT { /* 24.501 cl. 8.2.18 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gmmCause, /* cl. 9.11.3.2 M V 1 */ + PDU_SessionStatus pduSessionStatus optional, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + GPRS_Timer2 t3346 optional, /* cl. 9.11.2.4 O TLV 3 IEI=5F */ + EAP_Message eapMessage optional, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + GPRS_Timer2 t3448 optional, /* cl. 9.11.2.4 O TLV 3 IEI=6B Sep20 @sic R5s201387 Baseline Moving sic@ */ + CAGInfoList cagInfoList optional, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + RegistrationWaitRange disasterReturnWaitRange optional, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + ExtdCAGInfoList extdCAGInfoList optional, /* cl. 9.11.3.86 O TLV 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + GPRS_Timer3 lowerBoundTimerValue optional, /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_TrackingAreaIdList forbidTAIList_Roaming optional, /* cl. 9.11.3.9 O TLV 9-114 IEI=1D Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_TrackingAreaIdList forbidTAIList_RegProvService optional /* cl. 9.11.3.9 O TLV 9-114 IEI=1E Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (gmmCause) "FORCEOMIT(iei)"; + variant "TAG(pduSessionStatus, iei = '50'O; + t3346, iei = '5f'O; + eapMessage, iei = '78'O; + t3448, iei = '6b'O; + cagInfoList, iei = '75'O; + disasterReturnWaitRange, iei = '2c'O; + extdCAGInfoList, iei = '71'O; + lowerBoundTimerValue, iei = '3a'O; + forbidTAIList_Roaming, iei = '1d'O; + forbidTAIList_RegProvService, iei = '1e'O)"; + } + + type record NG_CONFIGURATION_UPDATE_COMMAND { /* 24.501 cl. 8.2.19 + Significance: local + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + ConfigUpdateInd configUpdateInd optional, /* cl. 9.11.3.18 M TV 1 IEI=D */ + NG_MobileIdentity guti optional, /* cl. 9.11.3.4 O TLV 13 IEI=77 Dec18 */ + NG_TrackingAreaIdList taiList optional, /* cl. 9.11.3.9 O TLV 9-114 IEI=54 */ + NSSAI allowedNSSAI optional, /* cl. 9.11.3.37 O TLV 4-74 IEI=15 */ + ServiceAreaIdList saiList optional, /* cl. 9.11.3.49 O TLV 6-114 IEI=27 */ + NetworkName fullNetworkName optional, /* cl. 9.11.3.35 O TLV 3-? IEI=43 */ + NetworkName shortNetworkName optional, /* cl. 9.11.3.35 O TLV 3-? IEI=45 */ + TimeZone localTimeZone optional, /* cl. 9.11.3.52 O TV 2 IEI=46 */ + TimeZoneAndTime localTimeZoneAndTime optional, /* cl. 9.11.3.53 O TV 8 IEI=47 */ + DaylightSavingTime daylightSavingTime optional, /* cl. 9.11.3.19 O TLV 3 IEI=49 */ + LADN_Info ladnInfo optional, /* cl. 9.11.3.30 O TLV-E 3-1715 IEI=79 */ + MICO_Ind micoInd optional, /* cl. 9.11.3.31 O TLV 1 IEI=B */ + NetworkSlicingInd networkSlicingInd optional, /* cl. 9.11.3.36 O TV 1 IEI=9 */ + NSSAI configuredNSSAI optional, /* cl. 9.11.3.37 O TLV 4-146 IEI=31 */ + RejectedNSSAI rejectedNSSAI optional, /* cl. 9.11.3.46 O TLV 4-42 IEI=11 */ + OperatorAccessCatDefinitions operatorAccessCatDefs optional, /* cl. 9.11.3.38 O TLV-E 4-n IEI=76 Dec18 */ + SMSInd smsInd optional, /* cl. 9.10.3.50A O TV 1 IEI=F Dec18 */ + GPRS_Timer3 t3447Value optional, /* cl. 9.11.2.5 O TLV 3 IEI=6C Sep20 @sic R5s201387 Baseline Moving sic@ */ + CAGInfoList cagInfoList optional, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + UERadioCapId ueRadioCapabilityId optional, /* cl. 9.11.3.68 O TLV 3-n IEI=67 Sep20 @sic R5s201387 Baseline Moving sic@ */ + UERadioCapIdDeletion ueRadioCapIdDeletionInd optional, /* cl. 9.11.3.69 O TV 1 IEI=A Sep20 @sic R5s201387 Baseline Moving sic@ */ + RegistrationResult registrationResult optional, /* cl. 9.11.3.6 O TLV 3 IEI=44 Sep20 @sic R5s201387 Baseline Moving sic@ */ + TruncatedS_TMSIConfig truncatedS_TMSIConfig optional, /* cl. 9.11.3.70 O TLV 3 IEI=1B Sep20 @sic R5s201387 Baseline Moving sic@ */ + AddConfigInfo addConfigInfo optional, /* cl. 9.11.3.74 O TV 1 IEI=C Sep20 @sic R5s201387 Baseline Moving sic@ */ + ExtdRejectedNSSAI extdRejectedNSSAI optional, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ServiceLvlAAContainer serviceLvlAA optional, /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + NSSRG_Info nssrgInfo optional, /* cl. 9.11.3.82 O TLV-E 7-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + RegistrationWaitRange disasterRoamingWaitRange optional, /* cl. 9.11.3.84 O TLV 4 IEI=14 Sep22 @sic R5s221179 Baseline Moving sic@ */ + RegistrationWaitRange disasterReturnWaitRange optional, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + DisasterPLMNList disasterPLMNList optional, /* cl. 9.11.3.83 O TLV 2-n IEI=13 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ExtdCAGInfoList extdCAGInfoList optional, /* cl. 9.11.3.86 O TLV 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + PEIPS_AssistInfo updatedPEIPS_AssistInfo optional, /* cl. 9.11.3.80 O TLV 3-n IEI=1F Sep22 @sic R5s221179 Baseline Moving sic@ */ + NSAG_Info nsagInfo optional, /* cl. 9.11.3.87 O TLV 10-n IEI=73 Sep22 @sic R5s221179 Baseline Moving sic@ */ + PriorityInd priorityInd optional /* cl. 9.11.3.91 O TV 1 IEI=E- Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant "TAG(configUpdateInd, iei = 'D'H; + guti, iei = '77'O; + taiList, iei = '54'O; + allowedNSSAI, iei = '15'O; + saiList, iei = '27'O; + fullNetworkName, iei = '43'O; + shortNetworkName, iei = '45'O; + localTimeZone, iei = '46'O; + localTimeZoneAndTime, iei = '47'O; + daylightSavingTime, iei = '49'O; + ladnInfo, iei = '79'O; + micoInd, iei = 'B'H; + networkSlicingInd, iei = '9'H; + configuredNSSAI, iei = '31'O; + rejectedNSSAI, iei = '11'O; + operatorAccessCatDefs, iei = '76'O; + smsInd, iei = 'F'H; + t3447Value, iei = '6C'O; + cagInfoList, iei = '75'O; + ueRadioCapabilityId, iei = '67'O; + ueRadioCapIdDeletionInd, iei = 'A'H; + truncatedS_TMSIConfig, iei = '1B'O; + addConfigInfo, iei = 'C'H; + extdRejectedNSSAI, iei = '68'O; + serviceLvlAA, iei = '72'O; + nssrgInfo, iei = '70'O; + disasterRoamingWaitRange, iei = '14'O; + disasterReturnWaitRange, iei = '2C'O; + disasterPLMNList, iei = '13'O; + extdCAGInfoList, iei = '71'O; + updatedPEIPS_AssistInfo, iei = '1F'O; + nsagInfo, iei = '73'O; + priorityInd, iei = 'E'H)"; + } + + type record NG_CONFIGURATION_UPDATE_COMPLETE { /* 24.301 cl. 8.2.20 + Significance: local + Direction: UE to Network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType /* cl. 9.7 M V 1 */ + } with { + variant "FIELDORDER(msb)"; + } + + type record NG_IDENTITY_REQUEST { /* 24.501 cl. 8.2.21 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + SpareHalfOctet spareHalfOctet2, /* cl. 9.5 M V 1/2 */ + IdentityType identityType /* cl. 9.11.3.3 M V 1/2 */ + } with { + variant "FIELDORDER(msb)"; + } + + type record NG_IDENTITY_RESPONSE { /* 24.501 cl. 8.2.22 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + NG_MobileIdentity ngMobileId /* cl. 9.11.3.4 M LV-E 3-n */ + } with { + variant "FIELDORDER(msb)"; + variant (ngMobileId) "FORCEOMIT(iei)"; + } + + type record NG_NOTIFICATION { /* 24.501 cl. 8.2.23 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + SpareHalfOctet spareHalfOctet2, /* cl. 9.5 M V 1/2 */ + AccessType accessType /* cl. 9.11.3.11 M V 1/2 */ + } with { + variant "FIELDORDER(msb)"; + variant (accessType) "FORCEOMIT(iei)"; + } + + type record NG_NOTIFICATION_RESPONSE { /* 24.501 cl. 8.2.24 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + PDU_SessionStatus pduSessionStatus optional /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + } with { + variant "FIELDORDER(msb)"; + variant "TAG(pduSessionStatus, iei = '50'O)"; + } + + type record NG_SECURITY_MODE_COMMAND { /* 24.501 cl. 8.2.25 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + NG_NAS_SecurityAlgorithms nasSecurityAlgorithms, /* cl. 9.11.3.34 M V 1 */ + SpareHalfOctet spareHalfOctet2, /* cl. 9.5 M V 1/2 */ + NAS_KeySetIdentifier ngNasKSI, /* cl. 9.11.3.32 M V 1/2 */ + NG_UE_SecurityCapability ueSecurityCapability, /* cl. 9.11.3.54 M LV 3-9 */ + IMEISV_Request imeisvRequest optional, /* cl. 9.11.3.28 O TV 1 IEI=E */ + NAS_SecurityAlgorithms epsSecurityAlgorithms optional, /* cl. 9.11.3.25 O TV 2 IEI=57 */ + AdditionalSecurityInfo add5GSecurityInfo optional, /* cl. 9.11.3.12 O TLV 3 IEI=36 */ + EAP_Message eapMessage optional, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + ABBA abba optional, /* cl. 9.11.3.10 O TLV 4-n IEI=38 Dec18 */ + S1_UE_SecurityCapability replayedUESecurityCap optional /* cl. 9.11.3.48A O TLV 4-7 IEI=19 Dec18 @sic R5s190421 sic@*/ + } with { + variant "FIELDORDER(msb)"; + variant (nasSecurityAlgorithms) "FORCEOMIT(iei)"; + variant (ngNasKSI) "FORCEOMIT(iei)"; + variant (ueSecurityCapability) "FORCEOMIT(iei)"; + variant "TAG(imeisvRequest, iei = 'E'H; + epsSecurityAlgorithms, iei = '57'O; + add5GSecurityInfo, iei = '36'O; + eapMessage, iei = '78'O; + abba, iei = '38'O; + replayedUESecurityCap, iei = '19'O)"; + } + + type record NG_SECURITY_MODE_COMPLETE { /* 24.501 cl. 8.2.26 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + NG_MobileIdentity imeisv optional, /* cl. 9.11.3.4 O TLV-E 11 IEI=77 Dec18 */ + NASMessageContainer nasMsg optional, /* cl. 9.11.3.33 O TLV-E 4-n IEI=71 */ + NG_MobileIdentity nonIMEISV_PEI optional /* cl. 9.11.3.4 O TLV-E 7-n IEI=78 Sep20 @sic R5s201387 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant "TAG(imeisv, iei = '77'O; + nasMsg, iei = '71'O; + nonIMEISV_PEI, iei = '78'O)"; + } + + type record NG_SECURITY_MODE_REJECT { /* 24.501 cl. 8.2.27 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gmmCause /* cl. 9.11.3.2 M V 1 */ + } with { + variant "FIELDORDER(msb)"; + variant (gmmCause) "FORCEOMIT(iei)"; + } + + type record NG_SECURITY_PROTECTED_NAS_MESSAGE { /* 24.501 cl. 8.2.28 + Significance: dual + Direction: both */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageAuthenticationCode messageAuthenticationCode, /* cl. 9.8 M V 4 */ + NAS_SequenceNumber sequenceNumber, /* cl. 9.10 M V 1 */ + NG_NAS_Message plainNASMessage /* cl. 9.9 M V 3-n */ + } with { + variant "FIELDORDER(msb)"; + } + + + type record NG_GMM_STATUS { /* 24.501 cl. 8.2.29 + Significance: dual + Direction: both */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gmmCause /* cl. 9.11.3.2 M V 1 */ + } with { + variant "FIELDORDER(msb)"; + variant (gmmCause) "FORCEOMIT(iei)"; + } + + type record NG_CP_SERVICE_REQUEST { /* 24.501 cl. 8.2.30 @sic R5s201387 Baseline Moving sic@ + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + NAS_KeySetIdentifier ngKSI, /* cl. 9.11.3.32 M V 1/2 */ + CP_ServiceType cpServiceType, /* cl. 9.11.3.18D M V 1/2 */ + CIoTSmallDataRxdString cIoTSmallDataContainer optional, /* cl. 9.11.3.18B O TLV 4-257 IEI=6F This is received as an encoded octetstring */ + PayloadContainerType payloadContainerType optional, /* cl. 9.11.3.40 O TV 1 IEI=8 */ + PayloadContainer payload optional, /* cl. 9.11.3.39 O TLV-E 4-65538 IEI=7B */ + NG_PDU_SessionId pduSessionId optional, /* cl. 9.11.3.41 C TV 2 IEI=12 */ + PDU_SessionStatus pduSessionStatus optional, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + ReleaseAssistanceInd releaseAssistanceInd optional, /* cl. 9.11.3.46A O TV 1 IEI=F */ + ULDataStatus ulDataStatus optional, /* cl. 9.11.2.57 O TLV 4-34 IEI=40 */ + NASMessageContainer nasMsg optional, /* cl. 9.11.3.33 O TLV-E 3-n IEI=71 */ + AdditionalInformation additionalInfo optional, /* cl. 9.11.2.1 O TLV 3-n IEI=24 */ + AllowedPDU_SessionStatus allowedPDUSessionStatus optional, /* cl. 9.11.3.13 O TLV 4-34 IEI=25 Sep22 @sic R5s221179 Baseline Moving sic@ */ + UE_RequestType ueRequestType optional, /* cl. 9.11.3.76 O TLV 3 IEI=29 Sep22 @sic R5s221179 Baseline Moving sic@ */ + NG_PagingRestriction pagingRestrict optional /* cl. 9.11.3.77 O TLV 3-35 IEI=28 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (ngKSI) "FORCEOMIT(iei)"; + variant (cpServiceType) "FORCEOMIT(iei)"; + variant "TAG(cIoTSmallDataContainer, iei = '6f'O; + payloadContainerType, iei = '8'H; + payload, iei = '7B'O; + pduSessionId, iei = '12'O; + pduSessionStatus, iei = '50'O; + releaseAssistanceInd, iei = 'F'H; + ulDataStatus, iei = '40'O; + nasMsg, iei = '71'O; + additionalInfo, iei = '24'O; + allowedPDUSessionStatus, iei = '25'O; + ueRequestType, iei = '29'O; + pagingRestrict, iei = '28'O; + )"; + } + + type record NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMMAND { /* 24.501 cl. 8.2.31 @sic R5s201387 Baseline Moving sic@ + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + S_NSSAI_LV sNSSAI, /* cl. 9.11.2.8 M LV 2-5 @sic R5s221179 Baseline Moving sic@ */ + EAP_Message eapMessage /* cl. 9.11.2.2 M LV-E 6-1502 */ + } with { + variant "FIELDORDER(msb)"; + variant (eapMessage) "FORCEOMIT(iei)"; + } + + type record NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMPLETE { /* 24.501 cl. 8.2.32 @sic R5s201387 Baseline Moving sic@ + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + S_NSSAI_LV sNSSAI, /* cl. 9.11.2.8 M LV 2-5 @sic R5s221179 Baseline Moving sic@ */ + EAP_Message eapMessage /* cl. 9.11.2.2 M LV-E 6-1502 */ + } with { + variant "FIELDORDER(msb)"; + variant (eapMessage) "FORCEOMIT(iei)"; + } + + type record NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_RESULT { /* 24.501 cl. 8.2.33 @sic R5s201387 Baseline Moving sic@ + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + SpareHalfOctet spareHalfOctet, /* cl. 9.5 M V 1/2 */ + SecurityHeaderType securityHeaderType, /* cl. 9.3 M V 1/2 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + S_NSSAI_LV sNSSAI, /* cl. 9.11.2.8 M LV 2-5 @sic R5s221179 Baseline Moving sic@ */ + EAP_Message eapMessage /* cl. 9.11.2.2 M LV-E 6-1502 */ + } with { + variant "FIELDORDER(msb)"; + variant (eapMessage) "FORCEOMIT(iei)"; + } + + //---------------------------------------------------------------------------- + // NG session management messages (24.501 cl. 8.3) + //---------------------------------------------------------------------------- + + type record NG_PDU_SESSION_ESTABLISHMENT_REQUEST { /* 24.501 cl. 8.3.1 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + IntegrityProtMaxDataRate integrityProtMaxDataRate, /* cl. 9.11.4.7 M V 2 Dec18 */ + PDU_SessionType pduSessionType optional, /* cl. 9.11.4.11 O TV 1 IEI=9 */ + SSC_Mode sscMode optional, /* cl. 9.11.4.16 O TV 1 IEI=A */ + NG_UE_SM_Cap smCapability optional, /* cl. 9.11.4.1 O TLV 3-15 IEI=28 */ + MaxNumPacketFilters maxNumPacketFilters optional, /* c. 9.11.4.9 O TV 3 IEI=55 */ + AlwaysOnPDUSessionReq alwaysOnPDUSessionReq optional, /* c. 9.11.4.4 O TV 1 IEI=B */ + SM_PDU_DN_RequestContainer smPDU_RequestContainer optional, /* cl. 9.11.4.15 O TLV 3-255 IEI=39 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=7B */ + IPHeaderCompressionConfig ipHeaderCompressionConfig optional, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + DS_TT_EthernetPortMACAddr ds_TT_EthernetPortMACAddr optional, /* cl. 9.11.4.25 O TLV 8 IEI=6E Sep20 @sic R5s201387 Baseline Moving sic@ */ + UE_DS_TT_ResidenceTime ueDS_TT_ResidenceTime optional, /* cl. 9.11.4.26 O TLV 10 IEI=6F Sep20 @sic R5s201387 Baseline Moving sic@ */ + PortManagementInfoContainer portManagementInfoContainer optional, /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=74 Sep20 @sic R5s201387, R5s210444 Baseline Moving sic@ */ + EthernetHeaderCompressConfig ethernetHeaderCompressConfig optional, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + PDU_Address suggestedInterfaceId optional, /* cl. 9.11.4.10 O TLV 11 IEI=29 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ServiceLvlAAContainer serviceLvlAA optional, /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + RequestedMBSContainer requestedMBS optional, /* cl. 9.11.4.30 O TLV-E 8-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + PDUSessionPairId pduSessionPairId optional, /* cl. 9.11.4.32 O TLV 3 IEI=34 Sep22 @sic R5s221179 Baseline Moving sic@ */ + RSN rsn optional /* cl. 9.11.4.33 O TLV 3 IEI=35 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant (integrityProtMaxDataRate) "FORCEOMIT(iei)"; + variant "TAG(pduSessionType, iei = '9'H; + sscMode, iei = 'A'H; + smCapability, iei = '28'O; + maxNumPacketFilters, iei = '55'O; + alwaysOnPDUSessionReq, iei = 'B'H; + smPDU_RequestContainer, iei = '39'O; + extdProtocolConfigurationOptions, iei = '7B'O; + ipHeaderCompressionConfig, iei = '66'O; + ds_TT_EthernetPortMACAddr, iei = '6E'O; + ueDS_TT_ResidenceTime, iei = '6F'O; + portManagementInfoContainer, iei = '74'O; + ethernetHeaderCompressConfig, iei = '1F'O; + suggestedInterfaceId, iei = '29'O; + serviceLvlAA, iei = '72'O; + requestedMBS, iei = '70'O; + pduSessionPairId, iei = '34'O; + rsn, iei = '35'O; + )"; + } + + type record NG_PDU_SESSION_ESTABLISHMENT_ACCEPT { /* 24.501 cl. 8.3.2 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + SSC_Mode sscMode, /* cl. 9.11.4.16 M V 1/2 */ + PDU_SessionType pduSessionType, /* cl. 9.11.4.11 M V 1/2 */ + QoS_Rules authorizedQoSRules, /* cl. 9.11.4.13 M LV-E 7-65538 */ + Session_AMBR sessionAMBR, /* cl. 9.11.4.14 M LV ? */ + GMM_GSM_Cause gsmCause optional, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + PDU_Address pduAddress optional, /* cl. 9.11.4.10 O TLV 7-31 IEI=29 */ + GPRS_Timer rqTimerValue optional, /* cl. 9.11.2.3 O TLV 2 IEI=56 */ + S_NSSAI_Type s_NSSAI optional, /* cl. 9.11.2.8 O TLV 3-10 IEI=22 */ + AlwaysOnPDUSessionInd alwaysOnPDUSessionInd optional, /* c. 9.11.4.3 O TV 1 IEI=8 */ + MappedEPSBearerContexts mappedEPSContexts optional, /* cl. 9.11.4.8 O TLV-E 7-65538 IEI=75 */ + EAP_Message eapMessage optional, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + QoSFlowDescr authorizedQoSFlowDescr optional, /* cl. 9.11.4.12 O TLV-E 6-65538 IEI=79 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=7B */ + DNN dnn optional, /* cl. 9.11.2.1A O TLV 3-102 IEI=25 Dec18 */ + NGSM_NetworkFeatureSupport ngs_NetworkFeatureSupport optional, /* cl. 9.11.4.18 O TLV 3-15 IEI=17 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ServingPLMNRateControl servingPLMNRateControl optional, /* cl. 9.11.4.20 O TLV 4 IEI=18 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ATSSSContainer atsssContainer optional, /* cl. 9.11.4.22 O TLV-E 3-65538 IEI=77 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ControlPlaneInd controlPlaneOnlyIndication optional, /* cl. 9.11.4.23 O TV 1 IEI=C Sep20 @sic R5s201387 Baseline Moving sic@ */ + IPHeaderCompressionConfig ipHeaderCompressionConfig optional, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + EthernetHeaderCompressConfig ethernetHeaderCompressConfig optional, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + ServiceLvlAAContainer serviceLvlAA optional, /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ReceivedMBSContainer receivedMBS optional /* cl. 9.11.4.31 O TLV-E 9-65538 IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant (sscMode) "FORCEOMIT(iei)"; + variant (pduSessionType) "FORCEOMIT(iei)"; + variant (authorizedQoSRules) "FORCEOMIT(iei)"; + variant (sessionAMBR) "FORCEOMIT(iei)"; + variant "TAG(gsmCause, iei = '59'O; + pduAddress, iei = '29'O; + rqTimerValue, iei = '56'O; + s_NSSAI, iei = '22'O; + alwaysOnPDUSessionInd, iei = '8'H; + mappedEPSContexts, iei = '75'O; + eapMessage, iei = '78'O; + authorizedQoSFlowDescr, iei = '79'O; + extdProtocolConfigurationOptions, iei = '7b'O; + dnn, iei = '25'O; + ngs_NetworkFeatureSupport, iei = '27'O; + servingPLMNRateControl, iei = '18'O; + atsssContainer, iei = '77'O; + controlPlaneOnlyIndication, iei = 'C'H; + ipHeaderCompressionConfig, iei = '66'O; + ethernetHeaderCompressConfig, iei = '1f'O; + serviceLvlAA, iei = '72'O; + receivedMBS, iei = '71'O)"; + } + + type record NG_PDU_SESSION_ESTABLISHMENT_REJECT { /* 24.501 cl. 8.3.3 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gsmCause, /* cl. 9.11.4.2 M V 1 */ + GPRS_Timer3 backOffTimerValue optional, /* cl. 9.11.2.5 O TLV 3 IEI=37 */ + AllowedSSCMode allowedSSCMode optional, /* cl. 9.11.4.5 O TV 1 IEI=F */ + EAP_Message eapMessage optional, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + NGSM_CongestionReattemptInd ngsmCongestionReattemptInd optional, /* cl. 9.11.4.21 O TLV 3 IEI=61 Sep20 @sic R5s201387, R5s210444 Baseline Moving sic@ */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=7B */ + ReAttemptIndicator reattemptInd optional, /* cl. 9.11.4.17 O TLV 3 IEI=1D Sep20 @sic R5s201387 Baseline Moving sic@ */ + ServiceLvlAAContainer serviceLvlAA optional /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant (gsmCause) "FORCEOMIT(iei)"; + variant "TAG(backOffTimerValue, iei = '37'O; + allowedSSCMode, iei = 'F'H; + eapMessage, iei = '78'O; + ngsmCongestionReattemptInd, iei = '61'O; + extdProtocolConfigurationOptions, iei = '7b'O; + reattemptInd, iei = '1d'O; + serviceLvlAA, iei = '72'O)"; + } + + type record NG_PDU_SESSION_AUTHENTICATION_COMMAND { /* 24.501 cl. 8.3.4 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + EAP_Message eapMessage, /* cl. 9.11.2.2 M LV-E 6-1502 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant (eapMessage) "FORCEOMIT(iei)"; + variant "TAG(extdProtocolConfigurationOptions, iei = '7b'O)"; + } + + type record NG_PDU_SESSION_AUTHENTICATION_COMPLETE { /* 24.501 cl. 8.3.5 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + EAP_Message eapMessage, /* cl. 9.11.2.2 M LV-E 6-1502 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant (eapMessage) "FORCEOMIT(iei)"; + variant "TAG(extdProtocolConfigurationOptions, iei = '7b'O)"; + } + + type record NG_PDU_SESSION_AUTHENTICATION_RESULT { /* 24.501 cl. 8.3.6 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + EAP_Message eapMessage optional, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant "TAG(eapMessage, iei = '78'O; + extdProtocolConfigurationOptions, iei = '7b'O)"; + } + + type record NG_PDU_SESSION_MODIFICATION_REQUEST { /* 24.501 cl. 8.3.7 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + NG_UE_SM_Cap smCapability optional, /* cl. 9.11.4.1 O TLV 3-15 IEI=28 */ + GMM_GSM_Cause gsmCause optional, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + MaxNumPacketFilters maxNumPacketFilters optional, /* c. 9.11.4.9 O TV 3 IEI=55 */ + AlwaysOnPDUSessionReq alwaysOnPDUSessionReq optional, /* c. 9.11.4.4 O TV 1 IEI=B */ + IntegrityProtMaxDataRate integrityProtMaxDataRate optional, /* c. 9.11.4.7 O TV 2 IEI=13 */ + QoS_Rules requestedQoSRules optional, /* cl. 9.11.4.13 O TLV-E 7-65538 IEI=7A */ + QoSFlowDescr requestedQoSFlowDescr optional, /* cl. 9.11.4.12 O TLV-E 5-65538 IEI=79 */ + MappedEPSBearerContexts mappedEPSbearerContexts optional, /* cl. 9.11.4.8 O TLV-E 7-65538 IEI=75 Dec18 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional,/* cl. 9.11.4.6 O TLV-E 4-65538 IEI=7B */ + PortManagementInfoContainer portManagementInfoContainer optional, /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=74 Sep20 @sic R5s201387, R5s210444 Baseline Moving sic@ */ + IPHeaderCompressionConfig ipHeaderCompressionConfig optional, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + EthernetHeaderCompressConfig ethernetHeaderCompressConfig optional, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + RequestedMBSContainer requestedMBS optional, /* cl. 9.11.4.30 O TLV-E 8-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ServiceLvlAAContainer serviceLvlAA optional /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant "TAG(smCapability, iei = '28'O; + gsmCause, iei = '59'O; + maxNumPacketFilters, iei = '55'O; + alwaysOnPDUSessionReq, iei = 'B'H; + integrityProtMaxDataRate, iei = '13'O; + requestedQoSRules, iei = '7A'O; + requestedQoSFlowDescr, iei = '79'O; + mappedEPSbearerContexts, iei = '75'O; + extdProtocolConfigurationOptions, iei = '7B'O; + portManagementInfoContainer, iei = '74'O; + ipHeaderCompressionConfig, iei = '66'O; + ethernetHeaderCompressConfig, iei = '1F'O; + requestedMBS, iei = '70'O; + serviceLvlAA, iei = '72'O; + )"; + } + + type record NG_PDU_SESSION_MODIFICATION_REJECT { /* 24.501 cl. 8.3.8 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gsmCause, /* cl. 9.11.4.2 M V 1 */ + GPRS_Timer3 backOffTimerValue optional, /* cl. 9.11.2.5 O TLV 3 IEI=37 */ + NGSM_CongestionReattemptInd ngsmCongestionReattemptInd optional, /* cl. 9.11.4.21 O TLV 3 IEI=61 Sep20 @sic R5s201387, R5s210444 Baseline Moving sic@ */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + ReAttemptIndicator reattemptInd optional /* cl. 9.11.4.17 O TLV 3 IEI=1D Sep20 @sic R5s201387 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant (gsmCause) "FORCEOMIT(iei)"; + variant "TAG(backOffTimerValue, iei = '37'O; + ngsmCongestionReattemptInd, iei = '61'O; + extdProtocolConfigurationOptions, iei = '7b'O; + reattemptInd, iei = '1d'O; + )"; + } + + type record NG_PDU_SESSION_MODIFICATION_COMMAND { /* 24.501 cl. 8.3.9 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gsmCause optional, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + Session_AMBR sessionAMBR optional, /* cl. 9.11.4.14 O TLV 8 IEI=2A */ + GPRS_Timer rqTimerValue optional, /* cl. 9.11.2.3 O TV 2 IEI=56 */ + AlwaysOnPDUSessionInd alwaysOnPDUSessionInd optional, /* c. 9.11.4.3 O TV 1 IEI=8 */ + QoS_Rules authorizedQoSRules optional, /* cl. 9.11.4.13 O TLV-E 7-65538 IEI=7A */ + MappedEPSBearerContexts mappedEPSContexts optional, /* cl. 9.11.4.8 O TLV-E 7-65538 IEI=7F or 75 */ + QoSFlowDescr authorizedQoSFlowDescr optional, /* cl. 9.11.4.12 O TLV-E 6-65538 IEI=79 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=7B */ + ATSSSContainer atsssContainer optional, /* cl. 9.11.4.22 O TLV-E 3-65538 IEI=77 Sep20 @sic R5s201387 Baseline Moving sic@ */ + IPHeaderCompressionConfig ipHeaderCompressionConfig optional, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + PortManagementInfoContainer portManagementInfoContainer optional, /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=74 Sep20 @sic R5s201387, R5s210444 Baseline Moving sic@ */ + ServingPLMNRateControl servingPLMNRateControl optional, /* cl. 9.11.4.20 O TLV 4 IEI=1E Sep20 @sic R5s201387 Baseline Moving sic@ */ + EthernetHeaderCompressConfig ethernetHeaderCompressConfig optional, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + ReceivedMBSContainer receivedMBS optional, /* cl. 9.11.4.31 O TLV-E 9-65538 IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ServiceLvlAAContainer serviceLvlAA optional /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { // Check code for mappedEPSContexts: ETSI TS 124 501 V16.14.0 (2023-09) Table 8.3.7.1.1: PDU SESSION MODIFICATION REQUEST message content + // Check code for mappedEPSContexts: ETSI TS 124 501 V16.14.0 (2023-09) Table 8.3.7.1.1 note + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant "TAG(gsmCause, iei = '59'O; + sessionAMBR, iei = '2A'O; + rqTimerValue, iei = '56'O; + alwaysOnPDUSessionInd, iei = '8'H; + authorizedQoSRules, iei = '7A'O; + mappedEPSContexts, iei = '75'O; + authorizedQoSFlowDescr, iei = '79'O; + extdProtocolConfigurationOptions, iei = '7B'O; + atsssContainer, iei = '77'O; + ipHeaderCompressionConfig, iei = '66'O; + portManagementInfoContainer, iei = '74'O; + servingPLMNRateControl, iei = '1E'O; + ethernetHeaderCompressConfig, iei = '1F'O; + receivedMBS, iei = '71'O; + serviceLvlAA, iei = '72'O; + )"; + } + + type record NG_PDU_SESSION_MODIFICATION_COMPLETE { /* 24.501 cl. 8.3.10 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional,/* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0 @sic R5s190543 sic@*/ + PortManagementInfoContainer portManagementInfoContainer optional /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=74 Sep20 @sic R5s201387, R5s210444 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant "TAG(extdProtocolConfigurationOptions, iei = '7B'O; + portManagementInfoContainer, iei = '74'O; + )"; + } + + type record NG_PDU_SESSION_MODIFICATION_COMMAND_REJECT { /* 24.501 cl. 8.3.11 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gsmCause, /* cl. 9.11.4.2 M V 1 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=7B */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant (gsmCause) "FORCEOMIT(iei)"; + variant "TAG(extdProtocolConfigurationOptions, iei = '7B'O)"; + } + + type record NG_PDU_SESSION_RELEASE_REQUEST { /* 24.501 cl. 8.3.12 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gsmCause optional, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant "TAG(gsmCause, iei = '59'O; + extdProtocolConfigurationOptions, iei = '7b'O)"; + } + + type record NG_PDU_SESSION_RELEASE_REJECT { /* 24.501 cl. 8.3.13 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gsmCause, /* cl. 9.11.4.2 M V 1 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } with { + variant "FIELDORDER(msb)"; + variant (gsmCause) "FORCEOMIT(iei)"; + variant "TAG(extdProtocolConfigurationOptions, iei = '7b'O)"; + } + + type record NG_PDU_SESSION_RELEASE_COMMAND { /* 24.501 cl. 8.3.14 + Significance: dual + Direction: network to UE */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gsmCause, /* cl. 9.11.4.2 M V 1 */ + GPRS_Timer3 backOffTimerValue optional, /* cl. 9.11.2.5 O TLV 3 IEI=37 */ + EAP_Message eapMessage optional, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + NGSM_CongestionReattemptInd ngsmCongestionReattemptInd optional, /* cl. 9.11.4.2A O TLV 3 IEI=61 Jun19 @sic R5s190543 sic@ */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + AccessType accessType optional, /* cl. 9.11.2.1A O TV 1 IEI=D Sep20 @sic R5s201387 Baseline Moving sic@ */ + ServiceLvlAAContainer serviceLvlAA optional /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant (gsmCause) "FORCEOMIT(iei)"; + variant "TAG(backOffTimerValue, iei = '37'O; + eapMessage, iei = '78'O; + ngsmCongestionReattemptInd, iei = '61'O; + extdProtocolConfigurationOptions, iei = '7B'O; + accessType, iei = 'D'H; + serviceLvlAA, iei = '72'O; + )"; + } + + type record NG_PDU_SESSION_RELEASE_COMPLETE { /* 24.501 cl. 8.3.15 + Significance: dual + Direction: UE to network */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gsmCause optional, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + ExtdProtocolConfigOptions extdProtocolConfigurationOptions optional /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant "TAG(gsmCause, iei = '59'O; + extdProtocolConfigurationOptions, iei = '7b'O)"; + } + + type record NG_GSM_STATUS { /* 24.501 cl. 8.3.16 + Significance: dual + Direction: both */ + ExtdProtocolDiscriminator protocolDiscriminator, /* cl. 9.2 M V 1 */ + NG_PDU_SessionId pduSessionId, /* cl. 9.4 M V 1 */ + ProcedureTransactionIdentifier procedureTransactionIdentifier, /* cl. 9.6 M V 1 */ + MessageType messageType, /* cl. 9.7 M V 1 */ + GMM_GSM_Cause gsmCause /* cl. 9.11.4.2 M V 1 */ + } with { + variant "FIELDORDER(msb)"; + variant (pduSessionId) "FORCEOMIT(iei)"; + variant (gsmCause) "FORCEOMIT(iei)"; + } + + //---------------------------------------------------------------------------- + // NG Mobility Management (GMM) information elements (24.501 cl. 9.11.3) + //---------------------------------------------------------------------------- + + type record DNN { /* 24.501 cl. 9.11.2.1B */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + octetstring dnnValue + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (dnnValue)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record EAP_Message { /* 24.501 cl. 9.11.2.2 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type6Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + octetstring eapMsg /* RFC 5448, RFC 4187 EAP_Message_Type will be encoded in NAS Emulator */ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (eapMsg)"; + variant (iel) "BYTEORDER(last)"; + variant (eapMsg) "BYTEORDER(last)"; + } + + type record S_NSSAI_Type { // 24.501 cl. 9.11.2.8 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + S_NSSAI_LV lvPart /* separated definition into TLV, LV and V parts Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + }; + + type record S_NSSAI_LV { // 24.501 cl. 9.11.2.8 + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + S_NSSAI_V vPart + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (vPart)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record S_NSSAI_V { // 24.501 cl. 9.11.2.8 + O1_Type sst, + O3_Type sd optional, + O1_Type mappedSST optional, + O3_Type mappedSD optional + } with { + variant "FIELDORDER(msb)"; + }; + + type union ServiceLvlAAParam { + SL_AA_DeviceId id, + SL_AA_ServerAddr serverAddress, + SL_AA_Response response, + SL_AA_PayloadType payloadType, + SL_AA_Payload payload, + SL_AA_PendingInd pendingInd, + SL_AA_StatusInd statusInd // @sic R5s230533 sic@ + } with { + variant ""; + }; + + type record of ServiceLvlAAParam ServiceLvlAAParamList; + + type record ServiceLvlAAContainer { /* 24.501 cl. 9.11.2.10 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type6Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + ServiceLvlAAParamList contents + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (contents)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record SL_AA_DeviceId { /* 24.501 cl. 9.11.2.11 */ + IEI8_Type iei ('10'O), + Type4Length_Type iel, + octetstring id + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (id)"; + variant (iel) "BYTEORDER(last)"; + variant (id) "BYTEORDER(last)"; + }; + + type record SL_AA_ServerAddr { /* 24.501 cl. 9.11.2.12 */ + IEI8_Type iei ('20'O), + Type4Length_Type iel, + O1_Type addrType, + octetstring addr + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (addrType, addr)"; + variant (iel) "BYTEORDER(last)"; + variant (addr) "BYTEORDER(last)"; + }; + + type record SL_AA_Response { /* 24.501 cl. 9.11.2.14 */ + IEI8_Type iei ('30'O), + Type4Length_Type iel, + B4_Type spare, + B2_Type c2ar, + B2_Type slar + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare, c2ar, slar)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record SL_AA_PayloadType { /* 24.501 cl. 9.11.2.15 */ + IEI8_Type iei ('40'O), + Type4Length_Type iel, + O1_Type payloadType + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (payloadType)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record SL_AA_Payload { /* 24.501 cl. 9.11.2.13 */ + IEI8_Type iei ('70'O), + Type6Length_Type iel, + octetstring payload + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (payload)"; + variant (iel) "BYTEORDER(last)"; + variant (payload) "BYTEORDER(last)"; + }; + + type record SL_AA_PendingInd { /* 24.501 cl. 9.11.2.17 */ + IEI4_Type iei ('A'H), + B3_Type spare, + B1_Type slapi + } with { + variant "FIELDORDER(msb)"; + }; + + type record SL_AA_StatusInd { /* 24.501 cl. 9.11.2.18 @sic R5s230533 sic@ */ + IEI8_Type iei, // Jun23 version specifes IEI of 'B'H, but the IEI is defined as 1 octet. + Type4Length_Type iel, + B7_Type spare, + B1_Type uas + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare, uas)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NG_GMM_Cap { /* 24.501 cl. 9.11.3.1 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B1_Type sgc, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B1_Type ngIPHC_CP_CIoT, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B1_Type n3Data, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B1_Type ng_CP_CIoT, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B1_Type restrictEC, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B1_Type lpp, /* Dec18 */ + B1_Type hoAttach, + B1_Type s1Cap, + B1_Type racs optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type nssaa optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type ngLCS optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type v2xNPC5 optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type v2xEPC5 optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type v2x optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type ng_UP_CIoT optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type ngSRVCC optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type ngProSeL2relay optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type ngProSe_dc optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type ngProSe_dd optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type erNSSAI optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type ngEHC_CP_CIoT optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type multipleUP optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type wusa optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type cag optional, /* Sep20 @sic R5s201387 Baseline Moving, R5s201526 sic@ */ + B1_Type pr optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type rpr optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type piv optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type ncr optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type nrPSSI optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type ngProSeL3rmt optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type ngProSeL2rmt optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type ngProSeL3relay optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type mpsiu optional, /* Jun23 @sic R5s230533 sic@ */ + B1_Type uas optional, /* Jun23 @sic R5s230533 sic@ */ + B1_Type nsag optional, /* Jun23 @sic R5s230533 sic@ */ + B1_Type exCAG optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type ssnpnsi optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type eventNotification optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type mint optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type nssrg optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B6_Type spareBits optional, /* Jun23 @sic R5s230533 sic@ */ + B1_Type rcman optional, /* Jun23 @sic R5s230533 sic@ */ + B1_Type rcmap optional, /* Jun23 @sic R5s230533 sic@ */ + octetstring spare length (1..7) optional // @sic R5w190307, R5s230533 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(sgc, ngIPHC_CP_CIoT, n3Data, ng_CP_CIoT, restrictEC, lpp, hoAttach, s1Cap, racs, nssaa, ngLCS, v2xNPC5, v2xEPC5, v2x, ng_UP_CIoT, ngSRVCC, ngProSeL2relay, ngProSe_dc, ngProSe_dd, erNSSAI, ngEHC_CP_CIoT, multipleUP, wusa, cag, pr, rpr, piv, ncr, nrPSSI, ngProSeL3rmt, ngProSeL2rmt, ngProSeL3relay, mpsiu, uas, nsag, exCAG, ssnpnsi, eventNotification, mint, nssrg, spareBits, rcman, rcmap, spare)"; + variant (iel) "BYTEORDER(last)"; + variant (spare) "BYTEORDER(last)"; + }; + + type record GMM_GSM_Cause { /* 24.501 cl. 9.11.3.2, 9.11.4.2 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + NAS_CauseValue_Type causeValue + } with { + variant "FIELDORDER(msb)"; + }; + + type record NGSM_CongestionReattemptInd { /* 24.501 cl. 9.11.3.2, 9.11.4.21 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B6_Type spareBits, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type catbo, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type abo + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(spareBits, catbo, abo)"; + variant (iel) "BYTEORDER(last)"; + }; + + type DRXParamCommon NG_DRXparameter; // 24.501 cl. 9.11.3.2A + + type DRXParamCommon NB_N1ModeDRXParams; // 24.501 cl. 9.11.3.73 + + type record NG_MobileIdentity { // 24.501 cl. 9.11.3.4 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel, + BcdDigit_Bit idDigit1, // 1st identitity digit + B1_Type oddEvenInd, // Odd/even indicator or Spare + NAS_IdType typeOfId, // Type of identity + octetstring otherDigits length (1..infinity) optional // Other identity digits, could be any length @sic R5-192389, @sic R5w190307 sic@ sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(idDigit1, oddEvenInd, typeOfId, otherDigits)"; + variant (iel) "BYTEORDER(last)"; + variant (otherDigits) "BYTEORDER(first)"; + }; + + type record NG_NetworkFeatureSupport { /* 24.501 cl 9.11.3.5 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B1_Type mpsi, + B1_Type iwk_N26, + B2_Type emf, + B2_Type emc, + B1_Type imsVoPS_n3GPP, + B1_Type imsVoPS_3GPP, + B1_Type ng_UP_CIoT optional, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + B1_Type ngIPHC_CP_CIoT optional, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + B1_Type n3Data optional, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + B1_Type ng_CP_CIoT optional, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + B2_Type restrictEC optional, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + B1_Type mcsi optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type emcn3 optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type spareBit optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type pr optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type rpr optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type piv optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type ncr optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type ngEHC_CP_CIoT optional, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + B1_Type atsInd optional, /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + B1_Type ngLCS optional /* Sep20 @sic R5s201387, R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)" + variant (iel) "LENGTHTO(mpsi, iwk_N26, emf, emc, imsVoPS_n3GPP, imsVoPS_3GPP, ng_UP_CIoT, ngIPHC_CP_CIoT, n3Data, ng_CP_CIoT, restrictEC, mcsi, emcn3, spareBit, pr, rpr, piv, ncr, ngEHC_CP_CIoT, atsInd, ngLCS)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record RegistrationResult { /* 24.501 cl. 9.11.3.6 */ + // IEI is always skipped + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B1_Type spare, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type disasterRoamingResult, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type emergencyRegistered, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B1_Type nssaaPerformed, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B1_Type smsAllowed, + B3_Type resultValue + }with{ + variant "FIELDORDER(msb)" + variant (iel) "LENGTHTO(spare, disasterRoamingResult, emergencyRegistered, nssaaPerformed, smsAllowed, resultValue)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record RegistrationType { /* 24.501 cl. 9.11.3.7 */ + // IEI is always skipped + B1_Type fOR, + B3_Type registrationType + }with{ + variant "FIELDORDER(msb)" + }; + + type record NG_TrackingAreaId { /* 24.501 cl. 9.11.3.8 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + NAS_PlmnId plmnId, /* MCC + MNC 3 digits each */ + O3_Type tac + }with{ + variant "FIELDORDER(msb)" /* NG TAC 3 octets */ + }; + + type record length (1..16) of O3_Type NG_NAS_TacList; + + type record NG_PartialTai { + NAS_PlmnId plmnId, /* MCC + MNC 3 digits each */ + O3_Type tac + }with{ + variant "FIELDORDER(msb)" + }; + + type record NG_Type0Element { + NAS_PlmnId plmnId, /* MCC + MNC 3 digits each */ + NG_NAS_TacList tacList + }with{ + variant "FIELDORDER(msb)" + }; + + type record NG_Type1Element { + NG_PartialTai partialTac + }with{ + variant "FIELDORDER(msb)" + }; + + type record length (1..16) of NG_PartialTai NG_PlmnAndTacs; + + type record NG_Type2Element { + NG_PlmnAndTacs plmnAndTacs + }with{ + variant "FIELDORDER(msb)" + }; + + type record NG_Type3Element { + NAS_PlmnId plmnId /* MCC + MNC 3 digits each */ + }with{ + variant "FIELDORDER(msb)" + }; + + type record length (1..16) of NG_Type0Element NG_Type0List; + type record length (1..16) of NG_Type1Element NG_Type1List; + type record length (1..16) of NG_Type2Element NG_Type2List; + + type union NG_PartialTaiType { + NG_Type0List type0List, + NG_Type1List type1List, + NG_Type2List type2List, + NG_Type3Element type3 // Type 3 elements only allowed in SAIList + }with{ + variant "FIELDORDER(msb)" + }; + + type record NG_ListOfPartialTaiList { + B1_Type allowedType, + B2_Type typeOfList, + B5_Type numberOfElements, + NG_PartialTaiType partialTaiList + }with{ + variant "FIELDORDER(msb)" + }; + + type NG_TrackingAreaIdList ServiceAreaIdList; // 24.501 cl. 9.11.3.45 TAIList can be Type 0, 1 or 2; SAIList can be Type 0, 1, 2 or 3 + + type record NG_TrackingAreaIdList { /* 24.501 cl. 9.11.3.9 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + NG_TrackingAreaIdList_LV lvPart /* separated definition into TLV and LV parts Sep22 @sic R5s221179 Baseline Moving sic@ */ + }with{ + variant "FIELDORDER(msb)" + }; + + type record NG_TrackingAreaIdList_LV { /* 24.501 cl. 9.11.3.9 */ + Type4Length_Type iel, + record length (1..16) of NG_ListOfPartialTaiList listOfPartialTais + }with{ + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (listOfPartialTais)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NG_UpdateType { /* 24.501 cl. 9.11.3.9A */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B2_Type spare, + B2_Type eps_PNB_CIoT, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B2_Type ng_PNB_CIoT, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B1_Type ngRAN_RCU, + B1_Type smsRequested + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare, eps_PNB_CIoT, ng_PNB_CIoT, ngRAN_RCU, smsRequested)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record ABBA { /* 24.501 cl. 9.11.3.10 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + octetstring abbaValue + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (abbaValue)"; + variant (iel) "BYTEORDER(last)"; + } + + type record AccessType { /* 24.501 cl. 9.11.2.1A */ + IEI4_Type iei optional, /* present in case of TV; omit in case of V */ + B2_Type spare, + B2_Type accessType + } with { + variant "FIELDORDER(msb)"; + }; + + type record AdditionalSecurityInfo { /* 24.501 cl 9.11.3.12 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B6_Type spareBits, /* Dec18 */ + B1_Type rinmr, /* Dec18 */ + B1_Type hdp + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spareBits, rinmr, hdp)"; + variant (iel) "BYTEORDER(last)"; + + }; + + type record AddInfoRequest { /* 24.501 cl 9.11.3.12A */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B7_Type spareBits, + B1_Type cipherKey + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spareBits, cipherKey)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record ConfigUpdateInd { /* 24.501 cl. 9.11.3.18 */ + IEI4_Type iei, // currently only used as TV + B2_Type spare, + B1_Type red, //registration requested + B1_Type ack //acknowledgement requested + } with { + variant "FIELDORDER(msb)"; + }; + + type record CAGInfoList { /* 24.501 cl. 9.11.3.18A */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel, + record of CAG_Info listOfCAGInfos optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (listOfCAGInfos)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record CAG_Info { /* 24.501 cl. 9.11.3.18A */ + Type4Length_Type iel, + CAG_Info_V cagValue // Sep22 @sic R5s221179 Baseline Moving sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (cagValue)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record CAG_Info_V { /* 24.501 cl. 9.11.3.18A, 9.11.3.86 */ + NAS_PlmnId plmn, + B7_Type spareBits, + B1_Type cagOnly, + record of O4_Type listOfCAGIds optional + } with { + variant "FIELDORDER(msb)"; + }; + + type record ExtdCAGInfoList { /* 24.501 cl. 9.11.3.86 */ + IEI8_Type iei, + Type6Length_Type iel, + record of ExtdCAG_Info listOfCAGInfos optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (listOfCAGInfos)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record ExtdCAG_Info { /* 24.501 cl. 9.11.3.86 */ + Type6Length_Type iel, + CAG_Info_V cagValue // Sep22 @sic R5s221179 Baseline Moving sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (cagValue)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record CIoTSmallDataContainer { /* 24.501 cl. 9.11.3.18B */ + /* The IEI will not be included in the encoded string */ + Type4Length_Type iel, + B3_Type dataType, + B2_Type ddx, /* set to 00 for dataType = 001 */ + B3_Type pduSessionId, /* set to 00 for dataType = 010 or 001 */ + Type4Length_Type lengthOfAddInfo optional, /* only present for dataType = 010 */ + octetstring addInfo optional, /* not present for dataType = 000 or 001 */ + octetstring dataContents + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (dataType, ddx, pduSessionId, lengthOfAddInfo, addInfo, dataContents)"; + variant (iel) "BYTEORDER(last)"; + variant (addInfo) "BYTEORDER(last)"; + variant (dataContents) "BYTEORDER(last)"; + }; + + type record CIoTSmallDataRxdString { /* 24.501 cl. 9.11.3.18B + This is used in the received NAS and will then be + decoded later into the structured type defined above*/ + IEI8_Type iei, + octetstring encodedstring + } with { + variant "FIELDORDER(msb)"; + variant (encodedstring) "BYTEORDER(last)"; + }; + + type record NG_CipheringKeyData { /* 24.501 cl. 9.11.3.18C Must differentiate between the 5G and the EPC versions */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel, + record length (1..16) of NG_CipherDataSet listOfCipherKeyData optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (listOfCipherKeyData)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NG_CipherDataSet { /* 24.501 cl. 9.11.3.18C */ + O2_Type id, + O16_Type key, + B3_Type spareBits, + B5_Type c0Length, + octetstring c0 length (1..16), + B4_Type eSpareBits, + B4_Type eSIBLength, + O1_Type eposSIB1 optional, + O1_Type eposSIB2_O1 optional, + O1_Type eposSIB2_O2 optional, + O1_Type eposSIB2_O3 optional, + O1_Type eposSIB2_SIB5 optional, + B4_Type nSpareBits, + B4_Type nSIBLength, + O1_Type nposSIB1 optional, + O1_Type nposSIB2_O1 optional, + O1_Type nposSIB2_O2 optional, + O1_Type nposSIB2_SIB3 optional, + O1_Type nposSIB4_SIB6 optional, + O5_Type validityStartTime, + O2_Type validityDuration, + Type4Length_Type taiLength, + record length (1..16) of NG_ListOfPartialTaiList listOfPartialTais optional + } with { + variant "FIELDORDER(msb)"; + variant (c0Length) "LENGTHTO (c0)"; + variant (c0Length) "BYTEORDER(last)"; + variant (id) "BYTEORDER(last)"; + variant (key) "BYTEORDER(last)"; + variant (c0) "BYTEORDER(last)"; + }; + + type record CP_ServiceType { /* 24.301 cl. 9.9.3.18D */ + IEI4_Type iei optional, /* present in case of TV; omit in case of V */ + B1_Type tsc, // Type of security context: 0 = cached, 1 = mapped + NAS_KsiValue nasKeySetId + } with { + variant "FIELDORDER(msb)"; + }; + + type record DeregisterType { // 24.501 cl. 9.11.3.20 + // IEI is always skipped + B1_Type switchOff, + B1_Type reRegistration, + B2_Type accessType + } with { + variant "FIELDORDER(msb)"; + }; + + type record EPS_MessageContainer { /* 24.501 cl. 9.11.3.24 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type6Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + octetstring epsMsg + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (epsMsg)"; + variant (iel) "BYTEORDER(last)"; + variant (epsMsg) "BYTEORDER(last)"; + }; + + type record LADN_Ind { /* 24.501 cl. 9.11.3.29 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel, + octetstring listOfLADN_DNNValues length (1..808) optional // @sic R5w190307 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (listOfLADN_DNNValues)"; + variant (iel) "BYTEORDER(last)"; + variant (listOfLADN_DNNValues) "BYTEORDER(last)"; + }; + + type record ListOfLADN { + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type dnnLength, + octetstring dnnValue, + record length (1..16) of NG_ListOfPartialTaiList listOfPartialTais // same as TAIList IE from 3rd octet + } with { + variant "FIELDORDER(msb)"; + variant (dnnLength) "LENGTHTO (dnnValue, listOfPartialTais)"; + variant (dnnLength) "BYTEORDER(last)"; + }; + + type record LADN_Info { /* 24.501 cl. 9.11.3.30 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel, + record of ListOfLADN listOfLADN + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (listOfLADN)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record MICO_Ind { // 24.501 cl. 9.11.3.31 + IEI4_Type iei, + B2_Type spare, + B1_Type sprti, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B1_Type raai + } with { + variant "FIELDORDER(msb)"; + }; + + type record MA_PDUSessionInfo { // 24.501 cl. 9.11.3.31A + IEI4_Type iei, + B4_Type maPDUSession + } with { + variant "FIELDORDER(msb)"; + }; + + type record MappedNSSAI { // 24.501 cl. 9.11.3.31B + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + record length (1..8) of Mapped_S_NSSAIValue s_NSSAI + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (s_NSSAI)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record Mapped_S_NSSAIValue { + Type4Length_Type iel, + O1_Type sst, + O3_Type sd optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (sst, sd)"; + variant (iel) "BYTEORDER(last)"; + }; + + type ReplayedNASMessageContainer NASMessageContainer; // Contents the same 24.501 cl.9.11.3.33 & 24.301 cl. 9.9.3.51 + + type record NG_NAS_SecurityAlgorithms { /* 24.501 cl. 9.11.3.34 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B4_Type cipheringType, /* Type of ciphering algorithm */ + B4_Type integrityType /* Type of integrity protection algorithm */ + } with { + variant "FIELDORDER(msb)"; + }; + + type record NetworkSlicingInd { // 24.501 cl. 9.11.3.36 + IEI4_Type iei, // @sic R5w190307 sic@ + B2_Type spare, + B1_Type dcni, + B1_Type nssci /* Type of integrity protection algorithm */ + } with { + variant "FIELDORDER(msb)"; + }; + + type record of S_NSSAI_LV S_NSSAI_TypeList; + + type record NSSAI { // 24.501 cl. 9.11.3.37 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + NSSAI_LV lvPart /* separated definition into TLV and LV parts Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + }; + + type record NSSAI_LV { // 24.501 cl. 9.11.3.37 + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + S_NSSAI_TypeList s_nssai /* separated definition into TLV and LV parts Sep22 @sic R5s221179 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (s_nssai)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record InclusionModeNSSAI { // 24.501 cl. 9.11.3.37A + IEI4_Type iei optional, /* present in case of TLV; omit in case of LV @sic R5w190307 sic@ */ + B2_Type spare, + B2_Type inclusionMode + } with { + variant "FIELDORDER(msb)"; + }; + + type record AccessCatDefinition { + Type4Length_Type iel, + O1_Type precendence, // @sic R5w200211 sic@ + B1_Type psac, + B2_Type spare2, + B5_Type catNum, + Type4Length_Type criteriaLength, + octetstring criteria, + B3_Type spare3 optional, // @sic R5s220680 sic@ + B5_Type standardAccessCat optional // @sic R5s220680 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (precendence, psac, spare2, catNum, criteriaLength, criteria, spare3, standardAccessCat)"; + variant (iel) "BYTEORDER(last)"; + variant (criteriaLength) "LENGTHTO (criteria)"; + variant (criteriaLength) "BYTEORDER(last)"; + variant (criteria) "BYTEORDER(last)"; + }; + + type record OperatorAccessCatDefinitions { // 24.501 cl. 9.11.3.38 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel, + record of AccessCatDefinition definitions + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (definitions)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record PayloadContainer { // 24.501 cl. 9.11.3.39 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel, + octetstring payload + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (payload)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record PayloadContainerType { /* 24.501 cl. 9.11.3.40 @sic R5w190208 sic@*/ + IEI4_Type iei optional, /* present in case of TV; omit in case of V */ + B4_Type container + } with { + variant "FIELDORDER(msb)"; + }; + + type record NG_PDU_SessionId { /* 24.501 cl. 9.11.3.41 */ + IEI8_Type iei optional, + O1_Type sessionId + } with { + variant "FIELDORDER(msb)"; + }; + + type record PDU_SessionErrorCause { + O1_Type sessionId, + O1_Type causeValue + } with { + variant "FIELDORDER(msb)"; + }; + + type record PDU_SessionReactivationError { /* 24.501 cl. 9.11.3.43 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + record of PDU_SessionErrorCause errorCause + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (errorCause)"; + variant (iel) "BYTEORDER(last)"; + }; + + type PDU_SessionStatus AllowedPDU_SessionStatus; /* 24.501 cl. 9.11.3.11 */ + type PDU_SessionStatus PDU_SessionReactivationResult; /* 24.501 cl. 9.11.3.38 */ + type PDU_SessionStatus ULDataStatus; /* 24.501 cl. 9.11.3.57 */ + + type record PDU_SessionStatus { /* 24.501 cl. 9.11.3.44 */ + IEI8_Type iei optional, /* present in case of TV or TLV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B8_Type psi0_7, /* PSI(0)- PSI(7) */ + B8_Type psi8_15, /* PSI(8)- PSI(15)*/ + octetstring spare length (1..30) optional // @sic R5w190307 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (psi0_7, psi8_15, spare)"; + variant (iel) "BYTEORDER(last)"; + variant (spare) "BYTEORDER(last)"; + }; + + type record RejectedS_NSSAI { + B4_Type len, // Length of rejected S_NSSAI + B4_Type causeValue, + O1_Type sst, + O3_Type sd optional + } with { + variant "FIELDORDER(msb)"; + variant (len) "LENGTHTO (causeValue, sst, sd)"; + variant (len) "BYTEORDER(last)"; + variant (sd) "BYTEORDER(last)"; + }; + + type record RejectedNSSAI { // 24.501 cl. 9.11.3.46 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + record of RejectedS_NSSAI rejectS_NSSAI + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (rejectS_NSSAI)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NG_Request_Type { /* 24.501 cl. 9.11.3.47 */ + IEI4_Type iei, // currently only used as TV + B1_Type spare, + B3_Type requestValue + } with { + variant "FIELDORDER(msb)"; + }; + + type record SMSInd { /* 24.501 cl. 9.11.3.50A */ + IEI4_Type iei, // currently only used as TV + B3_Type spare, + B1_Type sai + } with { + variant "FIELDORDER(msb)"; + }; + + type record SOR_Header { + B3_Type spare, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type ap, // If data type = 1, value is always 0 (spare) Sep22 @sic R5s221179 Baseline Moving sic@ + B1_Type ack, // If data type = 1, value is always 0 (spare) + B1_Type listType_MSSNPNSI, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type listInd_MSSI, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + B1_Type dataType + } with { + variant "FIELDORDER(msb)"; + }; + + type record SORTransparentContainer { /* 24.501 cl. 9.11.3.51 */ + IEI8_Type iei optional, // @sic R5s200739 sic@ + Type6Length_Type iel optional, // @sic R5s200739 sic@ + SOR_Header header, + O16_Type mac, + O2_Type counter optional, + octetstring data length (1..2026) optional // @sic R5w190307 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (header, mac, counter, data)"; + variant (iel) "BYTEORDER(last)"; + variant (mac) "BYTEORDER(last)"; + variant (counter) "BYTEORDER(last)"; + variant (data) "BYTEORDER(last)"; + }; + + type record NG_UE_SecurityCapability { /* 24.501 cl. 9.11.3.54 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV @sic R5s190109 sic@ */ + Type4Length_Type iel, + O1_Type ngeaCap, + O1_Type ngiaCap, + O1_Type eeaCap optional, + O1_Type eiaCap optional, + octetstring spare length(1..4) optional // @sic R5w190307 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(ngeaCap, ngiaCap, eeaCap, eiaCap, spare)"; + variant (iel) "BYTEORDER(last)"; + variant (spare) "BYTEORDER(last)"; + }; + + type record S1_UE_SecurityCapability { /* 24.501 cl. 9.11.3.48A */ + IEI8_Type iei optional, + UE_SecurityCapability ieValue + } with { + variant "FIELDORDER(msb)"; + }; + + type record UE_UsageSetting { // 24.501 cl. 9.11.3.55 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B7_Type spare, + B1_Type ueUsageSetting + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(spare, ueUsageSetting)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record TruncatedS_TMSIConfig { /* 24.501 cl. 9.11.3.70 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV @sic R5s190109 sic@ */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B4_Type amfSetId, + B4_Type amfPointer + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(amfSetId, amfPointer)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record N5GCInd { /* 24.501 cl. 9.11.3.72 */ + IEI4_Type iei optional, + B3_Type spare, + B1_Type ngReg + } with { + variant "FIELDORDER(msb)"; + }; + + type record AddConfigInfo { /* 24.501 cl. 9.11.3.74 */ + IEI4_Type iei optional, + B3_Type spare, + B1_Type scmr + } with { + variant "FIELDORDER(msb)"; + }; + + type union PartialXtdRejectedNSSAI { // @sic RAN5#97 sidebar sic@ + PartialXtdRejectedNSSAIType0 type0, + PartialXtdRejectedNSSAIType1 type1 + }; + + type record of PartialXtdRejectedNSSAI PartialXtdRejectedNSSAI_List; + + type record PartialXtdRejectedNSSAIType0 { + B1_Type spare, + B3_Type typeOfList ('000'B), + B4_Type numOfElements, + XtdRejectedS_NSSAI_List rejectS_NSSAI // @sic RAN5#97 sidebar sic@ + } with { + variant "FIELDORDER(msb)"; + }; + + type record PartialXtdRejectedNSSAIType1 { + B1_Type spare, + B3_Type typeOfList ('001'B), + B4_Type numOfElements, + O1_Type backOffTimerValue, + XtdRejectedS_NSSAI_List rejectS_NSSAI // @sic RAN5#97 sidebar sic@ + } with { + variant "FIELDORDER(msb)"; + }; + + type record of XtdRejectedS_NSSAI XtdRejectedS_NSSAI_List; + + type record XtdRejectedS_NSSAI { + B4_Type len, // Length of rejected S_NSSAI + B4_Type causeValue, + S_NSSAI_V snssai + } with { + variant "FIELDORDER(msb)"; + }; + + type record ExtdRejectedNSSAI { /* 24.501 cl. 9.11.3.75 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV @sic R5s190109 sic@ */ + Type4Length_Type iel, + PartialXtdRejectedNSSAI_List partialXtd // @sic RAN5#97 sidebar sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(partialXtd)"; + }; + + type record NG_PagingRestriction { /* 24.501 cl. 9.11.3.77 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV @sic R5s190109 sic@ */ + Type4Length_Type iel, + B4_Type spareBits, + B4_Type typeOfRestriction, + B8_Type psi7_0 optional, + B8_Type psi15_8 optional, + octetstring spare optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(spareBits, typeOfRestriction, psi7_0, psi15_8, spare)"; + variant (iel) "BYTEORDER(last)"; + variant (spare) "BYTEORDER(last)"; + }; + + type record NID { /* 24.301 cl. 9.11.3.79 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + H1_Type digit1, + B4_Type assignmentMode, + hexstring digits2_9 length(8), + B4_Type spare, + H1_Type digit10 + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(digit1, assignmentMode, digits2_9, spare, digit10)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record PEIPS_AssistIE { // @sic RAN5#97 sidebar sic@ + B3_Type typeOfInfo, + B5_Type peipsValue // equals paging subgroup id if typeOfInfo = 0 + // equals UE paging probability info if typeOfInfo = 1 + } with { + variant "FIELDORDER(msb)"; + }; + + type record of PEIPS_AssistIE PEIPS_AssistIEList; + + type record PEIPS_AssistInfo { /* 24.501 cl. 9.11.3.80 */ + IEI8_Type iei, + Type4Length_Type iel, + PEIPS_AssistIEList list + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(list)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NG_AddReqResult { /* 24.501 cl. 9.11.3.81 */ + IEI8_Type iei, + Type4Length_Type iel, + B6_Type spare, + B2_Type prd + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(spare, prd)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NSSRG_Value { /* 24.501 cl. 9.11.3.82 */ + Type4Length_Type iel, + S_NSSAI_LV sNSSAI, + record of O1_Type nssrgValues + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(sNSSAI, nssrgValues)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record of NSSRG_Value NSSRG_ValueList; + + type record NSSRG_Info { /* 24.501 cl. 9.11.3.82 */ + IEI8_Type iei, + Type6Length_Type iel, + NSSRG_ValueList valueList + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(valueList)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record DisasterPLMNList { /* 24.501 cl. 9.11.3.83 */ + IEI8_Type iei, + Type4Length_Type iel, + record of NAS_PlmnId plmnId optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(plmnId)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record RegistrationWaitRange { /* 24.501 cl. 9.11.3.84 */ + IEI8_Type iei, + Type4Length_Type iel, + O1_Type minWaitTime, + O1_Type maxWaitTime + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(minWaitTime, maxWaitTime)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NSAG { /* 24.501 cl. 9.11.3.87 */ + Type4Length_Type iel, // @sic R5s230533 sic@ + O1_Type id, + NSSAI_LV sNSSAIList, + O1_Type priority, + NG_TrackingAreaIdList_LV taiList + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(id, sNSSAIList, priority, taiList)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NSAG_Info { /* 24.501 cl. 9.11.3.87 */ + IEI8_Type iei, + Type6Length_Type iel, + record of NSAG nsagList + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(nsagList)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record PriorityInd { /* 24.501 cl. 9.11.3.91 */ + IEI4_Type iei, + B3_Type spare, + B1_Type mpsi + } with { + variant "FIELDORDER(msb)"; + }; + + //---------------------------------------------------------------------------- + // NG Session Management (GSM) information elements (24.501 cl. 9.11.4) + //---------------------------------------------------------------------------- + + type record NG_UE_SM_Cap { // 24.501 cl. 9.11.4.1 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B1_Type tpmic, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B4_Type atsssST, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B1_Type ept_S1, /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + B1_Type mh6_PDU, + B1_Type rQoS, + B7_Type spareBits optional, // @sic RAN5#97 sidebar sic@ + B1_Type apmqf optional, /* Sep22 @sic R5s221179 Baseline Moving sic@ */ + octetstring spare length (1..11) optional // @sic R5w190307 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (tpmic, atsssST, ept_S1, mh6_PDU, rQoS, spareBits, apmqf, spare)"; + variant (iel) "BYTEORDER(last)"; + variant (spare) "BYTEORDER(last)"; + }; + + type record AlwaysOnPDUSessionInd { // 24.501 cl. 9.11.4.3 + IEI4_Type iei optional, + B3_Type spare, + B1_Type apsi + } with { + variant "FIELDORDER(msb)"; + }; + + type AlwaysOnPDUSessionInd AlwaysOnPDUSessionReq; // 24.501 cl. 9.11.4.4 defintions the same + + type record AllowedSSCMode { // 24.501 cl. 9.11.4.5 + IEI4_Type iei optional, + B1_Type spare, + B1_Type ssc3, + B1_Type ssc2, + B1_Type ssc1 + } with { + variant "FIELDORDER(msb)"; + }; + + type record IntegrityProtMaxDataRate { // 24.501 cl. 9.11.4.7 + IEI8_Type iei optional, + O1_Type maxDataRateUL, + O1_Type maxDataRateDL + } with { + variant "FIELDORDER(msb)"; + }; + + type record EPSParameters { + O1_Type id, + Type4Length_Type lenOfContent optional, // this field can included in the epsParam field itself @sic R5s210302 sic@ + octetstring epsParam + } with { + variant "FIELDORDER(msb)"; + variant (lenOfContent) "LENGTHTO (epsParam)"; + variant (lenOfContent) "BYTEORDER(last)"; + variant (epsParam) "BYTEORDER(last)"; + }; + + type record MappedEPSContext { + O1_Type epsBearerId, + Type6Length_Type lenOfContext, + B2_Type operationCode, + B1_Type spare, + B1_Type eBit, + B4_Type numOfParams, + record of EPSParameters epsParamsList + } with { + variant "FIELDORDER(msb)"; + variant (lenOfContext) "LENGTHTO (operationCode, spare, eBit, numOfParams, epsParamsList)"; + variant (lenOfContext) "BYTEORDER(last)"; + }; + + type record MappedEPSBearerContexts { /* 24.501 cl. 9.11.4.8 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + record of MappedEPSContext mappedContextList + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (mappedContextList)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record MaxNumPacketFilters { /* 24.501 cl. 9.11.4.9 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + B11_Type numOfFilters, + B5_Type spareBits + } with { + variant "FIELDORDER(msb)"; + }; + + type record PDU_Address { /* 24.501 cl. 9.11.4.10 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B4_Type spare, + B1_Type si16LLA, // @sic R5s201526 sic@ + B3_Type typeValue, + octetstring adressInfo length(4..12), + octetstring ipv6Address length(1..16) optional /* Sep20 @sic R5s201387 Baseline Moving sic@ */ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare, si16LLA, typeValue, adressInfo, ipv6Address)"; + variant (iel) "BYTEORDER(last)"; + variant (adressInfo) "BYTEORDER(last)"; + variant (ipv6Address) "BYTEORDER(last)"; + }; + + type record PDU_SessionType { /* 24.501 cl. 9.11.4.11 */ + IEI4_Type iei optional, + B1_Type spare, + B3_Type typeValue + } with { + variant "FIELDORDER(msb)"; + }; + + type record QoS_Flow { + B2_Type spare2, + B6_Type qfi, + B3_Type operationCode, + B6_Type spare6, + B1_Type eBit, + B6_Type numOfParameters, + QoSParametersList parameterList optional + } with { + variant "FIELDORDER(msb)"; + }; + + type record of QoS_Flow QoS_FlowList; + type record QoSFlowDescr { /* 24.501 cl. 9.11.4.12 */ + IEI8_Type iei, // @sic R5s190470 sic@ + Type6Length_Type iel, + QoS_FlowList listofFlows + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (listofFlows)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record QoS_Rule { + IEI8_Type identifier, + Type6Length_Type iel, + B3_Type ruleOperationCode, + B1_Type dqrBit, + B4_Type numOfPacketFilters, + NG_PacketFilterList packetFilterList optional, + O1_Type precedence optional, + B1_Type spare optional, + B1_Type segregation optional, /* Dec18 */ + B6_Type flowIdentifier optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (ruleOperationCode, dqrBit, numOfPacketFilters, packetFilterList, precedence, spare, segregation, flowIdentifier)"; + variant (iel) "BYTEORDER(last)"; + }; + + type union NG_PacketFilterList { + NG_PacketFilterList_Type1 modify, + NG_PacketFilterList_Type2 new + } with { + variant ""; + }; + + type record of NG_PacketFilter_Type1 NG_PacketFilterList_Type1; + + type record NG_PacketFilter_Type1 { + B4_Type spare, + B4_Type packetFilterId + } with { + variant "FIELDORDER(msb)"; + }; + + type record of NG_PacketFilter_Type2 NG_PacketFilterList_Type2; + + type record NG_PacketFilter_Type2 { + B2_Type spare, + B2_Type direction, + B4_Type packetFilterId, + Type4Length_Type len optional, + octetstring contents length (1..255) optional // @sic R5w190307 sic@ + } with { + variant "FIELDORDER(msb)"; + variant (len) "LENGTHTO (contents)"; + variant (len) "BYTEORDER(last)"; + }; + + type record of QoS_Rule QoS_RuleList; + type record QoS_Rules { // 24.501 cl. 9.11.4.13 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel, + QoS_RuleList listofQoSRules + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (listofQoSRules)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record Session_AMBR { // 24.501 cl. 9.11.4.14 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + O1_Type unitDL, + O2_Type downlink, + O1_Type unitUL, + O2_Type uplink + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (unitDL, downlink, unitUL, uplink)"; + variant (iel) "BYTEORDER(last)"; + variant (uplink) "BYTEORDER(last)"; + }; + + type record SSC_Mode { // 24.501 cl. 9.11.4.16 + IEI4_Type iei optional, + B1_Type spare, + B3_Type sscModeValue + } with { + variant "FIELDORDER(msb)"; + }; + + type record UPU_Header { + B5_Type spare, + B1_Type reg, /* Set to spare for upuDataType = 1 */ + B1_Type ack, /* Set to spare for upuDataType = 1 */ + B1_Type upuDataType + } with { + variant "FIELDORDER(msb)"; + }; + + type record UPU_Param { + B4_Type spare, + B4_Type dataSetType, + Type6Length_Type len, + octetstring dataSet + } with { + variant "FIELDORDER(msb)"; + variant (len) "LENGTHTO (dataSet)"; + variant (len) "BYTEORDER(last)"; + variant (dataSet) "BYTEORDER(last)"; + }; + + type record of UPU_Param UPU_ParamList; + + type record UPU_TransparentContainer { + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel, + UPU_Header octet4, + O16_Type upuMAC_I, + O2_Type counter optional, /* only present if upuDataType = 0 (in octet4) */ + UPU_ParamList upuList optional /* only present if upuDataType = 0 (in octet4) */ + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (octet4, upuMAC_I, counter, upuList)"; + variant (iel) "BYTEORDER(last)"; + variant (upuMAC_I) "BYTEORDER(last)"; + variant (counter) "BYTEORDER(last)"; + }; + + type record SM_PDU_DN_RequestContainer { // 24.501 cl. 9.11.4.15 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + octetstring dnSpecificId + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (dnSpecificId)"; + variant (iel) "BYTEORDER(last)"; + variant (dnSpecificId) "BYTEORDER(last)"; + }; + + type record NGSM_NetworkFeatureSupport { /* 24.501 cl 9.11.4.18 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B7_Type spareBits, + B1_Type ept_S1, + octetstring spare length (1..12) + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spareBits, ept_S1, spare)"; + variant (iel) "BYTEORDER(last)"; + variant (spare) "BYTEORDER(last)"; + }; + + type record ATSSSContainer { // 24.501 cl. 9.11.4.22 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + octetstring contents + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (contents)"; + variant (iel) "BYTEORDER(last)"; + variant (contents) "BYTEORDER(last)"; + }; + + type record IPHeaderCompressionConfig { // 24.501 cl. 9.11.4.24 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V @sic R5s201526 sic@ */ + B1_Type spare, + B1_Type profile104, + B1_Type profile103, + B1_Type profile102, + B1_Type profile6, + B1_Type profile4, + B1_Type profile3, + B1_Type profile2, + O2_Type maxCID, + O1_Type addParamsType optional, + octetstring addParamsContainer optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spare, profile104, profile103, profile102, profile6, profile4, profile3, profile2, maxCID, addParamsType, addParamsContainer)"; + variant (iel) "BYTEORDER(last)"; + variant (addParamsContainer) "BYTEORDER(last)"; + }; + + type record DS_TT_EthernetPortMACAddr { // 24.501 cl. 9.11.4.25 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + O6_Type addressContents + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (addressContents)"; + variant (iel) "BYTEORDER(last)"; + variant (addressContents) "BYTEORDER(last)"; + }; + + type record UE_DS_TT_ResidenceTime { // 24.501 cl. 9.11.4.26 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + O8_Type timeContents + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (timeContents)"; + variant (iel) "BYTEORDER(last)"; + variant (timeContents) "BYTEORDER(last)"; + }; + + type record PortManagementInfoContainer { // 24.501 cl. 9.11.4.27 + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type6Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + octetstring contents + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (contents)"; + variant (iel) "BYTEORDER(last)"; + variant (contents) "BYTEORDER(last)"; + }; + + type record EthernetHeaderCompressConfig { /* 24.501 cl 9.11.4.28 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel optional, /* present in case of LV or TLV; omit in case of V */ + B6_Type spareBits, + B2_Type cidLength + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (spareBits, cidLength)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record MBSSessionInfo { /* 24.501 cl 9.11.4.30 */ + B4_Type spareBits, + B2_Type operation, + B2_Type typeOfSessionId, // @sic RAN5#97 sidebar sic@ + octetstring sessionId + } with { + variant "FIELDORDER(msb)"; + variant (sessionId) "BYTEORDER(last)"; + }; + + type record RequestedMBSContainer { /* 24.501 cl 9.11.4.30 */ + IEI8_Type iei, + Type6Length_Type iel, + record of MBSSessionInfo sessionInfo + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (sessionInfo)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NR_CGI { + O5_Type cellId, + NAS_PlmnId plmn + } with { + variant "FIELDORDER(msb)"; + }; + + type record NR_CGI_List { + Type4Length_Type iel, + record of NR_CGI nrCGI + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (nrCGI)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record MBS_ServiceArea { + // depending on value of ReceivedMBSInfo.msai either or both of these fields are included + NG_TrackingAreaIdList_LV taiList optional, + NR_CGI_List nrCGIList optional + } with { + variant "FIELDORDER(msb)"; + }; + + type record ReceivedMBSInfo { /* 24.501 cl 9.11.4.31 */ + B3_Type rejectCause, + B2_Type msai, + B3_Type md, + B3_Type spareBits, // @sic R5s230533 sic@ + B1_Type ipat, // @sic R5s230533 sic@ + B1_Type msci, + B2_Type mti, + B1_Type ipae, + TMGI_LV tmgi, + octetstring sourceIPaddr optional, + octetstring destIPaddr optional, + MBS_ServiceArea serviceArea optional, + octetstring timers optional, + octetstring securityContainer optional + } with { + variant "FIELDORDER(msb)"; + variant (sourceIPaddr) "BYTEORDER(last)"; + variant (destIPaddr) "BYTEORDER(last)"; + variant (timers) "BYTEORDER(last)"; + variant (securityContainer) "BYTEORDER(last)"; + }; + + type record ReceivedMBSContainer { /* 24.501 cl 9.11.4.31 */ + IEI8_Type iei, + Type6Length_Type iel, + record of ReceivedMBSInfo info + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (info)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record TMGI_LV { + Type4Length_Type iel, + O3_Type serviceID, + NAS_PlmnId plmn optional + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (serviceID, plmn)"; + variant (iel) "BYTEORDER(last)"; + variant (serviceID) "BYTEORDER(last)"; +}; + + type record PDUSessionPairId { /* 24.501 cl 9.11.4.32 */ + IEI8_Type iei, + Type4Length_Type iel, + O1_Type id + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (id)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record RSN { /* 24.501 cl 9.11.4.33 */ + IEI8_Type iei, + Type4Length_Type iel, + O1_Type rsn + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO (rsn)"; + variant (iel) "BYTEORDER(last)"; + }; + + type record NSSAI_DELETE_REQUEST { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType, /* M V 1 */ + B8_Type deleteNSSAI_Type, + NAS_PlmnId configuredNSSAI optional, /* only present if deleteNSSAI_Type = DeleteConfigured */ + AllowedNSSAI allowedNSSAI optional /* only present if deleteNSSAI_Type = DeleteAllowed */ + } with { + variant "FIELDORDER(msb)"; + }; + + type record AllowedNSSAI { + NAS_PlmnId allowedNSSAI, + B6_Type spareBits, + B2_Type accessType + } with { + variant "FIELDORDER(msb)"; + }; + + type record NSSAI_DELETE_RESPONSE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + } with { + variant "FIELDORDER(msb)"; + }; + + type record UE_TEST_LOOP_NR_SIDELINK_COUNTER_REQUEST { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + } with { + variant "FIELDORDER(msb)"; + }; + + type record of O4_Type PacketCounterValueList; + + type record NR_SidelinkCounter { + IEI8_Type iei, + Type4Length_Type iel, + PacketCounterValueList counterValue + } with { + variant "FIELDORDER(msb)"; + variant (iel) "LENGTHTO(counterValue)"; + }; + + type record UE_TEST_LOOP_NR_SIDELINK_COUNTER_RESPONSE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType, /* M V 1 */ + NR_SidelinkCounter pscch optional, /* only present if test loop E is active*/ + NR_SidelinkCounter stch optional, /* only present if test loop E is active*/ + NR_SidelinkCounter pssch optional /* only present if test loop E is active*/ + } with { + variant "FIELDORDER(msb)"; + }; + + type record S1ToN1TransparentContainer { /* 24.501 cl. 9.11.2.9 + 24.501 specifies that this has a length of 10 octets, + but that only the value part is included in the RRC message. + Therefore iei and iel are never used */ + // IEI8_Type iei, + // Type4Length_Type iel, + O4_Type mac optional, + B4_Type ciphAlg, + B4_Type intAlg, + B1_Type spareBit, + B3_Type ncc, + B1_Type tsc, + B3_Type ksi5G, + O2_Type spare + } with { + variant "FIELDORDER(msb)"; + variant (mac) "BYTEORDER(last)"; + variant (spare) "BYTEORDER(last)"; + }; + + type record IntraN1TransparentContainer { /* 24.501 cl. 9.11.2.6 + 24.501 specifies that this has a length of 9 octets, + but that only the value part is included in the RRC message. + Therefore iei and iel are never used */ + // IEI8_Type iei, + // Type4Length_Type iel, + O4_Type mac optional, + B4_Type ciphAlg, + B4_Type intAlg, + B3_Type spareBits, + B1_Type kacf, + B1_Type tsc, + B3_Type ksi5G, + O1_Type sequenceNum + } with { + variant "FIELDORDER(msb)"; + variant (mac) "BYTEORDER(last)"; + }; + + type record SET_UAI_REQUEST { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType, /* M V 1 */ + B6_Type spare, + B2_Type preferredRRCState + } with { + variant "FIELDORDER(msb)"; + }; + + type record SET_UAI_RESPONSE { + SkipIndicator skipIndicator, /* M V 1/2 */ + ProtocolDiscriminator protocolDiscriminator, /* M V 1/2 */ + MessageType messageType /* M V 1 */ + } with { + variant "FIELDORDER(msb)"; + }; + +} with { + encode "RAW"/*"NAS Types"*/ +} diff --git a/ttcn/Lib3GPP/NG_NAS/NG_V2X_MsgContainers.ttcn b/ttcn/Lib3GPP/NG_NAS/NG_V2X_MsgContainers.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..ed625d992ef36c1f3033eb6d4e89ed2c60148783 --- /dev/null +++ b/ttcn/Lib3GPP/NG_NAS/NG_V2X_MsgContainers.ttcn @@ -0,0 +1,44 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-01-18 15:32:38 +0100 (Tue, 18 Jan 2022) $ +// $Rev: 32443 $ +/******************************************************************************/ + +module NG_V2X_MsgContainers +{ + import from NG_V2X_TypeDefs all; + + type union NG_V2X_Message_Type { + DIRECT_LINK_ESTABLISHMENT_REQUEST Direct_Link_Establishment_Request, + DIRECT_LINK_ESTABLISHMENT_ACCEPT Direct_Link_Establishment_Accept, + DIRECT_LINK_MODIFICATION_REQUEST Direct_Link_Modification_Request, + DIRECT_LINK_MODIFICATION_ACCEPT Direct_Link_Modification_Accept, + DIRECT_LINK_RELEASE_REQUEST Direct_Link_Release_Request, + DIRECT_LINK_RELEASE_ACCEPT Direct_Link_Release_Accept, + DIRECT_LINK_KEEPALIVE_REQUEST Direct_Link_Keepalive_Request, + DIRECT_LINK_KEEPALIVE_RESPONSE Direct_Link_Keepalive_Response, + DIRECT_LINK_AUTHENTICATION_REQUEST Direct_Link_Authentication_Request, + DIRECT_LINK_AUTHENTICATION_RESPONSE Direct_Link_Authentication_Response, + DIRECT_LINK_AUTHENTICATION_REJECT Direct_Link_Authentication_Reject, + DIRECT_LINK_SECURITY_MODE_COMMAND Direct_Link_Security_Mode_Command, + DIRECT_LINK_SECURITY_MODE_COMPLETE Direct_Link_Security_Mode_Complete, + DIRECT_LINK_SECURITY_MODE_REJECT Direct_Link_Security_Mode_Reject, + DIRECT_LINK_REKEYING_REQUEST Direct_Link_Rekeying_Request, + DIRECT_LINK_REKEYING_RESPONSE Direct_Link_Rekeying_Response, + DIRECT_LINK_IDENTIFIER_UPDATE_REQUEST Direct_Link_Identifier_Update_Request, + DIRECT_LINK_IDENTIFIER_UPDATE_ACCEPT Direct_Link_Identifier_Update_Accept, + DIRECT_LINK_IDENTIFIER_UPDATE_ACK Direct_Link_Identifier_Update_Ack, + DIRECT_LINK_IDENTIFIER_UPDATE_REJECT Direct_Link_Identifier_Update_Reject, + DIRECT_LINK_MODIFICATION_REJECT Direct_Link_Modification_Reject, + DIRECT_LINK_ESTABLISHMENT_REJECT Direct_Link_Establishment_Reject, + DIRECT_LINK_AUTHENTICATION_FAILURE Direct_Link_Authentication_Failure + }; + + +// The encoding rule is needed because the types in this file are part of the overall message sent over the air +} with { encode "NAS Types"} diff --git a/ttcn/Lib3GPP/NG_NAS/NG_V2X_TypeDefs.ttcn b/ttcn/Lib3GPP/NG_NAS/NG_V2X_TypeDefs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6a445e6fa6fba5255cd070d6e4fbf1458c5b7417 --- /dev/null +++ b/ttcn/Lib3GPP/NG_NAS/NG_V2X_TypeDefs.ttcn @@ -0,0 +1,393 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-05-09 13:11:08 +0200 (Mon, 09 May 2022) $ +// $Rev: 33208 $ +/******************************************************************************/ + +module NG_V2X_TypeDefs { + + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + + //**************************************************************************** + // NAS PROTOCOL DEFINITIONS: Message Types + //---------------------------------------------------------------------------- + const MessageType tsc_MT_DirectLinkEstablishmentRequest := '00000001'B; + const MessageType tsc_MT_DirectLinkEstablishmentAccept := '00000010'B; + const MessageType tsc_MT_DirectLinkEstablishmentReject := '00000011'B; + const MessageType tsc_MT_DirectLinkModificationRequest := '00000100'B; + const MessageType tsc_MT_DirectLinkModificationAccept := '00000101'B; + const MessageType tsc_MT_DirectLinkModificationReject := '00000110'B; + const MessageType tsc_MT_DirectLinkReleaseRequest := '00000111'B; + const MessageType tsc_MT_DirectLinkReleaseAccept := '00001000'B; + const MessageType tsc_MT_DirectLinkKeepaliveRequest := '00001001'B; + const MessageType tsc_MT_DirectLinkKeepaliveResponse := '00001010'B; + const MessageType tsc_MT_DirectLinkAuthenticationRequest := '00001011'B; + const MessageType tsc_MT_DirectLinkAuthenticationResponse := '00001100'B; + const MessageType tsc_MT_DirectLinkAuthenticationReject := '00001101'B; + const MessageType tsc_MT_DirectLinkSecurityModeCommand := '00001110'B; + const MessageType tsc_MT_DirectLinkSecurityModeComplete := '00001111'B; + const MessageType tsc_MT_DirectLinkSecurityModeReject := '00010000'B; + const MessageType tsc_MT_DirectLinkRekeyingRequest := '00010001'B; + const MessageType tsc_MT_DirectLinkRekeyingResponse := '00010010'B; + const MessageType tsc_MT_DirectLinkIdentifierUpdateRequest := '00010011'B; + const MessageType tsc_MT_DirectLinkIdentifierUpdateAccept := '00010100'B; + const MessageType tsc_MT_DirectLinkIdentifierUpdateAck := '00010101'B; + const MessageType tsc_MT_DirectLinkIdentifierUpdateReject := '00010110'B; + const MessageType tsc_MT_DirectLinkAuthenticationFailure := '00010111'B; + + //**************************************************************************** + // NAS PROTOCOL DEFINITIONS: PDUs + //---------------------------------------------------------------------------- + // Direct Link messages (24.587 cl. 7.3) + //---------------------------------------------------------------------------- + + type record DIRECT_LINK_ESTABLISHMENT_REQUEST { /* 24.587 cl. 7.3.1 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + V2X_ServiceIds v2xServiceId, /* cl. 8.4.3 M LV 5-253 */ + ApplicationLayerId sourceUserInfo, /* cl. 8.4.4 M LV 3-253 */ + PC5_UESecurityCap ueSecurityCapability, /* cl. 8.4.14 M LV 3-9 */ + UE_PC5UnicastSecurityPolicy uePC5UnicastSigSecurityPolicy, /* cl. 8.4.15 M V 1 */ + KeyEstabInfoContainer keyEstabInfoContainer optional, /* cl. 8.4.12 O TLV-E 4-n IEI=74 */ + PC5_Nonce nonce_1 optional, /* cl. 8.4.13 O TV 17 IEI=53 */ + K_NRPsessId_SigBits msb_K_NRPsessId optional, /* cl. 8.4.16 O TV 2 IEI=54 */ + ApplicationLayerId targetUserInfo optional, /* cl. 8.4.4 O TLV 4-254 IEI=28 */ + K_NRPId k_NRPId optional /* cl. 8.4.17 O TV 5 IEI=52 */ + }; + + type record DIRECT_LINK_ESTABLISHMENT_ACCEPT { /* 24.587 cl. 7.3.2 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + ApplicationLayerId sourceUserInfo, /* cl. 8.4.4 M LV 3-253 */ + PC5QoSFlowDescr qosFlowDescr, /* cl. 8.4.5 M LV-E 5-65537 */ + UE_PC5UnicastSecurityPolicy configUEPC5UnicastUPSecurityProtection, /* cl. 8.4.23 M V 1 */ + IPAddressConfig ipAddressConfig optional, /* cl. 8.4.6 O TV 2 IEI=57 */ + LinkLocalIPv6Addr linkLocalIPv6Addr optional /* cl. 8.4.7 O TV 17 IEI=58 */ + }; + + type record DIRECT_LINK_MODIFICATION_REQUEST { /* 24.587 cl. 7.3.4 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + O1_Type linkModOperationCode, /* cl. 8.4.8 M V 1 */ + PC5QoSFlowDescr qosFlowDescr /* cl. 8.4.5 M LV-E 5-65537 */ + }; + + type record DIRECT_LINK_MODIFICATION_ACCEPT { /* 24.587 cl. 7.3.5 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + PC5QoSFlowDescr qosFlowDescr optional /* cl. 8.4.5 O TLV-E 6-65538 IEI=79 */ + }; + + type record DIRECT_LINK_RELEASE_REQUEST { /* 24.587 cl. 7.3.6 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + O1_Type pc5SigProtocolCauseValue, /* cl. 8.4.9 M V 1 */ + K_NRP_Id_SigBits msb_K_NRPId /* cl. 8.4.20 M V 2 */ + }; + + type record DIRECT_LINK_RELEASE_ACCEPT { /* 24.587 cl. 7.3.7 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + K_NRP_Id_SigBits lsb_K_NRPId /* cl. 8.4.21 M V 2 */ + }; + + type record DIRECT_LINK_KEEPALIVE_REQUEST { /* 24.587 cl. 7.3.8 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + O4_Type keepAliveCounter, /* cl. 8.4.10 M V 4 */ + MaxInactivityPeriod maxInactivityPeriod optional /* cl. 8.4.11 O TV 5 IEI=55 */ + }; + + type record DIRECT_LINK_KEEPALIVE_RESPONSE { /* 24.587 cl. 7.3.9 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + O4_Type keepAliveCounter /* cl. 8.4.10 M V 4 */ + }; + + type record DIRECT_LINK_AUTHENTICATION_REQUEST { /* 24.587 cl. 7.3.10 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + KeyEstabInfoContainer keyEstabInfoContainer /* cl. 8.4.12 M LV-E 3-n */ + }; + + type record DIRECT_LINK_AUTHENTICATION_RESPONSE { /* 24.587 cl. 7.3.11 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + KeyEstabInfoContainer keyEstabInfoContainer /* cl. 8.4.12 M LV-E 3-n */ + }; + + type record DIRECT_LINK_AUTHENTICATION_REJECT { /* 24.587 cl. 7.3.12 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + O1_Type pc5SigProtocolCauseValue /* cl. 8.4.9 M V 1 */ + }; + + type record DIRECT_LINK_SECURITY_MODE_COMMAND { /* 24.587 cl. 7.3.13 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + SelectedSecurityAlgs selectedSecurityAlgs, /* cl. 8.4.18 M V 1 */ + PC5_UESecurityCap ueSecurityCapability, /* cl. 8.4.14 M LV 3-9 */ + UE_PC5UnicastSecurityPolicy uePC5UnicastSigSecurityPolicy, /* cl. 8.4.15 O TV 2 IEI=59 */ + PC5_Nonce nonce_2 optional, /* cl. 8.4.13 O TV 17 IEI=55 */ + K_NRPsessId_SigBits lsb_K_NRPsessId optional, /* cl. 8.4.16 O TV 2 IEI=52 */ + KeyEstabInfoContainer keyEstabInfoContainer optional, /* cl. 8.4.12 O TLV-E 4-n IEI=74 */ + K_NRP_Id_SigBits msb_K_NRPId optional /* cl. 8.4.20 O TV 3 IEI=62 */ + }; + + type record DIRECT_LINK_SECURITY_MODE_COMPLETE { /* 24.587 cl. 7.3.14 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + PC5QoSFlowDescr qosFlowDescr, /* cl. 8.4.5 M LV-E 6-n */ + UE_PC5UnicastSecurityPolicy uePC5UnicastUPSecurityPolicy, /* cl. 8.4.22 M V 1 */ + IPAddressConfig ipAddressConfig optional, /* cl. 8.4.6 O TV 2 IEI=57 */ + LinkLocalIPv6Addr linkLocalIPv6Addr optional, /* cl. 8.4.7 O TV 17 IEI=58 */ + K_NRP_Id_SigBits lsb_K_NRPId optional /* cl. 8.4.20 O TV 3 IEI=52 */ + }; + + type record DIRECT_LINK_SECURITY_MODE_REJECT { /* 24.587 cl. 7.3.15 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + O1_Type pc5SigProtocolCauseValue /* cl. 8.4.9 M V 1 */ + }; + + type record DIRECT_LINK_REKEYING_REQUEST { /* 24.587 cl. 7.3.16 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + PC5_UESecurityCap ueSecurityCapability, /* cl. 8.4.14 M LV 3-9 */ + KeyEstabInfoContainer keyEstabInfoContainer optional, /* cl. 8.4.12 O TLV-E 4-n IEI=74 */ + PC5_Nonce nonce_1 optional, /* cl. 8.4.13 O TV 17 IEI=53 */ + K_NRPsessId_SigBits msb_K_NRPsessId optional, /* cl. 8.4.16 O TV 2 IEI=54 */ + ReAuthInd reauthenticationInd optional /* cl. 8.4.24 O TV 2 IEI=56 */ + }; + + type record DIRECT_LINK_REKEYING_RESPONSE { /* 24.587 cl. 7.3.17 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber /* cl. 8.4.2 M V 1 */ + }; + + type record DIRECT_LINK_IDENTIFIER_UPDATE_REQUEST { /* 24.587 cl. 7.3.18 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + K_NRPsessId_SigBits msb_K_NRPsessId, /* cl. 8.4.16 M V 1 */ + Layer2Id layer2Id, /* cl. 8.4.25 M V 3 */ + ApplicationLayerId sourceUserInfo optional, /* cl. 8.4.4 O TLV 4-254 IEI=57 */ + LinkLocalIPv6Addr sourceLinkLocalIPv6Addr optional /* cl. 8.4.7 O TV 17 IEI=58 */ + }; + + type record DIRECT_LINK_IDENTIFIER_UPDATE_ACCEPT { /* 24.587 cl. 7.3.19 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + K_NRPsessId_SigBits lsb_K_NRPsessId, /* cl. 8.4.17 M V 1 */ + K_NRPsessId_SigBits msb_K_NRPsessId, /* cl. 8.4.16 M V 1 */ + Layer2Id sourceLayer2Id, /* cl. 8.4.25 M V 3 */ + Layer2Id targetLayer2Id, /* cl. 8.4.25 M V 3 */ + ApplicationLayerId targetUserInfo optional, /* cl. 8.4.4 O TLV 4-254 IEI=28 */ + LinkLocalIPv6Addr targetLinkLocalIPv6Addr optional, /* cl. 8.4.7 O TV 17 IEI=59 */ + ApplicationLayerId sourceUserInfo optional, /* cl. 8.4.4 O TLV 4-254 IEI=57 */ + LinkLocalIPv6Addr sourceLinkLocalIPv6Addr optional /* cl. 8.4.7 O TV 17 IEI=58 */ + }; + + type record DIRECT_LINK_IDENTIFIER_UPDATE_ACK { /* 24.587 cl. 7.3.20 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + K_NRPsessId_SigBits lsb_K_NRPsessId, /* cl. 8.4.17 M V 1 */ + Layer2Id targetLayer2Id, /* cl. 8.4.25 M V 3 */ + ApplicationLayerId targetUserInfo optional, /* cl. 8.4.4 O TLV 4-254 IEI=28 */ + LinkLocalIPv6Addr targetLinkLocalIPv6Addr optional /* cl. 8.4.7 O TV 17 IEI=59 */ + }; + + type record DIRECT_LINK_IDENTIFIER_UPDATE_REJECT { /* 24.587 cl. 7.3.21 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + O1_Type pc5SigProtocolCauseValue /* cl. 8.4.9 M V 1 */ + }; + + type record DIRECT_LINK_MODIFICATION_REJECT { /* 24.587 cl. 7.3.22 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + O1_Type pc5SigProtocolCauseValue /* cl. 8.4.9 M V 1 */ + }; + + type record DIRECT_LINK_ESTABLISHMENT_REJECT { /* 24.587 cl. 7.3.23 + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + O1_Type pc5SigProtocolCauseValue /* cl. 8.4.9 M V 1 */ + }; + + type record DIRECT_LINK_AUTHENTICATION_FAILURE { /* 24.587 cl. 7.3.24 + // FFS: Errors in core spec definition! + Significance: dual + Direction: UE to peer UE */ + MessageType messageType, /* cl. 8.4.1 M V 1 */ + SequenceNumber sequenceNumber, /* cl. 8.4.2 M V 1 */ + KeyEstabInfoContainer keyEstabInfoContainer optional /* cl. 8.4.12 O TLV-E 4-n IEI=74 */ + }; + + //**************************************************************************** + // NAS PROTOCOL DEFINITIONS: information elements (24.587 cl. 8.4) + //---------------------------------------------------------------------------- + type O1_Type SequenceNumber; /* 24.587 cl. 8.4.2 */ + + type record V2X_ServiceIds { /* 24.587 cl. 8.4.3 */ + // IEI is not used for this type + Type4Length_Type lenOfContent, + record of O4_Type serviceId + }; + + type record ApplicationLayerId { /* 24.587 cl. 8.4.4 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type4Length_Type iel, + octetstring appLayerContents + }; + + type record PC5QoS_Flow { /* 24.587 cl. 8.4.5 */ + B2_Type spare2, + B6_Type pqfi, + B3_Type operationCode, + B6_Type spare6, + B1_Type eBit, + B6_Type numOfParameters, + V2X_ServiceIds associatedV2XServiceIds optional, + QoSParametersList parameterList optional + }; + + type record of PC5QoS_Flow PC5QoS_FlowList; + + type record PC5QoSFlowDescr { /* 24.587 cl. 8.4.5 */ + IEI8_Type iei optional, + Type6Length_Type iel, + PC5QoS_FlowList listofFlows + }; + + type record IPAddressConfig { /* 24.587 cl. 8.4.6 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B4_Type spare, + B4_Type ipAddrContents + }; + + type record LinkLocalIPv6Addr { /* 24.587 cl. 8.4.7 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O16_Type ipv6Addr + }; + + type record MaxInactivityPeriod { /* 24.587 cl. 8.4.11 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O4_Type maxInactivePeriod + }; + + type record KeyEstabInfoContainer { /* 24.587 cl. 8.4.12 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + Type6Length_Type iel, + octetstring keyEstablishmentInfo + }; + + type record PC5_Nonce { /* 24.587 cl. 8.4.13 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O16_Type nonceValue + }; + + type record PC5_UESecurityCap { /* 24.587 cl. 98.4.14 */ + IEI8_Type iei optional, /* present in case of TLV; omit in case of LV */ + Type4Length_Type iel, + O1_Type ngeaCap, + O1_Type ngiaCap, + octetstring spare length(1..6) optional + }; + + type record UE_PC5UnicastSecurityPolicy { /* 24.587 cl. 8.4.15/22/23 */ + /* Definition is exactly the same for: + UE PC5 Unicast Signalling Security Policy, + UE PC5 Unicast User Plane Security Policy, + Configuration of UE PC5 Unicast User Plane Security Protextion */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B1_Type spareBit1, + B3_Type cipheringPolcy, + B1_Type spareBit2, + B4_Type integrityPolicy + }; + + type record K_NRPsessId_SigBits { /* 24.587 cl. 8.4.16/19 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O1_Type significantBits + }; + + type record K_NRPId { /* 24.587 cl. 8.4.17 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O4_Type id + }; + + type record SelectedSecurityAlgs { /* 24.587 cl. 8.4.18 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B1_Type spareBit1, + B3_Type cipheringPolcy, + B1_Type spareBit2, + B4_Type integrityPolicy + }; + + type record K_NRP_Id_SigBits { /* 24.587 cl. 8.4.20/21 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O2_Type significantBits + }; + + type record ReAuthInd { /* 24.587 cl. 8.4.24 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + B7_Type spare, + B1_Type reAuthenticationInd + }; + + type record Layer2Id { /* 24.587 cl. 8.4.25 */ + IEI8_Type iei optional, /* present in case of TV; omit in case of V */ + O3_Type id + }; + +} with { encode "NAS Types"} diff --git a/ttcn/Lib3GPP/NG_NAS/module.mk b/ttcn/Lib3GPP/NG_NAS/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..263f7212d06ff6fbb70a3b3d90c9da070f7013b2 --- /dev/null +++ b/ttcn/Lib3GPP/NG_NAS/module.mk @@ -0,0 +1,18 @@ +sources := \ + EAP_TypeDefs.ttcn \ + NG_NAS_Common.ttcn \ + NG_NAS_MsgContainers.ttcn \ + NG_NAS_SecurityFunctions.ttcn \ + NG_NAS_Templates.ttcn \ + NG_NAS_TypeDefs.ttcn \ + NG_NAS_EncdecDeclarations.ttcn + + +##modules :=\ + +#EUTRA_NR_SecurityFunctions.ttcn \ +#NasEmu_Common4G5G.ttcn \ +#NG_NAS_SecurityFunctions.ttcn \ +#NG_NasEmu_CtrlAspTypes.ttcn \ +NG_NASTemplateFunctions.ttcn + diff --git a/ttcn/Lib3GPP/NasEmulation/NG_NasEmu_Common.ttcn b/ttcn/Lib3GPP/NasEmulation/NG_NasEmu_Common.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..725c6ff358b89660a77d5c497f1e5107fb8a9071 --- /dev/null +++ b/ttcn/Lib3GPP/NasEmulation/NG_NasEmu_Common.ttcn @@ -0,0 +1,667 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2020-11-21 16:39:02 +0100 (Sat, 21 Nov 2020) $ +// $Rev: 29257 $ +/******************************************************************************/ + +module NG_NasEmu_Common { + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + import from NAS_CommonTemplates all; + import from NG_NAS_TypeDefs all; + import from NG_NAS_Common all; + import from NG_NAS_MsgContainers all; + import from NG_NasEmu_CtrlAspTypes all; + import from NasEmu_Common4G5G all; + import from NG_SecurityDefinitionsAndExternalFunctions all; + + //**************************************************************************** + // NAS emulation: Local definitions + //---------------------------------------------------------------------------- + + // local type definitions: + type union NG_NasEmu_DecodedNasPduUL_Type { /* Return type for f_NasEmu_DecodeMsg + @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + NG_NAS_UL_Message_Type Msg, + Null_Type Invalid + }; + + type record NG_NasEmu_DecodingInfo_Type { /* Return type for f_DecipherAndDecodeNasPdu + @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + NG_NAS_MSG_Indication_Type NasIndication optional, /* omit when octetstring cannot be decoded */ + boolean IntegrityError + }; + + type integer NG_NasEmu_SN; /* sequence number as usual (1 octet) + @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + + // local templates: + template (value) NG_NasEmu_DecodingInfo_Type cs_NG_DecodingInfo_Init := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + NasIndication := omit, + IntegrityError := false + }; + + //**************************************************************************** + // NAS emulation: global information + //---------------------------------------------------------------------------- + + type record NG_NasSecurity_Type { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + NG_NAS_SecurityInfo_Type Integrity, + NG_NAS_SecurityInfo_Type Ciphering, + NasCountInfo_Type NasCount, + B5_Type BearerId, + boolean SecurityStarted /* can be set to true after the download of security keys since + ciphering is assumed for all security protected NAS PDUs in UL */ + }; + + /* + * @desc initialise the global information + * @return NG_NasSecurity_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_NasEmu_NasSecurity_Init() return NG_NasSecurity_Type + { + return valueof(cs_NG_NasSecurity_Init); // valueof cannot be avoided here + } + + //**************************************************************************** + // NAS emulation: Configuration primitives + //---------------------------------------------------------------------------- + + template (present) NG_NAS_CTRL_REQ cr_NG_NAS_CTRL_Security_REQ := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Common := ?, + Request := { + Security := ? + } + }; + + template (present) NG_NAS_CTRL_REQ cr_NG_NAS_CTRL_NasCount_REQ := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Common := ?, + Request := { + NasCount := ? + } + }; + + //---------------------------------------------------------------------------- + + template (value) NG_NAS_CTRL_CNF cs_NG_NAS_CTRL_Security_CNF := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Common := cs_NasCtrlCnfAspCommonPart, + Confirm := { + Security := true + } + }; + + template (value) NG_NAS_CTRL_CNF cs_NG_NAS_CTRL_NasCountSet_CNF := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Common := cs_NasCtrlCnfAspCommonPart, + Confirm := { + NasCount := { + Set := true + } + } + }; + + template (value) NG_NAS_CTRL_CNF cs_NG_NAS_CTRL_NasCountGet_CNF(template (value) NasCountInfo_Type p_NasCountInfo) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Common := cs_NasCtrlCnfAspCommonPart, + Confirm := { + NasCount := { + Get := p_NasCountInfo + } + } + }; + + //---------------------------------------------------------------------------- + + template (value) NG_NasSecurity_Type cs_NG_NasSecurity_Init := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Integrity := { + Algorithm := '0000'B, + K_NAS := int2bit(0, 128) + }, + Ciphering := { + Algorithm := '0000'B, + K_NAS := int2bit(0, 128) + }, + NasCount := { + UL := f_NasCountInit(), + DL := f_NasCountInit() + }, + BearerId := '00001'B, /* 3GPP Access */ + SecurityStarted := false + }; + + //**************************************************************************** + // Templates: NAS Signalling + //---------------------------------------------------------------------------- + template (value) NG_NAS_DL_Message_Type cs_NG_SecurityProtected_NasMsg(SecurityHeaderType p_SecurityHeaderType, + MessageAuthenticationCode p_MessageAuthenticationCode, + NAS_SequenceNumber p_NAS_SequenceNumber, + template (value) NG_NAS_Message p_NAS_Message) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + security_Protected_Nas_Message := { + protocolDiscriminator := tsc_EPD_GMM, + spareHalfOctet := tsc_SpareHalfOctet, + securityHeaderType := p_SecurityHeaderType, + messageAuthenticationCode := p_MessageAuthenticationCode, + sequenceNumber := p_NAS_SequenceNumber, + plainNASMessage := p_NAS_Message + } + }; + + template (value) PayloadContainer cs_PayloadContainer (template (omit) IEI8_Type p_IEI, + octetstring p_EncodedGSMMsg) := + { /* 24.501 cl. 9.11.3.39 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, + iel := int2oct(lengthof(p_EncodedGSMMsg), 2), + payload := p_EncodedGSMMsg + }; + + //**************************************************************************** + // NAS emulation: auxiliary functions + //---------------------------------------------------------------------------- + /* + * @desc estimate COUNT (in UL) based on SN of received PDU and previous COUNT + * Note: at the beginning COUNT is intialised with 0 as well as the SN at the UE + * => an overflow is assumed when (previous SN > received SN) + * @param p_PrevCount + * @param p_SequenceNumber + * @return NasCount_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_NasSecurity_EstimateCOUNT(NasCount_Type p_PrevCount, + NG_NasEmu_SN p_SequenceNumber) return NasCount_Type + { + var integer v_PrevCountValue := oct2int(p_PrevCount); + var integer v_CountValue; + var integer v_MaxSnPlus1; + var integer v_PrevSnValue; + var integer v_ReceivedSnValue; + var integer v_OverflowCounter; /* Note: for normal (long) SN this is the overflow counter as described in 24.301; + for 5 bit SN it includes the 3 most significant bits of the least significant octet (what normally is the SN) */ + v_ReceivedSnValue := p_SequenceNumber; + v_MaxSnPlus1 := 256; + v_OverflowCounter := v_PrevCountValue / v_MaxSnPlus1; + v_PrevSnValue := v_PrevCountValue mod v_MaxSnPlus1; + + if (v_ReceivedSnValue < v_PrevSnValue) { // => overflow + v_OverflowCounter := (v_OverflowCounter + 1) mod 65536; + } + v_CountValue := (v_OverflowCounter * v_MaxSnPlus1) + v_ReceivedSnValue; + + return int2oct(v_CountValue, 4); + }; + + //**************************************************************************** + // NAS emulation: Encoding/Decoding + //---------------------------------------------------------------------------- + /* + * @desc wrapper function for encvalue + * @param p_NasMessage + * @return bitstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_NasEmu_EncvalueNAS(template (value) NG_NAS_DL_Message_Type p_NasMessage) return bitstring + { + return encvalue(p_NasMessage); + }; + + /* + * @desc wrapper function for decvalue + * @param p_EncodedNasMessage (by reference) + * @param p_NAS_UL_Message (by reference) + * @return integer + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_NasEmu_DecvalueNAS(inout bitstring p_EncodedNasMessage, + out NG_NAS_UL_Message_Type p_NAS_UL_Message) return integer + { + return decvalue(p_EncodedNasMessage, p_NAS_UL_Message); + }; + //---------------------------------------------------------------------------- + /* + * @desc return a the decoded NAS PDU (v_DecodedNasPduUL.Msg) or v_DecodedNasPduUL.Invalid + * @param p_EncodedMsg + * @return NG_NasEmu_DecodedNasPduUL_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_NasEmu_DecodeMsg(octetstring p_EncodedMsg) return NG_NasEmu_DecodedNasPduUL_Type + { + var bitstring v_NasPduBitstring; + var NG_NAS_UL_Message_Type v_NAS_UL_Message; + var NG_NasEmu_DecodedNasPduUL_Type v_DecodedNasPduUL; + + v_NasPduBitstring := oct2bit(p_EncodedMsg); + if (f_NG_NasEmu_DecvalueNAS(v_NasPduBitstring, v_NAS_UL_Message) != 0) { /* v_NasPduBitstring needed as a variable since being 'inout' in decvalue + v_NAS_UL_Message is out parameter i.e. needs not to be initialised */ + f_NasEmulationError(__FILE__, __LINE__, "NAS message cannot be decoded"); + v_DecodedNasPduUL.Invalid := true; + } else { + v_DecodedNasPduUL.Msg := v_NAS_UL_Message; + } + return v_DecodedNasPduUL; + } + + /* + * @desc check whether NAS message contains piggybacked message and decode it + * Note: function is called recursively + * @param p_NAS_UL_Message + * @param p_NasSecurityByRef + * @param p_NasCount + * @return template (omit) NG_NAS_UL_PduList_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_NasEmu_DecodePiggybacked(NG_NAS_UL_Message_Type p_NAS_UL_Message, + NG_NasSecurity_Type p_NasSecurityByRef, + NasCount_Type p_NasCount) return template (omit) NG_NAS_UL_PduList_Type + { + var template (omit) NG_NAS_UL_PduList_Type v_NAS_UL_PduList := omit; + var template (omit) NG_NAS_UL_Pdu_Type v_NAS_UL_Pdu := omit; + var octetstring v_PiggybackedOctetString := ''O; + var octetstring v_CipheredString := ''O; + var octetstring v_NonCleartextString := ''O; // for CP Service Req + var octetstring v_CleartextString := ''O; // for CP Service Req + var NG_NasEmu_DecodedNasPduUL_Type v_DecodedNasPduUL; + + if (ischosen(p_NAS_UL_Message.ul_Nas_Transport)) { + if (p_NAS_UL_Message.ul_Nas_Transport.payloadContainerType.container == tsc_PayloadContainerESMMsg) { // @sic R5w190208 sic@ + // only decode if ESM Msg (other container types must be decoded in test case) + v_PiggybackedOctetString := p_NAS_UL_Message.ul_Nas_Transport.payload.payload; + } + } else if (ischosen(p_NAS_UL_Message.security_Mode_Complete)) { + if (ispresent(p_NAS_UL_Message.security_Mode_Complete.nasMsg)) { + // In this case, the value will be unciphered (as the whole message is ciphered) + v_PiggybackedOctetString := p_NAS_UL_Message.security_Mode_Complete.nasMsg.replayedNASMsgContainerValue; + } + } else if (ischosen(p_NAS_UL_Message.registration_Request)) { + if (ispresent(p_NAS_UL_Message.registration_Request.nasMsg)) { + v_CipheredString := p_NAS_UL_Message.registration_Request.nasMsg.replayedNASMsgContainerValue; + } + } else if (ischosen(p_NAS_UL_Message.service_Request)) { + if (ispresent(p_NAS_UL_Message.service_Request.nasMsg)) { + v_CipheredString := p_NAS_UL_Message.service_Request.nasMsg.replayedNASMsgContainerValue; + } + } else if (ischosen(p_NAS_UL_Message.cp_Service_Request)) { // @sic R5s201387 Baseline Moving sic@ + // This doesn't contain the whole NAS msg, so must be treated separately + if (ispresent(p_NAS_UL_Message.cp_Service_Request.cIoTSmallDataContainer)) { // if this is present, nothing else will be + v_NonCleartextString := p_NAS_UL_Message.cp_Service_Request.cIoTSmallDataContainer.encodedstring; + if (p_NasSecurityByRef.SecurityStarted) { + // if security not started, do nothing and leave piggybacked msg as omit, else... + // Decipher NAS container + v_NonCleartextString := fx_NG_NasDeciphering(v_NonCleartextString, + p_NasSecurityByRef.Ciphering.Algorithm, + p_NasSecurityByRef.Ciphering.K_NAS, + p_NasCount, + p_NasSecurityByRef.BearerId); + // replace this IE with the unciphered version + p_NAS_UL_Message.cp_Service_Request.cIoTSmallDataContainer.encodedstring := v_NonCleartextString; + // now return this whole message as the piggybacked message (all is now decoded and deciphered) + v_NAS_UL_PduList[0].Msg := p_NAS_UL_Message; + v_NAS_UL_PduList[0].PiggybackedPduList := omit; + } + } else if (ispresent(p_NAS_UL_Message.cp_Service_Request.nasMsg)) { + v_NonCleartextString := p_NAS_UL_Message.cp_Service_Request.nasMsg.replayedNASMsgContainerValue; + if (p_NasSecurityByRef.SecurityStarted) { + // if security not started, do nothing and leave piggybacked msg as omit, else... + // Decipher NAS container + v_NonCleartextString := fx_NG_NasDeciphering(v_NonCleartextString, + p_NasSecurityByRef.Ciphering.Algorithm, + p_NasSecurityByRef.Ciphering.K_NAS, + p_NasCount, + p_NasSecurityByRef.BearerId); + // remove this IE from the whole message + p_NAS_UL_Message.cp_Service_Request.nasMsg := omit; + // re-encode the message (now only the cleartext part) + v_CleartextString := bit2oct(encvalue(p_NAS_UL_Message)); + // then put these 2 parts together so the whole message can be decoded + v_PiggybackedOctetString := v_CleartextString & v_NonCleartextString; + } + } + } else { + // NAS message does not contain piggybacked NAS message or decoding must be done in test case + } + + if (lengthof(v_CipheredString) > 0) { + // Only for those initial NAS messages with a ciphered NAS message container + if (p_NasSecurityByRef.SecurityStarted) { + // if security not started, do nothing and leave piggybacked msg as omit, else... + // Decipher complete NAS message + v_PiggybackedOctetString := fx_NG_NasDeciphering(v_CipheredString, + p_NasSecurityByRef.Ciphering.Algorithm, + p_NasSecurityByRef.Ciphering.K_NAS, + p_NasCount, + p_NasSecurityByRef.BearerId); + } + } + + // Now decode piggybacked message, if there is one (or more) + if (lengthof(v_PiggybackedOctetString) > 0) { + + v_DecodedNasPduUL := f_NG_NasEmu_DecodeMsg(v_PiggybackedOctetString); + if (ischosen(v_DecodedNasPduUL.Invalid)) { + // do nothing i.e. keep v_NAS_UL_Pdu as omit + } else { + v_NAS_UL_Pdu.Msg := v_DecodedNasPduUL.Msg; + // recursive call: check whether piggybacked message contains further piggybacked messages + v_NAS_UL_Pdu.PiggybackedPduList := f_NG_NasEmu_DecodePiggybacked(v_DecodedNasPduUL.Msg, p_NasSecurityByRef, p_NasCount); + } + v_NAS_UL_PduList[0] := v_NAS_UL_Pdu; // only one PDU piggybacked considered + } + return v_NAS_UL_PduList; + } + + //---------------------------------------------------------------------------- + /* + * @desc encode piggybacked (GSM) message and add it to the NAS PDU + * Note: if there is a piggybacked GSM message the whole IE of the GMM ie replaced (i.e. not only the octetstring) + * @param p_NAS_DL_Pdu + * @return octetstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_NasEmu_EncodePiggybacked(NG_NAS_DL_Pdu_Type p_NAS_DL_Pdu) return octetstring + { + var template (value) NG_NAS_DL_Message_Type v_NAS_DL_Message := p_NAS_DL_Pdu.Msg; + var NG_NAS_DL_PduList_Type v_PiggybackedPduList; + var NG_NAS_DL_Pdu_Type v_PiggybackedPDU; + var integer v_NoOfPiggybacked; + var octetstring v_EncodedPiggybackedMsg; + + if (ispresent(p_NAS_DL_Pdu.PiggybackedPduList)) { + v_PiggybackedPduList := p_NAS_DL_Pdu.PiggybackedPduList; + v_NoOfPiggybacked := lengthof(v_PiggybackedPduList); + } else { + v_NoOfPiggybacked := 0; + } + + if (v_NoOfPiggybacked > 0) { + v_PiggybackedPDU := v_PiggybackedPduList[0]; + v_EncodedPiggybackedMsg := bit2oct(f_NG_NasEmu_EncvalueNAS(v_PiggybackedPDU.Msg)); + + if (v_NoOfPiggybacked > 1) { + f_NasEmulationError(__FILE__, __LINE__, "number of piggybacked PDUs is > 1 but only one piggy-backed message is considered"); + } + if (ispresent(v_PiggybackedPDU.PiggybackedPduList)) { + f_NasEmulationError(__FILE__, __LINE__, "Only one piggy-backed message is considered"); + /* piggybacking for the piggybacked PDU is ignored */ + } + + if (ischosen(v_NAS_DL_Message.dl_Nas_Transport)) { + v_NAS_DL_Message.dl_Nas_Transport.payload := cs_PayloadContainer(omit, v_EncodedPiggybackedMsg); + + } else { + f_NasEmulationError(__FILE__, __LINE__, "NAS message can not carry piggy-backed NAS PDU"); + /* piggy backed message is ignored */ + } + } + return bit2oct(f_NG_NasEmu_EncvalueNAS(v_NAS_DL_Message)); + } + + //**************************************************************************** + // DL ASP Handling + //---------------------------------------------------------------------------- + /* + * @desc encode and cipher NAS PDU + * @param p_NasSecurityByRef (by reference) + * @param p_NAS_MSG_Request + * @return octetstring + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_EncodeAndCipher_NG_NasPdu(inout NG_NasSecurity_Type p_NasSecurityByRef, + NG_NAS_MSG_Request_Type p_NAS_MSG_Request) return octetstring + { + var SecurityHeaderType v_SecurityStatus := p_NAS_MSG_Request.SecurityProtection.Status; + var boolean v_ForceMacError := p_NAS_MSG_Request.SecurityProtection.ForceMacError; + var octetstring v_EncodedNasPdu; + var NasCount_Type v_CountDL; + var MessageAuthenticationCode v_CalculatedMac; + var NAS_SequenceNumber v_SequenceNumber; + var octetstring v_Octet7toN; + + v_EncodedNasPdu := f_NG_NasEmu_EncodePiggybacked(p_NAS_MSG_Request.Pdu); + + if (v_SecurityStatus != tsc_SHT_NoSecurityProtection) { + + if (not p_NasSecurityByRef.SecurityStarted) { + f_NasEmulationError(__FILE__, __LINE__, "security is not started"); + /* => PDU will not be security protected */ + + } else { + // INCREMENT DL NAS COUNT: + v_CountDL := f_NasSecurity_IncrementCOUNT(p_NasSecurityByRef.NasCount.DL); + p_NasSecurityByRef.NasCount.DL := v_CountDL; + + // APPLY CIPHERING (if necessary): + if ((v_SecurityStatus == tsc_SHT_IntegrityProtected_Ciphered) or + (v_SecurityStatus == tsc_SHT_IntegrityProtected_Ciphered_NewSecurityContext)) { + + v_EncodedNasPdu := fx_NG_NasCiphering(v_EncodedNasPdu, + p_NasSecurityByRef.Ciphering.Algorithm, + p_NasSecurityByRef.Ciphering.K_NAS, + v_CountDL, + p_NasSecurityByRef.BearerId); + } + + // APPLY INTEGRITY PROTECTION: + v_SequenceNumber := f_NasSecurity_ExtractSNfromCOUNT(v_CountDL); + v_Octet7toN := v_SequenceNumber & v_EncodedNasPdu; + v_CalculatedMac := fx_NG_NasIntegrityAlgorithm(v_Octet7toN, + p_NasSecurityByRef.Integrity.Algorithm, + p_NasSecurityByRef.Integrity.K_NAS, + v_CountDL, + p_NasSecurityByRef.BearerId, + tsc_DirectionDL); + + if (v_ForceMacError) { + v_CalculatedMac := not4b v_CalculatedMac; // O4_Type + } + + // build up SECURITY PROTECTED NAS message + v_EncodedNasPdu := bit2oct(f_NG_NasEmu_EncvalueNAS(cs_NG_SecurityProtected_NasMsg(v_SecurityStatus, + v_CalculatedMac, + v_SequenceNumber, + v_EncodedNasPdu))); + } + } + return v_EncodedNasPdu; + } + + //**************************************************************************** + // UL ASP Handling + //---------------------------------------------------------------------------- + + template (value) NG_NAS_MSG_Indication_Type cs_NG_NAS_MSG_Indication(NG_NasSecurity_Type p_NasSecurityByRef, + SecurityHeaderType p_NAS_SecurityStatus, + NasCount_Type p_NasCount, + NG_NAS_UL_Message_Type p_NAS_UL_Message) := + { /* local type templates (uses f_NG_NasEmu_DecodePiggybacked) */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + SecurityProtection:= { + Status := p_NAS_SecurityStatus, + NasCount := p_NasCount + }, + Pdu := { + Msg := p_NAS_UL_Message, + PiggybackedPduList := f_NG_NasEmu_DecodePiggybacked(p_NAS_UL_Message, p_NasSecurityByRef, p_NasCount) + } + }; + + template (value) NG_NAS_MSG_Indication_Type cs_NG_NAS_PDU_Ind(SecurityHeaderType p_NAS_SecurityStatus, + NasCount_Type p_NasCount, + NG_NAS_UL_Message_Type p_NAS_UL_Message, + template (omit) NG_NAS_UL_PduList_Type p_Piggybacked := omit) := + { /* local type templates (used to hold both Registration Reqs) */ + SecurityProtection:= { + Status := p_NAS_SecurityStatus, + NasCount := p_NasCount + }, + Pdu := { + Msg := p_NAS_UL_Message, + PiggybackedPduList := p_Piggybacked + } + }; + + /* + * @desc Decipher and decode NAS PDU + * Notes: + * - When receiving a security protected NAS PDU firstly deceiphering is applied; integrity protection is applied on the deciphered NAS PDU; + * - Deciphering is applied on the encoded NAS PDU only (but not on any other IE of SECURITY PROTECTED NAS MESSAGE) since the SN is used for deciphering; + * - if the NAS PDU is security protected (without error) the UL NAS COUNT is incremented + * @param p_NasSecurityByRef (by reference) + * @param p_NAS_DedicatedInformation + * @return template (value) NG_NasEmu_DecodingInfo_Type + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NG_DecipherAndDecodeNasPdu(inout NG_NasSecurity_Type p_NasSecurityByRef, + octetstring p_NAS_DedicatedInformation) return template (value) NG_NasEmu_DecodingInfo_Type + { + var template (value) NG_NasEmu_DecodingInfo_Type v_DecodingInfo := cs_NG_DecodingInfo_Init; // NasIndication := omit, IntegrityError := false + var NG_NasEmu_DecodedNasPduUL_Type v_DecodedNasPduUL; + var octetstring v_IntegrityProtectedOctets; + var NG_SECURITY_PROTECTED_NAS_MESSAGE v_SecurityProtectedNasMsg; + var MessageAuthenticationCode v_ContainedMac; + var MessageAuthenticationCode v_CalculatedMac; + var NG_NasEmu_SN v_SequenceNumber; + var NG_NAS_Message v_EncodedNasPdu; + var NasCount_Type v_CountUL; + var SecurityHeaderType v_SecurityHeader; + + // Decode NAS message: message is either SECURITY_PROTECTED_NAS_MESSAGE or non-protected NAS message + v_DecodedNasPduUL := f_NG_NasEmu_DecodeMsg(p_NAS_DedicatedInformation); + + if (ischosen(v_DecodedNasPduUL.Invalid)) { + return v_DecodingInfo; // v_DecodingInfo is {omit, false} + } + + if (ischosen(v_DecodedNasPduUL.Msg.security_Protected_Nas_Message)) { // SECURITY_PROTECTED_NAS_MESSAGE + + v_SecurityProtectedNasMsg := v_DecodedNasPduUL.Msg.security_Protected_Nas_Message; + + v_SecurityHeader := v_SecurityProtectedNasMsg.securityHeaderType; + v_ContainedMac := v_SecurityProtectedNasMsg.messageAuthenticationCode; + v_SequenceNumber := oct2int(v_SecurityProtectedNasMsg.sequenceNumber); + v_EncodedNasPdu := v_SecurityProtectedNasMsg.plainNASMessage; + v_CountUL := f_NG_NasSecurity_EstimateCOUNT(p_NasSecurityByRef.NasCount.UL, v_SequenceNumber); + + + if ((not p_NasSecurityByRef.SecurityStarted) and (v_SecurityHeader != tsc_SHT_IntegrityProtected)) { + /* Note: A UE is allowed to transmit a security protected Reg request (Security header set to '0001'B) + * at the initial registration in case the USIM used has a valid security context */ + + f_NasEmulationError(__FILE__, __LINE__, "security protected PDU received but security is not started"); + return v_DecodingInfo; // v_DecodingInfo is {omit, false} + + } else { + if (p_NasSecurityByRef.SecurityStarted) { + + // CHECK INTEGRITY + v_IntegrityProtectedOctets := v_SecurityProtectedNasMsg.sequenceNumber & v_EncodedNasPdu; + v_CalculatedMac := fx_NG_NasIntegrityAlgorithm(v_IntegrityProtectedOctets, + p_NasSecurityByRef.Integrity.Algorithm, + p_NasSecurityByRef.Integrity.K_NAS, + v_CountUL, + p_NasSecurityByRef.BearerId, + tsc_DirectionUL); + if (v_ContainedMac == v_CalculatedMac) { + p_NasSecurityByRef.NasCount.UL := v_CountUL; /* write back the latest count value */ + + } else { + // UL NAS COUNT is not updated in case of integrity error + v_DecodingInfo.IntegrityError := true; + } + + // DECIPHERING: + if ((v_SecurityHeader == tsc_SHT_IntegrityProtected_Ciphered) or + (v_SecurityHeader == tsc_SHT_IntegrityProtected_Ciphered_NewSecurityContext)) { + + v_EncodedNasPdu := fx_NG_NasDeciphering(v_EncodedNasPdu, + p_NasSecurityByRef.Ciphering.Algorithm, + p_NasSecurityByRef.Ciphering.K_NAS, + v_CountUL, + p_NasSecurityByRef.BearerId); + } + } else { + // NAS security not started yet, but e.g. in case of REG REQ + p_NasSecurityByRef.NasCount.UL := v_CountUL; /* write back the latest count value */ + } + // Decode NAS message + v_DecodedNasPduUL := f_NG_NasEmu_DecodeMsg(v_EncodedNasPdu); + if (ischosen(v_DecodedNasPduUL.Invalid)) { + // Do nothing: v_DecodingInfo.NasIndication remains omit + } else { + v_DecodingInfo.NasIndication := cs_NG_NAS_MSG_Indication(p_NasSecurityByRef, + v_SecurityHeader, + v_CountUL, + v_DecodedNasPduUL.Msg); + } + } + } else { // non security protected PDU + v_DecodingInfo.NasIndication := cs_NG_NAS_MSG_Indication(p_NasSecurityByRef, + tsc_SHT_NoSecurityProtection, + p_NasSecurityByRef.NasCount.UL, /* Note: NAS-Count shall be ignored by the test case + in case of non-protected messages */ + v_DecodedNasPduUL.Msg); + } + return v_DecodingInfo; + } + + //**************************************************************************** + // Configuration Handling + //---------------------------------------------------------------------------- + /* + * @desc handle configuration of the NAS emulation (NAS_CTRL_REQ) + * @param p_Port + * @param p_NasSecurityByRef (by reference) + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + altstep a_NG_NasEmu_ConfigurationHandler(NG_NASEMU_CTRL_PORT p_Port, + inout NG_NasSecurity_Type p_NasSecurityByRef) + { + var NG_NAS_CTRL_REQ v_ConfigAsp; + var NasCountInfo_Type v_NasCountInfo; + + [] p_Port.receive(cr_NG_NAS_CTRL_Security_REQ) -> value v_ConfigAsp { /* NAS SECURITY */ + if (ischosen(v_ConfigAsp.Request.Security.StartRestart)) { /* Start NAS Security */ + p_NasSecurityByRef.SecurityStarted := true; + p_NasSecurityByRef.Integrity := v_ConfigAsp.Request.Security.StartRestart.Integrity; + p_NasSecurityByRef.Ciphering := v_ConfigAsp.Request.Security.StartRestart.Ciphering; + if (ispresent(v_ConfigAsp.Request.Security.StartRestart.NasCountReset)) { + p_NasSecurityByRef.NasCount.UL := f_NasCountInit(); + p_NasSecurityByRef.NasCount.DL := f_NasCountInit(); + } + } else { /* Release: Reset NAS Security */ + p_NasSecurityByRef := f_NG_NasEmu_NasSecurity_Init(); + } + if (v_ConfigAsp.Common.ControlInfo.CnfFlag) { + p_Port.send(cs_NG_NAS_CTRL_Security_CNF); + } + } + [] p_Port.receive(cr_NG_NAS_CTRL_NasCount_REQ) -> value v_ConfigAsp { /* NAS COUNT */ + if (ischosen(v_ConfigAsp.Request.NasCount.Set)) { + v_NasCountInfo := v_ConfigAsp.Request.NasCount.Set; + if (ispresent(v_NasCountInfo.UL)) { + p_NasSecurityByRef.NasCount.UL := v_NasCountInfo.UL; + } /* else: keep as it is */ + if (ispresent(v_NasCountInfo.DL)) { + p_NasSecurityByRef.NasCount.DL := v_NasCountInfo.DL; + } /* else: keep as it is */ + if (v_ConfigAsp.Common.ControlInfo.CnfFlag) { + p_Port.send(cs_NG_NAS_CTRL_NasCountSet_CNF); + } + } else if (ischosen(v_ConfigAsp.Request.NasCount.Get)) { + if (v_ConfigAsp.Common.ControlInfo.CnfFlag) { + p_Port.send(cs_NG_NAS_CTRL_NasCountGet_CNF(p_NasSecurityByRef.NasCount)); + } + } + } + } +} diff --git a/ttcn/Lib3GPP/NasEmulation/NG_NasEmu_CtrlAspTypes.ttcn b/ttcn/Lib3GPP/NasEmulation/NG_NasEmu_CtrlAspTypes.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..24a4cca3a144ed37d8167463f271b13b3bd8e570 --- /dev/null +++ b/ttcn/Lib3GPP/NasEmulation/NG_NasEmu_CtrlAspTypes.ttcn @@ -0,0 +1,80 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2018-12-17 17:07:06 +0100 (Mon, 17 Dec 2018) $ +// $Rev: 23499 $ +/******************************************************************************/ + +module NG_NasEmu_CtrlAspTypes { + import from CommonDefs all; + import from NasEmu_Common4G5G all; + + //**************************************************************************** + + //---------------------------------------------------------------------------- + /* Primitive for Configuration and Control of NAS Security */ + // Note: + // In the primitives only the COUNT is handled (rather than SQN and NasOverflowCounter); + // to deal with SQN and NasOverflowCounter there are common TTCN functions: + // function f_EutranNasCount_GetSQN(NasCount_Type p_Count) return integer; + // function f_EutranPdcpCount_GetOverflowCounter(NasCount_Type) return integer; + // function f_EutranPdcpCount_Set(integer p_OverflowCounter, integer p_SQN) return NasCount_Type; + + type record NG_NAS_SecurityInfo_Type { /* ciphering/integrity algorithm and key */ + B4_Type Algorithm, /* acc. to 24.501 cl. 9.10.3.32 NAS security algorithms */ + B128_Key_Type K_NAS /* key acc. 33.501 Figure 6.2-2 (K_NASint, K_NASenc) */ + }; + + type record NG_NAS_SecurityStartRestart_Type { + NG_NAS_SecurityInfo_Type Integrity optional, /* omit: keep integrity protection as it is */ + NG_NAS_SecurityInfo_Type Ciphering optional, /* omit: keep ciphering as it is */ + Null_Type NasCountReset optional /* omit: maintain NAS COUNT */ + }; + + type union NG_NAS_Security_Type { /* to download or reset NAS security algorithms and keys and to reset NAS COUNT; + in DL security protection is applied acc. to the SecurityProtection info of + the NAS_MSG_Request_Type; + in the UL if a security protected NAS PDU is received it is assumed to be ciphered + (this is because the SECURITY MODE COMMAND is already ciphered for NAS); + (Note: if the latter assumption is not applicable, ciphering needs to be started explicitly); + the NAS emulation shall distinguish between security protected and non-security protected NAS PDUs */ + NG_NAS_SecurityStartRestart_Type StartRestart, + Null_Type Release + }; + + type union NG_NasCtrlRequest_Type { + NG_NAS_Security_Type Security, /* StartRestart/Release of NAS security */ + NAS_CountReq_Type NasCount /* to set or enquire NAS COUNT */ + }; + + type record NG_NAS_CTRL_REQ { + NasCtrlReqAspCommonPart_Type Common, + NG_NasCtrlRequest_Type Request + }; + + type record NG_NAS_CTRL_CNF { + NasCtrlCnfAspCommonPart_Type Common, + NasCtrlConfirm_Type Confirm + }; + + //**************************************************************************** + + // group Port_Definitions { + + // type port NG_NASCTRL_PORT message { /* EUTRA/NR PTC: Port for configuration of NAS emulation */ + // out NG_NAS_CTRL_REQ; + // in NG_NAS_CTRL_CNF; + // }; + + // type port NG_NASEMU_CTRL_PORT message { /* NASEMU PTC: Port for configuration of NAS emulation */ + // out NG_NAS_CTRL_CNF; + // in NG_NAS_CTRL_REQ; + // }; + + // } // End group Port_Definitions + +} diff --git a/ttcn/Lib3GPP/NasEmulation/NG_NasEmu_CtrlFunctions.ttcn b/ttcn/Lib3GPP/NasEmulation/NG_NasEmu_CtrlFunctions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..59880e5daf75d04668ea2029138b0aa6e1671c5b --- /dev/null +++ b/ttcn/Lib3GPP/NasEmulation/NG_NasEmu_CtrlFunctions.ttcn @@ -0,0 +1,211 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-03-20 03:51:00 +0100 (Sun, 20 Mar 2022) $ +// $Rev: 32851 $ +/******************************************************************************/ + +module NG_NasEmu_CtrlFunctions { + import from CommonDefs all; + import from NG_NasEmu_CtrlAspTypes all; + import from NasEmu_Common4G5G all; + + //**************************************************************************** + // Configuration of NAS security + //---------------------------------------------------------------------------- + + template (value) NG_NAS_SecurityStartRestart_Type cs_NG_NAS_SecurityInit(B4_Type p_IntegrityAlgorithm, + B128_Key_Type p_K_NASint, + B4_Type p_CipheringAlgorithm, + B128_Key_Type p_K_NASenc, + template (omit) Null_Type p_NasCountReset := true) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Integrity := { + Algorithm := p_IntegrityAlgorithm, + K_NAS := p_K_NASint + }, + Ciphering := { + Algorithm := p_CipheringAlgorithm, + K_NAS := p_K_NASenc + }, + NasCountReset := p_NasCountReset + }; + + template (value) NG_NAS_CTRL_REQ cas_NG_NasSecurityStart_REQ(template (value) NG_NAS_SecurityStartRestart_Type p_SecurityStartRestart) := + { /* Note: NAS security seems to be cell independent */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Common := cs_NasCtrlReqAspCommonPart, + Request := { + Security := { + StartRestart := p_SecurityStartRestart + } + } + }; + + template (value) NG_NAS_CTRL_REQ cas_NG_NasSecurityRelease_REQ := + { /* @status APPROVED (NR5GC) */ + /* Note: NAS security is cell independent */ + Common := cs_NasCtrlReqAspCommonPart, + Request := { + Security := { + Release := true + } + } + }; + + template (present) NG_NAS_CTRL_CNF car_NG_NasSecurity_CNF := + { /* Note: NAS security seems to be cell independent */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Common := cr_NasCtrlCnfAspCommonPart, + Confirm := { + Security := true + } + }; + + //**************************************************************************** + // Dealing with DL NAS COUNT + //---------------------------------------------------------------------------- + + template (value) NG_NAS_CTRL_REQ cas_NG_NasCountGet_REQ := + { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + Common := cs_NasCtrlReqAspCommonPart, + Request := { + NasCount := { + Get := true + } + } + }; + + template (present) NG_NAS_CTRL_CNF car_NG_NasCountGet_CNF := + { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + Common := cr_NasCtrlCnfAspCommonPart, + Confirm := { + NasCount := { + Get := { + UL := ?, + DL := ? + } + } + } + }; + + template (value) NG_NAS_CTRL_REQ cas_NG_NasCountSet_REQ(template (omit) NasCount_Type p_NASULCount, + template (omit) NasCount_Type p_NASDLCount) := + { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + Common := cs_NasCtrlReqAspCommonPart, + Request := { + NasCount := { + Set := { + UL := p_NASULCount, + DL := p_NASDLCount + } + } + } + }; + + template (present) NG_NAS_CTRL_CNF car_NG_NasCountSet_CNF := + { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + Common := cr_NasCtrlCnfAspCommonPart, + Confirm := { + NasCount := { + Set := true + } + } + }; + + //**************************************************************************** + /* + * @desc Common function to configure NAS security + * @param p_Port + * @param p_NAS_CTRL_REQ + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_SS_NG_NAS_SecurityConfig(NG_NASCTRL_PORT p_Port, + template (value) NG_NAS_CTRL_REQ p_NAS_CTRL_REQ) + { + p_Port.send(p_NAS_CTRL_REQ); + if (valueof(p_NAS_CTRL_REQ.Common.ControlInfo.CnfFlag) == true) { + p_Port.receive(car_NG_NasSecurity_CNF); + } + } + + //---------------------------------------------------------------------------- + /* + * @desc configure NAS security at the NasEmu + * @param p_Port + * @param p_NAS_Integrity + * @param p_NAS_Ciphering + * @param p_NasCountReset (default value: true) + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_SS_NG_NAS_ConfigureSecurity(NG_NASCTRL_PORT p_Port, + NG_NAS_SecurityInfo_Type p_NAS_Integrity, + NG_NAS_SecurityInfo_Type p_NAS_Ciphering, + template (omit) Null_Type p_NasCountReset := true) + { + f_SS_NG_NAS_SecurityConfig(p_Port, + cas_NG_NasSecurityStart_REQ(cs_NG_NAS_SecurityInit(p_NAS_Integrity.Algorithm, + p_NAS_Integrity.K_NAS, + p_NAS_Ciphering.Algorithm, + p_NAS_Ciphering.K_NAS, + p_NasCountReset))); + } + + //---------------------------------------------------------------------------- + /* + * @desc common function to query NAS COUNT from the NAS emulator + * @param p_Port + * @return NasCountInfo_Type + * @status APPROVED (NR5GC, NR5GC_IRAT) + */ + function f_SS_NG_NAS_CountGet(NG_NASCTRL_PORT p_Port) return NasCountInfo_Type + { + var NG_NAS_CTRL_CNF v_NG_NAS_CTRL_CNF; + + p_Port.send(cas_NG_NasCountGet_REQ); + p_Port.receive(car_NG_NasCountGet_CNF) -> value v_NG_NAS_CTRL_CNF; + return v_NG_NAS_CTRL_CNF.Confirm.NasCount.Get; + } + + //---------------------------------------------------------------------------- + /* + * @desc common function to set NAS COUNT at the NAS emulator + * @param p_Port + * @param p_NASDLCount + * @param p_NASULCount (default value: omit) + * @status APPROVED (NR5GC, NR5GC_IRAT) + */ + function f_SS_NG_NAS_CountSet(NG_NASCTRL_PORT p_Port, + template (omit) NasCount_Type p_NASDLCount, + template (omit) NasCount_Type p_NASULCount := omit) + { + p_Port.send(cas_NG_NasCountSet_REQ(p_NASULCount, p_NASDLCount)); + p_Port.receive(car_NG_NasCountSet_CNF); + } + + /* + * @desc function to query DL NAS COUNT from the NAS emulator // @sic R5s110382 sic@ + * @param p_Port + * @return O4_Type + */ + function f_SS_NG_NAS_CountGetDLNext(NG_NASCTRL_PORT p_Port) return O4_Type + { + var NasCountInfo_Type v_NasCountInfo := f_SS_NG_NAS_CountGet(p_Port); + return f_NasSecurity_IncrementCOUNT(v_NasCountInfo.DL); + } + + /* + * @desc function to query UL NAS COUNT from the NAS emulator + * @param p_Port + * @return O4_Type + */ + function f_SS_NG_NAS_CountGetULNext(NG_NASCTRL_PORT p_Port) return O4_Type + { + var NasCountInfo_Type v_NasCountInfo := f_SS_NG_NAS_CountGet(p_Port); + return f_NasSecurity_IncrementCOUNT(v_NasCountInfo.UL); + } +} diff --git a/ttcn/Lib3GPP/NasEmulation/NG_SecurityDefinitionsAndExternalFunctions.ttcn b/ttcn/Lib3GPP/NasEmulation/NG_SecurityDefinitionsAndExternalFunctions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..c5292528d7aecc59d95ea48ce11f8a685425ecfe --- /dev/null +++ b/ttcn/Lib3GPP/NasEmulation/NG_SecurityDefinitionsAndExternalFunctions.ttcn @@ -0,0 +1,37 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2018-12-01 16:37:27 +0100 (Sat, 01 Dec 2018) $ +// $Rev: 23218 $ +/******************************************************************************/ + +module NG_SecurityDefinitionsAndExternalFunctions { + + import from CommonDefs all; + + //============================================================================ + external function fx_NG_NasIntegrityAlgorithm(octetstring p_EncodedNasPdu, + B4_Type p_IntegrityAlgorithm, + B128_Key_Type p_KNASint, + NasCount_Type p_NasCount, + B5_Type p_BearerId, + MAC_Direction_Type p_Direction) return MessageAuthenticationCode; + + external function fx_NG_NasCiphering(octetstring p_EncodedNasPdu, + B4_Type p_CipheringAlgorithm, + B128_Key_Type p_KNASenc, + NasCount_Type p_NasCount, + B5_Type p_BearerId) return octetstring; + + external function fx_NG_NasDeciphering(octetstring p_CipheredNasMsg, + B4_Type p_CipheringAlgorithm, + B128_Key_Type p_KNASenc, + NasCount_Type p_NasCount, + B5_Type p_BearerId) return octetstring; + + //---------------------------------------------------------------------------- +} diff --git a/ttcn/Lib3GPP/NasEmulation/NasEmu5G_AspTypes_NR.ttcn b/ttcn/Lib3GPP/NasEmulation/NasEmu5G_AspTypes_NR.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..589338231fb6676c7d702b9dc892c890102c44fc --- /dev/null +++ b/ttcn/Lib3GPP/NasEmulation/NasEmu5G_AspTypes_NR.ttcn @@ -0,0 +1,58 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2019-05-29 17:47:16 +0200 (Wed, 29 May 2019) $ +// $Rev: 24710 $ +/******************************************************************************/ + +module NasEmu5G_AspTypes_NR { + import from NR_CommonDefs all; + + group System_Interface { + + //**************************************************************************** + // ASP Type Definitions: + //**************************************************************************** + + type record NR_RRC_PDU_REQ { + NR_ReqAspCommonPart_Type Common, /* CellId : identifier of the cell + * RoutingInfo : SRB0, SRB1, SRB2 + * RlcBearerRouting : TTCN provides the id of the cell in which the SS shall send the data out to the UE (for non-split bearers in general same as CellId) + * TimingInfo : Now in normal cases; + * For latency tests TimingInfo can be set to the SFN/subframe in which the RRC messages shall be sent out + * NOTE 1: if the RRC PDU is too long to be sent in one TTI the TimingInfo corresponds to the first TTI + * NOTE 2: the TimingInfo is not changed by the NAS Emu (i.e. the timing info as coming from the test case (SRB_COMMON_REQ) is handed through by the NAS Emu) + * ControlInfo + * CnfFlag:=false; + * FollowOnFlag + * true: Indicates that the message(s) to be sent on the same TTI will follow + * NOTE 1: If the TimingInfo is not the same for messages to be sent on the same TTI, the SS shall produce an error + * NOTE 2: the follow on flag applies only for messages of the same SRB + * false: Indicates that no more message(s) will follow */ + NR_RRC_MSG_Request_Type RrcPdu + }; + type record NR_RRC_PDU_IND { /* common ASP to receive PDUs from SRB0, SRB1 or SRB2 */ + NR_IndAspCommonPart_Type Common, /* CellId : identifier of the cell + * RoutingInfo : SRB0, SRB1, SRB2 + * RlcBearerRouting : The SS shall provide the id of the cell in which the data has been sent from the UE + * TimingInfo : time when message has been received (frame and sub-frame number); this is handed through to the test case by the NAS emulation + * NOTE: normally an RRC PDU is expected in one TTI; nevertheless if it is spread over more than one TTIs TimingInfo shall refer to the end of the PDU i.e. to the last RLC PDU being received; + * Status : OK or RRC integrity error */ + NR_RRC_MSG_Indication_Type RrcPdu + }; + + //**************************************************************************** + // Port definitions + //**************************************************************************** + + type port NASEMU_NR_SYSTEM_PORT message { /* NASEMU PTC: Port for Sending/Receiving data to/from the SYSTEM Interface */ + out NR_RRC_PDU_REQ; + in NR_RRC_PDU_IND; + }; + + } // End group System_Interface +} diff --git a/ttcn/Lib3GPP/NasEmulation/NasEmu5G_Component_NRNG.ttcn b/ttcn/Lib3GPP/NasEmulation/NasEmu5G_Component_NRNG.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..e56daa9a2d3a7edfa514a4a8c60752d3562c1c0f --- /dev/null +++ b/ttcn/Lib3GPP/NasEmulation/NasEmu5G_Component_NRNG.ttcn @@ -0,0 +1,53 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2021-03-20 15:05:59 +0100 (Sat, 20 Mar 2021) $ +// $Rev: 30244 $ +/******************************************************************************/ + +module NasEmu5G_Component_NRNG { + import from NG_NasEmu_CtrlAspTypes all; + import from NasEmu5G_Component_NR_BASE all; + import from NR_Component_NR5GC all; + import from NasEmu_Common4G5G all; + + //---------------------------------------------------------------------------- + // Component definition: + type component NASEMU_NRNG_PTC extends NASEMU_NR_BASE_PTC { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + port NG_NASEMU_CTRL_PORT CTRL; + port NASEMU5G_CO_ORD_PORT EPS; + }; + + //---------------------------------------------------------------------------- + /* + * @desc Create NASEMU, connect it with NR5G PTC and map the system ports + * @param p_System + * @param p_Nr + * @return NASEMU_NRNG_PTC + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NasEmu5G_CreateConnectAndMap_NRNG(NASEMU_NR_SYSTEM p_System, + NR5GC_PTC p_Nr) return NASEMU_NRNG_PTC + { + var NASEMU_NRNG_PTC v_NASEMU_NRNG_PTC := null; + + if (p_Nr != null) { + + // create NAS emulation: + v_NASEMU_NRNG_PTC := NASEMU_NRNG_PTC.create("NASEMU_NRNG") alive; // @sic R5s210270 sic@ + + // connect NAS emulation: + connect(p_Nr:NASCTRL, v_NASEMU_NRNG_PTC:CTRL); + connect(p_Nr:SRB, v_NASEMU_NRNG_PTC:TC_SRB); + + // map NASEMU system ports: + map(v_NASEMU_NRNG_PTC:SYS_SRB, p_System:NR_SRB); + } + return v_NASEMU_NRNG_PTC; + } + +} diff --git a/ttcn/Lib3GPP/NasEmulation/NasEmu5G_Component_NR_BASE.ttcn b/ttcn/Lib3GPP/NasEmulation/NasEmu5G_Component_NR_BASE.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6e17d7106fb98d4e87a2a6ce1730fcac499eb044 --- /dev/null +++ b/ttcn/Lib3GPP/NasEmulation/NasEmu5G_Component_NR_BASE.ttcn @@ -0,0 +1,55 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2021-03-20 15:05:59 +0100 (Sat, 20 Mar 2021) $ +// $Rev: 30244 $ +/******************************************************************************/ + +module NasEmu5G_Component_NR_BASE { + import from NR_ASP_SrbDefs all; + import from NasEmu5G_AspTypes_NR all; + import from NR_Component_Base all; + + //---------------------------------------------------------------------------- + // Component definition: + type component NASEMU_NR_BASE_PTC { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + port NASEMU_NR_SYSTEM_PORT SYS_SRB; + port NASEMU_NR_SRB_PORT TC_SRB; + }; + + type component NASEMU_NR_SYSTEM { /* @status APPROVED (ENDC, IMS, NR5GC, NR5GC_IRAT, POS) */ + port NASEMU_NR_SYSTEM_PORT NR_SRB; + }; + + //---------------------------------------------------------------------------- + /* + * @desc Create NASEMU, connect it with NR5G PTC and map the system ports + * @param p_System + * @param p_NR_BASE + * @return NASEMU_NR_BASE_PTC + * @status APPROVED (ENDC) + */ + function f_NasEmu5G_CreateConnectAndMap_NR_BASE(NASEMU_NR_SYSTEM p_System, + NR_BASE_PTC p_NR_BASE) return NASEMU_NR_BASE_PTC + { + var NASEMU_NR_BASE_PTC v_NASEMU_NR_BASE_PTC := null; + + if (p_NR_BASE != null) { + + // create NAS emulation: + v_NASEMU_NR_BASE_PTC := NASEMU_NR_BASE_PTC.create("NASEMU_NR_BASE") alive; // @sic R5s210270 sic@ + + // connect NAS emulation: + connect(p_NR_BASE:SRB, v_NASEMU_NR_BASE_PTC:TC_SRB); + + // map NASEMU system ports: + map(v_NASEMU_NR_BASE_PTC:SYS_SRB, p_System:NR_SRB); + } + return v_NASEMU_NR_BASE_PTC; + } + +} diff --git a/ttcn/Lib3GPP/NasEmulation/NasEmu5G_Main_NRNG.ttcn b/ttcn/Lib3GPP/NasEmulation/NasEmu5G_Main_NRNG.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..155c5d902ecb0a368720e540b22aa29552bb22e9 --- /dev/null +++ b/ttcn/Lib3GPP/NasEmulation/NasEmu5G_Main_NRNG.ttcn @@ -0,0 +1,331 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2021-04-28 17:21:30 +0200 (Wed, 28 Apr 2021) $ +// $Rev: 30488 $ +/******************************************************************************/ + +module NasEmu5G_Main_NRNG { + import from NR_RRC_ASN1_Definitions language "ASN.1:2002" all with {encode "UNALIGNED_PER_OctetAligned"}; + import from NR_CommonDefs all; + import from NR_ASP_SrbDefs all; + import from NasEmu_Common4G5G all; + import from Common4G5G_Templates all; + import from NasEmu5G_AspTypes_NR all; + import from NasEmu5G_Component_NRNG all; + import from NasEmu5G_Component_NR_BASE all; + import from NG_NasEmu_Common all; + import from NG_NAS_MsgContainers all; + import from NR_RRC_Templates all; + import from CommonDefs all; + import from NG_SecurityDefinitionsAndExternalFunctions all; + + //---------------------------------------------------------------------------- + + template (present) NR_SRB_COMMON_REQ car_NRNG_SignallingAspFromTC := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Common := ?, + Signalling := { + Rrc := *, + Nas := * + } + }; + + template (value) NR_SRB_COMMON_IND cas_NRNG_SignallingAspToTC(template (value) NR_IndAspCommonPart_Type p_Common, + template (omit) NR_RRC_MSG_Indication_Type p_RrcMsg := omit, + template (omit) NG_NAS_MSG_IndicationList_Type p_NasMsg := omit) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Common := p_Common, + Signalling := { + Rrc := p_RrcMsg, + Nas := p_NasMsg + } + }; + + //---------------------------------------------------------------------------- + + template (present) NR_RRC_PDU_IND car_NRNG_PduFromSYS := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Common := ?, + RrcPdu := ? + }; + + template (value) NR_RRC_PDU_REQ cas_NRNG_PduToSYS(template (value) NR_ReqAspCommonPart_Type p_Common, + template (value) NR_RRC_MSG_Request_Type p_RRC_MSG_Request) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Common := p_Common, + RrcPdu := p_RRC_MSG_Request + }; + + template (value) NR_RRC_MSG_Request_Type cs_NR_RRC_MSG_RequestDCCH(template (value) DL_DCCH_Message p_DcchRrcPdu) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + Dcch := p_DcchRrcPdu + }; + + //**************************************************************************** + // Templates: RRC Signalling + //---------------------------------------------------------------------------- + // DLInformationTransfer (38.331 cl. 6.2.2) + + template (value) DL_DCCH_Message cs_NR_DLInformationTransfer(RRC_TransactionIdentifier p_RRC_TI, + template (value) DedicatedNAS_Message p_NAS_DedicatedMsg) := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + message_ := { + c1 := { + dlInformationTransfer := { + rrc_TransactionIdentifier := p_RRC_TI, + criticalExtensions := { + dlInformationTransfer := { + dedicatedNAS_Message := p_NAS_DedicatedMsg, + lateNonCriticalExtension := omit, + nonCriticalExtension := omit + } + } + } + } + } + }; + + template (value) RRCReconfiguration_v1530_IEs cs_38508_RRCReconfiguration_NonCriticalExtension_AllOmit := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + masterCellGroup := omit, + fullConfig := omit, + dedicatedNAS_MessageList := omit, + masterKeyUpdate := omit, + dedicatedSIB1_Delivery := omit, + dedicatedSystemInformationDelivery := omit, + otherConfig := omit, + nonCriticalExtension := omit + }; + //---------------------------------------------------------------------------- + /* + * @desc Handling of ASPs coming from the test cases + * @param p_NG_NasSecurityByRef (by reference) + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + altstep a_AspFromTestcaseHandler_NRNG(inout NG_NasSecurity_Type p_NG_NasSecurityByRef) runs on NASEMU_NR_BASE_PTC + { + var NR_SRB_COMMON_REQ v_AspFromTC; + var NR_ReqAspCommonPart_Type v_ReqAspCommonPart; + var template (value) NR_RRC_MSG_Request_Type v_RrcPduToSYS; + var NG_NAS_MSG_Request_Type v_NG_NasPduFromTC; + var template (value) DL_DCCH_Message v_DL_DCCH_Message; + var DedicatedNAS_Message v_NAS_DedicatedMsg[maxDRB]; // we use an array as long as this is an inline type definition in ASN.1 + var integer v_NoOfNasPdus := 0; + var boolean v_RrcPduIsPresent; + var boolean v_NasPduIsPresent; + var integer I; + + [] TC_SRB.receive(car_NRNG_SignallingAspFromTC) -> value v_AspFromTC { + + v_ReqAspCommonPart := v_AspFromTC.Common; + v_RrcPduIsPresent := ispresent(v_AspFromTC.Signalling.Rrc); + v_NasPduIsPresent := ispresent(v_AspFromTC.Signalling.Nas); + + if (v_NasPduIsPresent) { + // Note: in case of RRCReconfiguration there may be more than one NAS PDUs + v_NoOfNasPdus := lengthof(v_AspFromTC.Signalling.Nas); // Note: per ASN.1 definition length is restricted to maxDRB + for (I:=0; I < v_NoOfNasPdus; I:= I + 1) { + v_NG_NasPduFromTC := v_AspFromTC.Signalling.Nas[I]; + v_NAS_DedicatedMsg[I] := f_EncodeAndCipher_NG_NasPdu(p_NG_NasSecurityByRef, v_NG_NasPduFromTC); // encode NAS PDU; apply NAS security (if reqired) + } + } + if (v_RrcPduIsPresent) { + // ******* RRC PDU (containing RRC control information) + v_RrcPduToSYS := v_AspFromTC.Signalling.Rrc; + + if (v_NasPduIsPresent) { + // ***** NAS PDU BEING PIGGY BACKED + if (not ischosen(v_RrcPduToSYS.Dcch)) { + // ***** SRB0 + f_NasEmulationError(__FILE__, __LINE__, "no piggy-backing possible for CCCH message"); + return; /* don't send anything */ + + } else { + // ***** SRB1/2/3 + v_DL_DCCH_Message := v_RrcPduToSYS.Dcch; /* extract RRC message; + Note: since v_RrcPduToSYS is a union v_RrcPduToSYS.Dcch is never omit */ + + if (ischosen(v_DL_DCCH_Message.message_.c1.rrcReconfiguration)) { /* RRC message is RRCConnectionReconfiguration */ + // *** RRC RECONFIGURATION: + if ((v_NoOfNasPdus > 0) and not isvalue(v_DL_DCCH_Message.message_.c1.rrcReconfiguration.criticalExtensions.rrcReconfiguration.nonCriticalExtension)) { // @sic R5s210463 sic@ + v_DL_DCCH_Message.message_.c1.rrcReconfiguration.criticalExtensions.rrcReconfiguration.nonCriticalExtension := cs_38508_RRCReconfiguration_NonCriticalExtension_AllOmit; + } + for (I:=0; I < v_NoOfNasPdus; I:= I + 1) { + v_DL_DCCH_Message.message_.c1.rrcReconfiguration.criticalExtensions.rrcReconfiguration.nonCriticalExtension.dedicatedNAS_MessageList[I] := + v_NAS_DedicatedMsg[I]; + } + + } else if (ischosen(v_DL_DCCH_Message.message_.c1.dlInformationTransfer)) { // RRC message is DLInformationTransfer + // *** DL INFORMATION TRANSFER: + if (v_NoOfNasPdus > 1) { + f_NasEmulationError(__FILE__, __LINE__, "too many NAS PDUs (shall be a maximun of 1 PDU for DLInformationTransfer)"); + return; // don't send anything + } else { + v_DL_DCCH_Message.message_.c1.dlInformationTransfer.criticalExtensions.dlInformationTransfer.dedicatedNAS_Message := + v_NAS_DedicatedMsg[0]; + } + } else { + // *** OTHER RRC PDU: + f_NasEmulationError(__FILE__, __LINE__, "RRC message can not carry piggy-backed NAS PDU"); + return; /* don't do anything else */ + } + v_RrcPduToSYS := cs_NR_RRC_MSG_RequestDCCH(v_DL_DCCH_Message); + } + } + } else { + // ******* NAS PDU only: + if (not v_NasPduIsPresent) { + f_NasEmulationError(__FILE__, __LINE__, "neither RRC nor NAS PDU to be sent"); + return; /* don't send anything */ + } else { + if (v_NoOfNasPdus > 1) { + f_NasEmulationError(__FILE__, __LINE__, "too many NAS PDUs (shall be a maximun of 1 PDU for DLInformationTransfer)"); + return; /* don't send anything */ + } else { + v_RrcPduToSYS := cs_NR_RRC_MSG_RequestDCCH(cs_NR_DLInformationTransfer(tsc_NR_RRC_TI_Def, v_NAS_DedicatedMsg[0])); + } + } + } + + SYS_SRB.send(cas_NRNG_PduToSYS(v_ReqAspCommonPart, v_RrcPduToSYS)); + } + } + + //---------------------------------------------------------------------------- + /* + * @desc handling of ASPs containing an RRC PDU from the system adaptor + * @param p_NG_NasSecurityByRef (by reference) + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + altstep a_AspFromSystemAdaptorHandler_NRNG(inout NG_NasSecurity_Type p_NG_NasSecurityByRef) runs on NASEMU_NR_BASE_PTC + { + var NR_RRC_PDU_IND v_AspFromSYS; + var NR_RRC_MSG_Indication_Type v_RrcIndication; + var UL_DCCH_Message v_RrcPdu; + var ULInformationTransfer_IEs v_ULInformationTransfer; + var template (value) NR_SRB_COMMON_IND v_SRB_COMMON_IND; + var template (value) NG_NasEmu_DecodingInfo_Type v_DecodingInfo; + var DedicatedNAS_Message v_NAS_DedicatedMsg[maxDRB]; // even though there is always only one we use an array + var integer v_NoOfNasPdus; + var boolean v_RrcPduPresent; + var boolean v_IntegrityError; + var integer I; + + [] SYS_SRB.receive(car_NRNG_PduFromSYS) -> value v_AspFromSYS { + v_RrcIndication := v_AspFromSYS.RrcPdu; + v_SRB_COMMON_IND := cas_NRNG_SignallingAspToTC(v_AspFromSYS.Common); + + if (ischosen(v_RrcIndication.Ccch) or ischosen(v_RrcIndication.Ccch1)) { /* CCCH -> SRB0 */ + //@sic R5s191051 sic@ + v_SRB_COMMON_IND.Signalling.Rrc := v_RrcIndication; + + } else { /* DCCH -> SRB1/2/3 */ + v_RrcPdu := v_RrcIndication.Dcch; + v_RrcPduPresent := true; + v_NoOfNasPdus := 0; + v_IntegrityError := false; + + if (ischosen(v_RrcPdu.message_.c1)) { + + if (ischosen(v_RrcPdu.message_.c1.rrcSetupComplete)) { + // RRC SETUP COMPLETE + if (ischosen(v_RrcPdu.message_.c1.rrcSetupComplete.criticalExtensions.rrcSetupComplete)) { + v_NAS_DedicatedMsg[0] := v_RrcPdu.message_.c1.rrcSetupComplete.criticalExtensions.rrcSetupComplete.dedicatedNAS_Message; + v_NoOfNasPdus := 1; + } + + } else if (ischosen(v_RrcPdu.message_.c1.ulInformationTransfer)) { + // UL INFORMATION TRANSFER + if (ischosen(v_RrcPdu.message_.c1.ulInformationTransfer.criticalExtensions.ulInformationTransfer)) { + v_ULInformationTransfer := v_RrcPdu.message_.c1.ulInformationTransfer.criticalExtensions.ulInformationTransfer; + v_NAS_DedicatedMsg[0] := v_ULInformationTransfer.dedicatedNAS_Message; + v_RrcPduPresent := false; + v_NoOfNasPdus := 1; + } + } else if (ischosen(v_RrcPdu.message_.c1.rrcResumeComplete)) { + // RRC RESUME COMPLETE + if (ispresent(v_RrcPdu.message_.c1.rrcResumeComplete.criticalExtensions.rrcResumeComplete.dedicatedNAS_Message)) { // @sic R5s190214 sic@ + v_NAS_DedicatedMsg[0] := v_RrcPdu.message_.c1.rrcResumeComplete.criticalExtensions.rrcResumeComplete.dedicatedNAS_Message; + v_NoOfNasPdus := 1; + } + } else { + // OTHER RRC PDU + } + } else { // c1 only option at the moment + } + + if (v_RrcPduPresent) { + v_SRB_COMMON_IND.Signalling.Rrc := v_RrcIndication; + } + if (v_NoOfNasPdus > 0) { + for (I := 0; I < v_NoOfNasPdus; I := I + 1) { + v_DecodingInfo := f_NG_DecipherAndDecodeNasPdu(p_NG_NasSecurityByRef, v_NAS_DedicatedMsg[I]); + v_SRB_COMMON_IND.Signalling.Nas[I] := v_DecodingInfo.NasIndication; // omit if message cannot be decoded => shall lead to a test case error + v_IntegrityError := v_IntegrityError or valueof(v_DecodingInfo.IntegrityError); // valueof cannot be avoided here + } + if (v_IntegrityError) { // set Error choice of common part only if there is an error + if (ischosen(v_SRB_COMMON_IND.Common.Status.Error)) { /* there is already an error flagged by the SA */ + v_SRB_COMMON_IND.Common.Status.Error.Integrity.Nas := true; + } else { /* the error needs to be set */ + v_SRB_COMMON_IND.Common.Status := cs_IndicationStatus_NasIntegrityError; + } + } + } + } + TC_SRB.send(v_SRB_COMMON_IND); + } + } + + /* + * @desc Handling of NAS integrity returning the calculated MAC + * @param p_NasSecurityByRef (by reference) + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + altstep a_Check4GIntegrity (inout NG_NasSecurity_Type p_NasSecurityByRef) runs on NASEMU_NRNG_PTC + { + var NASEmu_CoOrd_REQ v_ReceivedMsg; + var NasCount_Type v_CountUL; + var MessageAuthenticationCode v_CalculatedMac; + + [] EPS.receive(cr_NASEmu_CoOrd_REQ) -> value v_ReceivedMsg + { + v_CountUL := f_NG_NasSecurity_EstimateCOUNT(p_NasSecurityByRef.NasCount.UL, v_ReceivedMsg.SequenceNumber); + v_CalculatedMac := fx_NG_NasIntegrityAlgorithm(v_ReceivedMsg.IntegrityProtectedOctets, + p_NasSecurityByRef.Integrity.Algorithm, + p_NasSecurityByRef.Integrity.K_NAS, + v_CountUL, + p_NasSecurityByRef.BearerId, + tsc_DirectionUL); + EPS.send(cs_NASEmu_CoOrd_CNF (v_CalculatedMac)); + } + } + + //**************************************************************************** + // Main Loop + //---------------------------------------------------------------------------- + /* + * @desc NAS emulation main loop (started by the MTC) + * @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) + */ + function f_NASEMU_MainLoop_NRNG() runs on NASEMU_NRNG_PTC + { + var NG_NasSecurity_Type v_NG_NasSecurityByRef := f_NG_NasEmu_NasSecurity_Init(); + while (true) { + alt { + [] a_NG_NasEmu_ConfigurationHandler(CTRL, v_NG_NasSecurityByRef); + [] a_AspFromTestcaseHandler_NRNG(v_NG_NasSecurityByRef); + [] a_AspFromSystemAdaptorHandler_NRNG(v_NG_NasSecurityByRef); + [] a_Check4GIntegrity(v_NG_NasSecurityByRef); // @sic 5G Integrity in 4G sic@ + [] any port.receive { + f_NasEmulationError(__FILE__, __LINE__, "unexpected message (skipped)"); + repeat; + } + } + } + } +} diff --git a/ttcn/Lib3GPP/NasEmulation/NasEmu_Common4G5G.ttcn b/ttcn/Lib3GPP/NasEmulation/NasEmu_Common4G5G.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..7d01bfbc83d5ff504a2608ef9d65b574effa17b0 --- /dev/null +++ b/ttcn/Lib3GPP/NasEmulation/NasEmu_Common4G5G.ttcn @@ -0,0 +1,192 @@ +/******************************************************************************/ +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2022-06-15 13:04:40 +0200 (Wed, 15 Jun 2022) $ +// $Rev: 33645 $ +/******************************************************************************/ + +module NasEmu_Common4G5G { + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + + //**************************************************************************** + // NAS emulation: Common Control ASPs + //---------------------------------------------------------------------------- + type record NasCtrlReqAspControlInfo_Type { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + boolean CnfFlag + }; + + type record NasCtrlReqAspCommonPart_Type { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + NasCtrlReqAspControlInfo_Type ControlInfo + }; + + type record NasCtrlCnfAspCommonPart_Type { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + // place holder only + }; + + type record NasCountInfo_Type { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + NasCount_Type UL optional, /* UL NAS COUNT is the value corresponding to the latest PDU sent by the UE; + acc. 24.301 cl. 4.4.3.1 at the UE the NAS COUNT is initialised with 0; + => in TTCN (NAS emulation) NAS COUNT is initialised with its max. value; + omit: keep as it is */ + NasCount_Type DL optional /* DL NAS COUNT is the value corresponding to the latest PDU sent to the UE; + acc. 24.301 cl. 4.4.3.1 at the UE the NAS COUNT is initialised with 0; + => in TTCN (NAS emulation) NAS COUNT is initialised with its max. value; + omit: keep as it is */ + }; + + type union NAS_CountReq_Type { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + Null_Type Get, + NasCountInfo_Type Set + }; + + type union NAS_CountCnf_Type { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + NasCountInfo_Type Get, + Null_Type Set + }; + + type union NasCtrlConfirm_Type { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + Null_Type Security, + NAS_CountCnf_Type NasCount + }; + + //**************************************************************************** + // NAS emulation: Local definitions + //---------------------------------------------------------------------------- + + const boolean tsc_NasEmu_TerminateOnError := true; /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + + //**************************************************************************** + // NAS emulation: global information + //---------------------------------------------------------------------------- + + /* + * @desc initialise NAS COUNT + * @return NasCount_Type .. initial NAS COUNT + * Note: NAS COUNT for both UL and DL is the value of the last PDU being receive from or send to the UE; + * => as for both sides the initial value in a PDU shall be 0 (24.301 cl. 4.4.3.1) + * the internal value needs to be set to the maximum value (i.e. when this is incremented it results in 0) + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) + */ + function f_NasCountInit() return NasCount_Type + { + var integer v_CountValue := (65536 * 256) - 1; + return int2oct(v_CountValue, 4); + } + + //**************************************************************************** + // NAS emulation: Configuration primitives + //---------------------------------------------------------------------------- + + template (value) NasCtrlCnfAspCommonPart_Type cs_NasCtrlCnfAspCommonPart := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) */ + // place holder only + }; + + template (value) NasCtrlReqAspCommonPart_Type cs_NasCtrlReqAspCommonPart(boolean p_CnfFlag := true) := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + ControlInfo := { + CnfFlag := p_CnfFlag + } + }; + + template (present) NasCtrlCnfAspCommonPart_Type cr_NasCtrlCnfAspCommonPart := + { /* @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS) */ + // place holder only + }; + + //**************************************************************************** + // NAS emulation: Error Handling + //---------------------------------------------------------------------------- + /* + * @desc wrapper to allow controlled termination of the NAS emu + * @param p_FileName + * @param p_LineNo + * @param p_Msg + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) + */ + function f_NasEmulationError(charstring p_FileName, + LineNo_Type p_LineNo, + charstring p_Msg) + { + var boolean v_TerminateOnError := tsc_NasEmu_TerminateOnError; + + if (v_TerminateOnError) { + f_SetVerdictInconc(p_FileName, p_LineNo, p_Msg); + } else { + f_ErrorLog(p_FileName, p_LineNo, p_Msg); + } + } + + //**************************************************************************** + // NAS emulation: auxiliary functions + //---------------------------------------------------------------------------- + /* + * @desc get the normal (long) SN from the COUNT + * @param p_Count + * @return NAS_SequenceNumber + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) + */ + function f_NasSecurity_ExtractSNfromCOUNT(NasCount_Type p_Count) return NAS_SequenceNumber + { + return int2oct(oct2int(p_Count) mod 256, 1); + }; + + //---------------------------------------------------------------------------- + /* + * @desc increment COUNT (in DL) + * @param p_Count + * @return NasCount_Type .. incremented COUNT + * @status APPROVED (ENDC, IMS, IMS_IRAT, LTE, LTE_A_IRAT, LTE_A_PRO, LTE_A_R10_R11, LTE_A_R12, LTE_IRAT, MCX, NBIOT, NR5GC, NR5GC_IRAT, POS, UTRAN) + */ + function f_NasSecurity_IncrementCOUNT(NasCount_Type p_Count) return NasCount_Type + { + var integer v_CountValue := oct2int(p_Count); + v_CountValue := (v_CountValue + 1) mod (65536 * 256); // the 8 most significant bits are 0 (24.301 cl. 4.4.3.1) + return int2oct(v_CountValue, 4); + }; + + //---------------------------------------------------------------------------- + type record NASEmu_CoOrd_REQ { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + octetstring IntegrityProtectedOctets, + integer SequenceNumber + }; + + type record NASEmu_CoOrd_CNF { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + MessageAuthenticationCode MAC + }; + + template (value) NASEmu_CoOrd_REQ cs_NASEmu_CoOrd_REQ (octetstring p_IntegrityProtectedOctets, integer p_SequenceNumber) := { + /* @status APPROVED (NR5GC_IRAT) */ + IntegrityProtectedOctets := p_IntegrityProtectedOctets, + SequenceNumber := p_SequenceNumber + }; + + template (present) NASEmu_CoOrd_REQ cr_NASEmu_CoOrd_REQ := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + IntegrityProtectedOctets := ?, + SequenceNumber := ? + }; + + template (value) NASEmu_CoOrd_CNF cs_NASEmu_CoOrd_CNF (MessageAuthenticationCode p_MAC) := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + MAC := p_MAC + }; + + template (present) NASEmu_CoOrd_CNF cr_NASEmu_CoOrd_CNF := { /* @status APPROVED (NR5GC_IRAT) */ + MAC := ? + }; + + // type port NASEMU4G_CO_ORD_PORT message { /* @status APPROVED (NR5GC_IRAT) */ + // out NASEmu_CoOrd_REQ; + // in NASEmu_CoOrd_CNF; + // }; + + // type port NASEMU5G_CO_ORD_PORT message { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + // out NASEmu_CoOrd_CNF; + // in NASEmu_CoOrd_REQ; + // }; + +} diff --git a/ttcn/Lib3GPP/NasEmulation/module.mk b/ttcn/Lib3GPP/NasEmulation/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..17a9b844061ce005fd9cdb5c8fdf22d6480b1958 --- /dev/null +++ b/ttcn/Lib3GPP/NasEmulation/module.mk @@ -0,0 +1,13 @@ +sources:= \ + NasEmu_Common4G5G.ttcn \ + NG_NasEmu_CtrlAspTypes.ttcn + + #NasEmu5G_AspTypes_NR.ttcn \ + #NasEmu5G_Component_NR_BASE.ttcn \ + #NasEmu5G_Component_NRNG.ttcn \ + #NasEmu5G_Main_NRNG.ttcn \ + #NasEmu_Common4G5G.ttcn \ + #NG_NasEmu_Common.ttcn \ + #NG_NasEmu_CtrlAspTypes.ttcn \ + #NG_NasEmu_CtrlFunctions.ttcn \ + #NG_SecurityDefinitionsAndExternalFunctions.ttcn diff --git a/ttcn/Lib3GPP/PicsPixit/EUTRA_NR_Parameters.ttcn b/ttcn/Lib3GPP/PicsPixit/EUTRA_NR_Parameters.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..a0799f0a5ced77e7180e35eda1af743e89b94688 --- /dev/null +++ b/ttcn/Lib3GPP/PicsPixit/EUTRA_NR_Parameters.ttcn @@ -0,0 +1,173 @@ +/******************************************************************************/ +// AUTOMATICALLY GENERATED MODULE - DO NOT MODIFY +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-09-13 19:58:09 +0200 (Wed, 13 Sep 2023) $ +// $Rev: 37115 $ +/******************************************************************************/ + +module EUTRA_NR_Parameters { + + import from Common4G5G all; + + //**************************************************************************** + // PIXIT Parameters + //---------------------------------------------------------------------------- + modulepar integer pc_noOf_PDNsNewConnection; // @desc Number of UE requested PDN connection establishments after ATTACH in a new signaling connection + // Reference to other Spec: 38.508-2 Table A.4.4-2/6 + + modulepar integer pc_noOf_PDNsSameConnection; // @desc Number of UE requested PDN connection establishments after ATTACH during the same signaling connection + // Reference to other Spec: 38.508-2 Table A.4.4-2/5 + + modulepar ENDC_BandCombination_Type px_ENDC_BandCombination := DC_25A_n41A; // @desc EN-DC Band Combination + + modulepar ENDC_CA_BandCombination_Type px_ENDC_CA_BandCombination := DC_1A_n28A_n78A; + // @desc EN-DC CA Band Combination + + modulepar ENDC_BandCombination_Type px_ENDC_SecondaryBandCombination := DC_1A_n77A; // @desc Secondary EN-DC Band Combination + + modulepar NEDC_BandCombination_Type px_NEDC_BandCombination := DC_n28A_3A; // @desc NE-DC Band Combination + + modulepar NEDC_BandCombination_Type px_NEDC_SecondaryBandCombination := DC_n28A_39A; + // @desc Secondary NE-DC Band Combination + + modulepar integer px_NR_PrimaryBand := 1; // @desc NR primary band + + + //**************************************************************************** + // PICS Parameters + //---------------------------------------------------------------------------- + modulepar boolean pc_5GCN := false; // @desc UE supports 5GS Core + // Reference: 38.508-2 Table A.4.1-5/1 + + modulepar boolean pc_EN_DC := false; // @desc EN-DC (Option 3) + // Reference: 38.508-2 Table A.4.1-3/2 + + modulepar boolean pc_EPS_UPIP := false; // @desc Support of user plane integrity protection with EPS + // Reference: 38.508-2 Table A.4.3.7-1/50 + + modulepar boolean pc_IP_Ping := false; // @desc Support of ICMP or ICMP IPv6 + // Reference: 38.508-2 Table A.4.4-1/1 + + modulepar boolean pc_InterBand_CA_BetweenFR1_FR2 := false; // @desc Inter-Band CA between FR1 and FR2 + // Reference: 38.508-2 Table A.4.1-4A/7 + + modulepar boolean pc_InterBand_CA_WithinFR1 := false; // @desc Inter-Band CA within FR1 + // Reference: 38.508-2 Table A.4.1-4A/5 + + modulepar boolean pc_InterBand_CA_WithinFR2 := false; // @desc Inter-Band CA within FR2 + // Reference: 38.508-2 Table A.4.1-4A/6 + + modulepar boolean pc_InterBand_ENDC_IncludingFR1_FR2 := false; // @desc Inter-Band EN-DC including FR1 and FR2 + // Reference: 38.508-2 Table A.4.1-4/5 + + modulepar boolean pc_InterBand_ENDC_IncludingFR2 := false; // @desc Inter-Band EN-DC including FR2 + // Reference: 38.508-2 Table A.4.1-4/4 + + modulepar boolean pc_InterBand_ENDC_WithinFR1 := false; // @desc Inter-Band EN-DC within FR1 + // Reference: 38.508-2 Table A.4.1-4/3 + + modulepar boolean pc_InterBand_NRDC_BetweenFR1_FR2 := false; // @desc Inter-Band NR-DC between FR1 and FR2 + // Reference: 38.508-2 Table A.4.1-4/6 + + modulepar boolean pc_IntraBand_Contiguous_CA_WithinFR1 := false; // @desc Intra-Band Contiguous CA within FR1 + // Reference: 38.508-2 Table A.4.1-4A/1 + + modulepar boolean pc_IntraBand_Contiguous_CA_WithinFR2 := false; // @desc Intra-Band Contiguous CA within FR2 + // Reference: 38.508-2 Table A.4.1-4A/3 + + modulepar boolean pc_IntraBand_Contiguous_ENDC := false; // @desc Intra-Band Contiguous EN-DC + // Reference: 38.508-2 Table A.4.1-4/1 + + modulepar boolean pc_IntraBand_NonContiguous_CA_WithinFR1 := false; + // @desc Intra-Band Non-contiguous CA within FR1 + // Reference: 38.508-2 Table A.4.1-4A/2 + + modulepar boolean pc_IntraBand_NonContiguous_CA_WithinFR2 := false; + // @desc Intra-Band Non-contiguous CA within FR2 + // Reference: 38.508-2 Table A.4.1-4A/4 + + modulepar boolean pc_IntraBand_NonContiguous_ENDC := false; // @desc Intra-Band Non-Contiguous EN-DC + // Reference: 38.508-2 Table A.4.1-4/2 + + modulepar boolean pc_TransferEmergencyPDUN1toS1noN26 := false; // @desc Support of Emergency PDU session transfer from N1 mode to S1 mode when network does not support N26 interface + // Reference: 38.508-2 Table A.4.4-2/8 + + modulepar boolean pc_TransferEmergencyPDUS1toN1noN26 := false; // @desc Support of Emergency PDN connection transfer from S1 mode to N1 mode when network does not support N26 interface + // Reference: 38.508-2 Table A.4.4-2/9 + + modulepar boolean pc_configuredUL_GrantType1 := false; // @desc Support Type 1 PUSCH transmissions with configured grant + // Reference: 38.508-2 Table A.4.3.2-1/10 + + modulepar boolean pc_configuredUL_GrantType2 := false; // @desc Support Type 2 PUSCH transmissions with configured grant + // Reference: 38.508-2 Table A.4.3.2-1/11 + + modulepar boolean pc_data_centric := false; // @desc Support of UE's usage setting as data centric + // Reference: 38.508-2 Table A.4.4-2/10 + + modulepar boolean pc_dynamicPowerSharingENDC := false; // @desc Support dynamic EN-DC power sharing for at least one EN-DC band combination_FR1 only + // Reference: 38.508-2 Table A.4.3.2-1/17 + + modulepar boolean pc_dynamicSwitchRA_Type0_1_PDSCH := false; // @desc Support dynamic switching between resource allocation Types 0 and 1 for PDSCH + // Reference: 38.508-2 Table A.4.3.2-1/26 + + modulepar boolean pc_dynamicSwitchRA_Type0_1_PUSCH := false; // @desc Support dynamic switching between resource allocation Types 0 and 1 for PUSCH + // Reference: 38.508-2 Table A.4.3.2-1/27 + + modulepar boolean pc_eutra_EPC_HO_ToNR_FDD_FR1_r15 := false; // @desc Support inter-RAT Handover to NR FR1 FDD from EUTRA connected to EPC + // Reference: 38.508-2 Table A.4.3.8-1/7 + + modulepar boolean pc_eutra_EPC_HO_ToNR_TDD_FR1_r15 := false; // @desc Support inter-RAT Handover to NR FR1 TDD from EUTRA connected to EPC + // Reference: 38.508-2 Table A.4.3.8-1/6 + + modulepar boolean pc_eutra_EPC_HO_ToNR_TDD_FR2_r15 := false; // @desc Support inter-RAT Handover to NR FR2 TDD from EUTRA connected to EPC + // Reference: 38.508-2 Table A.4.3.8-1/8 + + modulepar boolean pc_gp10_en_dc := false; // @desc Support NR supports gap pattern 10 for independent measurement gap configuration on FR1 and per-UE gap in (NG) EN-DC + // Reference: 38.508-2 Table A.4.3.6-1/16 + + modulepar boolean pc_gp11_en_dc := false; // @desc Support NR supports gap pattern 1 for independent measurement gap configuration on FR1 and per-UE gap in (NG) EN-DC + // Reference: 38.508-2 Table A.4.3.6-1/17 + + modulepar boolean pc_gp4_en_dc := false; // @desc Support NR supports gap pattern 4 for independent measurement gap configuration on FR1 and per-UE gap in (NG) EN-DC + // Reference: 38.508-2 Table A.4.3.6-1/10 + + modulepar boolean pc_gp5_en_dc := false; // @desc Support NR supports gap pattern 5 for independent measurement gap configuration on FR1 and per-UE gap in (NG) EN-DC + // Reference: 38.508-2 Table A.4.3.6-1/11 + + modulepar boolean pc_gp6_en_dc := false; // @desc Support NR supports gap pattern 6 for independent measurement gap configuration on FR1 and per-UE gap in (NG) EN-DC + // Reference: 38.508-2 Table A.4.3.6-1/12 + + modulepar boolean pc_gp7_en_dc := false; // @desc Support NR supports gap pattern 7 for independent measurement gap configuration on FR1 and per-UE gap in (NG) EN-DC + // Reference: 38.508-2 Table A.4.3.6-1/13 + + modulepar boolean pc_gp8_en_dc := false; // @desc Support NR supports gap pattern 8 for independent measurement gap configuration on FR1 and per-UE gap in (NG) EN-DC + // Reference: 38.508-2 Table A.4.3.6-1/14 + + modulepar boolean pc_gp9_en_dc := false; // @desc Support NR supports gap pattern 9 for independent measurement gap configuration on FR1 and per-UE gap in (NG) EN-DC + // Reference: 38.508-2 Table A.4.3.6-1/15 + + modulepar boolean pc_idleInactiveEUTRA_MeasReport := false; // @desc Support configuration of E-UTRA measurements in RRC_IDLE/RRC_INACTIVE and reporting of the corresponding results upon network request as specified in TS 38.331 + // Reference: 38.508-2 Table A.4.3.6.1/55 + + modulepar boolean pc_inactiveState := false; // @desc Support of RRC_INACTIVE as specified in TS 38.331 + // Reference: 38.508-2 Table A.4.3.7-1/19 + + modulepar boolean pc_interRAT_NR_ToENDC := false; // @desc Support inter-RAT Handover from NR to EN-DC + // Reference: 38.508-2 Table A.4.3.8-1/10 + + modulepar boolean pc_ra_Type0_PUSCH := false; // @desc Support resource allocation Type 0 for PUSCH + // Reference: 38.508-2 Table A.4.3.2-1/7 + + modulepar boolean pc_srb3 := false; // @desc Support direct SRB between the SN and the UE + // Reference: 38.508-2 Table A.4.3.7-1/3 + + modulepar boolean pc_ss_SINR_Meas := false; // @desc Support SS-SINR measurements + // Reference: 38.508-2 Table A.4.3.6-1/6 + + +} diff --git a/ttcn/Lib3GPP/PicsPixit/NAS_5GC_Parameters.ttcn b/ttcn/Lib3GPP/PicsPixit/NAS_5GC_Parameters.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..a7ff95f5a43d1382662661b00fd12a8e4843fd4b --- /dev/null +++ b/ttcn/Lib3GPP/PicsPixit/NAS_5GC_Parameters.ttcn @@ -0,0 +1,92 @@ +/******************************************************************************/ +// AUTOMATICALLY GENERATED MODULE - DO NOT MODIFY +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-09-13 15:45:17 +0200 (Wed, 13 Sep 2023) $ +// $Rev: 37096 $ +/******************************************************************************/ + +module NAS_5GC_Parameters { + + import from CommonDefs all; + import from NG_NAS_TypeDefs all; + + //**************************************************************************** + // PIXIT Parameters + //---------------------------------------------------------------------------- + modulepar integer pc_noOf_PDUsNewConnection; // @desc Number of UE-requested PDU session establishments after REGISTRATION in a new signaling connection + // Reference to other Spec: 38.508-2 Table A.4.4-2/4 + + modulepar integer pc_noOf_PDUsSameConnection; // @desc Number of UE requested PDU session establishments after REGISTRATION during the same signaling connection + // Reference to other Spec: 38.508-2 Table A.4.4-2/3 + + modulepar NAS_5GC_AKA_Type px_NAS_5GC_AuthenticationType := AKA_5G; // @desc NAS 5GC Authentication type + // Supported values: AKA_5G, AKAP_EAP + + modulepar B4_Type px_NAS_5GC_CipheringAlgorithm := '0010'B; // @desc NAS 5GC Ciphering Algorithm + + modulepar B4_Type px_NAS_5GC_IntegrityAlgorithm := '0010'B; // @desc NAS 5GC Integrity Algorithm + + modulepar integer px_NAS_5GC_XRES_Length := 16; // @desc NAS 5GC XRES length, in octets, used in Authentication + + + //**************************************************************************** + // PICS Parameters + //---------------------------------------------------------------------------- + modulepar boolean pc_5GC_MUSIM := false; // @desc Support one or more Multi-SIM features include N1 NAS signalling connection release/Paging indication for voice services/Reject paging request/Paging restriction/IMSI offset and so on. + // Reference: 38.508-2 Table A.4.3.13-1/1 + + modulepar boolean pc_5GC_MUSIM_NCR := false; // @desc Support of Multi-SIM N1 NAS signalling connection release + // Reference: 38.508-2 Table A.4.3.13-1/2 + + modulepar boolean pc_5GC_MUSIM_PIV := false; // @desc Support of Multi-SIM Paging indication for voice services + // Reference: 38.508-2 Table A.4.3.13-1/3 + + modulepar boolean pc_5GC_MUSIM_PR := false; // @desc Support of Multi-SIM Paging restriction + // Reference: 38.508-2 Table A.4.3.13-1/5 + + modulepar boolean pc_5GC_MUSIM_RPR := false; // @desc Support of Multi-SIM Reject paging request + // Reference: 38.508-2 Table A.4.3.13-1/4 + + modulepar boolean pc_5GC_RACS := false; // @desc Support of RACS + // Reference: 38.508-2 Table A.4.3.7-1/17 + + modulepar boolean pc_5GC_RACS_Manufacturer_URCID := false; // @desc UE support of Manufacturer assigned radio capability ID + // Reference: 38.508-2 Table A.4.3.7-1/35 + + modulepar boolean pc_Additional_PDU_establishment := false; // @desc ExpectedNoOfPDUSessionsAtRegistration + 1 + // Reference: 38.508-2 Table A.4.3.7-1/9 + + modulepar boolean pc_SNPN_EmergencyService := false; // @desc Support of emergency services in NR connected to 5GCN in SNPN Access mode + // Reference: 38.508-2 Table A.4.3.7-1/56 + + modulepar boolean pc_SNPN_PLMN := false; // @desc Support of PLMN access in SNPN Access mode + // Reference: 38.508-2 Table A.4.3.7-1/57 + + modulepar boolean pc_UserInitiated_SNPN_Reselection := false; // @desc Support of autonomous search function to detect CAG cells on serving and non-serving frequencies + // Reference: 38.508-2 Table A.4.3.7-1/30 + + modulepar boolean pc_V2XCNPC5 := false; // @desc Support of V2X communication over NR-PC5 + // Reference: 38.508-2 Table A.4.3.7-1/34 + + modulepar boolean pc_accessing_SNPN_usingCH := false; // @desc Support of accessing SNPN using credentials from a Credentials Holder + // Reference: 38.508-2 Table A.4.3.7-1/52 + + modulepar boolean pc_musimLeaveConnected_r17 := false; // @desc Supports providing MUSIM assistance information with indication of leaving RRC_CONNECTED state + // Reference: 38.508-2 Table A.4.3.13-1/7 + + modulepar boolean pc_musim_GapPreference_r17 := false; // @desc Supports providing MUSIM assistance information with MUSIM gap preference and related MUSIM gap configuration + // Reference: 38.508-2 Table A.4.3.13-1/6 + + modulepar boolean pc_onboarding_SNPN := false; // @desc Support of Onboarding Stand-alone Non-Public Network + // Reference: 38.508-2 Table A.4.3.7-1/53 + + modulepar boolean pc_sms_over_NAS := false; // @desc Support of SMS over NAS + // Reference: 38.508-2 Table A.4.3.7-1/6 + + +} diff --git a/ttcn/Lib3GPP/PicsPixit/Parameters.ttcn b/ttcn/Lib3GPP/PicsPixit/Parameters.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1ff7fb927ac34f358f858a52893a2ac1f82e9390 --- /dev/null +++ b/ttcn/Lib3GPP/PicsPixit/Parameters.ttcn @@ -0,0 +1,1262 @@ +/******************************************************************************/ +// AUTOMATICALLY GENERATED MODULE - DO NOT MODIFY +// @copyright Copyright Notification +// No part may be reproduced except as authorized by written permission. +// The copyright and the foregoing restriction extend to reproduction in all media. +// (c) 2023, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +// All rights reserved. +// @version: IWD_23wk37 +// $Date: 2023-08-05 13:41:59 +0200 (Sat, 05 Aug 2023) $ +// $Rev: 36519 $ +/******************************************************************************/ + +module Parameters { + + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + + //**************************************************************************** + // PIXIT Parameters + //---------------------------------------------------------------------------- + modulepar APN_DefaultConfiguration_Type pc_APN_Default_Configuration := None; // @desc The DNN/APN configuration specified in TS 38.508-1 [2], Table 4.8.4-1 which is to be used for the default DNN/APN. + // The value provided shall match one of the DNN/APN types if a Default DNN will be established, e.g. internet, ims, etc. or shall be set to none if the UE will not establish default DNN/APN. + // Supported values: none, internet, ims, urllc, miot, v2x, ethernet, mbs + // Reference to other Spec: 38.508-1, Table 4.8.4-2A + + modulepar charstring pc_APN_ID_Ethernet:="ethernet"; // @desc APN/DNN ID of type Ethernet + // The APN/DNN Network Identifier portion of the Access Point / Data Network Name, as defined in TS 23.003 [26], subclause 9.1 OR "none" if the UE will not establish PDN/PDU of type Ethernet + // If the provided value is different to "none" then for this APN/DNN the DNN/APN configuration of type "Ethernet" as specified in TS 38.508-1 [2], Table 4.8.4-1 applies. + + modulepar charstring pc_APN_ID_IMS:="ims"; // @desc APN/DNN ID of type IMS + // The APN/DNN Network Identifier portion of the Access Point / Data Network Name, as defined in TS 23.003 [x1], subclause 9.1 OR "none" if the UE will not establish PDN/PDU of type IMS + // If the provided value is different to "none" then for this APN/DNN the DNN/APN configuration of type "IMS" as specified in TS 38.508-1 [2], Table 4.8.4-1 applies. + // Reference to other Spec: 38.508-1, Table 4.8.4-2A + + modulepar charstring pc_APN_ID_Internet:="internet"; // @desc APN/DNN ID of type Internet + // The APN/DNN Network Identifier portion of the Access Point / Data Network Name, as defined in TS 23.003, subclause 9.1 OR "none" if the UE will not establish PDN/PDU of type Internet + // If the provided value is different to "none" then for this APN/DNN the DNN/APN configuration of type "Internet" as specified in TS 38.508-1 [2], Table 4.8.4-1 applies. + // Reference to other Spec: 38.508-1, Table 4.8.4-2A + + modulepar charstring pc_APN_ID_MIOT:="iot"; // @desc APN/DNN ID of type MIOT + // The APN/DNN Network Identifier portion of the Access Point / Data Network Name, as defined in TS 23.003 [x1], subclause 9.1 OR "none" if the UE will not establish PDN/PDU of type MIOT + // If the provided value is different to "none" then for this APN/DNN the DNN/APN configuration of type "MIOT" as specified in TS 38.508-1 [2], Table 4.8.4-1 applies. + // Reference to other Spec: 38.508-1, Table 4.8.4-2A + + modulepar charstring pc_APN_ID_URLLC:="urllc"; // @desc APN/DNN ID of type URLLC + // The APN/DNN Network Identifier portion of the Access Point / Data Network Name, as defined in TS 23.003 [x1], subclause 9.1 OR "none" if the UE will not establish PDN/PDU of type URLLC + // If the provided value is different to "none" then for this APN/DNN the DNN/APN configuration of type "URLLC" as specified in TS 38.508-1 [2], Table 4.8.4-1 applies. + // Reference to other Spec: 38.508-1, Table 4.8.4-2A + + modulepar charstring pc_APN_ID_V2X:="v2x"; // @desc APN/DNN ID of type V2X + // The APN/DNN Network Identifier portion of the Access Point / Data Network Name, as defined in TS 23.003 [x1], subclause 9.1 OR "none" if the UE will not establish PDN/PDU of type V2X + // If the provided value is different to "none" then for this APN/DNN the DNN/APN configuration of type "V2X" as specified in TS 38.508-1 [2], Table 4.8.4-1 applies. + // Reference to other Spec: 38.508-1, Table 4.8.4-2A + + modulepar octetstring px_AccessPointName:='00'O; // @desc Access Point Name + + modulepar integer px_AquireGNSS_MaxTime := 60; // @desc The maximume time (in seconds) taken for the UE to acquire GNSS and derive UTC time (and normally position) and then start to transit or receive as appropriate + + modulepar EUTRA_ATTACH_TESTED_Type px_AttachTypeTested := EPS_ATTACH_ONLY; // @desc Attach Type to be tested, if UE supports both pc_Attach and pc_Combined_Attach + // Supported values: EPS_ATTACH_ONLY, COMBINED_ATTACH + + modulepar B16_Type px_AuthAMF:='0000000000000000'B; // @desc Authentication Management Field (16 bits). The value shall be different from '1111 1111 1111 111'B (AMFresynch). + // Default value: no default value can be proposed + // Reference to other Spec: 34.123-3, Table B.1 + + modulepar B128_Type px_AuthK := oct2bit('000102030405060708090A0B0C0D0E0F'O); + // @desc Authentication Key + // Reference to other Spec: 34.123-3, Table B.1 + + modulepar O8_Type px_EllipsoidPointWithAltitude:='1234567890123456'O; // @desc Ellipsoid Point With Altitude value to be provided in Update UE location information (see 36.509 cl 6.12) + + modulepar charstring px_EmergencyCallNumber := "112"; // @desc Emergency Number used by UE to initiate an emergency call + // Reference to other Spec: 34.123-3, Table B.1.2 + + modulepar integer px_FDD_OperationBand:=1; // @desc The operation band under test, as defined in 34.108 clause 5.1.1. Value 1 means Band 1, 2 means Band 2 etc.This pixit shall be set in synchronisation with the values that are being set to 6 other Pixits viz: px_UARFCN_D_High, px_UARFCN_D_Mid,px_UARFCN_L_Mid + // Reference to other Spec: 34.123-3, Table B.1 + + modulepar O3_Type px_HorizontalVelocity:='012345'O; // @desc Horizontal Velocity to be provided in Update UE location information (see 36.509 cl 6.12) + + modulepar hexstring px_IMEISV_Def:=''H; // @desc Default IMEISV value. No default can be proposed as this is a manufacturer defined value + // Reference to other Spec: 34.123-3, Table B.1 + + modulepar hexstring px_IMEI_Def:=''H; // @desc Default IMEI value transmitted by UE. Digit 15 shall be set as a Spare Digit, i.e. shall be set to '0' (see TS 23.003) + // Reference to other Spec: 34.123-3, Table B.1 + + modulepar hexstring px_IMSI_Def := '001010123456063'H; + // @desc Default IMSI + // Reference to other Spec: 34.123-3, Table B.1 + + modulepar hexstring px_IMSI_Diff := '001010654321063'H; + // @desc Different IMSI from the IMSI stored in the USIM + // Reference to other Spec: 34.123-3, Table B.1 + + modulepar integer px_IP_MTU_Size := 65535; // @desc MTU size. This value is specific to the SS. + + modulepar charstring px_IPv4_Address1_NW:=""; // @desc IPv4 Gateway Address in PDN1 + + modulepar charstring px_IPv4_Address1_RemoteUE:=""; // @desc IPv4 Address of remote UE connected to PDN1 + + modulepar charstring px_IPv4_Address1_UE:=""; // @desc IPv4 Address connected to PDN1 + + modulepar charstring px_IPv4_Address2_NW:=""; // @desc IPv4 Gateway Address in PDN2 + + modulepar charstring px_IPv4_Address2_RemoteUE:=""; // @desc IPv4 Address of remote UE connected to PDN2 + + modulepar charstring px_IPv4_Address2_UE:=""; // @desc IPv4 Address connected to PDN2 + + modulepar charstring px_IPv4_Address2a_UE:=""; // @desc IPv4 Address connected to PDN2a + + modulepar charstring px_IPv4_Address3_NW:=""; // @desc IPv4 Gateway Address in PDN3 + + modulepar charstring px_IPv4_Address3_RemoteUE:=""; // @desc IPv4 Address of remote UE connected to PDN3 + + modulepar charstring px_IPv4_Address3_UE:=""; // @desc IPv4 Address connected to PDN3 + + modulepar charstring px_IPv4_Address4_NW:=""; // @desc IPv4 Gateway Address in PDN4 + + modulepar charstring px_IPv4_Address4_UE:=""; // @desc IPv4 Address connected to PDN4 + + modulepar charstring px_IPv4_Address5_NW:=""; // @desc IPv4 Gateway Address in PDN5 + + modulepar charstring px_IPv4_Address5_UE:=""; // @desc IPv4 Address connected to PDN5 + + modulepar charstring px_IPv4_Address6_NW:=""; // @desc IPv4 Gateway Address in PDN6 + + modulepar charstring px_IPv4_Address6_UE:=""; // @desc IPv4 Address connected to PDN6 + + modulepar charstring px_IPv4_Address_HomeAgent:=""; // @desc IPv4 Home Address Agent + + modulepar charstring px_IPv6_Address1_NW:=""; // @desc IPv6 Gateway Address in PDN1 + + modulepar charstring px_IPv6_Address1_RemoteUE:=""; // @desc IPv6 Address of remote UE in PDN1 + + modulepar charstring px_IPv6_Address1_UE:=""; // @desc IPv6 Address in PDN1 + + modulepar charstring px_IPv6_Address2_NW:=""; // @desc IPv6 Gateway Address in PDN2 + + modulepar charstring px_IPv6_Address2_RemoteUE:=""; // @desc IPv6 Address of remote UE in PDN2 + + modulepar charstring px_IPv6_Address2_UE:=""; // @desc IPv6 Address in PDN2 + + modulepar charstring px_IPv6_Address2a_UE:=""; // @desc IPv6 Address in PDN2a + + modulepar charstring px_IPv6_Address3_NW:=""; // @desc IPv6 Gateway Address in PDN3 + + modulepar charstring px_IPv6_Address3_RemoteUE:=""; // @desc IPv6 Address of remote UE in PDN3 + + modulepar charstring px_IPv6_Address3_UE:=""; // @desc IPv6 Address in PDN3 + + modulepar charstring px_IPv6_Address4_NW:=""; // @desc IPv6 Gateway Address in PDN4 + + modulepar charstring px_IPv6_Address4_UE:=""; // @desc IPv6 Address in PDN4 + + modulepar charstring px_IPv6_Address5_NW:=""; // @desc IPv6 Gateway Address in PDN5 + + modulepar charstring px_IPv6_Address5_UE:=""; // @desc IPv6 Address in PDN5 + + modulepar charstring px_IPv6_Address6_NW:=""; // @desc IPv6 Gateway Address in PDN6 + + modulepar charstring px_IPv6_Address6_UE:=""; // @desc IPv6 Address in PDN6 + + modulepar charstring px_IPv6_Address_HomeAgent:=""; // @desc IPv6 Home Address Agent + + modulepar integer px_MFBI_UTRAN_FrequencyBand:=0; // @desc A supported UTRAN MFBI frequency band. + // Reference to other Spec: 34.123-3, Table B.1.20 + + modulepar B3_Type px_NAS_CipheringAlgorithm := '001'B; // @desc NAS Ciphering Algorithm (eea1) + + modulepar B3_Type px_NAS_IntegrityProtAlgorithm := '001'B; // @desc NAS Integrity Algorithm (eia1) + + modulepar octetstring px_PTMSI_Def := 'C2345678'O; // @desc Default PTMSI + // Reference to other Spec: 34.123-3, Table B.1 + + modulepar octetstring px_PTMSI_SigDef := 'AB1234'O; // @desc Default PTMSI signature (3 octets, 3GPP 24.008 / 10.5.5.8). + // Reference to other Spec: 34.123-3, Table B.1 + + modulepar bitstring px_PWS_CB_DataCodingScheme:=''B; // @desc CMAS or ETWS data coding scheme of the alphabet/codingand the applied language (see TS 23.401) + + modulepar charstring px_PWS_CB_DataPage1:=""; // @desc ETWS or CMAS Page 1 warning data message + + modulepar charstring px_PWS_CB_DataPage2:=""; // @desc ETWS or CMAS Page 2 warning data message + + modulepar charstring px_PWS_CB_DataPage3:=""; // @desc CMAS or ETWS Page 3 warning data message + + modulepar charstring px_PWS_CB_DataPage4:=""; // @desc CMAS or ETWS Page 4 warning data message + + modulepar RATComb_Tested_Type px_RATComb_Tested := EUTRA_UTRA; // @desc This parameter represents the network RAT capability/preference and indicates which, if any is supported, RAT combination is to be tested + // Supported values: EUTRA_UTRA, EUTRA_GERAN, EUTRA_Only + + modulepar boolean px_SMS_ChkMsgReceived := true; // @desc Whether the operator can check an MT Short Message received + + modulepar integer px_SMS_IndexOffset := 0; // @desc Memory location index at UE for SMS storage, used in +CMSS command + // Reference to other Spec: 34.123-3, Table B.1.2 + + modulepar charstring px_SMS_MsgFrmt := "1"; // @desc SMS message format (see TS 27.005 cl.3.2.). NOTE: Default value is for text mode. Change value to 0 to execute tests with PDU mode + + modulepar charstring px_SMS_PrefMem1 := "SM"; // @desc SMS Preferred Memory 1 of TS 27.005 [31], clause 3.2.2 + // Reference to other Spec: 34.123-3, Table B.1.2 + + modulepar charstring px_SMS_PrefMem2 := "SM"; // @desc SMS Preferred Memory 2 of TS 27.005 [31], clause 3.2.2 + // Reference to other Spec: 34.123-3, Table B.1.2 + + modulepar charstring px_SMS_PrefMem3 := "MT"; // @desc SMS Preferred Memory 3 of TS 27.005 [31], clause 3.2.2 + // Reference to other Spec: 34.123-3, Table B.1.2 + + modulepar charstring px_SMS_Service := "0"; // @desc SMS Service of TS 27.005 [31], clause 3.2.1 + // Reference to other Spec: 34.123-3, Table B.1.2 + + modulepar SinglePLMN_TestedType px_SinglePLMN_Tested := MultiPLMN; // @desc This parameter represents the network capability/preference to support multi PLMNs on the same test Band and indicates the preference of multi PLMNs or single PLMN test environment. This PIXIT shall be set to SinglePLMN when only one frequency is defined for the test band + // Supported values: SinglePLMN, MultiPLMN, MultiPLMNinPrimaryBand, MultiPLMNinSecondaryBand + + modulepar octetstring px_TMSI_Def := '12345678'O; // @desc Default TMSI + // Reference to other Spec: 34.123-3, Table B.1 + + modulepar O1_Type px_TestLoopModeB_Delay := '5A'O; // @desc This parameter represents the IP PDU delay to be used for UE test loop mode B intest cases, where long delay may be needed e.g. because of user interaction. + + modulepar CS_PS_MODE px_UE_CS_PS_UsageSetting_Tested := VOICE_CENTRIC; + // @desc specifies which CS/PS mode is under test @sic R5s120274 sic@ + // Supported values: VOICE_CENTRIC, DATA_CENTRIC + + modulepar PS_MODE px_UE_PS_UsageSetting_Tested := VOICE_CENTRIC; // @desc specifies which PS mode is under test @sic R5s120274 sic@ + // Supported values: VOICE_CENTRIC, DATA_CENTRIC + + modulepar UTRAN_FDD_TDD_Type px_UTRAN_ModeUnderTest := UTRAN_FDD; // @desc specifies which radio access technology is being tested in UTRAN + // Supported values: UTRAN_FDD, UTRAN_TDD + + modulepar integer px_UTRAN_OverlappingNotSupportedFrequencyBandMFBI:=1; + // @desc A not supported UTRAN frequency band that is overlapping with a supported MFBI band (px_MFBI_UTRAN_FrequencyBand). This pixit shall be set also in accordance with the values of the 3 Pixits: px_UARFCN_D_High, px_UARFCN_D_Mid,px_UARFCN_L_Mid. + + modulepar boolean px_WLAN_PDN1_ToOffload := true; // @desc If set to true, the first PDN connection is offloaded to WLAN. If set to false, the second PDN connection is offloaded to WLAN. + + modulepar B128_Type px_eAuthRAND := oct2bit('A3DE0C6D363E30C364A4078F1BF8D577'O); + // @desc Random Challenge + + modulepar NAS_Mcc px_eJapanMCC_Band6 := '442'H; // @desc Japan MCC code to be used for Band 6. The same value will be used for E-UTRAN and Inter-RAT cells. Type is different to that defined in 34.123-3. + + modulepar integer px_ePrimaryFrequencyBand := 1; // @desc E-UTRAN primary frequency band + + + //**************************************************************************** + // PICS Parameters + //---------------------------------------------------------------------------- + modulepar boolean pc_1xCSfallback := false; // @desc Support of 1xCS fallback + // Reference: 36.523-2, A.4.2.1.1-1/3 + + modulepar boolean pc_1xRTT := false; // @desc UE supports CDMA2000 1xRTT band class + // Reference: 36.523-2, A.4.1-1/4 + + modulepar boolean pc_A5_4_CS := false; // @desc Support of A5/4 + // Reference: 51.010-2, A.2/87 + + modulepar boolean pc_Allowed_CSG_list := false; // @desc Support of Allowed CSG list + // Reference: 36.523-2 A.4.4-1/2 + + modulepar boolean pc_Attach := false; // @desc Support EPS attach (with or without pre-configuration) + // Reference: 36.523-2 A.4.4-2/1 + + modulepar boolean pc_Auto_PDN_Connectivity := false; // @desc Support of automatic PDN Connectivity in EUTRAN + // Reference: 36.523-2 A.4.4-1/68 + + modulepar boolean pc_Automatic_EPS_Re_Attach := false; // @desc Support of automatic re-activation of the EPS bearer(s) + // Reference: 36.523-2 A.4.4-1/64 + + modulepar boolean pc_Automatic_Re_Attach := false; // @desc Support of automatic re-activation of the EPS bearer(s) during Network Initiated Detach with detach type set to re-attach required + // Reference: 36.523-2 A.4.4-1/27 + + modulepar boolean pc_Available_PLMNs_AcT_Ind := false; // @desc Support of AccessTechnology indication in available PLMNs list + // Reference: 36.523-2 A.4.4-1/78 + + modulepar boolean pc_BSRVCC := false; // @desc UE indicates g.3gpp.ps2cs-srvcc-orig-pre-alerting media feature tag in INVITE request + // Reference: 34.229-2 A.12/36 + + modulepar boolean pc_CMAS_Message := false; // @desc Support of CMAS message + // Reference: 36.523-2 A.4.4-1/58 + + modulepar boolean pc_CS := false; // @desc UE supports CS domain services + // Reference: 34.123-2 A.3/1 + + modulepar boolean pc_CS_Em_Call_in_1xRTT := false; // @desc Support for establishing the emergency call using the CS domain in 1xRTT + // Reference: 36.523-2 A.4.4-1/37 + + modulepar boolean pc_CS_Em_Call_in_GERAN := false; // @desc Support for establishing the emergency call using the CS domain in GERAN + // Reference: 36.523-2 A.4.4-1/36 + + modulepar boolean pc_CS_Em_Call_in_UTRA := false; // @desc Support for establishing the emergency call using the CS domain in UTRA + // Reference: 36.523-2 A.4.4-1/35 + + modulepar boolean pc_CS_Fallback := false; // @desc The UE supports CS fallback for voice calls. If true, pc_CS and at least one of pc_FDD, pc_TDD_HCR, pc_TDD_LCR, pc_TDD_VHCR or pc_UMTS_GSM is also true. + // Reference: 36.523-2, A.4.2.1.1-1/1 + + modulepar boolean pc_CS_PS_data_centric := false; // @desc Support of CS/PS mode 2 + // Reference: 36.523-2 A.4.4-2/5 + + modulepar boolean pc_CS_PS_voice_centric := false; // @desc Support of configuring the UE to voice centric + // Reference: 36.523-2 A.4.4-2/4 + + modulepar boolean pc_Combined_Attach := false; // @desc Support combined EPS/IMSI attach (with or without pre-configuration) + // Reference: 36.523-2 A.4.4-2/2 + + modulepar boolean pc_DSMIPv6 := false; // @desc Support of Mobility management based on Dual-Stack Mobile IPv6 + // Reference: 36.523-2 A.4.4-1/6 + + modulepar boolean pc_DaylightSavingTime := false; // @desc UE stores/updates the daylight saving time when receives information + // Reference: 36.523-2 A.4.4-1/93 + + modulepar boolean pc_DualRM_Coding := false; // @desc Dual RM Coding + // Reference: 36.523/2 A.4.4-1/147 + + modulepar boolean pc_EAB := false; // @desc Support of Extended Access Barring + // Reference: 36.523-2 A.4.4-1A/4 + + modulepar boolean pc_EAB_override := false; // @desc Support of Extended Access Barring Override + // Reference: 36.523-2 A.4.4-1/91 + + modulepar boolean pc_EDTM := false; // @desc Support for EDTM + // Reference: 36.523-2 A.4.4-1/38 + + modulepar boolean pc_EMM_Information := false; // @desc Support of EMM Information message + // Reference: 36.523-2 A.4.4-1/9 + + modulepar boolean pc_EPC_RACS := false; // @desc Support of RACS + // Reference: 36.523-2 A.4.4-1/215 + + modulepar boolean pc_EPS_IMS_EmergencyCall := false; // @desc Support of MS emergency call in EPS + // Reference: 36.523-2, A.4.2.1.1-1/4 + + modulepar boolean pc_EPS_Services_Disable := false; // @desc Support of disabling of EPS services + // Reference: 36.523-2 A.4.4-1/26 + + modulepar boolean pc_ESM_MO_Bearer_Allocation := false; // @desc Support of ESM UE requested bearer resource allocation procedure + // Reference: 36.523-2 A.4.4-1/18 + + modulepar boolean pc_ESM_MO_Bearer_Modification := false; // @desc Support of ESM UE requested bearer resource modification procedure + // Reference: 36.523-2 A.4.4-1/19 + + modulepar boolean pc_ESM_Notification := false; // @desc Support of ESM Notification procedure + // Reference: 36.523-2 A.4.4.1/71 + + modulepar boolean pc_ESM_UE_Modification_NW_TFT := false; // @desc Support for UE requested modification of network allocated TFTs + // Reference: 36.523-2 A.4.4-1/54 + + modulepar boolean pc_ETWS_message := false; // @desc Support of ETWS message + // Reference: 36.523-2 A.4.4-1/20 + + modulepar boolean pc_E_UTRAN_2_GERAN_PSHO := false; // @desc Support for inter-RAT PS handover from E_UTRAN to GERAN + // Reference: 36.523-2 A.4.4-1/52 + + modulepar boolean pc_E_UTRA_WLAN_offload := false; // @desc Support Offload to/from WLAN and supports S2b + // Reference: 36.523-2 A.4.2.1.1-1/8 + + modulepar boolean pc_EmergSpeech := false; // @desc Emergency Call + // Reference: 34.123-2 A.2/2 + + modulepar boolean pc_FDD := false; // @desc UE supports UTRA band as defined in TS 25.101 + // Reference: 34.123-2 A.1/1 + + modulepar boolean pc_FeatrGrp_101_F := false; // @desc DMRS with OCC (orthogonal cover code) and SGH (sequence group hopping) disabling + // Reference: 36.523-2 A.4.5-3a/1 + + modulepar boolean pc_FeatrGrp_101_T := false; // @desc DMRS with OCC (orthogonal cover code) and SGH (sequence group hopping) disabling + // Reference: 36.523-2 A.4.5-3b/1 + + modulepar boolean pc_FeatrGrp_102_F := false; // @desc Trigger type 1 SRS (aperiodic SRS) transmission (Up to X ports) + // Reference: 36.523-2 A.4.5-3a/2 + + modulepar boolean pc_FeatrGrp_102_T := false; // @desc Trigger type 1 SRS (aperiodic SRS) transmission (Up to X ports) + // Reference: 36.523-2 A.4.5-3b/2 + + modulepar boolean pc_FeatrGrp_103_F := false; // @desc PDSCH transmission mode 9 when up to 4 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3a/3 + + modulepar boolean pc_FeatrGrp_103_T := false; // @desc PDSCH transmission mode 9 when up to 4 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3b/3 + + modulepar boolean pc_FeatrGrp_104_F := false; // @desc PDSCH transmission mode 9 for TDD when 8 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3a/4 + + modulepar boolean pc_FeatrGrp_104_T := false; // @desc PDSCH transmission mode 9 for TDD when 8 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3b/4 + + modulepar boolean pc_FeatrGrp_105_F := false; // @desc Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-0:UE selected subband CQI without PMI, when PDSCH transmission mode 9 is configured.Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-1:UE selected subband CQI with single PMI, when PDSCH transmission mode 9 and up to 4 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3a/5 + + modulepar boolean pc_FeatrGrp_105_T := false; // @desc Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-0:UE selected subband CQI without PMI, when PDSCH transmission mode 9 is configured.Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-1:UE selected subband CQI with single PMI, when PDSCH transmission mode 9 and up to 4 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3b/5 + + modulepar boolean pc_FeatrGrp_106_F := false; // @desc Periodic CQI/PMI/RI/PTI reporting on PUCCH: Mode 2-1: UE selected subband CQI with single PMI, when PDSCH transmission mode 9 and 8 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3a/6 + + modulepar boolean pc_FeatrGrp_106_T := false; // @desc Periodic CQI/PMI/RI/PTI reporting on PUCCH: Mode 2-1: UE selected subband CQI with single PMI, when PDSCH transmission mode 9 and 8 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3b/6 + + modulepar boolean pc_FeatrGrp_107_F := false; // @desc Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-0: UE selected subband CQI without PMI, when PDSCH transmission mode 9 is configured. Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2: UE selected subband CQI with multiple PMI, when PDSCH transmission mode 9 and up to 4 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3a/7 + + modulepar boolean pc_FeatrGrp_107_T := false; // @desc Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-0: UE selected subband CQI without PMI, when PDSCH transmission mode 9 is configured. Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2: UE selected subband CQI with multiple PMI, when PDSCH transmission mode 9 and up to 4 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3b/7 + + modulepar boolean pc_FeatrGrp_108_F := false; // @desc Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2: UE selected subband CQI with multiple PMI, when PDSCH transmission mode 9 and 8 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3a/8 + + modulepar boolean pc_FeatrGrp_108_T := false; // @desc Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2: UE selected subband CQI with multiple PMI, when PDSCH transmission mode 9 and 8 CSI reference signal ports are configured + // Reference: 36.523-2 A.4.5-3b/8 + + modulepar boolean pc_FeatrGrp_109_F := false; // @desc Periodic CQI/PMI/RI reporting on PUCCH Mode 1-1, submode 1 + // Reference: 36.523-2 A.4.5-3a/9 + + modulepar boolean pc_FeatrGrp_109_T := false; // @desc Periodic CQI/PMI/RI reporting on PUCCH Mode 1-1, submode 1 + // Reference: 36.523-2 A.4.5-3b/9 + + modulepar boolean pc_FeatrGrp_10_F := false; // @desc Support of EUTRA RRC_CONNECTED to GERAN (Packet_)Idle by Cell Change Order, EUTRA RRC_CONNECTED to GERAN (Packet_)Idle by Cell Change Order with NACC (Network Assisted Cell Change) + // Reference: 36.523-2 A.4.5-1a/10 + + modulepar boolean pc_FeatrGrp_10_T := false; // @desc Support of EUTRA RRC_CONNECTED to GERAN (Packet_)Idle by Cell Change Order, EUTRA RRC_CONNECTED to GERAN (Packet_)Idle by Cell Change Order with NACC (Network Assisted Cell Change) + // Reference: 36.523-2 A.4.5-1b/10 + + modulepar boolean pc_FeatrGrp_110_F := false; // @desc Periodic CQI/PMI/RI reporting on PUCCH Mode 1-1, submode 2 + // Reference: 36.523-2 A.4.5-3a/10 + + modulepar boolean pc_FeatrGrp_110_T := false; // @desc Periodic CQI/PMI/RI reporting on PUCCH Mode 1-1, submode 2 + // Reference: 36.523-2 A.4.5-3b/10 + + modulepar boolean pc_FeatrGrp_111_F := false; // @desc Measurement reporting trigger Event A6 + // Reference: 36.523-2 A.4.5-3a/11 + + modulepar boolean pc_FeatrGrp_111_T := false; // @desc Measurement reporting trigger Event A6 + // Reference: 36.523-2 A.4.5-3b/11 + + modulepar boolean pc_FeatrGrp_112_F := false; // @desc SCell addition within the Handover to EUTRA procedure + // Reference: 36.523-2 A.4.5-3a/12 + + modulepar boolean pc_FeatrGrp_112_T := false; // @desc SCell addition within the Handover to EUTRA procedure + // Reference: 36.523-2 A.4.5-3b/12 + + modulepar boolean pc_FeatrGrp_113_F := false; // @desc Trigger type 0 SRS (periodic SRS) transmission on X Serving Cells + // Reference: 36.523-2 A.4.5-3a/13 + + modulepar boolean pc_FeatrGrp_113_T := false; // @desc Trigger type 0 SRS (periodic SRS) transmission on X Serving Cells + // Reference: 36.523-2 A.4.5-3b/13 + + modulepar boolean pc_FeatrGrp_114_F := false; // @desc Reporting of both UTRA CPICH RSCP and Ec/N0 in a Measurement Report + // Reference: 36.523-2 A.4.5-3a/14 + + modulepar boolean pc_FeatrGrp_114_T := false; // @desc Reporting of both UTRA CPICH RSCP and Ec/N0 in a Measurement Report + // Reference: 36.523-2 A.4.5-3b/14 + + modulepar boolean pc_FeatrGrp_115_F := false; // @desc time domain ICIC RLM/RRM measurement subframe restriction for the serving cell. time domain ICIC RRM measurement subframe restriction for neighbour cells. time domain ICIC CSI measurement subframe restriction + // Reference: 36.523-2 A.4.5-3a/15 + + modulepar boolean pc_FeatrGrp_115_T := false; // @desc time domain ICIC RLM/RRM measurement subframe restriction for the serving cell. time domain ICIC RRM measurement subframe restriction for neighbour cells. time domain ICIC CSI measurement subframe restriction + // Reference: 36.523-2 A.4.5-3b/15 + + modulepar boolean pc_FeatrGrp_116_F := false; // @desc Relative transmit phase continuity for spatial multiplexing in UL + // Reference: 36.523-2 A.4.5-3a/16 + + modulepar boolean pc_FeatrGrp_116_T := false; // @desc Relative transmit phase continuity for spatial multiplexing in UL + // Reference: 36.523-2 A.4.5-3b/16 + + modulepar boolean pc_FeatrGrp_11_F := false; // @desc Support of EUTRA RRC_CONNECTED to 1xRTT CS Active handover + // Reference: 36.523-2 A.4.5-1a/11 + + modulepar boolean pc_FeatrGrp_11_T := false; // @desc Support of EUTRA RRC_CONNECTED to 1xRTT CS Active handover + // Reference: 36.523-2 A.4.5-1b/11 + + modulepar boolean pc_FeatrGrp_12_F := false; // @desc Support of EUTRA RRC_CONNECTED to HRPD Active handover + // Reference: 36.523-2 A.4.5-1a/12 + + modulepar boolean pc_FeatrGrp_12_T := false; // @desc Support of EUTRA RRC_CONNECTED to HRPD Active handover + // Reference: 36.523-2 A.4.5-1b/12 + + modulepar boolean pc_FeatrGrp_13_F := false; // @desc Support of Inter-frequency handover (within FDD or TDD) + // Reference: 36.523-2 A.4.5-1a/13 + + modulepar boolean pc_FeatrGrp_13_T := false; // @desc Support of Inter-frequency handover (within FDD or TDD) + // Reference: 36.523-2 A.4.5-1b/13 + + modulepar boolean pc_FeatrGrp_14_F := false; // @desc Support of Measurement reporting event: Event A4 - Neighbour > threshold, Measurement reporting event: Event A5 - Serving < threshold1 & Neighbour > threshold2 + // Reference: 36.523-2 A.4.5-1a/14 + + modulepar boolean pc_FeatrGrp_14_T := false; // @desc Support of Measurement reporting event: Event A4 - Neighbour > threshold, Measurement reporting event: Event A5 - Serving < threshold1 & Neighbour > threshold2 + // Reference: 36.523-2 A.4.5-1b/14 + + modulepar boolean pc_FeatrGrp_15_F := false; // @desc Support of Measurement reporting event: Event B1 - Neighbour > threshold + // Reference: 36.523-2 A.4.5-1a/15 + + modulepar boolean pc_FeatrGrp_15_T := false; // @desc Support of Measurement reporting event: Event B1 - Neighbour > threshold + // Reference: 36.523-2 A.4.5-1b/15 + + modulepar boolean pc_FeatrGrp_16_F := false; // @desc Support of Periodical measurement reporting for non-ANR related measurements + // Reference: 36.523-2 A.4.5-1a/16 + + modulepar boolean pc_FeatrGrp_16_T := false; // @desc Support of Periodical measurement reporting for non-ANR related measurements + // Reference: 36.523-2 A.4.5-1b/16 + + modulepar boolean pc_FeatrGrp_17_F := false; // @desc Support of Periodical measurement reporting for SON / ANR and ANR related intra-frequency measurement reporting events + // Reference: 36.523-2 A.4.5-1a/17 + + modulepar boolean pc_FeatrGrp_17_T := false; // @desc Support of Periodical measurement reporting for SON / ANR and ANR related intra-frequency measurement reporting events + // Reference: 36.523-2 A.4.5-1b/17 + + modulepar boolean pc_FeatrGrp_18_F := false; // @desc Support of ANR related inter-frequency measurement reporting events + // Reference: 36.523-2 A.4.5-1a/18 + + modulepar boolean pc_FeatrGrp_18_T := false; // @desc Support of ANR related inter-frequency measurement reporting events + // Reference: 36.523-2 A.4.5-1b/18 + + modulepar boolean pc_FeatrGrp_19_F := false; // @desc Support of ANR related inter-RAT measurement reporting events + // Reference: 36.523-2 A.4.5-1a/19 + + modulepar boolean pc_FeatrGrp_19_T := false; // @desc Support of ANR related inter-RAT measurement reporting events + // Reference: 36.523-2 A.4.5-1b/19 + + modulepar boolean pc_FeatrGrp_1_F := false; // @desc Support of Intra-subframe frequency hopping for PUSCH scheduled by UL grant, Extended cyclic prefix with f = 7.5kHz for DL resource block, DCI format 3a (TPC commands for PUCCH and PUSCH with single bit power adjustments), Multi-user MIMO for PDSCH, Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-0 - UE selected subband CQI without PMI, Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2 - UE selected subband CQI with multiple PMI + // Reference: 36.523-2 A.4.5-1a/1 + + modulepar boolean pc_FeatrGrp_1_T := false; // @desc Support of Intra-subframe frequency hopping for PUSCH scheduled by UL grant, Extended cyclic prefix with f = 7.5kHz for DL resource block, DCI format 3a (TPC commands for PUCCH and PUSCH with single bit power adjustments), Multi-user MIMO for PDSCH, Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-0 - UE selected subband CQI without PMI, Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2 - UE selected subband CQI with multiple PMI + // Reference: 36.523-2 A.4.5-1b/1 + + modulepar boolean pc_FeatrGrp_20_F := false; // @desc Support of RB combination: SRB1 and SRB2 for DCCH + x AM DRB + x UM DRB + // Reference: 36.523-2 A.4.5-1a/20 + + modulepar boolean pc_FeatrGrp_20_T := false; // @desc Support of RB combination: SRB1 and SRB2 for DCCH + x AM DRB + x UM DRB + // Reference: 36.523-2 A.4.5-1b/20 + + modulepar boolean pc_FeatrGrp_21_F := false; // @desc Support of Predefined intra-subframe frequency hopping for PUSCH with N_sb > 1, Predefined inter-subframe frequency hopping for PUSCH with N_sb > 1 + // Reference: 36.523-2 A.4.5-1a/21 + + modulepar boolean pc_FeatrGrp_21_T := false; // @desc Support of Predefined intra-subframe frequency hopping for PUSCH with N_sb > 1, Predefined inter-subframe frequency hopping for PUSCH with N_sb > 1 + // Reference: 36.523-2 A.4.5-1b/21 + + modulepar boolean pc_FeatrGrp_22_F := false; // @desc Support of UTRAN measurements and reporting in E-UTRA connected mode + // Reference: 36.523-2 A.4.5-1a/22 + + modulepar boolean pc_FeatrGrp_22_T := false; // @desc Support of UTRAN measurements and reporting in E-UTRA connected mode + // Reference: 36.523-2 A.4.5-1b/22 + + modulepar boolean pc_FeatrGrp_23_F := false; // @desc Support of GERAN measurements and reporting in E-UTRA connected mode + // Reference: 36.523-2 A.4.5-1a/23 + + modulepar boolean pc_FeatrGrp_23_T := false; // @desc Support of GERAN measurements and reporting in E-UTRA connected mode + // Reference: 36.523-2 A.4.5-1b/23 + + modulepar boolean pc_FeatrGrp_24_F := false; // @desc Support of cdma2000 measurements and reporting in E-UTRA connected mode + // Reference: 36.523-2 A.4.5-1a/24 + + modulepar boolean pc_FeatrGrp_24_T := false; // @desc Support of cdma2000 measurements and reporting in E-UTRA connected mode + // Reference: 36.523-2 A.4.5-1b/24 + + modulepar boolean pc_FeatrGrp_25_F := false; // @desc Support of Inter-frequency measurements and reporting in E-UTRA connected mode + // Reference: 36.523-2 A.4.5-1a/25 + + modulepar boolean pc_FeatrGrp_25_T := false; // @desc Support of Inter-frequency measurements and reporting in E-UTRA connected mode + // Reference: 36.523-2 A.4.5-1b/25 + + modulepar boolean pc_FeatrGrp_26_F := false; // @desc Support of HRPD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode + // Reference: 36.523-2 A.4.5-1a/26 + + modulepar boolean pc_FeatrGrp_26_T := false; // @desc Support of HRPD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode + // Reference: 36.523-2 A.4.5-1b/26 + + modulepar boolean pc_FeatrGrp_27_F := false; // @desc Support of EUTRA RRC_CONNECTED to UTRA CELL_DCH CS handover + // Reference: 36.523-2 A.4.5-1a/27 + + modulepar boolean pc_FeatrGrp_27_T := false; // @desc Support of EUTRA RRC_CONNECTED to UTRA CELL_DCH CS handover + // Reference: 36.523-2 A.4.5-1b/27 + + modulepar boolean pc_FeatrGrp_28_F := false; // @desc Support of TTI bundling + // Reference: 36.523-2 A.4.5-1a/28 + + modulepar boolean pc_FeatrGrp_28_T := false; // @desc Support of TTI bundling + // Reference: 36.523-2 A.4.5-1b/28 + + modulepar boolean pc_FeatrGrp_29_F := false; // @desc Support of Semi-Persistent Scheduling + // Reference: 36.523-2 A.4.5-1a/29 + + modulepar boolean pc_FeatrGrp_29_T := false; // @desc Support of Semi-Persistent Scheduling + // Reference: 36.523-2 A.4.5-1b/29 + + modulepar boolean pc_FeatrGrp_2_F := false; // @desc Support of Simultaneous CQI and ACK/NACK on PUCCH, i.e. PUCCH format 2a and 2b, Absolute TPC command for PUSCH, Resource allocation type 1 for PDSCH, Periodic CQI/PMI/RI reporting on PUCCH: Mode 2- 0 - UE selected subband CQI without PMI, Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-1 - UE selected subband CQI with single PMI + // Reference: 36.523-2 A.4.5-1a/2 + + modulepar boolean pc_FeatrGrp_2_T := false; // @desc Support of Simultaneous CQI and ACK/NACK on PUCCH, i.e. PUCCH format 2a and 2b, Absolute TPC command for PUSCH, Resource allocation type 1 for PDSCH, Periodic CQI/PMI/RI reporting on PUCCH: Mode 2- 0 - UE selected subband CQI without PMI, Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-1 - UE selected subband CQI with single PMI + // Reference: 36.523-2 A.4.5-1b/2 + + modulepar boolean pc_FeatrGrp_30_F := false; // @desc Support of Handover between FDD and TDD + // Reference: 36.523-2 A.4.5-1a/30 + + modulepar boolean pc_FeatrGrp_30_T := false; // @desc Support of Handover between FDD and TDD + // Reference: 36.523-2 A.4.5-1b/30 + + modulepar boolean pc_FeatrGrp_31_F := false; // @desc Support of the mechanisms defined for cells broadcasting multi band information i.e. comprehending multiBandInfoList + // Reference: 36.523-2 A.4.5-1a/31 + + modulepar boolean pc_FeatrGrp_31_T := false; // @desc Support of the mechanisms defined for cells broadcasting multi band information i.e. comprehending multiBandInfoList + // Reference: 36.523-2 A.4.5-1b/31 + + modulepar boolean pc_FeatrGrp_33_F := false; // @desc Inter-RAT ANR features for UTRAN including: Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI + // Reference: 36.523-2 A.4.5-1d/1 + + modulepar boolean pc_FeatrGrp_33_T := false; // @desc Inter-RAT ANR features for UTRAN including: + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI + // Reference: 36.523-2 A.4.5-1e/1 + + modulepar boolean pc_FeatrGrp_34_F := false; // @desc Inter-RAT ANR features for GERAN including: + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI + // Reference: 36.523-2 A.4.5-1d/2 + + modulepar boolean pc_FeatrGrp_34_T := false; // @desc Inter-RAT ANR features for GERAN including: + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI + // Reference: 36.523-2 A.4.5-1e/2 + + modulepar boolean pc_FeatrGrp_35_F := false; // @desc Inter-RAT ANR features for 1xRTT including: + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI + // Reference: 36.523-2 A.4.5-1d/3 + + modulepar boolean pc_FeatrGrp_35_T := false; // @desc Inter-RAT ANR features for 1xRTT including: + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI + // Reference: 36.523-2 A.4.5-1e/3 + + modulepar boolean pc_FeatrGrp_36_F := false; // @desc Inter-RAT ANR features for HRPD including: + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI + // Reference: 36.523-2 A.4.5-1d/4 + + modulepar boolean pc_FeatrGrp_36_T := false; // @desc Inter-RAT ANR features for HRPD including: Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to portStrongestCellsForSON + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI + // Reference: 36.523-2 A.4.5-1e/4 + + modulepar boolean pc_FeatrGrp_37_F := false; // @desc Inter-RAT ANR features for UTRAN TDD including: + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI + // Reference: 36.523-2 A.4.5-1d/5 + + modulepar boolean pc_FeatrGrp_37_T := false; // @desc Inter-RAT ANR features for UTRAN TDD including: + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON + // Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI + // Reference: 36.523-2 A.4.5-1e/5 + + modulepar boolean pc_FeatrGrp_38_F := false; // @desc EUTRA RRC_CONNECTED to UTRA TDD CELL_DCH PS handover, if the UE supports both UTRAN FDD and UTRAN TDD + // Reference: 36.523-2 A.4.5-1d/6 + + modulepar boolean pc_FeatrGrp_38_T := false; // @desc EUTRA RRC_CONNECTED to UTRA TDD CELL_DCH PS handover, if the UE supports both UTRAN FDD and UTRAN TDD + // Reference: 36.523-2 A.4.5-1e/6 + + modulepar boolean pc_FeatrGrp_39_F := false; // @desc UTRAN TDD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode, if the UE supports both UTRAN FDD and UTRAN TDD + // Reference: 36.523-2 A.4.5-1d/7 + + modulepar boolean pc_FeatrGrp_39_T := false; // @desc UTRAN TDD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode, if the UE supports both UTRAN FDD and UTRAN TDD + // Reference: 36.523-2 A.4.5-1e/7 + + modulepar boolean pc_FeatrGrp_3_F := false; // @desc Support of Semi-persistent scheduling, TTI bundling, 5bit RLC UM SN, 7bit PDCP SN + // Reference: 36.523-2 A.4.5-1a/3 + + modulepar boolean pc_FeatrGrp_3_T := false; // @desc Support of Semi-persistent scheduling, TTI bundling, 5bit RLC UM SN, 7bit PDCP SN + // Reference: 36.523-2 A.4.5-1b/3 + + modulepar boolean pc_FeatrGrp_40_F := false; // @desc EUTRA RRC_CONNECTED to UTRA TDD CELL_DCH CS handover, if the UE supports both UTRAN FDD and UTRAN TDD + // Reference: 36.523-2 A.4.5-1d/8 + + modulepar boolean pc_FeatrGrp_40_T := false; // @desc EUTRA RRC_CONNECTED to UTRA TDD CELL_DCH CS handover, if the UE supports both UTRAN FDD and UTRAN TDD + // Reference: 36.523-2 A.4.5-1e/8 + + modulepar boolean pc_FeatrGrp_41_F := false; // @desc Measurement reporting event: Event B1 Neighbour > threshold for UTRAN FDD, if the UE supports UTRAN FDD and has set bit number 22 to 1 + // Reference: 36.523-2 A.4.5-1d/9 + + modulepar boolean pc_FeatrGrp_41_T := false; // @desc Measurement reporting event: Event B1 Neighbour > threshold for UTRAN FDD, if the UE supports UTRAN FDD and has set bit number 22 to 1 + // Reference: 36.523-2 A.4.5-1e/9 + + modulepar boolean pc_FeatrGrp_42_F := false; // @desc DCI format 3a (TPC commands for PUCCH and PUSCH with single bit power adjustments) + // Reference: 36.523-2 A.4.5-1d/10 + + modulepar boolean pc_FeatrGrp_42_T := false; // @desc DCI format 3a (TPC commands for PUCCH and PUSCH with single bit power adjustments) + // Reference: 36.523-2 A.4.5-1e/10 + + modulepar boolean pc_FeatrGrp_4_F := false; // @desc Support of Short DRX cycle + // Reference: 36.523-2 A.4.5-1a/4 + + modulepar boolean pc_FeatrGrp_4_T := false; // @desc Support of Short DRX cycle + // Reference: 36.523-2 A.4.5-1b/4 + + modulepar boolean pc_FeatrGrp_5_F := false; // @desc Support of Long DRX cycle, DRX command MAC control element + // Reference: 36.523-2 A.4.5-1a/5 + + modulepar boolean pc_FeatrGrp_5_T := false; // @desc Support of Long DRX cycle, DRX command MAC control element + // Reference: 36.523-2 A.4.5-1b/5 + + modulepar boolean pc_FeatrGrp_6_F := false; // @desc Support of Piroritized bit rate + // Reference: 36.523-2 A.4.5-1a/6 + + modulepar boolean pc_FeatrGrp_6_T := false; // @desc Support of Piroritized bit rate + // Reference: 36.523-2 A.4.5-1b/6 + + modulepar boolean pc_FeatrGrp_7_F := false; // @desc Support of RLC UM + // Reference: 36.523-2 A.4.5-1a/7 + + modulepar boolean pc_FeatrGrp_7_T := false; // @desc Support of RLC UM + // Reference: 36.523-2 A.4.5-1b/7 + + modulepar boolean pc_FeatrGrp_8_F := false; // @desc Support of EUTRA RRC_CONNECTED to UTRA CELL_DCH PS handover + // Reference: 36.523-2 A.4.5-1a/8 + + modulepar boolean pc_FeatrGrp_8_T := false; // @desc Support of EUTRA RRC_CONNECTED to UTRA CELL_DCH PS handover + // Reference: 36.523-2 A.4.5-1b/8 + + modulepar boolean pc_FeatrGrp_9_F := false; // @desc Support of EUTRA RRC_CONNECTED to GERAN GSM_Dedicated handover + // Reference: 36.523-2 A.4.5-1a/9 + + modulepar boolean pc_FeatrGrp_9_T := false; // @desc Support of EUTRA RRC_CONNECTED to GERAN GSM_Dedicated handover + // Reference: 36.523-2 A.4.5-1b/9 + + modulepar boolean pc_FullNameNetwork := false; // @desc Support of storage of the network full name + // Reference: 36.523-2 A.4.4-1/12 + + modulepar boolean pc_GERAN := false; // @desc UE Supports GSM and/or GPRS + // Reference: 36.523-2 A.4.1-1/7 + + modulepar boolean pc_GERAN_2_E_UTRAN_PSHO := false; // @desc Support of GERAN to E-UTRAN PS Handover + // Reference: 36.523-2 A.4.4-1/29 + + modulepar boolean pc_GERAN_2_E_UTRAN_meas := false; // @desc Supports Neighbour Cell measurements and Network controlled & autonomous cell reselection to E-UTRAN + // Reference: 36.523-2 A.4.4-1/21 + + modulepar boolean pc_GERAN_2_E_UTRAN_measreporting_CCN := false; // @desc Supports CCN towards E-UTRAN, E-UTRAN Neighbour cell measurement reporting and Network controlled cell reselection to E-UTRAN + // Reference: 36.523-2 A.4.4-1/39 + + modulepar boolean pc_HO_from_UTRA_to_eFDD := false; // @desc Support of Inter-RAT PS handover to E-UTRA from UTRA (FDD) + // Reference: 36.523-2 A.4.4-1/8 + + modulepar boolean pc_HO_from_UTRA_to_eTDD := false; // @desc Support of Inter-RAT PS handover to E-UTRA from UTRA (TDD) + // Reference: 36.523-2 A.4.4-1/53 + + modulepar boolean pc_HRPD := false; // @desc UE supports CDMA2000 HRPD band class + // Reference: 36.523-2, A.4.1-1/3 + + modulepar boolean pc_IMS := false; // @desc Support of IMS + // Reference: 36.523-2 A.4.4-1/25 + + modulepar boolean pc_IMSI_Detach := false; // @desc Support of detach for non-EPS services + // Reference: 36.523-2 A.4.4-1/34 + + modulepar boolean pc_IMS_APN_default := false; // @desc Configured with IMS APN as default APN + // Reference: 36.523-2 A.4.4-2/11 + + modulepar boolean pc_IMS_CS_PS_SRVCC := false; // @desc UE Supports CS to PS SRVCC + // Reference: 34.229-2 A.12/40 + + modulepar boolean pc_IMS_CS_PS_SRVCCAlert := false; // @desc UE Supports CS to PS SRVCC in alerting state + // Reference: 34.229-2 A.12/41 + + modulepar boolean pc_IMS_CS_PS_SRVCCMidCall := false; // @desc UE Supports CS to PS SRVCC and the MSC server assisted mid-call feature + // Reference: 34.229-2 A.12/42 + + modulepar boolean pc_IMS_SRVCCAlert := false; // @desc UE indicates g.3gpp.srvcc-alerting media feature tag in INVITE request or 180 response + // Reference: 34.229-2 A.12/34 + + modulepar boolean pc_IMS_emergency_call := false; // @desc Support of IMS emergency call + // Reference: 36.523-2 A.4.2.1.1-1/4 + + modulepar boolean pc_IPv4 := false; // @desc UE supports IPv4 (also defined in 36.523-2 A.4.4-1/95) + // Reference: 34.229-2 A.7/1 + + modulepar boolean pc_IPv6 := false; // @desc UE supports IPv6 (also defined in 36.523-2 A.4.4-1/96) + // Reference: 34.229-2 A.7/2 + + modulepar boolean pc_ISR := false; // @desc Support of ISR + // Reference: 36.523-2 A.4.4-1/5 + + modulepar boolean pc_ImmConnect := false; // @desc Immediate connection supported for all circuit switched basic services + // Reference: 34.123-2 A.20/6 + + modulepar boolean pc_InterFreq_ProximityIndication := false; // @desc Support of Inter Frequency Proximity Indication + // Reference: 36.523-2 A.4.4.1-76 + + modulepar boolean pc_IntraFreq_ProximityIndication := false; // @desc Support of Intra Frequency Proximity Indication + // Reference: 36.523-2 A.4.4.1-75 + + modulepar boolean pc_KeepEpsBearerParametersAfterNormalDetach := false; + // @desc If the UE supports this, then the next ATTACH after DETACH shall be done using AT command AT+CGATT=1. + // Otherwise it shall be done using AT+CGDCONT=1,"IP" followed by AT+CGACT=1 + // Reference: 36.523-2 A.4.4.2-10 + + modulepar boolean pc_LAP := false; // @desc Support of Low Access Priority Indication. + // Reference: 34.123-2 A.10/31 + + modulepar boolean pc_LAP_override := false; // @desc Support of Low Access Prioirty Override + // Reference: 34.123-2 A.10/37 + + modulepar boolean pc_LocalTimeZone := false; // @desc Support of storage of the local time zone + // Reference: 36.523-2 A.4.4-1/14 + + modulepar boolean pc_LoggedMeasurementsIdle := false; // @desc Support of logged measurements in RRC_IDLE + // Reference: 36.523-2 A.4.4-1/62 + + modulepar boolean pc_Manual_CSG_Selection := false; // @desc Support of Manual CSG selection + // Reference: 36.523-2 A.4.4-1/49 + + modulepar boolean pc_Multiple_PDN := false; // @desc Support for multiple PDN connections + // Reference: 36.523-2 A.4.4-1/30 + + modulepar boolean pc_NG114_v1_0 := false; // @desc Version 1.0 as of 07 August 2020 + // Reference: 34.229-2 Table A.21/1 + + modulepar boolean pc_NG114_v2_0 := false; // @desc Version 2.0 as of 07 August 2021 + // Reference: 34.229-2 Table A.21/2 + + modulepar boolean pc_NG_RAN_NR := false; // @desc NG-RAN NR (Option 2) + // Reference: 38.508-2 Table A.4.1-3/1 + + modulepar boolean pc_NR_5GC_EmergencyServices := false; // @desc Support of emergency services in NR connected to 5GCN + // Reference: 38.508-2 Table A.4.3.7-1/14 + + modulepar boolean pc_No_USIM_TestExecution := false; // @desc Support of test execution with no USIM + // Reference: 34.123-2 A.20/90 + + modulepar boolean pc_PLMN_EF_LRPLMNSI_Automatic_Mode_Exception := false; + // @desc Support of Automatic Mode EF_LRPLMSI PLMN Selection Expression + // Reference: 36.523-2 A.4.4-1/97 + + modulepar boolean pc_PLMN_Manual_Mode_Exception := false; // @desc Support of Manual Mode PLMN Selection Expression + // Reference: 36.523-2 A.4.4-1/98 + + modulepar boolean pc_PS := false; // @desc Packet Switched + // Reference: 34.123-2 A.3/2 + + modulepar boolean pc_PS_data_centric := false; // @desc Support of configuring the UE to PS data centric + // Reference: 36.523-2 A.4.4-2/8 + + modulepar boolean pc_PS_voice_centric := false; // @desc Support of configuring the UE to PS voice centric + // Reference: 36.523-2 A.4.4-2/7 + + modulepar boolean pc_PWS_UpperLayer := false; // @desc Presence of PWS upper layer for functions like duplicate definition + // Reference: 36.523-2 A.4.4-1/67 + + modulepar boolean pc_ProvideDST_inUse := false; // @desc UE supports a mechanism to provide daylight saving time + // Reference: 36.523-2 A.4.4-2/29 + + modulepar boolean pc_Provide_IMS_APN := false; // @desc Configured to provide IMS APN during initial attach + // Reference: 36.523-2 A.4.4-2/13 + + modulepar boolean pc_Provide_IMS_as_second_APN := false; // @desc Configured to provide IMS APN as the 2nd PDN connection + // Reference: 36.523-2 A.4.4-2/14 + + modulepar boolean pc_Provide_Internet_as_second_APN := false; // @desc Configured to provide Internet APN as the 2nd PDN connection + // Reference: 36.523-2 A.4.4-2/15 + + modulepar boolean pc_RLF_ReportForInterRAT_MRO := false; // @desc Support of Radio Link Failure Report for InterRAT MRO + // Reference: 36.523-2 A.4.4-1/94 + + modulepar boolean pc_ROHC_profile0x0001 := false; // @desc Support for ROHC profile0x0001 + // Reference: 36.523-2 A.4.4-1/40 + + modulepar boolean pc_ROHC_profile0x0002 := false; // @desc Support for ROHC profile0x0002 + // Reference: 36.523-2 A.4.4-1/41 + + modulepar boolean pc_ROHC_profile0x0003 := false; // @desc Support for ROHC profile0x0003 + // Reference: 36.523-2 A.4.4-1/42 + + modulepar boolean pc_ROHC_profile0x0004 := false; // @desc Support for ROHC profile0x0004 + // Reference: 36.523-2 A.4.4-1/43 + + modulepar boolean pc_ROHC_profile0x0006 := false; // @desc Support for ROHC profile0x0006 + // Reference: 36.523-2 A.4.4-1/44 + + modulepar boolean pc_ROHC_profile0x0101 := false; // @desc Support for ROHC profile0x0101 + // Reference: 36.523-2 A.4.4-1/45 + + modulepar boolean pc_ROHC_profile0x0102 := false; // @desc Support for ROHC profile0x0102 + // Reference: 36.523-2 A.4.4-1/46 + + modulepar boolean pc_ROHC_profile0x0103 := false; // @desc Support for ROHC profile0x0103 + // Reference: 36.523-2 A.4.4-1/47 + + modulepar boolean pc_ROHC_profile0x0104 := false; // @desc Support for ROHC profile0x0104 + // Reference: 36.523-2 A.4.4-1/48 + + modulepar boolean pc_Rach_Report := false; // @desc Support of delivery of rachReport upon request from the network + // Reference: 36.523-2 A.4.4-1/85 + + modulepar boolean pc_Re_Attach_AfterDetachColl := false; // @desc Support of automatic re-activation of the EPS bearers during network initiated detach, even though UE has initiated a detach procedure with detach type set to EPS detach or combined EPS/IMSI detach + // Reference: 36.523-2 A.4.4-1/55 + + modulepar boolean pc_RequestIPv4HAAddress_DuringAttach := false; // @desc Support for being configured to request the IPv4 address of the Home Agent during Attach procedure + // Reference: 36.523-2 A.4.4-1/23 + + modulepar boolean pc_RequestIPv6HAAddress_DuringAttach := false; // @desc Support for being configured to request the IPv6 address of the Home Agent during Attach procedure + // Reference: 36.523-2 A.4.4-1/22 + + modulepar boolean pc_SI_Neighbour_UMTS_Autonomous_Gaps := false; // @desc Upon configuration of si-RequestForHO by the network, supports acquistion of relevant information from a neighbouring UMTS cell by reading the SI of the neighbouring cell using autonomous gaps and reporting + // Reference: 36.523-2, A.4.4-1/100 + + modulepar boolean pc_SI_Neighbour_interFreq_Autonomous_Gaps := false; + // @desc Supports upon configuration of si-requestForHO by the network acquisition of relevant information from a neighbouring intrer-frequency cell by reading the SI of the neighouring cell using autonomous gaps and reporting + // Reference: 36.523-2, A.4.4-1/104 + + modulepar boolean pc_SI_Neighbour_intraFreq_Autonomous_Gaps := false; + // @desc Supports upon configuration of si-requestForHO by the network acquisition of relevant information from a neighbouring intra-frequency cell by reading the SI of the neighouring cell using autonomous gaps and reporting + // Reference: 36.523-2, A.4.4-1/103 + + modulepar boolean pc_SMS_SGs := false; // @desc The UE supports SMS over SGs and is configured for SMS over SGs. If true, at least one of pc_SMS_SGs_MT and pc_SMS_SGs_MO is true. If it is set to true, pc_combined_attach shall be set to true + // + // Reference: 36.523-2, A.4.2.1.1-1/2 + + modulepar boolean pc_SMS_SGs_MO := false; // @desc Support of Short Message Service (SMS) MO over SGs + // Reference: 36.523-2 A.4.4-1/4 + + modulepar boolean pc_SMS_SGs_MT := false; // @desc Support of Short Message Service (SMS) MT over SGs + // Reference: 36.523-2 A.4.4-1/3 + + modulepar boolean pc_SMS_SGs_Multi_MO := false; // @desc Support of sending concatenated multiple short message over SGs + // Reference: 36.523-2 A.4.4.1-72 + + modulepar boolean pc_SRVCC_GERAN_UTRAN := false; // @desc Support for SRVCC from E-UTRAN to GERAN/UTRAN + // Reference: 36.523-2 A.4.4-1/32 + + modulepar boolean pc_Semi_Persistence_Scheduling := false; // @desc Support of semi persistance scheduling + // Reference: 36.523-2 A.4.4-1/50 + + modulepar boolean pc_ShortNameNetwork := false; // @desc Support of storage of the network short name + // Reference: 36.523-2 A.4.4-1/13 + + modulepar boolean pc_Speech := false; // @desc UE supports Speech + // Reference: 34.123-2 A.2/1 + + modulepar boolean pc_Squal_based_CellReselection_between_E_UTRAN_and_GERAN := false; + // @desc Support of Squal based cell reselection to E-UTRAN from GERAN + // Reference: 36.523-2 A.4.4-1/79 + + modulepar boolean pc_Squal_based_CellReselection_to_E_UTRAN_from_UTRAN := false; + // @desc Support of Squal based cell reselection to E-UTRAN from UTRAN + // Reference: 36.523-2 A.4.4-1/57 + + modulepar boolean pc_Squal_based_CellReselection_to_UTRAN_from_E_UTRAN := false; + // @desc Support of Squal based cell reselection to UTRAN from E-UTRAN + // Reference: 36.523-2 A.4.4-1/56 + + modulepar boolean pc_StandaloneGNSS_Location := false; // @desc Support of standalone GNSS receiver to provide detailed location information in RRC measurement report and logged measurements in RRC_IDLE + // Reference: 36.523-2 A.4.4-1/63 + + modulepar boolean pc_SupportOpModeA := false; // @desc UE supports Operation Mode A + // Reference: 34.123-2 A.3/3 + + modulepar boolean pc_SwitchOnOff := false; // @desc switch on/off supported + // Reference: 34.123-2 A.20/35 + + modulepar boolean pc_TAU_connected_in_IMS := false; // @desc Support of TAU in connected mode. Applicable when configured to pc_voice_PS_1_CS_2 and pc_Attach + // Reference: 36.523-2 A.4.4.1-73 + + modulepar boolean pc_TAU_idle_in_IMS := false; // @desc Support of TAU in idle mode. Applicable when configured to pc_voice_PS_1_CS_2 and pc_Attach + // Reference: 36.523-2 A.4.4.1-74 + + modulepar boolean pc_TDD_HCR := false; // @desc UE supports UTRA band as defined in TS 25.102 + // Reference: 34.123-2 A.1/2 + + modulepar boolean pc_TDD_LCR := false; // @desc UE supports UTRA band as defined in TS 25.102 + // Reference: 34.123-2 A.1/3 + + modulepar boolean pc_TDD_VHCR := false; // @desc UE supports UTRA band as defined in TS 25.102 + // Reference: 34.123-2 A.1/8 + + modulepar boolean pc_TTI_Bundling := false; // @desc Support of TTI Bundling + // Reference: 36.523-2 A.4.4-1/51 + + modulepar boolean pc_TestModeforCSGproximity := false; // @desc Support of UE radio bearer test mode for CSG proximity testing + // Reference: 34.123-2 A.13/5 + + modulepar boolean pc_UE_supports_user_initiated_PDN_disconnect := false; + // @desc UE supports user initiated PDN disconnect + // Reference: 36.523-2 A.4.4-2/16 + + modulepar boolean pc_UL_MIMO := false; // @desc Support of UL MIMO + // Reference: 36.523-2 A.4.4-1/70 + + modulepar boolean pc_UMI_ProcNeeded_DuringCSFB := false; // @desc Requiring UMI proceeding to paging response + // Reference: 36.523-2 A.4.4-2/6 + + modulepar boolean pc_UMTS_GSM := false; // @desc UE supports GSM as defined in 21.904 + // Reference: 34.123-2 A.1/4 + + modulepar boolean pc_USIM_Removal := false; // @desc USIM removable without power down supported + // Reference: 36.523-2, A4.4-1/1 + + modulepar boolean pc_UTRA := false; // @desc UE supports UTRA + // Reference: 36.523-2 A.4.1-1/6 + + modulepar boolean pc_UTRAN_ANR := false; // @desc Support of UTRAN ANR + // Reference: 36.523-2 A.4.4-1/65 + + modulepar boolean pc_UTRAN_ProximityIndication := false; // @desc Support of UTRAN Proximity Indication + // Reference: 36.523-2 A.4.4.1/77 + + modulepar boolean pc_UTRA_FeatrGrp_1 := false; // @desc Support of UTRA CELL_PCH and URA_PCH to RRC_IDLE cell reselection + // Reference: 36.523-2 A.4.5-2/1 + + modulepar boolean pc_UTRA_FeatrGrp_2 := false; // @desc Support of EUTRAN measurements and reporting in connected mode + // Reference: 36.523-2 A.4.5-2/2 + + modulepar boolean pc_UTRA_FeatrGrp_3 := false; // @desc Support of UTRA CELL_FACH absolute priority cell reselection for high priority layers + // Reference: 36.523-2 A.4.5-2/3 + + modulepar boolean pc_UTRA_FeatrGrp_4 := false; // @desc Support of UTRA CELL_FACH absolute priority cell reselection for all layers + // Reference: 36.523-2 A.4.5-2/4 + + modulepar boolean pc_UeAssistedAgps := false; // @desc Support of UE assisted Network Assisted GPS L1 C/A + // Reference: 37.571-3 A.4.3-1/11 + + modulepar boolean pc_UeBasedAgps := false; // @desc Support of UE based Network Assisted GPS L1 C/A + // Reference: 37.571-3 A.4.3-1/10 + + modulepar boolean pc_UniversalAndLocalTimeZone := false; // @desc Support of storage of the universal time and local time zone + // Reference: 36.523-2 A.4.4-1/15 + + modulepar boolean pc_UpdateUE_LocationInformation := false; // @desc Update UE Location Information + // Reference: 36.523-2 A.4.3-2/3 + + modulepar boolean pc_UserInitiatedPLMN_Reselection := false; // @desc Support user initiated PLMN reselection in automatic mode + // Reference: 36.523-2 A.4.4-1/69 + + modulepar boolean pc_VoLTE := false; // @desc Support of VoLTE in GSMA PRD IR.92: "IMS profile for Voice and SMS" + // Reference: 36.523-2 A.4.4-1/33 + + modulepar boolean pc_WLAN_Meas_Imm_MDT := false; // @desc Support of WLAN Measurement Collection in Immediate MDT + // Reference: 36.523-2, A.4.4-1/187 + + modulepar boolean pc_WLAN_Meas_logged_MDT := false; // @desc Support of WLAN Measurement Collection in logged MDT + // Reference: 36.523-2, A.4.4-1/185 + + modulepar boolean pc_WLAN_voice := false; // @desc Support for IR.51 + // Reference: 36.523-2, A.4.4-1/117 + + modulepar boolean pc_XCAP_only_APN := false; // @desc Configured with an APN for XCAP only usage + // Reference: 36.523-2 A.4.4-2/12 + + modulepar boolean pc_XCAP_over_Internet_APN := false; // @desc Configured to use Internet APN for XCAP signalling + // Reference: 36.523-2 A.4.4-2/17 + + modulepar boolean pc_ZUC := false; // @desc Support of ZUC algorithm + // Reference: 36.523-2 A.4.4-1/99 + + modulepar boolean pc_eCall_Test_Call := false; // @desc Capability to trigger a Test eCall + // Reference: 34.123-2 A.10/19 + + modulepar boolean pc_eFDD := false; // @desc UE supports EUTRA FDD + // Reference: 36.523-2 A.4.1-1/1 + + modulepar boolean pc_eFDD_MultiBand := false; // @desc Support of multiple E-UTRA FDD bands + // Reference: 36.523-2 A.4.1-2/1 + + modulepar boolean pc_eMBMS := false; // @desc Support of eMBMS + // Reference: 36.523-2 A.4.2.1.1-1/5 + + modulepar boolean pc_eMBMS_SC := false; // @desc Support of eMBMS service continuity + // Reference: 36.523-2 A.4.2.1.1-1/7 + + modulepar boolean pc_eMinimumPeriodicSearchTimer := false; // @desc Support of Minimum Periodic Search Timer + // Reference: 36.523-2 A.4.4-1/84 + + modulepar boolean pc_eRedirectionUTRA := false; // @desc Support of use of the UTRA system information provided by RRCConnectionRelease upon redirection + // Reference: 36.523-2 A.4.4-1/31 + + modulepar boolean pc_eTDD := false; // @desc UE supports EUTRA TDD + // Reference: 36.523-2 A.4.1-1/2 + + modulepar boolean pc_eTDD_MultiBand := false; // @desc Support of multiple E-UTRA TDD bands + // Reference: 36.523-2 A.4.1-2/2 + + modulepar boolean pc_eWLAN := false; // @desc WLAN + // Reference: 36.523-2 A.4.1-1/5 + + modulepar boolean pc_multipleTimingAdvance := false; // @desc Support of multiple timing advances + // Reference: 36.523-2 A.4.4-1A/3 + + modulepar boolean pc_ue_CategoryDL_0 := false; // @desc UE Category DL 0 + // Reference: 36.523-2 A.4.3.2-2/1 + + modulepar boolean pc_ue_CategoryDL_10 := false; // @desc UE Category DL 10 + // Reference: 36.523-2 A.4.3.2-2/5 + + modulepar boolean pc_ue_CategoryDL_11 := false; // @desc UE Category DL 11 + // Reference: 36.523-2 A.4.3.2-2/6 + + modulepar boolean pc_ue_CategoryDL_12 := false; // @desc UE Category DL 12 + // Reference: 36.523-2 A.4.3.2-2/7 + + modulepar boolean pc_ue_CategoryDL_13 := false; // @desc UE Category DL 13 + // Reference: 36.523-2 A.4.3.2-2/8 + + modulepar boolean pc_ue_CategoryDL_14 := false; // @desc UE Category DL 14 + // Reference: 36.523-2 A.4.3.2-2/9 + + modulepar boolean pc_ue_CategoryDL_15 := false; // @desc UE Category DL 15 + // Reference: 36.523-2 A.4.3.2-2/10 + + modulepar boolean pc_ue_CategoryDL_16 := false; // @desc UE Category DL 16 + // Reference: 36.523-2 A.4.3.2-2/11 + + modulepar boolean pc_ue_CategoryDL_17 := false; // @desc UE Category DL 17 + // Reference: 36.523-2 A.4.3.2-2/12 + + modulepar boolean pc_ue_CategoryDL_18 := false; // @desc UE Category DL 18 + // Reference: 36.523-2 A.4.3.2-2/13 + + modulepar boolean pc_ue_CategoryDL_19 := false; // @desc UE Category DL 19 + // Reference: 36.523-2 A.4.3.2-2/14 + + modulepar boolean pc_ue_CategoryDL_1bis := false; // @desc Only in combination with Category UL 1bis and Category 1 UE + // Reference: 36.523-2 A.4.3.2-2A/2 + + modulepar boolean pc_ue_CategoryDL_20 := false; // @desc UE Category DL 20 + // Reference: 36.523-2 A.4.3.2-2/15 + + modulepar boolean pc_ue_CategoryDL_21 := false; // @desc UE Category DL 21 + // Reference: 36.523-2 A.4.3.2-2/16 + + modulepar boolean pc_ue_CategoryDL_22 := false; // @desc UE Category DL 22 + // Reference: 36.523-2 A.4.3.2-2/17 + + modulepar boolean pc_ue_CategoryDL_23 := false; // @desc UE Category DL 23 + // Reference: 36.523-2 A.4.3.2-2/18 + + modulepar boolean pc_ue_CategoryDL_24 := false; // @desc UE Category DL 24 + // Reference: 36.523-2 A.4.3.2-2/19 + + modulepar boolean pc_ue_CategoryDL_25 := false; // @desc UE Category DL 25 + // Reference: 36.523-2 A.4.3.2-2/20 + + modulepar boolean pc_ue_CategoryDL_26 := false; // @desc UE Category DL 26 + // Reference: 36.523-2 A.4.3.2-2/21 + + modulepar boolean pc_ue_CategoryDL_4 := false; // @desc UE Category DL 4 + // Reference: 36.523-2 A.4.3.2-2/1A + + modulepar boolean pc_ue_CategoryDL_6 := false; // @desc UE Category DL 6 + // Reference: 36.523-2 A.4.3.2-2/2 + + modulepar boolean pc_ue_CategoryDL_7 := false; // @desc UE Category DL 7 + // Reference: 36.523-2 A.4.3.2-3/4 + + modulepar boolean pc_ue_CategoryDL_9 := false; // @desc UE Category DL 9 + // Reference: 36.523-2 A.4.3.2-2/4 + + modulepar boolean pc_ue_CategoryDL_M1 := false; // @desc Only in combination with Category UL M1 + // Reference: 36.523-2 A.4.3.2-2A/1 + + modulepar boolean pc_ue_CategoryDL_M2 := false; // @desc Only in combination with Category UL M2 + // Reference: 36.523-2 A.4.3.2-2A/3 + + modulepar boolean pc_ue_CategoryUL_0 := false; // @desc UE Category UL 0 + // Reference: 36.523-2 A.4.3.2-3/1 + + modulepar boolean pc_ue_CategoryUL_13 := false; // @desc UE Category UL 13 + // Reference: 36.523-2 A.4.3.2-3/6 + + modulepar boolean pc_ue_CategoryUL_14 := false; // @desc UE Category UL 14 + // Reference: 36.523-2 A.4.3.2-3/7 + + modulepar boolean pc_ue_CategoryUL_15 := false; // @desc UE Category UL 15 + // Reference: 36.523-2 A.4.3.2-3/8 + + modulepar boolean pc_ue_CategoryUL_16 := false; // @desc UE Category UL 16 + // Reference: 36.523-2 A.4.3.2-3/9 + + modulepar boolean pc_ue_CategoryUL_17 := false; // @desc UE Category UL 17 + // Reference: 36.523-2 A.4.3.2-3/10 + + modulepar boolean pc_ue_CategoryUL_18 := false; // @desc UE Category UL 18 + // Reference: 36.523-2 A.4.3.2-3/11 + + modulepar boolean pc_ue_CategoryUL_19 := false; // @desc UE Category UL 19 + // Reference: 36.523-2 A.4.3.2-3/12 + + modulepar boolean pc_ue_CategoryUL_1bis := false; // @desc Only in combination with Category DL 1bis + // Reference: 36.523-2 A.4.3.2-3A/2 + + modulepar boolean pc_ue_CategoryUL_20 := false; // @desc UE Category UL 20 + // Reference: 36.523-2 A.4.3.2-3/13 + + modulepar boolean pc_ue_CategoryUL_21 := false; // @desc UE Category UL 21 + // Reference: 36.523-2 A.4.3.2-3/14 + + modulepar boolean pc_ue_CategoryUL_22 := false; // @desc UE Category UL 22 + // Reference: 36.523-2 A.4.3.2-3/15 + + modulepar boolean pc_ue_CategoryUL_23 := false; // @desc UE Category UL 23 + // Reference: 36.523-2 A.4.3.2-3/16 + + modulepar boolean pc_ue_CategoryUL_24 := false; // @desc UE Category UL 24 + // Reference: 36.523-2 A.4.3.2-3/17 + + modulepar boolean pc_ue_CategoryUL_25 := false; // @desc UE Category UL 25 + // Reference: 36.523-2 A.4.3.2-3/18 + + modulepar boolean pc_ue_CategoryUL_26 := false; // @desc UE Category UL 26 + // Reference: 36.523-2 A.4.3.2-3/19 + + modulepar boolean pc_ue_CategoryUL_3 := false; // @desc UE Category UL 3 + // Reference: 36.523-2 A.4.3.2-3/2 + + modulepar boolean pc_ue_CategoryUL_5 := false; // @desc UE Category UL 5 + // Reference: 36.523-2 A.4.3.2-3/3 + + modulepar boolean pc_ue_CategoryUL_7 := false; // @desc UE Category UL 7 + // Reference: 36.523-2 A.4.3.2-3/4 + + modulepar boolean pc_ue_CategoryUL_8 := false; // @desc UE Category UL 8 + // Reference: 36.523-2 A.4.3.2-3/5 + + modulepar boolean pc_ue_CategoryUL_M1 := false; // @desc Only in combination with Category DL M1 + // Reference: 36.523-2 A.4.3.2-3A/1 + + modulepar boolean pc_ue_CategoryUL_M2 := false; // @desc Only in combination with Category DL M2 + // Reference: 36.523-2 A.4.3.2-3A/3 + + modulepar boolean pc_ue_Category_1 := false; // @desc UE Category 1 + // Reference: 36.523-2 A.4.3.2-1/1 + + modulepar boolean pc_ue_Category_10 := false; // @desc UE Category 10 + // Reference: 36.523-2 A.4.3.2-1/10 + + modulepar boolean pc_ue_Category_11 := false; // @desc UE Category 11 + // Reference: 36.523-2 A.4.3.2-1/11 + + modulepar boolean pc_ue_Category_12 := false; // @desc UE Category 12 + // Reference: 36.523-2 A.4.3.2-1/12 + + modulepar boolean pc_ue_Category_2 := false; // @desc UE Category 2 + // Reference: 36.523-2 A.4.3.2-1/2 + + modulepar boolean pc_ue_Category_3 := false; // @desc UE Category 3 + // Reference: 36.523-2 A.4.3.2-1/3 + + modulepar boolean pc_ue_Category_4 := false; // @desc UE Category 4 + // Reference: 36.523-2 A.4.3.2-1/4 + + modulepar boolean pc_ue_Category_5 := false; // @desc UE Category 5 + // Reference: 36.523-2 A.4.3.2-1/5 + + modulepar boolean pc_ue_Category_6 := false; // @desc UE Category 6 + // Reference: 36.523-2 A.4.3.2-1/6 + + modulepar boolean pc_ue_Category_7 := false; // @desc UE Category 7 + // Reference: 36.523-2 A.4.3.2-1/7 + + modulepar boolean pc_ue_Category_8 := false; // @desc UE Category 8 + // Reference: 36.523-2 A.4.3.2-1/8 + + modulepar boolean pc_ue_Category_9 := false; // @desc UE Category 9 + // Reference: 36.523-2 A.4.3.2-1/9 + + modulepar boolean pc_voiceOverNR := false; // @desc Support IMS voice over NR + // Reference: 38.508-2 Table A.4.3.7-1/32 + + modulepar boolean pc_voice_PS_1_CS_2 := false; // @desc Configured voice domain preference + // Reference: 36.523-2 A.4.4-2/9 + + +} diff --git a/ttcn/Lib3GPP/PicsPixit/module.mk b/ttcn/Lib3GPP/PicsPixit/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..30c76666b4e78934f9c039eec3627cbd03abc75a --- /dev/null +++ b/ttcn/Lib3GPP/PicsPixit/module.mk @@ -0,0 +1,13 @@ + sources:= \ + EUTRA_NR_Parameters.ttcn \ + NAS_5GC_Parameters.ttcn \ + Parameters.ttcn + + #EUTRA_NR_Parameters.ttcn \ + #IMS_CC_Parameters.ttcn \ + #IMS_CommonParameters.ttcn \ + #module.mk \ + #NAS_5GC_Parameters.ttcn \ + #NR_Parameters.ttcn \ + #Parameters.ttcn \ + #POS_Parameters.ttcn diff --git a/ttcn/Lib3GPP/module.mk b/ttcn/Lib3GPP/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..e0370b2ac931efab4352899f1213fbd582cdc4e6 --- /dev/null +++ b/ttcn/Lib3GPP/module.mk @@ -0,0 +1,14 @@ +sources := \ + ## Parameters.ttcn \ + ## NAS_5GC_Parameters.ttcn + +modules :=\ + Common \ + Common4G5G \ + CommonIP \ + EPS_NAS \ + NAS \ + NG_NAS \ + NasEmulation \ + PicsPixit + diff --git a/ttcn/Lib3gpp/ttcn/Etsi_ts_129512_TypesAndValues.ttcn b/ttcn/Lib3gpp/ttcn/Etsi_ts_129512_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..5afbbdd470ec946b3d70a8e68a3e1ad4f99a4d91 --- /dev/null +++ b/ttcn/Lib3gpp/ttcn/Etsi_ts_129512_TypesAndValues.ttcn @@ -0,0 +1,117 @@ +module Etsi_ts_129512_TypesAndValues { + + // JSON + import from Json all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // Lib3gpp + import from Etsi_ts_129571_TypesAndValues all; + + /** + * @desc RanNasRelCause + * @member ngApCause Indicates the cause value of NGAP protocol + * @member fivegMmCause Indicates the cause value of 5GMM protocol + * @member fivegSmCause Indicates the cause value of 5GSM protocol + * @member epsCause Indicates the RAN/NAS cause value for EPS + * @see ETSI TS 129 512 V16.20.0 (2025-06) Table 5.6.2.28-1: Definition of type RanNasRelCause + */ + type record RanNasRelCause { + NgApCause ngApCause optional, + FiveGMmCause fivegMmCause optional, + FiveGSmCause fivegSmCause optional, + EpsRanNasRelCause epsCause optional + } with { + variant (fivegMmCause) "name as '5gMmCause'"; + variant (fivegSmCause) "name as '5gSmCause'"; + } // End of type RanNasRelCause + type record of RanNasRelCause RanNasRelCauseList; + + /** + * @desc AccNetChargingAddress + * @member anChargIpv4Addr Includes the IPv4 address of network entity within the access network performing charging + * @member anChargIpv6Addr Includes the IPv6 address of network entity within the access network performing charging + * @see ETSI TS 129 512 V16.20.0 (2025-06) Table 5.6.2.35-1: Definition of type AccNetChargingAddress + */ + type record AccNetChargingAddress { + Ipv4Addr anChargIpv4Addr optional, + Ipv6Addr anChargIpv6Addr optional + } // End of type AccNetChargingAddress + + /** + * @desc AdditionalAccessInfo + * @member accessType The Access Type where the served UE is camping + * @member ratType The RAT Type where the served UE is camping + * @see ETSI TS 129 512 V16.20.0 (2025-06) Table 5.6.2.43-1: Definition of type AdditionalAccessInfo + */ + type record AdditionalAccessInfo { + AccessType accessType, + RatType ratType optional + } // End of type AdditionalAccessInfo + + /** + * @desc PortManagementContainer + * @member portManCont Transports TSN port management information for a DS-TT port or a NWTT port message + * @member portNum Provides port number for a DS-TT port or a NW-TT port + * @see ETSI TS 129 512 V16.20.0 (2025-06) Table 5.6.2.45-1: Definition of type PortManagementContainer + */ + type record PortManagementContainer { + octetstring portManCont, + TsnPortNumber portNum + } // End of type PortManagementContainer + type record of PortManagementContainer PortManagementContainerList; + + /** + * @desc BridgeManagementContainer + * @member bridgeManCont Transports a Bridge management service message + * @see ETSI TS 129 512 V16.20.0 (2025-06) Table 5.6.2.47-1: Definition of type BridgeManagementContainer + */ + type record BridgeManagementContainer { + octetstring bridgeManCont + } // End of type BridgeManagementContainer + + /** + * @desc Port number of a DS-TT or NW-TT port + * @see ETSI TS 129 512 V16.20.0 (2025-06) Table 5.6.3.2-1: Simple data types + */ + type Json.UInteger TsnPortNumber; + + /** + * @desc Indicates the 5GSM cause code value + * @see ETSI TS 3GPP TS 129 512 + */ + type Json.UInteger FiveGSmCause; + + /** + * @desc Indicates the RAN or NAS release cause code information in 3GPP-EPS access type or indicates the TWAN or untrusted WLAN release cause code information in Non-3GPP-EPS access type + * @see ETSI TS 3GPP TS 129 512 + */ + type Json.String EpsRanNasRelCause; + + /** + * @desc AfSigProtocol + * @see ETSI TS 129 512 V16.21.0 (2025-01) Clause 5.6.3.10 Enumeration: AfSigProtocol + */ + type enumerated AfSigProtocol { + e_NO_INFORMATION (1), + e_SIP (2) + } with { + variant "JSON: as number" + } + + /** + * @desc NetLocAccessSupport + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.27 Enumeration: NetLocAccessSupport + */ + type enumerated NetLocAccessSupport { + e_ANR_NOT_SUPPORTED (1), + e_TZR_NOT_SUPPORTED (2), + e_LOC_NOT_SUPPORTED (3) + } with { + variant "JSON: as number" + } + +} with { + encode "JSON"; +} // End of module Etsi_ts_129512_TypesAndValues \ No newline at end of file diff --git a/ttcn/Lib3gpp/ttcn/Etsi_ts_129514_Pixits.ttcn b/ttcn/Lib3gpp/ttcn/Etsi_ts_129514_Pixits.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6eb6af7fe7c586b972ae9c226a5f505b3298b202 --- /dev/null +++ b/ttcn/Lib3gpp/ttcn/Etsi_ts_129514_Pixits.ttcn @@ -0,0 +1,27 @@ +module Etsi_ts_129514_Pixits { + + // JSON + import from Json all; + + // Lib3gpp/Etsi_ts_129514 + import from Etsi_ts_129512_TypesAndValues all; + import from Etsi_ts_129571_TypesAndValues all; + import from Etsi_ts_129514_TypesAndValues all; + + modulepar Json.String PX_SUPPORTED_FEATURES := ""; + + modulepar AfRequestedData PX_AF_REQ_DATA := e_UE_IDENTITY; + + modulepar Json.AnyURI PX_SERVICE_URN := "urn:sos*"; + + modulepar Ipv4Addr PX_IPV4_ADDR := ""; + + modulepar Ipv4Addr PX_IPV6_ADDR := ""; + + modulepar Gpsi PX_GPSI := ""; + + modulepar Pei PX_PEI := ""; + + modulepar Supi PX_SUPI := ""; + +} // End of module Etsi_ts_129514_Pixits \ No newline at end of file diff --git a/ttcn/Lib3gpp/ttcn/Etsi_ts_129514_Templates.ttcn b/ttcn/Lib3gpp/ttcn/Etsi_ts_129514_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1aa0f11791b90ddf74391a32d88d3f5eeb37ad33 --- /dev/null +++ b/ttcn/Lib3gpp/ttcn/Etsi_ts_129514_Templates.ttcn @@ -0,0 +1,504 @@ +module Etsi_ts_129514_Templates { + + // JSON + import from Json all; + + // Lib3gpp/Etsi_ts_129514 + import from Etsi_ts_129512_TypesAndValues all; + import from Etsi_ts_129571_TypesAndValues all; + import from Etsi_ts_129514_TypesAndValues all; + import from Etsi_ts_129514_Pixits all; + + template (omit) AppSessionContext m_app_session_context( + in template (omit) AppSessionContextReqData p_ascReqData := omit, + in template (omit) AppSessionContextRespData p_ascRespData := omit, + in template (omit) EventsNotification p_evsNotif := omit + ) := { + ascReqData := p_ascReqData, + ascRespData := p_ascRespData, + evsNotif := p_evsNotif + } // End of template m_app_session_context + + template AppSessionContext mw_app_session_context( + template AppSessionContextReqData p_ascReqData := *, + template AppSessionContextRespData p_ascRespData := *, + template EventsNotification p_evsNotif := * + ) := { + ascReqData := p_ascReqData, + ascRespData := p_ascRespData, + evsNotif := p_evsNotif + } // End of template mw_app_session_context + + template (omit) AppSessionContextReqData m_app_session_context_req_data( + in template (value) SupportedFeatures p_suppFeat := PX_SUPPORTED_FEATURES, + in template (omit) AfAppId p_afAppId := omit, + in template (omit) ApplicationChargingId p_afChargId := omit, + in template (omit) AfRequestedData p_afReqData := omit, + in template (omit) AfRoutingRequirement p_afRoutReq := omit, + in template (omit) AspId p_aspId := omit, + in template (omit) BdtReferenceId p_bdtRefId := omit, + in template (omit) Dnn p_dnn := omit, + in template (omit) EventsSubscReqData p_evSubsc := omit, + in template (omit) Json.String p_ipDomain := omit, + in template (omit) Json.String p_mcpttId := omit, + in template (omit) Json.String p_mcVideoId := omit, + in template (omit) MediaComponentMap p_medComponents := omit, + in template (omit) Json.String p_mpsId := omit, + in template (omit) Json.String p_mcsId := omit, + in template (omit) PreemptionControlInformation p_preemptControlInfo := omit, + in template (omit) ReservPriority p_resPrio := omit, + in template (omit) ServiceInfoStatus p_servInfStatus := omit, + in template (omit) ServiceUrn p_servUrn := omit, + in template (omit) Snssai p_sliceInfo := omit, + in template (omit) SponId p_sponId := omit, + in template (omit) SponsoringStatus p_sponStatus := omit, + in template (omit) Supi p_supi := omit, + in template (omit) Gpsi p_gpsi := omit, + in template (omit) Ipv4Addr p_ueIpv4 := omit, + in template (omit) Ipv6Addr p_ueIpv6 := omit, + in template (omit) MacAddr48 p_ueMac := omit, + in template (omit) BridgeManagementContainer p_tsnBridgeManCont := omit, + in template (omit) PortManagementContainer p_tsnPortManContDstt := omit, + in template (omit) PortManagementContainerList p_tsnPortManContNwtts := omit + ) := { + afAppId := p_afAppId, + afChargId := p_afChargId, + afReqData := p_afReqData, + afRoutReq := p_afRoutReq, + aspId := p_aspId, + bdtRefId := p_bdtRefId, + dnn := p_dnn, + evSubsc := p_evSubsc, + ipDomain := p_ipDomain, + mcpttId := p_mcpttId, + mcVideoId := p_mcVideoId, + medComponents := p_medComponents, + mpsId := p_mpsId, + mcsId := p_mcsId, + preemptControlInfo := p_preemptControlInfo, + resPrio := p_resPrio, + servInfStatus := p_servInfStatus, + servUrn := p_servUrn, + sliceInfo := p_sliceInfo, + sponId := p_sponId, + sponStatus := p_sponStatus, + supi := p_supi, + gpsi := p_gpsi, + suppFeat := p_suppFeat, + ueIpv4 := p_ueIpv4, + ueIpv6 := p_ueIpv6, + ueMac := p_ueMac, + tsnBridgeManCont := p_tsnBridgeManCont, + tsnPortManContDstt := p_tsnPortManContDstt, + tsnPortManContNwtts := p_tsnPortManContNwtts + } // End of template m_app_session_context_req_data + + template (present) AppSessionContextReqData mw_app_session_context_req_data( + template (present) SupportedFeatures p_suppFeat := ?, + template AfAppId p_afAppId := *, + template ApplicationChargingId p_afChargId := *, + template AfRequestedData p_afReqData := *, + template AfRoutingRequirement p_afRoutReq := *, + template AspId p_aspId := *, + template BdtReferenceId p_bdtRefId := *, + template Dnn p_dnn := *, + template EventsSubscReqData p_evSubsc := *, + template Json.String p_ipDomain := *, + template Json.String p_mcpttId := *, + template Json.String p_mcVideoId := *, + template MediaComponentMap p_medComponents := *, + template Json.String p_mpsId := *, + template Json.String p_mcsId := *, + template PreemptionControlInformation p_preemptControlInfo := *, + template ReservPriority p_resPrio := *, + template ServiceInfoStatus p_servInfStatus := *, + template ServiceUrn p_servUrn := *, + template Snssai p_sliceInfo := *, + template SponId p_sponId := *, + template SponsoringStatus p_sponStatus := *, + template Supi p_supi := *, + template Gpsi p_gpsi := *, + template Ipv4Addr p_ueIpv4 := *, + template Ipv6Addr p_ueIpv6 := *, + template MacAddr48 p_ueMac := *, + template BridgeManagementContainer p_tsnBridgeManCont := *, + template PortManagementContainer p_tsnPortManContDstt := *, + template PortManagementContainerList p_tsnPortManContNwtts := * + ) := { + afAppId := p_afAppId, + afChargId := p_afChargId, + afReqData := p_afReqData, + afRoutReq := p_afRoutReq, + aspId := p_aspId, + bdtRefId := p_bdtRefId, + dnn := p_dnn, + evSubsc := p_evSubsc, + ipDomain := p_ipDomain, + mcpttId := p_mcpttId, + mcVideoId := p_mcVideoId, + medComponents := p_medComponents, + mpsId := p_mpsId, + mcsId := p_mcsId, + preemptControlInfo := p_preemptControlInfo, + resPrio := p_resPrio, + servInfStatus := p_servInfStatus, + servUrn := p_servUrn, + sliceInfo := p_sliceInfo, + sponId := p_sponId, + sponStatus := p_sponStatus, + supi := p_supi, + gpsi := p_gpsi, + suppFeat := p_suppFeat, + ueIpv4 := p_ueIpv4, + ueIpv6 := p_ueIpv6, + ueMac := p_ueMac, + tsnBridgeManCont := p_tsnBridgeManCont, + tsnPortManContDstt := p_tsnPortManContDstt, + tsnPortManContNwtts := p_tsnPortManContNwtts + } // End of template mw_app_session_context_req_data + + template (omit) AppSessionContextRespData m_app_session_context_resp_data( + in template (omit) ServAuthInfo p_servAuthInfo := omit, + in template (omit) UeIdentityInfoList p_ueIds := omit, + in template (omit) SupportedFeatures p_suppFeat := omit + ) := { + servAuthInfo := p_servAuthInfo, + ueIds := p_ueIds, + suppFeat := p_suppFeat + } // End of template m_app_session_context_resp_data + + template AppSessionContextRespData mw_app_session_context_resp_data( + template ServAuthInfo p_servAuthInfo := *, + template UeIdentityInfoList p_ueIds := *, + template SupportedFeatures p_suppFeat := * + ) := { + servAuthInfo := p_servAuthInfo, + ueIds := p_ueIds, + suppFeat := p_suppFeat + } // End of template mw_app_session_context_resp_data + + template (omit) EventsSubscReqData m_events_subsc_req_data( + in template (value) AfEventSubscriptionList p_events, + in template (omit) Json.AnyURI p_notifUri := omit, + in template (omit) RequestedQosMonitoringParameterList p_reqQosMonParams := omit, + in template (omit) QosMonitoringInformation p_qosMon := omit, + in template (omit) RequiredAccessInfoList p_reqAnis := omit, + in template (omit) UsageThreshold p_usgThres := omit, + in template (omit) Json.String p_notifCorreId := omit + ) := { + events := p_events, + notifUri := p_notifUri, + reqQosMonParams := p_reqQosMonParams, + qosMon := p_qosMon, + reqAnis := p_reqAnis, + usgThres := p_usgThres, + notifCorreId := p_notifCorreId + } // End of template m_events_subsc_req_data + + template (present) EventsSubscReqData mw_events_subsc_req_data( + template (present) AfEventSubscriptionList p_events := ?, + template Json.AnyURI p_notifUri := *, + template RequestedQosMonitoringParameterList p_reqQosMonParams := *, + template QosMonitoringInformation p_qosMon := *, + template RequiredAccessInfoList p_reqAnis := *, + template UsageThreshold p_usgThres := *, + template Json.String p_notifCorreId := * + ) := { + events := p_events, + notifUri := p_notifUri, + reqQosMonParams := p_reqQosMonParams, + qosMon := p_qosMon, + reqAnis := p_reqAnis, + usgThres := p_usgThres, + notifCorreId := p_notifCorreId + } // End of template mw_events_subsc_req_data + + template (omit) UeIdentityInfo m_ue_identity_info( + in template (omit) Gpsi p_gpsi := PX_GPSI, + in template (omit) Pei p_pei := PX_PEI, + in template (omit) Supi p_supi := PX_SUPI + ) := { + gpsi := p_gpsi, + pei := p_pei, + supi := p_supi + } // End of template m_ue_identity_info + + template UeIdentityInfo mw_ue_identity_info( + template Gpsi p_gpsi := *, + template Pei p_pei := *, + template Supi p_supi := * + ) := { + gpsi := p_gpsi, + pei := p_pei, + supi := p_supi + } // End of template mw_ue_identity_info + + template (omit) EventsNotification m_events_notification( + in template (value) Json.AnyURI p_evSubsUri, + in template (value) AfEventNotificationList p_evNotifs, + in template (omit) AccessType p_accessType := omit, + in template (omit) AdditionalAccessInfo p_addAccessInfo := omit, + in template (omit) AdditionalAccessInfo p_relAccessInfo := omit, + in template (omit) AccNetChargingAddress p_anChargAddr := omit, + in template (omit) AccessNetChargingIdentifierList p_anChargIds := omit, + in template (omit) AnGwAddress p_anGwAddr := omit, + in template (omit) ResourcesAllocationInfoList p_failedResourcAllocReports := omit, + in template (omit) ResourcesAllocationInfoList p_succResourcAllocReports := omit, + in template (omit) NetLocAccessSupport p_noNetLocSupp := omit, + in template (omit) OutOfCreditInformationList p_outOfCredReports := omit, + in template (omit) PlmnIdNid p_plmnId := omit, + in template (omit) QosNotificationControlInfoList p_qncReports := omit, + in template (omit) QosMonitoringReportList p_qosMonReports := omit, + in template (omit) RanNasRelCauseList p_ranNasRelCauses := omit, + in template (omit) RatType p_ratType := omit, + in template (omit) UserLocation p_ueLoc := omit, + in template (omit) DateTime p_ueLocTime := omit, + in template (omit) TimeZone p_ueTimeZone := omit, + in template (omit) AccumulatedUsage p_usgRep := omit, + in template (omit) BridgeManagementContainer p_tsnBridgeManCont := omit, + in template (omit) PortManagementContainer p_tsnPortManContDstt := omit, + in template (omit) PortManagementContainerList p_tsnPortManContNwtts := omit + ) := { + accessType := p_accessType, + addAccessInfo := p_addAccessInfo, + relAccessInfo := p_relAccessInfo, + anChargAddr := p_anChargAddr, + anChargIds := p_anChargIds, + anGwAddr := p_anGwAddr, + evSubsUri := p_evSubsUri, + evNotifs := p_evNotifs, + failedResourcAllocReports := p_failedResourcAllocReports, + succResourcAllocReports := p_succResourcAllocReports, + noNetLocSupp := p_noNetLocSupp, + outOfCredReports := p_outOfCredReports, + plmnId := p_plmnId, + qncReports := p_qncReports, + qosMonReports := p_qosMonReports, + ranNasRelCauses := p_ranNasRelCauses, + ratType := p_ratType, + ueLoc := p_ueLoc, + ueLocTime := p_ueLocTime, + ueTimeZone := p_ueTimeZone, + usgRep := p_usgRep, + tsnBridgeManCont := p_tsnBridgeManCont, + tsnPortManContDstt := p_tsnPortManContDstt, + tsnPortManContNwtts := p_tsnPortManContNwtts + } // End of template m_events_notification + + template (present) EventsNotification mw_events_notification( + template (present) Json.AnyURI p_evSubsUri := ?, + template (present) AfEventNotificationList p_evNotifs := ?, + template AccessType p_accessType := *, + template AdditionalAccessInfo p_addAccessInfo := *, + template AdditionalAccessInfo p_relAccessInfo := *, + template AccNetChargingAddress p_anChargAddr := *, + template AccessNetChargingIdentifierList p_anChargIds := *, + template AnGwAddress p_anGwAddr := *, + template ResourcesAllocationInfoList p_failedResourcAllocReports := *, + template ResourcesAllocationInfoList p_succResourcAllocReports := *, + template NetLocAccessSupport p_noNetLocSupp := *, + template OutOfCreditInformationList p_outOfCredReports := *, + template PlmnIdNid p_plmnId := *, + template QosNotificationControlInfoList p_qncReports := *, + template QosMonitoringReportList p_qosMonReports := *, + template RanNasRelCauseList p_ranNasRelCauses := *, + template RatType p_ratType := *, + template UserLocation p_ueLoc := *, + template DateTime p_ueLocTime := *, + template TimeZone p_ueTimeZone := *, + template AccumulatedUsage p_usgRep := *, + template BridgeManagementContainer p_tsnBridgeManCont := *, + template PortManagementContainer p_tsnPortManContDstt := *, + template PortManagementContainerList p_tsnPortManContNwtts := * + ) := { + accessType := p_accessType, + addAccessInfo := p_addAccessInfo, + relAccessInfo := p_relAccessInfo, + anChargAddr := p_anChargAddr, + anChargIds := p_anChargIds, + anGwAddr := p_anGwAddr, + evSubsUri := p_evSubsUri, + evNotifs := p_evNotifs, + failedResourcAllocReports := p_failedResourcAllocReports, + succResourcAllocReports := p_succResourcAllocReports, + noNetLocSupp := p_noNetLocSupp, + outOfCredReports := p_outOfCredReports, + plmnId := p_plmnId, + qncReports := p_qncReports, + qosMonReports := p_qosMonReports, + ranNasRelCauses := p_ranNasRelCauses, + ratType := p_ratType, + ueLoc := p_ueLoc, + ueLocTime := p_ueLocTime, + ueTimeZone := p_ueTimeZone, + usgRep := p_usgRep, + tsnBridgeManCont := p_tsnBridgeManCont, + tsnPortManContDstt := p_tsnPortManContDstt, + tsnPortManContNwtts := p_tsnPortManContNwtts + } // End of template mw_events_notification + + template (omit) AfEventSubscription m_af_event_subscription( + in template (value) AfEvent p_events, + in template (omit) AfNotifMethod p_notifMethod := omit, + in template (omit) DurationSec p_repPeriod := omit, + in template (omit) DurationSec p_waitTime := omit + ) := { + events := p_events, + notifMethod := p_notifMethod, + repPeriod := p_repPeriod, + waitTime := p_waitTime + } // End of template m_af_event_subscription + + template (present) AfEventSubscription mw_af_event_subscription( + template (present) AfEvent p_events, + template AfNotifMethod p_notifMethod := *, + template DurationSec p_repPeriod := *, + template DurationSec p_waitTime := * + ) := { + events := p_events, + notifMethod := p_notifMethod, + repPeriod := p_repPeriod, + waitTime := p_waitTime + } // End of template mw_af_event_subscription + + template (omit) AfEventNotification m_af_event_notification( + in template (value) AfEvent p_events, + in template (omit) FlowsList p_flows := omit + + ) := { + events := p_events, + flows := p_flows + } // End of template m_af_event_notification + + template (present) AfEventNotification mw_af_event_notification( + in template (present) AfEvent p_events := ?, + in template FlowsList p_flows := * + + ) := { + events := p_events, + flows := p_flows + } // End of template mw_af_event_notification + + template (omit) ResourcesAllocationInfo m_resources_allocation_info( + in template (omit) MediaComponentResourcesStatus p_mcResourcStatus := omit, + in template (omit) FlowsList p_flows := omit, + in template (omit) Json.String p_altSerReq := omit + ) := { + mcResourcStatus := p_mcResourcStatus, + flows := p_flows, + altSerReq := p_altSerReq + } // End of template m_resources_allocation_info + + template (present) ResourcesAllocationInfo mw_resources_allocation_info( + template MediaComponentResourcesStatus p_mcResourcStatus := *, + template FlowsList p_flows := *, + template Json.String p_altSerReq := * + ) := { + mcResourcStatus := p_mcResourcStatus, + flows := p_flows, + altSerReq := p_altSerReq + } // End of template mw_resources_allocation_info + + + + + + + + + + + template (omit) AfRoutingRequirement m_af_routing_requirement( + in template (omit) Json.Bool p_appReloc := omit, + in template (omit) RouteToLocationList p_routeToLocs := omit, + in template (omit) SpatialValidity p_spVal := omit, + in template (omit) TemporalValidityList p_tempVals := omit, + in template (omit) UpPathChgEvent p_upPathChgSub := omit, + in template (omit) Json.Bool p_addrPreserInd := omit + ) := { + appReloc := p_appReloc, + routeToLocs := p_routeToLocs, + spVal := p_spVal, + tempVals := p_tempVals, + upPathChgSub := p_upPathChgSub, + addrPreserInd := p_addrPreserInd + } // End of template m_af_routing_requirement + + template AfRoutingRequirement mw_af_routing_requirement( + template Json.Bool p_appReloc := *, + template RouteToLocationList p_routeToLocs := *, + template SpatialValidity p_spVal := *, + template TemporalValidityList p_tempVals := *, + template UpPathChgEvent p_upPathChgSub := *, + template Json.Bool p_addrPreserInd := * + ) := { + appReloc := p_appReloc, + routeToLocs := p_routeToLocs, + spVal := p_spVal, + tempVals := p_tempVals, + upPathChgSub := p_upPathChgSub, + addrPreserInd := p_addrPreserInd + } // End of template mw_af_routing_requirement + + template (value) SpatialValidity m_spatial_validity( + in template (value) PresenceInfoList p_presenceInfoList + ) := { + presenceInfoList := p_presenceInfoList + } // End of template m_spatial_validity + + template (present) SpatialValidity mw_spatial_validity( + template (present) PresenceInfoList p_presenceInfoList := ? + ) := { + presenceInfoList := p_presenceInfoList + } // End of template mw_spatial_validity + + template (omit) TemporalValidity m_temporal_validity( + in template (omit) DateTime p_startTime := omit, + in template (omit) DateTime p_stoptTime := omit + ) := { + startTime := p_startTime, + stoptTime := p_stoptTime + } // End of template m_temporal_validity + + template TemporalValidity mw_temporal_validity( + template DateTime p_startTime := *, + template DateTime p_stoptTime := * + ) := { + startTime := p_startTime, + stoptTime := p_stoptTime + } // End of template mw_temporal_validity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} // End of module Etsi_ts_129514_Templates diff --git a/ttcn/Lib3gpp/ttcn/Etsi_ts_129514_TypesAndValues.ttcn b/ttcn/Lib3gpp/ttcn/Etsi_ts_129514_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..bf3def91e595ae9068dc0f97a082f43069ac7436 --- /dev/null +++ b/ttcn/Lib3gpp/ttcn/Etsi_ts_129514_TypesAndValues.ttcn @@ -0,0 +1,841 @@ +module Etsi_ts_129514_TypesAndValues { + + // JSON + import from Json all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // Lib3gpp + import from Etsi_ts_129512_TypesAndValues all; + import from Etsi_ts_129571_TypesAndValues all; + import from Etsi_ts_129514_Pixits all; + + /** + * @desc AppSessionContext + * @member ascReqData Identifies the service requirements of an Individual Application Session Context + * @member ascRespData Describes the authorization data of an Individual Application Session Context created by the PCF + * @member evsNotif Describes information related to the notification of events + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.2-1: Definition of type AppSessionContext + */ + type record AppSessionContext { + AppSessionContextReqData ascReqData optional, + AppSessionContextRespData ascRespData optional, + EventsNotification evsNotif optional + } // End of type AppSessionContext + + /** + * @desc AppSessionContextReqData + * @member afAppId application identifier + * @member afChargId AF charging identifier + * @member afReqData Represents the AF requested data to be exposed + * @member afRoutReq Indicates the AF traffic routing requirements + * @member aspId Application service provider identity + * @member bdtRefId Reference to a transfer policy negotiated for background data traffic + * @member dnn Data Network Name, a full DNN with both the Network Identifier and Operator Identifier, or a DNN with the Network Identifier only + * @member evSubsc Identifies the events the application subscribes to at creation of an Individual Application Session Context resource + * @member ipDomain Indicates the IPv4 address domain information that assists session binding + * @member mcpttId Indicates that the created Individual Application Session Context resource relates to an MCPTT session prioritized call + * @member mcVideoId Indicates that the created Individual Application Session Context resource relates to an MCVideo session prioritized call + * @member medComponents Media Component information + * @member mpsId Indicates that the created Individual Application Session Context resource relates to an MPS service + * @member mcsId Indicates that the created Individual Application Session Context resource relates to an MCS service + * @member preemptControlInfo Pre-emption control information + * @member resPrio Indicates the reservation priority + * @member servInfStatus Indicates whether the service information is preliminary or final + * @member servUrn Service URN. IMS_SBI + * @member sliceInfo Identifies the S-NSSAI + * @member sponId Sponsor identity. It shall be included if "SponsoredConnectivity" feature is supported + * @member sponStatus Indication of whether sponsored connectivity is enabled or disabled/not enabled + * @member supi Subscription Permanent Identifier + * @member gpsi Generic Public Subscription Identifier + * @member suppFeat This IE represents a list of Supported features + * @member ueIpv4 The IPv4 address of the served UE + * @member ueIpv6 The IPv6 address of the served UE + * @member ueMac The MAC address of the served UE + * @member tsnBridgeManCont Transports TSN bridge management information + * @member tsnPortManContDstt Transports TSN port management information for the DS-TT port + * @member tsnPortManContNwtts Transports TSN port management information for one or more NW-TT ports + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.3-1: Definition of type AppSessionContextReqData + */ + type record AppSessionContextReqData { + AfAppId afAppId optional, + ApplicationChargingId afChargId optional, + AfRequestedData afReqData optional, + AfRoutingRequirement afRoutReq optional, + AspId aspId optional, + BdtReferenceId bdtRefId optional, + Dnn dnn optional, + EventsSubscReqData evSubsc optional, + Json.String ipDomain optional, + Json.String mcpttId optional, + Json.String mcVideoId optional, + MediaComponentMap medComponents optional, + Json.String mpsId optional, + Json.String mcsId optional, + PreemptionControlInformation preemptControlInfo optional, + ReservPriority resPrio optional, + ServiceInfoStatus servInfStatus optional, + ServiceUrn servUrn optional, + Snssai sliceInfo optional, + SponId sponId optional, + SponsoringStatus sponStatus optional, + Supi supi optional, + Gpsi gpsi optional, + SupportedFeatures suppFeat, + Ipv4Addr ueIpv4 optional, + Ipv6Addr ueIpv6 optional, + MacAddr48 ueMac optional, + BridgeManagementContainer tsnBridgeManCont optional, + PortManagementContainer tsnPortManContDstt optional, + PortManagementContainerList tsnPortManContNwtts optional + } // End of type AppSessionContextReqData + + /** + * @desc AppSessionContextRespData + * @member servAuthInfo Indicates the result of the authorization for a service request bound to a transfer policy + * @member ueIds Represents the 5GS-Level UE identities available for an AF session context + * @member suppFeat This IE represents a list of Supported features + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.4-1: Definition of type AppSessionContextRespData + */ + type record AppSessionContextRespData { + ServAuthInfo servAuthInfo optional, + UeIdentityInfoList ueIds optional, + SupportedFeatures suppFeat optional + } // End of type AppSessionContextRespData + + /** + * @desc EventsSubscReqData + * @member events Subscribed Events + * @member notifUri Notification URI + * @member reqQosMonParams Indicates the UL packet delay, DL packet delay and/or round trip packet delay between the UE and the UPF is to be monitored when the QoS Monitoring for URLLC is enabled for the service data flow. + * @member qosMon Qos Monitoring information. It can be present when the event "QOS_MONITORING" is subscribed + * @member reqAnis Represents the required access network information. It shall be present when the event "ANI_REPORT" is subscribed + * @member usgThres Includes the volume and/or time thresholds for sponsored data connectivity + * @member notifCorreId It is used to set the value of Notification Correlation ID in the corresponding notification + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.6-1: Definition of type EventsSubscReqData + */ + type record EventsSubscReqData { + AfEventSubscriptionList events, + Json.AnyURI notifUri optional, + RequestedQosMonitoringParameterList reqQosMonParams optional, + QosMonitoringInformation qosMon optional, + RequiredAccessInfoList reqAnis optional, + UsageThreshold usgThres optional, + Json.String notifCorreId optional + } // End of type EventsSubscReqData + + type record of Json.String StringList; + /** + * @desc MediaComponent + * @member afAppId Contains information that identifies the particular service the AF session belongs to + * @member afRoutReq Indicates the AF traffic routing requirements + * @member qosReference Identifies a pre-defined QoS information + * @member altSerReqs Ordered list of alternative service requirements + * @member disUeNotif Indicates to disable QoS flow parameters signalling to the UE when the SMF is notified by the NG-RAN of changes in the fulfilled QoS situation when it is included and set to "true" + * @member contVer Represents the content version of a media component + * @member desMaxLatency Indicates a maximum desirable transport level packet latency in milliseconds + * @member desMaxLoss Indicates the maximum desirable transport level packet loss rate + * @member flusId Indicates that the media component is used for FLUS media + * @member medCompN Identifies the media component number, and it contains the ordinal number of the media component + * @member medSubComps Contains the requested bitrate and filters for the set of service data flows identified by their common flow identifier + * @member medType Indicates the media type of the service + * @member marBwUl Maximum requested bandwidth for the Uplink + * @member marBwDl Maximum requested bandwidth for the Downlink + * @member maxPacketLossRateDl Indicates the downlink maximum rate for lost packets that can be tolerated for the service data flow + * @member maxPacketLossRateUl Indicates the uplink maximum rate for lost packets that can be tolerated for the service data flow + * @member maxSuppBwDl Maximum supported bandwidth for the Downlink + * @member maxSuppBwUl Maximum supported bandwidth for the Uplink + * @member minDesBwDl Minimum desired bandwidth for the Downlink + * @member minDesBwUl Minimum desired bandwidth for the Uplink + * @member mirBwUl Minimum requested bandwidth for the Uplink + * @member mirBwDl Minimum requested bandwidth for the Downlink + * @member fStatus Indicates whether the status of the service data flows is enabled, or disabled + * @member preemptCap Defines whether the media flow may get resources that were already assigned to another media flow with a lower priority level + * @member preemptVuln Defines whether the media flow may lose the resources assigned to it in order to admit a media flow with higher priority level + * @member prioSharingInd Indicates that the media flow is allowed to use the same ARP as media flows belonging to other "Individual Application Session Context" resources bound to the same PDU session + * @member resPrio Indicates the reservation priority + * @member rrBw Indicates the maximum required bandwidth in bits per second for RTCP receiver reports within the session component + * @member rsBw Indicates the maximum required bandwidth in bits per second for RTCP sender reports within the session component + * @member sharingKeyDl Identifies which media components share resources in the downlink direction + * @member sharingKeyUl Identifies which media components share resources in the uplink direction + * @member codecs Indicates the codec data + * @member tsnQos Transports QoS parameters for TSC traffic + * @member tscaiInputUl Transports TSCAI input parameters for TSC traffic at the ingress interface of the DS-TT/UE (uplink flow direction) + * @member tscaiInputDl Transports TSCAI input parameters for TSC traffic at the ingress of the NW-TT (downlink flow direction) + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.7-1: Definition of type MediaComponent + */ + type record MediaComponent { + AfAppId afAppId optional, + AfRoutingRequirement afRoutReq optional, + Json.String qosReference optional, + StringList altSerReqs optional, + Json.Bool disUeNotif optional, + ContentVersion contVer optional, + Json.Number desMaxLatency optional, + Json.Number desMaxLoss optional, + Json.String flusId optional, + Json.Integer medCompN, + MediaSubComponentList medSubComps optional, + MediaType medType optional, + BitRate marBwUl optional, + BitRate marBwDl optional, + PacketLossRateRm maxPacketLossRateDl optional, + PacketLossRateRm maxPacketLossRateUl optional, + BitRate maxSuppBwDl optional, + BitRate maxSuppBwUl optional, + BitRate minDesBwDl optional, + BitRate minDesBwUl optional, + BitRate mirBwUl optional, + BitRate mirBwDl optional, + FlowStatus fStatus optional, + PreemptionCapability preemptCap optional, + PreemptionVulnerability preemptVuln optional, + PrioritySharingIndicator prioSharingInd optional, + ReservPriority resPrio optional, + BitRate rrBw optional, + BitRate rsBw optional, + Json.UInteger sharingKeyDl optional, + Json.UInteger sharingKeyUl optional, + CodecDataList codecs optional, + TsnQoSContainer tsnQos optional, + TscaiInputContainer tscaiInputUl optional, + TscaiInputContainer tscaiInputDl optional + } // End of type MediaComponent + type record of MediaComponent MediaComponentMap; + + /** + * @desc MediaComponent + * @member afSigProtocol Indicates the protocol used for signalling between the UE and the AF + * @member ethfDescs Contains the flow description for the Uplink and/or Downlink Ethernet flows + * @member fNum Identifies the ordinal number of the service data flow + * @member fDescs Contains the flow description for the Uplink and/or Downlink IP flows + * @member fStatus Indicates whether the status of the service data flows is enabled, or disabled + * @member flowUsage Flow usage of the flows (e.g. RTCP, AFsignalling). + * @member marBwUl Maximum requested bandwidth for the Uplink + * @member marBwDl Maximum requested bandwidth for the Downlink + * @member tosTrCl Type of Service or Traffic Class + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.8-1: Definition of type MediaSubComponent + */ + type record MediaSubComponent { + AfSigProtocol afSigProtocol optional, + EthFlowDescriptionList ethfDescs optional, + Json.Integer fNum optional, + FlowDescriptionList fDescs optional, + FlowStatus fStatus optional, + FlowUsage flowUsage optional, + BitRate marBwUl optional, + BitRate marBwDl optional, + TosTrafficClass tosTrCl optional + } // End of type MediaSubComponent + type Json.String TosTrafficClass; + type record of MediaSubComponent MediaSubComponentList; + + /** + * @desc EthFlowDescription + * @member accessType Includes the access type. It shall be present when the notified event is "ACCESS_TYPE_CHANGE" + * @member addAccessInfo Indicates the additional combination of Access Type and RAT Type available for MA PDU session + * @member relAccessInfo Indicates the released combination of Access Type and RAT Type previously available for MA PDU session + * @member anChargAddr Includes the access network charging address + * @member anChargIds Includes the access network charging identifier(s) + * @member anGwAddr Access network Gateway Address + * @member evSubsUri The Events Subscription URI + * @member evNotifs Notifications about individual events + * @member failedResourcAllocReports Indicates the status of the PCC rule(s) related to certain failed media components + * @member succResourcAllocReports Indicates the alternative service requirement the NG-RAN can guarantee to certain media components + * @member noNetLocSupp Indicates the access network does not support the report of the requested access network information + * @member outOfCredReports Out of credit information per service data flow + * @member plmnId PLMN Identifier and, for an SNPN, also the NID + * @member qncReports QoS notification control information + * @member qosMonReports QoS Monitoring reporting information + * @member ranNasRelCauses RAN-NAS release cause + * @member ratType RAT type + * @member ueLoc E-UTRA, NR, or non-3GPP trusted and untrusted access user location information + * @member ueLocTime Contains the NTP time at which the UE was last known to be in the location + * @member ueTimeZone UE time zone + * @member usgRep Indicates the measured volume and/or time for sponsored data connectivity + * @member tsnBridgeManCont Transports TSN bridge management information + * @member tsnPortManContDstt Transports TSN port management information for the DS-TT port + * @member tsnPortManContNwtts Transports TSN port management information for one or more NW-TT ports + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.9-1: Definition of type EventsNotification + */ + type record EventsNotification { + AccessType accessType optional, + AdditionalAccessInfo addAccessInfo optional, + AdditionalAccessInfo relAccessInfo optional, + AccNetChargingAddress anChargAddr optional, + AccessNetChargingIdentifierList anChargIds optional, + AnGwAddress anGwAddr optional, + Json.AnyURI evSubsUri, + AfEventNotificationList evNotifs, + ResourcesAllocationInfoList failedResourcAllocReports optional, + ResourcesAllocationInfoList succResourcAllocReports optional, + NetLocAccessSupport noNetLocSupp optional, + OutOfCreditInformationList outOfCredReports optional, + PlmnIdNid plmnId optional, + QosNotificationControlInfoList qncReports optional, + QosMonitoringReportList qosMonReports optional, + RanNasRelCauseList ranNasRelCauses optional, + RatType ratType optional, + UserLocation ueLoc optional, + DateTime ueLocTime optional, + TimeZone ueTimeZone optional, + AccumulatedUsage usgRep optional, + BridgeManagementContainer tsnBridgeManCont optional, + PortManagementContainer tsnPortManContDstt optional, + PortManagementContainerList tsnPortManContNwtts optional + } // End of type EventsNotification + + /** + * @desc AfEventSubscription + * @member events Subscribed Event + * @member notifMethod If notifMethod is not supplied, the default value "EVENT_DETECTION" applies + * @member repPeriod Indicates the time interval between successive event notifications + * @member waitTime Indicates the minimum waiting time between subsequent reports + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.10-1: Definition of type AfEventSubscription + */ + type record AfEventSubscription { + AfEvent events, + AfNotifMethod notifMethod optional, + DurationSec repPeriod optional, + DurationSec waitTime optional + } // End of type AfEventSubscription + type record of AfEventSubscription AfEventSubscriptionList; + + /** + * @desc AfEventNotification + * @member events Subscribed Event + * @member flows Affected Service Data Flows + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.11-1: Definition of type AfEventNotification + */ + type record AfEventNotification { + AfEvent events, + FlowsList flows optional + } // End of type AfEventNotification + type record of AfEventNotification AfEventNotificationList; + + /** + * @desc AfRoutingRequirement + * @member appRelocoptional Indication of application relocation possibility + * @member routeToLocs A list of traffic routes to applications locations + * @member spVal Indicates where the traffic routing requirements apply + * @member tempVals Indicates the time interval(s) during which the AF request is to be applied + * @member upPathChgSub Subscription to UP path management events + * @member addrPreserInd Indicates whether UE IP address should be preserved + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.13-1: Definition of type AfRoutingRequirement + */ + type record AfRoutingRequirement { + Json.Bool appReloc optional, + RouteToLocationList routeToLocs optional, + SpatialValidity spVal optional, + TemporalValidityList tempVals optional, + UpPathChgEvent upPathChgSub optional, + Json.Bool addrPreserInd optional + } // End of type AfRoutingRequirement + + /** + * @desc ResourcesAllocationInfo + * @member mcResourcStatus Indicates the status of the PCC rule(s) related to the media components identified by the "flows" attribute + * @member flows Identification of the flows + * @member altSerReq When present, indicates the alternative service requirement the NG-RAN can guarantee for the indicated "flows" + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.14-1: Definition of type ResourcesAllocationInfo + */ + type record ResourcesAllocationInfo { + MediaComponentResourcesStatus mcResourcStatus optional, + FlowsList flows optional, + Json.String altSerReq optional + } // End of type ResourcesAllocationInfo + type record of ResourcesAllocationInfo ResourcesAllocationInfoList; + + /** + * @desc QosNotificationControlInfo + * @member notifType Indicates whether the GBR targets for the indicated SDFs are "NOT_GUARANTEED" or "GUARANTEED" again + * @member flows Identification of the flows + * @member altSerReq When present, indicates the alternative service requirement the NG-RAN can guarantee for the indicated "flows" + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.15-1: Definition of type QosNotificationControlInfo + */ + type record QosNotificationControlInfo { + QosNotifType notifType optional, + FlowsList flows optional, + Json.String altSerReq optional + } // End of type QosNotificationControlInfo + type record of QosNotificationControlInfo QosNotificationControlInfoList; + + /** + * @desc SpatialValidity + * @member presenceInfoList Defines the presence information provisioned by the AF + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.16-1: Definition of type SpatialValidity + */ + type record SpatialValidity { + PresenceInfoList presenceInfoList + } // End of type SpatialValidity + + /** + * @desc EthFlowDescription + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.17-1: Definition of type EthFlowDescription + */ + type record EthFlowDescription { + // TODO + } // End of type EthFlowDescription + type record of EthFlowDescription EthFlowDescriptionList; + + /** + * @desc AnGwAddress + * @member anGwIpv4addr Includes the IPv4 address of the access network gateway control node + * @member anGwIpv6addr Includes the IPv6 address of the access network gateway control node + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.20-1: Definition of type AnGwAddress + */ + type record AnGwAddress { + Ipv4Addr anGwIpv4addr optional, + Ipv6Addr anGwIpv6addr optional + } // End of type AnGwAddress + + type record of Json.Integer Nums + /** + * @desc Flows + * @member contVers Represents the content version of the content of a media component + * @member fNums Indicates the service data flows via their flow identifier + * @member medCompN Identifies the media component number, and it contains the ordinal number of the media component + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.21-1: Definition of type Flows + */ + type record Flows { + ContentVersionList contVers optional, + Nums fNums optional, + Json.Integer medCompN + } // End of type Flows + type record of Flows FlowsList; + + /** + * @desc TemporalValidity + * @member startTime Indicates the time from which the traffic routing requirements start to apply + * @member stopTime Indicates the time when the traffic routing requirements cease to apply + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.22-1: Definition of type TemporalValidity + */ + type record TemporalValidity { + DateTime startTime optional, + DateTime stoptTime optional + } // End of type TemporalValidity + type record of TemporalValidity TemporalValidityList; + + /** + * @desc UeIdentityInfo + * @member gpsi Represents the GPSI + * @member pei Represents the PEI + * @member supi Represents the SUPI + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.31-1: Definition of type UeIdentityInfo + */ + type record UeIdentityInfo { + Gpsi gpsi optional, + Pei pei optional, + Supi supi optional + } // End of type UeIdentityInfo + type record of UeIdentityInfo UeIdentityInfoList; + + /** + * @desc AccessNetChargingIdentifier + * @member accNetChaIdValue Contains a charging identifier + * @member flows Identifications of the flows transported within the corresponding QoS flow + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.32-1: Definition of type AccessNetChargingIdentifier + */ + type record AccessNetChargingIdentifier { + ChargingId accNetChaIdValue, + FlowsList flows optional + } // End of type AccessNetChargingIdentifier + type record of AccessNetChargingIdentifier AccessNetChargingIdentifierList; + + /** + * @desc OutOfCreditInformation + * @member finUnitAct Indicates the termination action to be taken when the user's account cannot cover the service cost + * @member flows Identifications of the flows transported within the corresponding QoS flow + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.33-1: Definition of type OutOfCreditInformation + */ + type record OutOfCreditInformation { + FinalUnitAction finUnitAct, + FlowsList flows optional + } // End of type OutOfCreditInformation + type record of OutOfCreditInformation OutOfCreditInformationList; + + + + + + + + + + + + + /** + * @desc QosMonitoringInformation + * @member repThreshDl Indicates the threshold in units of milliseconds for DL packet delay + * @member repThreshUl Indicates the threshold in units of milliseconds for UL packet delay + * @member repThreshRp Indicates the threshold in units of milliseconds for round trip packet delay + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.34-1: Definition of type QosMonitoringInformation + */ + type record QosMonitoringInformation { + Json.Integer repThreshDl optional, + Json.Integer repThreshUl optional, + Json.Integer repThreshRp optional + } // End of type QosMonitoringInformation + + /** + * @desc TscaiInputContainer + * @member periodicity Identifications of the time period between the start of two bursts in reference to the TSN GM + * @member burstArrivalTime Indicates the arrival time of the data burst in reference to the TSN GM + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.39-1: Definition of type TscaiInputContainer + */ + type record TscaiInputContainer { + Json.Integer periodicity optional, + Json.DateTime burstArrivalTime optional + } // End of type TscaiInputContainer + + /** + * @desc QosMonitoringReport + * @member flows Identifications of the flows transported within the corresponding QoS flow + * @member ulDelays Uplink packet delay in units of milliseconds + * @member dlDelays Downlink packet delay in units of milliseconds + * @member rtDelays Round trip delay in units of milliseconds + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.42-1: Definition of type QosMonitoringReport + */ + type record QosMonitoringReport { + FlowsList flows optional, + Nums ulDelays optional, + Nums dlDelays optional, + Nums rtDelays optional + } // End of type QosMonitoringReport + type record of QosMonitoringReport QosMonitoringReportList; + + type record TsnQoSContainer { + // TODO + } // End of type TsnQoSContainer + + + + + + + + + + + + + + + + /** + * @desc Service URN + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.1-1: Npcf_PolicyAuthorization specific Data Types + */ + type Json.AnyURI ServiceUrn; + + + + + + + + + + + + + + + + /** + * @desc Contains an AF application identifier + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.3.2-1: Simple data types + */ + type Json.String AfAppId; + + /** + * @desc Contains an identity of an application service provider + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.3.2-1: Simple data types + */ + type Json.String AspId; + + /** + * @desc Contains codec related information + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.3.2-1: Simple data types + */ + type Json.String CodecData; + type record of CodecData CodecDataList; + + /** + * @desc Unsigned 64-bit integer that indicates the version of some content + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.2: Simple data types + */ + type Json.UInteger ContentVersion; + type ContentVersion ContentVersionList; + + /** + * @desc Defines a packet filter for an IP flow. It contains an IpFilterRule + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.2: Simple data types + */ + type Json.String FlowDescription; + type record of FlowDescription FlowDescriptionList; + + /** + * @desc Contains an identity of a sponsor + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.2: Simple data types + */ + type Json.String SponId; + + /** + * @desc Represents the reservation priority + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.3 Enumeration: MediaType + */ + type enumerated MediaType { + e_AUDIO (1), + e_VIDEO (2), + e_DATA (3), + e_APPLICATION (4), + e_CONTROL (5), + e_TEXT (6), + e_MESSAGE (7), + e_OTHER (8) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents the reservation priority + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.3.4-1: Enumeration ReservPriority + */ + type enumerated ReservPriority { + e_PRIO_1 (1), + e_PRIO_2 (2), + e_PRIO_3 (3), + e_PRIO_4 (4), + e_PRIO_5 (5), + e_PRIO_6 (6), + e_PRIO_7 (7), + e_PRIO_8 (8), + e_PRIO_9 (9), + e_PRIO_10 (10), + e_PRIO_11 (11), + e_PRIO_12 (12), + e_PRIO_13 (13), + e_PRIO_14 (14), + e_PRIO_15 (15), + e_PRIO_16 (16) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents the result of the Npcf_PolicyAuthorization service request from the AF + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.3.5-1: Enumeration ServAuthInfo + */ + type enumerated ServAuthInfo { + e_TP_NOT_KNOWN (0), + e_TP_EXPIRED (1), + e_TP_NOT_YET_OCURRED (2) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents whether the sponsored data connectivity is enabled or disabled/notenabled + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.3.6-1: Enumeration SponsoringStatus + */ + type enumerated SponsoringStatus { + e_SPONSOR_DISABLED (0), + e_SPONSOR_ENABLED (1) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents whether the traffic events the PCF can notify to the AF + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.3.7-1: Enumeration AfEvent + */ + type enumerated AfEvent { + e_ACCESS_TYPE_CHANGE (0), + e_ANI_REPORT (1), + e_CHARGING_CORRELATION (2), + e_EPS_FALLBACK (3), + e_FAILED_RESOURCES_ALLOCATION (4), + e_OUT_OF_CREDIT (5), + e_PLMN_CHG (6), + e_QOS_NOTIF (7), + e_QOS_MONITORING (8), + e_RAN_NAS_CAUSE (9), + e_REALLOCATION_OF_CREDIT (10), + e_SUCCESSFUL_RESOURCES_ALLOCATION (11), + e_TSN_BRIDGE_INFO (12), + e_USAGE_REPORT (13) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents whether the notification methods that can be subscribed by an AF + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.8 Enumeration: AfNotifMethod + */ + type enumerated AfNotifMethod { + e_EVENT_DETECTION (0), + e_ONE_TIME (1), + e_PERIODIC (2) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents whether the notification methods that can be subscribed by an AF + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.9 Enumeration: QosNotifType + */ + type enumerated QosNotifType { + e_GUARANTEED (0), + e_NOT_GUARANTEED (1) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents whether the service data flow(s) are enabled or disabled + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.12 Enumeration: FlowStatus + */ + type enumerated FlowStatus { + e_ENABLED_UPLINK (0), + e_ENABLED_DOWNLINK (1), + e_ENABLED (2), + e_DISABLED (3), + e_REMOVED (4) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents whether the service data flow(s) are enabled or disabled + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.13 Enumeration: MediaComponentResourcesStatus + */ + type enumerated MediaComponentResourcesStatus { + e_ACTIVE (0), + e_INACTIVE (1) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents the flow usage of the flows described by a media subcomponent + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.14 Enumeration: FlowUsage + */ + type enumerated FlowUsage { + e_NO_INFO (0), + e_RTCP (1), + e_AF_SIGNALLING (2) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents whether the access network information required for the "Individual Application Session Context" resource + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.15 Enumeration: RequiredAccessInfo + */ + type enumerated RequiredAccessInfo { + e_USER_LOCATION (0), + e_UE_TIME_ZONE (2) + } with { + variant "JSON: as number" + } + type record of RequiredAccessInfo RequiredAccessInfoList; + + /** + * @desc Represents whether the AF provided service information is preliminary or final + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.16: Enumeration ServiceInfoStatus + */ + type enumerated ServiceInfoStatus { + e_FINAL (0), + e_PRELIMINARY (1) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents the information the AF requested to be exposed + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.3.18-1: Enumeration AfRequestedData + */ + type enumerated AfRequestedData { + e_UE_IDENTITY (0) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents the information the AF requested to be exposed + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.19: Enumeration PreemptionControlInformation + */ + type enumerated PreemptionControlInformation { + e_MOST_RECENT (0), + e_LEAST_RECENT (1), + e_HIGHEST_BW (2) + } with { + variant "JSON: as number" + } + + /** + * @desc Represents whether the media component is enabled or disabled for priority sharing with other media components which are assigned the same 5QI and belong to other "Individual Application Session Context" resource bound to the same PDU session + * @see ETSI TS 129 514 V16.21.0 (2025-01) Clause 5.6.3.20 Enumeration: PrioritySharingIndicator + */ + type enumerated PrioritySharingIndicator { + e_ENABLED (0), + e_DISABLED (1) + } with { + variant "JSON: as number" + } + +// FIXME FSCOM All the type below shall be reviewed according to ETSI TS 3GPP TS xxx + /** + * @desc Application provided charging identifier allowing correlation of charging information + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String ApplicationChargingId; + + /** + * @desc Identifies transfer policies + * @see ETSI TS 3GPP TS 129 122 + */ + type Json.String BdtReferenceId; + + /** + * @desc Contains the subscription information to be delivered to SMF for the UP path management events + * @see ETSI TS 3GPP TS 129 572 + */ + type Json.String UpPathChgEvent; + + /** + * @desc Usage Thresholds + * @see ETSI TS 3GPP TS 129 122 + */ + type Json.String UsageThreshold; + + /** + * @desc Accumulated Usage + * @see ETSI TS 3GPP TS 129 122 + */ + type Json.String AccumulatedUsage; + + /** + * @desc + * @see ETSI TS 3GPP TS 132 191 + */ + type Json.String FinalUnitAction; + + + + + + + + + + + type Json.String RequestedQosMonitoringParameter; + type record of RequestedQosMonitoringParameter RequestedQosMonitoringParameterList; + +} with { + encode "JSON"; +} // End of module Etsi_ts_129514_TypesAndValues diff --git a/ttcn/Lib3gpp/ttcn/Etsi_ts_129571_TypesAndValues.ttcn b/ttcn/Lib3gpp/ttcn/Etsi_ts_129571_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..70a8346ba9d08b21c60b4b1de82b120ad0af9d72 --- /dev/null +++ b/ttcn/Lib3gpp/ttcn/Etsi_ts_129571_TypesAndValues.ttcn @@ -0,0 +1,208 @@ +module Etsi_ts_129571_TypesAndValues { + + // JSON + import from Json all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + /** + * @desc UserLocation + * @member group_ This IE shall indicate the group of the NGAP cause + * @member value_ This IE shall carry the NG AP cause value in specific cause group + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.4.4.7-1: Definition of type UserLocation + */ + type record UserLocation { + // TODO + } // End of type UserLocation + + /** + * @desc NgApCause + * @member group_ This IE shall indicate the group of the NGAP cause + * @member value_ This IE shall carry the NG AP cause value in specific cause group + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.4.4.12-1: Definition of type NgApCause + */ + type record NgApCause { + Json.UInteger group_, + Json.UInteger value_ + } with { + variant (group_) "name as 'group'"; + variant (value_) "name as 'value'"; + } // End of type NgApCause + + /** + * @desc PlmnIdNid + * @member mcc Mobile Country Code + * @member mnc Mobile Network Code + * @member nid Network Identity + * @see ETSI TS 129 514 V16.21.0 (2025-01) Table 5.4.4.33-1: Definition of type PlmnIdNid + */ + type record PlmnIdNid { + Mcc mcc, + Mnc mnc, + Nid nid optional + } // End of type PlmnIdNid + type record of PlmnIdNid PlmnIdNidList; + + /** + * @desc Identifies transfer BitRate + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String BitRate; + + /** + * @desc Data Network DurationSec + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String DurationSec; + + /** + * @desc Data Network DateTime + * @see ETSI TS 3GPP TS 129 571 + */ + //type Json.String DateTime; Use Json.DateTime type + + /** + * @desc Data Network Name + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String Dnn; + + /** + * @desc This represents the 5GMM cause code values + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.UInteger FiveGMmCause; + + /** + * @desc PacketLossRateRm + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String PacketLossRateRm; + + /** + * @desc PreemptionCapability + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String PreemptionCapability; + + /** + * @desc PreemptionVulnerability + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String PreemptionVulnerability; + + /** + * @desc Represents an area of interest, e.g. a Presence Reporting Area + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String PresenceInfo; + type record of PresenceInfo PresenceInfoList; + + /** + * @desc Identifies routes to locations of applications + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String RouteToLocation; + type record of RouteToLocation RouteToLocationList; + + /** + * @desc Identifies the S-NSSAI + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String Snssai; + + /** + * @desc Identifies the GPSI + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String Gpsi; + + /** + * @desc Identifies the Ipv4Addr + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String Ipv4Addr; + + /** + * @desc Identifies the Ipv6Addr + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String Ipv6Addr; + + /** + * @desc Identifies the MacAddr48 + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String MacAddr48; + + /** + * @desc Identifies the MacAddr48 + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String Mcc; + /** + * @desc Mobile Network Code part of the PLMN + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String Mnc; + + /** + * @desc This represents the Network Identifier + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String Nid; + + /** + * @desc A string used to indicate the features supported by an API + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String SupportedFeatures; + + /** + * @desc Identifies the PEI + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String Pei; + + /** + * @desc Identifies the SUPI + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String Supi; + + /** + * @desc Identifies the charging identifier + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.UInteger ChargingId; + + /** + * @desc Identifies the TimeZone + * @see ETSI TS 3GPP TS 129 571 + */ + type Json.String TimeZone; + + /** + * @desc Represents the result of the Npcf_PolicyAuthorization service request from the AF + * @see ETSI TS 129 571 V16.14.0 (2024-04) Clause 5.4.3.1 Enumeration: AccessType + */ + type enumerated AccessType { + e_3GPP_ACCESS (0), + e_NON_3GPP_ACCESS (1) + } + + /** + * @desc Represents the result of the Npcf_PolicyAuthorization service request from the AF + * @see ETSI TS 129 571 V16.14.0 (2024-04) Clause 5.4.3.2 Enumeration: RatType + */ + type enumerated RatType { + e_NR (0), + e_EUTRA (1), + e_WLAN (2) + // TODO + } + +} with { + encode "JSON"; +} // End of module Etsi_ts_129571_TypesAndValues \ No newline at end of file diff --git a/ttcn/Lib3gpp/ttcn/module.mk b/ttcn/Lib3gpp/ttcn/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..3d6222274395fea458496622f9f4c37153ed362f --- /dev/null +++ b/ttcn/Lib3gpp/ttcn/module.mk @@ -0,0 +1,7 @@ +sources := \ + Etsi_ts_129512_TypesAndValues.ttcn \ + Etsi_ts_129571_TypesAndValues.ttcn \ + Etsi_ts_129514_TypesAndValues.ttcn \ + Etsi_ts_129514_Templates.ttcn \ + Etsi_ts_129514_Pixits.ttcn \ + diff --git a/ttcn/LibAtsImsIot/lib/AtsImsIot_Diameter_Templates.ttcn b/ttcn/LibAtsImsIot/lib/AtsImsIot_Diameter_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..fbc9a371eff18f094d361340a1d82973270f432e --- /dev/null +++ b/ttcn/LibAtsImsIot/lib/AtsImsIot_Diameter_Templates.ttcn @@ -0,0 +1,1859 @@ +/** + * @author STF574 + * @version $Id$ + * @desc This module defines AtsIot Diameter Templates for message, header, and + * structured types.
+ * @remark Any additions to the templates shall follow the design rules + * and always modify base templates only; + */ + +module AtsImsIot_Diameter_Templates { + + //LibCommon + import from LibCommon_DataStrings all; + import from LibCommon_BasicTypesAndValues all; + + //LibDiameter + import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Templates all; + import from LibDiameter_Steps all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_Types_S6a_AVPs all; + import from LibDiameter_Types_S9_AVPs all; + + group DiameterHeaderFields { + group CxHeaderFields{ + + template Auth_Session_State_AVP mw_authSessionState_noStateMaintained := + { + aVP_Header := mw_aVP_Header_any_Code(c_auth_Session_State_AVP_Code), + aVP_Data := NO_STATE_MAINTAINED_E + } + + template Deregistration_Reason_AVP mw_deregistrationReason := + { + aVP_Header := mw_aVP_Header_any_Code(c_deregistration_Reason_AVP_Code), + reason_Code := ?, + reason_Info := *, + aVP_Type := * + } + + template Server_Assignment_Type_AVP mw_serverAssignmentType(Srv_Assgmt_Type_Code p_aVP_Data) := + { + aVP_Header := mw_aVP_Header_any_Code(c_server_Assignment_Type_AVP_Code), + aVP_Data := p_aVP_Data + } + + template User_Authorization_Type_AVP mw_userAuthorizationType (User_Authorization_Type_Code p_aVP_Data) := + { + aVP_Header := mw_aVP_Header_any_Code(c_user_Authorization_Type_AVP_Code), + aVP_Data := p_aVP_Data + } + + template Experimental_Result_AVP mw_experimentalResult (Experimental_Result_Type p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_experimental_Result_AVP_Code), + vendor_Id := ?, + experimental_Result_Code := + { + aVP_Header := mw_aVP_Header_any_Code(c_experimental_Result_Code_AVP_Code), + aVP_Data := p_avpData + } + } + + } //end group CxHeaderFields + group RxHeaderFields{ + template Abort_Cause_AVP mw_abortCause(template Abort_Cause_Type p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_abort_Cause_AVP_Code), + aVP_Data := p_avpData + }; + + template Media_Component_Description_AVP mw_mediaComponentDescription_SubComponentFlowStatusEnabled := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Component_Description_AVP_Code), + media_Component_Nr := {aVP_Header := ?, aVP_Data := ?}, + media_Sub_component := {mw_mediaSubComponent_flowStatusEnabled_flowUsageAfSignalling_SignallingSip}, + af_Application_Id := *, + media_type := *, + max_Requested_Bw_Ul := *, + max_Requested_Bw_Dl := *, + flow_Status := *, + reservation_Priority := *, + rs_Bw := *, + rr_Bw := *, + codec_data := * + } + + template Media_Component_Description_AVP mw_mediaComponentDescription_FlowStatusDisabled := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Component_Description_AVP_Code), + media_Component_Nr := {aVP_Header := ?, aVP_Data := ?}, + media_Sub_component := {mw_mediaSubComponent_FlowDescription}, + af_Application_Id := *, + media_type := ?, + max_Requested_Bw_Ul := *, + max_Requested_Bw_Dl := ?, + flow_Status := mw_flowStatus(DISABLED_E), + reservation_Priority := *, + rs_Bw := *, + rr_Bw := ?, + codec_data := ? + } + + template Media_Component_Description_AVP mw_mediaComponentDescription_FlowStatusEnabledDownlink := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Component_Description_AVP_Code), + media_Component_Nr := {aVP_Header := ?, aVP_Data := ?}, + media_Sub_component := {mw_mediaSubComponent_FlowDescription}, + af_Application_Id := *, + media_type := ?, + max_Requested_Bw_Ul := ?, + max_Requested_Bw_Dl := ?, + flow_Status := mw_flowStatus(ENABLED_DOWNLINK_E), + reservation_Priority := *, + rs_Bw := ?, + rr_Bw := ?, + codec_data := ? + } + + template Media_Component_Description_AVP mw_mediaComponentDescription_FlowStatusEnabledUplink := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Component_Description_AVP_Code), + media_Component_Nr := {aVP_Header := ?, aVP_Data := ?}, + media_Sub_component := {mw_mediaSubComponent_FlowDescription}, + af_Application_Id := *, + media_type := ?, + max_Requested_Bw_Ul := ?, + max_Requested_Bw_Dl := ?, + flow_Status := mw_flowStatus(ENABLED_UPLINK_E), + reservation_Priority := *, + rs_Bw := ?, + rr_Bw := ?, + codec_data := ? + } + + template Media_Component_Description_AVP mw_mediaComponentDescription_FlowStatusEnabled := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Component_Description_AVP_Code), + media_Component_Nr := {aVP_Header := ?, aVP_Data := ?}, + media_Sub_component := {mw_mediaSubComponent_FlowDescription}, + af_Application_Id := *, + media_type := ?, + max_Requested_Bw_Ul := ?, + max_Requested_Bw_Dl := ?, + flow_Status := mw_flowStatus(ENABLED_E), + reservation_Priority := *, + rs_Bw := *, + rr_Bw := *, + codec_data := ? + } + + template Media_Sub_Component_AVP mw_mediaSubComponent_any := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Sub_Component_AVP_Code), + flow_Number := ?, + flow_Description := *, + flow_Status := *, + flow_Usage := *, + max_Requested_Bw_Ul := *, + max_Requested_Bw_Dl := *, + af_Signalling_Protocol := *, + aVP_Type := * + } + + template Media_Sub_Component_AVP mw_mediaSubComponent_FlowDescription modifies mw_mediaSubComponent_any := + { + flow_Description := ? + } + + template Media_Sub_Component_AVP mw_mediaSubComponent_flowStatusEnabled_flowUsageAfSignalling_SignallingSip modifies mw_mediaSubComponent_any := + { + flow_Description := ?, + flow_Status := mw_flowStatus(ENABLED_E), + flow_Usage := mw_flowUsage(AF_SIGNALLING_E), + af_Signalling_Protocol := mw_afSignallingProtocolSIP + } + + template AF_Signalling_Protocol_AVP mw_afSignallingProtocolSIP := { + aVP_Header := mw_aVP_Header_any_Code(c_aF_Signalling_Protocol_AVP_Code), + aVP_Data := SIP_E + } + + template Flow_Status_AVP mw_flowStatus(template (present) Flow_Status_Type p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_flow_Status_AVP_Code), + aVP_Data := p_avpData + } + + template Flow_Usage_AVP mw_flowUsage(template (present) Flow_Usage_Type p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_flow_Usage_AVP_Code), + aVP_Data := p_avpData + } + + template Specific_Action_AVP mw_specificAction (template (present) Specific_Action_Type p_avpData) :={ + aVP_Header := mw_aVP_Header_any_Code(c_specific_Action_AVP_Code),// + aVP_Data := p_avpData + } + + template Service_Info_Status_AVP mw_serviceInfoStatus (template (present) Service_Info_Type p_avpData) :={ + aVP_Header := mw_aVP_Header_any_Code(c_service_Info_Status_AVP_Code),// + aVP_Data := p_avpData + } + + template Rx_Request_Type_AVP mw_rxRequestType (template (present) Rx_Request_Type p_avpData) :={ + aVP_Header := mw_aVP_Header_any_Code(c_rx_Request_Type_AVP_Code),// + aVP_Data := p_avpData + } + + template Framed_IP_Address_AVP mw_framedIPAddress (template (present) octetstring p_avpData) :={ + aVP_Header := mw_aVP_Header_any_Code(c_framed_IP_Address_AVP_Code),// + aVP_Data := p_avpData + } + + template AF_Requested_Data_AVP mw_aF_Requested_Data(template (present) UInt32 p_avpData := ?) := + { + aVP_Header := mw_aVP_Header_any_Code(?), + aVP_Data := p_avpData + }; + + template Service_URN_AVP mw_service_URN(template (present) octetstring p_avpData := ?) := + { + aVP_Header := mw_aVP_Header_any_Code(c_service_URN_AVP_Code), + aVP_Data := p_avpData + }; + + } //end group RxHeaderFields + group GxHeaderFields{ + + template CC_Request_Type_AVP mw_cC_Request_Type(CC_Request_Ty_Type p_avpData):= + { + aVP_Header := mw_aVP_Header_any_Code(c_cC_Request_Type_AVP_Code), + aVP_Data := p_avpData + } + + template QoS_Information_AVP mw_qoS_Information := + { + aVP_Header := mw_aVP_Header_any_Code(c_qoS_Information_AVP_Code), + qoS_Class_Identifier := *, + max_Requested_Bandwidth_UL := *, + max_Requested_Bandwidth_DL := *, + guaranteed_Bitrate_UL := *, + guaranteed_Bitrate_DL := *, + bearer_Identifier := *, + allocation_Retention_Priority := *, + aPN_Aggregate_Max_Bitrate_UL := *, + aPN_Aggregate_Max_Bitrate_DL := *, + aVP_Type := * + } + + template QoS_Information_AVP mw_qoS_Information_Audio := + { + aVP_Header := mw_aVP_Header_any_Code(c_qoS_Information_AVP_Code), + qoS_Class_Identifier := mw_QoS_Class_Identifier(QCI_1_E), + max_Requested_Bandwidth_UL := ?, + max_Requested_Bandwidth_DL := ?, + guaranteed_Bitrate_UL := ?, + guaranteed_Bitrate_DL := ?, + bearer_Identifier := *, + allocation_Retention_Priority := ?, + aPN_Aggregate_Max_Bitrate_UL := *, + aPN_Aggregate_Max_Bitrate_DL := *, + aVP_Type := * + } + + template QoS_Information_AVP mw_qoS_Information_Video := + { + aVP_Header := mw_aVP_Header_any_Code(c_qoS_Information_AVP_Code), + qoS_Class_Identifier := mw_QoS_Class_Identifier(QCI_2_E), + max_Requested_Bandwidth_UL := ?, + max_Requested_Bandwidth_DL := ?, + guaranteed_Bitrate_UL := ?, + guaranteed_Bitrate_DL := ?, + bearer_Identifier := *, + allocation_Retention_Priority := ?, + aPN_Aggregate_Max_Bitrate_UL := *, + aPN_Aggregate_Max_Bitrate_DL := *, + aVP_Type := * + } + + template Default_EPS_Bearer_QoS_AVP mw_default_EPS_Bearer_QoS_Class_5 := + { + aVP_Header := mw_aVP_Header_any_Code(c_default_EPS_Bearer_QoS_AVP_Code), + qoS_Class_Identifier := mw_QoS_Class_Identifier(QCI_5_E), + allocation_Retention_Priority := mw_allocation_Retention_Priority, + aVP_Type := * + } + + template Allocation_Retention_Priority_AVP mw_allocation_Retention_Priority := + { + aVP_Header := mw_aVP_Header_any_Code(c_allocation_Retention_Priority_AVP_Code), + priority_Level := ?, + pre_emption_Capability := ?, + pre_emption_Vulnerability := ? + } + + template QoS_Class_Identifier_AVP mw_QoS_Class_Identifier(template QoS_Class_Identifier p_avp_Data) := + { + aVP_Header := mw_aVP_Header_any_Code(c_qoS_Class_Identifier_AVP_Code), + aVP_Data := p_avp_Data + } + + template Bearer_Usage_AVP mw_bearer_Usage(Bearer_Usage p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_bearer_Usage_AVP_Code), + aVP_Data := p_avpData + } + + template Subscription_Id_AVP mw_subscription_Id(template Subscription_Id_Type_AVP p_typeAVP):= + { + aVP_Header := mw_aVP_Header_any_Code(c_subscription_Id_AVP_Code), + subscription_Id_Type := p_typeAVP, + subscription_Id_Data := ? + } + + template Subscription_Id_Type_AVP mw_subscription_Id_Type(template Subscription_Id_Ty_Type p_avpData):= + { + aVP_Header := mw_aVP_Header_any_Code(c_subscription_Id_Type_AVP_Code), + aVP_Data := p_avpData + } + + template Charging_Rule_Install_AVP mw_chrgRuleInstall := + { + aVP_Header := mw_aVP_Header_any_Code(c_charging_Rule_Install_AVP_Code), + charging_Rule_Definition := {mw_chrgRuleDefinition_RuleName_Flows_FlowStatus}, + charging_Rule_Name := *, + charging_Rule_Base_Name := *, + bearer_Identifier := *, + rule_Activation_Time := *, + rule_DeActivation_Time := *, + resource_Allocation_Notification := *, + charging_Correlation_Indicator := *, + aVP_Type := * + } + + template Charging_Rule_Install_AVP mw_chrgRuleInstall_Qos := + { + aVP_Header := mw_aVP_Header_any_Code(c_charging_Rule_Install_AVP_Code), + charging_Rule_Definition := {mw_chrgRuleDefinition_RuleName_Flows_FlowStatus_Qos}, + charging_Rule_Name := *, + charging_Rule_Base_Name := *, + bearer_Identifier := *, + rule_Activation_Time := *, + rule_DeActivation_Time := *, + resource_Allocation_Notification := *, + charging_Correlation_Indicator := *, + aVP_Type := * + } + + template Charging_Rule_Remove_AVP mw_chrgRuleRemove_Name := + { + aVP_Header := mw_aVP_Header_any_Code(c_charging_Rule_Remove_AVP_Code), + charging_Rule_Name := ?, + charging_Rule_Base_Name := *, + aVP_Type := * + } + + template Charging_Rule_Definition_AVP mw_chrgRuleDefinition_RuleName_Flows_FlowStatus := + { + aVP_Header := mw_aVP_Header_any_Code(c_charging_Rule_Definition_AVP_Code), + charging_Rule_Name := ?, + service_Identifier := *, + rating_Group := *, + flow_Information := *, + flow_Status := mw_flowStatus(ENABLED_E), + qoS_Information := *, + reporting_Level := *, + online := *, + offline := *, + metering_Method := *, + precedence := *, + aF_Charging_Identifier := *, + flows := {mw_flows}, + monitoring_Key := *, + aF_Signalling_Protocol := *, + sponsor_Identity := *, + application_Service_Provider_Identity := *, + aVP_Type := * + } + + template Charging_Rule_Definition_AVP mw_chrgRuleDefinition_RuleName_Flows_FlowStatus_Qos modifies mw_chrgRuleDefinition_RuleName_Flows_FlowStatus:= + { + flow_Information := ?, + flow_Status := ?, + qoS_Information := (mw_qoS_Information_Audio,mw_qoS_Information_Video) + } + + template Flows_AVP mw_flows := + { + aVP_Header := mw_aVP_Header_any_Code(c_flows_AVP_Code), + media_component_number := + {aVP_Header := ?,// + aVP_Data := 0 + },//Media_Component_Number_AVP + flow_Number := *, + final_unit_action := * + } + + template User_Equipment_Info_AVP mw_userEquipmentInfo_IMEI:= + { + aVP_Header := mw_aVP_Header_any_Code(458/*c_User_Equipment_Info_code*/), + user_Equipment_Info_Type := {aVP_Header := ?/*459*/, aVP_Data := IMEISV_E/*0*/ }, + user_Equipment_Info_Value := ? + } + + } //end group GxHeaderFields + + group S6aHeaderFields{ + + template Cancellation_Type_AVP mw_cancellationType(Cancellation_Type_Code p_cancellation_Type) := { + aVP_Header := mw_aVP_Header_any_Code(c_cancellation_Type_AVP_Code), + cancellation_Type := p_cancellation_Type + } // End of template m_cancellationType + + template Subscription_Data_AVP mw_subscriptionData_emergencyInfo:= { + aVP_Header := mw_aVP_Header_any_Code(c_subscription_Data_AVP_Code), + aVP_Type := ?//emergency_Info := ? FIXME To be reviewed + } + } //end group S6aHeaderFields + + + + group ShHeaderFields{ + + template User_Identity_AVP mw_userIdentity_publicIdentity(template (present) Public_Identity_AVP p_publicIdentity) := + { + aVP_Header := mw_aVP_Header_any_Code(c_user_Identity_AVP_Code), + public_Identity_AVP := p_publicIdentity, + mSISDN_AVP := *, + aVP_Type := * + } + + template User_Identity_AVP mw_userIdentity_msisdn(template (present) MSISDN_AVP p_msisdn) := + { + aVP_Header := mw_aVP_Header_any_Code(c_user_Identity_AVP_Code), + public_Identity_AVP := *, + mSISDN_AVP := p_msisdn, + aVP_Type := * + } + + template Public_Identity_AVP mw_publicIdentity(template (present) UTF8String p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_public_Identity_AVP_Code), + aVP_Data := p_avpData + } + + } //end group ShHeaderFields + + group S9HeaderFields{ + + template Subses_Enforcement_Info_AVP mw_subses_Enforcement_Info(Subsession_Operation_AVP p_subsession_Operation) := { + aVP_Header := mw_aVP_Header_any_Code(2201), + subsession_Id := ?, + subsession_Operation := p_subsession_Operation, + aN_GW_Address := *, + bearer_Identifier := *, + bearer_Operation := *, + packet_Filter_Information := *, + packet_Filter_Operation := *, + qoS_Information := *, + framed_IP_Address := *, + framed_IPv6_Prefix := *, + coA_Information := *, + called_Station_Id := *, + pDN_Connection_ID := *, + bearer_Usage := *, + tFT_Packet_Filter_Information := *, + online := *, + offline := *, + result_Code := *, + experimental_Result := *, + charging_Rule_Report := *, + qoS_Rule_Report := *, + iP_CAN_Type := *, + rat_Type := *, + threeGPP_SGSN_MCC_MNC := *, + threeGPP_SGSN_Address := *, + threeGPP_SGSN_IPv6_Address := *, + rAI := *, + threeGPP_User_Location_Info := *, + threeGPP2_BSID := *, + user_CSG_Information := *, + default_EPS_Bearer_QoS := *, + network_Request_Support := *, + routing_Rule_Install := *, + routing_Rule_Remove := *, + logical_Access_ID := *, + physical_Access_ID := *, + usage_Monitoring_Information := *, + multiple_BBERF_Action := *, + event_Trigger := *, + access_Network_Charging_Address := *, + access_Network_Charging_Id_Gx := *, + session_Linking_Indicator := *, + aVP_Type := * + } + + template Subsession_Operation_AVP mw_subsession_Operation_AVP (Subsession_Operation_Code p_code):= { + aVP_Header := mw_aVP_Header_any_Code(c_subsession_Operation_AVP_Code), + subsession_Operation := p_code + } + + template Subses_Decision_Info_AVP mw_subses_Decision_Info_any := { + aVP_Header := mw_aVP_Header_any_Code(2200), + subsession_Id := ?, + aN_GW_Address := *, + result_Code := *, + experimental_Result := *, + charging_Rule_Remove := *, + charging_Rule_Install := *, + qoS_Rule_Install := *, + qoS_Rule_Remove := *, + default_EPS_Bearer_QoS := *, + usage_Monitoring_Information := *, + session_Release_Cause := *, + bearer_Control_Mode := *, + event_Trigger := *, + revalidation_Time := *, + online := *, + offline := *, + qoS_Information := *, + aVP_Type := * + } + + template Subses_Decision_Info_AVP mw_subses_Decision_Info_qosInfoAndDefaultEpsBearer modifies mw_subses_Decision_Info_any := { + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5, + qoS_Information := mw_qoS_Information + } + + + } //end group S9HeaderFields + } //end DiameterHeaderFields + + group DiameterTemplates { + group CxMessageTemplates{ + group CxRequestBasicTemplates{ + + template MAR_MSG mw_MAR_basic modifies mw_MAR_dummy := { + header := mw_diameterHeaderReq_dummy(MAR_E, c_applId3GPPCxDx), + mAR_Body :={ + auth_Application_Id := *, + sIP_AOR := *, + sIP_Method := * + } + } + + template UAR_MSG mw_UAR_basic modifies mw_UAR_dummy := { + header := mw_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + uAR_Body :={ + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + sIP_AOR := *, + sIP_Visited_Network_Id := *, + sIP_User_Authorization_Type := * + } + } + + template RTR_MSG mw_RTR_basic modifies mw_RTR_dummy := { + header := mw_diameterHeaderReq_dummy(RTR_E, c_applId3GPPCxDx), + rTR_Body :={ + auth_Application_Id := *, + sIP_Deregistration_Reason := * + } + } + + template SAR_MSG mw_SAR_basic modifies mw_SAR_dummy := { + header := mw_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), + sAR_Body :={ + auth_Application_Id := *, + sIP_Server_Assignment_Type := *, + sIP_User_Data_Already_Available := * + } + } + + } + group CxRequestMessageTemplates{ + + template MAR_MSG mw_MAR(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_MAR_basic := { + header := mw_diameterHeaderReq_dummy(MAR_E, c_applId3GPPCxDx), + mAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + public_Identity := p_publicIdentity, + sIP_Number_Auth_Items := ?, + sIP_Auth_Data_Item := ?, + server_Name := ? + } + } + + template RTR_MSG mw_RTR modifies mw_RTR_basic := { + header := mw_diameterHeaderReq_dummy(RTR_E, c_applId3GPPCxDx), + rTR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + deregistration_Reason := mw_deregistrationReason + } + } + + template SAR_MSG mw_SAR_Registration(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_SAR_basic := { + header := mw_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), + sAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + public_Identity := {p_publicIdentity}, + server_Name := ?, + server_Assignment_Type := mw_serverAssignmentType(REGISTRATION_E), + user_Data_Already_Available := ? + } + } + + template SAR_MSG mw_SAR_UnregisteredUser(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_SAR_basic := { + header := mw_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), + sAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + public_Identity := {p_publicIdentity}, + server_Name := ?, + server_Assignment_Type := mw_serverAssignmentType(UNREGISTERED_USER_E), + user_Data_Already_Available := ? + } + } + + template SAR_MSG mw_SAR_UserDeregistration(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_SAR_basic := { + header := mw_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), + sAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + public_Identity := {p_publicIdentity}, + server_Name := ?, + server_Assignment_Type := mw_serverAssignmentType(USER_DEREGISTRATION_E), + user_Data_Already_Available := ? + } + } + + template UAR_MSG mw_UAR_Registration(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_UAR_basic := { + header := mw_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + uAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + public_Identity := p_publicIdentity, + visited_Network_Identifier := ?, + user_Authorization_Type := mw_userAuthorizationType(REGISTRATION) + } + } + + template UAR_MSG mw_UAR(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_UAR_basic := { + header := mw_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + uAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + public_Identity := p_publicIdentity + } + } + + template UAR_MSG mw_UAR_unknownPrivateId(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_UAR_basic := { + header := mw_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + uAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?,//UNKNOWN PRIVATE USER IDENTITY + public_Identity := p_publicIdentity + } + } + + template UAR_MSG mw_UAR_deRegistration(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_UAR_basic := { + header := mw_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + uAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + public_Identity := p_publicIdentity, + visited_Network_Identifier := ?, + user_Authorization_Type := mw_userAuthorizationType(DE_REGISTRATION) + } + } + + }// end group CxRequestMessageTemplates + + group CxAnswertBasicTemplates{ + + template MAA_MSG mw_MAA_basic modifies mw_MAA_dummy := { + header := mw_diameterHeaderAns_dummy(MAA_E, c_applId3GPPCxDx), + mAA_Body :={ + auth_Application_Id := * + } + } + + template RTA_MSG mw_RTA_basic modifies mw_RTA_dummy := { + header := mw_diameterHeaderAns_dummy(RTA_E, c_applId3GPPCxDx), + rTA_Body :={ + auth_Application_Id := * + } + } + + template SAA_MSG mw_SAA_basic modifies mw_SAA_dummy := { + header := mw_diameterHeaderAns_dummy(SAA_E, c_applId3GPPCxDx), + sAA_Body :={ + auth_Application_Id := *, + vendor_Specific_Application_Id := ?, + sIP_User_Data := *, + sIP_Accounting_Information := * + } + } + + template UAA_MSG mw_UAA_basic modifies mw_UAA_dummy := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + uAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Application_Id := *, + experimental_Result := *, + supported_Features := *, + server_Name := *, + server_Capabilities := *, + failed := * + } + } + + }// end group CxAnswertBasicTemplates + + group CxAnswertMessageTemplates{ + + template MAA_MSG mw_MAA modifies mw_MAA_dummy := { + header := mw_diameterHeaderAns_dummy(MAA_E, c_applId3GPPCxDx), + mAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Application_Id := *, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + experimental_Result := omit, + user_Name := ?, + sIP_Number_Auth_Items := ?, + sIP_Auth_Data_Item := ? + } + } + + template RTA_MSG mw_RTA modifies mw_RTA_basic := { + header := mw_diameterHeaderAns_dummy(RTA_E, c_applId3GPPCxDx), + rTA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template SAA_MSG mw_SAA modifies mw_SAA_basic := { + header := mw_diameterHeaderAns_dummy(SAA_E, c_applId3GPPCxDx), + sAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template SAA_MSG mw_SAA_userData modifies mw_SAA_basic := { + header := mw_diameterHeaderAns_dummy(SAA_E, c_applId3GPPCxDx), + sAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + user_Data := ?, + charging_Information := ? + } + } + + template UAA_MSG mw_UAA_diamFirstRegistration modifies mw_UAA_basic := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + uAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := omit, + experimental_Result := mw_experimentalResult(DIAMETER_FIRST_REGISTRATION_E) + } + } + + template UAA_MSG mw_UAA_diamSubsequentRegistration modifies mw_UAA_basic := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + uAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := omit, + experimental_Result := mw_experimentalResult(DIAMETER_SUBSEQUENT_REGISTRATION_E), + server_Name := ?, + server_Capabilities := omit + } + } + + template UAA_MSG mw_UAA_diamErrorUserUnknown modifies mw_UAA_basic := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + uAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := omit, + experimental_Result := mw_experimentalResult(DIAMETER_ERROR_USER_UNKNOWN_E), + server_Name := omit + } + } + + template UAA_MSG mw_UAA_diamSuccess modifies mw_UAA_basic := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + uAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + experimental_Result := omit, + server_Name := ?, + server_Capabilities := omit + } + } + + }// end group CxRequestMessageTemplates + }//end group CxMessageTemplates + group RxMessageTemplates{ + group RxRequestBasicTemplates{ + + template AAR_MSG mw_AAR_basic modifies mw_AAR_dummy := { + header := mw_diameterHeaderReq_dummy(AAR_E, c_applIdRx) + } + + template ASR_MSG mw_ASR_basic modifies mw_ASR_dummy := { + header := mw_diameterHeaderReq_dummy(ASR_E, c_applIdRx) + } + + template RAR_MSG mw_RAR_basic modifies mw_RAR_dummy := { + header := mw_diameterHeaderReq_dummy(RAR_E, c_applIdRx), + rAR_Body :={ + re_Auth_Request_Type := * + } + } + + template STR_MSG mw_STR_basic modifies mw_STR_dummy := { + header := mw_diameterHeaderReq_dummy(STR_E, c_applIdRx) + } + + } + group RxRequestMessageTemplates{ + + template AAR_MSG mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + template (present) Rx_Request_Type_AVP p_rxRequestType := ?, + template (present) Service_Info_Status_AVP p_serviceInfoStatus := ?, + template (present) Framed_IP_Address_AVP p_framedIPAddress := ?, + template (present) Specific_Action_AVP p_specificAction := ? + ) modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := ?, + specific_Action := {p_specificAction}, + framed_IP_Address := p_framedIPAddress, + rx_Request_Type := p_rxRequestType, + service_Info_Status := p_serviceInfoStatus + //framed_IPv6_Address := *, + } + } + + template AAR_MSG mw_AAR_MediaComponent_specificActionLossOfBearer modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := {mw_mediaComponentDescription_SubComponentFlowStatusEnabled}, + specific_Action := {((mw_specificAction(INDICATION_OF_LOSS_OF_BEARER_E))), + (?,(mw_specificAction(INDICATION_OF_LOSS_OF_BEARER_E))), + (?,?,(mw_specificAction(INDICATION_OF_LOSS_OF_BEARER_E))) + }, + framed_IP_Address := ? + //framed_IPv6_Address := *, + } + } + + template AAR_MSG mw_AAR_MediaComponent_mediaComponentDescription_FlowStatusDisabled modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := {mw_mediaComponentDescription_FlowStatusDisabled}, + specific_Action := *, + framed_IP_Address := ? + //framed_IPv6_Address := *, + } + } + + template AAR_MSG mw_AAR_MediaComponent_mediaComponentDescription_FlowStatusEnabledDownlink modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := {mw_mediaComponentDescription_FlowStatusEnabledDownlink}, + specific_Action := *, + framed_IP_Address := ? + //framed_IPv6_Address := *, + } + } + + template AAR_MSG mw_AAR_MediaComponent_mediaComponentDescription_FlowStatusEnabledUplink modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := {mw_mediaComponentDescription_FlowStatusEnabledUplink}, + specific_Action := *, + framed_IP_Address := ? + //framed_IPv6_Address := *, + } + } + + template AAR_MSG mw_AAR_MediaComponent_mediaComponentDescription_FlowStatusEnabled modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := {mw_mediaComponentDescription_FlowStatusEnabled}, + specific_Action := *, + framed_IP_Address := ? + //framed_IPv6_Address := *, + } + } + + template AAR_MSG mw_AAR_AfRequestedData_ServiceUrn modifies mw_AAR_basic := { + aAR_Body :={ + //media_Component_Description := {mw_mediaComponentDescription_FlowStatusEnabled}, + specific_Action := *, + framed_IP_Address := ?, + //framed_IPv6_Address := *, + aF_Requested_Data := mw_aF_Requested_Data, + service_URN := mw_service_URN + } + } + + template AAR_MSG mw_AAR_ServiceUrn modifies mw_AAR_basic := { + aAR_Body :={ + //media_Component_Description := {mw_mediaComponentDescription_FlowStatusEnabled}, + specific_Action := *, + framed_IP_Address := ?, + //framed_IPv6_Address := *, + service_URN := mw_service_URN + } + } + + template ASR_MSG mw_ASR_abortCause(template (present) Abort_Cause_Type p_avpData) modifies mw_ASR_basic := { + aSR_Body :={ + abort_cause := mw_abortCause(p_avpData) + } + } + + template RAR_MSG mw_RAR_SpecificAction modifies mw_RAR_basic := { + rAR_Body :={ + specific_Action := ? + } + } + + }// end group RxRequestMessageTemplates + group RxAnswerBasicTemplates{ + + template AAA_MSG mw_AAA_basic modifies mw_AAA_dummy := { + header := mw_diameterHeaderAns_dummy(AAA_E, c_applIdRx) + } + + template ASA_MSG mw_ASA_basic modifies mw_ASA_dummy := { + header := mw_diameterHeaderAns_dummy(ASA_E, c_applIdRx) + } + + template RAA_MSG mw_RAA_basic modifies mw_RAA_dummy := { + header := mw_diameterHeaderAns_dummy(RAA_E, c_applIdRx) + } + + template STA_MSG mw_STA_basic modifies mw_STA_dummy := { + header := mw_diameterHeaderAns_dummy(STA_E, c_applIdRx) + } + + } + group RxAnswertMessageTemplates{ + + template AAA_MSG mw_AAA_AcceptableService modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + acceptable_service_info := { + media_component_description := + {mw_mediaComponentDescription_SubComponentFlowStatusEnabled + } + }, + ip_Can_Type := ?, + rat_Type := ? + + } + } + + template AAA_MSG mw_AAA_resultCode modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template AAA_MSG mw_AAA_resultCode_mediaCopmonentDescription modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + acceptable_service_info := { + media_component_description := + {mw_mediaComponentDescription_SubComponentFlowStatusEnabled + } + } + + } + } + + template AAA_MSG mw_AAA_resultCode_subscriptionId_userEquipmentInfo modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + user_Equipment_Info := ?, + subscription_Id_AVP := ? + + } + } + + template AAA_MSG mw_AAA_resultCode_userEquipmentInfo modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + user_Equipment_Info := ? + + } + } + + template AAA_MSG mw_AAA_resultCode_subscriptionId modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + subscription_Id_AVP := ? + + } + } + + template ASA_MSG mw_ASA_resultCode modifies mw_ASA_basic := { + aSA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template RAA_MSG mw_RAA_Rx_resultCode modifies mw_RAA_basic := { + rAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template STA_MSG mw_STA_diamSuccess modifies mw_STA_basic := { + sTA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + }// end group RxRequestMessageTemplates + }//end group RxMessageTemplates + + group GxMessageTemplates{ + group GxRequestBasicTemplates{ + + template CCR_MSG mw_CCR_basic modifies mw_CCR_dummy := { + header := mw_diameterHeaderReq_dummy(CCR_E, c_applIdGx) + } + + template RAR_MSG mw_RAR_Gx_basic modifies mw_RAR_dummy := { + header := mw_diameterHeaderReq_dummy(RAR_E, c_applIdGx) + } + + } + group GxRequestMessageTemplates{ + + template CCR_MSG mw_CCR_RequestType(CC_Request_Ty_Type p_avpData) modifies mw_CCR_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData) + } + } + + template CCR_MSG mw_CCR_SubscriberIMSI_qosInformation_class5(CC_Request_Ty_Type p_avpData) modifies mw_CCR_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData), + subscription_Id := {*,mw_subscription_Id(mw_subscription_Id_Type(END_USER_IMSI_E))}, + iP_CAN_Type := ?, + rat_Type := ?, + called_Station_Id := ?, + pDN_Connection_ID := *, + framed_IP_Address := ?, + //framed_IPv6_Prefix := *, + //bearer_Usage := mw_bearer_Usage(IMS_SIGNALLING_E), + qoS_Information := mw_qoS_Information, + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5 + } + } + + template CCR_MSG mw_CCR_SubscriberIMSI_qosInformation_class5_ES(CC_Request_Ty_Type p_avpData) modifies mw_CCR_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData), + subscription_Id := {*,mw_subscription_Id(mw_subscription_Id_Type(END_USER_IMSI_E))}, + iP_CAN_Type := ?, + rat_Type := ?, + called_Station_Id := ?, + pDN_Connection_ID := *, + framed_IP_Address := ?, + //framed_IPv6_Prefix := *, + //bearer_Usage := mw_bearer_Usage(IMS_SIGNALLING_E), + qoS_Information := mw_qoS_Information, + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5 + } + } + template CCR_MSG mw_CCR_SubscriberIMEI_qosInformation_class5_ES(CC_Request_Ty_Type p_avpData) modifies mw_CCR_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData), + //subscription_Id := {*,mw_subscription_Id(mw_subscription_Id_Type(END_USER_IMSI_E))}, + user_Equipment_Info := mw_userEquipmentInfo_IMEI, + iP_CAN_Type := ?, + rat_Type := ?, + called_Station_Id := ?, + pDN_Connection_ID := *, + framed_IP_Address := ?, + //framed_IPv6_Prefix := *, + //bearer_Usage := mw_bearer_Usage(IMS_SIGNALLING_E), + qoS_Information := mw_qoS_Information, + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5 + } + } + + template RAR_MSG mw_RAR_ChargingRuleInstall(template Charging_Rule_Install_AVP p_Charging_Rule_Install) modifies mw_RAR_Gx_basic := { + rAR_Body :={ + charging_Rule_Install := {p_Charging_Rule_Install} + } + } + + template RAR_MSG mw_RAR_ChargingRuleRemove modifies mw_RAR_Gx_basic := { + rAR_Body :={ + charging_Rule_Remove := {mw_chrgRuleRemove_Name} + } + } + + }// end group GxRequestMessageTemplates + + group GxAnswerBasicTemplates{ + + template CCA_MSG mw_CCA_basic modifies mw_CCA_dummy := { + header := mw_diameterHeaderAns_dummy(CCA_E, c_applIdGx) + } + + template RAA_MSG mw_RAA_Gx_basic modifies mw_RAA_dummy := { + header := mw_diameterHeaderAns_dummy(RAA_E, c_applIdGx) + } + } + + group GxAnswertMessageTemplates{ + + template CCA_MSG mw_CCA_resultCode modifies mw_CCA_basic := { + cCA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template CCA_MSG mw_CCA_qosInformation_class5 modifies mw_CCA_basic := { + cCA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + qoS_Information := {mw_qoS_Information}, + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5 + } + } + + template RAA_MSG mw_RAA_resultCode modifies mw_RAA_Gx_basic := { + rAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + }// end group GxRequestMessageTemplates + }//end group GxMessageTemplates + + group S6aMessageTemplates{ + group S6aRequestBasicTemplates{ + + template AIR_MSG mw_AIR_basic modifies mw_AIR_dummy := { + header := mw_diameterHeaderReq_dummy(AIR_E, c_applIdS6a) + } + + template CLR_MSG mw_CLR_basic modifies mw_CLR_dummy := { + header := mw_diameterHeaderReq_dummy(CLR_E, c_applIdS6a) + } + + template PUER_MSG mw_PUER_basic modifies mw_PUER_dummy := { + header := mw_diameterHeaderReq_dummy(PUER_E, c_applIdS6a) + } + + template ULR_MSG mw_ULR_basic modifies mw_ULR_dummy := { + header := mw_diameterHeaderReq_dummy(ULR_E, c_applIdS6a) + } + + } + group S6aRequestMessageTemplates{ + + template AIR_MSG mw_AIR modifies mw_AIR_dummy := { + aIR_Body :={ + user_Name := ?, + req_EUTRAN_Auth_Info := ?, + visited_PLMN_Id :=? + } + } + + template CLR_MSG mw_CLR_cancelation modifies mw_CLR_dummy := { + cLR_Body :={ + user_Name := ?, + cancellation_Type := mw_cancellationType(SUBSCRIPTION_WITHDRAWAL_E), + cLR_Flags :=? + } + } + + template PUER_MSG mw_PUER_userName modifies mw_PUER_dummy := { + pUER_Body :={ + user_Name := ?, + pUER_Flags :=? + } + } + + template ULR_MSG mw_ULR_userName modifies mw_ULR_dummy := { + uLR_Body :={ + user_Name := ?, + ulr_Flags := ?, + rat_Type := ?, + visited_PLMN_Id := ? + } + } + + + }// end group S6aRequestMessageTemplates + group S6aAnswerBasicTemplates{ + + template AIA_MSG mw_AIA_basic modifies mw_AIA_dummy := { + header := mw_diameterHeaderAns_dummy(AIA_E, c_applIdS6a) + } + + template CLA_MSG mw_CLA_basic modifies mw_CLA_dummy := { + header := mw_diameterHeaderAns_dummy(CLA_E, c_applIdS6a) + } + + template PUEA_MSG mw_PUEA_basic modifies mw_PUEA_dummy := { + header := mw_diameterHeaderAns_dummy(PUEA_E, c_applIdS6a) + } + + template ULA_MSG mw_ULA_basic modifies mw_ULA_dummy := { + header := mw_diameterHeaderAns_dummy(ULA_E, c_applIdS6a) + } + + } + group S6aAnswertMessageTemplates{ + + template AIA_MSG mw_AIA_resultCode modifies mw_AIA_basic := { + aIA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + authentication_Info := ? + } + } + + template CLA_MSG mw_CLA_resultCode modifies mw_CLA_basic := { + cLA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template PUEA_MSG mw_PUEA_resultCode modifies mw_PUEA_basic := { + pUEA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template ULA_MSG mw_ULA_resultCode modifies mw_ULA_basic := { + uLA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template ULA_MSG mw_ULA_resultCode_flags modifies mw_ULA_basic := { + uLA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + ula_Flags := ? + } + } + template ULA_MSG mw_ULA_subsdata_flags modifies mw_ULA_resultCode_flags := { + uLA_Body :={ + //result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + //ula_Flags := ? + subscription_Data :=mw_subscriptionData_emergencyInfo + } + } + + }// end group S6aRequestMessageTemplates + }//end group S6aMessageTemplates + group ShMessageTemplates{ + group ShRequestMessageTemplates{ + + template UDR_MSG mw_UDR_userData_publicIdentity(template (present) UTF8String p_avpData) modifies mw_UDR_dummy := { + uDR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Identity := mw_userIdentity_publicIdentity(mw_publicIdentity(p_avpData)), + data_Reference := ? + } + } + + }// end group ShRequestMessageTemplates + group ShAnswertMessageTemplates{ + + template UDA_MSG mw_UDA_diamSuccess modifies mw_UDA_dummy := { + uDA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + user_Data := ? + } + } + + }// end group ShRequestMessageTemplates + }//end group ShMessageTemplates + group S9MessageTemplates{ + + group S9RequestBasicTemplates{ + + template AAR_MSG mw_AAR_S9_basic modifies mw_AAR_dummy := { + header := mw_diameterHeaderReq_dummy(AAR_E, ?/*TODO c_applIdS9*/) + } + + template ASR_MSG mw_ASR_S9_basic modifies mw_ASR_dummy := { + header := mw_diameterHeaderReq_dummy(ASR_E, ?/*TODO c_applIdS9*/) + } + + template CCR_MSG mw_CCR_S9_basic modifies mw_CCR_dummy := { + header := mw_diameterHeaderReq_dummy(CCR_E, ?/*TODO c_applIdS9*/) + } + + template STR_MSG mw_STR_S9_basic modifies mw_STR_dummy := { + header := mw_diameterHeaderReq_dummy(STR_E, ?/*TODO c_applIdS9*/) + } + + } + group S9RequestMessageTemplates{ + + template ASR_MSG mw_ASR_S9_abortCause(template (present) Abort_Cause_Type p_avpData) modifies mw_ASR_S9_basic := { + aSR_Body :={ + abort_cause := mw_abortCause(p_avpData) + } + } + + template CCR_MSG mw_CCR_S9_Establishment(CC_Request_Ty_Type p_avpData) modifies mw_CCR_S9_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData), + subscription_Id := {*,mw_subscription_Id(mw_subscription_Id_Type(END_USER_IMSI_E))}, + iP_CAN_Type := ?, + rat_Type := ?, + called_Station_Id := ?, + pDN_Connection_ID := *, + framed_IP_Address := ?, + //framed_IPv6_Prefix := *, + bearer_Usage := *,//mw_bearer_Usage(IMS_SIGNALLING_E), + qoS_Information := mw_qoS_Information, + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5, + subsesion_Enforcement_Info := ? //AXR {mw_subses_Enforcement_Info(mw_subsession_Operation_AVP (ESTABLISHMENT_E))} + } + } + + template CCR_MSG mw_CCR_S9_Termination(CC_Request_Ty_Type p_avpData) modifies mw_CCR_S9_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData), + subsesion_Enforcement_Info := ? //AXR {mw_subses_Enforcement_Info(mw_subsession_Operation_AVP (TERMINATION_E))} + } + } + + }// end group S9RequestMessageTemplates + + group S9AnswerBasicTemplates{ + + template AAA_MSG mw_AAA_S9_basic modifies mw_AAA_dummy := { + header := mw_diameterHeaderAns_dummy(AAA_E, ?/*TODO c_applIdS9*/) + } + + template ASA_MSG mw_ASA_S9_basic modifies mw_ASA_dummy := { + header := mw_diameterHeaderAns_dummy(ASA_E, ?/*TODO c_applIdS9*/) + } + + template CCA_MSG mw_CCA_S9_basic modifies mw_CCA_dummy := { + header := mw_diameterHeaderAns_dummy(CCA_E, ?/*TODO c_applIdS9*/) + } + + template STA_MSG mw_STA_S9_basic modifies mw_STA_dummy := { + header := mw_diameterHeaderAns_dummy(STA_E, ?/*TODO c_applIdS9*/) + } + } + + group S9AnswertMessageTemplates{ + + template AAA_MSG mw_AAA_S9_resultCode modifies mw_AAA_S9_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template AAA_MSG mw_AAA_S9_AcceptableService modifies mw_AAA_S9_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + acceptable_service_info := { + media_component_description := + {mw_mediaComponentDescription_SubComponentFlowStatusEnabled + } + }, + ip_Can_Type := ?, + rat_Type := ? + + } + } + + template AAA_MSG mw_AAA_S9_resultCode_mediaCopmonentDescription modifies mw_AAA_S9_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + acceptable_service_info := { + media_component_description := + {mw_mediaComponentDescription_SubComponentFlowStatusEnabled + } + } + + } + } + + template CCA_MSG mw_CCA_S9_subsessionDecisionAny modifies mw_CCA_S9_basic := { + cCA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + subsession_Decision_Info := {mw_subses_Decision_Info_any} + } + } + + template CCA_MSG mw_CCA_S9_subsessionDecision_qosInfoAndDefaultEpsBearer modifies mw_CCA_S9_basic := { + cCA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + subsession_Decision_Info := {mw_subses_Decision_Info_qosInfoAndDefaultEpsBearer} + } + } + + template STA_MSG mw_STA_S9_diamSuccess modifies mw_STA_S9_basic := { + sTA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + }// end group S9RequestMessageTemplates + }//end group S9MessageTemplates + } // end group DiameterTemplates + group DiameterTemplatesDummy + { + + group dummy_request_templates_receive { + + template AIR_MSG mw_AIR_dummy := + { + header := mw_diameterHeaderReq_dummy(AIR_E, ?), + session_Id := ?, + aIR_Body := mw_AIR_Body_dummy + } + + template AIR_Body_AVP mw_AIR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + user_Name := ?, + supported_Features := *, + req_EUTRAN_Auth_Info := *, + req_UTRAN_GERAN_Auth_Info := *, + visited_PLMN_Id :=?, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template (present) CLR_MSG mw_CLR_dummy := { + header := mw_diameterHeaderReq_dummy ( CLR_E, c_applIdS6a ), + session_Id := ?, + cLR_Body := mw_CLR_Body_dummy + } // End of template mw_CLR_dummy + + template (present) CLR_Body_AVP mw_CLR_Body_dummy := { + vendor_Specific_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := ?, + destination_Realm := ?, + user_Name := ?, + supported_Features := *, + cancellation_Type := ?, + cLR_Flags := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } // End of template mw_CLR_Body_dummy + + template (present) PUER_MSG mw_PUER_dummy := { + header := mw_diameterHeaderReq_dummy ( PUER_E, c_applIdS6a ), + session_Id := ?, + pUER_Body := mw_PUER_Body_dummy + } // End of template mw_PUR_dummy + + template (present) PUER_Body_AVP mw_PUER_Body_dummy := { + vendor_Specific_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Name := ?, + pUER_Flags := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } // End of template mw_PUER_Body_dummy + + template (present) ULR_MSG mw_ULR_dummy := { + header := mw_diameterHeaderReq_dummy ( ULR_E, c_applIdS6a ), + session_Id := ?, + uLR_Body := mw_ULR_Body_dummy + } // End of template mw_uLR_dummy + + template (present) ULR_Body_AVP mw_ULR_Body_dummy := { + vendor_Specific_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + user_Name := ?, + supported_Features := *, + terminal_Information := *, + rat_Type := ?, + ulr_Flags := ?, + ue_SRVCC_Capability := *, + visited_PLMN_Id := ?, + sgsn_Number := *, + homogeneous_Support := *, + gmlc_Address := *, + active_APN := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } // End of template mw_ULR_Body_dummy + + }//end group dummy_request_templates_receive + + group dummy_response_templates_receive { + + template AIA_MSG mw_AIA_dummy := { + header := mw_diameterHeaderAns_dummy(AIA_E, ?), + session_Id := ?, + aIA_Body := mw_AIA_Body_dummy + } + + template AIA_Body_AVP mw_AIA_Body_dummy := + { + vendor_Specific_Application_Id := *, + result_Code := ?, + experimental_Result := *, + error_Diagnostic := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, + authentication_Info := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template (present) CLA_MSG mw_CLA_dummy := { + header := mw_diameterHeaderAns_dummy ( CLA_E, c_applIdS6a ), + session_Id := ?, + cLA_Body := mw_CLA_Body_dummy + } + + template (present) CLA_Body_AVP mw_CLA_Body_dummy := { + vendor_Specific_Application_Id := *, + supported_Features := *, + result_Code := *, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template (present) PUEA_MSG mw_PUEA_dummy := { + header := mw_diameterHeaderAns_dummy ( PUEA_E, c_applIdS6a ), + session_Id := ?, + pUEA_Body := mw_PUEA_Body_dummy + } + + template (present) PUEA_Body_AVP mw_PUEA_Body_dummy := { + vendor_Specific_Application_Id := ?, + supported_Features := *, + result_Code := *, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + pUEA_Flags := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template (present) ULA_MSG mw_ULA_dummy := { + header := mw_diameterHeaderAns_dummy ( ULA_E, c_applIdS6a ), + session_Id := ?, + uLA_Body := mw_ULA_Body_dummy + } // End of template mw_ULA_dummy + + template (present) ULA_Body_AVP mw_ULA_Body_dummy := { + vendor_Specific_Application_Id := *, + result_Code := *, + experimental_Result := *, + error_Diagnostic := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, + ula_Flags := *, + subscription_Data := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } // End of template mw_ULA_Body_dummy + + }//end group dummy_response_templates_receive + + group AVPCodeConstantsTS129_722 { + + const integer c_subscription_Data_AVP_Code := 1400; + // Ref: table 7.3.1/1 + const integer c_terminal_Information_AVP_Code := 1401; + // Ref: table 7.3.1/1 + const integer c_imei_AVP_Code := 1402; + // Ref: table 7.3.1/1 + const integer c_software_Version_AVP_Code := 1403; + // Ref: table 7.3.1/1 + const integer c_qos_Subscribed_AVP_Code := 1404; + // Ref: table 7.3.1/1 + const integer c_ulr_Flags_AVP_Code := 1405; + // Ref: table 7.3.1/1 + const integer c_ula_Flags_AVP_Code := 1406; + // Ref: table 7.3.1/1 + const integer c_visited_PLMN_Id_AVP_Code := 1407; + // Ref: table 7.3.1/1 + const integer c_requested_EUTRAN_Authentication_Info_AVP_Code := 1408; + // Ref: table 7.3.1/1 + const integer c_requested_UTRAN_GERAN_Authentication_Info_AVP_Code := 1409; + // Ref: table 7.3.1/1 + const integer c_number_Of_Requested_Vectors_AVP_Code := 1410; + // Ref: table 7.3.1/1 + const integer c_re_Synchronization_Info_AVP_Code := 1411; + // Ref: table 7.3.1/1 + const integer c_immediate_Response_Preferred_AVP_Code := 1412; + // Ref: table 7.3.1/1 + const integer c_authentication_Info_AVP_Code := 1413; + // Ref: table 7.3.1/1 + const integer c_e_UTRAN_Vector_AVP_Code := 1414; + // Ref: table 7.3.1/1 + const integer c_utran_Vector_AVP_Code := 1415; + // Ref: table 7.3.1/1 + const integer c_geran_Vector_AVP_Code := 1416; + // Ref: table 7.3.1/1 + const integer c_network_Access_Mode_AVP_Code := 1417; + // Ref: table 7.3.1/1 + const integer c_hplmn_ODB_AVP_Code := 1418; + // Ref: table 7.3.1/1 + const integer c_item_Number_AVP_Code := 1419; + // Ref: table 7.3.1/1 + const integer c_cancellation_Type_AVP_Code := 1420; + // Ref: table 7.3.1/1 + const integer c_dsr_Flags_AVP_Code := 1421; + // Ref: table 7.3.1/1 + const integer c_dsa_Flags_AVP_Code := 1422; + // Ref: table 7.3.1/1 + const integer c_context_Identifier_AVP_Code := 1423; + // Ref: table 7.3.1/1 + const integer c_subscriber_Status_AVP_Code := 1424; + // Ref: table 7.3.1/1 + const integer c_operator_Determined_Barring_AVP_Code := 1425; + // Ref: table 7.3.1/1 + const integer c_access_Restriction_Data_AVP_Code := 1426; + // Ref: table 7.3.1/1 + const integer c_apn_OI_Replacement_AVP_Code := 1427; + // Ref: table 7.3.1/1 + const integer c_all_APN_Configurations_Included_Indicator_AVP_Code := 1428; + // Ref: table 7.3.1/1 + const integer c_apn_Configuration_Profile_AVP_Code := 1429; + // Ref: table 7.3.1/1 + const integer c_apn_Configuration_AVP_Code := 1430; + // Ref: table 7.3.1/1 + const integer c_eps_Subscribed_QoS_Profile_AVP_Code := 1431; + // Ref: table 7.3.1/1 + const integer c_vplmn_Dynamic_Address_Allowed_AVP_Code := 1432; + // Ref: table 7.3.1/1 + const integer c_stn_SR_AVP_Code := 1433; + // Ref: table 7.3.1/1 + const integer c_alert_Reason_AVP_Code := 1434; + // Ref: table 7.3.1/1 + const integer c_ambr_AVP_Code := 1435; + // Ref: table 7.3.1/1 + const integer c_csg_Subscription_Data_AVP_Code := 1436; + // Ref: table 7.3.1/1 + const integer c_csg_Id_AVP_Code := 1437; + // Ref: table 7.3.1/1 + const integer c_pdn_GW_Allocation_Type_AVP_Code := 1438; + // Ref: table 7.3.1/1 + const integer c_expiration_Date_AVP_Code := 1439; + // Ref: table 7.3.1/1 + const integer c_rat_Frequency_Selection_Priority_ID_AVP_Code := 1440; + // Ref: table 7.3.1/1 + const integer c_ida_Flags_AVP_Code := 1441; + // Ref: table 7.3.1/1 + const integer c_pua_Flags_AVP_Code := 1442; + // Ref: table 7.3.1/1 + const integer c_nor_Flags_AVP_Code := 1443; + // Ref: table 7.3.1/1 + const integer c_user_Id_AVP_Code := 1444; + // Ref: table 7.3.1/1 + const integer c_equipment_Status_AVP_Code := 1445; + // Ref: table 7.3.1/1 + const integer c_regional_Subscription_Zone_Code_AVP_Code := 1446; + // Ref: table 7.3.1/1 + const integer c_rand_AVP_Code := 1447; + // Ref: table 7.3.1/1 + const integer c_xres_AVP_Code := 1448; + // Ref: table 7.3.1/1 + const integer c_autn_AVP_Code := 1449; + // Ref: table 7.3.1/1 + const integer c_kasme_AVP_Code := 1450; + // Ref: table 7.3.1/1 + const integer c_kc_AVP_Code := 1453; + // Ref: table 7.3.1/1 + const integer c_sres_AVP_Code := 1454; + // Ref: table 7.3.1/1 + const integer c_pdn_Type_AVP_Code := 1456; + // Ref: table 7.3.1/1 + const integer c_roaming_Restricted_Due_To_Unsupported_Feature_AVP_Code := 1457; + // Ref: table 7.3.1/1 + const integer c_omc_Id_AVP_Code := 1466; + // Ref: table 7.3.1/1 + const integer c_gprs_Subscription_Data_AVP_Code := 1467; + // Ref: table 7.3.1/1 + const integer c_complete_Data_List_Included_Indicator_AVP_Code := 1468; + // Ref: table 7.3.1/1 + const integer c_pdp_Context_AVP_Code := 1469; + // Ref: table 7.3.1/1 + const integer c_pdp_Type_AVP_Code := 1470; + // Ref: table 7.3.1/1 + const integer c_3gpp2_MEID_AVP_Code := 1471; + // Ref: table 7.3.1/1 + const integer c_specific_APN_Info_AVP_Code := 1472; + // Ref: table 7.3.1/1 + const integer c_lcs_Info_AVP_Code := 1473; + // Ref: table 7.3.1/1 + const integer c_gmlc_Number_AVP_Code := 1474; + // Ref: table 7.3.1/1 + const integer c_lcs_PrivacyException_AVP_Code := 1475; + // Ref: table 7.3.1/1 + const integer c_ss_Code_AVP_Code := 1476; + // Ref: table 7.3.1/1 + const integer c_ss_Status_AVP_Code := 1477; + // Ref: table 7.3.1/1 + const integer c_notification_To_UE_User_AVP_Code := 1478; + // Ref: table 7.3.1/1 + const integer c_external_Client_AVP_Code := 1479; + // Ref: table 7.3.1/1 + const integer c_client_Identity_AVP_Code := 1480; + // Ref: table 7.3.1/1 + const integer c_gmlc_Restriction_AVP_Code := 1481; + // Ref: table 7.3.1/1 + const integer c_plmn_Client_AVP_Code := 1482; + // Ref: table 7.3.1/1 + const integer c_service_Type_AVP_Code := 1483; + // Ref: table 7.3.1/1 + const integer c_serviceTypeIdentity_AVP_Code := 1484; + // Ref: table 7.3.1/1 + const integer c_mo_LR_AVP_Code := 1485; + // Ref: table 7.3.1/1 + const integer c_teleservice_List_AVP_Code := 1486; + // Ref: table 7.3.1/1 + const integer c_ts_Code_AVP_Code := 1487; + // Ref: table 7.3.1/1 + const integer c_call_Barring_Info_AVP_Code := 1488; + // Ref: table 7.3.1/1 + const integer c_sgsn_Number_AVP_Code := 1489; + // Ref: table 7.3.1/1 + const integer c_idr_Flags_AVP_Code := 1490; + // Ref: table 7.3.1/1 + const integer c_ics_Indicator_AVP_Code := 1491; + // Ref: table 7.3.1/1 + const integer c_ims_Voice_Over_PS_Sessions_Supported_AVP_Code := 1492; + // Ref: table 7.3.1/1 + const integer c_homogeneous_Support_of_IMS_Voice_Over_PS_Sessions_AVP_Code := 1493; + // Ref: table 7.3.1/1 + const integer c_last_UE_Activity_Time_AVP_Code := 1494; + // Ref: table 7.3.1/1 + const integer c_eps_User_State_AVP_Code := 1495; + // Ref: table 7.3.1/1 + const integer c_eps_Location_Information_AVP_Code := 1496; + // Ref: table 7.3.1/1 + const integer c_mme_User_State_AVP_Code := 1497; + // Ref: table 7.3.1/1 + const integer c_sgsn_User_State_AVP_Code := 1498; + // Ref: table 7.3.1/1 + const integer c_user_State_AVP_Code := 1499; + // Ref: table 7.3.1/1 + const integer c_mme_Location_Information_AVP_Code := 1600; + // Ref: table 7.3.1/1 + const integer c_sgsn_Location_Information_AVP_Code := 1601; + // Ref: table 7.3.1/1 + const integer c_service_Area_Identity_AVP_Code := 1607; + // Ref: table 7.3.1/1 + const integer c_geographical_Information_AVP_Code := 1608; + // Ref: table 7.3.1/1 + const integer c_geodetic_Information_AVP_Code := 1609; + // Ref: table 7.3.1/1 + const integer c_current_Location_Retrieved_AVP_Code := 1610; + // Ref: table 7.3.1/1 + const integer c_age_Of_Location_Information_AVP_Code := 1611; + // Ref: table 7.3.1/1 + const integer c_active_APN_AVP_Code := 1612; + // Ref: table 7.3.1/1 + const integer c_error_Diagnostic_AVP_Code := 1614; + // Ref: table 7.3.1/1 + const integer c_ext_PDP_Address_AVP_Code := 1621; + // Ref: table 7.3.1/1 + const integer c_ue_SRVCC_Capability_AVP_Code := 1615; + // Ref: table 7.3.1/1 + const integer c_mps_Priority_AVP_Code := 1616; + // Ref: table 7.3.1/1 + const integer c_vplmn_LIPA_Allowed_AVP_Code := 1617; + // Ref: table 7.3.1/1 + const integer c_lipa_Permission_AVP_Code := 1618; + // Ref: table 7.3.1/1 + const integer c_subscribed_Periodic_RAU_TAU_Timer_AVP_Code := 1619; + // Ref: table 7.3.1/1 + const integer c_ext_PDP_Type_AVP_Code := 1620; + // Ref: table 7.3.1/1 + const integer c_sipto_Permission_AVP_Code := 1613; + // Ref: table 7.3.1/1 + const integer c_mdt_Configuration_AVP_Code := 1622; + // Ref: table 7.3.1/1 + const integer c_job_Type_AVP_Code := 1623; + // Ref: table 7.3.1/1 + const integer c_event_Threshold_RSRP_AVP_Code := 1629; + // Ref: table 7.3.1/1 + const integer c_event_Threshold_RSRQ_AVP_Code := 1630; + // Ref: table 7.3.1/1 + const integer c_relay_Node_Indicator_AVP_Code := 1633; + // Ref: table 7.3.1/1 + const integer c_mdt_User_Consent_AVP_Code := 1634; + // Ref: table 7.3.1/1 + const integer c_puer_Flags_AVP_Code := 1635; + // Ref: table 7.3.1/1 + const integer c_clr_Flags_AVP_Code := 1638; + // Ref: table 7.3.1/1 + } + } +}//end module AtsImsIot_Diameter_Templates \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib/AtsImsIot_PIXITS.ttcn b/ttcn/LibAtsImsIot/lib/AtsImsIot_PIXITS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..0ac92438f632740b982526680ba7c07f9b5b6b13 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib/AtsImsIot_PIXITS.ttcn @@ -0,0 +1,62 @@ +/** + * @author STF 574, TTF 010 + * @version $Id$ + * @desc This module provides the module parameter + */ +module AtsImsIot_PIXITS { + import from LibSip_SIPTypesAndValues all; + + group SUT { + + group SUT_CONF { + /** + * @desc charstring for SUT/conference domain + */ + modulepar charstring PX_IMS_SUT_CONF_HOME_DOMAIN := "conf.sut.net"; + /** + * @desc charstring for conference factory URI name + */ + modulepar + charstring PX_IMS_SUT_CONF_FACTORY_NAME := "factory.uri.name"; + /** + * @desc charstring for PChargingVector TP_IC_IBCF_INVITE_04 + */ + modulepar charstring PX_IMS_A_ICID := "PX_IMS_A_ICID"; + + /** + * @desc Set to true of PSAP shall be registered to the IMS + */ + modulepar boolean PX_PSAP_REGISTERED := true; + + /** + * @desc Set to true if the emergency call is an issued by an eCall + */ + modulepar boolean PX_ECALL := false; + + /** + * @desc charstring for emergency service urn + */ + // modulepar charstring PX_URN_SERVICE_SOS := "urn:service:sos"; + // modulepar UrnUriComponents PX_URN_SERVICE_SOS := { + // namespaceId := "service", + // namespaceSpecificString := "sos" + // }; + modulepar SipUrl PX_URN_SERVICE_SOS := { + scheme := "sip", + components := { + urn := { + namespaceId := "service", + namespaceSpecificString := "sos" + } + }, + urlParameters := omit, + headers := omit + }; + + } // end group SUT_CONF + + + } // end group SUT + group TS { + } // end group TS +} \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates.ttcn b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..24a8854861d91ae744cce79210279ad31710f287 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates.ttcn @@ -0,0 +1,2813 @@ +/* + * @author STF 370 + * @version $Id: $ + * @desc This module provides the templates for Interoperability tests. + */ + +module AtsImsIot_Templates { + + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_VerdictControl all; + import from LibIot_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_XMLTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibMsrp_TypesAndValues all; + import from LibIms_Templates all; + import from LibIot_PIXITS all; + import from AtsImsIot_PIXITS all; + + import from XSD all; + import from NoTargetNamespace language "XSD" all + with { + extension "File:../xsd/Ims3gpp.xsd"; + } + + group adapterMsgTemplates { + template SetFilterReq m_SetFilterReq(ProtocolFilter p_protocol, InterfaceInfoList p_iterfaces) := { + protocol := p_protocol, + interfaceInfos := p_iterfaces + } + + template SetFilterRsp mw_SetFilterRsp(in template (present) Status p_status) := { + status := p_status + } + } + + group sipTemplates { + + /** + * @desc SIP request template + * @param p_request SIP request + */ + template SipMessage mw_SipRequest(in template (present) Request p_request) := { + request := p_request + } + + /** + * @desc SIP response template + * @param p_response SIP response + */ + template SipMessage mw_SipResponse(in template (present) Response p_response) := { + response := p_response + } + }// End of group + + group msrpMessages { + + /** + * @desc MSRP request template + * @param p_msrpRequest MSRP request + */ + template SipMessage mw_MsrpRequest(in template (present) SEND_request p_msrpRequest) := { + msrpRequest := p_msrpRequest + } + + /** + * @desc MSRP response template + * @param p_msrpResponse MSRP response + */ + template SipMessage mw_MsrpResponse(in template (present) RECEIVE_response p_msrpResponse) := { + msrpResponse := p_msrpResponse + } + + template REFER_Request mdw_TP_MSRP_9000_07( + in template CallId p_callId, + in boolean p_referSubValue + ) modifies mw_REFER_Request_Base := { + msgHeader := + { + referSub := { + fieldName := REFER_SUB_E, + referSubValue := p_referSubValue, + referSubParams := * + } + } + } + + } // End of group msrpMessages + + group naptrTemplates { + template NAPTRmessage mw_EnumQuery_Base := { + enumMessage := { + query := { + header := ?, + enumQuestion_list := ? length (1 .. infinity), + enumResponse_list := *, + authority_list := *, + additional_list := * + } + } + } + template NAPTRmessage mw_EnumResponse_Base := { + enumMessage := { + response := { + header:=?, + enumQuestion_list := ?, + enumAnswer_list := + { + { + e164TelNumber := ?, + naptrType := 35, + class_ := ?, + ttl := ?, + rd_length := ?, + naptrRR := ? + },//TODO:this might not be the first item + * + }, + authority_list := ?, + additional_list := ? + } + } + } + } + + group rcseTemplates { + template OPTIONS_Request mw_OPTIONS_Request ( charstring p_rcseTags ) := { + requestLine := { method := OPTIONS_E, requestUri := ?, sipVersion := c_sipNameVersion }, + msgHeader := mw_msgHeader_Options ( p_rcseTags ), + messageBody := *, + payload := * + } + + template Response mw_Response ( template StatusLine p_statusLine, charstring p_rcseTags ) := { + statusLine := p_statusLine, + msgHeader := mw_msgHeader_Options ( p_rcseTags ), + messageBody := *, + payload := * + } + + template MessageHeader mw_msgHeader_Options ( charstring p_rcseTags ) modifies mw_msgHeader_dummy := { + acceptContact := { + fieldName := ACCEPT_CONTACT_E, + acValues := superset ( mw_Rcse_Tags ( p_rcseTags ) ) + } + } + + template AcRcValue mw_Rcse_Tags ( charstring p_rcseTags ) := { + wildcard := c_WILDCARD, + acRcParams := superset ( mw_User_Caps ( p_rcseTags )) + } + + template GenericParam mw_User_Caps ( charstring p_rcseTags ) := { + id := ?, + paramValue := { quotedString := p_rcseTags } + } + } + + group modifiedSIPBaseTemplates { + + /** + * + * @desc Message Request containing a message body greater than 1500 bytes. + */ + template MESSAGE_Request mdw_MESSAGE_1500c(template CallId p_callId := ?) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + contact := * + }, + messageBody := { + textplain := pattern "?#(1500,)" + } + } + + /** + * + * @desc REGISTER Request containing secuity client header. + */ + template REGISTER_Request mdw_TP_IMS_5011_01_gm modifies mw_REGISTER_Request_Base := { + msgHeader := { + securityClient := ? + } + } + + /** + * + * @desc REGISTER Request containing secuity client header. + */ + template REGISTER_Request mdw_TP_IMS_5011_02_gm modifies mw_REGISTER_Request_Base := { + msgHeader := { + securityClient := ? + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_01. + */ + template REGISTER_Request mdw_TP_IMS_5011_01p_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + require := mw_Require ({"path", *}), + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "icid-value", paramValue := ?}, + {id := "orig-ioi", paramValue := ?}, + * + } + }, + authorization := mw_Authorization(mw_credentialIntegrityNo), + securityClient := omit, + securityVerify :=omit, + pVisitedNetworkID := mw_PVisitedNetworkIDAny + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_01. + */ + template REGISTER_Request mdw_TP_IMS_5011_01f_ic modifies mw_REGISTER_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := ?}, + * + } + } + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5134_01. + */ + template REGISTER_Request mdw_TP_IMS_5134_01_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname) + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_02. + */ + template REGISTER_Request mdw_TP_IMS_5011_02p_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + require := mw_Require ({"path", *}), + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := ?}, + {id := "orig-ioi", paramValue := ?}, + * + }), + authorization := mw_Authorization(mw_credentialIntegrityYes), + securityClient := omit, + securityVerify :=omit, + pVisitedNetworkID := mw_PVisitedNetworkIDAny + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_02. + */ + template REGISTER_Request mdw_TP_IMS_5011_02f_ic modifies mw_REGISTER_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_03. + */ + template REGISTER_Request mdw_TP_IMS_5011_03p_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + require := mw_Require ({"path", *}), + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "icid-value", paramValue := ?}, + {id := "orig-ioi", paramValue := ?}, + * + } + }, + authorization := mw_Authorization(mw_credentialIntegrityIpAssocPending), + securityClient := omit, + securityVerify :=omit, + pVisitedNetworkID := mw_PVisitedNetworkIDAny + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_04. + */ + template REGISTER_Request mdw_TP_IMS_5011_04p_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + require := mw_Require ({"path", *}), + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := ?}, + {id := "orig-ioi", paramValue := ?}, + * + }), + authorization := mw_Authorization(mw_credentialIntegrityIpAssocYes), + securityClient := omit, + securityVerify :=omit, + pVisitedNetworkID := mw_PVisitedNetworkIDAny + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5089_01. + */ + template REGISTER_Request mdw_TP_IMS_5089_01_ic_when modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityNo) + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5089_02. + */ + template REGISTER_Request mdw_TP_IMS_5089_02_ic_when modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityIpAssocPending) + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5092_01. + */ + template REGISTER_Request mdw_TP_IMS_5092_01_ic_when modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityNo) + } + } + + /** + * + * @desc 200 OK message for TP_IMS_5092_01 + */ + template Response mdw_TP_IMS_5092_01_ic (charstring p_EUTHostname, template SipUrl p_eutBUri) modifies mw_200OK_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + pAssociatedURI := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := ? + }, + pChargingVector := mw_PChargingVector({ // @TODO indicating operator_identifier of IMS_? (IUT_?)? + {id := "term-ioi", paramValue := ?}, + * + }), + serviceRoute := mw_ServiceRoute (p_eutBUri), + contact := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := ? + } + } + } + } + /** + * + * @desc 401 Unauthorized message checking f_mtc_check_TP_IMS_5089_01_ic. + */ + template Response mdw_TP_IMS_5089_01_ic modifies mw_401Unauthorized_Base := { + msgHeader := { + wwwAuthenticate := mw_WwwAuthenticate_AKA + } + } + + /** + * + * @desc 401 Unauthorized message checking f_mtc_check_TP_IMS_5089_02_ic. + */ + template Response mdw_TP_IMS_5089_02_ic modifies mw_401Unauthorized_Base := { + msgHeader := { + wwwAuthenticate := mw_WwwAuthenticate_MD5 + } + } + + + /** + * + * @desc SUBSCRIBE checking TP_IMS_5044_01. + */ + template SUBSCRIBE_Request mdw_TP_IMS_5044_01_ic( + template SipUrl p_subscribe_uri, + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId + ) modifies mw_SUBSCRIBE_Request_Base := { + + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_subscribe_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := mw_From (p_eutAUri), + toField := mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + event := m_Event_reg, + expires := ?, // checked outside the template + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_eutAUri)), + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }) + } + } + + template SUBSCRIBE_Request mdw_TP_IMS_5405_01_ic + modifies mw_SUBSCRIBE_Request_Base := { + + requestLine := { + method := SUBSCRIBE_E, + requestUri := ?, + sipVersion := c_sipNameVersion + }, + msgHeader := { + via := mw_Via (?), // TODO + recordRoute := mw_recordroute(?), // @TODO + route := mw_route(?), // TODO + pChargingVector := omit + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5046_01 + */ + template INVITE_Request mdw_TP_IMS_5046_01_ic (template SipUrl p_pcscfEutAUri, template SipUrl p_userEutBUrl) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := ? // complement (mw_routeBody(p_pcscfEutAUri)) // to be checked outside template + }, + via := { + fieldName := VIA_E, + viaBody := ? // superset(mw_ViaBody_interface(p_pcscfEutAUri.hostPort)) // to be checked outside template + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_pcscfEutAUri), *} + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutBUrl)), + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }) + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5048_01 + */ + template INVITE_Request mdw_TP_IMS_5048_01_ic (template SipUrl p_pcscfEutAUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_pcscfEutAUri)), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := ? // superset(mw_ViaBody_interface(p_pcscfEutAUri.hostPort)) // to be checked outside template + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5052_01 on MW + */ + template BYE_Request mdw_TP_IMS_5052_01_p_ic(template CallId p_callId, template RecordRoute p_route) + modifies mw_BYE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }), + route := { + fieldName := ROUTE_E, + routeBody := ? + }, + recordRoute := p_route + } + } + + template BYE_Request mdw_TP_IMS_5052_01_f_ic( + template CallId p_callId, + template SipUrl p_pcscfEutAUri) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + mw_routeBody(p_pcscfEutAUri), + * + } + } + } + } + + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5055_01 on MW + */ + template Response mdw_TP_IMS_5055_01_ic(template SipUrl p_pcscfEutAUri, template SipUrl p_userEutAUri) + modifies mw_180Ringing_Base := { + msgHeader := { + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_pcscfEutAUri), *} + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutAUri))//TODO containing public identitiy sent in P-Called_Party-ID header in the initial request + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5055_02 on MW + */ + template Response mdw_TP_IMS_5055_02_ic(template SipUrl p_pcscfEutAUri, template SipUrl p_userEutAUri) + modifies mw_200OK_Base := { + msgHeader := { + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_pcscfEutAUri), *} + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutAUri))//TODO containing public identitiy sent in P-Called_Party-ID header in the initial request + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5067_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5067_01_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc CANCEL Request checking TP_IMS_572_02 on gm + */ + template CANCEL_Request mdw_TP_IMS_5072_02_gm (template CallId p_callId) + modifies mw_CANCEL_Request_Base := { + msgHeader := { + reason := { + fieldName := REASON_E, + reasonValues := { + { + token := "503 Service Unavailable", + reasonParams := * + }, + * + } + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5073_01 on MW + */ + template BYE_Request mdw_TP_IMS_5073_01_ic(template CallId p_callId) + modifies mw_BYE_Request_Base := { + msgHeader := { + reason := { + fieldName := REASON_E, + reasonValues := {{ + token := "503", + reasonParams := * + }} + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5080_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5080_01_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, //note access-network-charging-info should be updated + * + }) + } + } + + /** + * + * @desc UPDATE Request checking TP_IMS_5080_02 on MW + */ + template UPDATE_Request mdw_TP_IMS_5080_02_ic(template CallId p_callId) + modifies mw_UPDATE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, //note access-network-charging-info should be updated + * + }) + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5082_01 on MW + */ + template Response mdw_TP_IMS_5082_01_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc SUBSCRIBE checking TP_IMS_5096_01. + */ + template SUBSCRIBE_Request mdw_TP_IMS_5096_01_ic_when modifies mw_SUBSCRIBE_Request_Base := { + msgHeader := { + event := m_Event_reg + } + } + + /** + * @desc INVITE Request checking TP_IMS_5097_01 + */ + template INVITE_Request mdw_TP_IMS_5097_01_ic (template SipUrl p_SCSCF_SIP_URI) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + }/*, omit*/), // FSCOM FIXME error: `omit' value is not allowed in this context + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_SCSCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, + {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, + complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + } + } + + + /** + * @desc INVITE Request checking TP_IMS_5097_02 + */ + template INVITE_Request mdw_TP_IMS_5097_02_ic ( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_INVITE_Request_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + ({ nameAddr := mw_NameAddr(p_SIP_URI)}, {addrSpecUnion := mw_SIP_URI_Base}), + *, + ({nameAddr := mw_NameAddr(p_TEL_URI)}, {addrSpecUnion := mw_TEL_URI_Base}), + * + } + } + } + } + + /** + * @desc INVITE Request checking TP_IMS_5097_04 + */ + template INVITE_Request mdw_TP_IMS_5097_04_gm(template SipUrl p_requestUri) + modifies mw_INVITE_Request_Base := { + requestLine := { + requestUri := p_requestUri + } + } + + /** + * @desc INVITE Request checking TP_IMS_5097_04 + */ + template INVITE_Request mdw_TP_IMS_5097_04_ic(in template (present) SipUrl p_requestUri) + modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_requestUri, + sipVersion := c_sipNameVersion + }, + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5107_01 on MW + */ + template BYE_Request mdw_TP_IMS_5107_01_ic(template CallId p_callId, in template (present) SipUrl p_SCSCF_SIP_URI) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := * +// route := { +// fieldName := ROUTE_E, +// routeBody := { +// ?, +// complement(mw_routeBody(p_SCSCF_SIP_URI)), +// * +// } +// } + } + } + + /** + * + * @desc ACK Request checking TP_IMS_5107_02 on MW + */ + template ACK_Request mdw_TP_IMS_5107_02_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_ACK_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + } + } + + /** + * + * @desc CANCEL Request checking TP_IMS_5107_03 on MW + */ + template CANCEL_Request mdw_TP_IMS_5107_03_ic (template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_CANCEL_Request_Base := { + msgHeader := { + route := ( + *,/*omit*/ // FSCOM FIXME error: `omit' value is not allowed in this context + { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + ) + } + } + + /** + * + * @desc REFER Request checking TP_IMS_5107_04 on MW + */ + template REFER_Request mdw_TP_IMS_5107_04_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_REFER_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5108_01_ic( + template SipUrl p_SCSCF_Uri, + template GenericParam p_param + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := (*/*omit*/, // FSCOM FIXME error: `omit' value is not allowed in this context + { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_Uri)), + * + } + } + ), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {{ + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }, *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + p_param, + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_01_f on MW + * ifpresent ioi params than fail + */ + template INVITE_Request mdw_TP_IMS_5108_01_f_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_03 on ISC + */ + template INVITE_Request mdw_TP_IMS_5108_03_isc( + template SipUrl p_ASB_Uri, + template SipUrl p_SCSCF_Uri + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := p_ASB_Uri + }, + rrParam := * + }, + { + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }, + * + + } + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_03_f on ISC + * ifpresent ioi params than fail + */ + template INVITE_Request mdw_TP_IMS_5108_03_f_isc + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := *}, + * + } + } + } + } + + /** + * + * @desc SUBSCRIBE Request checking TP_IMS_5108_07 on ISC + */ + template SUBSCRIBE_Request mdw_TP_IMS_5108_07_isc( + template SipUrl p_ASB_Uri, + template SipUrl p_SCSCF_Uri + ) modifies mw_SUBSCRIBE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := p_ASB_Uri + }, + rrParam := * + }, + { + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }, + * + + } + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + * + } + } + } + } + + /** + * + * @desc SUBSCRIBE Request checking TP_IMS_5108_07_f on ISC + * ifpresent ioi params than fail + */ + template SUBSCRIBE_Request mdw_TP_IMS_5108_07_f_isc + modifies mw_SUBSCRIBE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := *}, + * + } + } + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5115_01 on MW + */ + template Response mdw_TP_IMS_5115_01_ic + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5115_02 on MW + */ + template Response mdw_TP_IMS_5115_02_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5115_03 on MW + */ + template Response mdw_TP_IMS_5115_03_ic( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_180Ringing_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, + *, + {nameAddr := mw_NameAddr(p_TEL_URI)}, + * + } + } + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5115_04 on MW + */ + template Response mdw_TP_IMS_5115_04_ic( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_200OK_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, + *, + {nameAddr := mw_NameAddr(p_TEL_URI)}, + * + } + } + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5115_08 on MW + */ + template Response mdw_TP_IMS_5115_08_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5131_01 on MW + */ + template Response mdw_TP_IMS_5131_01_ic + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5131_02 on MW + */ + template Response mdw_TP_IMS_5131_02_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5135_01 + */ + template INVITE_Request mdw_TP_IMS_5135_01_ic (template SipUrl p_ibcfEutAUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_ibcfEutAUri), *} + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5137_01 + */ + template INVITE_Request mdw_TP_IMS_5137_01_ic (template SipUrl p_ibcfEutAUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_ibcfEutAUri), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5137_02 on MW + */ + template Response mdw_TP_IMS_5137_02_ic + modifies mw_180Ringing_Base := { + msgHeader := { + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5137_03 on MW + */ + template Response mdw_TP_IMS_5137_03_ic + modifies mw_200OK_Base := { + msgHeader := { + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5139_01 on MW + */ + template BYE_Request mdw_TP_IMS_5139_01_ic( + template CallId p_callId, + template SipUrl p_UE_URI, + template To p_to, + template From p_from, + template CSeq p_cSeq, + template Route p_route + ) modifies mw_BYE_Request_Base := { + requestLine := { + requestUri := p_UE_URI + }, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + reason := ?, + route := p_route, + toField := p_to + } + } + + + /** + * + * @desc BYE Request checking TP_IMS_5301_01 on MW + */ + template BYE_Request mdw_TP_IMS_5301_01_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_SCSCF_SIP_URI), *} + } + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5308_01 on GM + */ + template Response mdw_TP_IMS_5308_01_gm + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5308_01 on ISC + */ + template Response mdw_TP_IMS_5308_01_isc + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingFunctionAddresses :=? + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5308_02 on GM + */ + template Response mdw_TP_IMS_5308_02_gm + modifies mw_200OK_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5308_02 on ISC + */ + template Response mdw_TP_IMS_5308_02_isc + modifies mw_200OK_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5310_01 on GM + */ + template INVITE_Request mdw_TP_IMS_5310_01_gm + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5310_01 on AS + */ + template INVITE_Request mdw_TP_IMS_5310_01_isc + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5312_01 on MW + */ + template Response mdw_TP_IMS_5312_01_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + /** + * + * @desc 200 OK Response checking TP_IMS_5312_01 on AS + */ + template Response mdw_TP_IMS_5312_01_isc + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 433 Anonymity Disallowe Response checking TP_IMS_5313_01 on MW + */ + template Response mdw_TP_IMS_5313_01_ic + modifies mw_433Anony_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 433 Anonymity Disallowe Response checking TP_IMS_5313_01 on AS + */ + template Response mdw_TP_IMS_5313_01_isc + modifies mw_433Anony_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5404_01 on GM + */ + template INVITE_Request mdw_TP_IMS_5404_01_gm + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5404_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5404_01_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * + * @desc ACK Request checking TP_IMS_5408_01 on MW + */ + template ACK_Request mdw_TP_IMS_5408_01_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) + modifies mw_ACK_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_IBCF_SIP_URI), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5408_02 on MW + */ + template CANCEL_Request mdw_TP_IMS_5408_02_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) + modifies mw_CANCEL_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_IBCF_SIP_URI), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5408_03 on MW + */ + template BYE_Request mdw_TP_IMS_5408_03_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_IBCF_SIP_URI), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5408_04 + */ + template INVITE_Request mdw_TP_IMS_5408_04_ic (template SipUrl p_ibcfEutAUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_ibcfEutAUri), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5097_09 + */ + template INVITE_Request mdw_TP_IMS_5097_09_isc (template SipUrl p_EutB_ASUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := {mw_routeBody(p_EutB_ASUri), *} + }, + pChargingFunctionAddresses := ?, + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := *}, // NOTE indicating also operator identifier for IMSA + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * @desc INVITE Request checking TP_IMS_5097_09 false + */ + template INVITE_Request mdw_TP_IMS_5097_09_f_isc + modifies mw_INVITE_Request_Base := { + + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := *}, + * + } + } + } + } + + /** + * + * @desc PUBLISH Request checking TP_IMS_5097_13 + */ + template PUBLISH_Request mdw_TP_IMS_5097_13_isc (template CallId p_callId, template SipUrl p_EutB_ASUri) + modifies mw_PUBLISH_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := {mw_routeBody(p_EutB_ASUri), *} + }, + pChargingFunctionAddresses := ?, + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := *}, // NOTE indicating also operator identifier for IMSA + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * @desc PUBLISH Request checking TP_IMS_5097_13 false + */ + template PUBLISH_Request mdw_TP_IMS_5097_13_f_isc(template CallId p_callId) + modifies mw_PUBLISH_Request_Base := { + + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := *}, + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5097_05_p_ic( + template CallId p_callId + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "icid-value", paramValue := ?}, + {id := "orig-ioi", paramValue := ?}, + * + } + }, + pAccessNetworkInfo := omit + } + } + + template MESSAGE_Request mdw_TP_IMS_5097_05_f2_ic( + template CallId p_callId, + template SipUrl p_SCSCF_SIP_URI + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_SIP_URI), + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5097_05_f_ic( + template CallId p_callId + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := ?}, + {id := "access-network-charging-info", paramValue := ?}, + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5097_08_gm( + template SipUrl p_requestUri + ) modifies mw_MESSAGE_Request_Base := { + requestLine := { requestUri := p_requestUri } + } + + template MESSAGE_Request mdw_TP_IMS_5097_08_ic( + template SipUrl p_requestUri + ) modifies mw_MESSAGE_Request_Base := { + requestLine := { requestUri := p_requestUri + }, + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5097_07_ic( + template CallId p_callId, + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + ({nameAddr := mw_NameAddr(p_SIP_URI)}, {addrSpecUnion := mw_SIP_URI_Base}), + ({nameAddr := mw_NameAddr(p_TEL_URI)}, {addrSpecUnion := mw_TEL_URI_Base}), + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5108_02a_ic( + template CallId p_callId + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "icid-value", paramValue := ?}, + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5108_02b_p_ic( + template CallId p_callId, + template SipUrl p_SCSCF_Uri, + template GenericParam p_param + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + route := omit, // TODO TP is not clear please double check + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {{ + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + p_param, + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5108_02b_f_ic( + template CallId p_callId + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + } + } + } + } + + + /** + * @desc INVITE Request checking TP_IMS_5120_01 + */ + template INVITE_Request mdw_TP_IMS_5120_01_ic( + template SipUrl p_SCSCF_URI + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + complement(mw_routeBody(p_SCSCF_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + } + } + } + + /** + * @desc UPDATE Request checking TP_IMS_5120_02 + */ + template UPDATE_Request mdw_TP_IMS_5120_02_ic( + template CallId p_callId, + template SipUrl p_SCSCF_URI + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + complement(mw_routeBody(p_SCSCF_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + } + } + } + + template Response mw_TP_IMS_5121_02_ic modifies mdw_2XX_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + } + } + + template Response mw_TP_IMS_5117_02_ic modifies mdw_2XX_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + } + } + + template Response mw_TP_IMS_5117_06_ic modifies mdw_2XX_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + {nameAddr := mw_NameAddr(mw_SIP_URI_Base)}, + {nameAddr := mw_NameAddr(mw_TEL_URI_Base)}, + * + } + } + } + } + + template Response mw_TP_IMS_5118_01_ic modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5050_01_ic( + template CallId p_callId, + template SipUrl p_PCSCF_URI, + template SipUrl p_UE_A_URI + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := complement(p_PCSCF_URI) + }, + rrParam := * + },* + } + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_UE_A_URI)), + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "icid-value", paramValue := ?}, + * + } + } + } + } + + template Response mdw_2XX_Base modifies m_Response_Dummy := { + statusLine := {c_sipNameVersion, (200..299), ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_100Trying_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine100, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_180Ringing_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine180, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_183SessionProgress_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine183, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_200OK_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine200, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_202Accepted_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine202, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mdw_3XX_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, (300..399), ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_401Unauthorized_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, 401, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mdw_4XX_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, (400..499), ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_403Forbidden_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, 403, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_404NotFound_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, 404, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_420BadExtension_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, 420, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_480TemporaryUnavailable_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine480, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_486Busy_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine486, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_600BusyEverywhere_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine600, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_487RequestTerminated_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine487, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mdw_404Or604NotFound_Base modifies m_Response_Dummy := + { + statusLine := ({c_sipNameVersion, 404, ?}, {c_sipNameVersion, 604, ?}), + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mdw_408Or5XX_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, (408,(500..599)), ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_433Anony_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine433, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_603Decline_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine603, + msgHeader := ?, + messageBody := *, + payload := * + } + + template REGISTER_Request mdw_TP_IMS_5088_01_gm modifies mw_REGISTER_Request_Base := { + msgHeader := {authorization := mw_Authorization(mw_credentialIntegrityYes)} + } + + template NOTIFY_Request mdw_TP_IMS_5088_01_ic(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + template NOTIFY_Request mdw_TP_IMS_5093_01_UE_ic(template CallId p_callId, template SipUrl p_UE_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_UE_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }), + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + template NOTIFY_Request mdw_TP_IMS_5093_01_IMS_ic(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }), + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + template NOTIFY_Request mdw_TP_IMS_5094_01_UE(template CallId p_callId, template SipUrl p_UE_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_UE_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }), + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + template NOTIFY_Request mdw_TP_IMS_5094_01_IMS_ic(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }), + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + + /** + * @desc INVITE Request checking TP_IMS_5106_01 + */ + template INVITE_Request mdw_TP_IMS_5106_01_ic( + template SipUrl p_SCSCF_URI + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + complement(mw_routeBody(p_SCSCF_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + }, + pAccessNetworkInfo := omit, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }) + } + } + + /** + * @desc BYE Request checking TP_IMS_5074_01 + */ + template BYE_Request mdw_TP_IMS_5074_01_ic( + template CallId p_callId, + template SipUrl p_UE_URI // must be the IP address + ) modifies mw_BYE_Request_Base := { + requestLine := { + requestUri := p_UE_URI + }, + msgHeader := { + toField := ?, + fromField := ?, + cSeq := ?, + route := ?, + reason := { + fieldName := REASON_E, + reasonValues := { + { + token := "503 Service Unavailable", + reasonParams := * + }, + * + } + } + } + } + + + /** + * @desc UPDATE Request checking TP_IMS_5106_02 + */ + template UPDATE_Request mdw_TP_IMS_5106_02_p_ic( + template CallId p_callId, + template SipUrl p_SCSCF_URI + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := ? + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + *, + mw_routeBody(p_SCSCF_URI), + * + } + }, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }) + } + } + + + template UPDATE_Request mdw_TP_IMS_5106_02_f_ic( + template CallId p_callId, + template SipUrl p_SCSCF_URI + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + } + } + } + + + /** + * @desc OPTIONS Request checking TP_IMS_CONTENT_SHARE_01 + */ + template OPTIONS_Request mdw_TP_IMS_CONTENT_SHARE_01_ic( + template CallId p_callId + ) modifies mw_OPTIONS_Request_Base := { + msgHeader := { + acceptContact := mw_AcceptContact_share, + contact := mw_Contact_share + } + } + + + /** + * @desc INVITE Request checking TP_IMS_CONTENT_SHARE_02 + */ + template INVITE_Request mdw_TP_IMS_CONTENT_SHARE_02_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + acceptContact := mw_AcceptContact_share, + contact := mw_Contact_share + } + } + + template NameAddr mw_NameAddr_DispName_Tel( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + displayName := p_displayName, + addrSpec := { + scheme := c_telScheme, //* contains "tel" + components := { + tel := { + subscriber := p_number + } + }, + urlParameters := *, + headers := * + } + } // End of template mw_NameAddr_DispName_Tel + + template(present) From mw_From_AddrUnion_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := FROM_E, + addressField := mw_AddrUnion_SipUrl(p_user, p_host), + fromParams := * + } // End of template mw_From_AddrUnion_SipUrl + + template(present) From mw_From_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + fieldName := FROM_E, + addressField := mw_AddrUnion_TelUrl(p_number), + fromParams := * + } // End of template mw_From_AddrUnion_TelUrl + + template From mw_From_NameAddr_TelUrl( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + fieldName := FROM_E, + addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + fromParams := * + } // End of template mw_From_NameAddr_TelUrl + + template(present) To mw_To_AddrUnion_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := TO_E, + addressField := mw_AddrUnion_SipUrl(p_user, p_host), + toParams := * + } // End of template mw_To_AddrUnion_SipUrl + + template(present) To mw_To_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + fieldName := TO_E, + addressField := mw_AddrUnion_TelUrl(p_number), + toParams := * + } // End of template mw_To_AddrUnion_TelUrl + + template To mw_To_NameAddr_TelUrl( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + fieldName := TO_E, + addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + toParams := * + } // End of template mw_To_NameAddr_TelUrl + + template (present) Contact mw_contact( + template (present) ContactAddress p_contactAddresses := ? + ) := { + fieldName := CONTACT_E, + contactBody := { contactAddresses := { p_contactAddresses } } + } // End of template mw_Contact + + template (present) Response mw_200OK( + template (present) CSeq p_cSeq := ?, + template (present) CallId p_callId := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_200OK_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_200OK + + template (present) Response mw_ECO_200OK( + template (present) CSeq p_cSeq := ?, + template (present) CallId p_callId := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_200OK := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + pChargingVector := omit, + pChargingFunctionAddresses := omit, + pPreferredID := omit + } + } // End of template mw_200OK + + template Response mw_380AlternateService( + template (present) CSeq p_cSeq := ?, + template (present) CallId p_callId := ?, + template WwwAuthenticate p_wwwAuthenticate := * + ) modifies mdw_3XX_Base := { + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_380AlternateService + + template Response mw_401Unauthorized( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_401Unauthorized_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_401Unauthorized + + template Response mw_403Forbidden( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_403Forbidden_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_403Forbidden + + template Response mw_404NotFound( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_404NotFound_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_404NotFound + + template Response mw_420BadExtension( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_420BadExtension_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + }, + messageBody := p_messageBody + } // End of template mw_420BadExtension + + template Response mw_480TemporaryUnavailable( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template WwwAuthenticate p_wwwAuthenticate := * + ) modifies mw_480TemporaryUnavailable_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_480TemporaryUnavailable + + template (present) Response mw_486Busy( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_486Busy_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_486Busy + + template (present) Response mw_600BusyEverywhere( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_600BusyEverywhere_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_600BusyEverywhere + + template (present) Response mw_487RequestTerminated( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_487RequestTerminated_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_487RequestTerminated + + } // End of group modifiedSIPBaseTemplates + + group EmergencySIPTemplates { + + } // End of group EmergencySIPTemplates + + group HeaderTemplates { + + template Path mw_PathDef (charstring p_Host) := { + fieldName := PATH_E, + pathValues := {{ + nameAddr:= { + displayName := *, + addrSpec := { + scheme := "sip", + components := {sip := { + userInfo := *, + hostPort := {host := p_Host,portField := *} + }}, + urlParameters := *, + headers := omit} + }, + rrParam := omit + }} + } // template + + template Require mw_Require (template OptionTag_List p_optionsList) := { + fieldName := REQUIRE_E, + optionsTags := p_optionsList + } // template + + template PChargingVector mw_PChargingVector (template SemicolonParam_List p_List) := { + fieldName := P_CHARGING_VECTOR_E, + icidValue := ?, + chargeParams := p_List + } // template + + template ServiceRoute mw_ServiceRoute (template SipUrl p_eutAddr) := { + fieldName := SERVICE_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := p_eutAddr + }, + rrParam := * + }, + * + } + } // template + + + + template PVisitedNetworkID mw_PVisitedNetworkIDAny := { + fieldName := P_VISITED_NETWORK_E, + vNetWorkSpec := ? + } // template + + template PAssociatedURI + mw_PAssociatedURI(template SemicolonParam_List p_SemicolonParam_List) := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := { + {nameAddr := ?, genericParams := p_SemicolonParam_List}, * + } + } + template WwwAuthenticate mw_WwwAuthenticate_AKA := { + fieldName := WWW_AUTHENTICATE_E, + challenge := { + digestCln := { //{id := "username", paramValue := ?}, + {id := "realm", paramValue := ?}, // TODO containing operator ID + {id := "nonce", paramValue := ?}, + {id := "rand", paramValue := ?}, + {id := "autn", paramValue := ?}, + {id := "ik", paramValue := ?}, + {id := "ck", paramValue := ?}, + {id := "algorithm", paramValue := { quotedString := "AKAv1-MD5" }}, + *} + + } + } // template + + template WwwAuthenticate mw_WwwAuthenticate_MD5 := { + fieldName := WWW_AUTHENTICATE_E, + challenge := { + digestCln := { //{id := "username", paramValue := ?}, + {id := "realm", paramValue := ?}, // TODO containing operator ID + {id := "nonce", paramValue := ?}, + {id := "qop", paramValue := ?}, + {id := "algorithm", paramValue := { quotedString := "MD5" }}, + *} + + } + } + + template WwwAuthenticate mw_WwwAuthenticate := { + fieldName := WWW_AUTHENTICATE_E, + challenge := { + digestCln := { //{id := "username", paramValue := ?}, + {id := "realm", paramValue := ?}, // TODO containing operator ID + {id := "nonce", paramValue := ?}, + {id := "qop", paramValue := ?}, + *} + + } + } // template + + template AcceptContact mw_AcceptContact_share := { + fieldName := ACCEPT_CONTACT_E, + acValues := { + { + wildcard := "*", + acRcParams := { + { + id := "Video Sharing Feature Tag", + paramValue := {quotedString:="+g.3gpp.cs-voice"} + } + } + } + } + } + + template Contact mw_Contact_share := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := { + { + addressField := ?, + contactParams := { + { + id := "Video Sharing Feature Tag", + paramValue := {quotedString:="+g.3gpp.cs-voice"} + } + } + } + } + } + } + + template (present) Accept mw_accept( + template (present) AcceptBody_List p_acceptArgs := ? + ) := { + fieldName := ACCEPT_E, + acceptArgs := p_acceptArgs + } + + template (present) RecvInfo mw_recvInfo( + template InfoPackage_List p_infoPackageList := ? + ) := { + fieldName := RECV_INFO_E, + infoPackageList := p_infoPackageList + } + + template(present) PPreferredID mw_PPreferredID( + template(present) PPreferredIDValue_List p_pPreferredIDValue_List := ? + ) := { + fieldName := P_PREFERRED_ID_E, + pPreferredIDValueList := p_pPreferredIDValue_List + } + + } // end group HeaderTemplates + + group AuxiliaryInformationElementTemplates { + + template Credentials mw_credentialIntegrityYes := { + otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="yes"}},*} // TODO + }} + + template Credentials mw_credentialIntegrityNo := { + otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="no"}},*} // TODO + }} + + template Credentials mw_credentialIntegrityIpAssocPending := { + otherResponse := { + authScheme := ?, + authParams := { + complement ({"integrity-protected", {quotedString:="no"}},{"integrity-protected", {quotedString:="yes"}},{"integrity-protected", {quotedString:="ip-assoc-yes"}}), * //alowed parameters are {"integrity-protected" id with "ip-assoc-pending" value or no "integrity-protected" id} + } + } + } + + template Credentials mw_credentialIntegrityIpAssocYes := { + otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="ip-assoc-yes"}},*} // TODO + }} + + template RouteBody mw_routeBodyTH (template SipUrl p_sipurl):= { + nameAddr := + { + displayName := *, + addrSpec := p_sipurl + }, + rrParam := {{ + id:="tokenized-by", + paramValue := * + }} + } + + template NameAddr mw_NameAddr(template SipUrl p_URI) := { + displayName := *, + addrSpec := p_URI + } + + template SipUrl mw_SIP_URI_Base := { + scheme := "sip", // meaning "not tel" + components := { sip := { + userInfo := ?, + hostPort := ? + } + }, + urlParameters := *, + headers := * + } + + template SipUrl mw_TEL_URI_Base := { + scheme := "tel", + components := { tel := { + subscriber := ? + } + }, + urlParameters := *, + headers := * + } + + template SipUrl mw_SIP_URI_ConfFactory + modifies mw_SIP_URI_Base := { + components := { sip := { + userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_CONF_FACTORY_NAME, password:=*}, + hostPort := {host := PX_IMS_SUT_CONF_HOME_DOMAIN, portField := *} + } } + } + + template (present) AcceptBody mw_acceptBody( + template (present) charstring p_mediaRange := ?, + template SemicolonParam_List p_acceptParam := * + ) :={ + mediaRange := p_mediaRange, + acceptParam := p_acceptParam + } + + template (present) InfoPackage_Type mw_infoPackage_Type( + template (present) charstring p_infoPackageName := ?, + template SemicolonParam_List p_infoPackageParams := * + ) := { + infoPackageName := p_infoPackageName, + infoPackageParams := p_infoPackageParams + } + + } // End of group AuxiliaryInformationElementTemplates + + group messageBody_XML { + + template(present) TIMS3GPP mw_Ims_Eco_3gpp_CW modifies mw_Ims_3gpp_CW := { + choice := { + alternative_service := { + type_ := { + attr := { "emergency" }, + elem_list := ? + } + } + } + } + + } // End of group messageBody_XML + + group adapterTemplates { + + template GeneralConfigurationReq m_generalConfigurationReq_offline := { + captureProcessIpAddress := "127.0.0.1", + captureProcessPort := 5501, + captureMode := { + offlineCapture := { + offset := PX_IOT_TIMESTAMP_OFFSET, + captureSource := { + sessionsPath := PX_IOT_PCAP_SESSIONS_PATH, + mergeFileList := { + mergeFileList := { }, + mergeFilePath := "", + mergeToolPath := "" + } + } + } + }, + eutInfoList := omit + } + template GeneralConfigurationReq m_generalConfigurationReq_online := { + captureProcessIpAddress := "127.0.0.1", + captureProcessPort := 5501, + captureMode := { + liveCpature := { + physicalInterfaces := { + PX_IOT_IFACES + }, + recordMode := PX_IOT_RECORD_MODE + } + }, + eutInfoList := PX_IOT_EUTs_IFACE_INFO_LIST + } + template GeneralConfigurationReq m_generalConfigurationReq_merge := { + captureProcessIpAddress := "127.0.0.1", + captureProcessPort := 5501, + captureMode := { + offlineCapture := { + offset := PX_IOT_TIMESTAMP_OFFSET, + captureSource := { + sessionsPath := "", + mergeFileList := { + mergeFileList := PX_IOT_FILE_MERGE_LIST, + mergeFilePath := PX_IOT_FILE_MERGE_PATH, + mergeToolPath := PX_IOT_MERGE_TOOL_PATH + } + } + } + }, + eutInfoList := omit + } + template GeneralConfigurationRsp m_generalConfigurationRsp_success := { + status := { + code := e_success, + reason := * + } + } + template GeneralConfigurationRsp m_generalConfigurationRsp_timeout := { + status := { + code := e_timeout, + reason := * + } + } + template GeneralConfigurationRsp m_generalConfigurationRsp_error := { + status := { + code := e_error, + reason := * + } + } + template GeneralConfigurationRsp m_generalConfigurationRsp_any := { + status := { + code := ?, + reason := * + } + } + template StartTrafficCaptureReq m_startTrafficCaptureReq := { + } + template StartTrafficCaptureRsp m_startTrafficCaptureRsp_any := { + status := { + code := ?, + reason := * + } + } + template StopTrafficCaptureReq m_stopTrafficCaptureReq :={ + } + template StopTrafficCaptureRsp m_stopTrafficCaptureRsp_any := { + status := { + code := ?, + reason := * + } + } + + template SetFilterReq m_setFilterReq (ProtocolFilter p_proto, IpAddress p_addr1, + IpAddress p_addr2, UInt16 p_port) :={ + protocol := p_proto, + interfaceInfos := { + { + IpInterfaceInfo := { + { + domainName := omit, + IpAddress := p_addr1, + portNumbers := { p_port } + }, + { + domainName := omit, + IpAddress := p_addr2, + portNumbers := { p_port } + } + } + } + } + } + + template SetFilterRsp m_setFilterRspAny := { + status := { + code := ?, + reason := * + } + } + } // End of group adapterTemplates + +}//end module + diff --git a/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_GM.ttcn b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_GM.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..e520a203b07b8448716ad459f271fb522975d9f6 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_GM.ttcn @@ -0,0 +1,857 @@ +/** + * @author STF 574, TTF 010 + * @version $Id$ + * @desc This module provides TP related templates used at MW interface + */ +module AtsImsIot_Templates_GM { + + // LibCommon + //import from LibCommon_BasicTypesAndValues all; + //import from LibCommon_VerdictControl all; + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + //import from LibMsrp_TypesAndValues all; + + // LibIot + //import from LibIot_TypesAndValues all; + import from LibIot_PIXITS all; + + // AtsImsIot + //import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + group sip_templates { + + template NameAddr mw_NameAddr_DispName_Tel( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + displayName := p_displayName, + addrSpec := { + scheme := c_telScheme, //* contains "tel" + components := { + tel := { + subscriber := p_number + } + }, + urlParameters := *, + headers := * + } + } // End of template mw_NameAddr_DispName_Tel + + // template(present) From mw_From_AddrUnion_SipUrl( + // template DisplayName p_dn, + // template(present) charstring p_user := ?, + // template charstring p_host + // ) := { + // fieldName := FROM_E, + // addressField := mw_AddrUnion_SipUrl(p_user, p_host), + // fromParams := * + // } // End of template mw_From_AddrUnion_SipUrl + + // template(present) From mw_From_AddrUnion_TelUrl( + // template(present) charstring p_number := ? + // ) := { + // fieldName := FROM_E, + // addressField := mw_AddrUnion_TelUrl(p_number), + // fromParams := * + // } // End of template mw_From_AddrUnion_TelUrl + + // template From mw_From_NameAddr_TelUrl( + // template DisplayName p_displayName := *, + // template(present) charstring p_number := ? + // ) := { + // fieldName := FROM_E, + // addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + // fromParams := * + // } // End of template mw_From_NameAddr_TelUrl + + // template(present) To mw_To_AddrUnion_SipUrl( + // template DisplayName p_dn, + // template(present) charstring p_user := ?, + // template charstring p_host + // ) := { + // fieldName := TO_E, + // addressField := mw_AddrUnion_SipUrl(p_user, p_host), + // toParams := * + // } // End of template mw_To_AddrUnion_SipUrl + + // template(present) To mw_To_AddrUnion_TelUrl( + // template(present) charstring p_number := ? + // ) := { + // fieldName := TO_E, + // addressField := mw_AddrUnion_TelUrl(p_number), + // toParams := * + // } // End of template mw_To_AddrUnion_TelUrl + + // template To mw_To_NameAddr_TelUrl( + // template DisplayName p_displayName := *, + // template(present) charstring p_number := ? + // ) := { + // fieldName := TO_E, + // addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + // toParams := * + // } // End of template mw_To_NameAddr_TelUrl + + // template (present) Contact mw_contact( + // template (present) ContactAddress p_contactAddresses := ? + // ) := { + // fieldName := CONTACT_E, + // contactBody := { contactAddresses := { p_contactAddresses } } + // } // End of template mw_Contact + + // template (present) Response mw_200OK( + // template (present) CSeq p_cSeq := ?, + // template (present) CallId p_callId := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ? + // ) modifies mw_200OK_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to + // } + // } // End of template mw_200OK + + // template (present) Response mw_401Unauthorized( + // template (present) CSeq p_cSeq := ?, + // template (present) WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_401Unauthorized_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_401Unauthorized + + // template (present) Response mw_404NotFound( + // template (present) CSeq p_cSeq := ?, + // template (present) WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_404NotFound_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_404NotFound + + // template Response mw_480TemporaryUnavailable( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template WwwAuthenticate p_wwwAuthenticate := * + // ) modifies mw_480TemporaryUnavailable_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_480TemporaryUnavailable + + // template (present) Response mw_486Busy( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ?, + // template WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_486Busy_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_486Busy + + // template (present) Response mw_600BusyEverywhere( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ?, + // template WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_600BusyEverywhere_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_600BusyEverywhere + + } // End of group sip_templates + + group g_gmA { + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := ?, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID + //require := mw_require_path + } + } // End of template mw_TP_GM_PCSCF_REGISTER_01 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + msgHeader := { + contact := p_contact, + path := p_path, + warning := p_warning + } + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_01 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_REGISTER_02 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_REGISTER_02 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_REGISTER_03 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_03 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_04 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_05 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_07( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) charstring p_expires := "0" + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + msgHeader := { + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_GM_PCSCF_REGISTER_07 + + template (present) SUBSCRIBE_Request mw_TP_GM_PCSCF_SUBSCRIBE_01( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_subscribe_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg, + expires := ?, // checked outside the template + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_GM_PCSCF_SUBSCRIBE_01 + + template (present) SUBSCRIBE_Request mw_TP_GM_PCSCF_SUBSCRIBE_02( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_SUBSCRIBE_01 := { + } // End of template mw_TP_GM_PCSCF_SUBSCRIBE_02 + + template (present) NOTIFY_Request mw_TP_GM_PCSCF_NOTIFY_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_NOTIFY_Request_Base := { + requestLine := { + method := NOTIFY_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + } + } // End of template mw_TP_GM_PCSCF_NOTIFY_01 + + template (present) PRACK_Request mw_TP_GM_PCSCF_PRACK_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_PRACK_Request_Base := { + requestLine := { + method := PRACK_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + // TODO Check if it is required for PRACK event := m_Event_reg, + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_GM_PCSCF_PRACK_01 + + template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_invite_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_GM_PCSCF_INVITE_01 + + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + msgHeader := { + contact := p_contact + }, + messageBody := p_messageBody + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_01 + + template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_INVITE_02 + + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_02 + + template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_INVITE_03 + + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_03 + + template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_INVITE_04 + + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { + msgHeader := { + accept := p_accept, + recvInfo := p_recvInfo, + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_04 + + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_05( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { + msgHeader := { + accept := p_accept, + recvInfo := p_recvInfo, + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_05 + + template (present) INVITE_Request mw_TP_GM_PCSCF_RE_INVITE_01( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_RE_INVITE_01 + + template (present) INVITE_Request mw_TP_GM_PCSCF_RE_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_RE_INVITE_02 + + template (present) INVITE_Request mw_TP_GM_PCSCF_RE_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_RE_INVITE_03 + + template (present) INVITE_Request mw_TP_GM_PCSCF_RE_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_RE_INVITE_014 + + template (present) INVITE_Request mw_TP_GM_PCSCF_NGC_INVITE_01( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_NGC_INVITE_01 + + template (present) INFO_Request mw_TP_GM_PCSCF_NGC_INFO_01( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_INFO_Dummy := { + requestLine := { + requestUri := p_invite_uri // @TODO + }, + msgHeader := { + accept := p_accept, + callId := p_callId, + contact := p_contact, + fromField := p_from, + pPreferredID := p_pPreferredID, + recvInfo := p_recvInfo, + toField := p_to + }, + messageBody := p_messageBody + } + + // End of template mw_TP_GM_PCSCF_NGC_INFO_01 + // End of template mw_TP_GM_PCSCF_NGC_INFO_01 + + template (present) Response mw_TP_GM_PCSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_GM_PCSCF_100Trying_01 + + template (present) Response mw_TP_GM_PCSCF_100Trying_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_100Trying_01 := { + } // End of template mw_TP_GM_PCSCF_100Trying_02 + + template (present) Response mw_TP_GM_PCSCF_100Trying_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_100Trying_01 := { + } // End of template mw_TP_GM_PCSCF_100Trying_03 + + template (present) Response mw_TP_GM_PCSCF_100Trying_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_100Trying_01 := { + } // End of template mw_TP_GM_PCSCF_100Trying_04 + + template (present) Response mw_TP_GM_PCSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_GM_PCSCF_180Ringing_01 + + template (present) Response mw_TP_GM_PCSCF_180Ringing_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_180Ringing_01 := { + } // End of template mw_TP_GM_PCSCF_180Ringing_02 + + template (present) Response mw_TP_GM_PCSCF_180Ringing_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_180Ringing_01 := { + } // End of template mw_TP_GM_PCSCF_180Ringing_03 + + template (present) Response mw_TP_GM_PCSCF_180Ringing_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_180Ringing_01 := { + } // End of template mw_TP_GM_PCSCF_180Ringing_04 + + template (present) Response mw_TP_GM_PCSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_GM_PCSCF_183SessionProgress_01 + + template (present) Response mw_TP_GM_PCSCF_183SessionProgress_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_GM_PCSCF_183SessionProgress_02 + + template (present) Response mw_TP_GM_PCSCF_183SessionProgress_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_GM_PCSCF_183SessionProgress_03 + + template (present) Response mw_TP_GM_PCSCF_183SessionProgress_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_GM_PCSCF_183SessionProgress_04 + + template (present) ACK_Request mw_TP_GM_PCSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_GM_PCSCF_ACK_01 + + template (present) ACK_Request mw_TP_GM_PCSCF_ACK_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_ACK_01 := { + } // End of template mw_TP_GM_PCSCF_ACK_02 + + template (present) ACK_Request mw_TP_GM_PCSCF_ACK_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_ACK_01 := { + } // End of template mw_TP_GM_PCSCF_ACK_03 + + template (present) ACK_Request mw_TP_GM_PCSCF_ACK_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_ACK_01 := { + } // End of template mw_TP_GM_PCSCF_ACK_04 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_GM_PCSCF_BYE_01 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_BYE_01 := { + } // End of template mw_TP_GM_PCSCF_BYE_02 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_BYE_01 := { + } // End of template mw_TP_GM_PCSCF_BYE_03 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_BYE_01 := { + } // End of template mw_TP_GM_PCSCF_BYE_04 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_05( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_BYE_01 := { + } // End of template mw_TP_GM_PCSCF_BYE_05 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_06( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_BYE_01 := { + } // End of template mw_TP_GM_PCSCF_BYE_06 + + template (present) CANCEL_Request mw_TP_GM_PCSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_cancel_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_GM_PCSCF_CANCEL_01 + + template (present) CANCEL_Request mw_TP_GM_PCSCF_CANCEL_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_CANCEL_01 := { + } // End of template mw_TP_GM_PCSCF_CANCEL_02 + + template (present) CANCEL_Request mw_TP_GM_PCSCF_CANCEL_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_CANCEL_01 := { + } // End of template mw_TP_GM_PCSCF_CANCEL_03 + + template (present) CANCEL_Request mw_TP_GM_PCSCF_CANCEL_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_CANCEL_01 := { + } // End of template mw_TP_GM_PCSCF_CANCEL_04 + + } // End of group g_gmA + +} // End of module AtsImsIot_Templates_GM \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_IC.ttcn b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_IC.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..48019954ef8071629515b7ede2a6c5bac2830e73 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_IC.ttcn @@ -0,0 +1,833 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides TP related templates used at IC interface + */ +module AtsImsIot_Templates_IC +{ + + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_VerdictControl all; + import from LibIot_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibMsrp_TypesAndValues all; + import from LibIot_PIXITS all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + group g_IBCF { + + group g_IBCF_GC{ + + /** + * + * @desc Message Request containing a message body greater than 1300 bytes. + * @remark source template mdw_TP_IMS_4002_01 + */ + template MESSAGE_Request mdw_TP_IC_IBCF_GC_01 modifies mw_MESSAGE_Request_Base := { + msgHeader := { + contact := * + }, + messageBody := { + textplain := pattern "?#(1300,)" + } + } + + } // group g_IBCF_GC + + group g_IBCF_INVITE { + + /** + * @desc INVITE Request checking TP_IC_IBCF_INVITE_01 + * @remark source template mdw_TP_IMS_5097_01_ic + */ + template(present) INVITE_Request mdw_TP_IC_IBCF_INVITE_01 (template (present) SipUrl p_SCSCF_SIP_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + }, *), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_SCSCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, +// {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, +// complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } + + + /** + * @desc INVITE Request checking TP_IC_IBCF_INVITE_02 + * @remark source template mdw_TP_IMS_5097_02_ic + */ + template (present) INVITE_Request mdw_TP_IC_IBCF_INVITE_02 ( + template (present) SipUrl p_SIP_URI := ?, + template (present) SipUrl p_TEL_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + (*, + ({ nameAddr := mw_NameAddr(p_SIP_URI)}, {addrSpecUnion := mw_SIP_URI_Base}), + *, + ({nameAddr := mw_NameAddr(p_TEL_URI)}, {addrSpecUnion := mw_TEL_URI_Base}), + *), + (*, + ({ nameAddr := mw_NameAddr(p_TEL_URI)}, {addrSpecUnion := mw_TEL_URI_Base}), + *, + ({nameAddr := mw_NameAddr(p_SIP_URI)}, {addrSpecUnion := mw_SIP_URI_Base}), + *) + } + } + } + } + + + /** + * @desc INVITE Request checking TP_IC_IBCF_INVITE_03 + * @remark source template mdw_TP_IMS_5097_04_ic + */ + template (present) INVITE_Request mdw_TP_IC_IBCF_INVITE_03( + template (present) SipUrl p_SIP_URI := ?, + template (present) SipUrl p_TEL_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + + } + } + + /** + * + * @desc INVITE Request checking TP_IC_IBCF_INVITE_04 + * @remark source template mdw_TP_IMS_5046_01_ic + */ + template INVITE_Request mdw_TP_IC_IBCF_INVITE_04 (template SipUrl p_pcscfEutAUri, template SipUrl p_userEutBUrl) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := ? // complement (mw_routeBody(p_pcscfEutAUri)) // to be checked outside template + }, + via := { + fieldName := VIA_E, + viaBody := ? // superset(mw_ViaBody_interface(p_pcscfEutAUri.hostPort)) // to be checked outside template + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_pcscfEutAUri), *} + }, + pPreferredID := omit, + pAssertedID := ?, //mw_PAssertedID(mw_PAssertedIDValue(p_userEutBUrl)), + pChargingVector := mw_PChargingVector({ + ?,//{id := "icid-value", paramValue := {quotedString :=PX_IMS_A_ICID}}, + * + }) + } + } + + /** + * @desc INVITE Request checking TP_IC_IBCF_INVITE_05 + * @remark source template mdw_TP_IMS_5097_02_ic and mdw_TP_IMS_5044_01_ic + */ + template INVITE_Request mdw_TP_IC_IBCF_INVITE_05 ( + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := ?,//mw_From (p_eutAUri), TODO + toField := ?//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?) TODO + } + } + + } // end group g_IBCF_INVITE + + group g_IBCF_REINVITE { + + /** + * @desc INVITE Request checking TP_IC_IBCF_REINVITE_01 + * @remark source template mdw_TP_IMS_5106_01_ic + */ + template INVITE_Request mdw_TP_IC_IBCF_REINVITE_01( + template SipUrl p_SCSCF_URI + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + complement(mw_routeBody(p_SCSCF_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + }, +// pAccessNetworkInfo := omit, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + }) + } + } + + } // end group g_IBCF_REINVITE + + + group g_IBCF_100TRY { + + + + } // end group g_IBCF_100TRY + + group g_IBCF_180RESP { + + /** + * + * @desc 180 Ringing Response checking TP_IBCF_180RESP_01 on MW + * @remark source template mdw_TP_IMS_5115_01_ic + */ + template Response mdw_TP_IC_IBCF_180RESP_01 + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IC_IBCF_180RESP_02 on MW + * @remark source template mdw_TP_IMS_5131_01_ic + */ + template Response mdw_TP_IC_IBCF_180RESP_02 + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + } // end group g_IBCF_180RESP + + group g_IBCF_1XXRESP { + + /** + * + * @desc 180 Ringing Response checking TP_IC_IBCF_1XXRESP_01 + * @remark source template mdw_TP_IMS_5115_03_ic + */ + template Response mdw_TP_IC_IBCF_1XXRESP_01( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_180Ringing_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, +// *, +// {nameAddr := mw_NameAddr(p_TEL_URI)}, // only if availble, ie. optional + * + } + } + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IC_IBCF_1XXRESP_02 + * @remark source template mdw_TP_IC_IBCF_1XXRESP_01 + */ + template Response mdw_TP_IC_IBCF_1XXRESP_02( + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId, + template SipUrl p_SIP_URI, + template RecordRoute p_recordRoute) + modifies mw_180Ringing_Base := { + msgHeader := { + fromField := (mw_From (p_eutAUri), + + { + fieldName := FROM_E, + addressField := {addrSpecUnion:=?},//{nameAddr := mw_NameAddr(*, p_sipUrl)}, + fromParams := * + }), + + toField := ?,//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + pPreferredID := omit, + pAssertedID := ?, +// { +// fieldName := P_ASSERTED_ID_E, +// pAssertedIDValueList := { +//// *, +// { nameAddr := mw_NameAddr(p_SIP_URI)}, +// * +// } +// }, + recordRoute := p_recordRoute + } + } + + /** + * + * @desc 183 Ringing Response checking TP_IC_IBCF_183RESP_01 + * @remark source template mdw_TP_IMS_5115_03_ic + */ + template Response mdw_TP_IC_IBCF_183RESP_01( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_183SessionProgress_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, +// *, +// {nameAddr := mw_NameAddr(p_TEL_URI)}, // only if available, ie. optional! + * + } + } + } + } + + + } // end group g_IBCF_1XXRESP + + group g_IBCF_2XXRESP { + + /** + * + * @desc 200 OK Response checking TP_IC_IBCF_2XXRESP_01 on MW + * @remark source template mdw_TP_IMS_5115_02_ic + */ + template Response mdw_TP_IC_IBCF_2XXRESP_01 + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 200 OK Response checking TP_IC_IBCF_2XXRESP_02 on MW + * @remark source template mdw_TP_IMS_5115_04_ic + */ + template Response mdw_TP_IC_IBCF_2XXRESP_02( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_200OK_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, + *, + {nameAddr := mw_NameAddr(p_TEL_URI)}, + * + } + } + } + } + + /** + * + * @desc 200 OK Response checking TP_IC_IBCF_2XXRESP_03 on MW + * @remark source template mdw_TP_IMS_5131_02_ic + */ + template Response mdw_TP_IC_IBCF_2XXRESP_03 + modifies mw_200OK_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * + * @desc checking TP_IC_IBCF_2XXRESP_04 on MW + * @remark source template mw_TP_IMS_5121_02_ic + */ + template Response mw_TP_IC_IBCF_2XXRESP_04 modifies mdw_2XX_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + } + } + + /** + * + * @desc checking TP_IC_IBCF_2XXRESP_05 + * @remark source template mw_TP_IMS_5121_02_ic + */ + template Response mw_TP_IC_IBCF_2XXRESP_05 (template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId, + template SipUrl p_SIP_URI, + template RecordRoute p_recordRoute) modifies mdw_2XX_Base := { + msgHeader := { + cSeq := { + fieldName := CSEQ_E, + seqNumber := ?, + method := "INVITE" + }, + fromField := (mw_From_NameAddr_SipUrl(?,?,?), + { + fieldName := FROM_E, + addressField := {addrSpecUnion:=?},//{nameAddr := mw_NameAddr(*, p_sipUrl)}, + fromParams := * + }), + //mw_From(?)),//mw_From (p_eutAUri), //AXR mw_From added + toField := (mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), mw_To(?)), //AXR mw_To added + pPreferredID := omit, + pAssertedID := *, //AXR +// pAssertedID := { +// fieldName := P_ASSERTED_ID_E, +// pAssertedIDValueList := { +//// *, +// { nameAddr := mw_NameAddr(p_SIP_URI)}, +// * +// } +// }, + recordRoute := p_recordRoute + } + } + + /** + * + * @desc checking TP_IC_IBCF_2XXRESP_07 + * @remark source template mw_TP_IMS_5121_02_ic + */ + template Response mw_TP_IC_IBCF_2XXRESP_07 (template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId, + template SipUrl p_SIP_URI, + template RecordRoute p_recordRoute) modifies mdw_2XX_Base := { + msgHeader := { + cSeq := { + fieldName := CSEQ_E, + seqNumber := ?, + method := "BYE" + }, + fromField := ?, +// (mw_From_NameAddr_SipUrl(?,?,?), +// { +// fieldName := FROM_E, +// addressField := {addrSpecUnion:=?},//{nameAddr := mw_NameAddr(*, p_sipUrl)}, +// fromParams := * +// }), + //mw_From(?)),//mw_From (p_eutAUri), //AXR mw_From added + toField := ?,//(mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), mw_To(?)), //AXR mw_To added + pPreferredID := omit, + pAssertedID := *, //AXR +// pAssertedID := { +// fieldName := P_ASSERTED_ID_E, +// pAssertedIDValueList := { +//// *, +// { nameAddr := mw_NameAddr(p_SIP_URI)}, +// * +// } +// }, + recordRoute := p_recordRoute + } + } + + } // end group g_IBCF_2XXRESP + + group g_IBCF_4XX { + + /** + * + * @desc 487 Ringing Response checking TP_IC_IBCF_487INVITE_02 + * @remark source template mdw_TP_IC_IBCF_1XXRESP_01 + */ + template Response mdw_TP_IC_IBCF_487INVITE_02( + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId) + modifies mdw_4XX_Base := { + statusLine := {c_sipNameVersion, 487, ?}, + msgHeader := { + fromField := mw_From (p_eutAUri), + toField := mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?) + } + } + + /** + * + * @desc 486 Ringing Response checking TP_IC_IBCF_486INVITE_02 + * @remark source template mdw_TP_IC_IBCF_1XXRESP_01 + */ + template Response mdw_TP_IC_IBCF_486INVITE_02( + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId) + modifies mdw_4XX_Base := { + statusLine := {c_sipNameVersion, 486, ?}, + msgHeader := { + fromField := ?,//mw_From (p_eutAUri), + toField := ?//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?) + } + } + + } // end group g_IBCF_4XX + + group g_IBCF_200OK { + + /** + * + * @desc 200 OK message for TP_IC_IBCF_REGISTER_02 + * @remark source template mdw_TP_IMS_5092_01_ic + */ + template Response mdw_TP_IC_IBCF_REGISTER200OK_02 (charstring p_EUTHostname, template SipUrl p_eutBUri) modifies mw_200OK_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + pAssociatedURI := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := ? + }, + pChargingVector := mw_PChargingVector({ // @TODO indicating operator_identifier of IMS_? (IUT_?)? + {id := "term-ioi", paramValue := ?}, + * + }), + serviceRoute := mw_ServiceRoute (p_eutBUri), + contact := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := ? + } + } + } + } + + template(present) Response mw_Response_Base_ToFrom( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId + ) modifies mw_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + contentLength := *, + cSeq := p_cSeq, + fromField := ?,//mw_From (p_eutAUri), + toField := ?,//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + maxForwards := *, + via := ? + } + } + + } // end group g_IBCF_200OK + + group g_IBCF_401 { + + /** + * + * @desc 401 Unauthorized message checking f_mtc_check_TP_IC_IBCF_REGISTER_01. + * @remark source template mdw_TP_IMS_5089_01_ic + */ + template Response mdw_TP_IC_IBCF_REGISTER401_01 modifies mw_401Unauthorized_Base := { + msgHeader := { + wwwAuthenticate := mw_WwwAuthenticate_AKA + } + } + + + } // end group g_IBCF_401 + + group g_IBCF_ACK { + + /** + * + * @desc ACK Request checking TP_IC_IBCF_ACK_01 on MW + * @remark source template mdw_TP_IMS_5107_02_ic + */ + template ACK_Request mdw_TP_IC_IBCF_ACK_01(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_ACK_Request_Base := { + msgHeader := { + route := * +// route := { +// fieldName := ROUTE_E, +// routeBody := { +// *, +// complement(mw_routeBody(p_SCSCF_SIP_URI)), +// * +// } +// } + } + } + + /** + * + * @desc ACK Request checking TP_IC_IBCF_4XXINVITE_ACK_01 + */ + template ACK_Request mdw_TP_IC_IBCF_4XXINVITE_ACK_01(template CallId p_callId, + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId) + modifies mw_ACK_Request_Base := { + msgHeader := { + fromField := ?,//mw_From (p_eutAUri), + toField := ?//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?) + } + } + + } // end group g_IBCF_ACK + + group g_IBCF_BYE { + + /** + * + * @desc BYE Request checking TP_IC_IBCF_BYE_01 on MW + * @remark source template mdw_TP_IMS_5107_01_ic + */ + template BYE_Request mdw_TP_IC_IBCF_BYE_01(template CallId p_callId, in template (present) SipUrl p_SCSCF_SIP_URI) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + ?, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + } + } + + } // end group g_IBCF_BYE + + group g_IBCF_CANCEL { + + /** + * + * @desc CANCEL Request checking TP_IC_IBCF_CANCEL_01 + * @remark source template mdw_TP_IMS_5107_03_ic + */ + template CANCEL_Request mdw_TP_IC_IBCF_CANCEL_01 ( + template CallId p_callId, template SipUrl p_SCSCF_SIP_URI, + template SipUrl p_eutAUri, template charstring p_EUTB_PublicId) + modifies mw_CANCEL_Request_Base := { + msgHeader := { + fromField := ?,//mw_From (p_eutAUri), + toField := ?,//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + route := ( + *, + { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + ) + } + } + + } // end group g_IBCF_CANCEL + + group g_IBCF_SUBSCRIBE { + + /** + * + * @desc SUBSCRIBE Request checking TP_IC_IBCF_SUBSCRIBE_01 + * @remark source template mdw_TP_IMS_5044_01_ic + */ + template SUBSCRIBE_Request mdw_TP_IC_IBCF_SUBSCRIBE_01( + template SipUrl p_subscribe_uri, + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId + ) modifies mw_SUBSCRIBE_Request_Base := { + + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_subscribe_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := mw_From (p_eutAUri), + toField := mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + event := m_Event_reg, + expires := ?, // checked outside the template + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_eutAUri)), + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }) + } + } + + } // end group g_IBCF_SUBSCRIBE + + group g_IBCF_NOTIFY { + + /** + * + * @desc NOTIFY Request checking mdw_TP_IC_IBCF_NOTIFY_01 + * @remark source template mdw_TP_IMS_5094_01_IMS_ic + */ + template NOTIFY_Request mdw_TP_IC_IBCF_NOTIFY_01(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, +// pChargingVector := mw_PChargingVector({ +// {id := "icid-value", paramValue := *}, +// * +// }), + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + } // end group g_IBCF_NOTIFY + + group g_IBCF_REGISTER { + + /** + * + * @desc REGISTER Request checking TP_IC_IBCF_REGISTER_01. + * @remark source template mdw_TP_IMS_5089_01_ic_when + */ + template REGISTER_Request mdw_TP_IC_IBCF_REGISTER_01 modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityNo) + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5092_01. + * @remark source template mdw_TP_IMS_5092_01_ic_when + */ + template REGISTER_Request mdw_TP_IC_IBCF_REGISTER_02 modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityNo) + } + } + + /** + * + * @desc REGISTER Request checking TP_IC_IBCF_REGISTER_03. + * @remark TODO: template may be moved to LibSip_Templates + */ + template REGISTER_Request mdw_TP_IC_IBCF_REGISTER_EXPIRES_03( + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId + ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + fromField := mw_From (p_eutAUri), + toField := mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + expires := mw_Expires("0") + } + } + + /** + * + * @desc REGISTER Request checking TP_ISC_SCSCF_REGISTER_01. + */ + template REGISTER_Request mdw_TP_ISC_SCSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template Authorization p_authorization := *, + template PChargingVector p_pChargingVector := ?, + template PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_REGISTER_Request_Base := { + //requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pChargingVector := p_pChargingVector, + pChargingFunctionAddresses := ?, + pAccessNetworkInfo := ?, + pVisitedNetworkID := p_pVisitedNetworkID, + contact := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := ? + } + } + + } + } + + } // end group g_IBCF_REGISTER + + } // end group g_IBCF + + + group g_AuxiliaryInformationElementTemplates { + + /** + * @desc mw_NameAddr + * @remark source template mw_NameAddr from AtsImsIot_Templates + */ + template NameAddr mw_NameAddr(template SipUrl p_URI) := { + displayName := *, + addrSpec := p_URI + } + + } // end group g_AuxiliaryInformationElementTemplates + + +} // end module AtsImsIot_Templates_IC diff --git a/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_ISC.ttcn b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_ISC.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..71b619f14c3d9fb18a155980f6cb8c6481ef1197 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_ISC.ttcn @@ -0,0 +1,816 @@ +/* + * @author TTF 010 + * @version $Id$ + * @desc This module provides TP related templates used at MW interface + */ +module AtsImsIot_Templates_ISC { + + // LibCommon + //import from LibCommon_BasicTypesAndValues all; + //import from LibCommon_VerdictControl all; + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + //import from LibMsrp_TypesAndValues all; + + // LibIot + //import from LibIot_TypesAndValues all; + import from LibIot_PIXITS all; + + // AtsImsIot + //import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + group sip_templates { + + template NameAddr mw_NameAddr_DispName_Tel( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + displayName := p_displayName, + addrSpec := { + scheme := c_telScheme, //* contains "tel" + components := { + tel := { + subscriber := p_number + } + }, + urlParameters := *, + headers := * + } + } // End of template mw_NameAddr_DispName_Tel + + // template(present) From mw_From_AddrUnion_SipUrl( + // template DisplayName p_dn, + // template(present) charstring p_user := ?, + // template charstring p_host + // ) := { + // fieldName := FROM_E, + // addressField := mw_AddrUnion_SipUrl(p_user, p_host), + // fromParams := * + // } // End of template mw_From_AddrUnion_SipUrl + + // template(present) From mw_From_AddrUnion_TelUrl( + // template(present) charstring p_number := ? + // ) := { + // fieldName := FROM_E, + // addressField := mw_AddrUnion_TelUrl(p_number), + // fromParams := * + // } // End of template mw_From_AddrUnion_TelUrl + + // template From mw_From_NameAddr_TelUrl( + // template DisplayName p_displayName := *, + // template(present) charstring p_number := ? + // ) := { + // fieldName := FROM_E, + // addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + // fromParams := * + // } // End of template mw_From_NameAddr_TelUrl + + // template(present) To mw_To_AddrUnion_SipUrl( + // template DisplayName p_dn, + // template(present) charstring p_user := ?, + // template charstring p_host + // ) := { + // fieldName := TO_E, + // addressField := mw_AddrUnion_SipUrl(p_user, p_host), + // toParams := * + // } // End of template mw_To_AddrUnion_SipUrl + + // template(present) To mw_To_AddrUnion_TelUrl( + // template(present) charstring p_number := ? + // ) := { + // fieldName := TO_E, + // addressField := mw_AddrUnion_TelUrl(p_number), + // toParams := * + // } // End of template mw_To_AddrUnion_TelUrl + + // template To mw_To_NameAddr_TelUrl( + // template DisplayName p_displayName := *, + // template(present) charstring p_number := ? + // ) := { + // fieldName := TO_E, + // addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + // toParams := * + // } // End of template mw_To_NameAddr_TelUrl + + // template (present) Contact mw_contact( + // template (present) ContactAddress p_contactAddresses := ? + // ) := { + // fieldName := CONTACT_E, + // contactBody := { contactAddresses := { p_contactAddresses } } + // } // End of template mw_Contact + + // template (present) Response mw_200OK( + // template (present) CSeq p_cSeq := ?, + // template (present) CallId p_callId := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ? + // ) modifies mw_200OK_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to + // } + // } // End of template mw_200OK + + // template (present) Response mw_401Unauthorized( + // template (present) CSeq p_cSeq := ?, + // template (present) WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_401Unauthorized_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_401Unauthorized + + // template (present) Response mw_404NotFound( + // template (present) CSeq p_cSeq := ?, + // template (present) WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_404NotFound_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_404NotFound + + // template Response mw_480TemporaryUnavailable( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template WwwAuthenticate p_wwwAuthenticate := * + // ) modifies mw_480TemporaryUnavailable_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_480TemporaryUnavailable + + // template (present) Response mw_486Busy( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ?, + // template WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_486Busy_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_486Busy + + // template (present) Response mw_600BusyEverywhere( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ?, + // template WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_600BusyEverywhere_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_600BusyEverywhere + + } // End of group sip_templates + + group g_gmA { + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := ?, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID + //require := mw_require_path + } + } // End of template mw_TP_ISC_SCSCF_REGISTER_01 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_ECO_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + msgHeader := { + contact := p_contact, + path := p_path, + warning := p_warning + } + } // End of template mw_TP_ISC_SCSCF_ECO_REGISTER_01 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_REGISTER_02 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_ECO_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_ISC_SCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_REGISTER_02 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_REGISTER_03 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_ECO_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_ISC_SCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_ECO_REGISTER_03 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_ECO_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_ISC_SCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_ECO_REGISTER_04 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_ECO_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_ISC_SCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_ECO_REGISTER_05 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_07( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) charstring p_expires := "0" + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + msgHeader := { + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_ISC_SCSCF_REGISTER_07 + + template (present) SUBSCRIBE_Request mw_TP_ISC_SCSCF_SUBSCRIBE_01( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_subscribe_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg, + expires := ?, // checked outside the template + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_ISC_SCSCF_SUBSCRIBE_01 + + template (present) SUBSCRIBE_Request mw_TP_ISC_SCSCF_SUBSCRIBE_02( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_SUBSCRIBE_01 := { + } // End of template mw_TP_ISC_SCSCF_SUBSCRIBE_02 + + template (present) NOTIFY_Request mw_TP_ISC_SCSCF_NOTIFY_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_NOTIFY_Request_Base := { + requestLine := { + method := NOTIFY_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + } + } // End of template mw_TP_ISC_SCSCF_NOTIFY_01 + + template (present) PRACK_Request mw_TP_ISC_SCSCF_PRACK_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_PRACK_Request_Base := { + requestLine := { + method := PRACK_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + // TODO Check if it is required for PRACK event := m_Event_reg, + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_ISC_SCSCF_PRACK_01 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_invite_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_ISC_SCSCF_INVITE_01 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_ECO_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + msgHeader := { + contact := p_contact + }, + messageBody := p_messageBody + } // End of template mw_TP_ISC_SCSCF_ECO_INVITE_01 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_INVITE_02 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_ECO_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_ISC_SCSCF_ECO_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_ECO_INVITE_02 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_INVITE_03 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_ECO_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_ISC_SCSCF_ECO_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_ECO_INVITE_03 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_INVITE_04 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_ECO_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_TP_ISC_SCSCF_ECO_INVITE_01 := { + msgHeader := { + accept := p_accept, + recvInfo := p_recvInfo, + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_ISC_SCSCF_ECO_INVITE_04 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_ECO_INVITE_05( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_TP_ISC_SCSCF_ECO_INVITE_01 := { + msgHeader := { + accept := p_accept, + recvInfo := p_recvInfo, + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_ISC_SCSCF_ECO_INVITE_05 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_RE_INVITE_01( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_RE_INVITE_01 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_RE_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_RE_INVITE_02 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_RE_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_RE_INVITE_03 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_RE_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_RE_INVITE_014 + + template (present) Response mw_TP_ISC_SCSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_ISC_SCSCF_100Trying_01 + + template (present) Response mw_TP_ISC_SCSCF_100Trying_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_100Trying_01 := { + } // End of template mw_TP_ISC_SCSCF_100Trying_02 + + template (present) Response mw_TP_ISC_SCSCF_100Trying_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_100Trying_01 := { + } // End of template mw_TP_ISC_SCSCF_100Trying_03 + + template (present) Response mw_TP_ISC_SCSCF_100Trying_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_100Trying_01 := { + } // End of template mw_TP_ISC_SCSCF_100Trying_04 + + template (present) Response mw_TP_ISC_SCSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_ISC_SCSCF_180Ringing_01 + + template (present) Response mw_TP_ISC_SCSCF_180Ringing_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_180Ringing_01 := { + } // End of template mw_TP_ISC_SCSCF_180Ringing_02 + + template (present) Response mw_TP_ISC_SCSCF_180Ringing_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_180Ringing_01 := { + } // End of template mw_TP_ISC_SCSCF_180Ringing_03 + + template (present) Response mw_TP_ISC_SCSCF_180Ringing_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_180Ringing_01 := { + } // End of template mw_TP_ISC_SCSCF_180Ringing_04 + + template (present) Response mw_TP_ISC_SCSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_ISC_SCSCF_183SessionProgress_01 + + template (present) Response mw_TP_ISC_SCSCF_183SessionProgress_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_183SessionProgress_01 := { + } // End of template mw_TP_ISC_SCSCF_183SessionProgress_02 + + template (present) Response mw_TP_ISC_SCSCF_183SessionProgress_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_183SessionProgress_01 := { + } // End of template mw_TP_ISC_SCSCF_183SessionProgress_03 + + template (present) Response mw_TP_ISC_SCSCF_183SessionProgress_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_183SessionProgress_01 := { + } // End of template mw_TP_ISC_SCSCF_183SessionProgress_04 + + template (present) ACK_Request mw_TP_ISC_SCSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_ISC_SCSCF_ACK_01 + + template (present) ACK_Request mw_TP_ISC_SCSCF_ACK_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_ACK_01 := { + } // End of template mw_TP_ISC_SCSCF_ACK_02 + + template (present) ACK_Request mw_TP_ISC_SCSCF_ACK_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_ACK_01 := { + } // End of template mw_TP_ISC_SCSCF_ACK_03 + + template (present) ACK_Request mw_TP_ISC_SCSCF_ACK_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_ACK_01 := { + } // End of template mw_TP_ISC_SCSCF_ACK_04 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_ISC_SCSCF_BYE_01 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_BYE_01 := { + } // End of template mw_TP_ISC_SCSCF_BYE_02 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_BYE_01 := { + } // End of template mw_TP_ISC_SCSCF_BYE_03 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_BYE_01 := { + } // End of template mw_TP_ISC_SCSCF_BYE_04 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_05( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_BYE_01 := { + } // End of template mw_TP_ISC_SCSCF_BYE_05 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_06( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_BYE_01 := { + } // End of template mw_TP_ISC_SCSCF_BYE_06 + + template (present) CANCEL_Request mw_TP_ISC_SCSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_cancel_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_ISC_SCSCF_CANCEL_01 + + template (present) CANCEL_Request mw_TP_ISC_SCSCF_CANCEL_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_CANCEL_01 := { + } // End of template mw_TP_ISC_SCSCF_CANCEL_02 + + template (present) CANCEL_Request mw_TP_ISC_SCSCF_CANCEL_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_CANCEL_01 := { + } // End of template mw_TP_ISC_SCSCF_CANCEL_03 + + template (present) CANCEL_Request mw_TP_ISC_SCSCF_CANCEL_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_CANCEL_01 := { + } // End of template mw_TP_ISC_SCSCF_CANCEL_04 + + } // End of group g_gmA + +} // End of module AtsImsIot_Templates_GM \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MI.ttcn b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MI.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..362b7ecf553c4e91634990c8c31423a6885014d9 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MI.ttcn @@ -0,0 +1,239 @@ +/** + * @author TTF 010 + * @version $Id$ + * @desc This module provides TP related templates used at MI interface + */ +module AtsImsIot_Templates_MI { + + // LibCommon + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + // LibIot + import from LibIot_PIXITS all; + + // AtsImsIot + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + /** + * @desc INVITE Request checking TP_MI_ECSCF_INVITE_01 + */ + template(present) INVITE_Request mw_TP_MI_ECSCF_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_invite_uri)), + * + } + } ifpresent, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_invite_uri), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, +// {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, +// complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } + + template(present) INVITE_Request mw_TP_MI_ECSCF_INVITE_02 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_TP_MI_ECSCF_INVITE_01 := { + } + + template(present) INVITE_Request mw_TP_MI_ECSCF_INVITE_03 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_TP_MI_ECSCF_INVITE_01 := { + msgHeader := { + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_invite_uri), *} + } + } + } + + template (present) Response mw_TP_MI_ECSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MI_ECSCF_100Trying_01 + + template (present) Response mw_TP_MI_ECSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MI_ECSCF_180Ringing_01 + + template (present) Response mw_TP_MI_ECSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MI_ECSCF_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MI_ECSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MI_ECSCF_ACK_01 + + template (present) BYE_Request mw_TP_MI_ECSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_BYE_01 + + template(present) INFO_Request mw_TP_MI_ECSCF_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + )modifies mw_INFO_Dummy := { + + requestLine := { + requestUri := p_invite_uri // @TODO + }, + msgHeader := { + callId := p_callId, + contact := p_contact, + fromField := p_from, + pAssertedID := p_pAssertedID, + toField := p_to + }, + messageBody := p_messageBody + } + + template(present) INFO_Request mw_TP_MI_ECSCF_NGC_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MI_ECSCF_INFO_01 := { + } + + template (present) CANCEL_Request mw_TP_MI_ECSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MI_ECSCF_CANCEL_01 + +} // End of module AtsImsIot_Templates_MI diff --git a/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MM.ttcn b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MM.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..34bdb45dafc2c050864b3de8eed8e341468162c3 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MM.ttcn @@ -0,0 +1,265 @@ +/** + * @author TTF 010 + * @version $Id$ + * @desc This module provides TP related templates used at MM interface + */ +module AtsImsIot_Templates_MM { + + // LibCommon + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + // LibIot + import from LibIot_PIXITS all; + + // AtsImsIot + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + /** + * @desc INVITE Request checking TP_MM_ECSCF_INVITE_01 + */ + template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_invite_uri)), + * + } + }, *), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_invite_uri), *} + }, + contact := p_contact, + pAssertedID := p_pAssertedID + }, + messageBody := p_messageBody + } + + template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_02 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MM_ECSCF_INVITE_01 := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_03 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MM_ECSCF_INVITE_02 := { + } + + template(present) INVITE_Request mw_TP_MM_ECSCF_NGC_INVITE_01 ( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MM_ECSCF_INVITE_02 := { + } + + + template(present) INFO_Request mw_TP_MM_ECSCF_NGC_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MM_ECSCF_INFO_01 := { + } + + template (present) Response mw_TP_MM_ECSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MM_ECSCF_100Trying_01 + + template (present) Response mw_TP_MM_ECSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MM_ECSCF_180Ringing_01 + + template (present) Response mw_TP_MM_ECSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MM_ECSCF_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MM_ECSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MM_ECSCF_ACK_01 + + template (present) BYE_Request mw_TP_MM_ECSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MM_ECSCF_BYE_01 + + template (present) BYE_Request mw_TP_MM_ECSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MM_ECSCF_BYE_01 := { + msgHeader := { + route := * + } + } // End of template mw_TP_MM_ECSCF_BYE_02 + + template (present) CANCEL_Request mw_TP_MM_ECSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MM_ECSCF_CANCEL_01 + + + template(present) INFO_Request mw_TP_MM_ECSCF_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + )modifies mw_INFO_Dummy := { + + requestLine := { + requestUri := p_invite_uri // @TODO + }, + msgHeader := { + callId := p_callId, + contact := p_contact, + fromField := p_from, + pAssertedID := p_pAssertedID, + toField := p_to + }, + messageBody := p_messageBody + } + + +} // End of module AtsImsIot_Templates_MM diff --git a/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MW.ttcn b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MW.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..00db9a8ddd862991825b6368aa67206d6c0d1faf --- /dev/null +++ b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MW.ttcn @@ -0,0 +1,1226 @@ +/** + * @author STF 574,TTF 010 + * @version $Id$ + * @desc This module provides TP related templates used at MW interface + */ +module AtsImsIot_Templates_MW { + + // LibCommon + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + // LibIot + import from LibIot_PIXITS all; + + // AtsImsIot + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + group g_pcscf { + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_PCSCF_REGISTER_01 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_ECO_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template (present) Path p_path := ?, + template (present) Warning p_warning := ?, + template (present) PAccessNetworkInfo p_pAccessNetworkInfo := ? + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + contact := p_contact, + path := p_path, + warning := p_warning, + pAccessNetworkInfo := p_pAccessNetworkInfo + } + } // End of template mw_TP_MW_PCSCF_ECO_REGISTER_01 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + } // End of template mw_TP_MW_PCSCF_REGISTER_02 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_ECO_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template (present) Path p_path := ?, + template (present) Warning p_warning := ?, + template (present) PAccessNetworkInfo p_pAccessNetworkInfo := ?, + template (present) ServiceRoute p_serviceRoute := ? + ) modifies mw_TP_MW_PCSCF_ECO_REGISTER_01 := { + msgHeader := { + serviceRoute := p_serviceRoute + } + } // End of template mw_TP_MW_PCSCF_ECO_REGISTER_02 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + } // End of template mw_TP_MW_PCSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_MW_PCSCF_REGISTER_02 := { + } // End of template mw_TP_MW_PCSCF_REGISTER_05 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_07( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) charstring p_expires := "0" + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + msgHeader := { + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_MW_PCSCF_REGISTER_07 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_09( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) charstring p_expires := "0" + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + msgHeader := { + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_MW_PCSCF_REGISTER_09 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_10( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ?, + template (present) charstring p_expires := "0" + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path, + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_MW_PCSCF_REGISTER_10 + + template (present) SUBSCRIBE_Request mw_TP_MW_PCSCF_SUBSCRIBE_01( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_subscribe_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg, + expires := ?, // checked outside the template + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_MW_PCSCF_SUBSCRIBE_01 + + template (present) SUBSCRIBE_Request mw_TP_MW_PCSCF_SUBSCRIBE_02( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_SUBSCRIBE_01 := { + } // End of template mw_TP_MW_PCSCF_SUBSCRIBE_02 + + template (present) NOTIFY_Request mw_TP_MW_PCSCF_NOTIFY_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_NOTIFY_Request_Base := { + requestLine := { + method := NOTIFY_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + } + } // End of template mw_TP_MW_PCSCF_NOTIFY_01 + + template (present) PRACK_Request mw_TP_MW_PCSCF_PRACK_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_PRACK_Request_Base := { + requestLine := { + method := PRACK_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + // TODO Check if it is required for PRACK event := m_Event_reg, + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_MW_PCSCF_PRACK_01 + + template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_invite_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_PCSCF_INVITE_01 + + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + msgHeader := { + contact := p_contact + }, + messageBody := p_messageBody + } + + template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_INVITE_02 + + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_01 := { + msgHeader := { + pAssertedID := p_pAssertedID + } + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_02 + + template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_INVITE_03 + + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_02 := { + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_03 + + template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_INVITE_04 + + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_02 := { + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_04 + + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_05( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_01 := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_04 + + template (present) INVITE_Request mw_TP_MW_PCSCF_RE_INVITE_01( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_RE_INVITE_01 + + template (present) INVITE_Request mw_TP_MW_PCSCF_RE_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_RE_INVITE_02 + + template (present) INVITE_Request mw_TP_MW_PCSCF_RE_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_RE_INVITE_03 + + template (present) INVITE_Request mw_TP_MW_PCSCF_RE_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_RE_INVITE_014 + + template (present) Response mw_TP_MW_PCSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_PCSCF_100Trying_01 + + template (present) Response mw_TP_MW_PCSCF_100Trying_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_100Trying_01 := { + } // End of template mw_TP_MW_PCSCF_100Trying_02 + + template (present) Response mw_TP_MW_PCSCF_100Trying_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_100Trying_01 := { + } // End of template mw_TP_MW_PCSCF_100Trying_03 + + template (present) Response mw_TP_MW_PCSCF_100Trying_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_100Trying_01 := { + } // End of template mw_TP_MW_PCSCF_100Trying_04 + + template (present) Response mw_TP_MW_PCSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_PCSCF_180Ringing_01 + + template (present) Response mw_TP_MW_PCSCF_180Ringing_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_180Ringing_01 := { + } // End of template mw_TP_MW_PCSCF_180Ringing_02 + + template (present) Response mw_TP_MW_PCSCF_180Ringing_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_180Ringing_01 := { + } // End of template mw_TP_MW_PCSCF_180Ringing_03 + + template (present) Response mw_TP_MW_PCSCF_180Ringing_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_180Ringing_01 := { + } // End of template mw_TP_MW_PCSCF_180Ringing_04 + + template (present) Response mw_TP_MW_PCSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_PCSCF_183SessionProgress_01 + + template (present) Response mw_TP_MW_PCSCF_183SessionProgress_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_MW_PCSCF_183SessionProgress_02 + + template (present) Response mw_TP_MW_PCSCF_183SessionProgress_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_MW_PCSCF_183SessionProgress_03 + + template (present) Response mw_TP_MW_PCSCF_183SessionProgress_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_MW_PCSCF_183SessionProgress_04 + + template (present) ACK_Request mw_TP_MW_PCSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_ACK_01 + + template (present) ACK_Request mw_TP_MW_PCSCF_ACK_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_ACK_01 := { + msgHeader := { + route := omit + } + } // End of template mw_TP_MW_PCSCF_ACK_02 + + template (present) ACK_Request mw_TP_MW_PCSCF_ACK_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_ACK_01 := { + } // End of template mw_TP_MW_PCSCF_ACK_03 + + template (present) ACK_Request mw_TP_MW_PCSCF_ACK_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_ACK_01 := { + } // End of template mw_TP_MW_PCSCF_ACK_04 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_BYE_01 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_BYE_01 := { + } // End of template mw_TP_MW_PCSCF_BYE_02 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_BYE_01 := { + } // End of template mw_TP_MW_PCSCF_BYE_03 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_BYE_01 := { + } // End of template mw_TP_MW_PCSCF_BYE_04 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_05( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_BYE_01 := { + } // End of template mw_TP_MW_PCSCF_BYE_05 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_06( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_BYE_01 := { + } // End of template mw_TP_MW_PCSCF_BYE_06 + + template (present) CANCEL_Request mw_TP_MW_PCSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_cancel_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_CANCEL_01 + + template (present) CANCEL_Request mw_TP_MW_PCSCF_CANCEL_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_CANCEL_01 := { + } // End of template mw_TP_MW_PCSCF_CANCEL_02 + + template (present) CANCEL_Request mw_TP_MW_PCSCF_CANCEL_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_CANCEL_01 := { + } // End of template mw_TP_MW_PCSCF_CANCEL_03 + + template (present) CANCEL_Request mw_TP_MW_PCSCF_CANCEL_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_CANCEL_01 := { + } // End of template mw_TP_MW_PCSCF_CANCEL_04 + + } // End of group g_pcscf + + group g_scscf { + + template(present) REGISTER_Request mw_TP_MW_SCSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_SCSCF_REGISTER_01 + + template(present) REGISTER_Request mw_TP_MW_SCSCF_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_TP_MW_SCSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_SCSCF_REGISTER_02 + + } // End of group g_scscf + + group g_icscf { + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_ICSCF_REGISTER_01 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_ECO_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ?, + template (present) Contact p_contact := ? + ) modifies mw_TP_MW_ICSCF_REGISTER_01 := { + msgHeader := { + contact := p_contact + } + } // End of template mw_TP_MW_ICSCF_ECO_REGISTER_01 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_TP_MW_ICSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_ICSCF_REGISTER_02 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_TP_MW_ICSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_ICSCF_REGISTER_03 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_ECO_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ?, + template (present) Contact p_contact := ? + ) modifies mw_TP_MW_ICSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_MW_ICSCF_ECO_REGISTER_03 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_TP_MW_ICSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_ICSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_TP_MW_ICSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_ICSCF_REGISTER_05 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_07( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ?, + template (present) charstring p_expires := "0" + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path, + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_MW_PCSCF_REGISTER_07 + + } // End of group g_icscf + + group g_ecscf { + + template (present) INVITE_Request mw_TP_MW_ECSCF_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_invite_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_INVITE_01 + + template (present) INVITE_Request mw_TP_MW_ECSCF_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_INVITE_01 := { + } // End of template mw_TP_MW_ECSCF_INVITE_02 + + + template (present) INVITE_Request mw_TP_MW_ECSCF_RE_INVITE_01( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_INVITE_01 := { + } // End of template mw_TP_MW_ECSCF_RE_INVITE_01 + + template (present) INVITE_Request mw_TP_MW_ECSCF_RE_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_INVITE_01 := { + } // End of template mw_TP_MW_ECSCF_RE_INVITE_02 + + template(present) INVITE_Request mw_TP_MW_PCSCF_NGC_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MW_ECSCF_INVITE_02 := { + } + + template(present) INFO_Request mw_TP_MW_PCSCF_NGC_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_INFO_Dummy := { + requestLine := { + requestUri := p_invite_uri // @TODO + }, + msgHeader := { + accept := p_accept, + callId := p_callId, + contact := p_contact, + fromField := p_from, + pPreferredID := p_pPreferredID, + recvInfo := p_recvInfo, + toField := p_to + }, + messageBody := p_messageBody + } + + template (present) Response mw_TP_MW_ECSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_100Trying_01 + + template (present) Response mw_TP_MW_ECSCF_100Trying_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_100Trying_01 := { + } // End of template mw_TP_MW_ECSCF_100Trying_02 + + template (present) Response mw_TP_MW_ECSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_180Ringing_01 + + template (present) Response mw_TP_MW_ECSCF_180Ringing_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_180Ringing_01 := { + } // End of template mw_TP_MW_ECSCF_180Ringing_02 + + template (present) Response mw_TP_MW_ECSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_183SessionProgress_01 + + template (present) Response mw_TP_MW_ECSCF_183SessionProgress_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_183SessionProgress_01 := { + } // End of template mw_TP_MW_ECSCF_183SessionProgress_02 + + template (present) ACK_Request mw_TP_MW_ECSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_ECSCF_ACK_01 + + template (present) ACK_Request mw_TP_MW_ECSCF_ACK_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_ACK_01 := { + msgHeader := { + route := omit + } + } // End of template mw_TP_MW_ECSCF_ACK_02 + + template (present) BYE_Request mw_TP_MW_ECSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_BYE_01 + + template (present) CANCEL_Request mw_TP_MW_ECSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_CANCEL_01 + + } + + group g_ibcf { + + /** + * @desc INVITE Request checking TP_MW_IBCF_INVITE_01 + */ + template(present) INVITE_Request mdw_TP_MW_IBCF_INVITE_01 (template (present) SipUrl p_ECSCF_SIP_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_ECSCF_SIP_URI)), + * + } + }, *), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_ECSCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, +// {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, +// complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } + + template (present) Response mw_TP_MW_IBCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_IBCF_100Trying_01 + + template (present) Response mw_TP_MW_IBCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_IBCF_180Ringing_01 + + template (present) Response mw_TP_MW_IBCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_IBCF_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MW_IBCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_IBCF_ACK_01 + + template (present) BYE_Request mw_TP_MW_IBCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_IBCF_BYE_01 + + template (present) CANCEL_Request mw_TP_MW_IBCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_IBCF_CANCEL_01 + + } + +} // End of module AtsImsIot_Templates_MW \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MX.ttcn b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MX.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..b65e020b5d29eccb8284a3ebb3208af4deb28d80 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib/AtsImsIot_Templates_MX.ttcn @@ -0,0 +1,256 @@ +/** + * @author TTF 010 + * @version $Id$ + * @desc This module provides TP related templates used at MM interface + */ +module AtsImsIot_Templates_MX { + + // LibCommon + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + // LibIot + import from LibIot_PIXITS all; + + // AtsImsIot + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + /** + * @desc INVITE Request checking TP_MX_ECSCF_INVITE_01 + */ + template(present) INVITE_Request mw_TP_MX_ECSCF_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_invite_uri)), + * + } + }, *), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_invite_uri), *} + }, + contact := p_contact, + pAssertedID := p_pAssertedID + }, + messageBody := p_messageBody + } + + template(present) INVITE_Request mw_TP_MX_ECSCF_INVITE_02 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MX_ECSCF_INVITE_01 := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + template(present) INVITE_Request mw_TP_MX_ECSCF_INVITE_03 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MX_ECSCF_INVITE_02 := { + } + + template(present) INVITE_Request mw_TP_MX_PCSCF_NGC_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MX_ECSCF_INVITE_02 := { + } + + template(present) INFO_Request mw_TP_MX_ECSCF_NGC_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MX_ECSCF_INFO_01 := { + } + + template (present) Response mw_TP_MX_ECSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MX_ECSCF_100Trying_01 + + template (present) Response mw_TP_MX_ECSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MX_ECSCF_180Ringing_01 + + template (present) Response mw_TP_MX_ECSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MX_ECSCF_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MX_ECSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MX_ECSCF_ACK_01 + + template(present) INFO_Request mw_TP_MX_ECSCF_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + )modifies mw_INFO_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + callId := p_callId + } + } + + template (present) BYE_Request mw_TP_MX_ECSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MX_ECSCF_BYE_01 + + template (present) BYE_Request mw_TP_MX_ECSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MX_ECSCF_BYE_01 := { + msgHeader := { + route := * + } + } // End of template mw_TP_MX_ECSCF_BYE_02 + + template (present) CANCEL_Request mw_TP_MX_ECSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MX_ECSCF_CANCEL_01 + + template (present) Response mw_3xxContact( + template (present) CSeq p_cSeq := ?, + Accept p_accept) modifies mdw_3XX_Base := { + msgHeader := { + cSeq := p_cSeq, + accept := p_accept + } + } // End of template mw_3xxContact + +} // End of module AtsImsIot_Templates_MX diff --git a/ttcn/LibAtsImsIot/lib/AtsImsIot_TypesAndValues.ttcn b/ttcn/LibAtsImsIot/lib/AtsImsIot_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..7c0384e670c578fcaf42692d0ab06024a4ba1097 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib/AtsImsIot_TypesAndValues.ttcn @@ -0,0 +1,206 @@ +/* + * @author STF 370 + * @version $Id: $ + * @desc This module provides the templates for Interoperability tests. + */ + +module AtsImsIot_TypesAndValues { + + import from LibCommon_BasicTypesAndValues all; + import from LibSip_SIPTypesAndValues all; + import from LibMsrp_TypesAndValues all; + import from LibDiameter_TypesAndValues all; + import from LibCommon_DataStrings all; + + group SIPmessageTypes { + /** + * @desc SIP Message Type + * @member request SIP request + * @member response SIP response + * @member msrpRequest MSRP SEND/AUTH request messages + * @member msrpResponse MSRP response message + */ + + type union SipMessage { + Request request, + Response response, + SEND_request msrpRequest, + RECEIVE_response msrpResponse, + NAPTRmessage naptrmessage + } + /** + * @desc SIP Message List Type + */ + type record of SipMessage SipMessageList; + type record SkipType { + integer skipCount, + SipMessage skipMessage optional + } + } + + group DiameterMessageTypes{ + /** + * @desc DIAMETER Message List Type + */ + type record of DIAMETER_MSG DiameterMessageList; + type record SkipTypeDiameter { + integer skipCount, + DIAMETER_MSG skipMessage optional + } + } + + group DnsEnumMessageTypes { + /** + * @desc NAPTR Message Type + */ + type union NAPTRmessage { + DnsMessage dnsMessage, + EnumMessage enumMessage + } + /** + * @desc DNS Message Type + * @member request DNS query + * @member response DNS response + */ + type union DnsMessage { + DnsQuery query, + DnsResponse response + } + /** + * @desc DnsQuery Message Type + */ + type record DnsQuery { + DnsHeader header, + DnsQuestionList question_list optional, + DnsAnswerList answer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + /** + * @desc DnsResponse Message Type + */ + type record DnsResponse { + DnsHeader header, + DnsQuestionList question_list optional, + DnsAnswerList answer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + type record DnsHeader + { + UInt16 id, + Bit1 qR_flag, + UInt4 opcode, + Bit1 aA_flag, + Bit1 tC_flag, + Bit1 rD_flag, + Bit1 rA_flag, + Bit3 z_field, + UInt4 rCODE, + UInt16 qDCOUNT, + UInt16 aNCOUNT, + UInt16 nSCOUNT, + UInt16 aRCOUNT + } with { encode "NAPTRCodec"} + + type charstring DnsDomainName;//NB! DNS pointers are handled codec + + type record DnsQuestion + { + DnsDomainName qNAME, + UInt16 qTYPE, + UInt16 qCLASS + } with { encode "NAPTRCodec"} + + type record of DnsQuestion DnsQuestionList; + type record of DnsResourceRecord DnsAnswerList; + type record of DnsResourceRecord DnsAuthorityList; + type record of DnsResourceRecord DnsAdditionalList; + + type record DnsResourceRecord + { + DnsDomainName domainName, + Int16 type_, + Int16 class_, + UInt32 ttl, + UInt16 rd_length, + DnsRDATA r_data + } with { encode "NAPTRCodec"} + + type octetstring DnsRDATA; + + /** + * @desc ENUM Message Type + * @member request ENUM query + * @member response ENUM response + */ + type union EnumMessage { + EnumQuery query, + EnumResponse response + } + + /** + * @desc EnumQuery Message Type + */ + type record EnumQuery { + DnsHeader header, + EnumQuestionList enumQuestion_list optional, + EnumAnswerList enumResponse_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + type record EnumResponse + { + DnsHeader header, + EnumQuestionList enumQuestion_list optional, + EnumAnswerList enumAnswer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + + type record EnumQuestion + { + E164TN e164TelNumber, + UInt16 qTYPE, //35 + UInt16 qCLASS // + }with { encode "NAPTRCodec"} + + type record of EnumQuestion EnumQuestionList; + type record of EnumAnswer EnumAnswerList; + + /** + * @desc EnumAnswer Message Type + */ + type record EnumAnswer + { + E164TN e164TelNumber, + Int16 naptrType, + Int16 class_, + UInt32 ttl, + UInt16 rd_length, + DnsNaptrRRData naptrRR + } with { encode "NAPTRCodec"} + type DnsDomainName E164TN;//NB! DNS pointers not recommended, but possible + + + type record DnsNaptrRRData + { + UInt16 naptrOrder, + UInt16 naptrPreference, + UInt8 flags_length, + NaptrCharString naptrFlags, + UInt8 service_length, + NaptrCharString naptrService, + UInt8 regex_length, + NaptrCharString naptrRegex, + UInt8 replacementLength, + DnsDomainName naptrReplacement + } with { encode "NAPTRCodec"} + + type charstring NaptrCharString; + } +}//end module diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_Functions.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..19f0bd141de1a2e6ebe63aba0e97b4f3b0f1dd50 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_Functions.ttcn @@ -0,0 +1,3512 @@ +/** + * @author STF 370, TTF006; + * @version $Id: $ + * @desc This module provides common function for TestCoordinator component. + */ +module AtsImsIot_Functions { + + //LibDiameter + import from LibDiameter_TypesAndValues all; + + //LibSip + import from LibSip_SIPTypesAndValues all; + + //LibIms + import from LibIms_UpperTester all; + + //LibIot + import from LibIot_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_Functions all; + import from LibIot_TypesAndValues all; + import from LibIot_VxLTE_Functions all; + + //LibUpperTester + import from LibUpperTester all; + + //AtsImsIot + import from AtsImsIot_Templates all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; + + group ue { + + /** + * @desc + * Starts user component behavior for triggering the registration + * procedures at the UE from test coordinator. + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRegistration(EquipmentUser p_userCompRef, ImsUserInfo p_userInfo) + runs on TestCoordinator + return boolean { + var boolean v_status := true; + // TODO Investigate if f_PR_user_home_registration is to be removed + // Reason: Thre is no difference when triggering UE to register in home or visiting NW + if( p_userInfo.publicId == "dummy" ) { return false; } + + v_status := f_mtc_userRegister(p_userCompRef, p_userInfo.publicId, p_userInfo.privateId, p_userInfo.password); + return v_status; + } + + /** + * @desc + * Starts user component behavior for checking the successful + * registration. + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckRegistration(EquipmentUser p_userCompRef, ImsUserInfo p_userInfo) + runs on TestCoordinator return boolean { + var boolean v_status := true; + if( p_userInfo.publicId == "dummy" ) { return false; } + v_status := f_mtc_userCheckRegistrationSuccessful(p_userCompRef); + return v_status; + } + + /** + * @desc + * Starts user component behavior for checking that UE + * is not registerd. + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + **/ + function f_mtc_userCheckNoRegistration(EquipmentUser p_userCompRef, ImsUserInfo p_userInfo) + runs on TestCoordinator return boolean { + var boolean v_status := true; + if( p_userInfo.publicId == "dummy" ) { return true; } + v_status := f_mtc_userCheckRegistrationUnsuccessful(p_userCompRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate an MO call + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateCall(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + if( p_calledParty.publicId == "dummy" ) { return true; } + v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * + * @desc Starts user component behaviour for checking that the User + * Call has been initiated + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateCallSuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserCallIsInitiated()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + /** + * @desc Answer call + * @param p_ueRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAnswerCall(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + v_status := f_mtc_userAnswerCallSuccessful(p_ueRef); + return v_status; + } + + /** + * + * @desc Starts user component behaviour for checking that the User + * Call has been answered + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAnswerCallSuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserCallIsAnswered()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + /** + * @desc End the call + * @param p_ueRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_EndCall(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + v_status := f_mtc_userEndCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate an MO call + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userSetupVoiceCall(EquipmentUser p_ueRefA, EquipmentUser p_ueRefB, ImsUserInfo p_calledPartyB) + runs on TestCoordinator return boolean { + var boolean v_success := false; + f_mtc_userInitiateCall (p_ueRefA, p_calledPartyB); + f_mtc_userCheckRinging(p_ueRefB); + f_mtc_userCheckPeerIsRinging(p_ueRefA); + f_mtc_userAnswerCall(p_ueRefB); + f_mtc_userCheckCallEstablished(p_ueRefA); + f_mtc_userCheckCallEstablished(p_ueRefB); + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + + } + + /** + * + * @desc Starts user component behaviour for checking that the User + * Call has been ended + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userEndCallSuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserCallIsEnded()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + /** + * @desc Trigger UE given by p_ueRef to add a new media stream + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAddNewMediaStream(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + v_status := f_mtc_userAddNewMediaStreamSuccessful(p_ueRef); + return v_status; + } + + /** + * + * @desc Starts user component behaviour for checking that + * a new media stream has been added + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAddNewMediaStreamSuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserAddNewMediaStream()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + /** + * @desc Trigger UE given by p_ueRef to remove a media stream + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRemoveMediaStream(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + v_status := f_mtc_userRemoveNewMediaStreamSuccessful(p_ueRef); + return v_status; + } + + /** + * + * @desc Starts user component behaviour for checking that + * a new media stream has been added + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRemoveNewMediaStreamSuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserRemoveNewMediaStream()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + + /** + * @desc Trigger UE given by p_ueRef to check the remove of a media stream + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckRemoveMediaStream(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to add a new media stream + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userModifiyMediaStream(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to add a new media stream + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckNewMediaStream(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + + /** + * @desc Trigger UE given by p_ueRef to loose conectifity + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userLooseConnection(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to enter CANCEL current call + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerCancelCall(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to enter HOLD state + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerHold(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Trigger UE given by p_ueRef to leave HOLD state and resume pending call + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerResume(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE given by p_ueRef is ringing + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckRinging(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE given by p_ueRef reports a successfull call establishment + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallEstablished(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE given by p_ueRef reports a not successfull call establishment + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallCannotBeEstablished(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + + /** + * @desc Check that UE by p_ueRef given reports that its peer is ringing + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckPeerIsRinging(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Check that UE by p_ueRef given reports HOLD state + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckUserOnHold(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Check that UE by p_ueRef given reports that call has been resumed + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallResumed(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Check that UE by p_ueRef given reports that call has ended + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallEnded(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Check that UE by p_ueRef given reports that call is terminated + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallTerminated(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Check that UE by p_ueRef given reports that call is no longer offered + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallNoLongerOffered(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE by p_ueRef given reports that call has been cancelled + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallCancelled(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE by p_ueRef given reports that call has been rejected due to ACR + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallRejectedACR(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Start capturing and monitoring traffic on all configured interfaces + * @return true or false + */ + function f_mtc_StartAllTrafficCapture() + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Starts user component behaviour for registration from test coordinator + * @param p_userCompRef Reference to IMS UE user component + * @param p_publicId public user identity + * @param p_privateId private user identity + * @param p_pw user password + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRegister(EquipmentUser p_userCompRef, charstring p_publicId, charstring p_privateId, charstring p_pw) runs on TestCoordinator return boolean { + // TODO server address parameter may needed + var boolean v_success := false; + + p_userCompRef.start(f_userRegistration(p_publicId, p_privateId, p_pw)); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + + function f_mtc_userCheckRegistrationSuccessful(EquipmentUser p_userCompRef) runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserIsRegistered()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + /** + * + * @desc Starts user component behaviour for checking that the UE + * is not registered + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckRegistrationUnsuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserIsNotRegistered()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + /** + * @desc Starts user component behaviour for registration from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @param publicId public user identity + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userDeregister(EquipmentUser p_userCompRef, charstring p_publicId) runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_userDeregistration(p_publicId)); + + p_userCompRef.done; + + if( f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + + /** + * + * @desc Starts user component behaviour for sending a message from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @param p_content Content of meessage to be sent + */ + function f_mtc_userSendMessage(EquipmentUser p_userCompRef, charstring p_content) runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_userSendMessage(p_content)); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + + /** + * + * @desc Starts user component behaviour for checking message receipt from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @param p_content Content of meessage to be received + */ + function f_mtc_userCheckMessageReceipt(EquipmentUser p_userCompRef) runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_userCheckMessageReceipt()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + + /** + * + * @desc Starts user component behaviour for checking message receipt from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @param p_content Content of meessage to be received + */ + function f_mtc_userCheckMessageNotDelivered(EquipmentUser p_userCompRef) runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_userCheckMessageNotDelivered()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + + /** + * @desc Trigger UE given by p_ueRef to send the required message indicated by p_command + * @param p_userCompRef Reference to IMS UE user component + * @param p_command Required Message to be sent + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_triggerUserCommand ( EquipmentUser p_userCompRef, EquipmentCommand p_command ) + runs on TestCoordinator return boolean { + var boolean v_success := false; + p_userCompRef.start ( f_sendEquipmentCmd ( valueof ( m_EQ_Request ( p_command, { } ) ) ) ); + p_userCompRef.done; + if ( f_getE2EVerdict( ) == pass ) { v_success := true; } + return v_success; + } + + /** + * @desc Trigger UE given by p_ueRef to Verify that user is informed + * of its presence status update + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPresenceStatus(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to Verify that user is informed + * of peer user presence information + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPresenceInformation(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to Verify that user is not informed + * of peer user presence information + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckNoPresenceInformation(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to subscribes presence + * information from peer user + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userSubscribeToPresenceInformation(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to subscribes to resource list + * userPRES_list containing peer user SIP URI + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userSubscribeToPresenceResourceList(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to subscribes to conference event package + * to retrieve the list of the participants of the 1-to-many chat + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userSubscribeToConferenceEventPackage(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that originating user + * receives an authorization request from peer user to see + * its own presence information + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPresenceAuthorizationRequest(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to authorizes peer user to be + * informed of its own presence information + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAuthorizationToPeer(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate conference call + * @param p_ueRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateConferenceCall(EquipmentUser p_ueRef)//, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that Conference is being set up + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckConferenceSetUp(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that Conference is established + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckConferenceEstablished(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to invite user to join the conference call + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInviteUserToJoinConferenceCall(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is ringing + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckConferenceCallRinging(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that its peer is ringing + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckConferenceCallPeerIsRinging(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Answer on Conference call + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAnswerConferenceCall(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify user is alerted when + * peer joins the conference call + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckInfoWhenPeerJoinsConference(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc User leave conference call + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_LeaveConferenceCall(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE by p_ueRef given reports that conference call has ended + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckConferenceCallEnded(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate 1-to-1 chat + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateChat(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * of incoming chat invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate chat 1-to-Many + * of incoming chat invitation + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty_1 Reference to UE 1 + * @param p_calledParty_2 Reference to UE 2 + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateChatOneToMany(EquipmentUser p_ueRef, ImsUserInfo p_calledParty_1, ImsUserInfo p_calledParty_2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to Add a new participant in a chat 1-to-Many + * of incoming chat invitation + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty Reference to the new participant + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAddNewPaticipantChatOneToMany(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that invitation to 1-to-1 chat session has reached + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerChatInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that invitation to 1-to-Many chat session has reached + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerChatInfoOneToMany(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to accept the 1-to-1 chat invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAnswerChat(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to accept the 1-to-Many chat invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAnswerChatOneToMany(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that users perform chating + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChating(EquipmentUser p_userCompRef1, EquipmentUser p_userCompRef2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to ends the 1-to-1 chat session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_EndChat(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is + * informed that 1-to-1 chat session has ended + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatEnded(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to automatically accepts + * 1-to-1 chat invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckAutomaticalyAcceptedChat(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to rejects the invitation + * to chat session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatRejected(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that there is no answer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInformedNoAnswer(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef given reports that call has been + * cancelled + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatCancelled(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef given reports that call has been + * terminated + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatTerminated(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to authenticate to MSRP Relay + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + * @see RFC 4976 + */ + function f_mtc_userInitiateMSRPAuthentication(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to check that authentication to MSRP Relay succeed + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + * @see RFC 4976 + */ + function f_mtc_userCheckMSRPAuthenticated(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate chat conference + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateChatConf(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * of incoming chat conference invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatConfInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that invitation to chat conference session has reached + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerChatConfInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user join to chat + * conference session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userJoinChatConf(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that users perform + * chating conference + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatingConf(EquipmentUser p_userCompRef1, EquipmentUser p_userCompRef2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user leave to chat + * conference session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userLeaveChatConf(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is + * informed that conference chat session has ended + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatConfEnded(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that peer user leave chat + * conference session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerLeaveChatConf(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user rejoin to chat + * conference session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRejoinChatConf(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is + * informed that conference chat session has rejoined + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckRejoinChatConfInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that peer user rejoin chat + * conference session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerRejoinChatConfInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate starts file transfer + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateFt(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * of incoming file transfer invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that invitation to file transfer session has reached + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerFtInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that users perform file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFt(EquipmentUser p_userCompRef1, EquipmentUser p_userCompRef2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to accept the file transfer invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAcceptsFt(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that users perform file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFileTransferring(EquipmentUser p_userCompRef1, EquipmentUser p_userCompRef2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to automatically accepts + * file transfer invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckAutomaticalyAcceptedFt(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to ends the file transfer session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_EndFt(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to starts file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerFtStart(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to accept file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerFtAccept(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to release File transfer before file is transferred + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerReleaseFtBeforeFileTransfered(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is + * informed that file transfer has ended + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtEnded(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is + * informed that file transfer has terminated + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtTerminated(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that users stopped file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtStopped(EquipmentUser p_userCompRef1, EquipmentUser p_userCompRef2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user started file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtStarted(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef given reports that file transfer has been + * cancelled + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtCancel(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate sharing content + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateShare(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to check partner sharing capabilities + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPartnerSharingCapabilities(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to request acceptance of sharing content + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRequestedToAcceptSharing(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to accept sharing content + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAcceptsSharing(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to check that user is informed that + * request has been answered + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckSharingRequestAnswered(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to ends sharing content + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_EndSharing(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to check if content sharing ends + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckSharingEnded(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that connected user cannot share content + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInformedAboutPartnerCannotShareContent(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that connected user cannot share content + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInformedAboutPartnerCanShareContent(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to reject the file transfer invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRejectsFt(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user rejects sharing + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRejectsSharing(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that request has been rejected + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckSharingRequestRejected(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + + /** + * @desc Trigger IMS Network to deregister UE given by p_ueRef + * @param p_imsRef Reference to IMS network component + * @param p_ueRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_imsTriggerUeDeregistration(EquipmentUser p_imsRef, EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + + + + + /* + * + * @desc Looks for genUser (any) of a specific product + * @param p_productIdx Index of the product + * @return genUser + */ + function f_getAnyValidUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].genUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].genUserId; + } // end if + } // end for j + log("f_getAnyValidUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getAnyValidUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for TelUser of a specific product + * @param p_productIdx Index of the product + * @return TelUser + */ + function f_getTelUserId(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].telUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].telUserId; + } // end if + } // end for j + log("f_getTelUserId: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getTelUserId: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for SipUser of a specific product + * @param p_productIdx Index of the product + * @return SipUser + */ + function f_getSipUserId(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].sipUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].sipUserId; + } // end if + } // end for j + log("f_getSipUserId: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getSipUserId: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for ARCUser for a specific product + * @param p_productIdx Index of the product + * @return ARCUser + */ + function f_getACRUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].acrUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].acrUserId; + } // end if + } // end for j + log("f_getACRUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getACRUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for OIPUser for a specific product + * @param p_productIdx Index of the product + * @return OIPUser + */ + function f_getOIPUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].oipUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].oipUserId; + } // end if + } // end for j + log("f_getOIPUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getOIPUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for OIRUser for a specific product + * @param p_productIdx Index of the product + * @return OIRUser + */ + function f_getOIRUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].oirUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].oirUserId; + } // end if + } // end for j + log("f_getOIRUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getOIRUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for HoldUser for a specific product + * @param p_productIdx Index of the product + * @return HoldUser + */ + function f_getHoldUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].holdUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].holdUserId; + } // end if + } // end for j + log("f_getHoldUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getHoldUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for Presence user for a specific product + * @param p_productIdx Index of the product + * @return PresUser + */ + function f_getPresUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].presUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].presUserId; + } // end if + } // end for j + log("f_getPresUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getPresUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for File transfer user for a specific product + * @param p_productIdx Index of the product + * @return FtUser + */ + function f_getFtUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].ftUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].ftUserId; + } // end if + } // end for j + log("f_getFtUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getFtUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for Content sharing user for a specific product + * @param p_productIdx Index of the product + * @return ShareUser + */ + function f_getShareUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].shareUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].shareUserId; + } // end if + } // end for j + log("f_getShareUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getShareUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for Instant messaging user for a specific product + * @param p_productIdx Index of the product + * @return ImUser + */ + function f_getImUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].imUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].imUserId; + } // end if + } // end for j + log("f_getImUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getImUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + // TODO + function f_getUEHostname(integer p_ID, out charstring p_hostname) + return boolean { + + // TODO + + return true; + } + + /** + * @desc + * Preamble to handle user registration in home network from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @return true in case of successfull execution otherwise false + */ + function f_PR_user_home_registration(EquipmentUser p_userCompRef, ImsUserInfo p_userInfo) + runs on TestCoordinator return boolean { + var boolean v_status := true; + if( p_userInfo.publicId == "" ) { return false; } + + v_status := f_mtc_userRegister(p_userCompRef, p_userInfo.publicId, p_userInfo.privateId, p_userInfo.password); + + return v_status; + } + + /** + * @desc + * Postamble to handle user deregistration in home network from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @return true in case of successfull execution otherwise false + */ + function f_PO_user_home_deregistration(EquipmentUser p_userCompRef) runs on ImsTestCoordinator return boolean { + var boolean v_status := true; + + v_status := f_mtc_userDeregister(p_userCompRef, "*"); // deregister all previous users + + return v_status; + } + + /** + * @desc + * Preamble to handle user registration in roaming network from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @return true in case of successfull execution otherwise false + */ + function f_PR_user_roaming_registration(EquipmentUser p_userCompRef, ImsUserInfo p_userInfo) + runs on TestCoordinator return boolean { + var boolean v_status := true; + if( p_userInfo.publicId == "" ) { return false; } + + // TODO check roaming registration + v_status := f_mtc_userRegister(p_userCompRef, p_userInfo.publicId, p_userInfo.privateId, p_userInfo.password); + + return v_status; + } + + /** + * @desc + * Postamble to handle user deregistration in roaming network from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @return true in case of successfull execution otherwise false + */ + function f_PO_user_roaming_deregistration(EquipmentUser p_userCompRef) runs on ImsTestCoordinator return boolean { + var boolean v_status := true; + + // TODO check roaming de-registration + v_status := f_mtc_userDeregister(p_userCompRef, "*"); // deregister all previous users + + return v_status; + } + + /** + * @desc Get the S-CSCF FQDN address of referenced EUT + * @return if a S-CSCF is avaiable, the domainname of the S-CSCF, + * otherwise error_string + */ + function f_GetEUTScscfAddress_1() return charstring { + return PX_SIP_MW_S_CSCF_IPADDR; // FIXME Add FQDN address in VxLTE PIXITs + } + function f_GetEUTScscfAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Mm][Ww]")){ + v_interface := i; + break; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + if(ispresent(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName)) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 5), pattern "[Ss][Cc][Ss][Cc][Ff]") + or match(substr(v_domainname, 0, 5), pattern "[Ss][Tt][Ee][Cc][Hh]")) { + v_ipinterfaceinfo := i; + break; + } + } + } + } else { + log ("S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].domainName; + } else { + log ("S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + /** + * @desc Get the S-CSCF FQDN address of referenced EUT + * @return if a S-CSCF is avaiable, the IP Address of the S-CSCF, + * otherwise error_string + */ + function f_GetEUTScscfIpAddress_1() return charstring { + return PX_SIP_MW_S_CSCF_IPADDR; + } + + function f_GetEUTScscfIpAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Mm][Ww]")){ + v_interface := i; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + if(ispresent(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName)) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 5), pattern "[Ss][Cc][Ss][Cc][Ff]") + or match(substr(v_domainname, 0, 5), pattern "[Ss][Tt][Ee][Cc][Hh]")) { + v_ipinterfaceinfo := i; + } + } + } + } else { + log ("S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].IpAddress; + } else { + log ("S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + /** + * @desc Get the P-CSCF FQDN address of referenced EUT + * @return if a P-CSCF is avaiable, the IP Address of the P-CSCF, + * otherwise error_string + */ + function f_GetEUTPcscfIpAddress_1() return charstring { + return PX_SIP_MW_P_CSCF_IPADDR; + } + + /** + * @desc Get the P-CSCF FQDN address of referenced EUT + * @return if a PCSCF is avaiable, the domainname of the PCSCF, + * otherwise error_string + */ + function f_GetEUTPcscfAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Gg][Mm]")){ + v_interface := i; + break; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + if(ispresent(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName)) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 5), pattern "[Pp][Cc][Ss][Cc][Ff]") + or match(substr(v_domainname, 0, 5), pattern "[Pp][Tt][Ee][Cc][Hh]")) { + v_ipinterfaceinfo := i; + } + } + } + } else { + log ("P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].domainName; + } else { + log ("P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + /** + * @desc Get the P-CSCF IP address of referenced EUT + * @return if a PCSCF is avaiable, the IP address of the PCSCF, + * otherwise error_string + */ + function f_GetEUTPcscfIpAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Gg][Mm]")){ + v_interface := i; + break; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + if(ispresent(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName)) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 5), pattern "[Pp][Cc][Ss][Cc][Ff]") + or match(substr(v_domainname, 0, 5), pattern "[Pp][Tt][Ee][Cc][Hh]")) { + v_ipinterfaceinfo := i; + } + } + } + } else { + log ("P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].IpAddress; + } else { + log ("P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + /** + * @desc Get the IBCF FQDN address of referenced EUT + * @return if a IBCF is avaiable, the domainname of the IBCF, + * otherwise error_string + */ + function f_GetEUTIbcfAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Mm][Ww]")){ + v_interface := i; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + if(ispresent(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName)) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 5), pattern "[Ii][Bb][Cc][Ff]")) { + v_ipinterfaceinfo := i; + } + } + } + } else { + log ("IBCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "IBCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].domainName; + } else { + log ("IBCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "IBCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + /** + * @desc Get the Public Id of referenced UE + * @param p_ProductIdx index of the product the UE belongs to + * @return PublicID of the UE of the productIdx + */ + function f_GetUEPublicId(integer p_ProductIdx) return charstring { + + var ImsUserInfo v_uePublicId := f_getSipUserId(p_ProductIdx); + + return v_uePublicId.publicId; + } + + + /** + * @desc Get the UE URI containing the IP address of referenced EUT + */ + function f_getUeIpAddress(integer p_ProductIdx) return template SipUrl { + // TODO + return mw_SIP_URI_Base; + } + + /** + * @desc Get the Public Id of referenced EUT + */ + function f_GetEUTPublicId(integer p_ProductIdx) return charstring { + // TODO + return "TODO"; + } + + /** + * @desc Get the AS server FQDN of referenced EUT + */ + function f_GetEUTASServerAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Ii][Ss][Cc]")){ + v_interface := i; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 2), pattern "[Aa][Ss]") + or match(substr(v_domainname, 2, 2), pattern "[Aa][Ss]") + or match(substr(v_domainname, 9, 2), pattern "[Aa][Ss]")) { + v_ipinterfaceinfo := i; + } + } + } else { + log ("AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].domainName; + } else { + log ("AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + group epc { + + /** + * @desc This function enable/disable power on radio antenna in order to trigger Network attachment/detach operation + * @param p_ueRef Reference to IMS UE user component + * @param p_enableRadio + * Set to true to trigger Network attachment processing, + * Set to false to trigger Network detach processing + * @param p_synchronousMode + * Set to true if this function shall return when Network attachment/detach operation in achieved (synchronous mode), + * Set to false if this function just initiates the Network attachment/detach operation (asynchronous mode) + * @return + * true in case of successfull execution of the trigger command + * otherwise false + * @verdict Unchanged + * @see ETSI TS 103 029 V3.1.1 - Clause 6.1 + */ + function f_mtc_userRadioEnabled(EquipmentUser p_ueRef, boolean p_enableRadio, boolean p_synchronousMode) + runs on TestCoordinator return boolean { + if ( p_enableRadio ) { + if ( p_synchronousMode ) { + f_mtc_triggerUserCommand ( p_ueRef, "start complete network attachment and return when done."); + } + else { + f_mtc_triggerUserCommand ( p_ueRef, "start complete network attachment, return immediately."); + } + } + else { + if ( p_synchronousMode ) { + f_mtc_triggerUserCommand ( p_ueRef, "start complete network detachment and return when done."); + } + else { + f_mtc_triggerUserCommand ( p_ueRef, "start complete network detachment, return immediately."); + } + } + return false; + } // End of function f_mtc_userRadioEnabled + + } // End of group epc + + } + + /** + * @desc Get the AS server IP Address of referenced EUT + */ + function f_GetEUTASServerIpAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Ii][Ss][Cc]")){ + v_interface := i; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 2), pattern "[Aa][Ss]") + or match(substr(v_domainname, 2, 2), pattern "[Aa][Ss]") + or (lengthof(v_domainname) >= 11 and match(substr(v_domainname, 9, 2), pattern "[Aa][Ss]"))) { + v_ipinterfaceinfo := i; + } + } + } else { + log ("AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].IpAddress; + } else { + log ("AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + group naptrComponent { + /** + * @desc + * This function waits for a given NAPTR message. + * @param p_monitor Reference of NAPTR component + * @param p_msg The NAPTR message + */ + function f_getNaptrMsg ( InterfaceMonitor p_monitor, in template (present) EnumMessage p_enum ) + runs on ImsInterfaceMonitor { + timer t_local := PX_MAX_MSG_WAIT; + var boolean v_loop := true; + var NAPTRmessage v_msg; + var SipMessage v_sip; + t_local.start; + while ( v_loop ) { + alt { + [] naptrPort.receive ( mw_EnumQuery_Base ) -> value v_msg { + if ( match (v_msg.enumMessage, p_enum)) { + t_local.stop; + setverdict(pass, self, "***f_getNaptrMsg: expected NAPTR message received***"); + log("### Forwarding message to MTC"); + v_sip := { naptrmessage := v_msg }; + icpPort.send ( v_sip ); + break; + } + t_local.start; + } + [] naptrPort.receive ( mw_EnumResponse_Base ) -> value v_msg { + if ( match (v_msg.enumMessage, p_enum)) { + t_local.stop; + setverdict(pass, self, "***f_getNaptrMsg: expected NAPTR message received***"); + log("### Forwarding message to MTC"); + v_sip := { naptrmessage := v_msg }; + icpPort.send ( v_sip ); + break; + } + t_local.start; + } + [] t_local.timeout { + setverdict(fail, self, "***f_getNaptrMsg: expected NAPTR message not received***"); + break; + } + [] naptrPort.receive { + t_local.start; + } + } + } + } + } + + group diameterComponent { + /** + * @desc + * This function waits for a given Diameter message. + * @param p_monitor Reference of Diameter component + * @param p_msg The Diameter message + * @param p_log The Log message + */ + function f_receiveDiameterMsg (in template (present) DIAMETER_MSG p_diameter, + in charstring p_log, in boolean p_bool ) + runs on DiameterInterfaceMonitor { + timer t_local := PX_MAX_MSG_WAIT; + var boolean v_loop := true; + log ( "### " & p_log ); + t_local.start; + while ( v_loop ) { + alt { + [] diameterPort.receive ( p_diameter ) { + t_local.stop; + if ( p_bool ) { + setverdict ( pass, self, "*** f_receiveDiameterMsg: expected Diameter message received***"); + break; + } + else { + setverdict ( fail, self, "*** f_receiveDiameterMsg: Diameter message received but not expected***"); + break; + } + } + [] t_local.timeout { + if ( p_bool ) { + setverdict ( fail, self, "*** f_receiveDiameterMsg: expected Diameter message not received***"); + break; + } + else { + setverdict ( pass, self, "*** f_receiveDiameterMsg: Diameter message not received as expected***"); + break; + } + } + [] diameterPort.receive { + t_local.start; + } + } + } + } //end f_receiveDiameterMsg + + /** + * @desc + * This function returns correct cx interface monitor in case of single Cx interface connection or + * set cxIH Interface monitor in case of two Cx interface connections. + * If single is set to true then only CxSH monitor is enabled. If single is set to false this monitor is set to CxIH monitor. + * @param p_singleCxInterface true - only one interface Cx with IH-SH/false - two separate interfaces one for SH(S-CSCF HSS) and another for IH(I-CSCF HSS) + */ + function f_getCxInterface(boolean p_singleCxInterface) runs on ImsTestCoordinator return DiameterInterfaceMonitor { + if (p_singleCxInterface) + { + return vc_vxlte_monitor_components.cxSH; + } + else + { + return vc_vxlte_monitor_components.cxIH; + } + }//end f_getCxInterface + + } //end group diameterComponent + + group sgiComponent { + /** + * @desc + * This function waits for a given Sgi message. + * @param p_bool True message expected, False message not expected + * @param p_log The Log message + */ + function f_receiveIpMsg ( boolean p_bool, in charstring p_log ) + runs on ImsInterfaceMonitor { + timer t_local := PX_MAX_MSG_WAIT; + log ( "### " & p_log ); + t_local.start; + alt { + [] sgiPort.receive { + t_local.stop; + if ( p_bool ) { + setverdict ( pass, self, "*** f_receiveIpMsg: expected Sgi message received ***"); + } + else { + setverdict ( fail, self, "*** f_receiveIpMsg: expected Sgi message not received ***"); + } + } + [] t_local.timeout { + if ( p_bool ) { + setverdict ( fail, self, "*** f_receiveIpMsg: Sgi message not received but expected ***"); + } + else { + setverdict ( pass, self, "*** f_receiveIpMsg: Sgi message not received as expected ***"); + } + } + } + } + } + + group interComponent { + /** + * @desc + * This function waits for a sip message send from a given monitor + * component to mtc. + * @param p_monitor Reference of Interface Monitor component + * @param p_msg The Sip message + */ + function f_getSipMsgFromMonitor(InterfaceMonitor p_monitor, out SipMessage p_msg) runs on ImsTestCoordinator { + timer t_local := PX_MAX_MSG_WAIT; + t_local.start; + alt { + []icpPort.receive (SipMessage:?) /*from p_monitor*/ -> value p_msg { + t_local.stop; + setverdict(pass, self, "***f_getMsgFromMonitor: SIP message received***"); + } + []t_local.timeout { + setverdict(fail, self, "***f_getMsgFromMonitor: SIP message not received***"); + } + } + } + /** + * @desc + * This function waits for a Diameter message send from a given monitor + * component to mtc. + * @param p_monitor Reference of Interface Monitor component + * @param p_msg The Diameter message + */ + function f_getDiameterMsgFromMonitor(InterfaceMonitor p_monitor, out DIAMETER_MSG p_msg) runs on ImsTestCoordinator { + timer t_local := PX_MAX_MSG_WAIT; + t_local.start; + alt { + []icpPort.receive (DIAMETER_MSG:?) /*from p_monitor*/ -> value p_msg { + t_local.stop; + setverdict(pass, self, "***f_getDiameterMsgFromMonitor: DIAMETER message received***"); + } + []t_local.timeout { + setverdict(fail, self, "***f_getDiameterMsgFromMonitor: DIAMETER message not received***"); + } + } + } + } + + group altsteps { + + altstep a_default(in charstring p_TP) runs on ImsInterfaceMonitor { + [] dPort.receive(Request:?) { + log(self, "### a_default: Request default for " & p_TP ); + repeat; + } + [] dPort.receive(Response:?) { + log(self, "### a_default: Response default for " & p_TP ); + repeat; + } + [] dPort.receive { + log(self, "*** a_default: Received/ignored unexpected message when waiting for message complying to " & p_TP ); + //setverdict(fail, self, "### YANN: If execution is here, this means that the message was not properly decoded due to sip/sdp-codets exception, check MMagic logs"); + //stop; // YANN: If execution is here, this means that the message was not properly decoded + repeat; + } + } + + altstep a_default_sip(in charstring p_TP) runs on SipInterfaceMonitor { + [] sipPort.receive(Request:?) { + log(self, "### a_default_sip: Request default for " & p_TP ); + repeat; + } + [] sipPort.receive(Response:?) { + log(self, "### a_default_sip: Response default for " & p_TP ); + repeat; + } + [] sipPort.receive { + log(self, "*** a_default_sip: Received/ignored unexpected message when waiting for message complying to " & p_TP ); + //setverdict(fail, self, "### YANN: If execution is here, this means that the message was not properly decoded due to sip/sdp-codets exception, check MMagic logs"); + //stop; // YANN: If execution is here, this means that the message was not properly decoded + repeat; + } + } + + altstep a_default_diameter(in charstring p_TP) runs on DiameterInterfaceMonitor { + [] diameterPort.receive(DIAMETER_MSG:?) { + log(self, "### a_default_diameter: Request default for " & p_TP ); + repeat; + } + [] diameterPort.receive { + log(self, "*** a_default_diameter: Received/ignored unexpected message when waiting for message complying to " & p_TP ); + //setverdict(fail, self, "### YANN: If execution is here, this means that the message was not properly decoded due to sip/sdp-codets exception, check MMagic logs"); + //stop; // YANN: If execution is here, this means that the message was not properly decoded + repeat; + } + } + + + /** + * @desc This altstep add one alternative checking for a very specifc SIP request. + If it matches then the conformance verdict is set to requested verdict + * @param p_message The expected SIP request + * @param p_verdict Verdict to be used in case of match + * @param p_tpId The test purpose identifier + * * @param p_forwardMtc indicates if the received request should be forwarded to mtc + */ + altstep a_receive_sipRequest( + in template Request p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on ImsInterfaceMonitor { + var Request v_message; + [not p_checkMessage] dPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_sipRequest: Received expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.request := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + [p_checkMessage] dPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_sipRequest: Checked expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.request := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + } + /** + * @desc This altstep add one alternative checking for a very specifc SIP request. + If it matches then the conformance verdict is set to requested verdict + * @param p_message The expected SIP request + * @param p_verdict Verdict to be used in case of match + * @param p_tpId The test purpose identifier + * * @param p_forwardMtc indicates if the received request should be forwarded to mtc + */ + altstep a_receive_sip_Request( + in template Request p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on SipInterfaceMonitor { + var Request v_message; + [not p_checkMessage] sipPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_sipRequest: Received expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.request := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + [p_checkMessage] sipPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_sipRequest: Checked expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.request := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + } + + /** + * @desc This altstep add one alternative checking for a very specifc SIP response. + If it matches then the conformance verdict is set to requested verdict + * @param p_message The expected SIP response + * @param p_verdict Verdict to be used in case of match + * @param p_tpId The test purpose identifier + * @param p_forwardMtc indicates if the received reponse should be forwarded to mtc + */ + altstep a_receive_sipResponse( + in template Response p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on ImsInterfaceMonitor { + var Response v_message; + [not p_checkMessage] dPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_sipResponse: Received expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.response := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + [p_checkMessage] dPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_sipResponse: Checked expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.response := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + } + /** + * @desc This altstep add one alternative checking for a very specifc SIP response. + If it matches then the conformance verdict is set to requested verdict + * @param p_message The expected SIP response + * @param p_verdict Verdict to be used in case of match + * @param p_tpId The test purpose identifier + * @param p_forwardMtc indicates if the received reponse should be forwarded to mtc + */ + altstep a_receive_sip_Response( + in template Response p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on SipInterfaceMonitor { + var Response v_message; + [not p_checkMessage] sipPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_sipResponse: Received expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.response := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + [p_checkMessage] sipPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_sipResponse: Checked expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.response := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + } + + /** + * @desc This altstep add one alternative checking for a very specifc DIAMETER message. + If it matches then the conformance verdict is set to requested verdict + * @param p_message The expected DIAMETER message + * @param p_verdict Verdict to be used in case of match + * @param p_tpId The test purpose identifier + * @param p_forwardMtc indicates if the received reponse should be forwarded to mtc + */ + altstep a_receive_diameter( + in template DIAMETER_MSG p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on DiameterInterfaceMonitor { + var DIAMETER_MSG v_message; + [not p_checkMessage] diameterPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_diameter: Received expected diameter MSG complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var DIAMETER_MSG v_msg; + v_msg := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + [p_checkMessage] diameterPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_diameter: Checked expected diameter_MSG complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var DIAMETER_MSG v_msg; + v_msg := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + } + + + + }// end group + + //function f_setInterfaceNameOnComponent(charstring p_name) runs on ImsInterfaceMonitor{ + function f_setInterfaceNameOnComponent(charstring p_name) runs on InterfaceMonitor{ + vc_interfaceName := p_name; + } + function f_setInterfaceInfoComponent(MonitorInterfaceInfo p_mii) runs on InterfaceMonitor{ + vc_interfaceName := p_mii.interfaceName; + vc_Interface := p_mii; + } + + group general_td_functions { + + /** + * @desc + * Generic function for reading and verifying messages on the + * interface associated to the ImsInterfaceMonitor instance. This + * functions works as follows: First, messages are skipped according + * to the p_skip template. The p_skip template contains a message + * template and a counter indicating the number of received messages + * matching the message template to be skipped. If not enough + * messages matching the message template arrive at the interface, + * the function fails after timout. Next, messages are consumed from + * the interface and matched against the p_passCriteria template + * list and the p_failCriteria template list. The function + * terminates with pass if a message is received matching a + * pass-template and terminates with fail if a fail-template + * matches. Matching against pass-templates occurs bevor matching + * agains fail-templates. If neither pass-templates nor + * fail-templates match, then the functions continues reading from + * the interface until a match arises, or timeout. The timeout value + * is given by PX_MAX_MSG_WAIT [5.0 seconds, FFS]. Finally, if + * p_forwardMtc is set to true, the last received message is stored + * to be fetched and used later by the main test component. Some + * special use cases: - Set p_skip.skipCounter to 0 to avoid + * skipping, i.e. no skippin - Set p_skip.skipCounter to 0 and + * p_skip.skipMessage to ? to skip exactly one message of any type + * will be skipped. - If the list of fail-templates is empty, then + * the function will wait for the first message maching a + * pass-message, or fail after timeout. + * @param p_passCriteria list of message templates which lead to pass + * @param p_failCriteria list of message templates which lead to fail + * @param p_skip + * Indicate how many messages from a specific sip template should be + * skipped prior to checking + * @param p_tpId The Test Purpose identifier + * @param p_forwardMtc + * indicate if the received Sip message should be forwarded to the + * mtc + * @param p_checkMessage + * indicate if the incomming message should only be checked + * (port.check) or consumed (port.receive). The check operation + * allows read access to the top element of incoming port queues + * without removing the top element from the queue. + */ + function f_imsIot_receive( // FIXME To be removed + in template SipMessageList p_passCriteria, + in template SipMessageList p_failCriteria, + in template SkipType p_skip, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on ImsInterfaceMonitor { + var integer v_size := lengthof(p_failCriteria); + var DefaultList v_defaultArray; + var integer i := 0; + var integer v_size_ai := lengthof(PX_AVAILABLE_INTERFACES); + +log ("### f_imsIot_receive: passCriteria=", p_passCriteria); +log ("### f_imsIot_receive: failCriteria=", p_failCriteria); + + // check if interface is available + for(i := 0; i < v_size_ai; i := i+1) { + if (PX_AVAILABLE_INTERFACES[i].interfaceName == vc_interfaceName) { + if (PX_AVAILABLE_INTERFACES[i].available == false) { + setverdict(inconc, self, "******f_imsIot_receive: Interface " & PX_AVAILABLE_INTERFACES[i].interfaceName & " not available and is not evaluated******" ); + } else { // Interface is available + v_defaultArray[0] := activate(a_default(p_tpId)); + f_activateImsSipDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage); + f_activateImsSipDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage); + f_gen_receive(p_tpId, p_skip); + + for (i := 0; i < lengthof(v_defaultArray); i := i + 1) { + deactivate(v_defaultArray[i]); + } + } + break; // Exit loop + } + } // 'for' loop + } + + /** + * @desc This function implements skipping of messages as well as timeout handling. + * Prior to calling this function the message to be cheked for should be added + * as defaults. + * This function is independent of a specific interface component. + * @param p_tpId The Test Purpose identifier + * @param p_skipCount Indicate how many messages should be skipped prior to checking + */ + function f_gen_receive( // FIXME To be removed + in charstring p_tpId, + in template SkipType p_skip + ) runs on ImsInterfaceMonitor { + var integer skipCount := valueof(p_skip.skipCount); + tc_wait.start; + + alt { + // preamble (consume prior messages) + [skipCount > 0 and ischosen(p_skip.skipMessage.request)] dPort.receive (p_skip.skipMessage.request) { + skipCount := skipCount - 1; + log("***f_gen_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [skipCount > 0 and ispresent(p_skip.skipMessage) and ischosen(p_skip.skipMessage.response)] dPort.receive (p_skip.skipMessage.response) { + skipCount := skipCount - 1; + log("***f_gen_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [] tc_wait.timeout { + f_setConformanceVerdict(inconc, "***f_gen_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****"); + } + } + + } + + /** + * @desc This function implements skipping of messages as well as timeout handling. + * Prior to calling this function the message to be cheked for should be added + * as defaults. + * This function is independent of a specific interface component. + * @param p_tpId The Test Purpose identifier + * @param p_skipCount Indicate how many messages should be skipped prior to checking + */ + function f_gen_sip_receive( + in charstring p_tpId, + in template SkipType p_skip + ) runs on SipInterfaceMonitor { + var integer skipCount := valueof(p_skip.skipCount); + tc_wait.start; + + alt { + // preamble (consume prior messages) + [skipCount > 0 and ischosen(p_skip.skipMessage.request)] sipPort.receive (p_skip.skipMessage.request) { + skipCount := skipCount - 1; + log("***f_gen_sip_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [skipCount > 0 and ispresent(p_skip.skipMessage) and ischosen(p_skip.skipMessage.response)] sipPort.receive (p_skip.skipMessage.response) { + skipCount := skipCount - 1; + log("***f_gen_sip_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [] tc_wait.timeout { + f_setConformanceVerdict(inconc, "***f_gen_sip_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****"); + } + } + + } + + /** + * @desc This function implements skipping of messages as well as timeout handling. + * Prior to calling this function the message to be cheked for should be added + * as defaults. + * This function is independent of a specific interface component. + * @param p_tpId The Test Purpose identifier + * @param p_skipCount Indicate how many messages should be skipped prior to checking + */ + function f_gen_diameter_receive( + in charstring p_tpId, + in template SkipTypeDiameter p_skip, + in boolean p_noDiameterMessageExpected + ) runs on DiameterInterfaceMonitor { + var integer skipCount := valueof(p_skip.skipCount); + tc_wait.start; + + alt { + // preamble (consume prior messages) + [skipCount > 0 and ispresent(p_skip.skipMessage)] diameterPort.receive (p_skip.skipMessage) { + skipCount := skipCount - 1; + log("***f_gen_diameter_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [p_noDiameterMessageExpected == true] tc_wait.timeout { + f_setConformanceVerdict(pass, "***f_gen_diameter_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****"); + } + [] tc_wait.timeout { + f_setConformanceVerdict(inconc, "***f_gen_diameter_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****"); + } + } + + } + + + /** + * @desc Activates for each entry in a expected IMS SIP message list a default + * for receiving that message and setting the verdict as desired + * @param p_default Reference to default array where deaults are to be added + * @param p_startIdx Index into default array after which references for + * defaults created in this function should be added + * @param p_list List of expected messages to be checked in default + * @param p_verdict Verdict to be set in case the incoming message matches + any of the expcted messages + * @param p_tpId Test Purpose identifir + */ + function f_activateImsSipDefaults( // FIXME To be removed + inout DefaultList p_default, + in integer p_startIdx, + in template SipMessageList p_list, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on ImsInterfaceMonitor { + var integer v_size := lengthof(p_list); + var integer v_idx := p_startIdx; + + for (var integer i := 0; i < v_size; i := i + 1) { + if (ischosen(p_list[i].request)) { + p_default[v_idx] := activate( + a_receive_sipRequest(p_list[i].request,p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } else { + p_default[v_idx] := activate( + a_receive_sipResponse(p_list[i].response,p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } + v_idx := v_idx + 1; + } +//log ("### f_activateImsSipDefaults: ended"); + } + + /** + * @desc Activates for each entry in a expected IMS SIP message list a default + * for receiving that message and setting the verdict as desired + * @param p_default Reference to default array where deaults are to be added + * @param p_startIdx Index into default array after which references for + * defaults created in this function should be added + * @param p_list List of expected messages to be checked in default + * @param p_verdict Verdict to be set in case the incoming message matches + any of the expcted messages + * @param p_tpId Test Purpose identifir + */ + function f_activateSipDefaults( + inout DefaultList p_default, + in integer p_startIdx, + in template SipMessageList p_list, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on SipInterfaceMonitor { + var integer v_size := lengthof(p_list); + var integer v_idx := p_startIdx; + + for (var integer i := 0; i < v_size; i := i + 1) { + if (ischosen(p_list[i].request)) { + //log ("### f_activateImsSipDefaults: Adding ", p_list[i].request); + p_default[v_idx] := activate( + a_receive_sip_Request(p_list[i].request,p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } else { + //log ("### f_activateImsSipDefaults: Adding ", p_list[i].response); + p_default[v_idx] := activate( + a_receive_sip_Response(p_list[i].response,p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } + v_idx := v_idx + 1; + } + //log ("### f_activateImsSipDefaults: ended"); + } + + /** + * @desc Activates for each entry in a expected IMS DIAMETER message list a default + * for receiving that message and setting the verdict as desired + * @param p_default Reference to default array where deaults are to be added + * @param p_startIdx Index into default array after which references for + * defaults created in this function should be added + * @param p_list List of expected messages to be checked in default + * @param p_verdict Verdict to be set in case the incoming message matches + any of the expcted messages + * @param p_tpId Test Purpose identifir + */ + function f_activateDiameterDefaults( + inout DefaultList p_default, + in integer p_startIdx, + in template DiameterMessageList p_list, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on DiameterInterfaceMonitor { + var integer v_size := lengthof(p_list); + var integer v_idx := p_startIdx; + + for (var integer i := 0; i < v_size; i := i + 1) { + if (ispresent(p_list[i])) { + log("Function f_activateDiameterDefaults ispresent:",p_list[i],i); + p_default[v_idx] := activate( + a_receive_diameter(p_list[i],p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } + else { + log("Function f_activateDiameterDefaults else statement:",p_list[i]); + } +// else { +// p_default[v_idx] := activate( +// a_receive_diameter_Response(p_list[i].response,p_verdict, p_tpId, p_forwardMtc, p_checkMessage) +// ); +// } + v_idx := v_idx + 1; + } +//log ("### f_activateImsSipDefaults: ended"); + } + + + /** + * @desc + * Generic function for reading and verifying messages on the + * interface associated to the ImsInterfaceMonitor instance. This + * functions works as follows: First, messages are skipped according + * to the p_skip template. The p_skip template contains a message + * template and a counter indicating the number of received messages + * matching the message template to be skipped. If not enough + * messages matching the message template arrive at the interface, + * the function fails after timout. Next, messages are consumed from + * the interface and matched against the p_passCriteria template + * list and the p_failCriteria template list. The function + * terminates with pass if a message is received matching a + * pass-template and terminates with fail if a fail-template + * matches. Matching against pass-templates occurs bevor matching + * agains fail-templates. If neither pass-templates nor + * fail-templates match, then the functions continues reading from + * the interface until a match arises, or timeout. The timeout value + * is given by PX_MAX_MSG_WAIT [5.0 seconds, FFS]. Finally, if + * p_forwardMtc is set to true, the last received message is stored + * to be fetched and used later by the main test component. Some + * special use cases: - Set p_skip.skipCounter to 0 to avoid + * skipping, i.e. no skippin - Set p_skip.skipCounter to 0 and + * p_skip.skipMessage to ? to skip exactly one message of any type + * will be skipped. - If the list of fail-templates is empty, then + * the function will wait for the first message maching a + * pass-message, or fail after timeout. + * @param p_passCriteria list of message templates which lead to pass + * @param p_failCriteria list of message templates which lead to fail + * @param p_skip + * Indicate how many messages from a specific sip template should be + * skipped prior to checking + * @param p_tpId The Test Purpose identifier + * @param p_forwardMtc + * indicate if the received Sip message should be forwarded to the + * mtc + * @param p_checkMessage + * indicate if the incomming message should only be checked + * (port.check) or consumed (port.receive). The check operation + * allows read access to the top element of incoming port queues + * without removing the top element from the queue. + */ + function f_Iot_Sip_receive( + in template SipMessageList p_passCriteria, + in template SipMessageList p_failCriteria, + in template SkipType p_skip, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on SipInterfaceMonitor { + var integer v_size := lengthof(p_failCriteria); + var DefaultList v_defaultArray; + var integer i := 0; + var integer v_size_ai := lengthof(PX_AVAILABLE_INTERFACES); + + //log ("### f_Iot_Sip_receive: passCriteria=", p_passCriteria); + //log ("### f_Iot_Sip_receive: failCriteria=", p_failCriteria); + + // check if interface is available + if(not((isvalue(vc_Interface)) /*and (vc_interfaceName=="")*/)){ + setverdict(inconc, self, "******f_Iot_Sip_receive: Interface " & vc_interfaceName & " not available and is not evaluated******" ); + }else{// Interface is available + v_defaultArray[0] := activate(a_default_sip(p_tpId)); + f_activateSipDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage); + f_activateSipDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage); + f_gen_sip_receive(p_tpId, p_skip); + + for (i := 0; i < lengthof(v_defaultArray); i := i + 1) { + deactivate(v_defaultArray[i]); + } + + } + + } + + /** + * @desc + * Generic function for reading and verifying messages on the + * interface associated to the ImsInterfaceMonitor instance. This + * functions works as follows: First, messages are skipped according + * to the p_skip template. The p_skip template contains a message + * template and a counter indicating the number of received messages + * matching the message template to be skipped. If not enough + * messages matching the message template arrive at the interface, + * the function fails after timout. Next, messages are consumed from + * the interface and matched against the p_passCriteria template + * list and the p_failCriteria template list. The function + * terminates with pass if a message is received matching a + * pass-template and terminates with fail if a fail-template + * matches. Matching against pass-templates occurs bevor matching + * agains fail-templates. If neither pass-templates nor + * fail-templates match, then the functions continues reading from + * the interface until a match arises, or timeout. The timeout value + * is given by PX_MAX_MSG_WAIT [5.0 seconds, FFS]. Finally, if + * p_forwardMtc is set to true, the last received message is stored + * to be fetched and used later by the main test component. Some + * special use cases: - Set p_skip.skipCounter to 0 to avoid + * skipping, i.e. no skippin - Set p_skip.skipCounter to 0 and + * p_skip.skipMessage to ? to skip exactly one message of any type + * will be skipped. - If the list of fail-templates is empty, then + * the function will wait for the first message maching a + * pass-message, or fail after timeout. + * @param p_passCriteria list of message templates which lead to pass + * @param p_failCriteria list of message templates which lead to fail + * @param p_skip + * Indicate how many messages from a specific sip template should be + * skipped prior to checking + * @param p_tpId The Test Purpose identifier + * @param p_forwardMtc + * indicate if the received Diameter message should be forwarded to the + * mtc + * @param p_checkMessage + * indicate if the incomming message should only be checked + * (port.check) or consumed (port.receive). The check operation + * allows read access to the top element of incoming port queues + * without removing the top element from the queue. + */ + function f_Iot_Diameter_receive( + in template DiameterMessageList p_passCriteria, + in template DiameterMessageList p_failCriteria, + in template SkipTypeDiameter p_skip, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage, + in boolean p_noDiameterMessageExpected := false + ) runs on DiameterInterfaceMonitor { + var integer v_size := lengthof(p_failCriteria); + var DefaultList v_defaultArray; + var integer i := 0; + var integer v_size_ai := lengthof(PX_AVAILABLE_INTERFACES); + + log ("### f_Iot_Diameter_receive: passCriteria=", p_passCriteria); + log ("### f_Iot_Diameter_receive: failCriteria=", p_failCriteria); + + // check if interface is available + if(not((isvalue(vc_Interface)) /*and (vc_interfaceName=="")*/)){ + setverdict(inconc, self, "******f_Iot_Diameter_receive: Interface " & vc_interfaceName & " not available and is not evaluated******" ); + }else{// Interface is available + v_defaultArray[0] := activate(a_default_diameter(p_tpId)); + f_activateDiameterDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage); + f_activateDiameterDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage); + f_gen_diameter_receive(p_tpId, p_skip, p_noDiameterMessageExpected); + + for (i := 0; i < lengthof(v_defaultArray); i := i + 1) { + deactivate(v_defaultArray[i]); + } + + } + +// for(i := 0; i < v_size_ai; i := i+1) { +// if (PX_AVAILABLE_INTERFACES[i].interfaceName == vc_interfaceName) { +// if (PX_AVAILABLE_INTERFACES[i].available == false) { +// setverdict(inconc, self, "******f_imsIot_receive: Interface " & PX_AVAILABLE_INTERFACES[i].interfaceName & " not available and is not evaluated******" ); +// } else { // Interface is available +// v_defaultArray[0] := activate(a_default(p_tpId)); +// f_activateImsSipDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage); +// f_activateImsSipDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage); +// f_gen_receive(p_tpId, p_skip); +// +// for (i := 0; i < lengthof(v_defaultArray); i := i + 1) { +// deactivate(v_defaultArray[i]); +// } +// } +// break; // Exit loop +// } +// } // 'for' loop + } + + }//end group + + + group misc { + + /** + * @desc + * This function generate a charstring with a given length used as + * message body. + * @param p_length length of the message body + * @return message body (charstring) + */ + function f_getMessageBody(in integer p_length) return charstring { + var charstring v_rtn := ""; + + for(var integer i := 0; i < p_length; i:=i+1) { + v_rtn := v_rtn & "a"; + } + + return v_rtn; + } + + function f_getContactAddr(in Contact contact) return SipUrl { + var SipUrl v_SipUrl; + + var ContactAddress addr := contact.contactBody.contactAddresses[0]; + + if (ischosen (addr.addressField.nameAddr)) { + v_SipUrl := addr.addressField.nameAddr.addrSpec; + } else { + v_SipUrl := addr.addressField.addrSpecUnion; + } + + return (v_SipUrl); + } + + } + +} \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_GM.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..3e23e66f440f70f198f76d6975b3f3db9925f3cd --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_GM.ttcn @@ -0,0 +1,5078 @@ +/** + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at GM interface + */ + +module AtsImsIot_TP_behavior_GM { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Templates_GM all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + import from AtsImsIot_PIXITS all; + + group imsMessages { + + /** + * @desc Verify that the P-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ContentLength indicating value greater than 1300 bytes + * ; + * to the IMS_P_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity receives the MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ContentLength indicating value greater than 1300 bytes + * ; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * PChargingVector containing + * orig_ioi indicating value PX_OPERATOR_ID_A, + * term_ioi indicating value PX_OPERATOR_ID_B, + * not PAccessNetworkInfo + * ;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mdw_MESSAGE_1500c) + }, // FIXME CallId and more can be checked + { mw_SipRequest(mw_MESSAGE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_MESSAGE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK_Base) + }, // FIXME CallId and more can be checked + { }, + {0, omit}, + "TP_GM_PCSCF_MESSAGE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_MESSAGE_01 + + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the UE_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "", + * not term_ioi, + * not SecurityClient + * ;; + * to the IMS_P_CSCF_A entity + * and the UE_A entity receives an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_01( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_01 + + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * WwwAuthenticate containing + * Digest,, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "", + * not term_ioi, + * not SecurityClient, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth";; + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_01( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01 + + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_02 + + /** + * @desc Verify that the P-CSCF successfully processes a full emergency registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstRegistration + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02 + + /** + * @desc Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + log("v_sip", v_sip); + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_03 + + /** + * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case invalid credentials sent from UE. (Unsuccessful emergency registration). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "Invalid credentials", + * Contact indicating value "sos"; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, // FIXME indicating value "Invalid credentials" + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + log("v_sip", v_sip); + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03 + + + function f_mtc_check_TP_GM_PCSCF_REGISTER_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_04( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_04 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_04 + + /** + * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case the UE and P-CSCF does not support GPRS-IMS-Bundled authentication. (Unsuccessful emergency registration). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_B and + * the UE_A entity not isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value GPRS_IMS_Bundled_authentication, + * Contact indicating value "sos"; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_B entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * MessageBody containing + * XML containing + * ims_3gpp_element indicating value anonymous_emergencycall;;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_04( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other // FIXME not indicating value GPRS_IMS_Bundled_authenticatio + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_04 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04 + + function f_mtc_check_TP_GM_PCSCF_REGISTER_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_05( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_05 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_05 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_05 + + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_05( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_05 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_420BadExtension( + v_sip.request.msgHeader.cSeq, + mw_WwwAuthenticate, + mw_MBody_MIME_Ims3gpp( + *, + ? // FIXME XML message body + ) + )), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_05 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToDetachUser + * } + * then { + * the UE_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check first DeREGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_07( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_07 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check DeREGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_07 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_07 + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToDetachUser + * } + * then { + * the UE_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_P_CSCF_A entity and + * the UE_A entity receives a BYE + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_10( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_REGISTER_Request_Base) + //AXR mw_SipRequest(mw_BYE_Base), + }, + {}, + {0, omit}, + "TP_GM_PCSCF_REGISTER_10", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_10 + + } // End of group imsDeRegistration + + group imsSubscribe { + + /** + * @desc Verify that the P-CSCF successfully processes a SUBSCRIBE. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a SUBSCRIBE + * } + * then { + * the IMS_P_CSCF_A entity receives an SUBSCRIBE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_SUBSCRIBE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_SUBSCRIBE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_SUBSCRIBE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_01 + + function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_02( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ +// var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); +// var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_SUBSCRIBE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) +// mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), +// mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + {mw_SipRequest(mw_SUBSCRIBE_Request_Base)}, + {0, omit}, + "TP_GM_PCSCF_SUBSCRIBE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_02 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_02 + + } // End of group imsSubscribe + + group imsNotify { + + /** + * @desc Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a NOTIFY + * } + * then { + * the IMS_P_CSCF_A entity sends an NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_NOTIFY_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the NOTIFY + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_NOTIFY_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_NOTIFY_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_NOTIFY_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_NOTIFY_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_NOTIFY_01 + + } // End of group imsNotify + + group imsPrack { + + /** + * @desc Verify that the P-CSCF successfully processes a PRACK in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a PRACK + * } + * then { + * the IMS_P_CSCF_A entity sends an PRACK + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_PRACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + + var SipMessage v_sip; + + // Check the PRACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_PRACK_01( + -, + -, // FIXME Set expected value + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_PRACK_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_PRACK_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_PRACK_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_PRACK_01 + + } // End of group imsPrack + + group imsInvite { + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend an INVITE + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_01( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### GM p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, // see 5.1.6.8.2 7) + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getTelUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_01( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_TelUrl(mw_SipUrl_Anonymous.components.sip.userInfo.userOrTelephoneSubscriber), + mw_To_AddrUnion_TelUrl(v_psap.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_ECO_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### GM p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend an INVITE + * } + * then { + * the IMS_P_CSCF_B entity sends an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_02( + PX_URN_SERVICE_SOS, + ( + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_02 + + /** + * @desc "Verify that the P-CSCF successfully receives an initial emergency INVITE from an emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * // TODO Geolocation header maybe added later, check! + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_02( + PX_URN_SERVICE_SOS, + ( + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId, v_userInfoA.domain), + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_ECO_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02 + + function f_mtc_check_TP_GM_PCSCF_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_INVITE_03( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_03 + + /** + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_03( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_ECO_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03 + + + /** + * @desc Verify that the P-CSCF successfully receives an initial eCall type INVITE from an emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_04( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_04 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 + + /** + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.4" + * Config Id CF_VoLTE_RMI_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * // This implies that the UE is currently attached and registered + * to its home operator's network and the IP-CAN does not define emergency bearers + * see 5.1.6.1 3rd paragraph // + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_05( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_ECO_INVITE_05 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_05 + + + + /** + * @desc Send out INVITE message with incorrect urn + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVALID_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + + var SipUrl v_invalidUrnServiceSos := { + scheme := "sip", + components := {urn := { + namespaceId := "service", + namespaceSpecificString := "sosxxxx" + } + }, + urlParameters := omit, + headers := omit + } + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_01( + v_invalidUrnServiceSos, + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + - + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "f_mtc_check_TP_GM_PCSCF_ECO_INVALID_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVALID_INVITE_01 + + function f_mtc_check_TP_GM_PCSCF_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_INVITE_04( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_04 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_01( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_B entity previouslyEstablishedCallWith the UE_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives an ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends an ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_02( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_02( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoA.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_02 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_02 + + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_03( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_03 + + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_04( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_04 + + /** + * @desc Verify that the P-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_NGC_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_NGC_INVITE_01( + PX_URN_SERVICE_SOS, + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_NGC_INVITE_01 + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 100_Trying + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity forwards the 100_Trying + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_01 + + function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 100_Trying containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity receives a 100_Trying containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_100Trying_02( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_02 + + function f_mtc_check_TP_GM_PCSCF_100Trying_03( // FIXME RMI To be reviewed + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_03 + + function f_mtc_check_TP_GM_PCSCF_100Trying_04( // FIXME RMI To be reviewed + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_04 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_P_CSCF_B entity + * + * } + * then { + * the IMS_P_CSCF_B entity receives a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_180RINGING_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_02 + + function f_mtc_check_TP_GM_PCSCF_180RINGING_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_03 + + function f_mtc_check_TP_GM_PCSCF_180RINGING_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_04 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the P-CSCF successfully processes a 183 (SessionProgress) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 183 (SessionProgress) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_P_CSCF_B entity + * + * } + * then { + * the IMS_P_CSCF_B entity receives a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02 + + + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03 + + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_04 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_02 + + function f_mtc_check_TP_GM_PCSCF_200OK_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_03 + + function f_mtc_check_TP_GM_PCSCF_200OK_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_04 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_01 + + function f_mtc_check_TP_GM_PCSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_ACK_01 + + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity hasAchieveInitialINVITE + * } + * then { + * the UE_B entity receives an ACK containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_B entity + * } + */ + function f_mtc_check_TP_GM_PCSCF_ACK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_02( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_02 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_02 + + function f_mtc_check_TP_GM_PCSCF_ACK_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_03( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_03 + + function f_mtc_check_TP_GM_PCSCF_ACK_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_04( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_04 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a BYE for an emergency call. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_B entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_02 + + function f_mtc_check_TP_GM_PCSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_BYE_02 + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Network initiated). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isNoLongerAvailable + * } + * then { + * the IMS_P_CSCF_A entity sends a BYE containing + * From indicating value PX_S_CSCF_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_03( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_03 + + function f_mtc_check_TP_GM_PCSCF_BYE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_04( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_04 + + function f_mtc_check_TP_GM_PCSCF_BYE_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_05( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_05 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_05 + + function f_mtc_check_TP_GM_PCSCF_BYE_06( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_06( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_06 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_06 + + } // End of group imsBye + + group ims200OkBye { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_02 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_02 + + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_03 + + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_04 + + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_05", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_05 + + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_06( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_06", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_06 + + } // End of group ims200OkBye + + group imsCancel { + + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_01 + + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity hasAchievedInitialEmergencyINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_EMC_CANCEL_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01 + + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_B entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_02( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_02 + + function f_mtc_check_TP_GM_PCSCF_CANCEL_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_03( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_03 + + function f_mtc_check_TP_GM_PCSCF_CANCEL_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_04( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_04 + + } // End of group imsCancel + + group ims200OkCancel { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_02 + + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_03 + + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_04 + + } // End of group ims200OkCancel + + group imsBusy { + + /** + * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a 486_INVITE + * } + * then { + * the IMS_P_CSCF_A entity sends a 486_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_486INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + ( + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ), + mw_SipResponse( + mw_600BusyEverywhere( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a 486_INVITE + * } + * then { + * the IMS_P_CSCF_B entity receives a CANCEL containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_486INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + ( + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ), + mw_SipResponse( + mw_600BusyEverywhere( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_02 + + function f_mtc_check_TP_GM_PCSCF_486INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_03 + + function f_mtc_check_TP_GM_PCSCF_486INVITE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_04 + + } // End of group imsBusy + + group imsRequestTermination { + + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_01 + + function f_mtc_check_TP_GM_PCSCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_487INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_B entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_487INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_02 + + function f_mtc_check_TP_GM_PCSCF_487INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_03 + + function f_mtc_check_TP_GM_PCSCF_487INVITE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_04 + + } // End of group imsRequestTermination + + group imsAlternateService { + + function f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_3XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_ECO_380ALTSRV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_380ALTSRV_01 + + function f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_3XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_ECO_380ALTSRV_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_380ALTSRV_02 + + } // End of group imsTemporaryUnavailable + + group imsTemporaryUnavailable { + + function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + + + group imsINFO{ + + /** + * @desc Verify that the P-CSCF sends an INFO request demanding a transfer of updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + */ + function f_mtc_check_TP_GM_PCSCF_NGC_INFO_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_NGC_INFO_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_NGC_INFO_01 + + /** + * @desc Verify that the P-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_NGC_INFO_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_NGC_INFO_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_NGC_INFO_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_NGC_INFO_02 + + }// End of group imsINFO + + + + +} // End of module AtsImsIot_TP_behavior_GM \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_IC.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_IC.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..0c90b1e370a41caa8ffd0e25232e9dae8c4238c8 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_IC.ttcn @@ -0,0 +1,1699 @@ +/* + * @author STF 574, TTF006 + * @version $Id$ + * @desc This module provides the TP behaviour functions at IC interface + */ + +module AtsImsIot_TP_behavior_IC +{ + + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIms_UpperTester all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + + import from LibSip_Common all; + + import from AtsImsIot_Functions all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SDPTypes all; + + import from AtsImsIot_Templates_IC all; + + + group g_IBCF { + + group g_IBCF_GC { + + /** + * @desc + * TP_IMS_4002_01 in CFW step 3 (MESSAGE)
ensure that {
+ * when { UE_A sends a MESSAGE to UE_B containing a Message_Body + * greater than 1300 bytes }
then { IMS_B receives the MESSAGE + * containing the Message_Body greater than 1300 bytes }
} + * @remark source function f_mtc_check_TP_IMS_4002_01_ic + */ + function f_mtc_check_TP_IC_IBCF_GC_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mdw_TP_IC_IBCF_GC_01) + }, + { mw_SipRequest(mw_MESSAGE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_GC_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_IC_IBCF_GC_01 + + } // group g_IBCF_GC + + group g_IBCF_INVITE { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_01_ic + */ + function f_mtc_check_TP_IC_IBCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_IC_IBCF_INVITE_01( + ( + mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_INVITE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_IC_IBCF_INVITE_01 + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_INVITE_02 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_02_ic + */ + function f_mtc_check_TP_IC_IBCF_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_IC_IBCF_INVITE_02( + mw_SIP_URI_Base, + mw_TEL_URI_Base + ) + ) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_INVITE_02 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_IC_IBCF_INVITE_02 + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_INVITE_03 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_04_ic + */ + function f_mtc_check_TP_IC_IBCF_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_IC_IBCF_INVITE_03( + mw_TEL_URI_Base, + mw_SIP_URI_Base + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_INVITE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_IC_IBCF_INVITE_03 + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5046_01_ic + */ + function f_mtc_check_TP_IC_IBCF_INVITE_04( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SipUrl v_pcscfEutAUrl := ?; //mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); + var template SipUrl v_pcscfEutAIpUrl := mw_SipUrl_Host(f_GetEUTPcscfIpAddress(PX_EUT_A)); + var ImsUserInfo v_user := f_getAnyValidUser(PX_EUT_B); + var template SipUrl v_UserEutBUrl := mw_SipUrl_Host(v_user.domain); + var SipMessage v_sip := {request := valueof(m_INVITE_Dummy)}; + var Route v_Route; + var template Route vt_pcscfRoute := { + fieldName := ROUTE_E, + routeBody := ({mw_routeBody(v_pcscfEutAUrl), *}, + {mw_routeBody(v_pcscfEutAIpUrl), *} ) + }; + var Via v_Via; + var template Via vt_pcscfVia := { + fieldName := VIA_E, + viaBody := ({mw_ViaBody_interface(v_pcscfEutAUrl.components.sip.hostPort), *}, + {mw_ViaBody_interface(v_pcscfEutAIpUrl.components.sip.hostPort), *} ) + }; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest((mdw_TP_IC_IBCF_INVITE_04((v_pcscfEutAUrl, v_pcscfEutAIpUrl), v_UserEutBUrl)))}, + {mw_SipRequest(mw_INVITE_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if(ispresent(v_sip.request.msgHeader.route)) { + v_Route := v_sip.request.msgHeader.route; + } + if(ispresent(v_sip.request.msgHeader.via)) { + v_Via := v_sip.request.msgHeader.via; + } + + // Check Route header + if (match(v_Route, vt_pcscfRoute)) { + f_setIotVerdictFAIL("TP_IC_IBCF_INVITE_04"); + } + // Check Via header + if (match(v_Via, vt_pcscfVia)) { + } else { + f_setIotVerdictFAIL("TP_IC_IBCF_INVITE_04"); + } + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_INVITE_05 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_02_ic + */ + function f_mtc_check_TP_IC_IBCF_INVITE_05( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var charstring v_UEB_PublicId := f_GetUEPublicId(PX_EUT_B); //from + var template SipUrl v_eutAUri := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); //to + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_INVITE_05(v_eutAUri, v_UEB_PublicId))}, + {mw_SipRequest(mw_INVITE_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_INVITE_05", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_INVITE + + group g_IBCF_REINVITE { + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REINVITE_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5106_01_ic + */ + function f_mtc_check_TP_IC_IBCF_REINVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false //in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SipUrl v_SCSCF_A_Uri := ( + mw_SipUrl_Host( + f_GetEUTScscfIpAddress_1()//f_GetEUTScscfAddress(PX_EUT_A) + ), + mw_SipUrl_Host( + f_GetEUTScscfIpAddress_1()//f_GetEUTScscfIpAddress(PX_EUT_A) + ) + ); +// var template SkipType v_skip := {0, omit}; +// +// if(p_skipCount > 0) { +// v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; +// } + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_REINVITE_01(v_SCSCF_A_Uri))}, + {mw_SipRequest(mw_INVITE_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_REINVITE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + } // end group g_IBCF_REINVITE + + + group g_IBCF_100TRY { + + /** + * @desc Starts monitor component behavior for TP_IMS_5070_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5070_01_ic + */ + function f_mtc_check_TP_IC_IBCF_100TRY_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_100Trying_Base)}, + {mw_SipResponse(m_Response_Dummy)}, + {0, omit}, + "TP_IC_IBCF_100TRY_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior for TP_IMS_5070_02 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5070_01_ic + */ + function f_mtc_check_TP_IC_IBCF_100TRY_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage/*, + integer p_skipCount*/ + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_100Trying_Base)}, + {mw_SipResponse(m_Response_Dummy)}, + {0, omit}, + "TP_IC_IBCF_100TRY_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + }} + + } // end group g_IBCF_100TRY + + group g_IBCF_180RESP { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5115_01_ic + */ + function f_mtc_check_TP_IC_IBCF_180RESP_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 180 response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_180RESP_01/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + {0, omit}, + "TP_IC_IBCF_180RESP_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5131_01_ic + */ + function f_mtc_check_TP_IC_IBCF_180RESP_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 180 response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_180RESP_02/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + {0, omit}, + "TP_IC_IBCF_180RESP_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + } // end group g_IBCF_180RESP + + group g_IBCF_1XXRESP { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5115_03_ic + */ + function f_mtc_check_TP_IC_IBCF_1XXRESP_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 1xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_1XXRESP_01(mw_SIP_URI_Base, mw_TEL_URI_Base)/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(m_Response_Dummy) }, // FIXME Create mdw_1XX_Base + {0, omit}, + "TP_IC_IBCF_1XXRESP_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_1XXRESP_01 + */ + function f_mtc_check_TP_IC_IBCF_1XXRESP_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 1xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_1XXRESP_02(?,?,mw_SIP_URI_Base, ?)/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(m_Response_Dummy) }, // FIXME Create mdw_1XX_Base + {0, omit}, + "TP_IC_IBCF_1XXRESP_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_1XXRESP_01 + */ + function f_mtc_check_TP_IC_IBCF_1XXRESP_03( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template RecordRoute v_recordRoute := ?; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_183RESP_01(mw_SIP_URI_Base, mw_TEL_URI_Base))}, +// {mw_SipResponse(mdw_TP_IC_IBCF_1XXRESP_02(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mw_183SessionProgress_Base)}, + {0, omit}, + "TP_IC_IBCF_1XXRESP_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + function f_mtc_check_TP_IC_IBCF_1XXRESP_03b( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template RecordRoute v_recordRoute := ?; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_1XXRESP_02(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mw_180Ringing_Base)}, + {0, omit}, + "TP_IC_IBCF_1XXRESP_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_1XXRESP_02 + */ + function f_mtc_check_TP_IC_IBCF_1XXRESP_04( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template RecordRoute v_recordRoute := ?; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_1XXRESP_02(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mw_180Ringing_Base)}, + {0, omit}, + "TP_IC_IBCF_1XXRESP_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5115_03_ic + */ + function f_mtc_check_TP_IC_IBCF_183RESP_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 1xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_183RESP_01(mw_SIP_URI_Base, mw_TEL_URI_Base)/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(m_Response_Dummy) }, // FIXME Create mdw_1XX_Base + {0, omit}, + "TP_IC_IBCF_183RESP_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + } // end group g_IBCF_1XXRESP + + group g_IBCF_2XXRESP { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5115_02_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 2xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_2XXRESP_01/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(mdw_2XX_Base) }, + {0, omit}, + "TP_IC_IBCF_2XXRESP_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5115_04_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 2xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_2XXRESP_02(mw_SIP_URI_Base, mw_TEL_URI_Base)/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(mdw_2XX_Base) }, + {0, omit}, + "TP_IC_IBCF_2XXRESP_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5131_02_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 2xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_2XXRESP_03/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(mdw_2XX_Base) }, + {0, omit}, + "TP_IC_IBCF_2XXRESP_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_2XXRESP_04 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5121_02_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_04( + SipInterfaceMonitor p_monitorCompRef, + integer p_skipCount := 0 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_TP_IC_IBCF_2XXRESP_04)}, + {mw_SipResponse(mdw_2XX_Base)}, + {p_skipCount, omit}, + "TP_IC_IBCF_2XXRESP_04", + false, + false + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_2XXRESP_05 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5121_02_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_05( + SipInterfaceMonitor p_monitorCompRef, + integer p_skipCount + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var template RecordRoute v_recordRoute := ?; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_TP_IC_IBCF_2XXRESP_05(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mdw_2XX_Base)}, + {p_skipCount, mw_SipResponse(mdw_2XX_Base)}, + "TP_IC_IBCF_2XXRESP_05", + false, + false + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_2XXRESP_06 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_2XXRESP_05 + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_06( + SipInterfaceMonitor p_monitorCompRef, + integer p_skipCount + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var template RecordRoute v_recordRoute := ?; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_TP_IC_IBCF_2XXRESP_05(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mdw_2XX_Base)}, + {p_skipCount, mw_SipResponse(mdw_2XX_Base)}, + "TP_IC_IBCF_2XXRESP_06", + false, + false + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_2XXRESP_07 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5121_02_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_07( + SipInterfaceMonitor p_monitorCompRef, + integer p_skipCount :=0 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var template RecordRoute v_recordRoute := *; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_TP_IC_IBCF_2XXRESP_07(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mdw_2XX_Base)}, + {p_skipCount, mw_SipResponse(mdw_2XX_Base)}, + "TP_IC_IBCF_2XXRESP_07", + false, + false + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_2XXRESP + + + group g_IBCF_ACK { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5107_02_ic + */ + function f_mtc_check_TP_IC_IBCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first ACK request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_IC_IBCF_ACK_01(?, ?)/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_ACK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + + } // end group g_IBCF_ACK + + group g_IBCF_BYE { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5107_01_ic + */ + function f_mtc_check_TP_IC_IBCF_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A) + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mdw_TP_IMS_5107_01_ic(?, mw_SipUrl_Host(v_EUT_A_Addr))) }, + { mw_SipRequest(mw_BYE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + function f_mtc_check_TP_IC_IBCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A) + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mdw_TP_IMS_5107_01_ic(?, mw_SipUrl_Host(v_EUT_A_Addr))) }, + { mw_SipRequest(mw_BYE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_BYE_01 + */ + function f_mtc_check_TP_IC_IBCF_BYE_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mdw_TP_IMS_5107_01_ic(?, mw_SipUrl_Host(v_EUT_A_Addr))) }, + { mw_SipRequest(mw_BYE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base(c_statusLine200, ?, ?))}, + {}, + {0,omit}, + "TP_IC_IBCF_BYE_02_200OK", + false, + false + ) + ); + p_monitorCompRef.done; + } + } //function + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_BYE_01 + */ + function f_mtc_check_TP_IC_IBCF_BYE_03( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A) + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IMS_5107_01_ic(?, mw_SipUrl_Host(v_EUT_A_Addr)))}, + {}, + {0, omit}, + "TP_IC_IBCF_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base(c_statusLine200, ?, ?))}, + {}, + {0,omit}, + "TP_IC_IBCF_BYE_01_200OK", + false, + false + ) + ); + p_monitorCompRef.done; + + }} //function + + } // end group g_IBCF_BYE + + group g_IBCF_CANCEL { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5107_03_ic + */ + function f_mtc_check_TP_IC_IBCF_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + var template SipUrl v_scscfImsAUrl := mw_SipUrl_Host(f_GetEUTScscfAddress_1()/*f_GetEUTScscfAddress(PX_EUT_A)*/); + + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { +// mw_SipRequest(mdw_TP_IC_IBCF_CANCEL_01(?, v_scscfImsAUrl,?,?)) + mw_SipRequest(mdw_TP_IC_IBCF_CANCEL_01(?, v_scscfImsAUrl,?,?)) + }, + {}, + {0, omit}, + "TP_IC_IBCF_CANCEL_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + function f_mtc_check_TP_IC_IBCF_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + var template SipUrl v_scscfImsAUrl := mw_SipUrl_Host(f_GetEUTScscfAddress_1()/*f_GetEUTScscfAddress(PX_EUT_A)*/); + + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mdw_TP_IC_IBCF_CANCEL_01(?, v_scscfImsAUrl,?,?)) }, + {}, + {0, omit}, + "TP_IC_IBCF_CANCEL_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + function f_mtc_check_TP_IC_IBCF_CANCEL_03( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var template SipUrl v_scscfImsBUrl := mw_SipUrl_Host(f_GetEUTScscfAddress_1());//f_GetEUTScscfAddress(PX_EUT_B) + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_CANCEL_01(?, v_scscfImsBUrl,?,?))}, + {}, + {0, omit}, + "TP_IC_IBCF_CANCEL_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + }} //function + + } // end group g_IBCF_CANCEL + + group g_IBCF_CANCEL_OK { + + /** + * Starts monitor component behavior for TP_IC_IBCF_486INVITE_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_statusLine indicate response code. + * @remark source function f_mtc_check_response_mx + */ + function f_mtc_check_TP_IC_IBCF_CANCEL_OK_01( + SipInterfaceMonitor p_monitorCompRef + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base_ToFrom(c_statusLine200, ?, ?,?,?))}, + {}, + {0,omit}, + "TP_IC_IBCF_CANCEL_OK_01", + false, + false + ) + ); + p_monitorCompRef.done; + } + } + + function f_mtc_check_TP_IC_IBCF_CANCEL_OK_02( + SipInterfaceMonitor p_monitorCompRef + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base_ToFrom(c_statusLine200, ?, ?,?,?))}, + {}, + {0,omit}, + "TP_IC_IBCF_CANCEL_OK_02", + false, + false + ) + ); + p_monitorCompRef.done; + } + } + + function f_mtc_check_TP_IC_IBCF_CANCEL_OK_03( + SipInterfaceMonitor p_monitorCompRef + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base_ToFrom(c_statusLine200, ?, ?,?,?))}, + {}, + {0,omit}, + "TP_IC_IBCF_CANCEL_OK_03", + false, + false + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_CANCEL_OK + + group g_IBCF_486INVITE { + + /** + * Starts monitor component behavior for TP_IC_IBCF_486INVITE_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_EPC_6034_04 + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_01( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_486INVITE_02(?,?)) + //, mw_SipResponse(mw_Response_Base(c_statusLine600))) + }, // FIXME Enforce template checks + {mw_SipResponse(mdw_4XX_Base)}, + {0, omit}, + "TP_IC_IBCF_486INVITE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_486INVITE_02(?,?))}, + {mw_SipResponse(mdw_4XX_Base)}, + {0, omit}, + "TP_IC_IBCF_486INVITE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_03( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_486INVITE_02(?,?)),mw_SipResponse(mw_Response_Base(c_statusLine600))}, + {mw_SipResponse(mdw_4XX_Base)}, + {0, omit}, + "TP_IC_IBCF_486INVITE_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_04( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_486INVITE_02(?,?))}, + {mw_SipResponse(mdw_4XX_Base)}, + {0, omit}, + "TP_IC_IBCF_486INVITE_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_486INVITE + + group g_IBCF_487INVITE { + + /** + * Starts monitor component behavior for TP_IC_IBCF_487INVITE_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_EPC_6034_04 + */ + function f_mtc_check_TP_IC_IBCF_487INVITE_01( + SipInterfaceMonitor p_monitorCompRef + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse ( mw_Response_Base ( c_statusLine487, ?, ? ) ) }, { }, { 0, omit }, + "TP_IC_IBCF_487INVITE_01", + false, + false ) + ); + p_monitorCompRef.done; + } + } // End of function + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + */ + function f_mtc_check_TP_IC_IBCF_487INVITE_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_487INVITE_02(?,?))}, + {mw_SipResponse(mdw_4XX_Base)}, + {0, omit}, + "TP_IC_IBCF_487INVITE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + } // end group g_IBCF_487INVITE + + group g_IBCF_487INVITE_ACK { + + /** + * Starts monitor component behavior for TP_IC_IBCF_487INVITE_ACK_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_IMS_5052_01_ic + */ + function f_mtc_check_TP_IC_IBCF_487INVITE_ACK_01( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_4XXINVITE_ACK_01(?, ?, ?))}, + {}, + {0, omit}, + "TP_IC_IBCF_487INVITE_ACK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + /** + * Starts monitor component behavior for TP_IC_IBCF_487INVITE_ACK_02 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_IMS_5052_01_ic + */ + function f_mtc_check_TP_IC_IBCF_487INVITE_ACK_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_4XXINVITE_ACK_01(?, ?, ?))}, + {}, + {0, omit}, + "TP_IC_IBCF_487INVITE_ACK_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + } // end group g_IBCF_487INVITE_ACK + + group g_IBCF_486INVITE_ACK { + + /** + * Starts monitor component behavior for TP_IC_IBCF_486INVITE_ACK_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_IMS_5052_01_ic + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_ACK_01( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_4XXINVITE_ACK_01(?, ?, ?))}, + {}, + {0, omit}, + "TP_IC_IBCF_486INVITE_ACK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + /** + * Starts monitor component behavior for TP_IC_IBCF_486INVITE_ACK_02 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_IMS_5052_01_ic + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_ACK_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_4XXINVITE_ACK_01(?, ?, ?))}, + {}, + {0, omit}, + "TP_IC_IBCF_486INVITE_ACK_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + } // end group g_IBCF_486INVITE_ACK + + group g_IBCF_SUBSCRIBE { + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_SUBSCRIBE_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5044_01_ic + */ + function f_mtc_check_TP_IC_IBCF_SUBSCRIBE_01( + SipInterfaceMonitor p_monitorCompRef/*, Response p_200OK*/, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var charstring v_UEB_PublicId := f_GetUEPublicId(PX_EUT_B); + var template SipUrl v_eutAUri := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); + var SipMessage v_sip := {request := valueof(m_INVITE_Dummy)}; + var charstring v_Epires200OK; + var charstring v_EpiresSubscribe; + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_SUBSCRIBE_01(?, v_eutAUri, v_UEB_PublicId))}, + {mw_SipRequest(mw_SUBSCRIBE_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_SUBSCRIBE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_200OK_Base)}, + {}, + {0, omit}, + "TP_IC_IBCF_SUBSCRIBE_01_200OK", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_SUBSCRIBE + + + group g_IBCF_NOTIFY { + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_NOTIFY_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5094_01_IMS + */ + function f_mtc_check_TP_IC_IBCF_NOTIFY_01( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var template SipUrl v_request_uri := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_NOTIFY_01(?, v_request_uri))}, + {mw_SipRequest(mw_NOTIFY_Request_Base(?))}, + {0, omit}, + "TP_IC_IBCF_NOTIFY_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_200OK_Base)}, + {}, + {0, omit}, + "TP_IC_IBCF_NOTIFY_01_200OK", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_NOTIFY + + group g_IBCF_REGISTER { + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REGISTER_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5089_01_ic_when + */ + function f_mtc_check_TP_IC_IBCF_REGISTER_01( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_REGISTER_01)}, + {mw_SipRequest(mw_REGISTER_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + // @remark source function f_mtc_check_TP_IMS_5089_01_ic_then + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_REGISTER401_01)}, + {mw_SipResponse (mw_401Unauthorized_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_01_401", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REGISTER_02 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5092_01_ic_when + */ + function f_mtc_check_TP_IC_IBCF_REGISTER_02( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_REGISTER_02)}, + {mw_SipRequest(mw_REGISTER_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + // @remark source function f_mtc_check_TP_IMS_5092_01_ic + var charstring v_EUT_A_Addr := f_GetEUTPcscfAddress(PX_EUT_A); + var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress_1());//f_GetEUTScscfAddress(PX_EUT_B) + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_REGISTER200OK_02(v_EUT_A_Addr, v_eutBUri))}, + {mw_SipResponse (mw_200OK_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_02_200OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REGISTER_03 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5092_01_ic_when + */ + function f_mtc_check_TP_IC_IBCF_REGISTER_03( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_REGISTER_EXPIRES_03(?,?))}, + {mw_SipRequest(mw_REGISTER_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + // @remark source function f_mtc_check_TP_IMS_5092_01_ic + var charstring v_EUT_A_Addr := f_GetEUTPcscfAddress(PX_EUT_A); + var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress_1());//f_GetEUTScscfAddress(PX_EUT_B) + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_REGISTER200OK_02(v_EUT_A_Addr, v_eutBUri))}, + {mw_SipResponse (mw_200OK_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_03_200OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REGISTER_04 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5092_01_ic_when + */ + function f_mtc_check_TP_IC_IBCF_REGISTER_04( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_REGISTER_EXPIRES_03(?,?))}, + {mw_SipRequest(mw_REGISTER_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + // @remark source function f_mtc_check_TP_IMS_5092_01_ic + var charstring v_EUT_A_Addr := f_GetEUTPcscfAddress(PX_EUT_A); + var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress_1());//f_GetEUTScscfAddress(PX_EUT_B) + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_REGISTER200OK_02(v_EUT_A_Addr, v_eutBUri))}, + {mw_SipResponse (mw_200OK_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_04_200OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REGISTER_05 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5092_01_ic_when + */ + function f_mtc_check_TP_IC_IBCF_REGISTER_05( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator {f_mtc_check_TP_IC_IBCF_REGISTER_04(p_monitorCompRef,p_checkMessage) + } + + } // end group g_IBCF_REGISTER + +} // end group g_IBCF + + group imsTemporaryUnavailable { + + function f_mtc_check_TP_IC_IBCF_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_IC_IBCF_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_IC_IBCF_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + + +} // end module AtsImsIot_TP_behavior_IC \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_ISC.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_ISC.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..e75cbc628300c8c46a9fe98d253378c32f9ab402 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_ISC.ttcn @@ -0,0 +1,326 @@ +/* + * @author STF 574, TTF006 + * @version $Id$ + * @desc This module provides the TP behaviour functions at IC interface + */ + +module AtsImsIot_TP_behavior_ISC +{ + + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIms_UpperTester all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + + import from LibSip_Common all; + + import from AtsImsIot_Functions all; + import from AtsImsIot_Templates_ISC all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SDPTypes all; + // LibMsrp +// import from LibMsrp_TypesAndValues { type MsrpURI }; +// import from LibMsrp_Functions { function f_str2msrpUri }; +// import from LibMsrp_Templates { +// template +// m_msrpSend_Dummy, mw_msrpSEND_toPath_fromPath_contentType, +// m_msrpReport_Dummy, mw_msrpREPORT_success, +// m_msrpResponse_Dummy, mw_msrpResponse_toPath_fromPath, +// mw_toPath, mw_fromPath, mw_msrpResponse_toPath_fromPath_with_transferReports, +// m_msrpURIs_ToPath_Dummy, m_msrpURIs_FromPath_Dummy, +// mw_contentType +// }; + + + import from AtsImsIot_Templates_IC all; + + +group g_ISC { + + group imsRegistration { + /** + * @desc Starts monitor component behavior for TP_ISC_SCSCF_REGISTER_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_REGISTER_02 + */ + function f_mtc_check_TP_ISC_SCSCF_REGISTER_01( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_ISC_SCSCF_REGISTER_01(mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain)))}, + {mw_SipRequest(mw_REGISTER_Request_Base)}, + {0, omit}, + "TP_ISC_SCSCF_REGISTER_01 - REGISTER", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + var charstring v_EUT_A_Addr := f_GetEUTPcscfIpAddress_1(); + var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress_1()); + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base_ToFrom(c_statusLine200, ?, ?,?,?))}, //TODO To/From + //{mw_SipResponse(mdw_TP_IC_IBCF_REGISTER200OK_02(v_EUT_A_Addr, v_eutBUri))}, + {mw_SipResponse (mw_200OK_Base)}, + {0, omit}, + "TP_ISC_SCSCF_REGISTER_01 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + }//end f_mtc_check_TP_ISC_SCSCF_REGISTER_01 + }// end imsRegistration + + + group imsInvite { + + /** + * @desc Verify that the S-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.7.1.14" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_S_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_ISC_SCSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_ISC_SCSCF_ECO_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_ECO_INVITE_01 - Request", //TODO + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_ISC_SCSCF_INVITE_01 + + function f_mtc_check_TP_ISC_SCSCF_5G_EMC_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_ISC_SCSCF_ECO_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_ECO_INVITE_01 - Request", //TODO + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_ISC_SCSCF_5G_EMC_INVITE_01 + + } + + group ims183SessionProgress { + + function f_mtc_check_TP_ISC_SCSCF_ECO_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_ISC_SCSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_ISC_SCSCF_ECO_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_ISC_SCSCF_ECO_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims180Ringing { + + function f_mtc_check_TP_ISC_SCSCF_ECO_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_ISC_SCSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_ISC_SCSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_ISC_SCSCF_ECO_180RINGING_01 + + } // End of group ims180Ringing + + group ims200Ok { + + function f_mtc_check_TP_ISC_SCSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_ISC_SCSCF_ECO_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_ISC_SCSCF_ECO_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + function f_mtc_check_TP_ISC_SCSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_ISC_SCSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_ISC_SCSCF_ECO_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_ISC_SCSCF_ECO_ACK_01 + + } // End of group imsAck + + +} // end of g_ISC + +} // end module AtsImsIot_TP_behavior_IC \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MI.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MI.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1b6f77e8bc00fedff4ccb9ebec2cc369d7430509 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MI.ttcn @@ -0,0 +1,913 @@ +/* + * @author TTF T010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at MI interface + */ +module AtsImsIot_TP_behavior_MI { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MI all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsInvite { + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_LRF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_ECSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MI_ECSCF_ECO_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01 + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN and includes the LRF provided URI in the Request-URI." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + * the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + * the IMS_E_CSCF entity supportsRoutingTo the BGCF + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * Contact indicating value LRF_provided_SIP_URI; + * from the IMS_LRF entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_LRF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_ECSCF_INVITE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MI_ECSCF_ECO_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_02 + + /** + * @desc "Verify that the E-CSCF successfully processes a callback INVITE from PSAP in the PSTN over BGCF and routes the request to the P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clause 4.1 item 12" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_PSAP_TEL_URI,// see 5.11.2 6) b) + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_BGCF_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_BGCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_P_CSCD_SERVICE_ROUTE, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_ECSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MI_ECSCF_ECO_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_03 + + } // End of group imsInvite + + group ims100Trying { + + function f_mtc_check_TP_MI_ECSCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MI_ECSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MI_ECSCF_ECO_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + function f_mtc_check_TP_MI_ECSCF_ECO_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MI_ECSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MI_ECSCF_ECO_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + function f_mtc_check_TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MI_ECSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + function f_mtc_check_TP_MI_ECSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MI_ECSCF_ECO_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + function f_mtc_check_TP_MI_ECSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_ECSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MI_ECSCF_ECO_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_ACK_01 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MI_ECSCF_ECO_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_BYE_01 + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_CALLID; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MI_ECSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_BYE_02 + + } // End of group imsBye + + group ims200OkBye { + + function f_mtc_check_TP_MI_ECSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MI_ECSCF_ECO_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_200OK_BYE_01 + + } // End of group ims200OkBye + + group imsCancel { + + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the BGCF for a PSAP in the PSTN + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF and + * the UE_A entity hasAchievedInitialEmergencyINVITE the PSAP via IMS_BGCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_ECSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MI_ECSCF_ECO_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01 + + } // End of group imsCancel + + group imsTemporaryUnavailable { + + /** + * @desc Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_480INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MI_ECSCF_ECO_480INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_480INVITE_01 + + } // End of group imsTemporaryUnavailable + + group imsRequestTermination { + + /** + * @desc Verify that the E-CSCF successfully processes a 487 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_BGCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_EMC_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MI_ECSCF_EMC_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_EMC_487INVITE_01 + + } // End of group imsRequestTermination + + group imsINFO{ + + /** + * @desc Verify that the E-CSCF sends an INFO request demanding a transfer of updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + */ + function f_mtc_check_TP_MI_ECSCF_NGC_INFO_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MI_ECSCF_NGC_INFO_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + -, + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MI_ECSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_NGC_INFO_01 + + /** + * @desc Verify that the E-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_NGC_INFO_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MI_ECSCF_NGC_INFO_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MI_ECSCF_NGC_INFO_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_NGC_INFO_02 + + }// End of group imsINFO + +} // End of module AtsImsIot_TP_behavior_MI \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MM.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..48b94e7decfbcbb829ec75fe5ca37dc64e108885 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MM.ttcn @@ -0,0 +1,979 @@ +/* + * @author TTF T010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at MM interface + */ +module AtsImsIot_TP_behavior_MM { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MM all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsInvite { + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector, + * MessageBody; + * to the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_ECO_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01 + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network and includes the LRF provided URI in the Route header." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + * the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an r_3xx_Any containing + * Contact indicating value LRF_provided_SIP_URI; + * from the IMS_LRF entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * not PChargingFunctionAddresses, + * PChargingVector, + * MessageBody; + * to the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_ECO_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02 + + /** + * @desc "Verify that the E-CSCF successfully processes an callback INVITE from PSAP over the IM CN subsystem of own network and routes the request to the P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * not PChargingFunctionAddresses, + * PChargingVector, + * MessageBody; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_ECO_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_03 + + + /** + * @desc Verify that the E-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_NGC_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MM_ECSCF_NGC_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_NGC_INVITE_01 + + } // End of group imsInvite + + group ims100Trying { + + function f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MM_ECSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MM_ECSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + function f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MM_ECSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MM_ECSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + function f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MM_ECSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MM_ECSCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + function f_mtc_check_TP_MM_ECSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MM_ECSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + function f_mtc_check_TP_MM_ECSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MM_ECSCF_ECO_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_ACK_01 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MM_ECSCF_ECO_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_BYE_01 + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MM_ECSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_BYE_02 + + } // End of group imsBye + + group ims200OkBye { + + function f_mtc_check_TP_MM_ECSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MM_ECSCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_200OK_BYE_01 + + } // End of group ims200OkBye + + group imsCancel { + + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity hasAchievedInitialEmergencyINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MM_ECSCF_EMC_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01 + + } // End of group imsCancel + + group imsRequestTermination { + + /** + * @desc Verify that the E-CSCF successfully processes a 487 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_EMC_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MM_ECSCF_EMC_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_EMC_487INVITE_01 + + } // End of group imsRequestTermination + + group imsTemporaryUnavailable { + + /** + * @desc Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MM_ECSCF_ECO_480INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01 + + } // End of group imsTemporaryUnavailable + + + group imsINFO{ + + /** + * @desc Verify that the E-CSCF sends an INFO request demanding a transfer of updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + */ + function f_mtc_check_TP_MM_ECSCF_NGC_INFO_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MM_ECSCF_NGC_INFO_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + -, -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_NGC_INFO_01 + + /** + * @desc Verify that the E-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_NGC_INFO_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MM_ECSCF_NGC_INFO_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_NGC_INFO_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_NGC_INFO_02 + + }// End of group imsINFO + + +} // End of module AtsImsIot_TP_behavior_MM \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MW_IS.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MW_IS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..d9ae0d3af695e01068250e92fa2826406a9b1cd4 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MW_IS.ttcn @@ -0,0 +1,1070 @@ +/** + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at I-CSCF/S-CSCF + */ + +module AtsImsIot_TP_behavior_MW_IS { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsMessages { + + /** + * @desc Verify that the I-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity forwards the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mdw_MESSAGE_1500c) + }, // FIXME CallId and more can be checked + { mw_SipRequest(mw_MESSAGE_Request_Base) }, + {0, omit}, + "TP_MW_ICSCF_MESSAGE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK_Base) + }, // FIXME CallId and more can be checked + { }, + {0, omit}, + "TP_MW_ICSCF_MESSAGE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the I-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_01 + + /** + * @desc Verify that the I-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Contact indicating value "sos"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;, + * Contact indicating value "sos" + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_ECO_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other,/*(mw_credentialIntegrityYes)*/ + -, -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_ECO_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01 + + /** + * @desc Verify that the I-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_Response_200onREGISTER_IMS( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME ? + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_02 + + /** + * @desc Verify that the I-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth";, + * Contact indicating value "sos"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB";, + * Path, + * ServiceRoute; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_Response_200onREGISTER_IMS( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME ? + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02 + + /** + * @desc Verify that the I-CSCF successfully processes a invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_03 + + /** + * @desc Verify that the I-CSCF successfully processes a invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_ECO_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ // FIXME indicating value "Invalid credentials" + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_ECO_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 403 Forbidden response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_04 - 403 Firbidden", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_03 + + /** + * @desc Verify that the I-CSCF processes an invalid first registration in visited network and sends 403 response (Unsuccessful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_ECO_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ // FIXME indicating value "Invalid credentials" + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_ECO_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 402 Forbidden response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_04 - 403 Firbidden", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_04 + + /** + * @desc Verify that the I-CSCF processes an invalid first registration without SecurityClient header in visited network(GIBA supported) and sends 420 response (Unsuccessful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 420_BadExtension containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_ECO_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ // FIXME indicating value "Invalid credentials" + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_ECO_REGISTER_05 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 420 Bad Extension response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_420BadExtension(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_04 - 403 Firbidden", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_05 + + function f_mtc_check_TP_MW_ICSCF_REGISTER_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_04( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_04- First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_04 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_04 + + function f_mtc_check_TP_MW_ICSCF_REGISTER_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_05( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_05 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_Response_200onREGISTER_IMS( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME ? + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_05 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_05 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the I-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * Expire indicating value 0 + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends a REGISTER containing + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check first DeREGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_07( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_07 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check DeREGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_Response_200onREGISTER_IMS( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME ? + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_07 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_07 + + } // End of group imsDeRegistration + +} // End of module AtsImsIot_TP_behavior_MW_IS diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MW_PS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..c1881798360f6fc87f8602460acc3155faab91e6 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -0,0 +1,5283 @@ +/** + * @author STF 574, TTF 010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + */ + +module AtsImsIot_TP_behavior_MW_PS { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + import from AtsImsIot_PIXITS all; + + group imsMessages { + + /** + * @desc Verify that the P-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives the MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ContentLength indicating value greater than 1300 bytes + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity forwards the MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * PChargingVector containing + * orig_ioi indicating value PX_OPERATOR_ID_A, + * term_ioi indicating value PX_OPERATOR_ID_B, + * not PAccessNetworkInfo + * ContentLength indicating value greater than 1300 bytes + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mdw_MESSAGE_1500c) + }, // FIXME CallId and more can be checked + { mw_SipRequest(mw_MESSAGE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_MESSAGE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK_Base) + }, // FIXME CallId and more can be checked + { }, + {0, omit}, + "TP_MW_PCSCF_MESSAGE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_MESSAGE_01 + + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * PChargingVector containing + * icid indicating value PX_TO_BE_DEFINED, + * PVisitedNetworkID indicating value PX_TO_BE_DEFINED, + * Require_HDR indicating value "path", + * Supported indicating value "path" + * ;; + * to the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check first REGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_01( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_01 + + /** + * @desc Verify that the P-CSCF successfully processes a first emergency registration (Successful) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * PChargingVector containing + * icid indicating value PX_TO_BE_DEFINED, + * PVisitedNetworkID indicating value PX_TO_BE_DEFINED, + * Require indicating value "path", + * Supported indicating value "path", + * Contact indicating value "sos";; + * to the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth";; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; + + // Check first REGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_ECO_REGISTER_01( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other,/*(mw_credentialIntegrityYes)*/ + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_ECO_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01 + + /** + * @desc Verify that the P-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * PChargingVector + * ;; + * from the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the second REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check the second REGISTER response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_02 + + /** + * @desc Verify that the P-CSCF successfully processes a full emergency registration (Successful) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * PChargingVector, + * Contact indicating value "sos";; + * to the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; + + // Check the second REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_ECO_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_ECO_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check the second REGISTER response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02 + + /** + * @desc Verify that the P-CSCF successfully processes a invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * to the IMS_I_CSCF_A entity + * and the IMS_I_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { mw_SipRequest(mw_REGISTER_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_03 + + /** + * @desc Verify that the P-CSCF rejects invalid credentials within registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_B and + * the UE_A entity isNotRegisteredTo the IMS_B and + * the UE_B entity isNotRegisteredTo the IMS_B and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_B entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials", + * PChargingVector, + * PVisitedNetwork; + * to the IMS_I_CSCF_B entity + * and the IMS_P_CSCF_B entity sends an 403_Forbidden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_ECO_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, // FIXME indicating value "invalid credentials" + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { mw_SipRequest(mw_REGISTER_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_ECO_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 403 Forbidden response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03 + + function f_mtc_check_TP_MW_PCSCF_REGISTER_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check first REGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_04( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_04 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_04 + + function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_ECO_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, // FIXME indicating value "invalid credentials" + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { mw_SipRequest(mw_REGISTER_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_ECO_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 403 Forbidden response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_04 - 403 Forbidden", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_04 + + function f_mtc_check_TP_MW_PCSCF_REGISTER_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the second REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_05( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_05 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check the second REGISTER response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_05 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_05 + + function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_ECO_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, // FIXME indicating value "invalid credentials" + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { mw_SipRequest(mw_REGISTER_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_ECO_REGISTER_05 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 403 Forbidden response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_05 - 420 BadExtension", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_05 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check first DeREGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_07( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_07 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + log("v_sip: ", v_sip);// register is expected + // Check DeREGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_07 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_07 + + /** + * @desc Verify that the P-CSCF successfully processes a network de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity isTriggeredToDetachUser + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_09( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first DeREGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_09( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_09 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_09 + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (with SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * Expire indicating value 0 + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_10( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first DeREGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_10( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_10 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_10 + + } // End of group imsDeRegistration + + group imsSubscribe { + + /** + * @desc Verify that the P-CSCF successfully processes a SUBSCRIBE. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an SUBSCRIBE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an SUBSCRIBE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Event, + * Expires + * ; + * to the IMS_S_CSCF_A entity + * and the IMS_P_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA + * ; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_SUBSCRIBE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_SUBSCRIBE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check SUBSCRIBE 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq // TODO v_sip.request.msgHeader.callId, + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_01 + + function f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { +// var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); +// var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_SUBSCRIBE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) +// mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), +// mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_SUBSCRIBE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check SUBSCRIBE 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq // TODO v_sip.request.msgHeader.callId, + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_02 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_02 + + } // End of group imsSubscribe + + group imsNotify { + + /** + * @desc Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_NOTIFY_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the NOTIFY + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_NOTIFY_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest (mw_NOTIFY_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_NOTIFY_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check NOTIFY 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq // TODO v_sip.request.msgHeader.callId, + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_02 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_NOTIFY_01 + + } // End of group imsNotify + + group imsPrack { + + /** + * @desc Verify that the P-CSCF successfully processes a PRACK in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a PRACK + * } + * then { + * the IMS_P_CSCF_A entity sends an PRACK + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_PRACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + + var SipMessage v_sip; + + // Check the PRACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_PRACK_01( + -, + -, // FIXME Set expected value + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_PRACK_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_PRACK_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_PRACK_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_PRACK_01 + + } // End of group imsPrack + + group imsInvite { + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_INVITE_01(PX_URN_SERVICE_SOS, +// -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_01 + + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an unregistered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getTelUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(mw_SipUrl_Anonymous.components.sip.userInfo.userOrTelephoneSubscriber), + mw_To_AddrUnion_TelUrl(v_psap.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_ECO_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_02 + + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_psap.publicId}, v_psap.publicId, v_psap.domain), + mw_From_AddrUnion_TelUrl(v_psap.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_ECO_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02 + + function f_mtc_check_TP_MW_PCSCF_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_03 + + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from a registered but not emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_ECO_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03 + + function f_mtc_check_TP_MW_PCSCF_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_04 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_04 + + /** + * @desc "Verify that the P-CSCF rejects an initial INVITE from a not emergency registered UE + * if the IM CN subsystem of the P-CSCF is not capable to handle emergency sessions." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody containing + * XML containing + * Version indicating value "1", + * Type_child indicating value "emergency", + * Reason_child, + * Action_child;;; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + mw_MBody_MIME_Ims3gpp( + *, + mw_Ims_Eco_3gpp_CW + ))) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_ECO_04 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_04 + + /** + * @desc "Verify that the E-CSCF successfully processes a callback INVITE from PSAP towards P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_05( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_ECO_05 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_05 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_RE_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_RE_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_RE_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function TP_MW_PCSCF_RE_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_B entity previouslyEstablishedCallWith the UE_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_RE_INVITE_02( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_RE_INVITE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_RE_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function TP_MW_PCSCF_RE_INVITE_02 + + function f_mtc_check_TP_MW_PCSCF_RE_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_RE_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_RE_INVITE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_MW_PCSCF_RE_INVITE_03 + + function f_mtc_check_TP_MW_PCSCF_RE_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_RE_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_RE_INVITE_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_MW_PCSCF_RE_INVITE_04 + + + /** + * @desc Verify that the P-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_NGC_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_NGC_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_NGC_INVITE_01 + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 100_Trying + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 100_Trying + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_PCSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_100Trying_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a 100_Trying + * from the UE_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a 100_Trying + * to the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_100Trying_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_100Trying_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_PCSCF_100Trying_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_100Trying_02 + + function f_mtc_check_TP_MW_PCSCF_100Trying_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_100Trying_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_PCSCF_100Trying_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_100Trying_03 + + function f_mtc_check_TP_MW_PCSCF_100Trying_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_100Trying_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_PCSCF_100Trying_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_100Trying_04 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_PCSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_180RINGING_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * + * } + * then { + * the IMS_P_CSCF_B entity sends a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_180RINGING_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_180Ringing_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_PCSCF_180RINGING_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_180RINGING_02 + + function f_mtc_check_TP_MW_PCSCF_180RINGING_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_180Ringing_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_PCSCF_180RINGING_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_180RINGING_03 + + function f_mtc_check_TP_MW_PCSCF_180RINGING_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_180Ringing_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_PCSCF_180RINGING_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_180RINGING_04 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the P-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_PCSCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Terminating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * + * } + * then { + * the IMS_P_CSCF_B entity sends a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_183SessionProgress_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_PCSCF_183SESSION_PROGRESS_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_02 + + function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_183SessionProgress_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_PCSCF_183SESSION_PROGRESS_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_03 + + function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_183SessionProgress_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_PCSCF_183SESSION_PROGRESS_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_04 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=v_psapInfo.publicId}), + mw_To_AddrUnion_TelUrl(v_psapInfo.publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ECO_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * from the UE_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_02 + + function f_mtc_check_TP_MW_PCSCF_200OK_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_03 + + function f_mtc_check_TP_MW_PCSCF_200OK_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_04 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ACK_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ECO_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_ACK_01 + + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ACK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ACK_02( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ACK_02 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ACK_02 + + function f_mtc_check_TP_MW_PCSCF_ACK_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ACK_03( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ACK_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ACK_03 + + function f_mtc_check_TP_MW_PCSCF_ACK_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ACK_04( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ACK_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ACK_04 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a BYE for an emergency call. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02 + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_02 + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Originating Network). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_S_CSCF_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a BYE containing + * From indicating value PX_S_CSCF_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_03( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_03 + + function f_mtc_check_TP_MW_PCSCF_BYE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_04( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_04 + + function f_mtc_check_TP_MW_PCSCF_BYE_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_05( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_05 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_05 + + function f_mtc_check_TP_MW_PCSCF_BYE_06( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_06( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_06 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_06 + + } // End of group imsBye + + group ims200OkBye { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_02 + + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_03 + + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_04 + + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_05", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_05 + + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_06( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_06", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_06 + + } // End of group ims200OkBye + + group imsCancel { + + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_CANCEL_01( + p_sip.request.msgHeader.callId + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_CANCEL_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_CANCEL_01 + + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity hasAchievedInitialEmergencyINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_EMC_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01 + + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity hasAchieveInitialINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_CANCEL_02( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_CANCEL_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_CANCEL_02 + + function f_mtc_check_TP_MW_PCSCF_CANCEL_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_CANCEL_03( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_CANCEL_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_CANCEL_03 + + function f_mtc_check_TP_MW_PCSCF_CANCEL_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_CANCEL_04( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_CANCEL_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_CANCEL_04 + + } // End of group imsCancel + + group ims200OkCancel { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_CANCEL_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ECO_200OK_CANCEL_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_CANCEL_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_CANCEL_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_02 + + function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_CANCEL_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_03 + + function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_CANCEL_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_04 + + } // End of group ims200OkCancel + + group imsBusy { + + /** + * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 486_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity receives a 486_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_486INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + ( + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ), + mw_SipResponse( + mw_600BusyEverywhere( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_486INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_486INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a CANCEL containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a CANCEL containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_486INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + ( + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ), + mw_SipResponse( + mw_600BusyEverywhere( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_486INVITE_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_486INVITE_02 + + function f_mtc_check_TP_MW_PCSCF_486INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_486INVITE_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_486INVITE_03 + + function f_mtc_check_TP_MW_PCSCF_486INVITE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_486INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_486INVITE_04 + + } // End of group imsBusy + + group imsRequestTermination { + + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_487INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_487INVITE_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_02 + + function f_mtc_check_TP_MW_PCSCF_487INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_487INVITE_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_03 + + function f_mtc_check_TP_MW_PCSCF_487INVITE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_487INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_04 + + } // End of group imsRequestTermination + + group imsTemporaryUnavailable { + + function f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_ECO_480INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01 + + } // End of group imsTemporaryUnavailable + + group imsAlternateService { + + function f_mtc_check_TP_MW_PCSCF_ECO_380INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 380 INVITE Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_3XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_ECO_380INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_380INVITE_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_380INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 380 INVITE Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_3XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_ECO_380INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_380INVITE_02 + + } // End of group imsAlternateService + + group imsINFO{ + + /** + * @desc Verify that the P-CSCF sends an INFO request demanding a transfer of updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + */ + function f_mtc_check_TP_MW_PCSCF_NGC_INFO_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_NGC_INFO_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_NGC_INFO_01 + + /** + * @desc Verify that the P-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_NGC_INFO_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_NGC_INFO_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_NGC_INFO_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_NGC_INFO_02 + + }// End of group imsINFO + +} // End of module AtsImsIot_TP_behavior_MW_PS diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MW_SI.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MW_SI.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..0136fc32ad9fcf70dee0568f6a5ecdf6df7bd4a5 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MW_SI.ttcn @@ -0,0 +1,1865 @@ +/** + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at S-CSCF/IBCF + */ + +module AtsImsIot_TP_behavior_MW_SI { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsMessages { + + /** + * @desc Verify that the S-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity forwards the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ;; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mdw_MESSAGE_1500c) + }, // FIXME CallId and more can be checked + { mw_SipRequest(mw_MESSAGE_Request_Base) }, + {0, omit}, + "TP_MW_SCSCF_MESSAGE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK_Base) + }, // FIXME CallId and more can be checked + { }, + {0, omit}, + "TP_MW_SCSCF_MESSAGE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the S-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_SCSCF_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_SCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_SCSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_REGISTER_01 + + /** + * @desc Verify that the S-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_SCSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_SCSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_Response_200onREGISTER_IMS( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME SUT S-CSCF? + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_SCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_REGISTER_02 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the S-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a 200_OK + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_REGISTER_Request_Base), + mw_SipResponse(mw_200OK_Base) + }, + {}, + {0, omit}, + "TP_MW_SCSCF_REGISTER_07", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_REGISTER_07 + + /** + * @desc Verify that the S-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a REGISTER containing + * Expire indicating value 0 + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a BYE + * to the IMS_P_CSCF_A entity and + * the IMS_S_CSCF_A entity sends a BYE + * to the IMS_IBCF_A entity and + * the IMS_S_CSCF_A entity sends a 200 OK + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_REGISTER_10( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_REGISTER_Request_Base), + mw_SipResponse(mw_200OK_Base) + }, + {}, + {0, omit}, + "TP_MW_SCSCF_REGISTER_10", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_REGISTER_Request_Base), + mw_SipResponse(mw_200OK_Base) + }, + {}, + {0, omit}, + "TP_MW_SCSCF_REGISTER_10", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_REGISTER_10 + + } // End of group imsDeRegistration + + group imsSubscribe { + + /** + * @desc Verify that the S-CSCF successfully processes a SUBSCRIBE. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives an SUBSCRIBE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA + * ; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_SUBSCRIBE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_SUBSCRIBE_Request_Base) + }, + { mw_SipRequest(mw_SUBSCRIBE_Request_Base) }, + {0, omit}, + "TP_MW_SCSCF_SUBSCRIBE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Check SUBSCRIBE 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse (mw_200OK_Base) + }, + {}, + {0, omit}, + "TP_MW_SCSCF_SUBSCRIBE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_SUBSCRIBE_01 + + } // End of group imsSubscribe + + group imsNotify { + + /** + * @desc Verify that the S-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToDeregisterUser + * } + * then { + * the IMS_S_CSCF_A entity sends an NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * to the IMS_P_CSCF_A entity and + * the IMS_S_CSCF_A entity receives an 200_Ok + * from the IMS_P_CSCF_A entity and + * the IMS_S_CSCF_A entity sends an NOTIFY containing + * Event indicating value "de-reg" + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_NOTIFY_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the NOTIFY + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_NOTIFY_Request_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_NOTIFY_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Check NOTIFY 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse (mw_200OK_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_NOTIFY_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_NOTIFY_01 + + /** + * @desc IMS_P_CSCF_A + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * } + * then { + * the IMS_S_CSCF_A entity sends an NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * to the IMS_P_CSCF_A entity and + * the IMS_S_CSCF_A entity receives an 200_Ok + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_NOTIFY_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the NOTIFY + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_NOTIFY_Request_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_NOTIFY_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Check NOTIFY 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse (mw_200OK_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_NOTIFY_02 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_NOTIFY_02 + + } // End of group imsNotify + + group imsInvite { + + /** + * @desc Verify that the S-CSCF successfully processes an initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_REGISTER_01 - Request", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_INVITE_01 + + /** + * @desc Verify that the S-CSCF successfully processes an initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_IBCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_P_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_REGISTER_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_INVITE_02 + + /** + * @desc Verify that the S-CSCF successfully processes an initial RE-INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_RE_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false, + in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SkipType v_skip := {0, omit}; + + if(p_skipCount > 0) { + v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; + } + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + v_skip, + "TP_MW_SCSCF_RE_INVITE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function TP_MW_SCSCF_RE_INVITE_01 + + /** + * @desc Verify that the S-CSCF successfully processes an initial RE-INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_B entity previouslyEstablishedCallWith the UE_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_IBCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_P_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_RE_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false, + in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SkipType v_skip := {0, omit}; + + if(p_skipCount > 0) { + v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; + } + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + v_skip, + "TP_MW_SCSCF_RE_INVITE_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function TP_MW_SCSCF_RE_INVITE_02 + + function f_mtc_check_TP_MW_SCSCF_RE_INVITE_03( // FIXME RMI case, to be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false, + in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SkipType v_skip := {0, omit}; + + if(p_skipCount > 0) { + v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; + } + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + v_skip, + "TP_MW_SCSCF_RE_INVITE_03", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function TP_MW_SCSCF_RE_INVITE_03 + + function f_mtc_check_TP_MW_SCSCF_RE_INVITE_04( // FIXME RMI case, to be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false, + in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SkipType v_skip := {0, omit}; + + if(p_skipCount > 0) { + v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; + } + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + v_skip, + "TP_MW_SCSCF_RE_INVITE_04", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function TP_MW_SCSCF_RE_INVITE_04 + + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the S-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a 100_Trying + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity forwards a 100_Trying + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_100Trying_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_100Trying_Base) }, + {}, + { 0, omit }, + "TP_MW_SCSCF_100Trying_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_100Trying_01 + + /** + * @desc Verify that the S-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a 100_Trying + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a 100_Trying + * to the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_100Trying_02( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_100Trying_Base) }, + {}, + { 0, omit }, + "TP_MW_SCSCF_100Trying_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_100Trying_02 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the S-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_180Ringing_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_180RINGING_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_180RINGING_01 + + /** + * @desc Verify that the S-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_B entity + * + * } + * then { + * the IMS_S_CSCF_B entity sends a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_180RINGING_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_180Ringing_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_180RINGING_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_180RINGING_02 + + } // End of group ims180Ringing + + group ims200Ok { + + /** + * @desc Verify that the S-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_200OK_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK_Base) }, + {}, + { 0, omit }, + "TP_MW_SCSCF_200OK_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_200OK_01 + + /** + * @desc Verify that the S-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_200OK_02( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false, + in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SkipType v_skip := {0, omit}; + + if(p_skipCount > 0) { + v_skip := {1, mw_SipResponse(mdw_2XX_Base)}; + } + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK_Base) }, + {}, + v_skip, + "TP_MW_SCSCF_200OK_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_200OK_02 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the S-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_ACK_Request_Base(?)) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_ACK_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_ACK_01 + + /** + * @desc Verify that the S-CSCF successfully processes a ACK provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_ACK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_ACK_Request_Base(?)) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_ACK_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_ACK_02 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the S-CSCF successfully processes a BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_BYE_Request_Base) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_BYE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_BYE_01 + + /** + * @desc Verify that the S-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_BYE_Request_Base) }, + {}, + { 0, omit }, + "TP_MW_SCSCF_BYE_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_BYE_02 + + /** + * @desc Verify that the S-CSCF successfully processes a BYE (Originating Network). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isNoLongerAvailable + * } + * then { + * the IMS_S_CSCF_A entity sends a BYE containing + * From indicating value PX_S_CSCF_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity and + * the IMS_S_CSCF_A entity sends a BYE containing + * From indicating value PX_S_CSCF_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_BYE_Request_Base) }, + {}, + { 0, omit }, + "TP_MW_SCSCF_BYE_03", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_BYE_03 + + } // End of group imsBye + + group imsCancel { + + /** + * @desc Verify that the S-CSCF successfully processes a CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_CANCEL_Request_Base(?)) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_CANCEL_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_CANCEL_01 + + /** + * @desc Verify that the S-CSCF successfully processes a CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity hasAchieveInitialINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_IBCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_CANCEL_Request_Base(?)) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_CANCEL_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_CANCEL_02 + + } + + group imsBusy { + + /** + * @desc Verify that the S-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a 486_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity receives a 486_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_486INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { (mw_SipResponse(mw_Response_Base(c_statusLine486)), mw_SipResponse(mw_Response_Base(c_statusLine600))) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_486INVITE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_486INVITE_01 + + /** + * @desc Verify that the S-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a CANCEL containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a CANCEL containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_486INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { (mw_SipResponse(mw_Response_Base(c_statusLine486)), mw_SipResponse(mw_Response_Base(c_statusLine600))) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_486INVITE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_486INVITE_02 + + } // End of group imsBusy + + group imsRequestTermination { + + /** + * @desc Verify that the S-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { /*mw_SipResponse(mw_Response_Base(c_statusLine487))*/ }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_487INVITE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_487INVITE_01 + + /** + * @desc Verify that the S-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_487INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { /*mw_SipResponse(mw_Response_Base(c_statusLine487))*/ }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_487INVITE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_487INVITE_02 + + } // End of group imsRequestTermination + +} // End of module AtsImsIot_TP_behavior_MW_SI diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MX.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MX.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1734717825b67c4ec8e65e243803439db87423a4 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TP_behavior_MX.ttcn @@ -0,0 +1,978 @@ +/** + * @author TTF 010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at S-CSCF/IBCF + */ + +module AtsImsIot_TP_behavior_MX { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Templates_MX all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsInvite { + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_ECO_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01 + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network and includes the LRF provided URI in the Route header." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + * the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an r_3xx_Any containing + * Contact indicating value LRF_provided_SIP_URI; + * from the IMS_LRF entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_INVITE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_ECO_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_02 + + /** + * @desc "Verify that the E-CSCF successfully processes a callback INVITE from the PSAP in another network over the IBCF and routes the request to the P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_ECO_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_03 + + } // End of group imsInvite + + group ims100Trying { + + function f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MX_ECSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MX_ECSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + function f_mtc_check_TP_MX_ECSCF_ECO_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MX_ECSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MX_ECSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + function f_mtc_check_TP_MX_ECSCF_ECO_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MX_ECSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MX_ECSCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + function f_mtc_check_TP_MX_ECSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MX_ECSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + function f_mtc_check_TP_MX_ECSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MX_ECSCF_ECO_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_ACK_01 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the IBCF for a PSAP in another network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MX_ECSCF_ECO_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_BYE_01 + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the IBCF for a PSAP in another network for an Emergency Call and routes the request to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MX_ECSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_BYE_02 + + } // End of group imsBye + + group ims200OkBye { + + function f_mtc_check_TP_MX_ECSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MX_ECSCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_200OK_BYE_01 + + } // End of group ims200OkBye + + group imsCancel { + + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the IBCF for a PSAP in another network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity hasAchievedInitialEmergencyINVITE via the IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MX_ECSCF_EMC_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01 + + } // End of group imsCancel + + group imsRequestTermination { + + /** + * @desc Verify that the E-CSCF successfully processes a 487 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_EMC_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MX_ECSCF_EMC_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_EMC_487INVITE_01 + + } // End of group imsRequestTermination + + group imsTemporaryUnavailable { + + /** + * @desc Verify that the E-CSCF successfully processes a 480 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_480INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MX_ECSCF_ECO_480INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_480INVITE_01 + + } // End of group imsTemporaryUnavailable + + group ims3xxAny { + + /** + * @desc Verify that the LRF successfully processes a 3xx Any response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_LRF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Contact indicating value V_CONTACT + * ; + * from the IMS_EBCF_A entity + * } + * then { + * the IMS_LRF_A entity sends a 3xx Any containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Contact indicating value V_CONTACT + * ; + * to the IMS_EBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_LRF_3xxAny_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 3xx Any + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_3xxContact( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.accept + )) + }, + { mw_SipResponse(mdw_3XX_Base) }, + { 0, omit }, + "TP_MX_3xxAny_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_LRF_3xxAny_01 + + } // End of group ims3xxAny + + group imsINFO{ + + /** + * @desc Verify that the E-CSCF sends an INFO request demanding a transfer of updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + */ + function f_mtc_check_TP_MX_ECSCF_NGC_INFO_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MX_ECSCF_NGC_INFO_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_NGC_INFO_01 + + /** + * @desc Verify that the E-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_NGC_INFO_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MX_ECSCF_NGC_INFO_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_NGC_INFO_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_NGC_INFO_02 + + }// End of group imsINFO + + + +} // End of module AtsImsIot_TP_behavior_MX diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TestConfiguration.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TestConfiguration.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..29b81850d5c9888110ad3994feba3bb8293801fb --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TestConfiguration.ttcn @@ -0,0 +1,1808 @@ +/* + * @author STF 370 + * @version $Id $ + * @desc This module contains functions which implement the + * configuration of the SUT adapter and mapping of test + * components for establishing and tearing down different + * test configurations. + */ + +module AtsImsIot_TestConfiguration { + + import from LibCommon_VerdictControl all; + /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ + import from LibIms_UpperTester all; + import from LibIot_PIXITS all; + import from LibIot_TypesAndValues all; + /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ + import from LibIot_Functions all; + import from LibIot_TestConfiguration all; + import from LibIot_TestInterface all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Functions all; + + group constantDefinitions { + //* interface monitor name Gm A + const charstring c_gm_A := "Gm A"; + //* interface monitor name Gm B + const charstring c_gm_B := "Gm B"; + //* interface monitor name Mx A + const charstring c_mx_A := "Mx A"; + //* interface monitor name Mx B + const charstring c_mx_B := "Mx B"; + //* interface monitor name Ic + const charstring c_ic := "Ici"; + //* interface monitor name Isc A + const charstring c_isc_A := "Isc A"; + //* interface monitor name Isc B + const charstring c_isc_B := "Isc B"; + //* interface monitor name NAPTR + const charstring c_naptr := "NAPTR"; + //* eut trigger name User A + const charstring c_trigger_A := "User A"; + //* eut trigger name User B + const charstring c_trigger_B := "User B"; + //* eut trigger name User A + const charstring c_userUE_A := "User A"; + const charstring c_userUE_A_emergency := "User A Emergency"; + const charstring c_userUE_A2 := "User A2"; + //* eut trigger name User B + const charstring c_userUE_B := "User B"; + const charstring c_userUE_B_emergency := "User B Emergency"; + const charstring c_userUE_B2 := "User B2"; + //* eut trigger name User C + const charstring c_userUE_C := "User C"; + //* interface monitor name Gm C + const charstring c_gm_C := "Gm C"; + //* eut trigger name User D + const charstring c_userUE_D := "User D"; + //* interface monitor name Gm D + const charstring c_gm_D := "Gm D"; + //* interface monitor name Rx + const charstring c_rx := "Rx"; // See ETSI TS 103 029 V3.1.1 clause 5.4.2 + //* interface monitor name Mw + const charstring c_mw := "Mw"; + //* interface monitor name Mx + const charstring c_mx := "Mx"; + //* interface monitor name Sgi + const charstring c_sgi := "Sgi"; + //* interface monitor name Rx + const charstring c_s6a := "S6a"; + //* interface monitor name Rx + const charstring c_gx := "Gx"; + //* interface monitor name Mm/Mx/Mw + const charstring c_psap := "Psap"; + } + + group mappingFunctions { + + /** + * + * @desc initialize the adapter port of MTC + */ + function f_cf_adapter_up() runs on ImsTestCoordinator { + map(self:acPort, system:acPort); + } + + /** + * + * @desc uninitialize the adapter port of MTC + */ + function f_cf_adapter_down() runs on ImsTestCoordinator { + unmap(self:acPort, system:acPort); + } + + /** + * + * @desc initialize trigger component ports + * @param p_driver trigger component + */ + function f_cf_user_up(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { + // connect sync ports + connect(p_driver:syncPort, self:syncPort); + // connect TSI ports + map(p_driver:eaPort, system:eaPort); + // configure oracle + f_cf_oracle_up(p_driver); + } + + /** + * + * @desc uninitialize trigger component ports + * @param p_driver trigger component + */ + function f_cf_user_down(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { + // disconnect sync ports + disconnect(p_driver:syncPort, self:syncPort); + // disconnect TSI ports + unmap(p_driver:eaPort, system:eaPort); + // release oracle ports + f_cf_oracle_down(p_driver); + } + + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:dPort, system:dPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:sipPort, system:sipPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:diameterPort, system:diameterPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:naptrPort, system:naptrPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:sgiPort, system:sgiPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); +} + + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:dPort, system:dPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:sipPort, system:sipPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:diameterPort, system:diameterPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:naptrPort, system:naptrPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:sgiPort, system:sgiPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + } + + group adapterConfiguration { + + function f_cf_setFilter(in SetFilterReq p_req) runs on /*Ims*/InterfaceMonitor { + var SetFilterRsp v_rsp; + var template Status v_status := { + code := e_success, + reason := * + } + + tc_wait.start; + acPort.send(p_req); + alt { + [] acPort.receive (mw_SetFilterRsp(v_status)) -> value v_rsp { + tc_wait.stop; + f_setE2EVerdict(pass, "Adapter Configuration: setting monitor filter successful"); + f_setConformanceVerdict(pass, "Adapter Configuration: setting monitor filter successful"); + } + [] acPort.receive (mw_SetFilterRsp(?)) -> value v_rsp { + tc_wait.stop; + f_setE2EVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); + f_setConformanceVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); + } + [] tc_wait.timeout { + f_setE2EVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); + f_setConformanceVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); + } + } + } + + /** + * @desc Initialize traffic cature process + * + * @param + */ + function f_cf_initCapture () runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); //TODO: Check posibility to enable ONLINE mode + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + } + /** + * @desc Start traffic cature process + * + * @param + */ + function f_cf_startCapture () runs on ImsTestCoordinator { + + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + //Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc Stops traffic cature + * + * @param + */ + function f_cf_stopCapture() runs on ImsTestCoordinator { + //Stop traffic capture processing. + timer tc_configureGuard; //TODO check to import correct modules + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + } + } + + group componentCreation { + + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor(in charstring p_name) runs on ImsTestCoordinator return ImsInterfaceMonitor { + var ImsInterfaceMonitor v_monitor := ImsInterfaceMonitor.create(p_name) alive; + v_monitor.start(f_setInterfaceNameOnComponent(p_name)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_sip(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SipInterfaceMonitor { + var SipInterfaceMonitor v_monitor := SipInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_diameter(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return DiameterInterfaceMonitor { + var DiameterInterfaceMonitor v_monitor := DiameterInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_naptr(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return NaptrInterfaceMonitor { + var NaptrInterfaceMonitor v_monitor := NaptrInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_sgi(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SgiInterfaceMonitor { + var SgiInterfaceMonitor v_monitor := SgiInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + } + + + group testConfiguration { //TODO: check to delete at end of STF574 ATS devel + + /** + * @desc + * Test configuration function for roaming registration szenario. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_Gm Gm interface monitor component + * @param p_MxA Mx interface IMS A network + * @param p_ici Mw interface monitor component + * @param p_MxB Mx interface IMS B network + */ + function f_cf_roam_reg_up( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_Gm); + f_cf_monitor_up(p_MxA); + f_cf_monitor_up(p_ici); + f_cf_monitor_up(p_MxB); + + // TODO UE IP address and port is missing + p_Gm.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) + ) + ))); + p_Gm.done; + + p_MxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_MxA.done; + + p_ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_ici.done; + + p_MxB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_MxB.done; + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Test configuration function for roaming registration szenario. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_Gm Gm interface monitor component + * @param p_ic Mw interface monitor component + */ + function f_cf_roam_reg_down( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_Gm); + f_cf_monitor_down(p_MxA); + f_cf_monitor_down(p_ici); + f_cf_monitor_down(p_MxB); + } + + /** + * @desc + * Interworking Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + * @param p_GmB + * Gm B Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_call_up( + inout CF_INT_CALL p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); + f_cf_monitor_up(p_config.mxA); + f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.mxB); + if(isvalue(p_config.gmB)) { + f_cf_monitor_up(p_config.gmB); + } + if(isvalue(p_config.naptr)) { + f_cf_monitor_up(p_config.naptr); + } + + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + + p_config.mxB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.mxB.done; + + if(isvalue(p_config.gmB)) { + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.gmB.done; + } + if(isvalue(p_config.naptr)) { + p_config.naptr.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_dns, + {f_getInterfaceInfo("NAPTR", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.naptr.done; + } + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Call test configuration. Ummaps/disconnect the + * related component ports. More information can be found in ETSI TS + * 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + * @param p_GmB + * Gm B Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_call_down( + inout CF_INT_CALL p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + //setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); + f_cf_monitor_down(p_config.mxA); + f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.mxB); + if ( isvalue ( p_config.gmB ) ) { f_cf_monitor_down( p_config.gmB );} + if ( isvalue ( p_config.naptr ) ) { f_cf_monitor_down( p_config.naptr );} + } + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Cause + * 4.3.4. + * @param p_Gm Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + */ + function f_cf_roam_call_up( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_Gm); + f_cf_monitor_up(p_MxA); + f_cf_monitor_up(p_ici); + f_cf_monitor_up(p_MxB); + + // TODO UE IP address and port is missing + // TODO UE IP address and port is missing + p_Gm.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) + ) + ))); + p_Gm.done; + + p_MxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_MxA.done; + + p_ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_ici.done; + + p_MxB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_MxB.done; + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Roaming Call test configuration. Ummaps/disconnect the + * related component ports. More information can be found in ETSI TS + * 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + */ + function f_cf_roam_call_down( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_Gm); + f_cf_monitor_down(p_MxA); + f_cf_monitor_down(p_ici); + f_cf_monitor_down(p_MxB); + } + + + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_as_up( + inout CF_INT_AS p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); + f_cf_monitor_up(p_config.mxA); + f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.mxB); + f_cf_monitor_up(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_up(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_up(p_config.iscB); + } + + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.gmB.done; + + p_config.mxB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.mxB.done; + + if(isvalue(p_config.iscA)) { + p_config.iscA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.iscA.done; + } + + if(isvalue(p_config.iscB)) { + p_config.iscB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.iscB.done; + } + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Application Server test configuration. + * Ummaps/disconnect the related component ports. More information + * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_as_down( + inout CF_INT_AS p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + //setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); + f_cf_monitor_down(p_config.mxA); + f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.mxB); + f_cf_monitor_down(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_down(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_down(p_config.iscB); + } + } + + + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_roam_as_up( + inout CF_ROAM_AS p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); + f_cf_monitor_up(p_config.mxA); + f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.mxB); + f_cf_monitor_up(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_up(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_up(p_config.iscB); + } + + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + + p_config.mxB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.mxB.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.gmB.done; + + if(isvalue(p_config.iscA)) { + p_config.iscA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.iscA.done; + } + + if(isvalue(p_config.iscB)) { + p_config.iscB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.iscB.done; + } + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Application Server test configuration. + * Ummaps/disconnect the related component ports. More information + * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_roam_as_down( + inout CF_ROAM_AS p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); + f_cf_monitor_down(p_config.mxA); + f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.mxB); + f_cf_monitor_down(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_down(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_down(p_config.iscB); + } + } + + function f_cf_epc_call_up ( in CF_EPC_CALL p_config ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); + f_cf_monitor_up(p_config.rx); + f_cf_monitor_up(p_config.mxA); + f_cf_monitor_up(p_config.mw); + f_cf_monitor_up(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_up(p_config.gmB); + } + + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.rx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.rx.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.mw.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mw.done; + + p_config.sgi.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.sgi.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } // end of function f_cf_epc_call_up + + function f_cf_epc_call_down( + inout CF_EPC_CALL p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + + f_cf_monitor_down(p_config.gmA); + f_cf_monitor_down(p_config.rx); + f_cf_monitor_down(p_config.mxA); + f_cf_monitor_down(p_config.mw); + f_cf_monitor_down(p_config.sgi); + f_cf_monitor_down(p_config.gmB); + } // end of function f_cf_epc_call_down + } + + function f_getInterfaceInfoList( + in charstring p_interfaceName, + in integer p_product1, + in integer p_product2 + ) return InterfaceInfoList { + var InterfaceInfoList v_list := { + f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product1]), + f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product2]) + }; + + return v_list; + } + + function f_getInterfaceInfo(in charstring p_interfaceName, Product p_product) return InterfaceInfo { + var InterfaceInfo v_info := { + IpInterfaceInfo := { + { + domainName := "invalid", + IpAddress := "0.0.0.0", + portNumbers := {0} + } + } + }; + + for(var integer i := 0; i < lengthof(p_product.monitorInterfaces); i := i + 1) { // YANN: <= instead of < + if(p_product.monitorInterfaces[i].interfaceName == p_interfaceName) { + return p_product.monitorInterfaces[i].interfaceInfo; + } + } + + return v_info; + } + + group g_release15 { + + function f_cf_epc_call_rel15_up_old ( in CF_ATT_old p_config ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); + f_cf_monitor_up(p_config.rx); + f_cf_monitor_up(p_config.s6a); + f_cf_monitor_up(p_config.gx); + f_cf_monitor_up(p_config.mxA); + f_cf_monitor_up(p_config.mwPS); + f_cf_monitor_up(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_up(p_config.gmB); + } + + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.rx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.rx.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.mwPS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mwPS.done; + + p_config.sgi.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.sgi.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } // end of function f_cf_epc_call_rel15_up + + function f_cf_epc_call_rel15_down_old( + inout CF_ATT_old p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + + f_cf_monitor_down(p_config.gmA); + f_cf_monitor_down(p_config.rx); + f_cf_monitor_down(p_config.s6a); + f_cf_monitor_down(p_config.gx); + f_cf_monitor_down(p_config.mxA); + f_cf_monitor_down(p_config.mwPS); + f_cf_monitor_down(p_config.sgi); + f_cf_monitor_down(p_config.gmB); + } // end of function f_cf_epc_call_rel15_down + + function f_cf_epc_call_rel15_up ( in CF_ATT p_config ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up_sip(p_config.gmA); + f_cf_monitor_up_diameter(p_config.rx); + f_cf_monitor_up_diameter(p_config.s6a); + f_cf_monitor_up_diameter(p_config.gx); + f_cf_monitor_up_sip(p_config.mxA); + f_cf_monitor_up_sip(p_config.mw); + f_cf_monitor_up_sgi(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_up_sip(p_config.gmB); + } + + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.rx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.rx.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.mw.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mw.done; + + p_config.sgi.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.sgi.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } // end of function f_cf_epc_call_rel15_up + + function f_cf_epc_call_rel15_down( + inout CF_ATT p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + + f_cf_monitor_down_sip(p_config.gmA); + f_cf_monitor_down_diameter(p_config.rx); + f_cf_monitor_down_diameter(p_config.s6a); + f_cf_monitor_down_diameter(p_config.gx); + f_cf_monitor_down_sip(p_config.mxA); + f_cf_monitor_down_sip(p_config.mw); + f_cf_monitor_down_sgi(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_down_sip(p_config.gmB); + } + + } // end of function f_cf_epc_call_rel15_down + + } // end group g_release15 + +} \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TestSystem.ttcn b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TestSystem.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..9ef38ee6a1525743c3d004c65b3c4826ba569c16 --- /dev/null +++ b/ttcn/LibAtsImsIot/lib_system/AtsImsIot_TestSystem.ttcn @@ -0,0 +1,173 @@ +module AtsImsIot_TestSystem { + + import from LibSip_SIPTypesAndValues all; + import from LibMsrp_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibDiameter_TypesAndValues all; + + /** + * @desc interfaces to the SUT + */ + type component IotSystemInterface { + port DataPort dPort; + port SipPort sipPort; + port DiameterPort diameterPort; + port SgiPort sgiPort; + port EquipmentAccessPort eaPort; + port AdapterConfigPort acPort; + } + /** + * @desc + * providing monitoring functionality of involved interfaces. Used as + * PTC. + */ + type component ImsInterfaceMonitor extends InterfaceMonitor { + port DataPort dPort; + port NaptrPort naptrPort; + port DiameterPort rxPort; + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + type component SipInterfaceMonitor extends InterfaceMonitor { + port SipPort sipPort; + port ImsCoordinationPort icpPort; + } + type component DiameterInterfaceMonitor extends InterfaceMonitor { + port DiameterPort diameterPort; + port ImsCoordinationPort icpPort; + } + type component NaptrInterfaceMonitor extends InterfaceMonitor { + port NaptrPort naptrPort; + port ImsCoordinationPort icpPort; + } + type component SgiInterfaceMonitor extends InterfaceMonitor { + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + /** + * @desc + * used to coordinate the behavior of other components. It is in charge + * of controlling the overall execution, manangement of testing phases, + * test verdicts collection and synchronization. Used as MTC. + */ + type component ImsTestCoordinator extends TestCoordinator { + port ImsCoordinationPort icpPort; + var VxLTEMonitorInterfaceList vc_MonIntfList; + var CF_VXLTE_Interfaces vc_vxlte_monitor_components; + } + + group portDefinitions { + type port ImsCoordinationPort message { + inout SipMessage, DIAMETER_MSG; + } with { + extension "internal" + } + type port DataPort message { + in Request, Response, SEND_request, RECEIVE_response; // SIP + } + type port SipPort message { //type port SipPort message + in Request, Response, SEND_request, RECEIVE_response; // SIP + } + type port NaptrPort message { + in NAPTRmessage; + } + type port DiameterPort message { + in DIAMETER_MSG; + } + type port SgiPort message { + in charstring; + } + } + + type record CF_INT_CALL { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB optional, + ImsInterfaceMonitor naptr optional + } + type record CF_INT_AS { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor gmB, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_ROAM_AS { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_EPC_CALL { + ImsInterfaceMonitor gmA, // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + ImsInterfaceMonitor rx, // See ETSI TS 103 029 V3.1.1 clause 5.4.2 + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mw, + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + } + + group g_release15 { + + type record CF_VXLTE_Interfaces{ + SipInterfaceMonitor gmA optional, + SipInterfaceMonitor gmB optional, + SipInterfaceMonitor mmB_PSAP optional,// MmMx interface at IBCF to PSAP + SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF or E-CSCF/BGCF + SipInterfaceMonitor mlE_LRF optional,// Ml interface at E-CSCF/LRF + SipInterfaceMonitor mwS_PSAP optional,// MwMmMx interface at E,SCSCF to PSAP + SipInterfaceMonitor ic optional, + SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + SipInterfaceMonitor mwPS optional, + SipInterfaceMonitor mwPE optional,// Mw interface at P-CSCF to E-CSCF + SipInterfaceMonitor mwIS optional,// Mw interface at I-CSCF/S-CSCF + SipInterfaceMonitor mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF + SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF + SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF + SipInterfaceMonitor isc optional,// ISC interface at AS to S-CSCF + DiameterInterfaceMonitor cxIH optional, + DiameterInterfaceMonitor cxSH optional, + DiameterInterfaceMonitor gx optional, + DiameterInterfaceMonitor rx optional, + DiameterInterfaceMonitor s6a optional, + DiameterInterfaceMonitor s9 optional, + DiameterInterfaceMonitor sh optional + } + + type record CF_ATT_old { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor rx, + ImsInterfaceMonitor s6a, + ImsInterfaceMonitor gx, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mwPS, // Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + ImsInterfaceMonitor mwIS, // Mw interface at I-CSCF/S-CSCF + ImsInterfaceMonitor mwSI, // Mw interface at S-CSCF/IBCF + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB + } + + type record CF_ATT { + SipInterfaceMonitor gmA, + DiameterInterfaceMonitor rx, + DiameterInterfaceMonitor s6a, + DiameterInterfaceMonitor gx, + SipInterfaceMonitor mxA, + SipInterfaceMonitor mw, + SgiInterfaceMonitor sgi, + SipInterfaceMonitor gmB + } + } // end of g_release15 + +} \ No newline at end of file diff --git a/ttcn/LibAtsImsIot/module.mk b/ttcn/LibAtsImsIot/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..94f8db59cfcbe74ee8163c418d628f7337299e89 --- /dev/null +++ b/ttcn/LibAtsImsIot/module.mk @@ -0,0 +1,73 @@ +sources:= \ + lib/AtsImsIot_PIXITS.ttcn \ + lib/AtsImsIot_Templates.ttcn \ + lib/AtsImsIot_TypesAndValues.ttcn \ + lib/AtsImsIot_Templates_GM.ttcn \ + lib/AtsImsIot_Templates_MW.ttcn \ + lib/AtsImsIot_Templates_MM.ttcn \ + lib/AtsImsIot_Templates_MI.ttcn \ + lib/AtsImsIot_Templates_IC.ttcn \ + lib/AtsImsIot_Templates_ISC.ttcn \ + lib/AtsImsIot_Templates_MX.ttcn \ + lib/AtsImsIot_Diameter_Templates.ttcn \ + lib_system/AtsImsIot_Functions.ttcn \ + lib_system/AtsImsIot_TestConfiguration.ttcn \ + lib_system/AtsImsIot_TP_behavior_GM.ttcn \ + lib_system/AtsImsIot_TP_behavior_MW_PS.ttcn \ + lib_system/AtsImsIot_TP_behavior_MW_IS.ttcn \ + lib_system/AtsImsIot_TP_behavior_MW_SI.ttcn \ + lib_system/AtsImsIot_TP_behavior_IC.ttcn \ + lib_system/AtsImsIot_TP_behavior_ISC.ttcn \ + lib_system/AtsImsIot_TP_behavior_MM.ttcn \ + lib_system/AtsImsIot_TP_behavior_MI.ttcn \ + lib_system/AtsImsIot_TP_behavior_MX.ttcn \ + ../patch_lib_ats_ims_iot/ttcn/AtsImsIot_TestSystem.ttcn \ + + +modules := ../LibCommon \ + ../LibIms \ + ../LibIot \ + ../LibMsrp \ + ../LibUpperTester \ + ../LibIms_ConfigAndTrigger \ + ../LibSip \ + ../LibDiameter \ + ../LibEmcom/LibNg112 \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibSecurity \ + ../patch_lib_http \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Pcap \ + ../../titan-test-system-framework/ccsrc/Protocols/ETH \ + ../../titan-test-system-framework/ccsrc/Protocols/IP \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Sctp \ + ../../titan-test-system-framework/ccsrc/Protocols/UDP \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/security \ + ../../ccsrc/Ports/LibSip \ + ../../ccsrc/Ports/ImsMonitorSipPort \ + ../../ccsrc/Ports/ImsMonitorDiameterPort \ + ../../ccsrc/Ports/LibDiameter \ + ../../ccsrc/Ports/Naptr \ + ../../ccsrc/Ports/Data \ + ../../ccsrc/Ports/Sgi \ + ../../ccsrc/Ports/LibIot \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibDiameter \ + ../../ccsrc/EncDec/LibSip \ + ../../ccsrc/EncDec/LibMsrp \ + ../../ccsrc/framework \ + ../../ccsrc/Externals \ + ../../ccsrc/Protocols/ImsMonitor \ + ../../ccsrc/Protocols/Diameter \ + ../../ccsrc/Protocols/LowerLayerPPort \ + ../../ccsrc/Protocols/Sip \ + ../../ccsrc/Protocols/Naptr \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/UpperTester \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/LibCommon b/ttcn/LibCommon new file mode 160000 index 0000000000000000000000000000000000000000..21bad7c51917d19bebdff5b36983e22922421976 --- /dev/null +++ b/ttcn/LibCommon @@ -0,0 +1 @@ +Subproject commit 21bad7c51917d19bebdff5b36983e22922421976 diff --git a/ttcn/LibDiameter b/ttcn/LibDiameter new file mode 160000 index 0000000000000000000000000000000000000000..c4c2a2a4fac59bdfe1f4675d2f32cfa53a6a721d --- /dev/null +++ b/ttcn/LibDiameter @@ -0,0 +1 @@ +Subproject commit c4c2a2a4fac59bdfe1f4675d2f32cfa53a6a721d diff --git a/ttcn/LibEmcom/LibNg112/json/LibNg112_DequeueRegistration.ttcn b/ttcn/LibEmcom/LibNg112/json/LibNg112_DequeueRegistration.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..edf877ce6813ee614d11f0e7197380422205cd99 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/json/LibNg112_DequeueRegistration.ttcn @@ -0,0 +1,34 @@ +module LibNg112_DequeueRegistration { + + // LibJson + import from Json all; + + /** + * @desc Dequeue Registration/Deregistrationrequest data structure + * @member registrationQueueUri SIP URI of queue to register on + * @member registrationDequeuer SIP URI of dequeuer (where to send calls) + * @member registrationExpirationTime Requested time in seconds this registration will expire + * @member registrationDequeuePreference Integer from 1 - 5 indicating queuing preference. 5 indicating highest preference + * @see ETSI TS 103 479 Table 5: DequeueRegistrationRequest + */ + type record DequeueRegistrationRequest { + Json.String DequeueRegistrationQueueUri, + Json.String DequeueRegistrationDequeuer, + Json.Integer DequeueRegistrationExpirationTime, + Json.Integer DequeueRegistrationDequeuePreference optional + } // End of type DequeueRegistrationRequest + + /** + * @desc Dequeue Registration/Deregistration response data structure + * @member registrationExpirationTime Requested time in seconds this registration will expire + * @member registrationStatusCode Integer from 1 - 5 indicating queuing preference. 5 indicating highest preference + * @see ETSI TS 103 479 Table 5: DequeueRegistrationRequest + */ + type record DequeueRegistrationResponse { + Json.Integer DequeueRegistrationExpirationTime, + Json.Integer DequeueRegistrationStatusCode + } // End of type DequeueRegistrationResponse + +} with { + encode "JSON"; variant ""; +} diff --git a/ttcn/LibEmcom/LibNg112/json/LibNg112_SubscriptionPayloads.ttcn b/ttcn/LibEmcom/LibNg112/json/LibNg112_SubscriptionPayloads.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..09888fe8739e5f2d0fe489329a4b12a90d0e0578 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/json/LibNg112_SubscriptionPayloads.ttcn @@ -0,0 +1,51 @@ +module LibNg112_SubscriptionPayloads { + + type record ElementStatePayload { + ElementState elementState + } + + type record ElementState { + charstring elementId, + charstring state, + charstring reason optional + } with { + variant(reason) "JSON:omit as null" + } + + type record ServiceStatePayload { + Service service, + ServiceState serviceState + } + + + type record Service { + charstring name, + charstring domain + } + + type record ServiceState { + charstring state, + charstring reason + } + + type record SecurityPosturePayload { + Service service, + charstring securityPosture + } + + type record QueueStatePayload { + QueueStateEventUri QueueStateEventUri, + QueueStateEventQueueLength QueueStateEventQueueLength, + QueueStateEventMaxLength QueueStateEventMaxLength, + QueueStateValuesCode QueueStateValuesCode + } + + type charstring QueueStateEventUri; + type integer QueueStateEventQueueLength (0 .. infinity) ; + type integer QueueStateEventMaxLength (0 .. infinity); + type charstring QueueStateValuesCode (pattern "active|inactive|disabled|full|standby"); + +} with { + encode "JSON"; variant ""; +} + diff --git a/ttcn/LibEmcom/LibNg112/module.mk b/ttcn/LibEmcom/LibNg112/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..2c06a3815095881c32e7f4496c117cc95d3e01f8 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/module.mk @@ -0,0 +1,30 @@ +sources := \ + ttcn/LibNg112_EncdecDeclarations.ttcn \ + ttcn/LibNg112_Functions.ttcn \ + ttcn/LibNg112_Pics.ttcn \ + ttcn/LibNg112_Pixits.ttcn \ + ttcn/LibNg112_Steps.ttcn \ + ttcn/LibNg112_Templates.ttcn \ + ttcn/LibNg112_TestSystem.ttcn \ + ttcn/LibNg112_TypesAndValues.ttcn \ + xsd/urn_ietf_params_xml_ns_geopriv_conf.ttcn \ + xsd/urn_ietf_params_xml_ns_geopriv_held_id.ttcn \ + xsd/urn_ietf_params_xml_ns_geopriv_held.ttcn \ + xsd/urn_ietf_params_xml_ns_lost1.ttcn \ + json/LibNg112_SubscriptionPayloads.ttcn \ + json/LibNg112_DequeueRegistration.ttcn + +modules := ../../../titan-test-system-framework/ttcn/LibJson \ + ../../../titan-test-system-framework/ttcn/LibHttp \ + + +# Use titan-test-system-framework +# xsd/http_www_w3_org_XML_1998_namespace.ttcn \ +# Use lib_sip +# xsd/http_www_opengis_net_gml.ttcn \ +# xsd/http_www_opengis_net_pidflo_1_0.ttcn \ +# xsd/urn_ietf_params_xml_ns_pidf.ttcn \ +# xsd/urn_ietf_params_xml_ns_pidf_geopriv10.ttcn \ +# xsd/urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy.ttcn \ +# xsd/urn_ietf_params_xml_ns_pidf_geopriv10_civicAddr.ttcn \ + diff --git a/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_EncdecDeclarations.ttcn b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_EncdecDeclarations.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..014a67dcb51530de9d294d001bad8e3d13f1adf9 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_EncdecDeclarations.ttcn @@ -0,0 +1,93 @@ +module LibNg112_EncdecDeclarations { + + import from XSD all; + + // RFC5985 Held + import from urn_ietf_params_xml_ns_geopriv_held language "XSD" all + with { + extension "File:../xsd/RFC5985_held.xsd"; + } + // RFC6155 Held ID + import from urn_ietf_params_xml_ns_geopriv_held_id language "XSD" all + with { + extension "File:../xsd/RFC6155_held_id.xsd"; + } + import from urn_ietf_params_xml_ns_pidf_geopriv10 language "XSD" all + with { + extension "File:../xsd/RFC4119_geopriv10.xsd"; + } + import from urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy language "XSD" all + with { + extension "File:../xsd/RFC4119_geopriv10_basic_policy.xsd"; + } + + import from urn_ietf_params_xml_ns_pidf_geopriv10_civicAddr language "XSD" all + with { + extension "File:../xsd/RFC5139_pdif_geopriv10_civic_address.xsd"; + } + + // RFC3863 + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/RFC3863_pidf.xsd"; + } + + // OpenGIS + import from http_www_opengis_net_pidflo_1_0 language "XSD" all + with { + extension "File:../xsd/GLM-pidf-lo-shape.xsd"; + } + import from http_www_opengis_net_gml language "XSD" all + with { + extension "File:../xsd/gmlBase.xsd"; + extension "File:../xsd/basicTypes.xsd"; + extension "File:../xsd/measures.xsd"; + extension "File:../xsd/geometryPrimitives.xsd"; + extension "File:../xsd/geometryBasic0d1d.xsd"; + extension "File:../xsd/geometryBasic2d.xsd"; + } + + import from LibNg112_DequeueRegistration all; + import from LibNg112_SubscriptionPayloads all; + + external function enc_LocationRequest(in LocationRequest p_loction_request) return octetstring + with { extension "prototype (convert) encode(XER:XER_EXTENDED)" }; + external function dec_LocationRequest(in octetstring p_pdu) return LocationRequest + with { extension "prototype (convert) decode(XER:XER_EXTENDED)" }; + external function enc_LocationResponse(in LocationResponse p_loction_response) return octetstring + with { extension "prototype (convert) encode(XER:XER_EXTENDED)" }; + external function dec_LocationResponse(in octetstring p_pdu) return LocationResponse + with { extension "prototype (convert) decode(XER:XER_EXTENDED)" }; + + + external function enc_Device(in Device p_device) return octetstring + with { extension "prototype (convert) encode(XER:XER_EXTENDED)" }; + external function dec_Device(in octetstring p_pdu) return Device + with { extension "prototype (convert) decode(XER:XER_EXTENDED)" }; + + external function enc_Presence(in Presence p_presence) return octetstring + with { extension "prototype (convert) encode(XER:XER_EXTENDED)" }; + external function dec_Presence(in octetstring p_pdu) return Presence + with { extension "prototype (convert) decode(XER:XER_EXTENDED)" }; + + external function enc_Tuple(in Tuple p_tuple) return octetstring + with { extension "prototype (convert) encode(XER:XER_EXTENDED)" }; + external function dec_Tuple(in octetstring p_pdu) return Tuple + with { extension "prototype (convert) decode(XER:XER_EXTENDED)" }; + + external function enc_Geopriv(in Geopriv p_geopriv) return octetstring + with { extension "prototype (convert) encode(XER:XER_EXTENDED)" }; + external function dec_Geopriv(in octetstring p_pdu) return Geopriv + with { extension "prototype (convert) decode(XER:XER_EXTENDED)" }; + + external function enc_Circle(in Circle p_circle) return octetstring + with { extension "prototype (convert) encode(XER:XER_EXTENDED)" }; + external function dec_Circle(in octetstring p_pdu) return Circle + with { extension "prototype (convert) decode(XER:XER_EXTENDED)" }; + + external function enc_QueueStatePayload(in QueueStatePayload p_queueStatePayload) return octetstring + with { extension "prototype (convert) encode(JSON)" }; + external function dec_QueueStatePayload(in octetstring p_pdu) return QueueStatePayload + with { extension "prototype (convert) decode(JSON)" }; + +} // End of module LibNg112_EncdecDeclarations diff --git a/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Functions.ttcn b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..fc997306a822d1e891bed630634982453b097ec7 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Functions.ttcn @@ -0,0 +1,481 @@ +module LibNg112_Functions { + + // Libcommon + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibSip + import from LibSip_SIPTypesAndValues all; + + // LibIms + import from LibIms_SIPTypesAndValues all; + import from LibIms_Interface all; + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_Functions all; + import from LibHttp_Templates all; + import from LibHttp_XmlTemplates all; + import from LibHttp_TestSystem all; + + // LibNg112 + import from LibNg112_TypesAndValues all; + import from LibNg112_Steps all; + import from LibNg112_TestSystem all; + import from LibNg112_Pics all; + import from LibNg112_SubscriptionPayloads all; + + group preambles { + + function f_cf_01_up() runs on HttpImsComponent { + // Map ports + map(self:httpPort, system:httpPort); + map(self:SIPP, system:SIPP); + + // Connect + f_connect4SelfOrClientSync(); + + activate(a_cf_01_http_down()); + activate(a_default_requests()); + activate(a_default_responses()); + } // End of function f_cf_01__sip_up + + function f_cf_02_up( + out ImsComponent p_caller, + out ImsComponent p_call_talker + ) runs on HttpImsComponent { + p_caller := ImsComponent.create("Caller") alive; + p_call_talker := ImsComponent.create("CallTalker") alive; + + connect(p_caller:syncPort, self:syncPort); + map(p_caller:SIPP, system:SIPP); + if (PICS_PSAP_CALL_TAKER) { + connect(p_call_talker:syncPort, self:syncPort); + map(p_call_talker:SIPP, system:SIPP); + } else { + p_call_talker := null; + } + + } // End of function f_cf_02_up + + function f_cf_03_up( + out HttpComponent p_ecrf, + out ImsComponent p_upstream, + out ImsComponent p_downstream + ) runs on HttpImsComponent { + p_ecrf := HttpComponent.create("Ecrf") alive; + p_upstream := ImsComponent.create("Upstream") alive; + p_downstream := ImsComponent.create("Downstream") alive; + + connect(p_ecrf:syncPort, self:syncPort); + connect(p_upstream:syncPort, self:syncPort); + connect(p_downstream:syncPort, self:syncPort); + + map(p_ecrf:httpPort, system:httpPort); + map(p_upstream:SIPP, system:SIPP); + map(p_downstream:SIPP, system:SIPP); + } // End of function f_cf_03_up + + function f_cf_04_up( + out HttpComponent p_ecrf, + out HttpComponent p_ecrf_redirect_target, + out ImsComponent p_upstream, + out ImsComponent p_downstream + ) runs on HttpImsComponent { + p_ecrf := HttpComponent.create("Ecrf") alive; + p_ecrf_redirect_target := HttpComponent.create("EcrfRedirectTarget") alive; + p_upstream := ImsComponent.create("Upstream") alive; + p_downstream := ImsComponent.create("Downstream") alive; + + connect(p_ecrf:syncPort, self:syncPort); + connect(p_ecrf_redirect_target:syncPort, self:syncPort); + connect(p_upstream:syncPort, self:syncPort); + connect(p_downstream:syncPort, self:syncPort); + + map(p_ecrf:httpPort, system:httpPort); + map(p_ecrf_redirect_target:httpPort, system:httpPort); + map(p_upstream:SIPP, system:SIPP); + map(p_downstream:SIPP, system:SIPP); + } // End of function f_cf_04_up + + function f_cf_05_up( + out HttpComponent p_ecrf, + out HttpComponent p_lis, + out ImsComponent p_upstream, + out ImsComponent p_downstream + ) runs on HttpImsComponent { + p_ecrf := HttpComponent.create("Ecrf") alive; + p_lis := HttpComponent.create("Lis") alive; + p_upstream := ImsComponent.create("Upstream") alive; + p_downstream := ImsComponent.create("Downstream") alive; + + connect(p_ecrf:syncPort, self:syncPort); + connect(p_lis:syncPort, self:syncPort); + connect(p_upstream:syncPort, self:syncPort); + connect(p_downstream:syncPort, self:syncPort); + + map(p_ecrf:httpPort, system:httpPort); + map(p_lis:httpPort, system:httpPort); + map(p_upstream:SIPP, system:SIPP); + map(p_downstream:SIPP, system:SIPP); + } // End of function f_cf_04_up + + function f_cf_06_up( + out ImsComponent p_upstream, + out HttpImsComponent p_downstream, + boolean p_downstream_dequeue_registration := false + ) runs on HttpImsComponent { + p_upstream := ImsComponent.create("Upstream") alive; + p_downstream := HttpImsComponent.create("Downstream") alive; + + connect(p_upstream:syncPort, self:syncPort); + connect(p_downstream:syncPort, self:syncPort); + + map(p_upstream:SIPP, system:SIPP); + map(p_downstream:SIPP, system:SIPP); + + if (p_downstream_dequeue_registration) { + map(p_downstream:httpPort, system:httpPort); + } + } // End of function f_cf_06_up + + function f_cf_07_up( + out ImsComponent p_psap + ) runs on HttpImsComponent { + p_psap := ImsComponent.create("Psap") alive; + + connect(p_psap:syncPort, self:syncPort); + + map(p_psap:SIPP, system:SIPP); + } // End of function f_cf_07_up + + function f_cf_08_up( + out ImsComponent p_upstream, + out HttpImsComponent p_downstream, + out ImsComponent p_downstream_diversion + ) runs on HttpImsComponent { + p_upstream := ImsComponent.create("Upstream") alive; + p_downstream := HttpImsComponent.create("Downstream") alive; + p_downstream_diversion := ImsComponent.create("Diversion") alive; + + connect(p_upstream:syncPort, self:syncPort); + connect(p_downstream:syncPort, self:syncPort); + connect(p_downstream_diversion:syncPort, self:syncPort); + + map(p_upstream:SIPP, system:SIPP); + map(p_downstream:SIPP, system:SIPP); + map(p_downstream:httpPort, system:httpPort); + map(p_downstream_diversion:SIPP, system:SIPP) + } // End of function f_cf_06_up + + function f_cf_09_up( + out ImsComponent p_network_caller, + out ImsComponent p_psap + ) runs on HttpImsComponent { + p_network_caller := ImsComponent.create("Caller") alive; + p_psap := ImsComponent.create("CallTalker") alive; + + connect(p_network_caller:syncPort, self:syncPort); + map(p_network_caller:SIPP, system:SIPP); + + connect(p_psap:syncPort, self:syncPort); + map(p_psap:SIPP, system:SIPP); + + } // End of function f_cf_09_up + + } // End of group preambles + + group postambles { + + function f_cf_01_down() runs on HttpImsComponent { + // Unmap ports + unmap(self:httpPort, system:httpPort); + unmap(self:SIPP, system:SIPP); + + // Disconnect ports + f_disconnect4SelfOrClientSync(); + + deactivate; + } // End of function f_cf_02_down + + function f_cf_02_down( + inout ImsComponent p_caller, + inout ImsComponent p_call_talker + ) runs on HttpImsComponent { + + disconnect(p_caller:syncPort, self:syncPort); + unmap(p_caller:SIPP, system:SIPP); + p_caller.done; + if (PICS_PSAP_CALL_TAKER) { + disconnect(p_call_talker:syncPort, self:syncPort); + unmap(p_call_talker:SIPP, system:SIPP); + p_call_talker.done; + } + + deactivate; + } // End of function f_cf_02_down + + function f_cf_03_down( + inout HttpComponent p_ecrf, + inout ImsComponent p_upstream, + inout ImsComponent p_downstream + ) runs on HttpImsComponent { + + disconnect(p_ecrf:syncPort, self:syncPort); + disconnect(p_upstream:syncPort, self:syncPort); + disconnect(p_downstream:syncPort, self:syncPort); + + unmap(p_ecrf:httpPort, system:httpPort); + unmap(p_upstream:SIPP, system:SIPP); + unmap(p_downstream:SIPP, system:SIPP); + + p_ecrf.done; + p_upstream.done; + p_downstream.done; + + deactivate; + } // End of function f_cf_03_down + + function f_cf_04_down( + inout HttpComponent p_ecrf, + inout HttpComponent p_ecrf_redirect_target, + inout ImsComponent p_upstream, + inout ImsComponent p_downstream + ) runs on HttpImsComponent { + + disconnect(p_ecrf:syncPort, self:syncPort); + disconnect(p_ecrf_redirect_target:syncPort, self:syncPort); + disconnect(p_upstream:syncPort, self:syncPort); + disconnect(p_downstream:syncPort, self:syncPort); + + unmap(p_ecrf:httpPort, system:httpPort); + unmap(p_ecrf_redirect_target:httpPort, system:httpPort); + unmap(p_upstream:SIPP, system:SIPP); + unmap(p_downstream:SIPP, system:SIPP); + + p_ecrf.done; + p_ecrf_redirect_target.done; + p_upstream.done; + p_downstream.done; + + deactivate; + } // End of function f_cf_04_down + + function f_cf_05_down( + inout HttpComponent p_ecrf, + inout HttpComponent p_lis, + inout ImsComponent p_upstream, + inout ImsComponent p_downstream + ) runs on HttpImsComponent { + + disconnect(p_ecrf:syncPort, self:syncPort); + disconnect(p_lis:syncPort, self:syncPort); + disconnect(p_upstream:syncPort, self:syncPort); + disconnect(p_downstream:syncPort, self:syncPort); + + unmap(p_ecrf:httpPort, system:httpPort); + unmap(p_lis:httpPort, system:httpPort); + unmap(p_upstream:SIPP, system:SIPP); + unmap(p_downstream:SIPP, system:SIPP); + + p_ecrf.done; + p_lis.done; + p_upstream.done; + p_downstream.done; + + deactivate; + } // End of function f_cf_05_down + + function f_cf_06_down( + inout ImsComponent p_upstream, + inout HttpImsComponent p_downstream, + boolean p_downstream_dequeue_registration := false + ) runs on HttpImsComponent { + + disconnect(p_upstream:syncPort, self:syncPort); + disconnect(p_downstream:syncPort, self:syncPort); + + unmap(p_upstream:SIPP, system:SIPP); + unmap(p_downstream:SIPP, system:SIPP); + + if (p_downstream_dequeue_registration) { + unmap(p_downstream:httpPort, system:httpPort); + } + + p_upstream.done; + p_downstream.done; + + deactivate; + } // End of function f_cf_06_down + + function f_cf_07_down( + inout ImsComponent p_psap + ) runs on HttpImsComponent { + + disconnect(p_psap:syncPort, self:syncPort); + + unmap(p_psap:SIPP, system:SIPP); + + p_psap.done; + + deactivate; + } // End of function f_cf_06_down + + function f_cf_08_down( + inout ImsComponent p_upstream, + inout HttpImsComponent p_downstream, + inout ImsComponent p_downstream_diversion + ) runs on HttpImsComponent { + + disconnect(p_upstream:syncPort, self:syncPort); + disconnect(p_downstream:syncPort, self:syncPort); + disconnect(p_downstream_diversion:syncPort, self:syncPort); + + unmap(p_upstream:SIPP, system:SIPP); + unmap(p_downstream:SIPP, system:SIPP); + unmap(p_downstream:httpPort, system:httpPort); + unmap(p_downstream_diversion:SIPP, system:SIPP); + + p_upstream.done; + p_downstream.done; + p_downstream_diversion.done; + + deactivate; + } // End of function f_cf_06_down + + function f_cf_09_down( + inout ImsComponent p_network_caller, + inout ImsComponent p_psap + ) runs on HttpImsComponent { + + disconnect(p_network_caller:syncPort, self:syncPort); + unmap(p_network_caller:SIPP, system:SIPP); + p_network_caller.done; + disconnect(p_psap:syncPort, self:syncPort); + unmap(p_psap:SIPP, system:SIPP); + p_psap.done; + + deactivate; + } // End of function f_cf_09_down + + /** + * @desc Default handling cf01 de-initialisation. + */ + altstep a_cf_01_http_down() runs on HttpComponent { + [] a_shutdown() { + f_cf_01_http_down(); + log("*** a_cf_01_http_down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); + stop; + } + } // End of altstep a_cf_01_http_down + + } // End of group postambles + + /** + * @desc f_IncCSeq returns an input parameter incremented by 1000 + * reason is to run the next testcase with a higher CSeq value + */ + function f_incCSeq( + inout CSeq loc_CSeq + ) { + loc_CSeq.seqNumber := loc_CSeq.seqNumber + 1000; + return + } // End of function f_incCSeq + + function f_checkUserInfo( + in charstring p_message, + in float p_expiry := 10.0 + ) { + timer tc := p_expiry; + + action(p_message); + tc.start; + alt { + [] tc.timeout { + log("f_checkUserInfo: Timer expiry") + } + } + } // End of function f_checkUserInfo + + group altsteps { + + altstep a_default_requests() runs on HttpComponent { + [] httpPort.receive(mw_http_request) { + tc_ac.stop; + log("*** " & testcasename() & ": FAIL: Server error: Receive request istead of response ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + } // End of altstep a_default_requests + + altstep a_default_responses() runs on HttpComponent { + var HttpMessage v_response; + + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_xml + ))) { + tc_ac.stop; + log("*** " & testcasename() & ": FAIL: Unexpected XML response ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_binary + ))) { + tc_ac.stop; + log("*** " & testcasename() & ": FAIL: Unexpected binary response ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + [] httpPort.receive( + mw_http_response( + mw_http_response_ko + )) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": FAIL: Server error: " & int2str(v_response.response.statuscode) & "/" & v_response.response.statustext & " ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + [] httpPort.receive(mw_http_response) -> value v_response { + tc_ac.stop; + log("*** " & testcasename() & ": FAIL: Server error: " & int2str(v_response.response.statuscode) & "/" & v_response.response.statustext & " ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + } // End of altstep a_default_responses + + } // end of group altsteps + + group decoding { + function f_decodeElementState(in NOTIFY_Request p_request, inout ElementStatePayload p_elementStatePayload) return integer { + var integer v_result; + var universal charstring v_temp; + + v_temp := p_request.messageBody.textplain; + v_result := decvalue_unichar(v_temp, p_elementStatePayload); + + return v_result; + } + + function f_decodeServiceState(in NOTIFY_Request p_request, inout ServiceStatePayload p_serviceStatePayload) return integer { + var integer v_result; + var universal charstring v_temp; + + v_temp := p_request.messageBody.textplain; + v_result := decvalue_unichar(v_temp, p_serviceStatePayload); + + return v_result; + } + + function f_decodeSecurityPosture(in NOTIFY_Request p_request, inout SecurityPosturePayload p_securityPosturePayload) return integer { + var integer v_result; + var universal charstring v_temp; + + v_temp := p_request.messageBody.textplain; + v_result := decvalue_unichar(v_temp, p_securityPosturePayload); + + return v_result; + } + } + +} // End of module LibNg112_Functions diff --git a/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Pics.ttcn b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Pics.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..a07451aae6b07233abe83913454face3800e1bd5 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Pics.ttcn @@ -0,0 +1,108 @@ +module LibNg112_Pics { + + /** + * @desc Does the IUT support HTTP GET request method? + */ + modulepar boolean PICS_HTTP_GET_REQUEST := true; + + /** + * @desc Does the Test System maintains the same TCP connection for both POST and GET requests? + */ + modulepar boolean PICS_HTTP_POST_GET_KEEP_ALIVE := true; + + /** + * @desc Does the IUT support HTTP POST request method? + */ + modulepar boolean PICS_HTTP_POST_REQUEST := true; + + /** + * @desc Does IUT support returning geolocation? + */ + modulepar boolean PICS_H_DER_TOK1 := true; + + /** + * @desc Does IUT support returning civic? + */ + modulepar boolean PICS_H_DER_TOK2 := true; + + /** + * @desc Does IUT support GET error message? + */ + modulepar boolean PICS_H_GET_ERR1 := true; + + /** + * @desc Does IUT support findService LOST Point? + */ + modulepar boolean PICS_L_FIS_GEO1 := true; + + /** + * @desc Does IUT support findService LOST Circle? + */ + modulepar boolean PICS_L_FIS_GEO2 := true; + + /** + * @desc Does IUT support findService LOST Polygon? + */ + modulepar boolean PICS_L_FIS_GEO3 := true; + + /** + * @desc Does IUT support service boundary by value? + */ + modulepar boolean PICS_L_FIS_SBV1 := true; + + /** + * @desc Does IUT support listServicesByLocation LOST - point? + */ + modulepar boolean PICS_L_LST_GEO1 := true; + + /** + * @desc Does IUT support listServices? + */ + modulepar boolean PICS_L_LST_ALL1 := true; + + modulepar boolean PICS_L_QRY_GEO1 := true; + + /** + * @desc Does IUT support serviceNotImplemented error message? + */ + modulepar boolean PICS_L_FIS_ERR1 := true; + + /** + * @desc Does IUT support locationProfileUnrecognized error message? + */ + modulepar boolean PICS_L_FIS_ERR2 := true; + + /** + * @desc Does IUT configured for UDP? + */ + modulepar boolean PICS_S_SIP_UDP1 := false; + + /** + * @desc Does IUT configured for TCP? + */ + modulepar boolean PICS_S_SIP_TCP1 := true; + + modulepar boolean PICS_E_SIP_URN1 := true; + + modulepar boolean PICS_E_SIP_URN2 := true; + + modulepar boolean PICS_E_SIP_URN3 := true; + + modulepar boolean PICS_E_SIP_HDR1 := true; + + /** + * @desc Does IUT support SIP OPTIONS? + */ + modulepar boolean PICS_S_SIP_OPT1 := true; + + /** + * @desc Does IUT busy? + */ + modulepar boolean PICS_S_SIP_BUS1 := true; + + /** + * @desc Is the Call-Taker interface visible? + */ + modulepar boolean PICS_PSAP_CALL_TAKER := false; + +} // End of module LibNg112_Pics diff --git a/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Pixits.ttcn b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Pixits.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..96282b71031ae7c086ac34e977f93bcd9a5ee69e --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Pixits.ttcn @@ -0,0 +1,599 @@ +module LibNg112_Pixits { + + import from XSD all; + + // RFC5222 + import from urn_ietf_params_xml_ns_lost1 language "XSD" all + with { + extension "File:../xsd/RFC5222_lost.xsd"; + } + + // RFC 5139 + import from urn_ietf_params_xml_ns_pidf_geopriv10_civicAddr language "XSD" all + with { + extension "File:../xsd/RFC5139_pdif_geopriv10_civic_address.xsd"; + } + + // RFC5222 + import from urn_ietf_params_xml_ns_lost1 language "XSD" all + with { + extension "File:../xsd/RFC5222_lost.xsd"; + } + + // OpenGIS + import from http_www_opengis_net_pidflo_1_0 language "XSD" all + with { + extension "File:../xsd/GLM_pidf_lo_shape.xsd"; + } + import from http_www_opengis_net_gml language "XSD" all + with { + extension "File:../xsd/gmlBase.xsd"; + extension "File:../xsd/basicTypes.xsd"; + extension "File:../xsd/measures.xsd"; + extension "File:../xsd/geometryPrimitives.xsd"; + extension "File:../xsd/geometryBasic0d1d.xsd"; + extension "File:../xsd/geometryBasic2d.xsd"; + } + + // LibNg112 + import from LibNg112_TypesAndValues all; + + /** + * @desc Epsilon for Double valules comparison + */ + modulepar XSD.Double PX_DOUBLE_CMP_EPSILON := 0.00001; + + /** + * @desc Device position with a circle of conficence + */ + modulepar DoubleList PX_CIRCLE_POS := { 43.621227, 7.047086 }; // CAROL01 + + /** + * @desc OGC Unit of measure + * @see http://www.opengeospatial.org/ogcUrnPolicy Clause Definition Branch + */ + modulepar XSD.AnyURI PX_CIRCLE_UOM := "urn:ogc:def:uom:EPSG::9001"; + + /** + * @desc Circle radius (in km) + */ + modulepar XSD.Double PX_CIRCLE_RADIUS := 10.000; // CAROL01 + + /** + * @desc OGC Catalogue service + * @see http://www.opengeospatial.org/ogcUrnPolicy Clause Definition Branch + */ + modulepar XSD.AnyURI PX_SRS_NAME := "urn:ogc:def:crs:EPSG::4326"; + + modulepar XSD.Token PX_LOCATION_ID := "6020688f1ce1896d"; + + modulepar charstring PX_GEOLOCATION_ID := "//lis1.etsi.plugtests.net/locref?ref=660bc838-882e-4683-8241-af26bb5960d8"; + + modulepar XSD.AnyURI PX_E_POLICE_SERVICE_URN := "urn:service:sos.police"; + + modulepar XSD.DateTime PX_LOST_EXPIRES := "2023-01-11T09:36:53+00:00"; + + modulepar XSD.DateTime PX_LOST_LAST_UPDATED := "2021-01-11T09:36:53+00:00"; + + modulepar XSD.String PX_V_POLICE_DISPLAY_NAME := "PSAP 1 Police"; + + modulepar XSD.String PX_E_POLICE_DISPLAY_NAME := "PSAP 1 Police"; + + modulepar XSD.String PX_V_POLICE_SOURCE := "ecrf1.etsi.plugtests.net"; + + modulepar XSD.AnyURI PX_V_POLICE_SOURCE_ID := "1d2af31b-4f75-4277-871a-dd3fad15b002"; + + modulepar XSD.AnyURI PX_E_POLICE_SOURCE_ID := "1d2af31b-4f75-4277-871a-dd3fad15b002"; + + modulepar XSD.AnyURI PX_V_POLICE_SERVICE_URN := "urn:service:sos.police"; + + modulepar XSD.AnyURI PX_E_POLICE_SIP_URI := "sip:police@psap1.plugtests.net"; + + modulepar XSD.Token PX_V_POLICE_PATH := "ecrf1.etsi.plugtests.net"; + + modulepar XSD.AnyURI PX_V_POLICE_SIP_URI := "sip:police@psap1.plugtests.net"; + + modulepar DoubleList PX_POINT_IN_E_POLICE_SERVICE_BOUNDARY := { 43.623013240241434, 7.046184539794921 }; // ALICE01 + + modulepar DoubleList PX_CIRCLE_IN_V_POLICE_SERVICE_BOUNDARY_POS := { 43.62139000963511, 7.055529356002808 }; // CAROL02 + + modulepar XSD.Double PX_CIRCLE_IN_V_POLICE_SERVICE_BOUNDARY_RADIUS := 2.000; + + modulepar XSD.AnyURI PX_E_FIRE_SERVICE_URN := "urn:service:sos.fire"; + + modulepar XSD.AnyURI PX_V_FIRE_SERVICE_URN := "urn:service:sos.fire"; + + modulepar XSD.String PX_V_FIRE_SOURCE := "ecrf1.etsi.plugtests.net"; + + modulepar XSD.AnyURI PX_V_FIRE_SOURCE_ID := "7788a2fb-703c-4e53-85ca-bceca3d1dc2d"; + + modulepar XSD.String PX_V_FIRE_DISPLAY_NAME := "PSAP 4 Fire"; + + modulepar XSD.AnyURI PX_V_FIRE_SIP_URI := "sip:fire@psap4.plugtests.net"; + + modulepar XSD.Token PX_V_FIRE_PATH := "ecrf1.etsi.plugtests.net"; + + modulepar DoubleList PX_POINT_IN_E_FIRE_SERVICE_BOUNDARY := { 43.621723979321644, 7.058994770050049 }; // BOB03 + + modulepar DoubleList PX_POINT_IN_V_FIRE_SERVICE_BOUNDARY_POS := { 43.621723979321644, 7.058994770050049 }; // BOB03 + + modulepar DoubleList PX_CIRCLE_INTERSECTING_V_FIRE_SERVICE_BOUNDARY_POS := { 43.619432754642986, 7.049510478973389 }; // BOB04 + + modulepar XSD.Double PX_CIRCLE_INTERSECTING_V_FIRE_SERVICE_BOUNDARY_RADIUS := 5.0; + + modulepar DoubleList PX_CIRCLE_IN_V_FIRE_SERVICE_BOUNDARY_POS := { 43.61905993694424, 7.045036554336548 }; // ALICE04 + + modulepar XSD.Double PX_CIRCLE_IN_V_FIRE_SERVICE_BOUNDARY_RADIUS := 5.0; + + /** + * @desc Set to true to check conversation when SIP callis established + */ + modulepar boolean PX_CHECK_CONVERSATION := false; + + modulepar Iso3166a2 PX_CIVIC_ADDR_COUNTRY := "AU"; + + modulepar XSD.String PX_CIVIC_ADDR_A1 := "NSW"; + + modulepar XSD.String PX_CIVIC_ADDR_A3 := "Wollongong"; + + modulepar XSD.String PX_CIVIC_ADDR_A4 := "Gwynneville"; + + modulepar XSD.String PX_CIVIC_ADDR_STS := "Northfield Avenue"; + + modulepar XSD.String PX_CIVIC_ADDR_LMK := "University of Wollongong"; + + group SUT { + + group SUT_UE { + /** @desc charstring for SUT - UE IP address to exchange SIP messages - connection point for PCSCF + */ + modulepar charstring PX_IMS_SUT_UE_IPADDR := "10.100.0.6"; + + /** @desc integer for SUT - UE port number to exchange SIP messages - connection point for PCSCF + */ + modulepar integer PX_IMS_SUT_UE_PORT := 5060; + } // End of group SUT_UE1 + + group SUT_UE1 { + /** @desc charstring for SUT - PCSCF1 IP address to exchange SIP messages - connection point for UE1 + */ + modulepar charstring PX_IMS_SUT_PCSCF1_IPADDR := "10.100.0.6"; + + /** @desc integer for SUT - PCSCF1 port number to exchange SIP messages - connection point for UE1 + */ + modulepar integer PX_IMS_SUT_PCSCF1_PORT := 5060; + + /** @desc charstring for SUT/PCSCF1 domain - connection point for UE1 + */ + modulepar charstring PX_IMS_SUT_PCSCF1_HOME_DOMAIN := "plugtests.net"; + + /** @desc charstring for IP address used by the TS to exchange media streams for UE1 + */ + modulepar charstring PX_IMS_SUT_UE1_BEARER_IPADDR := "conftest.plugtests.net"; + + /** @desc charstring for identity of the tester UE1 local domain + */ + modulepar charstring PX_IMS_SUT_UE1_HOME_DOMAIN := "plugtests.net"; + + /** @desc charstring for identity of the tester UE1 local user + */ + modulepar charstring PX_IMS_SUT_UE1_PUBLIC_USER := "alice-06"; + + /** @desc charstring for RFC 2617 clause 3-2-2 username of UE1: + * The name of user in the specified realm + */ + modulepar charstring PX_IMS_SUT_UE1_PRIVAT_USERNAME := "alice-06"; + + /** @desc charstring for RFC 2617 clause 3-2-2-2 passwd of UE1: A known shared secret, the password of user of the specified username + */ + modulepar charstring PX_IMS_SUT_UE1_PRIVAT_PASSWD := "alice-05@1234"; + + /** @desc charstring for RFC 2617 clause 3-2-1 qop options of UE1: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server; the + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + modulepar charstring PX_IMS_SUT_UE1_QOP := "auth"; + + /** @desc charstring for home(SUT) REGISTRAR domain of UE1 + */ + modulepar charstring PX_IMS_SUT_UE1_REGISTRAR := "registrar.sut.net"; + + /** @desc charstring for UE1 display name + */ + modulepar charstring PX_IMS_SUT_UE1_DISPLAY := "alice-05@plugtest.net"; + } // End of group SUT_UE1 + + group SUT_UE2 { + /** @desc charstring for SUT - PCSCF2 IP address to exchange SIP messages - connection point for UE2 + */ + modulepar charstring PX_IMS_SUT_PCSCF2_IPADDR := "esrp1.frequentis.plugtests.net"; + + /** @desc integer for SUT - PCSCF2 port number to exchange SIP messages - connection point for UE2 + */ + modulepar integer PX_IMS_SUT_PCSCF2_PORT := 5060; + + /** @desc charstring for SUT/PCSCF2 domain - connection point for UE2 + */ + modulepar charstring PX_IMS_SUT_PCSCF2_HOME_DOMAIN := "plugtests.net"; + + /** @desc charstring for IP address used by the TS to exchange media streams for UE2 + */ + modulepar charstring PX_IMS_SUT_UE2_BEARER_IPADDR := "esrp1.frequentis.plugtests.net"; + + /** @desc charstring for identity of the tester UE2 local domain + */ + modulepar charstring PX_IMS_SUT_UE2_HOME_DOMAIN := "plugtests.net"; + + /** @desc charstring for identity of the tester UE2 local user + */ + modulepar charstring PX_IMS_SUT_UE2_PUBLIC_USER := "2910"; + + /** @desc charstring for RFC 2617 clause 3-2-2 username of UE2: + * The name of user in the specified realm + */ + modulepar charstring PX_IMS_SUT_UE2_PRIVAT_USERNAME := "abcd"; + + /** @desc charstring for RFC 2617 clause 3-2-2-2 passwd: A known shared secret, the password of user of the specified username of UE2 + */ + modulepar charstring PX_IMS_SUT_UE2_PRIVAT_PASSWD := "1234"; + + /** @desc charstring for RFC 2617 clause 3-2-1 qop options UE2: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server, the + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + modulepar charstring PX_IMS_SUT_UE2_QOP := "auth"; + + /** @desc charstring for home(SUT) REGISTRAR domain of UE2 + */ + modulepar charstring PX_IMS_SUT_UE2_REGISTRAR := "plugtests.net"; + } // End of group SUT_UE2 + + group SUT_UE3 { + /** @desc charstring for SUT - PCSCF3 IP address to exchange SIP messages - connection point for UE3 + */ + modulepar charstring PX_IMS_SUT_PCSCF3_IPADDR := "172.31.10.2"; + + /** @desc integer for SUT - PCSCF3 port number to exchange SIP messages - connection point for UE3 + */ + modulepar integer PX_IMS_SUT_PCSCF3_PORT := 5060; + + /** @desc charstring for SUT/PCSCF3 domain - connection point for UE3 + */ + modulepar charstring PX_IMS_SUT_PCSCF3_HOME_DOMAIN := "pcscf3.home.net"; + + /** @desc charstring for IP address used by the TS to exchange media streams for UE3 + */ + modulepar charstring PX_IMS_SUT_UE3_BEARER_IPADDR := "172.31.10.2"; + + /** @desc charstring for identity of the tester UE2 local domain + */ + modulepar charstring PX_IMS_SUT_UE3_HOME_DOMAIN := "sut.net"; + + /** @desc charstring for identity of the tester UE3 local user + */ + modulepar charstring PX_IMS_SUT_UE3_PUBLIC_USER := "2910"; + + /** @desc charstring for RFC 2617 clause 3-2-2 username of UE3: + * The name of user in the specified realm + */ + modulepar charstring PX_IMS_SUT_UE3_PRIVAT_USERNAME := "abcd"; + + /** @desc charstring for RFC 2617 clause 3-2-2-2 passwd: A known shared secret, the password of user of the specified username of UE3 + */ + modulepar charstring PX_IMS_SUT_UE3_PRIVAT_PASSWD := "1234"; + + /** @desc charstring for RFC 2617 clause 3-2-1 qop options UE3: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server, the + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + modulepar charstring PX_IMS_SUT_UE3_QOP := "auth"; + + /** @desc charstring for home(SUT) REGISTRAR domain of UE3 + */ + modulepar charstring PX_IMS_SUT_UE3_REGISTRAR := "registrar.sut.net"; + } // End of group SUT_UE3 + + group SUT_UE4 {//UE4 can be used as UE1Visited + /** @desc charstring for SUT - PCSCF4 IP address to exchange SIP messages - connection point for UE4 + */ + modulepar charstring PX_IMS_SUT_PCSCF4_IPADDR := "172.31.10.2"; + + /** @desc integer for SUT - PCSCF4 port number to exchange SIP messages - connection point for UE4 + */ + modulepar integer PX_IMS_SUT_PCSCF4_PORT := 5060; + + /** @desc charstring for SUT/PCSCF4 domain - connection point for UE4 + */ + modulepar charstring PX_IMS_SUT_PCSCF4_HOME_DOMAIN := "pcscf4.home.net"; + + /** @desc charstring for IP address used by the TS to exchange media streams for UE4 + */ + modulepar charstring PX_IMS_SUT_UE4_BEARER_IPADDR := "172.31.10.2"; + + /** @desc charstring for identity of the tester UE2 local domain + */ + modulepar charstring PX_IMS_SUT_UE4_HOME_DOMAIN := "sut.net"; + + /** @desc charstring for identity of the tester UE4 local user + */ + modulepar charstring PX_IMS_SUT_UE4_PUBLIC_USER := "2910"; + + /** @desc charstring for RFC 2617 clause 3-2-2 username of UE4: + * The name of user in the specified realm + */ + modulepar charstring PX_IMS_SUT_UE4_PRIVAT_USERNAME := "abcd"; + + /** @desc charstring for RFC 2617 clause 3-2-2-2 passwd: A known shared secret, the password of user of the specified username of UE2 + */ + modulepar charstring PX_IMS_SUT_UE4_PRIVAT_PASSWD := "1234"; + + /** @desc charstring for RFC 2617 clause 3-2-1 qop options UE4: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server, the + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + modulepar charstring PX_IMS_SUT_UE4_QOP := "auth"; + + /** @desc charstring for home(SUT) REGISTRAR domain of UE4 + */ + modulepar charstring PX_IMS_SUT_UE4_REGISTRAR := "registrar.sut.net"; + } // End of group SUT_UE4 + + group SUT_unknown{ + /** @desc charstring for identity of unknown UE public user + */ + modulepar charstring PX_IMS_SUT_unknownUE_PUBLIC_USER := "0007"; + } // End of group SUT_unknown + + group EMERGENCY{ + /** @desc charstring for identity of emergency service local domain + */ + modulepar charstring PX_IMS_SUT_EMERGENCY_HOME_DOMAIN := "plugtests.net"; + + /** @desc charstring for identity of the emergency service + */ + modulepar charstring PX_IMS_SUT_EMERGENCY_SERVICE := "112"; + + /** @desc charstring for identity of the invalid emergency service + */ + modulepar charstring PX_IMS_SUT_EMERGENCY_SERVICE_INVALID := "service.sos.invalid"; + } // End of group EMERGENCY service + + group SUT_IBCF { + /** @desc charstring for SUT/IBCF1 IP address to exchange SIP messages + */ + modulepar charstring PX_IMS_SUT_IBCF1_IPADDR := "172.31.10.5"; + + /** @desc integer for SUT/IBCF1 port number to exchange SIP messages + */ + modulepar integer PX_IMS_SUT_IBCF1_PORT := 5060; + + /** @desc charstring for SUT/IBCF1 domain + */ + modulepar charstring PX_IMS_SUT_IBCF1_HOME_DOMAIN := "ibcf1.sut.net"; + + /** @desc charstring for SUT/IBCF2 IP address to exchange SIP messages + */ + modulepar charstring PX_IMS_SUT_IBCF2_IPADDR := "172.31.10.6"; + + /** @desc integer for SUT/IBCF2 port number to exchange SIP messages + */ + modulepar integer PX_IMS_SUT_IBCF2_PORT := 5060; + + /** @desc charstring for SUT/IBCF2 domain + */ + modulepar charstring PX_IMS_SUT_IBCF2_HOME_DOMAIN := "ibcf2.sut.net"; + } // End of group SUT_IBCF + + group SUT_PCSCF { + /** @desc charstring for SUT/P-CSCF IP address to exchange SIP messages + */ + modulepar charstring PX_IMS_SUT_PCSCF_IPADDR := "172.31.10.2"; + + /** @desc integer for SUT/P-CSCF port number to exchange SIP messages + */ + modulepar integer PX_IMS_SUT_PCSCF_PORT := 5060; + + /** @desc charstring for SUT/P-CSCFdomain + */ + modulepar charstring PX_IMS_SUT_PCSCF_HOME_DOMAIN := "pcscf.sut.net"; + + /** @desc charstring for SUT/P-CSCF P_VisitedNetwork ID header (see RFC3455) + */ + modulepar charstring PX_IMS_SUT_PCSCF_VisitedNetworkID := "sut token"; + + /** @desc charstring for SUT/P-CSCF Min-SE header lower bound for the session refresh interval (see RFC4028) + */ + modulepar charstring PX_IMS_SUT_PCSCF_MinSE := "100"; + } // End of group SUT_PCSCF + group SUT_SCSCF { + /** @desc charstring for SUT/S-CSCF IP address to exchange SIP messages + */ + modulepar charstring PX_IMS_SUT_SCSCF_IPADDR := "172.31.10.4"; + + /** @desc integer for SUT/S-CSCF port number to exchange SIP messages + */ + modulepar integer PX_IMS_SUT_SCSCF_PORT := 5060; + + /** @desc charstring for SUT/S-CSCFdomain + */ + modulepar charstring PX_IMS_SUT_SCSCF_HOME_DOMAIN := "scscf.sut.net"; + + /** @desc charstring for SUT/S-CSCF globally used realm name of IUT S-CSCF + */ + modulepar charstring PX_IMS_SUT_SCSCF_REALM := "realm.scscf"; + } // End of group SUT_SCSCF + + group SUT_ICSCF { + /** @desc charstring for SUT/I-CSCF IP address to exchange SIP messages + */ + modulepar charstring PX_IMS_SUT_ICSCF_IPADDR := "172.31.10.3"; + + /** @desc integer for SUT/I-CSCF port number to exchange SIP messages + */ + modulepar integer PX_IMS_SUT_ICSCF_PORT := 5060; + + /** @desc charstring for SUT/I-CSCFdomain + */ + modulepar charstring PX_IMS_SUT_ICSCF_HOME_DOMAIN := "icscf.sut.net"; + } // End of group SUT_ICSCF + + group SUT_AS { + /** @desc charstring for SUT - AS IP address to exchange SIP messages - connection point for SCSCF + */ + modulepar charstring PX_IMS_SUT_AS_IPADDR := "172.31.10.7"; + + /** @desc integer for SUT - AS port number to exchange SIP messages - connection point for SCSCF + */ + modulepar integer PX_IMS_SUT_AS_PORT := 5060; + + /** @desc charstring for SUT/AS domain + */ + modulepar charstring PX_IMS_SUT_AS_HOME_DOMAIN := "as.sut.net"; + + } // End of group SUT_UE1 + + group SUT_BCF { + /** @desc charstring for SUT - BCF IP address to exchange SIP messages - connection point for PSAP + */ + modulepar charstring PX_IMS_SUT_BCF_IPADDR := "172.31.10.8"; + + /** @desc integer for SUT - BCF port number to exchange SIP messages - connection point for PSAP + */ + modulepar integer PX_IMS_SUT_BCF_PORT := 5060; + + /** @desc charstring for SUT/BCF domain + */ + modulepar charstring PX_IMS_SUT_BCF_HOME_DOMAIN := "bcf22.sut.net"; + + } // End of group SUT_UE1 + + group SUT_IMGCF { + /** @desc charstring for SUT/I-MGCF IP address to exchange SIP messages + */ + modulepar charstring PX_IMS_SUT_IMGCF_IPADDR := "172.31.10.10"; + + /** @desc integer for SUT/I-MGCF port number to exchange SIP messages + */ + modulepar integer PX_IMS_SUT_IMGCF_PORT := 5060; + + /** @desc charstring for SUT/I-MGCFdomain + */ + modulepar charstring PX_IMS_SUT_IMGCF_HOME_DOMAIN := "imgcf.sut.net"; + } // End of group SUT_IMGCF + + group SUT_CONF { + /** + * @desc + * charstring for SUT/conference IP address to exchange SIP messages + */ + modulepar charstring PX_IMS_SUT_CONF_IPADDR := "172.31.10.10"; + /** + * @desc integer for SUT/conference port number to exchange SIP messages + */ + modulepar integer PX_IMS_SUT_CONF_PORT := 5060; + /** + * @desc charstring for SUT/conference domain + */ + modulepar charstring PX_IMS_SUT_CONF_HOME_DOMAIN := "conf.sut.net"; + /** + * @desc charstring for conference factory URI name + */ + modulepar charstring PX_IMS_SUT_CONF_FACTORY_NAME := "factory.uri.name"; + + } // End of group SUT_CONF + + group SUT_LIS { + + /** @desc charstring for SUT - LIS IP address to exchange SIP messages + */ + modulepar charstring PX_SUT_LIS_SIP_IPADDR := "172.31.10.8"; + + /** @desc integer for SUT - LIS port number to exchange SIP messages + */ + modulepar integer PX_SUT_LIS_SIP_PORT := 5060; + + /** @desc charstring for SUT/LIS domain + */ + modulepar charstring PX_SUT_LIS_SIP_HOME_DOMAIN := "esinet.io"; + } + + group SUT_ECRF { + + /** @desc charstring for SUT - LIS IP address to exchange SIP messages + */ + modulepar charstring PX_SUT_ECRF_SIP_IPADDR := "172.31.10.8"; + + /** @desc integer for SUT - LIS port number to exchange SIP messages + */ + modulepar integer PX_SUT_ECRF_SIP_PORT := 5060; + + /** @desc charstring for SUT/LIS domain + */ + modulepar charstring PX_SUT_ECRF_SIP_HOME_DOMAIN := "esinet.io"; + } + + group SUT_ESRP { + + /** @desc charstring for SUT - LIS IP address to exchange SIP messages + */ + modulepar charstring PX_SUT_ESRP_SIP_IPADDR := "172.31.10.8"; + + /** @desc integer for SUT - LIS port number to exchange SIP messages + */ + modulepar integer PX_SUT_ESRP_SIP_PORT := 5060; + + /** @desc charstring for SUT/LIS domain + */ + modulepar charstring PX_SUT_ESRP_SIP_HOME_DOMAIN := "esinet.io"; + } + + } // End og grup sut + + group ts_ue1 { + + /** @desc charstring for IP address used by the UE1 to exchange SIP messages + */ + modulepar charstring PX_IMS_TS_UE1_IPADDR := "conftest.plugtests.net"; + + /** @desc integer for port number used by the UE1 to exchange SIP messages + */ + modulepar integer PX_IMS_TS_UE1_PORT := 5060; + + /** @desc charstring for visited(TS) REGISTRAR domain + */ + modulepar charstring PX_IMS_TS_UE1_REGISTRAR := "plugtests.net"; + + } // End of group ts_ue1 + + group ts_esinet_subscriber { + + modulepar charstring PX_ESINET_TS_SUBSCRIBER := "subscriber"; + modulepar integer PX_ESINET_TS_SUBSCRIBER_PORT := 5060; + modulepar charstring PX_ESINET_TS_SUBSCRIBER_IPADDR := "esinet.io"; + modulepar charstring PX_ESINET_TS_SUBSCRIBER_BEARER_IPADDR := "esinet.io" + modulepar charstring PX_ESINET_TS_SUBSCRIBER_HOME_DOMAIN := "esinet.io" + modulepar charstring PX_ESINET_TS_SUBSCRIBER_PUBLIC_USER := "subscriber" + + modulepar charstring PX_ESINET_SUT_PRIVAT_USERNAME := "psap" + modulepar charstring PX_ESINET_SUT_PRIVAT_PASSWD := "secret" + modulepar charstring PX_ESINET_SUT_REGISTRAR := "registrar.esinet.io" + + modulepar charstring PX_ESINET_SUT_SERVICE := "service"; + modulepar charstring PX_ESINET_SUT_HOME_DOMAIN := "esinet.io"; + modulepar charstring PX_ESINET_SUT_IPADDR := "172.0.0.1"; + } + + group ts_esinet_upstream_element { + modulepar charstring PX_ESINET_TS_UPSTREAM := "upstream"; + modulepar integer PX_ESINET_TS_UPSTREAM_PORT := 5060; + modulepar charstring PX_ESINET_TS_UPSTREAM_IPADDR := "esinet.io"; + modulepar charstring PX_ESINET_TS_UPSTREAM_BEARER_IPADDR := "esinet.io" + modulepar charstring PX_ESINET_TS_UPSTREAM_HOME_DOMAIN := "esinet.io" + modulepar charstring PX_ESINET_TS_UPSTREAM_PUBLIC_USER := "upstream" + } + + modulepar XSD.String PX_PRESENCE_USER := "sip:alice-06@plugtests.net"; + + modulepar DoubleList PX_PRESENCE_USER_POS := { 43.623013240241434, 7.046184539794921 }; // ALICE6 position + +} // End of module LibNg112_Pixits diff --git a/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Steps.ttcn b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Steps.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..f7930f66e542560e62ca09d512e657c0abb3f277 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Steps.ttcn @@ -0,0 +1,348 @@ +module LibNg112_Steps { + + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Steps all; + import from LibSip_Templates all; + import from LibSip_Interface all; + + // LibIms + import from LibIms_SIPTypesAndValues all; + import from LibIms_Steps all; + import from LibIms_Templates all; + import from LibIms_Interface all; + + // LibNg112 + import from LibNg112_TypesAndValues all; + import from LibNg112_Pixits all; + + group Constants { + + const integer c_ISUP_HOP_COUNT:=31; //TODO replace this value with appropriate PIXIT parameter + + group UserProfileConstants { + // number of user profile (RESERVED: from 1-10 for SIP profile) + const integer c_userProfile_UE1atSUThome := 11; // location is SUT domain + const integer c_userProfile_UE2atSUThome := 12; // location is SUT domain + const integer c_userProfile_UE3atSUThome := 13; // location is SUT domain + const integer c_userProfile_UE4atSUThome := 14; // location is SUT domain + const integer c_userProfile_UE1atSUTvisiting := 21; // location is SUT domain + //const integer c_userProfile_UE2atSUTvisiting := 22; // location is SUT domain + const integer c_userProfile_IBCFwithUnknownUE := 28; // location is IMS1 domain + const integer c_userProfile_IBCFwithHomeUE := 29; // location is IMS1 domain + const integer c_userProfile_IBCFwithVisitingUE := 31; // location is IMS1 domain + const integer c_userProfile_PCSCFwithHomeUE := 41; // location is IMS1 domain + const integer c_userProfile_PCSCFwithVisitingUE := 42; // location is IMS1 domain + const integer c_userProfile_PCSCFwithVisitingUE2 := 43; // location is IMS1 domain + const integer c_userProfile_PCSCFwithUnknownVisitingUE := 44; // location is IMS1 domain + const integer c_userProfile_ICSCFwithHomeUE := 45; // location is IMS1 domain + const integer c_userProfile_SCSCFwithHomeUE := 46; // location is IMS1 domain + const integer c_userProfile_SCSCFwithHomeUE_domain :=55; + const integer c_userProfile_ECSCFwithHomeUE := 47; // location is IMS1 domain + const integer c_userProfile_ISUP := 49; // + const integer c_userProfile_AS1 := 51; // Isc userProfile at AS1 + const integer c_userProfile_AS2 := 52; // Isc userProfile at AS2 + + const integer c_userProfile_ESINetSubscriber := 53; + const integer c_userProfile_ESINetPSAP := 54; + const integer c_userProfile_ESINetUpstreamElement := 55; + + // number of interface profile + const integer c_interfaceProfile_IMS_SUT_IBCF1 := 100; // Ic interface at IBCF1 located in SUT + const integer c_interfaceProfile_IMS_SUT_IBCF2 := 101; // Ic interface at IBCF2 located in SUT + const integer c_interfaceProfile_IMS_SUT_PCSCF1 := 110; // Gm interface towards UE1 located in SUT + const integer c_interfaceProfile_IMS_SUT_PCSCF2 := 111; // Gm interface towards UE2 located in SUT + const integer c_interfaceProfile_IMS_SUT_PCSCF := 112; // Mw interface at P-CSCF located in SUT + const integer c_interfaceProfile_IMS_SUT_SCSCF := 113; // Mw interface at S-CSCF located in SUT + const integer c_interfaceProfile_IMS_SUT_ICSCF := 114; // Mw interface at I-CSCF located in SUT + const integer c_interfaceProfile_IMS_SUT_MGCF := 115; // Mw interface at MGCF located in SUT + const integer c_interfaceProfile_IMS_SUT_AS := 116; // Isc interface at AS located in SUT + const integer c_interfaceProfile_IMS_SUT_ECSCF := 117; // Mw interface at E-CSCF located in SUT + const integer c_interfaceProfile_IMS_SUT_BCF := 118; // SIP interface at BCF located in SUT + const integer c_interfaceProfile_SUT_LIS := 119; + const integer c_interfaceProfile_SUT_ECRF := 120; + const integer c_interfaceProfile_SUT_ESRP := 121; + + // number of conference profile + const integer c_conferenceProfile_factoryURI := 800; // conference factory URI + + // number of service profile + const integer c_serviceProfile_EMERGENCY := 112; + const integer c_serviceProfile_EMERGENCY_INVALID := 666; + const integer c_serviceProfile_SUBSCRIBER := 115; + const integer c_serviceProfile_SUBSCRIPTION_SERVICE := 116; + + // number of SIPURL identifiers + const integer c_interfaceSIPURL_IMS_SUT_PCSCF1_domain := 1101; // c_interfaceProfile_IMS_SUT_PCSCF1 + const integer c_interfaceSIPURL_IMS_SUT_PCSCF1_ip := 1102; // c_interfaceProfile_IMS_SUT_PCSCF1 + + } // End of group UserProfileConstants + + + } // End of group Constants + + group globalSteps { + + /* + * + * @desc sets user parameters with PIXIT values + * @param p_user identifies the selected user configuration and location + * @verdict + */ + function f_init_userprofile( + in integer p_user + ) runs on ImsComponent { + + select(p_user){ + case (c_userProfile_UE1atSUThome) { //variant c_userProfile_UE1atSUThome + vc_userprofile.id := p_user; + vc_userprofile.currPort := PX_IMS_TS_UE1_PORT; + vc_userprofile.currIpaddr := PX_IMS_TS_UE1_IPADDR; + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; + vc_userprofile.bearerIpaddr := PX_IMS_SUT_UE1_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; + } + case (c_userProfile_ESINetSubscriber) { + vc_userprofile.id := p_user; + vc_userprofile.currPort := PX_ESINET_TS_SUBSCRIBER_PORT; + vc_userprofile.currIpaddr := PX_ESINET_TS_SUBSCRIBER_IPADDR; + vc_userprofile.contactPort := PX_ESINET_TS_SUBSCRIBER_PORT; + vc_userprofile.contactIpaddr := PX_ESINET_TS_SUBSCRIBER_IPADDR; + vc_userprofile.bearerIpaddr := PX_ESINET_SUT_IPADDR; + vc_userprofile.homeDomain := PX_ESINET_TS_SUBSCRIBER_HOME_DOMAIN; + vc_userprofile.publUsername := PX_ESINET_TS_SUBSCRIBER_PUBLIC_USER; + } + case (c_userProfile_ESINetUpstreamElement) { + vc_userprofile.id := p_user; + vc_userprofile.currPort := PX_ESINET_TS_UPSTREAM_PORT; + vc_userprofile.currIpaddr := PX_ESINET_TS_UPSTREAM_IPADDR; + vc_userprofile.contactPort := PX_ESINET_TS_UPSTREAM_PORT; + vc_userprofile.contactIpaddr := PX_ESINET_TS_UPSTREAM_IPADDR; + vc_userprofile.bearerIpaddr := PX_ESINET_SUT_IPADDR; + vc_userprofile.homeDomain := PX_ESINET_TS_UPSTREAM_HOME_DOMAIN; + vc_userprofile.publUsername := PX_ESINET_TS_UPSTREAM_PUBLIC_USER; + } + case (c_userProfile_ESINetPSAP) { + vc_userprofile.id := p_user; + vc_userprofile.currPort := PX_ESINET_TS_SUBSCRIBER_PORT; + vc_userprofile.currIpaddr := PX_ESINET_TS_SUBSCRIBER_IPADDR; + vc_userprofile.contactPort := PX_ESINET_TS_SUBSCRIBER_PORT; + vc_userprofile.contactIpaddr := PX_ESINET_TS_SUBSCRIBER_IPADDR; + vc_userprofile.bearerIpaddr := PX_ESINET_SUT_IPADDR; + vc_userprofile.homeDomain := PX_ESINET_TS_SUBSCRIBER_HOME_DOMAIN; + vc_userprofile.publUsername := PX_ESINET_TS_SUBSCRIBER_PUBLIC_USER; + vc_userprofile.privUsername := PX_ESINET_SUT_PRIVAT_USERNAME; + vc_userprofile.passwd := PX_ESINET_SUT_PRIVAT_PASSWD; + vc_userprofile.registrarDomain := PX_ESINET_SUT_REGISTRAR; + } + + } // End of 'select' statement + + } // End of function f_init_userprofile + + function f_initSipUrlFromCharstring(charstring p_uri) return SipUrl { + var charstring v_scheme := regexp(p_uri, charstring:"(sip[s]#(0,1)):([^@\\s]+)@?+", 0); + var charstring v_user := regexp(p_uri, charstring:"(sip[s]#(0,1)):([^@\\s]+)@?+", 1); + var charstring v_host_port := regexp(p_uri, charstring:"(sip[s]#(0,1)):([^@\\s]+)@(?+)", 2); + var charstring v_host := ""; + var charstring v_port := ""; + + template charstring t_has_port := pattern "?+:?+"; + if (match(v_host_port,t_has_port)) { + v_host := regexp(v_host_port, charstring:"(?+):(?+)",0); + v_port := regexp(v_host_port, charstring:"(?+):(?+)",1); + } else { + v_host := v_host_port; + v_port := "5060"; + } + + var SipUrl p_sipUrl := { + scheme := v_scheme, // contains "sip" + components := { + sip := { + userInfo := {userOrTelephoneSubscriber:=v_user, password:=omit}, + hostPort := { + host := v_host, // hostname, IPv4 or IPv6 + portField := str2int(v_port) // represented as an integer + } + } + }, + urlParameters := omit, + headers := omit + }; + + return(p_sipUrl) + } + + function f_initSipUrl( + in integer p_user + ) return SipUrl { + var SipUrl p_sipUrl := { + scheme := c_sipScheme, // contains "sip" + components := { + sip := { + userInfo := omit, + hostPort := { + host := omit, // hostname, IPv4 or IPv6 + portField := omit // represented as an integer + } + } + }, + urlParameters := omit, + headers := omit + }; + + select(p_user) { + case (c_userProfile_UE1atSUThome) { + p_sipUrl.components.sip.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_UE1_PUBLIC_USER, password:=omit}; + p_sipUrl.components.sip.hostPort := {host := PX_IMS_SUT_UE1_HOME_DOMAIN, portField :=omit} + } + case (c_userProfile_UE2atSUThome) { + p_sipUrl.components.sip.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_UE2_PUBLIC_USER, password:=omit}; + p_sipUrl.components.sip.hostPort := {host := PX_IMS_SUT_UE2_HOME_DOMAIN, portField :=omit} + } + case (c_serviceProfile_EMERGENCY) { + p_sipUrl.components.sip.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_EMERGENCY_SERVICE, password:=omit}; + p_sipUrl.components.sip.hostPort := {host := PX_IMS_SUT_EMERGENCY_HOME_DOMAIN, portField :=omit} + } + case (c_serviceProfile_SUBSCRIBER) { + p_sipUrl.components.sip.userInfo := { userOrTelephoneSubscriber := PX_ESINET_TS_SUBSCRIBER, password := omit}; + p_sipUrl.components.sip.hostPort := {host := PX_ESINET_TS_SUBSCRIBER_HOME_DOMAIN, portField :=omit} + } + case (c_serviceProfile_SUBSCRIPTION_SERVICE) { + p_sipUrl.components.sip.userInfo := { userOrTelephoneSubscriber := PX_ESINET_SUT_SERVICE, password := omit}; + p_sipUrl.components.sip.hostPort := {host := PX_ESINET_SUT_HOME_DOMAIN, portField :=omit} + } + + }; // End of 'select' statement + + return(p_sipUrl) + } // End of function f_initSipUrl + + + function f_initTelUrl( + in charstring p_subscriber + ) return SipUrl { + var SipUrl p_sipUrl := { + scheme := c_telScheme, // contains "tel" + components := { + tel := { + subscriber := p_subscriber + } + }, + urlParameters := omit, + headers := omit + }; + + return(p_sipUrl) + } // End of function f_initTelUrl + + function f_initUrnUrl( + in charstring p_namespaceId, + in charstring p_namespaceSpecificString + ) return SipUrl { + var SipUrl p_sipUrl := { + scheme := c_urnScheme, // contains "urn" + components := { + urn := { + namespaceId := p_namespaceId, + namespaceSpecificString := p_namespaceSpecificString + } + }, + urlParameters := omit, + headers := omit + }; + + return(p_sipUrl) + } // End of function f_initUrnUrl + + /* + * @desc sets user parameters with PIXIT values + * @param p_user identifies the selected user configuration and location + * @verdict + */ + function f_init_interfaceprofile( + in integer p_interface + ) runs on ImsComponent { + + vc_sent_label := { host := PX_IMS_SUT_UE_IPADDR, portField := PX_IMS_SUT_UE_PORT }; + + select(p_interface){ + case (c_interfaceProfile_IMS_SUT_IBCF1) { //variant c_interfaceProfile_IMS_SUT_IBCF1 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_IBCF1_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_IBCF1_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_IBCF1_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_IBCF2) { //variant c_interfaceProfile_IMS_SUT_IBCF2 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_IBCF2_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_IBCF2_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_IBCF2_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_PCSCF1) { //variant c_interfaceProfile_IMS_SUT_PCSCF1 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_PCSCF1_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_PCSCF1_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_PCSCF1_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_PCSCF2) { //variant c_interfaceProfile_IMS_SUT_PCSCF2 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_PCSCF2_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_PCSCF2_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_PCSCF2_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_PCSCF) { //variant c_interfaceProfile_IMS_SUT_PCSCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_PCSCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_PCSCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_PCSCF_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_SCSCF) { //variant c_interfaceProfile_IMS_SUT_SCSCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_SCSCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_SCSCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_SCSCF_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_ICSCF) { //variant c_interfaceProfile_IMS_SUT_ICSCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_ICSCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_ICSCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_ICSCF_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_MGCF) { //variant c_interfaceProfile_IMS_SUT_MGCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_IMGCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_IMGCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_IMGCF_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_AS) { //variant c_interfaceProfile_IMS_SUT_AS + vc_interfaceprofile.SUTPort := PX_IMS_SUT_AS_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_AS_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_AS_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_BCF) { //variant c_interfaceProfile_IMS_SUT_BCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_BCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_BCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_BCF_HOME_DOMAIN; + } + case (c_interfaceProfile_SUT_LIS) { //variant c_interfaceProfile_SUT_LIS + vc_interfaceprofile.SUTPort := PX_SUT_LIS_SIP_PORT; + vc_interfaceprofile.SUTIpaddr := PX_SUT_LIS_SIP_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_SUT_LIS_SIP_HOME_DOMAIN; + } + case (c_interfaceProfile_SUT_ECRF) { //variant c_interfaceProfile_SUT_ECRF + vc_interfaceprofile.SUTPort := PX_SUT_ECRF_SIP_PORT; + vc_interfaceprofile.SUTIpaddr := PX_SUT_ECRF_SIP_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_SUT_ECRF_SIP_HOME_DOMAIN; + } + case (c_interfaceProfile_SUT_ESRP) { //variant c_interfaceProfile_SUT_ECRF + vc_interfaceprofile.SUTPort := PX_SUT_ESRP_SIP_PORT; + vc_interfaceprofile.SUTIpaddr := PX_SUT_ESRP_SIP_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_SUT_ESRP_SIP_HOME_DOMAIN; + } + } + } // End of function f_init_interfaceprofile + + } // End of group globalSteps + +} // End of module LibNg112_Steps diff --git a/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Templates.ttcn b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..673d94ce05a667361b9d15f6ecc3d689d7902df9 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_Templates.ttcn @@ -0,0 +1,847 @@ +module LibNg112_Templates { + + // LibCommon + import from LibCommon_DataStrings all; + + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Common all; + + // LibIms + import from LibIms_SIPTypesAndValues all; + import from LibIms_Templates all; + + // LibXMLTypes + import from XSD all; + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/pidf.xsd"; + } + + // LibItsHttp + import from LibHttp_MessageBodyTypes all; + import from LibHttp_JsonMessageBodyTypes all; + import from LibHttp_JsonTemplates all; + import from LibHttp_Templates all; + import from LibHttp_TypesAndValues all; + import from urn_ietf_params_xml_ns_pidf_geopriv10 all; + + // LibNg112 + import from LibNg112_TypesAndValues all; + import from LibNg112_SubscriptionPayloads all; + import from LibNg112_DequeueRegistration all; + + group ng112_invite { + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_IMS_Ng112( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(omit) Geolocation p_geolocation := omit, + template(omit) GeolocationRouting p_geolocationRouting := omit, + template(omit) UserAgent p_userAgent := omit + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + allow := { fieldName := ALLOW_E, methods := { "INVITE", "ACK", "BYE", "MESSAGE", "OPTIONS", "CANCEL" } }, + geolocation := p_geolocation, + geolocationRouting := p_geolocationRouting, + userAgent := p_userAgent + } + } // End of template m_INVITE_Request_IMS_Ng112 + + template INVITE_Request mw_INVITE_Request_IMS_Ng112( + template(present) SipUrl p_requestUri := ?, + template(present) CallId p_callId := ?, + template(present) CSeq p_cSeq := ?, + template(present) From p_from := ?, + template(present) To p_to := ?, + template(present) Via p_via := ?, + template(present) LibSip_SIPTypesAndValues.Contact p_contact := ?, + template Require p_require := *, + template Route p_route := *, + template RecordRoute p_recordRoute := *, + template Supported p_supported := *, + template PChargingVector p_pChargingVector := *, + template(present) MessageBody p_mb := ?, + template Geolocation p_geolocation := *, + template GeolocationRouting p_geolocationRouting := *, + template UserAgent p_userAgent := * + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + geolocation := p_geolocation, + geolocationRouting := p_geolocationRouting, + userAgent := p_userAgent + } + } // End of template mw_INVITE_Request_IMS_Ng112 + + template(omit) INVITE_Request m_INVITE_Request_IMS_CallInfo_Ng112( + template(value) SipUrl p_requestUri , + template(value) CallId p_callId , + template(value) CSeq p_cSeq , + template(value) From p_from , + template(value) To p_to , + template(value) Via p_via , + template(value) LibSip_SIPTypesAndValues.Contact p_contact , + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb , + template(omit) Geolocation p_geolocation := omit, + template(omit) GeolocationRouting p_geolocationRouting := omit, + template(omit) UserAgent p_userAgent := omit, + template(omit) CallInfo p_callInfo := omit + ) modifies m_INVITE_Request_IMS_Ng112 := { + msgHeader := { + callInfo := p_callInfo + } + } // End of template m_INVITE_Request_IMS_CallInfo_Ng112 + + template INVITE_Request mw_INVITE_Request_IMS_CallInfo_Ng112( + template(present) SipUrl p_requestUri := ?, + template(present) CallId p_callId := ?, + template(present) CSeq p_cSeq := ?, + template(present) From p_from := ?, + template(present) To p_to := ?, + template(present) Via p_via := ?, + template(present) LibSip_SIPTypesAndValues.Contact p_contact := ?, + template Require p_require := *, + template Route p_route := *, + template RecordRoute p_recordRoute := *, + template Supported p_supported := *, + template PChargingVector p_pChargingVector := *, + template(present) MessageBody p_mb := ?, + template Geolocation p_geolocation := *, + template GeolocationRouting p_geolocationRouting := *, + template UserAgent p_userAgent := *, + template CallInfo p_callInfo := * + ) modifies mw_INVITE_Request_IMS_Ng112 := { + msgHeader := { + callInfo := p_callInfo + } + } // End of template mw_INVITE_Request_IMS_CallInfo_Ng112 + + } // End of group ng112_invite + + group ng112_message { + + template(value) MESSAGE_Request m_MESSAGE_Request_IMS_Ng112( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(omit) Geolocation p_geolocation := omit, + template(omit) GeolocationRouting p_geolocationRouting := omit, + template(omit) UserAgent p_userAgent := omit + ) modifies m_MESSAGE_Request_MBody_UE := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_plainText), + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported, + geolocation := p_geolocation, + geolocationRouting := p_geolocationRouting, + userAgent := p_userAgent + }, + messageBody := p_mb + } // End of template m_MESSAGE_Request_IMS_Ng112 + + template(value) MESSAGE_Request m_MESSAGE_Request_IMS_CallInfo_Ng112( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(omit) Geolocation p_geolocation := omit, + template(omit) GeolocationRouting p_geolocationRouting := omit, + template(omit) UserAgent p_userAgent := omit, + template(omit) CallInfo p_callInfo := omit + ) modifies m_MESSAGE_Request_IMS_Ng112 := { + msgHeader := { + callInfo := p_callInfo + } + }// End of template m_MESSAGE_Request_IMS_CallInfo_Ng112 + + template(present) MESSAGE_Request mw_MESSAGE_Request_IMS_Ng112( + template(present) SipUrl p_requestUri := ?, + template(present) CallId p_callId := ?, + template(present) CSeq p_cSeq := ?, + template(present) From p_from := ?, + template(present) To p_to := ?, + template(present) Via p_via := ?, + template Require p_require := *, + template Route p_route := *, + template Supported p_supported := *, + template(present) MessageBody p_mb := ? + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + contentType := m_contentType(c_plainText), + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } // End of template mw_MESSAGE_Request_IMS_Ng112 + + template(present) MESSAGE_Request mw_MESSAGE_Request_IMS_CallInfo_Ng112( + template(present) SipUrl p_requestUri := ?, + template(present) CallId p_callId := ?, + template(present) CSeq p_cSeq := ?, + template(present) From p_from := ?, + template(present) To p_to := ?, + template(present) Via p_via := ?, + template Require p_require := *, + template Route p_route := *, + template Supported p_supported := *, + template(present) MessageBody p_mb := ?, + template CallInfo p_callInfo := * + ) modifies mw_MESSAGE_Request_IMS_Ng112 := { + msgHeader := { + callInfo := p_callInfo + } + } // End of template mw_MESSAGE_Request_IMS_Ng112 + + template(value) OPTIONS_Request m_OPTIONS_Request_IMS_Ng112( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(omit) Geolocation p_geolocation := omit, + template(omit) GeolocationRouting p_geolocationRouting := omit, + template(omit) UserAgent p_userAgent := omit + ) modifies m_OPTIONS_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_plainText), + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported, + geolocation := p_geolocation, + geolocationRouting := p_geolocationRouting, + userAgent := p_userAgent + }, + messageBody := p_mb + } // End of template m_OPTIONS_Request_IMS_Ng112 + + template(present) OPTIONS_Request mw_OPTIONS_Request_IMS_Ng112( + template(present) CallId p_callId := ?, + template(present) SipUrl p_requestUri := ?, + template(present) CSeq p_cSeq := ?, + template(present) From p_from := ?, + template(present) To p_to := ?, + template(present) Via p_via := ?, + template Require p_require := *, + template Route p_route := *, + template Supported p_supported := *, + template(present) MessageBody p_mb := ? + ) modifies mw_OPTIONS_Request_Base := { + msgHeader := { + contentType := m_contentType(c_plainText), + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } // End of template mw_OPTIONS_Request_IMS_Ng112 + + template(value) OPTIONS_Request m_OPTIONS_Request_IMS_CallInfo_Ng112( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(omit) Geolocation p_geolocation := omit, + template(omit) GeolocationRouting p_geolocationRouting := omit, + template(omit) UserAgent p_userAgent := omit, + template(omit) CallInfo p_callInfo := omit + ) modifies m_OPTIONS_Request_IMS_Ng112 := { + msgHeader := { + callInfo := p_callInfo + } + }// End of template m_OPTIONS_Request_IMS_CallInfo_Ng112 + + template(present) OPTIONS_Request mw_OPTIONS_Request_IMS_CallInfo_Ng112( + template(present) CallId p_callId := ?, + template(present) SipUrl p_requestUri := ?, + template(present) CSeq p_cSeq := ?, + template(present) From p_from := ?, + template(present) To p_to := ?, + template(present) Via p_via := ?, + template Require p_require := *, + template Route p_route := *, + template Supported p_supported := *, + template(present) MessageBody p_mb := ?, + template CallInfo p_callInfo := * + ) modifies mw_OPTIONS_Request_IMS_Ng112 := { + msgHeader := { + callInfo := p_callInfo + } + } // End of template mw_OPTIONS_Request_IMS_Ng112 + + } // End of group ng112_message + + group routes { + + // FIXME To unify with LibSip_Template Route & RouteBody + template(value) Route m_route( + template(value) RouteBody_List p_routeBody + ) := { + fieldName := ROUTE_E, + routeBody := p_routeBody + } // End of template m_route + + template(value) RouteBody m_routeBody_currIpAddr_1( + template(value) charstring p_host, + template(value) integer p_portField := 5060 + ) := { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := omit, + hostPort := { + host := p_host, + portField := p_portField + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + + } // End of group routes + + group geolocation { + + template (omit) Geolocation m_geolocation( + in template (value) SipUrl p_addrSpec, + in template (omit) SemicolonParam_List p_geolocParam := omit + ) := { + fieldName := GEOLOCATION_E, + addrSpec := p_addrSpec, + geolocParam := p_geolocParam + } // End of template m_geolocation + + template Geolocation mw_geolocation( + template (present) SipUrl p_addrSpec := ?, + template SemicolonParam_List p_geolocParam := * + ) := { + fieldName := GEOLOCATION_E, + addrSpec := p_addrSpec, + geolocParam := p_geolocParam + } // End of template mw_geolocation + + template (omit) GeolocationRouting m_geolocation_routing( + in template (value) GeolocationRoutingState p_state := GEOLOCATION_ROUTING_YES_E, + in template (omit) GenericParam p_genericValue := omit + ) := { + fieldName := GEOLOCATION_ROUTING_E, + state := p_state, + genericValue := p_genericValue + } // End of template m_geolocation_routing + + template GeolocationRouting mw_geolocation_routing( + template (present) GeolocationRoutingState p_state := ?, + template GenericParam p_genericValue := * + ) := { + fieldName := GEOLOCATION_ROUTING_E, + state := p_state, + genericValue := p_genericValue + } // End of template mw_geolocation_routing + + } // End of group geolocation + + group sip_call { + + template (value) CallId m_call_id( + in template (value) CallidString p_callid + ) := { + fieldName := CALL_ID_E, + callid := p_callid + } // End of template m_call_id + + template (present) CallId mw_call_id( + template (present) CallidString p_callid := ? + ) := { + fieldName := CALL_ID_E, + callid := p_callid + } // End of template mw_call_id + + template (omit) CallInfo m_call_info( + in template (value) charstring p_url, + in template (omit) SemicolonParam_List p_infoParams := omit + ) := { + fieldName := CALL_INFO_E, + callInfoBody := { + { + url := p_url, + infoParams := p_infoParams + } + } + } // End of template m_call_info + + template CallInfo mw_call_info( + in template (present) charstring p_url := ?, + in template SemicolonParam_List p_infoParams := * + ) := { + fieldName := CALL_INFO_E, + callInfoBody := { + { + url := p_url, + infoParams := p_infoParams + } + } + } // End of template m_call_info + + template CallInfo mw_call_info_incidentId( + in template (present) charstring p_url := ?, + in template SemicolonParam_List p_infoParams := mw_semicolonParams_callInfo("EmergencyCallData.IncidentId") + ) := { + fieldName := CALL_INFO_E, + callInfoBody := { + { + url := p_url, + infoParams := p_infoParams + } + } + } // End of template m_call_info_incidentId + + template CallInfo mw_call_info_callId( + in template (present) charstring p_url := ?, + in template SemicolonParam_List p_infoParams := mw_semicolonParams_callInfo("EmergencyCallData.CallId") + ) := { + fieldName := CALL_INFO_E, + callInfoBody := { + { + url := p_url, + infoParams := p_infoParams + } + } + } // End of template m_call_info_callId + + template CallInfo mw_call_info_sourceId( + in template (present) charstring p_url := ?, + in template SemicolonParam_List p_infoParams := mw_semicolonParams_callInfo("EmergencyCallData.SourceId") + ) := { + fieldName := CALL_INFO_E, + callInfoBody := { + { + url := p_url, + infoParams := p_infoParams + } + } + } // End of template m_call_info_callId + + template(value) SemicolonParam_List m_semicolonParams_callInfo( + template(omit) GenValue p_purpose := omit + ) := { + { + id := "purpose", + paramValue := p_purpose + } + } + + template SemicolonParam_List mw_semicolonParams_callInfo( + template charstring p_purpose + ) := { + { + id := "purpose", + paramValue := { tokenOrHost := pattern "*{p_purpose}*" } + } + } + + } // End of group sip_call + + group ng112_presence { + + template (value) Presence m_presence( + in template (value) XSD.AnyURI p_entity, + in template (value) Presence.tuple_list p_tuple_list := { }, + in template (value) Presence.elem_list p_elem_list := { } + ) := { + entity := p_entity, + tuple_list := p_tuple_list, + note_list := { }, + elem_list := p_elem_list + + } // End of template m_presence + + template (omit) Tuple m_tuple( + in template (value) XSD.ID p_id, + in template (value) Status p_status, + in template (value) Tuple.elem_list p_elem_list := {}, + in template (value) Tuple.note_list p_note_list := { }, + in template (omit) urn_ietf_params_xml_ns_pidf.Contact p_contact := omit, + in template (omit) XSD.DateTime p_timestamp := omit + ) := { + id := p_id, + status := p_status, + elem_list := p_elem_list, + contact := p_contact, + note_list := p_note_list, + timestamp_ := p_timestamp + } // end of template m_tuple + + + template(present) Presence mw_Presence_Base( + template (present) Geopriv p_geopriv + ) modifies mw_Presence_Dummy := { + tuple_list := { + { + status := { + geopriv := p_geopriv + } + } + } + } + + + template(present) Presence mw_Presence_Dummy := { + entity := ?, + tuple_list := { + { + id := ?, + status := { + basic := *, + geopriv := ?, + elem_list := { * } + } , + elem_list := ?, + contact := *, + note_list := ?, + timestamp_ := * + } + }, + note_list := ?, + elem_list := ? + } + + } // End of group ng112_presence + + group sip_subscribe { + template(value) Expires m_Expires_3600 modifies m_Expires_base := {deltaSec := "3600"} + + template(value) Expires m_Expires_0 modifies m_Expires_base := {deltaSec := "0"} + + + template(value) Event m_Event_elementState modifies m_Event_base := {eventType := "emergency-ElementState"} + template(value) Event m_Event_serviceState modifies m_Event_base := {eventType := "emergency-ServiceState"} + template(value) Event m_Event_securityPosture modifies m_Event_base := {eventType := "emergency-SecurityPosture"} + template(value) Event m_Event_queueState modifies m_Event_base := { eventType := "emergency-QueueState"} + + template (present) ElementStatePayload mw_element_state_payload( + template (present) charstring p_elementId := ?, + template (present) charstring p_state := pattern "normal|scheduledMaintenance|serviceDisruption|overloaded|goingDown|down", + template charstring p_reason := * + ) := { + elementState := { + elementId := p_elementId, + state := p_state, + reason := p_reason + } + } // End of template mw_element_state_payload + + + template (present) SecurityPosturePayload mw_security_posture( + template (present) charstring p_service_name := ?, + template (present) charstring p_service_domain := ?, + template (present) charstring p_posture := pattern "Green|Yellow|Orange|Red" + ) := { + service := { + name := p_service_name, + domain := p_service_domain + }, + securityPosture := p_posture + } + + + template (present) ServiceStatePayload mw_service_state_payload( + template (present) charstring p_service_name := ?, + template (present) charstring p_service_domain := ?, + template (present) charstring p_service_state := pattern "Normal|Unstaffed|ScheduledMaintenanceDown|ScheduledMaintenanceAvailable|MajorIncidentInProgress|Partial|Overloaded|GoingDown|Down", + template (present) charstring p_service_state_reason := ? + ) := { + service := { + name := p_service_name, + domain := p_service_domain + }, + serviceState := { + state := p_service_state, + reason := p_service_state_reason + } + } // End of template mw_service_state_payload + + + template (present) SecurityPosturePayload mw_security_posture_payload( + template (present) charstring p_service_name := ?, + template (present) charstring p_service_domain := ?, + template (present) charstring p_security_posture := pattern "green|yellow|orange|red" + ) := { + service := { + name := p_service_name, + domain := p_service_domain + }, + securityPosture := p_security_posture + } // End of template mw_security_posture_payload + + + template (present) QueueStatePayload mw_queue_state_payload( + template (present) QueueStateEventUri p_queue_uri := ?, + template (present) QueueStateEventQueueLength p_queue_length := ?, + template (present) QueueStateEventMaxLength p_queue_max := ?, + template (present) QueueStateValuesCode p_queue_code := ? + ) := { + QueueStateEventUri := p_queue_uri, + QueueStateEventQueueLength := p_queue_length, + QueueStateEventMaxLength := p_queue_max, + QueueStateValuesCode := p_queue_code + } // End of template mw_queue_state_payload + + + template(present) SUBSCRIBE_Request mw_SUBSCRIBE_QueueState_Request( + template(present) From p_from := ?, + template(present) To p_to := ? + ) modifies mw_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_queueState + } + } + + + + template(present) NOTIFY_Request mw_NOTIFY_Presence_Base( + template CallId p_callId + ) modifies mw_NOTIFY_Request_Base := { + msgHeader := { + contentType :={ + fieldName := CONTENT_TYPE_E, + mTypeSubtype := "application/pidf+xml" + } + } + } + + + template(present) NOTIFY_Request mw_NOTIFY_ElementState_Base( + template CallId p_callId + ) modifies mw_NOTIFY_Request_Base := { + msgHeader := { + contentType :={ + fieldName := CONTENT_TYPE_E, + mTypeSubtype := "application/emergencyCallData.ElementState+json" + } + } + } + + + template(present) NOTIFY_Request mw_NOTIFY_ServiceState_Base( + template CallId p_callId + ) modifies mw_NOTIFY_Request_Base := { + msgHeader := { + contentType :={ + fieldName := CONTENT_TYPE_E, + mTypeSubtype := "application/emergencyCallData.ServiceState+json" + } + } + } + + + template(present) NOTIFY_Request mw_NOTIFY_SecurityPosture_Base( + template CallId p_callId + ) modifies mw_NOTIFY_Request_Base := { + msgHeader := { + contentType :={ + fieldName := CONTENT_TYPE_E, + mTypeSubtype := "application/emergencyCallData.SecurityPosture+json" + } + } + } + + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Presence_Request_Event( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_SUBSCRIBE_Request_IMS := { + msgHeader := { + event := m_Event_presence, + expires := m_Expires_3600 + } + } + template(value) SUBSCRIBE_Request m_UNSUBSCRIBE_Presence_Request_Event( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_SUBSCRIBE_Request_IMS := { + msgHeader := { + event := m_Event_presence, + expires := m_Expires_0 + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_ElementState_Request_Event( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_SUBSCRIBE_Request_IMS := { + msgHeader := { + event := m_Event_elementState, + expires := m_Expires_3600 + } + } + template(value) SUBSCRIBE_Request m_UNSUBSCRIBE_ElementState_Request_Event( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_SUBSCRIBE_Request_IMS := { + msgHeader := { + event := m_Event_elementState, + expires := m_Expires_0 + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_ServiceState_Request_Event( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_SUBSCRIBE_Request_IMS := { + msgHeader := { + event := m_Event_serviceState, + expires := m_Expires_3600 + } + } + + template(value) SUBSCRIBE_Request m_UNSUBSCRIBE_ServiceState_Request_Event( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_SUBSCRIBE_Request_IMS := { + msgHeader := { + event := m_Event_serviceState, + expires := m_Expires_0 + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_SecurityPosture_Request_Event( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_SUBSCRIBE_Request_IMS := { + msgHeader := { + event := m_Event_securityPosture, + expires := m_Expires_3600 + } + } + + template(value) SUBSCRIBE_Request m_UNSUBSCRIBE_SecurityPosture_Request_Event( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_SUBSCRIBE_Request_IMS := { + msgHeader := { + event := m_Event_securityPosture, + expires := m_Expires_0 + } + } + + } + +} // End of module LibNg112_Templates diff --git a/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_TestSystem.ttcn b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_TestSystem.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..783015171280c42da5f87fc1a70c12eab2b00e15 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_TestSystem.ttcn @@ -0,0 +1,24 @@ +module LibNg112_TestSystem { + + // LibCommon + import from LibCommon_Sync all; + + // LibHttp + import from LibHttp_TestSystem all; + + // LibSip + import from LibSip_Interface all; + + // LibIms + import from LibIms_Interface all; + + type component HttpImsComponent extends ImsComponent, HttpComponent, ServerSyncComp { + + } // End of component HttpImsComponent + + type component TestAdapter { + port SipPort SIPP; + port HttpPort httpPort; + } // End of component TestAdapter + +} // End of module LibNg112_TestSystem diff --git a/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_TypesAndValues.ttcn b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..7e4f34cf474b81be29df6830f4478b327ca4030c --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/ttcn/LibNg112_TypesAndValues.ttcn @@ -0,0 +1,6 @@ +module LibNg112_TypesAndValues { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + +} // End of module LibNg112_TypesAndValues diff --git a/ttcn/LibEmcom/LibNg112/xsd/GML-pidf-lo-shape.xsd b/ttcn/LibEmcom/LibNg112/xsd/GML-pidf-lo-shape.xsd new file mode 100644 index 0000000000000000000000000000000000000000..fc092d1267e2b6107b083a2e311d49d4908235ad --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/GML-pidf-lo-shape.xsd @@ -0,0 +1,119 @@ + + + + + + Geodetic Shapes for PIDF-LO + + + This document defines geodetic shape types for PIDF-LO. + + Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/NoTargetNamespace.ttcn b/ttcn/LibEmcom/LibNg112/xsd/NoTargetNamespace.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..c3f880265d06ef57876877a1dbc02a771c0425de --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/NoTargetNamespace.ttcn @@ -0,0 +1,183 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: NoTargetNamespace.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - Ims3gpp.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "NoTargetNamespace" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module NoTargetNamespace { + + +import from XSD all; + + +type record TIMS3GPP +{ + XSD.Decimal version, + record of XSD.String attr optional, + union { + TAlternativeService alternative_service, + XSD.String service_info + } choice, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (version) "attribute"; + variant (attr) "anyAttributes"; + variant (choice) "untagged"; + variant (choice.alternative_service) "name as 'alternative-service'"; + variant (choice.service_info) "name as 'service-info'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement"; +}; + + +type record TAlternativeService +{ + record of XSD.String attr optional, + TType type_, + XSD.String reason, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (attr) "anyAttributes"; + variant (type_) "name as 'type'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement"; +}; + + +type record TType +{ + record of XSD.String attr optional, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (attr) "anyAttributes"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement"; +}; + + +type record TAction +{ + record of XSD.String attr optional, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (attr) "anyAttributes"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement"; +}; + + +/* root element */ + + +type TIMS3GPP Ims_3gpp +with { + variant "name as 'ims-3gpp'"; + variant "element"; +}; + + +/* emergency element for //ims-3gpp//alternative-service//type */ + + +type record Emergency +{ + +} +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +/* restoration element for //ims-3gpp//alternative-service//type */ + + +type record Restoration +{ + +} +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +/* action element for //ims-3gpp//alternative-service */ + + +type TAction Action +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +/* emergency-registration element for //ims-3gpp//alternative-service//action */ + + +type record Emergency_registration +{ + +} +with { + variant "name as 'emergency-registration'"; + variant "element"; +}; + + +/* initial-registration element for //ims-3gpp//alternative-service//action */ + + +type record Initial_registration +{ + +} +with { + variant "name as 'initial-registration'"; + variant "element"; +}; + + +} +with { + encode "XML"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/LibEmcom/LibNg112/xsd/RFC3863_pidf.xsd b/ttcn/LibEmcom/LibNg112/xsd/RFC3863_pidf.xsd new file mode 100644 index 0000000000000000000000000000000000000000..c60828a4231807faa64527b04d21ddf85ad96f41 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/RFC3863_pidf.xsd @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This attribute may be used on any element within an optional + PIDF extension to indicate that the corresponding element must + be understood by the PIDF processor if the enclosing optional + element is to be handled. + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/RFC4119_geopriv10.xsd b/ttcn/LibEmcom/LibNg112/xsd/RFC4119_geopriv10.xsd new file mode 100644 index 0000000000000000000000000000000000000000..ca88f4c5bb4764b02b534935d5571cd8826ad0e8 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/RFC4119_geopriv10.xsd @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/RFC4119_geopriv10_basic_policy.xsd b/ttcn/LibEmcom/LibNg112/xsd/RFC4119_geopriv10_basic_policy.xsd new file mode 100644 index 0000000000000000000000000000000000000000..225c4dc23a971d6525d160deeff5e392ac30851a --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/RFC4119_geopriv10_basic_policy.xsd @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/RFC5139_pdif_geopriv10_civic_address.xsd b/ttcn/LibEmcom/LibNg112/xsd/RFC5139_pdif_geopriv10_civic_address.xsd new file mode 100644 index 0000000000000000000000000000000000000000..b5d849602b116d3e2dd18293a4c1ba5e7dac0584 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/RFC5139_pdif_geopriv10_civic_address.xsd @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/RFC5222_lost.xsd b/ttcn/LibEmcom/LibNg112/xsd/RFC5222_lost.xsd new file mode 100644 index 0000000000000000000000000000000000000000..58e1f05afaa805368b1e6065afbaefcf74344e21 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/RFC5222_lost.xsd @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Exception pattern. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Any element not in the LoST namespace. + + + + + + + + + + + A wildcard pattern for including any element + from any other namespace. + + + + + + + + + + A wildcard pattern for including any element + from any other namespace. + + + + + + + + A point where future extensions + (elements from other namespaces) + can be added. + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/RFC5985_held.xsd b/ttcn/LibEmcom/LibNg112/xsd/RFC5985_held.xsd new file mode 100644 index 0000000000000000000000000000000000000000..3e78deab17d83c2cf99c679eaf9cbf866cf85790 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/RFC5985_held.xsd @@ -0,0 +1,136 @@ + + + + + This document (RFC 5985) defines HELD messages. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/RFC6155_held_id.xsd b/ttcn/LibEmcom/LibNg112/xsd/RFC6155_held_id.xsd new file mode 100644 index 0000000000000000000000000000000000000000..45689870d7e47ffe292c39d48af1fe8ac74462b5 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/RFC6155_held_id.xsd @@ -0,0 +1,108 @@ + + + + + +HELD Device Identity + + +This document defines Device identity elements for HELD. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/RFC7459_pidf_lo.xsd b/ttcn/LibEmcom/LibNg112/xsd/RFC7459_pidf_lo.xsd new file mode 100644 index 0000000000000000000000000000000000000000..53276f379b662f96794c20f6a948d8c54eaf2d48 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/RFC7459_pidf_lo.xsd @@ -0,0 +1,50 @@ + + + + + PIDF-LO Confidence + + + This schema defines an element that is used for indicating + confidence in PIDF-LO documents. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/UsefulTtcn3Types.ttcn.txt b/ttcn/LibEmcom/LibNg112/xsd/UsefulTtcn3Types.ttcn.txt new file mode 100644 index 0000000000000000000000000000000000000000..abc4b8d56c15d5f1e141d48266e5bb4ac0cc2aff --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/UsefulTtcn3Types.ttcn.txt @@ -0,0 +1,95 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B +* +* 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: UsefulTtcn3Types.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +module UsefulTtcn3Types { + + + type integer byte (-128 .. 127) /*with { variant "8 bit" }*/; + + type integer unsignedbyte (0 .. 255) /*with { variant "unsigned 8 bit" }*/; + + type integer short (-32768 .. 32767) /*with { variant "16 bit" }*/; + + type integer unsignedshort (0 .. 65535) /*with { variant "unsigned 16 bit" }*/; + + type integer long (-2147483648 .. 2147483647) /*with { variant "32 bit" }*/; + + type integer unsignedlong (0 .. 4294967295) /*with { variant "unsigned 32 bit" }*/; + + type integer longlong ( -9223372036854775808 .. 9223372036854775807 ) /*with { variant "64 bit" }*/; + + type integer unsignedlonglong ( 0 .. 18446744073709551615 ) /*with { variant "unsigned 64 bit" }*/; + + type float IEEE754float /*with { variant "IEEE754 float" }*/; + + type float IEEE754double /*with { variant "IEEE754 double" }*/; + + type float IEEE754extfloat /*with { variant "IEEE754 extended float" }*/; + + type float IEEE754extdouble /*with { variant "IEEE754 extended double" }*/; + + type universal charstring utf8string /*with { variant "UTF-8" }*/; + + type universal charstring bmpstring ( char ( 0,0,0,0 ) .. char ( 0,0,255,255) ) /*with { variant "UCS-2" }*/; + + type universal charstring utf16string ( char ( 0,0,0,0 ) .. char ( 0,16,255,255) ) /*with { variant "UTF-16" }*/; + + type universal charstring iso8859string ( char ( 0,0,0,0 ) .. char ( 0,0,0,255) ) /*with { variant "8 bit" }*/; + + type record IDLfixed + { + unsignedshort digits, + short scale, + charstring value_ + } + /*with { + variant "IDL:fixed FORMAL/01-12-01 v.2.6"; + }*/; + + /* + type charstring char length (1); + + NOTE 1: The name of this useful type is the same as the TTCN-3 keyword used to denote universal + charstring values in the quadraple form. In general it is disallowed to use TTCN-3 keywords as + identifiers. The "char" useful type is a solitary exception and allowed only for backward compatibility + with previous versions of the TTCN-3 standard. (except Titan doesn't) + + NOTE 2: The special string "8 bit" defined in clause 28.2.3 may be used with this type to specify a given encoding + for its values. Also, other properties of the base type can be changed by using attribute mechanisms. + */ + + type universal charstring uchar length (1); + + /* + NOTE: Special strings defined in clause 28.2.3 except "8 bit" may be used with this type to specify a given + encoding for its values. Also, other properties of the base type can be changed by using attribute + mechanisms. + */ + + type bitstring bit length (1); + + type hexstring hex length (1); + + type octetstring octet length (1); + +} +with { +encode "XML"; +} diff --git a/ttcn/LibEmcom/LibNg112/xsd/XSD.ttcn b/ttcn/LibEmcom/LibNg112/xsd/XSD.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..03eafa5a0ae00be1a182b02da60335bb83c9d40a --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/XSD.ttcn @@ -0,0 +1,337 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B +* +* 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: XSD.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +module XSD { + +import from UsefulTtcn3Types all; + +//These constants are used in the XSD date/time type definitions +const charstring + dash := "-", + cln := ":", + year := "[0-9]#4", + yearExpansion := "(-([1-9][0-9]#(0,))#(,1))#(,1)", + month := "(0[1-9]|1[0-2])", + dayOfMonth := "(0[1-9]|[12][0-9]|3[01])", + hour := "([01][0-9]|2[0-3])", + minute := "([0-5][0-9])", + second := "([0-5][0-9])", + sFraction := "(.[0-9]#(1,))#(,1)", + endOfDayExt := "24:00:00(.0#(1,))#(,1)", + nums := "[0-9]#(1,)", + ZorTimeZoneExt := "(Z|[+-]((0[0-9]|1[0-3]):[0-5][0-9]|14:00))#(,1)", + durTime := "(T[0-9]#(1,)"& + "(H([0-9]#(1,)(M([0-9]#(1,)(S|.[0-9]#(1,)S))#(,1)|.[0-9]#(1,)S|S))#(,1)|"& + "M([0-9]#(1,)(S|.[0-9]#(1,)S)|.[0-9]#(1,)M)#(,1)|"& + "S|"& + ".[0-9]#(1,)S))" + +//anySimpleType + +type XMLCompatibleString AnySimpleType +with { +variant "XSD:anySimpleType"; +}; + +//anyType; + +type record AnyType +{ + record of String embed_values optional, + record of String attr optional, + record of String elem_list +} +with { +variant "XSD:anyType"; +variant "embedValues"; +variant (attr) "anyAttributes"; +variant (elem_list) "anyElement"; +}; +// String types + +type XMLCompatibleString String +with { +variant "XSD:string"; +}; + +type XMLStringWithNoCRLFHT NormalizedString +with { +variant "XSD:normalizedString"; +}; + +type NormalizedString Token +with { +variant "XSD:token"; +}; + +type XMLStringWithNoWhitespace Name +with { +variant "XSD:Name"; +}; + +type XMLStringWithNoWhitespace NMTOKEN +with { +variant "XSD:NMTOKEN"; +}; + +type Name NCName +with { +variant "XSD:NCName"; +}; + +type NCName ID +with { +variant "XSD:ID"; +}; + +type NCName IDREF +with { +variant "XSD:IDREF"; +}; + +type NCName ENTITY +with { +variant "XSD:ENTITY"; +}; + +type octetstring HexBinary +with { +variant "XSD:hexBinary"; +}; + +type octetstring Base64Binary +with { +variant "XSD:base64Binary"; +}; + +type XMLStringWithNoCRLFHT AnyURI +with { +variant "XSD:anyURI"; +}; + +type charstring Language (pattern "[a-zA-Z]#(1,8)(-\w#(1,8))#(0,)") +with { +variant "XSD:language"; +}; +// Integer types + +type integer Integer +with { +variant "XSD:integer"; +}; + +type integer PositiveInteger (1 .. infinity) +with { +variant "XSD:positiveInteger"; +}; + +type integer NonPositiveInteger (-infinity .. 0) +with { +variant "XSD:nonPositiveInteger"; +}; + +type integer NegativeInteger (-infinity .. -1) +with { +variant "XSD:negativeInteger"; +}; + +type integer NonNegativeInteger (0 .. infinity) +with { +variant "XSD:nonNegativeInteger"; +}; + +type longlong Long +with { +variant "XSD:long"; +}; + +type unsignedlonglong UnsignedLong +with { +variant "XSD:unsignedLong"; +}; + +type long Int +with { +variant "XSD:int"; +}; + +type unsignedlong UnsignedInt +with { +variant "XSD:unsignedInt"; +}; + +type short Short +with { +variant "XSD:short"; +}; + +type unsignedshort UnsignedShort +with { +variant "XSD:unsignedShort"; +}; + +type byte Byte +with { +variant "XSD:byte"; +}; + +type unsignedbyte UnsignedByte +with { +variant "XSD:unsignedByte"; +}; + +// Float types + +type float Decimal +with { +variant "XSD:decimal"; +}; + +type IEEE754float Float +with { +variant "XSD:float"; +}; + +type IEEE754double Double +with { +variant "XSD:double"; +}; + +// Time types + +type charstring Duration (pattern + "{dash}#(,1)P({nums}(Y({nums}(M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|" & + "{durTime}#(,1))|M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|{durTime})") +with { +variant "XSD:duration"; +}; + +type charstring DateTime (pattern + "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}T({hour}{cln}{minute}{cln}{second}" & + "{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" ) +with { +variant "XSD:dateTime"; +}; + +type charstring Time (pattern + "({hour}{cln}{minute}{cln}{second}{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" ) +with { +variant "XSD:time"; +}; + +type charstring Date (pattern + "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}{ZorTimeZoneExt}" ) +with { +variant "XSD:date"; +}; + +type charstring GYearMonth (pattern + "{yearExpansion}{year}{dash}{month}{ZorTimeZoneExt}" ) +with { +variant "XSD:gYearMonth"; +}; + +type charstring GYear (pattern + "{yearExpansion}{year}{ZorTimeZoneExt}" ) +with { +variant "XSD:gYear"; +}; + +type charstring GMonthDay (pattern + "{dash}{dash}{month}{dash}{dayOfMonth}{ZorTimeZoneExt}" ) +with { +variant "XSD:gMonthDay"; +}; + +type charstring GDay (pattern + "{dash}{dash}{dash}{dayOfMonth}{ZorTimeZoneExt}" ) +with { +variant "XSD:gDay"; +}; + +type charstring GMonth (pattern + "{dash}{dash}{month}{ZorTimeZoneExt}" ) +with { +variant "XSD:gMonth"; +}; + +// Sequence types + +type record of NMTOKEN NMTOKENS +with { +variant "XSD:NMTOKENS"; +}; + +type record of IDREF IDREFS +with { +variant "XSD:IDREFS"; +}; + +type record of ENTITY ENTITIES +with { +variant "XSD:ENTITIES"; +}; + +type record QName +{ + AnyURI uri optional, + NCName name +} +with { +variant "XSD:QName"; +}; + +// Boolean type + +type boolean Boolean +with { +variant "XSD:boolean"; +}; + +//TTCN-3 type definitions supporting the mapping of W3C XML Schema built-in datatypes + +type utf8string XMLCompatibleString +( + char(0,0,0,9)..char(0,0,0,9), + char(0,0,0,10)..char(0,0,0,10), + char(0,0,0,13)..char(0,0,0,13), + char(0,0,0,32)..char(0,0,215,255), + char(0,0,224,0)..char(0,0,255,253), + char(0,1,0,0)..char(0,16,255,253) +) + +type utf8string XMLStringWithNoWhitespace +( + char(0,0,0,33)..char(0,0,215,255), + char(0,0,224,0)..char(0,0,255,253), + char(0,1,0,0)..char(0,16,255,253) +) + +type utf8string XMLStringWithNoCRLFHT +( + char(0,0,0,32)..char(0,0,215,255), + char(0,0,224,0)..char(0,0,255,253), + char(0,1,0,0)..char(0,16,255,253) +) + +} +with{ +encode "XML" +} diff --git a/ttcn/LibEmcom/LibNg112/xsd/basicTypes.xsd b/ttcn/LibEmcom/LibNg112/xsd/basicTypes.xsd new file mode 100644 index 0000000000000000000000000000000000000000..b4c99d66d6bc52a9d7d2ba334beaf53a5370a657 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/basicTypes.xsd @@ -0,0 +1,49 @@ + + + + + + Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/geometryBasic0d1d.xsd b/ttcn/LibEmcom/LibNg112/xsd/geometryBasic0d1d.xsd new file mode 100644 index 0000000000000000000000000000000000000000..be5a2e17fd8039de8755b58e8d154cd592687008 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/geometryBasic0d1d.xsd @@ -0,0 +1,147 @@ + + + + + + Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/geometryBasic2d.xsd b/ttcn/LibEmcom/LibNg112/xsd/geometryBasic2d.xsd new file mode 100644 index 0000000000000000000000000000000000000000..fe08646615d731e58f46b527bfa89f7d7316eaa8 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/geometryBasic2d.xsd @@ -0,0 +1,77 @@ + + + + + + Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/geometryPrimitives.xsd b/ttcn/LibEmcom/LibNg112/xsd/geometryPrimitives.xsd new file mode 100644 index 0000000000000000000000000000000000000000..c7950625e22e1a2fa012ba15d51725eaab75cd29 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/geometryPrimitives.xsd @@ -0,0 +1,218 @@ + + + + + + Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/gmlBase.xsd b/ttcn/LibEmcom/LibNg112/xsd/gmlBase.xsd new file mode 100644 index 0000000000000000000000000000000000000000..2324d63bbfe1d43e111159765ec31bf917db29d4 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/gmlBase.xsd @@ -0,0 +1,25 @@ + + + + + + Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/http_www_opengis_net_gml.ttcn b/ttcn/LibEmcom/LibNg112/xsd/http_www_opengis_net_gml.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..169c8c830fc35fd091f93590ba244d68f4862f22 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/http_www_opengis_net_gml.ttcn @@ -0,0 +1,1008 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4A +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: http_www_opengis_net_gml.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Jul 3 08:58:44 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - basicTypes.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - gmlBase.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - measures.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - geometryBasic0d1d.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - geometryBasic2d.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - geometryPrimitives.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_opengis_net_gml { + + +import from XSD all; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type enumerated SignType +{ + x, + x_1 +} +with { + variant "text 'x' as '-'"; + variant "text 'x_1' as '+'"; +}; + + +type record of XSD.Boolean BooleanList +with { + variant "name as uncapitalized"; + variant "list"; + //variant "text 'true' as '1'"; + //variant "text 'false' as '0'"; +}; + + +type record of XSD.Name NameList +with { + variant "list"; +}; + + +type record of XSD.Double DoubleList +with { + variant "name as uncapitalized"; + variant "list"; +}; + + +type record of XSD.Integer IntegerList +with { + variant "name as uncapitalized"; + variant "list"; +}; + + +type record MeasureType +{ + XSD.AnyURI uom, + XSD.Double base +} +with { + variant (uom) "attribute"; + variant (base) "untagged"; +}; + + +type record of XSD.NCName NCNameList +with { + variant "list"; +}; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type record AbstractGMLType +{ + Id id optional +} +with { + variant "abstract"; + variant (id) "attribute"; +}; + + +type XSD.ID Id +with { + variant "name as uncapitalized"; + variant "attribute"; +}; +/* + +type union Object_group +{ + XSD.AnyType object, + GML_group gML +} +with { + variant "untagged"; + variant (object) "name as '_Object'"; + variant (object) "form as qualified"; + variant (object) "abstract"; + variant (gML) "name as '_GML'"; +}; + + +type union GML_group +{ + AbstractGMLType gML, + Geometry_group geometry +} +with { + variant "untagged"; + variant (gML) "name as '_GML'"; + variant (gML) "form as qualified"; + variant (gML) "abstract"; + variant (geometry) "name as '_Geometry'"; +}; + +*/ +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type MeasureType Measure +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type MeasureType LengthType; + + +type MeasureType Angle +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type MeasureType AngleType; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ +/* + +type record GeometryPropertyType +{ + Geometry_group geometry +} +with { + variant (geometry) "name as '_Geometry'"; +}; + + + +type record GeometryArrayPropertyType +{ + record of Geometry_group geometry_list +} +with { + variant (geometry_list) "untagged"; + variant (geometry_list[-]) "name as '_Geometry'"; +}; +*/ + +type record AbstractGeometryType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional +} +with { + variant "abstract"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type AbstractGeometryType AbstractGeometricPrimitiveType +with { + variant "abstract"; +}; + + +type PointType Point +with { + variant "name as 'Point'"; + variant "element"; +}; + + +type record PointType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Pos pos +} +with { + variant "name as uncapitalized"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type PointPropertyType PointProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record PointPropertyType +{ + Point point +} +with { + variant (point) "name as capitalized"; +}; + + +type AbstractGeometricPrimitiveType AbstractCurveType +with { + variant "abstract"; +}; + + +type CurvePropertyType CurveProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record CurvePropertyType +{ + Curve_group curve +} +with { + variant (curve) "name as '_Curve'"; +}; + + +type LineStringType LineString +with { + variant "name as 'LinearRing'"; + variant "element"; +}; + + +type record LineStringType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + union { + record length(2 .. infinity) of union { + Pos pos, + PointProperty pointProperty + } choice_list, + PosList posList + } choice +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; + variant (choice) "untagged"; + variant (choice.choice_list) "untagged"; + variant (choice.choice_list[-]) "untagged"; +}; + + +type DirectPositionType Pos +with { + variant "name as 'pos'"; + variant "element"; +}; + + +type DoubleList DirectPositionType; + + +type DirectPositionListType PosList +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record DirectPositionListType +{ + XSD.PositiveInteger count optional, + DoubleList base +} +with { + variant (count) "attribute"; + variant (base) "untagged"; +}; + + +type EnvelopeType Envelope +with { + variant "element"; +}; + + +type record EnvelopeType +{ + NCNameList axisLabels optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + union { + record { + DirectPositionType lowerCorner, + DirectPositionType upperCorner + } sequence, + record length(2) of Pos pos_list + } choice +} +with { + variant (axisLabels) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; + variant (choice) "untagged"; + variant (choice.sequence) "untagged"; + variant (choice.pos_list) "untagged"; + variant (choice.pos_list[-]) "name as 'pos'"; +}; + +/* + +type union Geometry_group +{ + AbstractGeometryType geometry, + GeometricPrimitive_group geometricPrimitive, + Ring_group ring +} +with { + variant "untagged"; + variant (geometry) "name as '_Geometry'"; + variant (geometry) "form as qualified"; + variant (geometry) "abstract"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (ring) "name as '_Ring'"; +}; + + +type union GeometricPrimitive_group +{ + AbstractGeometricPrimitiveType geometricPrimitive, + Curve_group curve, + Point point, + Solid_group solid, + Surface_group_1 surface +} +with { + variant "untagged"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (geometricPrimitive) "form as qualified"; + variant (geometricPrimitive) "abstract"; + variant (curve) "name as '_Curve'"; + variant (point) "name as capitalized"; + variant (solid) "name as '_Solid'"; + variant (surface) "name as '_Surface'"; +}; + +*/ +type union Curve_group +{ + AbstractCurveType curve, + Curve curve_1, + LineString lineString +} +with { + variant "untagged"; + variant (curve) "name as '_Curve'"; + variant (curve) "form as qualified"; + variant (curve) "abstract"; + variant (curve_1) "name as 'Curve'"; + variant (lineString) "name as capitalized"; +}; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type AbstractGeometricPrimitiveType AbstractSurfaceType; + +/* +type SurfacePropertyType SurfaceProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record SurfacePropertyType +{ + Surface_group_1 surface +} +with { + variant (surface) "name as '_Surface'"; +}; + +*/ + + +type PolygonType Polygon +with { + variant "element"; +}; + + +type record PolygonType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Exterior exterior optional +} +with { + variant "name as 'Polygon'"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type AbstractGeometryType AbstractRingType +with { + variant "abstract"; +}; + + +type AbstractRingPropertyType Exterior +with { + variant "name as 'exterior'"; + variant "element"; +}; + + +type record AbstractRingPropertyType +{ + Ring_group ring +} +with { + variant "name as 'exterior'"; + variant (ring) "name as '_Ring'"; +}; + + +type LinearRingType LinearRing +with { + variant "name as 'LinearRing'"; + variant "element"; +}; + + +type record LinearRingType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + union { + record length(4 .. infinity) of union { + Pos pos, + PointProperty pointProperty + } choice_list, + PosList posList + } choice +} +with { + variant "name as 'LinearRing'"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; + variant (choice) "untagged"; + variant (choice.choice_list) "untagged"; + variant (choice.choice_list[-]) "untagged"; + variant (choice.choice_list[-].pos[-]) "name as 'pos'"; +}; + +/* +type union Surface_group_1 +{ + AbstractSurfaceType surface, + ArcBand arcBand, + Circle circle, + Ellipse ellipse, + Polygon polygon, + Surface_group surface_1 +} +with { + variant "untagged"; + variant (surface) "name as '_Surface'"; + variant (surface) "form as qualified"; + variant (surface) "abstract"; + variant (arcBand) "name as capitalized"; + variant (circle) "name as capitalized"; + variant (ellipse) "name as capitalized"; + variant (polygon) "name as capitalized"; + variant (surface_1) "name as 'Surface'"; +}; + +*/ +type union Ring_group +{ + AbstractRingType ring, + LinearRing linearRing +} +with { + variant "untagged"; + variant (ring) "name as '_Ring'"; + variant (ring) "form as qualified"; + variant (ring) "abstract"; + variant (linearRing) "name as capitalized"; +}; + + +const XSD.Integer c_defaultForEmpty_1 := 0; + + +const CurveInterpolationType c_defaultForEmpty_2 := linear; + + +const CurveInterpolationType c_defaultForEmpty_3 := circularArcCenterPointWithRadius; + + +const XSD.Integer c_defaultForEmpty_4 := 1; + + +const SurfaceInterpolationType c_defaultForEmpty_5 := planar; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type CurveType Curve +with { + variant "element"; +}; + + +type record CurveType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Segments segments +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type record AbstractCurveSegmentType +{ + XSD.Integer numDerivativeInterior optional, + XSD.Integer numDerivativesAtEnd optional, + XSD.Integer numDerivativesAtStart optional +} +with { + variant "abstract"; + variant (numDerivativeInterior) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativeInterior) "attribute"; + variant (numDerivativesAtEnd) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtEnd) "attribute"; + variant (numDerivativesAtStart) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtStart) "attribute"; +}; + + +type CurveSegmentArrayPropertyType Segments +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record CurveSegmentArrayPropertyType +{ + record of CurveSegment_group curveSegment_list +} +with { + variant (curveSegment_list) "untagged"; + variant (curveSegment_list[-]) "name as '_CurveSegment'"; +}; + + +type LineStringSegmentType LineStringSegment +with { + variant "element"; +}; + + +type record LineStringSegmentType +{ + CurveInterpolationType interpolation (c_defaultForEmpty_2) optional, + XSD.Integer numDerivativeInterior optional, + XSD.Integer numDerivativesAtEnd optional, + XSD.Integer numDerivativesAtStart optional, + union { + record length(2 .. infinity) of union { + Pos pos, + PointProperty pointProperty + } choice_list, + PosList posList + } choice +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_2"; + variant (interpolation) "attribute"; + variant (numDerivativeInterior) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativeInterior) "attribute"; + variant (numDerivativesAtEnd) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtEnd) "attribute"; + variant (numDerivativesAtStart) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtStart) "attribute"; + variant (choice) "untagged"; + variant (choice.choice_list) "untagged"; + variant (choice.choice_list[-]) "untagged"; +}; + + +type record ArcByCenterPointType +{ + CurveInterpolationType interpolation (c_defaultForEmpty_3) optional, + XSD.Integer numArc (c_defaultForEmpty_4), + XSD.Integer numDerivativeInterior optional, + XSD.Integer numDerivativesAtEnd optional, + XSD.Integer numDerivativesAtStart optional, + union { + Pos pos, + PointProperty pointProperty + } choice, + LengthType radius, + AngleType startAngle optional, + AngleType endAngle optional +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_3"; + variant (interpolation) "attribute"; + variant (numArc) "defaultForEmpty as c_defaultForEmpty_4"; + variant (numArc) "attribute"; + variant (numDerivativeInterior) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativeInterior) "attribute"; + variant (numDerivativesAtEnd) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtEnd) "attribute"; + variant (numDerivativesAtStart) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtStart) "attribute"; + variant (choice) "untagged"; +}; + + +type CircleByCenterPointType CircleByCenterPoint +with { + variant "element"; +}; + + +type ArcByCenterPointType CircleByCenterPointType; + + +type record SurfaceType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Patches_group patches +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type record AbstractSurfacePatchType +{ + +} +with { + variant "abstract"; +}; + + +type record SurfacePatchArrayPropertyType +{ + record of record { + SurfacePatch_group surfacePatch + } sequence_list +} +with { + variant (sequence_list) "untagged"; + variant (sequence_list[-]) "untagged"; + variant (sequence_list[-].surfacePatch) "name as '_SurfacePatch'"; +}; + + +type PolygonPatchType PolygonPatch +with { + variant "element"; +}; + + +type record PolygonPatchType +{ + SurfaceInterpolationType interpolation (c_defaultForEmpty_5) optional, + Exterior exterior optional +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_5"; + variant (interpolation) "attribute"; +}; + + +type RectangleType Rectangle +with { + variant "element"; +}; + + +type record RectangleType +{ + SurfaceInterpolationType interpolation (c_defaultForEmpty_5) optional, + Exterior exterior +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_5"; + variant (interpolation) "attribute"; +}; + + +type PolyhedralSurfaceType PolyhedralSurface +with { + variant "element"; +}; + + +type record PolyhedralSurfaceType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type PolygonPatchArrayPropertyType PolygonPatches +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type SurfacePatchArrayPropertyType PolygonPatchArrayPropertyType; + + +type AbstractGeometricPrimitiveType AbstractSolidType; + +/* +type SolidType Solid +with { + variant "element"; +}; + + +type record SolidType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + SurfacePropertyType exterior optional +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + +*/ +type enumerated CurveInterpolationType +{ + circularArc3Points, + circularArcCenterPointWithRadius, + geodesic, + linear +}; + + +type enumerated SurfaceInterpolationType +{ + planar +}; + + +type union CurveSegment_group +{ + AbstractCurveSegmentType curveSegment, + ArcByCenterPoint_group arcByCenterPoint, + LineStringSegment lineStringSegment +} +with { + variant "untagged"; + variant (curveSegment) "name as '_CurveSegment'"; + variant (curveSegment) "form as qualified"; + variant (curveSegment) "abstract"; + variant (arcByCenterPoint) "name as capitalized"; + variant (lineStringSegment) "name as capitalized"; +}; + + +type union ArcByCenterPoint_group +{ + ArcByCenterPointType arcByCenterPoint, + CircleByCenterPoint circleByCenterPoint +} +with { + variant "untagged"; + variant (arcByCenterPoint) "name as capitalized"; + variant (arcByCenterPoint) "form as qualified"; + variant (circleByCenterPoint) "name as capitalized"; +}; + + +type union SurfacePatch_group +{ + AbstractSurfacePatchType surfacePatch, + PolygonPatch polygonPatch, + Rectangle rectangle +} +with { + variant "untagged"; + variant (surfacePatch) "name as '_SurfacePatch'"; + variant (surfacePatch) "form as qualified"; + variant (surfacePatch) "abstract"; + variant (polygonPatch) "name as capitalized"; + variant (rectangle) "name as capitalized"; +}; + + +type union Surface_group +{ + SurfaceType surface, + PolyhedralSurface polyhedralSurface +} +with { + variant "untagged"; + variant (surface) "name as capitalized"; + variant (surface) "form as qualified"; + variant (polyhedralSurface) "name as capitalized"; +}; + + +type union Patches_group +{ + SurfacePatchArrayPropertyType patches, + PolygonPatches polygonPatches +} +with { + variant "untagged"; + variant (patches) "form as qualified"; +}; + +/* +type union Solid_group +{ + AbstractSolidType solid, + Ellipsoid ellipsoid, + Prism prism, + Solid solid_1, + Sphere sphere +} +with { + variant "untagged"; + variant (solid) "name as '_Solid'"; + variant (solid) "form as qualified"; + variant (solid) "abstract"; + variant (ellipsoid) "name as capitalized"; + variant (prism) "name as capitalized"; + variant (solid_1) "name as 'Solid'"; + variant (sphere) "name as capitalized"; +}; +*/ + +} +with { + encode "XML"; + variant "namespace as 'http://www.opengis.net/gml' prefix 'gml'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/LibEmcom/LibNg112/xsd/http_www_opengis_net_pidflo_1_0.ttcn b/ttcn/LibEmcom/LibNg112/xsd/http_www_opengis_net_pidflo_1_0.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..dbdcb7d542eff17e90cac78e430783e1331df964 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/http_www_opengis_net_pidflo_1_0.ttcn @@ -0,0 +1,409 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4A +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: http_www_opengis_net_pidflo_1_0.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Jul 3 08:58:44 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - GML-pidf-lo-shape.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/pidflo/1.0" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_opengis_net_pidflo_1_0 { + + +import from XSD all; + + +import from http_www_opengis_net_gml all; + + +/* This document defines geodetic shape types for PIDF-LO. + + Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type CircleType Circle +with { + variant "name as 'Circle'"; + variant "element"; +}; + + +type record CircleType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType radius +} +with { + variant "name as uncapitalized"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type EllipseType Ellipse +with { + variant "element"; +}; + + +type record EllipseType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType semiMajorAxis, + LengthType semiMinorAxis, + AngleType orientation +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type ArcBandType ArcBand +with { + variant "element"; +}; + + +type record ArcBandType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType innerRadius, + LengthType outerRadius, + AngleType startAngle, + AngleType openingAngle +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type PrismType Prism +with { + variant "element"; +}; + + +type record PrismType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + SurfacePropertyType base, + LengthType height +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type SphereType Sphere +with { + variant "element"; +}; + + +type record SphereType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType radius +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type EllipsoidType Ellipsoid +with { + variant "element"; +}; + + +type record EllipsoidType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType semiMajorAxis, + LengthType semiMinorAxis, + LengthType verticalAxis, + AngleType orientation +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type union CenterGroup +{ + Pos pos, + PointProperty pointProperty +} +with { + variant "untagged"; + variant (pos) "namespace as 'http://www.opengis.net/gml' prefix 'gml'"; + variant (pointProperty) "namespace as 'http://www.opengis.net/gml' prefix 'gml'"; +}; + + + + + +type union Object_group +{ + XSD.AnyType object, + GML_group gML +} +with { + variant "untagged"; + variant (object) "name as '_Object'"; + variant (object) "form as qualified"; + variant (object) "abstract"; + variant (gML) "name as '_GML'"; +}; + + +type union GML_group +{ + AbstractGMLType gML, + Geometry_group geometry +} +with { + variant "untagged"; + variant (gML) "name as '_GML'"; + variant (gML) "form as qualified"; + variant (gML) "abstract"; + variant (geometry) "name as '_Geometry'"; +}; + + +type record GeometryPropertyType +{ + Geometry_group geometry +} +with { + variant (geometry) "name as '_Geometry'"; +}; + + +type record GeometryArrayPropertyType +{ + record of Geometry_group geometry_list +} +with { + variant (geometry_list) "untagged"; + variant (geometry_list[-]) "name as '_Geometry'"; +}; + +type union Geometry_group +{ + AbstractGeometryType geometry, + GeometricPrimitive_group geometricPrimitive, + Ring_group ring +} +with { + variant "untagged"; + variant (geometry) "name as '_Geometry'"; + variant (geometry) "form as qualified"; + variant (geometry) "abstract"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (ring) "name as '_Ring'"; +}; + + +type union GeometricPrimitive_group +{ + AbstractGeometricPrimitiveType geometricPrimitive, + Curve_group curve, + Point point, + Solid_group solid, + Surface_group_1 surface +} +with { + variant "untagged"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (geometricPrimitive) "form as qualified"; + variant (geometricPrimitive) "abstract"; + variant (curve) "name as '_Curve'"; + variant (point) "name as capitalized"; + variant (solid) "name as '_Solid'"; + variant (surface) "name as '_Surface'"; +}; + +type SolidType Solid +with { + variant "element"; +}; + + +type record SolidType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + SurfacePropertyType exterior optional +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type union Solid_group +{ + AbstractSolidType solid, + Ellipsoid ellipsoid, + Prism prism, + Solid solid_1, + Sphere sphere +} +with { + variant "untagged"; + variant (solid) "name as '_Solid'"; + variant (solid) "form as qualified"; + variant (solid) "abstract"; + variant (ellipsoid) "name as capitalized"; + variant (prism) "name as capitalized"; + variant (solid_1) "name as 'Solid'"; + variant (sphere) "name as capitalized"; +}; + + +type SurfacePropertyType SurfaceProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record SurfacePropertyType +{ + Surface_group_1 surface +} +with { + variant (surface) "name as '_Surface'"; +}; + + +type union Surface_group_1 +{ + AbstractSurfaceType surface, + ArcBand arcBand, + Circle circle, + Ellipse ellipse, + Polygon polygon, + Surface_group surface_1 +} +with { + variant "untagged"; + variant (surface) "name as '_Surface'"; + variant (surface) "form as qualified"; + variant (surface) "abstract"; + variant (arcBand) "name as capitalized"; + variant (circle) "name as capitalized"; + variant (ellipse) "name as capitalized"; + variant (polygon) "name as capitalized"; + variant (surface_1) "name as 'Surface'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://www.opengis.net/pidflo/1.0' prefix 'gs'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/LibEmcom/LibNg112/xsd/http_www_w3_org_XML_1998_namespace.ttcn b/ttcn/LibEmcom/LibNg112/xsd/http_www_w3_org_XML_1998_namespace.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..dd35e71343e577b6b722dbeab43c380182108500 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/http_www_w3_org_XML_1998_namespace.ttcn @@ -0,0 +1,204 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B +* +* 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: http_www_w3_org_XML_1998_namespace.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Aug 7 08:36:53 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - xml_2001.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.w3.org/XML/1998/namespace" */ +// - xml.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.w3.org/XML/1998/namespace" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_w3_org_XML_1998_namespace { + + +import from XSD all; + + +/* See http://www.w3.org/XML/1998/namespace.html and + http://www.w3.org/TR/REC-xml for information about this namespace. + + This schema document describes the XML namespace, in a form + suitable for import by other schema documents. + + Note that local names in this namespace are intended to be defined + only by the World Wide Web Consortium or its subgroups. The + following names are currently defined in this namespace and should + not be used with conflicting semantics by any Working Group, + specification, or document instance: + + base (as an attribute name): denotes an attribute whose value + provides a URI to be used as the base for interpreting any + relative URIs in the scope of the element on which it + appears; its value is inherited. This name is reserved + by virtue of its definition in the XML Base specification. + + lang (as an attribute name): denotes an attribute whose value + is a language code for the natural language of the content of + any element; its value is inherited. This name is reserved + by virtue of its definition in the XML specification. + + space (as an attribute name): denotes an attribute whose + value is a keyword indicating what whitespace processing + discipline is intended for the content of the element; its + value is inherited. This name is reserved by virtue of its + definition in the XML specification. + + Father (in any context at all): denotes Jon Bosak, the chair of + the original XML Working Group. This name is reserved by + the following decision of the W3C XML Plenary and + XML Coordination groups: + + In appreciation for his vision, leadership and dedication + the W3C XML Plenary on this 10th day of February, 2000 + reserves for Jon Bosak in perpetuity the XML name + xml:Father */ + + +/* This schema defines attributes and an attribute group + suitable for use by + schemas wishing to allow xml:base, xml:lang or xml:space attributes + on elements they define. + + To enable this, such a schema must import this schema + for the XML namespace, e.g. as follows: + + . . . + + + Subsequently, qualified reference to any of the attributes + or the group defined below will have the desired effect, e.g. + + + . . . + + + will define a type which will schema-validate an instance + element with any of those attributes */ + + +/* In keeping with the XML Schema WG's standard versioning + policy, this schema document will persist at + http://www.w3.org/2001/03/xml.xsd. + At the date of issue it can also be found at + http://www.w3.org/2001/xml.xsd. + The schema document at that URI may however change in the future, + in order to remain compatible with the latest version of XML Schema + itself. In other words, if the XML Schema namespace changes, the version + of this document at + http://www.w3.org/2001/xml.xsd will change + accordingly; the version at + http://www.w3.org/2001/03/xml.xsd will not change. */ + + +/* In due course, we should install the relevant ISO 2- and 3-letter + codes as the enumerated possible values . . . */ +type XSD.Language Lang +with { + variant "name as uncapitalized"; + variant "attribute"; +}; + + +type enumerated Space +{ + default_, + preserve +} +with { + variant "text 'default_' as 'default'"; + variant "defaultForEmpty as c_defaultForEmpty_1"; + variant "name as uncapitalized"; + variant "attribute"; +}; + + +/* See http://www.w3.org/TR/xmlbase/ for + information about this attribute. */ +type XSD.AnyURI Base +with { + variant "name as uncapitalized"; + variant "attribute"; +}; + + +const Space c_defaultForEmpty_1 := preserve; + + +type union Lang_1 +{ + XSD.Language language_, + enumerated { + x + } alt_ +} +with { + variant "name as 'lang'"; + variant "useUnion"; + variant "attribute"; + variant (language_) "name as 'language'"; + variant (alt_) "name as ''"; + variant (alt_) "text 'x' as ''"; +}; + + +type enumerated Space_1 +{ + default_, + preserve +} +with { + variant "text 'default_' as 'default'"; + variant "name as 'space'"; + variant "attribute"; +}; + + +type XSD.AnyURI Base_1 +with { + variant "name as 'base'"; + variant "attribute"; +}; + + +type XSD.ID Id +with { + variant "name as uncapitalized"; + variant "attribute"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; +} diff --git a/ttcn/LibEmcom/LibNg112/xsd/measures.xsd b/ttcn/LibEmcom/LibNg112/xsd/measures.xsd new file mode 100644 index 0000000000000000000000000000000000000000..fa70d1c537fe2e6fb3e2fb29729801ed1d0a7b99 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/measures.xsd @@ -0,0 +1,30 @@ + + + + + + Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_geopriv_conf.ttcn b/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_geopriv_conf.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..619c3fa6ec3da3ba40c6ca37a7597f4ee24d72d7 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_geopriv_conf.ttcn @@ -0,0 +1,101 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B +* +* 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: urn_ietf_params_xml_ns_geopriv_conf.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Aug 7 08:36:53 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - RFC7459_pidf_lo.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:geopriv:conf" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_geopriv_conf { + + +import from XSD all; + + +const PdfType c_defaultForEmpty_1 := unknown; + + +/* This schema defines an element that is used for indicating + confidence in PIDF-LO documents. */ + + +type ConfidenceType Confidence +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record ConfidenceType +{ + PdfType pdf optional, + ConfidenceBase base +} +with { + variant "name as uncapitalized"; + variant (pdf) "defaultForEmpty as c_defaultForEmpty_1"; + variant (pdf) "attribute"; + variant (base) "untagged"; +}; + + +type union ConfidenceBase +{ + XSD.Decimal alt_ (!0.0 .. !100.0), + enumerated { + unknown + } alt_1 +} +with { + variant "name as uncapitalized"; + variant "useUnion"; + variant (alt_) "name as ''"; + variant (alt_1) "name as ''"; +}; + + +type enumerated PdfType +{ + normal, + rectangular, + unknown +} +with { + variant "name as uncapitalized"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:ietf:params:xml:ns:geopriv:conf' prefix 'conf'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_geopriv_held.ttcn b/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_geopriv_held.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..22b1707a183851943f9e1596b84e7e746d21f89f --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_geopriv_held.ttcn @@ -0,0 +1,244 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B +* +* 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: urn_ietf_params_xml_ns_geopriv_held.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Aug 7 08:36:53 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - RFC5985_held.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:geopriv:held" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_geopriv_held { + + +import from XSD all; + + +import from http_www_w3_org_XML_1998_namespace all; + +import from urn_ietf_params_xml_ns_pidf all; + +const XSD.Boolean c_defaultForEmpty_1 := false; + + +/* This document (RFC 5985) defines HELD messages. */ + + +/* Return Location */ + + +type record ReturnLocationType +{ + XSD.DateTime expires, + record length(1 .. infinity) of XSD.AnyURI locationURI_list +} +with { + variant "name as uncapitalized"; + variant (expires) "attribute"; + variant (locationURI_list) "untagged"; + variant (locationURI_list[-]) "name as 'locationURI'"; +}; + + +/* responseTime Type */ + + +type union ResponseTimeType +{ + enumerated { + emergencyRouting, + emergencyDispatch + } alt_, + XSD.NonNegativeInteger alt_1 (0 .. infinity) +} +with { + variant "name as uncapitalized"; + variant "useUnion"; + variant (alt_) "name as ''"; + variant (alt_1) "name as ''"; +}; + + +/* Location Type */ + + +type union LocationTypeBase +{ + enumerated { + any_ + } alt_, + LocationTypeList alt_1 length(1 .. infinity) +} +with { + variant "name as uncapitalized"; + variant "useUnion"; + variant (alt_) "name as ''"; + variant (alt_) "text 'any_' as 'any'"; + variant (alt_1) "name as ''"; +}; + + +type record of enumerated +{ + civic, + geodetic, + locationURI +} LocationTypeList +with { + variant "name as uncapitalized"; + variant "list"; +}; + + +type record LocationTypeType +{ + XSD.Boolean exact optional, + LocationTypeBase base +} +with { + variant "name as uncapitalized"; + variant (exact) "defaultForEmpty as c_defaultForEmpty_1"; + variant (exact) "attribute"; + //variant (exact) "text 'true' as '1'"; + //variant (exact) "text 'false' as '0'"; + variant (base) "untagged"; +}; + + +/* Message Definitions */ + + +type record BaseRequestType +{ + ResponseTimeType responseTime optional, + record of XSD.String attr optional +} +with { + variant "name as uncapitalized"; + variant (responseTime) "attribute"; + variant (attr) "anyAttributes"; +}; + + +type record ErrorType +{ + XSD.Token code, + record of XSD.String attr optional, + record of ErrorMsgType message_list, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (code) "attribute"; + variant (attr) "anyAttributes"; + variant (message_list) "untagged"; + variant (message_list[-]) "name as 'message'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:geopriv:held'"; +}; + + +type record ErrorMsgType +{ + Lang lang optional, + record of XSD.String attr optional, + XSD.Token base +} +with { + variant "name as uncapitalized"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "attribute"; + variant (attr) "anyAttributes"; + variant (base) "untagged"; +}; + + +type ErrorType Error +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +/* Location Response */ + + +type record LocationResponseType +{ + ReturnLocationType locationUriSet optional, + Presence presence optional, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (presence) "namespace as 'urn:ietf:params:xml:ns:pidf'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified"; // , 'urn:ietf:params:xml:ns:geopriv:held' +}; + + +type LocationResponseType LocationResponse +with { + variant "name as 'locationResponse'"; + variant "element"; +}; // variant "name as uncapitalized"; + + +/* Location Request */ + + +type record LocationRequestType +{ + ResponseTimeType responseTime optional, + record of XSD.String attr optional, + LocationTypeType locationType optional, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (responseTime) "attribute"; + variant (attr) "anyAttributes"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:geopriv:held'"; +}; + + +type LocationRequestType LocationRequest +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:ietf:params:xml:ns:geopriv:held' prefix 'held'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_geopriv_held_id.ttcn b/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_geopriv_held_id.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..8c838f6af2c45039d338c99909be8271e8d7efad --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_geopriv_held_id.ttcn @@ -0,0 +1,243 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B +* +* 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: urn_ietf_params_xml_ns_geopriv_held_id.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Aug 7 08:36:53 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - RFC6155_held_id.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:geopriv:held:id" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_geopriv_held_id { + + +import from XSD all; + + +/* This document defines Device identity elements for HELD. */ + + +type DeviceIdentity Device +with { + variant "name as 'device'"; + variant "element"; +}; + + +type record DeviceIdentity +{ + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (elem_list) "namespace as 'urn:ietf:params:xml:ns:geopriv:held:id' prefix 'id'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement"; +}; + + +type QnameList RequiredIdentifiers +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record of XSD.QName QnameList +with { + variant "name as uncapitalized"; + variant "list"; +}; + + +type IpAddress Ip +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record IpAddress +{ + XSD.Token v (pattern "[\da-fA-F]"), + XSD.Token base +} +with { + variant "name as uncapitalized"; + variant (v) "attribute"; + variant (base) "untagged"; +}; + + +type MacAddress Mac +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type XSD.Token MacAddress (pattern "[\da-fA-F]#(2)(-[\da-fA-F]#(2))#(5)((-[\da-fA-F]#(2))#(2))#(0,1)") +with { + variant "name as uncapitalized"; +}; + + +type PortNumber Udpport +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type PortNumber Tcpport +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type PortNumber Sctpport +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type PortNumber Dccpport +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type XSD.NonNegativeInteger PortNumber (0 .. 65535) +with { + variant "name as uncapitalized"; +}; + + +type NaiType Nai +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type XSD.Token NaiType (pattern "([\^\\]|\\[\dA-Fa-f]#(2))* (@([A-Za-z\d]([A-Za-z\d\-]*[A-Za-z\d])*.)+ [A-Za-z\d]([A-Za-z\d\-]*[A-Za-z\d])*)#(0,1)") +with { + variant "name as uncapitalized"; +}; + + +type XSD.AnyURI Uri +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type XSD.Token Fqdn +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type XSD.HexBinary Duid +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type E164 Msisdn +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type E164 Imsi +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type Digit15 Imei +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type Digit10 Min +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type E164 Mdn +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type XSD.Token Digits (pattern "[\d]+") +with { + variant "name as uncapitalized"; +}; + + +type XSD.Token E164 (pattern "[\d]+") length(6 .. 15) +with { + variant "name as uncapitalized"; +}; + + +type XSD.Token Digit15 (pattern "[\d]+") length(0 .. 15) +with { + variant "name as uncapitalized"; +}; + + +type XSD.Token Digit10 (pattern "[\d]+") length(10) +with { + variant "name as uncapitalized"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:ietf:params:xml:ns:geopriv:held:id' prefix 'id'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_lost1.ttcn b/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_lost1.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..73d149a431359e0503ff3c607ff21ee44bb3da61 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_lost1.ttcn @@ -0,0 +1,728 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4A +* +* 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: urn_ietf_params_xml_ns_lost1.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Jul 10 13:34:10 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - RelaxNG.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:lost1" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_lost1 { + + +import from XSD all; + + +import from http_www_w3_org_XML_1998_namespace all; + + +import from http_www_opengis_net_gml all; + +import from http_www_opengis_net_pidflo_1_0 all; + + +type record FindService +{ + XSD.Boolean recursive_ optional, + enumerated { + reference, + value_ + } serviceBoundary optional, + XSD.Boolean validateLocation optional, + record length(1 .. infinity) of Location location_list, + Path path optional, + Service service optional, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (recursive_) "name as 'recursive'"; + variant (recursive_) "attribute"; + //variant (recursive_) "text 'true' as '1'"; + //variant (recursive_) "text 'false' as '0'"; + variant (serviceBoundary) "text 'value_' as 'value'"; + variant (serviceBoundary) "attribute"; + variant (validateLocation) "attribute"; + //variant (validateLocation) "text 'true' as '1'"; + //variant (validateLocation) "text 'false' as '0'"; + variant (location_list) "untagged"; + variant (location_list[-]) "name as 'location'"; + variant (notLost_list) "untagged"; +}; + + +type record ListServices +{ + Path path optional, + Service service optional, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (notLost_list) "untagged"; +}; + + +type record ListServicesByLocation +{ + XSD.Boolean recursive_ optional, + record length(1 .. infinity) of Location location_list, + Path path optional, + Service service optional, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (recursive_) "name as 'recursive'"; + variant (recursive_) "attribute"; + //variant (recursive_) "text 'true' as '1'"; + //variant (recursive_) "text 'false' as '0'"; + variant (location_list) "untagged"; + variant (location_list[-]) "name as 'location'"; + variant (notLost_list) "untagged"; +}; + + +type record GetServiceBoundary +{ + XSD.Token key, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (key) "attribute"; + variant (notLost_list) "untagged"; +}; + + +type record FindServiceResponse +{ + record length(1 .. infinity) of Mapping mapping_list, + LocationValidation locationValidation optional, + record of Warnings warnings_list, + Path path, + record of NotLost notLost_list, + LocationUsed locationUsed optional +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (mapping_list) "untagged"; + variant (mapping_list[-]) "name as 'mapping'"; + variant (warnings_list) "untagged"; + variant (warnings_list[-]) "name as 'warnings'"; + variant (notLost_list) "untagged"; +}; + + +type record ListServicesResponse +{ + ServiceList serviceList, + record of Warnings warnings_list, + Path path, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (warnings_list) "untagged"; + variant (warnings_list[-]) "name as 'warnings'"; + variant (notLost_list) "untagged"; +}; + + +type record ListServicesByLocationResponse +{ + ServiceList serviceList, + record of Warnings warnings_list, + Path path, + record of NotLost notLost_list, + LocationUsed locationUsed optional +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (warnings_list) "untagged"; + variant (warnings_list[-]) "name as 'warnings'"; + variant (notLost_list) "untagged"; +}; + + +type record GetServiceBoundaryResponse +{ + record length(1 .. infinity) of ServiceBoundary serviceBoundary_list, + record of Warnings warnings_list, + Path path, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (serviceBoundary_list) "untagged"; + variant (serviceBoundary_list[-]) "name as 'serviceBoundary'"; + variant (warnings_list) "untagged"; + variant (warnings_list[-]) "name as 'warnings'"; + variant (notLost_list) "untagged"; +}; + + +type record CommonRequestPattern +{ + Path path optional, + Service service optional, + record of NotLost notLost_list +} +with { + variant "untagged"; + variant (notLost_list) "untagged"; +}; + + +type record CommonResponsePattern +{ + record of Warnings warnings_list, + Path path, + record of NotLost notLost_list +} +with { + variant "untagged"; + variant (warnings_list) "untagged"; + variant (warnings_list[-]) "name as 'warnings'"; + variant (notLost_list) "untagged"; +}; + + +type record RequestLocation +{ + record length(1 .. infinity) of Location location_list +} +with { + variant "untagged"; + variant (location_list) "untagged"; + variant (location_list[-]) "name as 'location'"; +}; + + +type record Location +{ + XSD.Token id, + XSD.NMTOKEN profile optional, + record length(1 .. infinity) of ExtensionPoint extensionPoint_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (id) "attribute"; + variant (profile) "attribute"; + variant (extensionPoint_list) "untagged"; +}; + + +type record LocationInformation +{ + XSD.NMTOKEN profile optional, + record length(1 .. infinity) of ExtensionPoint extensionPoint_list +} +with { + variant "name as uncapitalized"; + variant (profile) "attribute"; + variant (extensionPoint_list) "untagged"; +}; + + +type record ServiceBoundary_1 +{ + record length(1 .. infinity) of ServiceBoundary serviceBoundary_list +} +with { + variant "untagged"; + variant (serviceBoundary_list) "untagged"; + variant (serviceBoundary_list[-]) "name as 'serviceBoundary'"; +}; + + +type LocationInformation ServiceBoundary +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record ServiceBoundaryReference +{ + XSD.Token key, + AppUniqueString source, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (key) "attribute"; + variant (source) "attribute"; + variant (notLost_list) "untagged"; +}; + + +type record Path +{ + record length(1 .. infinity) of Via via_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (via_list) "untagged"; + variant (via_list[-]) "name as 'via'"; +}; + + +type record Via +{ + AppUniqueString source, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (source) "attribute"; + variant (notLost_list) "untagged"; +}; + + +type record LocationUsed_1 +{ + LocationUsed locationUsed optional +} +with { + variant "untagged"; +}; + + +type record LocationUsed +{ + XSD.Token id +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (id) "attribute"; +}; + + +type record of XSD.QName QnameList +with { + variant "name as uncapitalized"; + variant "list"; +}; + + +type record Mapping +{ + Lang lang optional, + union + { + XSD.DateTime dateTime, + enumerated + { + nO_CACHE + } alt_, + enumerated + { + nO_EXPIRATION + } alt_1 + } expires, + XSD.DateTime lastUpdated, + XSD.Token message_ optional, + AppUniqueString source, + XSD.Token sourceId, + record of DisplayName displayName_list, + Service service optional, + union { + ServiceBoundary_1 serviceBoundary, + ServiceBoundaryReference serviceBoundaryReference + } choice optional, + record of Uri uri_list, + ServiceNumber serviceNumber optional, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "attribute"; + variant(expires, lang, lastUpdated, message_, source, sourceId) "attribute"; + variant(expires.alt_1) "text 'nO_EXPIRATION' as 'NO-EXPIRATION'"; + variant(expires, expires.alt_, expires.alt_1, expires.dateTime, lastUpdated, message_, source, sourceId) "form as unqualified"; + variant(expires.alt_, expires.alt_1) "name as ''"; + variant(expires.alt_) "text 'nO_CACHE' as 'NO-CACHE'"; + variant "element"; + variant(expires) "useUnion"; + variant (lastUpdated) "attribute"; + variant (message_) "name as 'message'"; + variant (message_) "attribute"; + variant (source) "attribute"; + variant (sourceId) "attribute"; + variant (displayName_list) "untagged"; + variant (displayName_list[-]) "name as 'displayName'"; + variant (choice) "untagged"; + variant (uri_list) "untagged"; + variant (uri_list[-]) "name as 'uri'"; + variant (notLost_list) "untagged"; +}; + + +type record DisplayName +{ + Lang lang, + XSD.String base +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "attribute"; + variant (base) "untagged"; +}; + + +type XSD.AnyURI Uri +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type XSD.Token ServiceNumber (pattern "[0-9*#]+") +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record LocationValidation +{ + Valid valid optional, + Invalid invalid optional, + Unchecked unchecked optional, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (notLost_list) "untagged"; +}; + + +type QnameList Valid +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type QnameList Invalid +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type QnameList Unchecked +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record ExceptionContainer +{ + AppUniqueString source, + record of union { + BadRequest badRequest, + InternalError internalError, + ServiceSubstitution serviceSubstitution, + DefaultMappingReturned defaultMappingReturned, + Forbidden forbidden, + NotFound notFound, + Loop loop, + ServiceNotImplemented serviceNotImplemented, + ServerTimeout serverTimeout, + ServerError serverError, + LocationInvalid locationInvalid, + LocationProfileUnrecognized locationProfileUnrecognized + } choice_list, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant (source) "attribute"; + variant (choice_list) "untagged"; + variant (choice_list[-]) "untagged"; + variant (notLost_list) "untagged"; +}; + + +type ExceptionContainer Errors +with { + variant "name as 'errors'"; + variant "name as uncapitalized"; + variant "element"; +}; + + +type ExceptionContainer Warnings +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +/* Exception pattern. */ +type record BasicException +{ + Lang lang optional, + XSD.Token message_ optional, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "attribute"; + variant (message_) "name as 'message'"; + variant (message_) "attribute"; + variant (notLost_list) "untagged"; +}; + + +type BasicException BadRequest +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type BasicException InternalError +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type BasicException ServiceSubstitution +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type BasicException DefaultMappingReturned +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type BasicException Forbidden +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type BasicException NotFound +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type BasicException Loop +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type BasicException ServiceNotImplemented +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type BasicException ServerTimeout +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type BasicException ServerError +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type BasicException LocationInvalid +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type BasicException LocationValidationUnavailable +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record LocationProfileUnrecognized +{ + Lang lang optional, + XSD.Token message_ optional, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "attribute"; + variant (message_) "name as 'message'"; + variant (message_) "attribute"; + variant (notLost_list) "untagged"; +}; + + +type record Redirect +{ + Lang lang optional, + XSD.Token message_ optional, + AppUniqueString source, + AppUniqueString target, + record of NotLost notLost_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "attribute"; + variant (message_) "name as 'message'"; + variant (message_) "attribute"; + variant (source) "attribute"; + variant (target) "attribute"; + variant (notLost_list) "untagged"; +}; + + +type record Service_1 +{ + Service service optional +} +with { + variant "untagged"; +}; + + +type XSD.AnyURI Service +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type XSD.Token AppUniqueString (pattern "([a-zA-Z0-9\-]+.)+[a-zA-Z0-9]+") +with { + variant "name as uncapitalized"; +}; + + +type set of XSD.AnyURI ServiceList +with { + variant "name as uncapitalized"; + variant "list"; + variant "element"; +}; + + +/* Any element not in the LoST namespace. */ +/* xs:any namespace="##other" processContents="skip"/ */ +type union NotLost +{ + XSD.String elem +} +with { + variant "untagged"; + variant (elem) "anyElement from 'http://www.opengis.net/gml','http://www.opengis.net/pidflo/1.0'"; +}; + + +/* A wildcard pattern for including any element + from any other namespace. */ +type record AnyElement +{ + record of XSD.String elem_list +} +with { + variant "untagged"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement"; +}; + + +/* A point where future extensions + (elements from other namespaces) + can be added. */ +type record ExtensionPoint +{ + XSD.String elem, + record of NotLost notLost_list +} +with { + variant "untagged"; + variant (elem) "anyElement from 'http://www.opengis.net/gml','http://www.opengis.net/pidflo/1.0'"; + variant (notLost_list) "untagged"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:ietf:params:xml:ns:lost1' prefix 'ns1'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_pidf.ttcn b/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_pidf.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..916fdca0cf96cb9ab5c0cf7ae745b32ee541012a --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/urn_ietf_params_xml_ns_pidf.ttcn @@ -0,0 +1,177 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B +* +* 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: urn_ietf_params_xml_ns_pidf.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Aug 7 08:36:53 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - RFC3863_pidf.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:pidf" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_pidf { + + +import from XSD all; + +import from urn_ietf_params_xml_ns_pidf_geopriv10 all; + +import from http_www_w3_org_XML_1998_namespace all; + + +const XSD.Boolean c_defaultForEmpty_1 := false; + + +/* This import brings in the XML language attribute xml:lang */ + + +type Presence_1 Presence +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record Presence_1 +{ + XSD.AnyURI entity, + record of Tuple tuple_list, + record of Note note_list, + record of XSD.String elem_list +} +with { + variant "name as 'presence'"; + variant (entity) "attribute"; + variant (tuple_list) "untagged"; + variant (tuple_list[-]) "name as 'tuple'"; + variant (note_list) "untagged"; + variant (note_list[-]) "name as 'note'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified"; // , 'urn:ietf:params:xml:ns:pidf' +}; + + +type record Tuple +{ + XSD.ID id, + Status status, + record of XSD.String elem_list, + Contact contact optional, + record of Note note_list, + XSD.DateTime timestamp_ optional +} +with { + variant "name as uncapitalized"; + variant (id) "attribute"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified"; // , 'urn:ietf:params:xml:ns:pidf' + variant (note_list) "untagged"; + variant (note_list[-]) "name as 'note'"; +}; + + +type record Status +{ + Basic basic optional, + Geopriv_1 geopriv, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (geopriv) "namespace as 'urn:ietf:params:xml:ns:pidf:geopriv10'" + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:pidf'"; +}; + + +type enumerated Basic +{ + closed, + open +} +with { + variant "name as uncapitalized"; +}; + + +type record Contact +{ + Qvalue priority optional, + XSD.AnyURI base +} +with { + variant "name as uncapitalized"; + variant (priority) "attribute"; + variant (base) "untagged"; +}; + + +type record Note +{ + Lang lang optional, + XSD.String base +} +with { + variant "name as uncapitalized"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "attribute"; + variant (base) "untagged"; +}; + + +/* xs:pattern value="0(.[0-9]{0,3})?"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ttcn/LibEmcom/LibNg112/xsd/xml_2001.xsd b/ttcn/LibEmcom/LibNg112/xsd/xml_2001.xsd new file mode 100644 index 0000000000000000000000000000000000000000..d662b4236cd346b34b09c87ac9f9893904c2d5f3 --- /dev/null +++ b/ttcn/LibEmcom/LibNg112/xsd/xml_2001.xsd @@ -0,0 +1,117 @@ + + + + + + + See http://www.w3.org/XML/1998/namespace.html and + http://www.w3.org/TR/REC-xml for information about this namespace. + + This schema document describes the XML namespace, in a form + suitable for import by other schema documents. + + Note that local names in this namespace are intended to be defined + only by the World Wide Web Consortium or its subgroups. The + following names are currently defined in this namespace and should + not be used with conflicting semantics by any Working Group, + specification, or document instance: + + base (as an attribute name): denotes an attribute whose value + provides a URI to be used as the base for interpreting any + relative URIs in the scope of the element on which it + appears; its value is inherited. This name is reserved + by virtue of its definition in the XML Base specification. + + lang (as an attribute name): denotes an attribute whose value + is a language code for the natural language of the content of + any element; its value is inherited. This name is reserved + by virtue of its definition in the XML specification. + + space (as an attribute name): denotes an attribute whose + value is a keyword indicating what whitespace processing + discipline is intended for the content of the element; its + value is inherited. This name is reserved by virtue of its + definition in the XML specification. + + Father (in any context at all): denotes Jon Bosak, the chair of + the original XML Working Group. This name is reserved by + the following decision of the W3C XML Plenary and + XML Coordination groups: + + In appreciation for his vision, leadership and dedication + the W3C XML Plenary on this 10th day of February, 2000 + reserves for Jon Bosak in perpetuity the XML name + xml:Father + + + + + This schema defines attributes and an attribute group + suitable for use by + schemas wishing to allow xml:base, xml:lang or xml:space attributes + on elements they define. + + To enable this, such a schema must import this schema + for the XML namespace, e.g. as follows: + <schema . . .> + . . . + <import namespace="http://www.w3.org/XML/1998/namespace" + schemaLocation="http://www.w3.org/2001/03/xml.xsd"/> + + Subsequently, qualified reference to any of the attributes + or the group defined below will have the desired effect, e.g. + + <type . . .> + . . . + <attributeGroup ref="xml:specialAttrs"/> + + will define a type which will schema-validate an instance + element with any of those attributes + + + + In keeping with the XML Schema WG's standard versioning + policy, this schema document will persist at + http://www.w3.org/2001/03/xml.xsd. + At the date of issue it can also be found at + http://www.w3.org/2001/xml.xsd. + The schema document at that URI may however change in the future, + in order to remain compatible with the latest version of XML Schema + itself. In other words, if the XML Schema namespace changes, the version + of this document at + http://www.w3.org/2001/xml.xsd will change + accordingly; the version at + http://www.w3.org/2001/03/xml.xsd will not change. + + + + + + In due course, we should install the relevant ISO 2- and 3-letter + codes as the enumerated possible values . . . + + + + + + + + + + + + + + + See http://www.w3.org/TR/xmlbase/ for + information about this attribute. + + + + + + + + + + diff --git a/ttcn/LibIms b/ttcn/LibIms new file mode 160000 index 0000000000000000000000000000000000000000..d640fce7b8bd65dbb77c93a98f80c53a73bb2a24 --- /dev/null +++ b/ttcn/LibIms @@ -0,0 +1 @@ +Subproject commit d640fce7b8bd65dbb77c93a98f80c53a73bb2a24 diff --git a/ttcn/LibIms_ConfigAndTrigger/LibIms_UpperTester.ttcn b/ttcn/LibIms_ConfigAndTrigger/LibIms_UpperTester.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..055a4a317e45bc98212922503568188f877e937e --- /dev/null +++ b/ttcn/LibIms_ConfigAndTrigger/LibIms_UpperTester.ttcn @@ -0,0 +1,514 @@ +/** + * @author STF 370 + * @version $Id:$ + * @desc This module provides trigger and configuration functions for IMS. + */ +module LibIms_UpperTester { + + + import from LibIot_Functions all; + import from LibUpperTester all; + import from LibIot_TestInterface all; + + group ue { + group ueTypes { + group ueCommands { + + /** + * @desc Command to trigger registration of the UE + * @remark + * Note that the registration trigger command needs has + * additional parameter for the public, private user id and + * password. + * @remark + * Note that the user friendly application and the upper test + * adapter may need to be uparaded if new messages are added. + */ + const EquipmentCommand c_UE_REGISTRATION := "UE_REGISTRATION"; + const EquipmentCommand c_UE_CHECKisREGISTERED := "UE_CHECK_IS_REGISTER"; + const EquipmentCommand c_UE_CHECKisnotREGISTERED := "UE_CHECK_IS_NOT_REGISTERED"; + const EquipmentCommand c_UE_CHECK_CALLisINITIALIZED := "UE_CHECK_CALL_IS_INITIALIZED"; + const EquipmentCommand c_UE_CHECK_CALLisANSWERED := "UE_CHECK_CALL_IS_ANSWERED"; + const EquipmentCommand c_UE_CHECK_CALLisENDED := "UE_CHECK_CALL_IS_ENDED"; + const EquipmentCommand c_UE_CHECK_NEWMEDIASTREAMisADDED := "UE_CHECK_NEW_MEDIA_STREAM_IS_ADDED"; + const EquipmentCommand c_UE_CHECK_REMOVEMEDIASTREAMisADDED := "UE_CHECK_NEW_MEDIA_STREAM_IS_REMOVED"; + + + /** + * + * @desc Command to trigger de-registration of the UE + */ + const EquipmentCommand c_UE_DEREGISTRATION := "UE_DEREGISTRATION"; + + /** + * @desc Command to trigger UE to send a message + */ + const EquipmentCommand c_UE_SEND_MESSAGE := "UE_SEND_MESSAGE"; + + /** + * @desc Command to check if UE has receipt of a message + */ + const EquipmentCommand c_UE_CHECK_MESSAGE_RECEIPT := "UE_CHECK_MESSAGE_RECEIPT"; + + + /** + * @desc Command to check if UE is informed about that the message request could not be delivered. + */ + const EquipmentCommand c_UE_CHECK_MESSAGE_NOT_DELIVERED := "UE_CHECK_MESSAGE_NOT_DELIVERED"; + } + } + + group ueFunctions { + + + /** + * + * @desc Triggers registration of a given user via UE + * @param p_publicId The public user identity + * @param p_privateId The private user identity + * @param p_pw The users password + * @verdict e2e verdict will be set depending on the result of trigger action + */ + function f_userRegistration(in charstring p_publicId, in charstring p_privateId, in charstring p_pw) + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_REGISTRATION, {p_publicId, p_privateId, p_pw}))); + } + + function f_checkUserIsRegistered() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECKisREGISTERED, {}))); + } + function f_checkUserIsNotRegistered() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECKisnotREGISTERED, {}))); + } + function f_checkUserCallIsInitiated() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_CALLisINITIALIZED, {}))); + } + function f_checkUserCallIsAnswered() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_CALLisANSWERED, {}))); + } + function f_checkUserCallIsEnded() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_CALLisENDED, {}))); + } + function f_checkUserAddNewMediaStream() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_NEWMEDIASTREAMisADDED, {}))); + } + function f_checkUserRemoveNewMediaStream() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_REMOVEMEDIASTREAMisADDED, {}))); + } + /** + * + * @desc Triggers de-registration of a given user via UE + * @param p_publicId The public user name + * @verdict e2e verdict will be set depending on the result of trigger action + */ + function f_userDeregistration(in charstring p_publicId) + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_DEREGISTRATION, {p_publicId}))); + } + + /** + * + * @desc Trigger sending an instant message via UE + */ + function f_userSendMessage(in charstring p_body) + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_SEND_MESSAGE, {p_body}))); + } + + /** + * + * @desc Trigger checking the receipt of instant message at UE + */ + function f_userCheckMessageReceipt() runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_MESSAGE_RECEIPT, {}))); + } + + /** + * + * @desc Trigger checking the receipt of instant message at UE + */ + function f_userCheckMessageNotDelivered() runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_MESSAGE_NOT_DELIVERED, {}))); + } + } + } + + group LibUEModuleParameters { + + /** + * + * @desc Required information for user components + * @member publicId public user identity + * @member privateId private user identity + * @member password user password + * @member domain Home domain of user + * @member domainProxy Entry point to either home or roaming IMS network + */ + type record ImsUserInfo { + charstring publicId, // (default) id to be used by UE + charstring privateId, + charstring password, + charstring domain, + charstring domainProxy + } + + type union ImsUserIdentity { + ImsUserInfo genUserId, + ImsUserInfo sipUserId, + ImsUserInfo telUserId, + ImsUserInfo noasUserId, + ImsUserInfo holdUserId, + ImsUserInfo oipUserId, + ImsUserInfo oirUserId, + ImsUserInfo acrUserId, + ImsUserInfo cfuUserId, + ImsUserInfo presUserId, + ImsUserInfo ftUserId, + ImsUserInfo imUserId, + ImsUserInfo shareUserId, + ImsUserInfo iptvUserId + } + + /** + * + * @desc List of IMS user information + */ + type record of ImsUserIdentity ImsUserIdentityList ; + + /** + * + * @desc The record collects IMS user information configured in one specific core IMS + * @member productIndex index pointing to the entry of the core IMS product in PX_PRODUCTS + * @member userInfos Lists information about all users configured in the HSS of this core IMS + */ + type record CoreImsUserInfo { + integer productIndex, + ImsUserIdentityList userIds + } + + /** + * + * @desc Collects IMS user information configured in all core IMS participating in the interoperability event + */ + type record of CoreImsUserInfo CoreImsUserInfoList; + + + /** + * + * @desc Example of module parameter based entry of EUT interface information for all products particpating in an interoperability event + */ + modulepar CoreImsUserInfoList PX_IMS_USER_DATA := { + { + productIndex := 0, // Ericsson + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "ericsson.etsi", + domainProxy := "pcscf.ericsson.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "ericsson.etsi", + domainProxy := "pcscf.ericsson.etsi" //pcscf domain or IPaddress + + }}, + { + telUserId := { + publicId := "tel: 3344123432", + privateId := "userTEL_priv", + password := "123456", + domain := "ericsson.etsi", + domainProxy := "pcscf.ericsson.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 1, // Thomson + userIds := { + { + genUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "thomson.etsi", + domainProxy := "pcscf.thomson.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "thomson.etsi", + domainProxy := "pcscf.thomson.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "thomson.etsi", + domainProxy := "pcscf.thomson.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 2, // NSN + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "nsn.etsi", + domainProxy := "pcscf.nsn.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "nsn.etsi", + domainProxy := "pcscf.nsn.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "nsn.etsi", + domainProxy := "pcscf.nsn.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 3, // Italtel + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "italtel.etsi", + domainProxy := "pcscf.italtel.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "italtel.etsi", + domainProxy := "pcscf.italtel.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "italtel.etsi", + domainProxy := "pcscf.italtel.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 4, // EXFO + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "exfo.etsi", + domainProxy := "pcscf.exfo.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "exfo.etsi", + domainProxy := "pcscf.exfo.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "exfo.etsi", + domainProxy := "pcscf.exfo.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 5, // Iskratel + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "iskratel.etsi", + domainProxy := "pcscf.iskratel.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "iskratel.etsi", + domainProxy := "pcscf.iskratel.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "iskratel.etsi", + domainProxy := "pcscf.iskratel.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 6, // Testing Tech IMS Core + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "testingtech.com", + domainProxy := "pcscf.testingtech.com" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "testingtech.com", + domainProxy := "pcscf.testingtech.com" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "testingtech.com", + domainProxy := "pcscf.testingtech.com" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 7, // Acme + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "acme.etsi", + domainProxy := "pcscf.acme.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "acme.etsi", + domainProxy := "acme" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "acme.etsi", + domainProxy := "pcscf.acme.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 8, // Nexcom + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userSIP_priv", + password := "123456", + domain := "nexcom.etsi", + domainProxy := "pcscf.nexcom.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userGEN", + privateId := "userSIP_priv", + password := "123456", + domain := "nexcom.etsi", + domainProxy := "pcscf.nexcom.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "nexcom.etsi", + domainProxy := "pcscf.nexcom.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 9, // Hotaro + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "hotaro.etsi", + domainProxy := "pcscf.hotaro.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "hotaro.etsi", + domainProxy := "pcscf.hotaro.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "hotaro.etsi", + domainProxy := "pcscf.hotaro.etsi" //pcscf domain or IPaddress + }} + } + } + }// end modulepar + } // end group + + group eut { + } +} \ No newline at end of file diff --git a/ttcn/LibIms_ConfigAndTrigger/module.mk b/ttcn/LibIms_ConfigAndTrigger/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..55ba6b146ce786aee068ca85652a3db50168cdbd --- /dev/null +++ b/ttcn/LibIms_ConfigAndTrigger/module.mk @@ -0,0 +1 @@ +sources := LibIms_UpperTester.ttcn \ No newline at end of file diff --git a/ttcn/LibIot/LibIot_5GNR_Functions.ttcn b/ttcn/LibIot/LibIot_5GNR_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..31e1614a23e732d975e058ec9b5a5c8f7dd15deb --- /dev/null +++ b/ttcn/LibIot/LibIot_5GNR_Functions.ttcn @@ -0,0 +1,523 @@ +module LibIot_5GNR_Functions { + + // LibIoT + import from LibIot_TypesAndValues all; + import from LibIot_TestConfiguration all; + import from LibIot_VxLTE_Functions all; + import from LibIot_5GNR_Templates all; + import from LibIot_5GNR_PIXITS all; + + import from AtsIms5gIot_TestConfiguration all; + import from AtsIms5gIot_TestSystem all; + + import from AtsImsIot_Templates all; + import from AtsImsIot_TestConfiguration all; + + group ConfigurationFunctions { + + /** + * @desc Check and create a list of monitor interfaces based on PIXITS + * @param + * @return the created monitor component list in vc_Mon5gIntfList + */ + function f_set5GNRMonIterfacesAvailability(/*inout VxLTEMonitorInterfaceList p_vxlteMonIntfList*/)runs on FiveGNRTestCoordinator{ + log(">>> f_set5GNRMonIterfacesAvailability"); + + f_setVxLteMonIterfacesAvailability(); + + if (PX_5GNR_N1N2_MONITORENABLED == true){ + vc_Mon5gIntfList.ngap := valueof(m_MonIntf_N1N2_Ngap); + } + if (PX_5GNR_N5_MONITORENABLED == true){ + vc_Mon5gIntfList.n5 := valueof(m_MonIntf_N5_Http); + } + + } + + /** + * @desc Create monitor components based on vc_Mon5gIntfList + * @param + * @return the created monitor components in vc_5g_monitor_components + */ + function f_cf_create5GNRMonitor() runs on FiveGNRTestCoordinator{ + log(">>> f_cf_create5GNRMonitor"); + + f_cf_createVxLteMonitor(); + // TODO FSCOM Verify if the copy data striucture works fine + vc_Mon5gIntfList.gmA := vc_Mon5gIntfList.gmA; + vc_Mon5gIntfList.gmB := vc_Mon5gIntfList.gmB; + vc_Mon5gIntfList.mmB_PSAP := vc_Mon5gIntfList.mmB_PSAP; + vc_Mon5gIntfList.mwEB := vc_Mon5gIntfList.mwEB; + vc_Mon5gIntfList.mlE_LRF := vc_Mon5gIntfList.mlE_LRF; + vc_Mon5gIntfList.mwS_PSAP := vc_Mon5gIntfList.mwS_PSAP; + vc_Mon5gIntfList.ic := vc_Mon5gIntfList.ic; + vc_Mon5gIntfList.mwPI := vc_Mon5gIntfList.mwPI; + vc_Mon5gIntfList.mwPS := vc_Mon5gIntfList.mwPS; + vc_Mon5gIntfList.mwIS := vc_Mon5gIntfList.mwIS; + vc_Mon5gIntfList.mwPB := vc_Mon5gIntfList.mwPB; + vc_Mon5gIntfList.mwIB := vc_Mon5gIntfList.mwIB; + vc_Mon5gIntfList.isc := vc_Mon5gIntfList.isc; + vc_Mon5gIntfList.cxIH := vc_Mon5gIntfList.cxIH; + vc_Mon5gIntfList.cxSH := vc_Mon5gIntfList.cxSH; + vc_Mon5gIntfList.rx := vc_Mon5gIntfList.rx; + vc_Mon5gIntfList.s6a := vc_Mon5gIntfList.s6a; + vc_Mon5gIntfList.s9 := vc_Mon5gIntfList.s9; + vc_Mon5gIntfList.sh := vc_Mon5gIntfList.sh; + + if (isvalue(vc_Mon5gIntfList.ngap)){ + vc_5g_monitor_components.ngap := f_cf_create_monitor_ngap ( vc_Mon5gIntfList.ngap); + } + if (isvalue(vc_Mon5gIntfList.n5)){ + vc_5g_monitor_components.n5 := f_cf_create_monitor_http ( vc_Mon5gIntfList.n5); + } + } + + /** + * @desc Start monitor components based on vc_Mon5gIntfList + * @param + * @return Created monitor components in vc_5g_monitor_components are connected/mapped + */ + function f_cf_5GNRMonitor_Up() runs on FiveGNRTestCoordinator{ + // FIXME FSCOM Seems we cannot not reuse f_cf_VxLteMonitor_Up call first + + log(">>> f_cf_5GNRMonitor_Up: ", vc_Mon5gIntfList); + + //Initialize the Adapter (including the TrafficCapture process). + timer tc_noAct; + f_cf_initCapture(); + + if (isvalue(vc_Mon5gIntfList.gmA)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.gmA); + vc_5g_monitor_components.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.gmA.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.gmB)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.gmB); + vc_5g_monitor_components.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.gmB.interfaceInfo} + ) + ))); + } + + if (isvalue(vc_Mon5gIntfList.mmB_PSAP)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.mmB_PSAP); + vc_5g_monitor_components.mmB_PSAP.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.mmB_PSAP.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.mwEB)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.mwEB); + vc_5g_monitor_components.mwEB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.mwEB.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.mlE_LRF)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.mlE_LRF); + vc_5g_monitor_components.mlE_LRF.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.mlE_LRF.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.mwS_PSAP)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.mwS_PSAP); + vc_5g_monitor_components.mwS_PSAP.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.mwS_PSAP.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.ic)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.ic); + vc_5g_monitor_components.ic.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.ic.interfaceInfo} + ) + ))); + } + + if (isvalue(vc_Mon5gIntfList.mwPI)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.mwPI); + vc_5g_monitor_components.mwPI.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.mwPI.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.mwPS)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.mwPS); + vc_5g_monitor_components.mwPS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.mwPS.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.mwPE)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.mwPE); + vc_5g_monitor_components.mwPS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.mwPE.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.mwIS)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.mwIS); + vc_5g_monitor_components.mwIS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.mwIS.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.mwPB)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.mwPB); + vc_5g_monitor_components.mwPB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.mwPB.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.mwIB)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.mwIB); + vc_5g_monitor_components.mwIB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.mwIB.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.mwIE)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.mwIE); + vc_5g_monitor_components.mwPS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.mwIE.interfaceInfo} + ) + ))); + } + + if (isvalue(vc_Mon5gIntfList.isc)){ + f_cf_monitor_up_sip(vc_5g_monitor_components.isc); + vc_5g_monitor_components.isc.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_Mon5gIntfList.isc.interfaceInfo} + ) + ))); + } + + + + if (isvalue(vc_Mon5gIntfList.cxIH)){ + f_cf_monitor_up_diameter(vc_5g_monitor_components.cxIH); + vc_5g_monitor_components.cxIH.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_Mon5gIntfList.cxIH.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.cxSH)){ + f_cf_monitor_up_diameter(vc_5g_monitor_components.cxSH); + vc_5g_monitor_components.cxSH.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_Mon5gIntfList.cxSH.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.gx)){ + f_cf_monitor_up_diameter(vc_5g_monitor_components.gx); + vc_5g_monitor_components.gx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_Mon5gIntfList.gx.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.rx)){ + f_cf_monitor_up_diameter(vc_5g_monitor_components.rx); + vc_5g_monitor_components.rx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_Mon5gIntfList.rx.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.s6a)){ + f_cf_monitor_up_diameter(vc_5g_monitor_components.s6a); + vc_5g_monitor_components.s6a.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_Mon5gIntfList.s6a.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.s9)){ + f_cf_monitor_up_diameter(vc_5g_monitor_components.s9); + vc_5g_monitor_components.s9.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_Mon5gIntfList.s9.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.sh)){ + f_cf_monitor_up_diameter(vc_5g_monitor_components.sh); + vc_5g_monitor_components.sh.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_Mon5gIntfList.sh.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.ngap)){ + f_cf_monitor_up_ngap(vc_5g_monitor_components.ngap); + vc_5g_monitor_components.ngap.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_ngap, + {vc_Mon5gIntfList.ngap.interfaceInfo} + ) + ))); + } + if (isvalue(vc_Mon5gIntfList.n5)){ + f_cf_monitor_up_http(vc_5g_monitor_components.n5); + vc_5g_monitor_components.n5.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_http, + {vc_Mon5gIntfList.n5.interfaceInfo} + ) + ))); + } + + tc_noAct.start(3.0); + alt { + [] tc_noAct.timeout { + } + } + f_cf_startCapture(); + } + + /** + * @desc Stops monitor components based on vc_Mon5gIntfList + * @param + * @return Created monitor components in vc_5g_monitor_components are disconnected/unmapped + */ + function f_cf_5GNRMonitor_Down() runs on FiveGNRTestCoordinator{ + //Stop traffic capture processing. + f_cf_stopCapture(); + + if (isvalue(vc_Mon5gIntfList.gmA)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.gmA); + } + if (isvalue(vc_Mon5gIntfList.gmB)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.gmB); + } + if (isvalue(vc_Mon5gIntfList.mmB_PSAP)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.mmB_PSAP); + } + if (isvalue(vc_Mon5gIntfList.mwEB)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.mwEB); + } + if (isvalue(vc_Mon5gIntfList.mlE_LRF)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.mlE_LRF); + } + if (isvalue(vc_Mon5gIntfList.mwS_PSAP)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.mwS_PSAP); + } + if (isvalue(vc_Mon5gIntfList.ic)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.ic); + } + + if (isvalue(vc_Mon5gIntfList.mwPI)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.mwPI); + } + if (isvalue(vc_Mon5gIntfList.mwPS)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.mwPS); + } + if (isvalue(vc_Mon5gIntfList.mwPE)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.mwPE); + } + if (isvalue(vc_Mon5gIntfList.mwIS)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.mwIS); + } + if (isvalue(vc_Mon5gIntfList.mwPB)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.mwPB); + } + if (isvalue(vc_Mon5gIntfList.mwIB)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.mwIB); + } + if (isvalue(vc_Mon5gIntfList.mwIE)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.mwIE); + } + + if (isvalue(vc_Mon5gIntfList.isc)){ + f_cf_monitor_down_sip(vc_5g_monitor_components.isc); + } + + + + if (isvalue(vc_Mon5gIntfList.cxIH)){ + f_cf_monitor_down_diameter(vc_5g_monitor_components.cxIH); + } + if (isvalue(vc_Mon5gIntfList.cxSH)){ + f_cf_monitor_down_diameter(vc_5g_monitor_components.cxSH); + } + if (isvalue(vc_Mon5gIntfList.gx)){ + f_cf_monitor_down_diameter(vc_5g_monitor_components.gx); + } + if (isvalue(vc_Mon5gIntfList.rx)){ + f_cf_monitor_down_diameter(vc_5g_monitor_components.rx); + } + if (isvalue(vc_Mon5gIntfList.s6a)){ + f_cf_monitor_down_diameter(vc_5g_monitor_components.s6a); + } + if (isvalue(vc_Mon5gIntfList.s9)){ + f_cf_monitor_down_diameter(vc_5g_monitor_components.s9); + } + if (isvalue(vc_Mon5gIntfList.sh)){ + f_cf_monitor_down_diameter(vc_5g_monitor_components.sh); + } + + if (isvalue(vc_Mon5gIntfList.ngap)){ + f_cf_monitor_down_ngap(vc_5g_monitor_components.ngap); + } + if (isvalue(vc_Mon5gIntfList.n5)){ + f_cf_monitor_down_http(vc_5g_monitor_components.n5); + } + } + + } // End of group ConfigurationFunctions + + group mappingFunctions { + + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_ngap(in NgapInterfaceMonitor p_monitor) runs on FiveGNRTestCoordinator { + log(">>> f_cf_monitor_up_ngap: ", p_monitor); + + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:fiveGNRPort, self:fiveGNRPort); + // mapp TSI port + map(p_monitor:ngapPort, system:ngapPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_ngap(in NgapInterfaceMonitor p_monitor) runs on FiveGNRTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:fiveGNRPort, self:fiveGNRPort); + // mapp TSI port + unmap(p_monitor:ngapPort, system:ngapPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_http(in HttpInterfaceMonitor p_monitor) runs on FiveGNRTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:fiveGNRPort, self:fiveGNRPort); + // mapp TSI port + map(p_monitor:httpPort, system:httpPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_http(in HttpInterfaceMonitor p_monitor) runs on FiveGNRTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:fiveGNRPort, self:fiveGNRPort); + // mapp TSI port + unmap(p_monitor:httpPort, system:httpPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + + } // End of group mappingFunctions + + group CheckFunctions{ + + function f_check5GNRRequiredMonitorInterface(InterfaceNamesList p_interfaces) runs on FiveGNRTestCoordinator return boolean{ + var integer v_len:=lengthof(p_interfaces); + var integer i:=0; + var boolean v_check := false; + + log(">>> f_check5GNRRequiredMonitorInterface: ", p_interfaces); + + if (v_len>0){ + for(i:=0;i>> f_HttpMonitorInterface_available: ", p_interfaceName); + + if ((isvalue(vc_Mon5gIntfList.n5)) and (vc_Mon5gIntfList.n5.interfaceName==p_interfaceName)){ return true;} + + return false; + } + function f_NgapMonitorInterface_available(charstring p_interfaceName) runs on FiveGNRTestCoordinator return boolean{ + log(">>> f_NgapMonitorInterface_available: ", p_interfaceName); + + if ((isvalue(vc_Mon5gIntfList.ngap)) and (vc_Mon5gIntfList.ngap.interfaceName==p_interfaceName)){ return true;} + + return false; + } + + } // End of CheckFunctions + +} // End of module LibIot_5GNR_Functions \ No newline at end of file diff --git a/ttcn/LibIot/LibIot_5GNR_PIXITS.ttcn b/ttcn/LibIot/LibIot_5GNR_PIXITS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..38089d99ff5aae66427a147a0f586c0e82bbc839 --- /dev/null +++ b/ttcn/LibIot/LibIot_5GNR_PIXITS.ttcn @@ -0,0 +1,20 @@ +module LibIot_5GNR_PIXITS { + + import from LibIot_TypesAndValues all; + + group FiveGNRMonitorInterfaces_PIXITS { + + modulepar boolean PX_5GNR_N1N2_MONITORENABLED := true; + modulepar boolean PX_5GNR_N5_MONITORENABLED := true; + + modulepar charstring PX_NGAP_N1N2_INTERFACENAME := "NGAP"; + modulepar charstring PX_NGAP_N1N2_IPADDR := "fe80::21a:a0ff:fe07:98"; + modulepar integer PX_NGAP_N1N2_PORT := 5060; + + modulepar charstring PX_HTTP_N5_INTERFACENAME := "N5"; + modulepar charstring PX_HTTP_N5_IPADDR := "fe80::21a:a0ff:fe07:98"; + modulepar integer PX_HTTP_N5_PORT := 80; + + } // End of group FiveGNRMonitorInterfaces_PIXITS + +} // End of module LibIot_5GNR_PIXITS \ No newline at end of file diff --git a/ttcn/LibIot/LibIot_5GNR_Templates.ttcn b/ttcn/LibIot/LibIot_5GNR_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..c8a48aa4692146b68aa79ebd8ca05a65e3b51280 --- /dev/null +++ b/ttcn/LibIot/LibIot_5GNR_Templates.ttcn @@ -0,0 +1,42 @@ +module LibIot_5GNR_Templates { + + import from LibIot_TypesAndValues all; + import from LibIot_5GNR_PIXITS all; + + template MonitorInterfaceInfo m_MonIntf_N1N2_Ngap := { + interfaceName := PX_NGAP_N1N2_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "", + IpAddress := "", + portNumbers := {0} + }, + { + domainName := omit, + IpAddress := "", + portNumbers := {0} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_N5_Http := { + interfaceName := PX_HTTP_N5_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "", + IpAddress := "", + portNumbers := {80} + }, + { + domainName := omit, + IpAddress := "", + portNumbers := {80} + } + } + } + }; + +} // End of LibIot_5GNR_Templates \ No newline at end of file diff --git a/ttcn/LibIot/LibIot_Functions.ttcn b/ttcn/LibIot/LibIot_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..decda9f5a94aedeb078a7e1ec6f1ecb38ddd2bad --- /dev/null +++ b/ttcn/LibIot/LibIot_Functions.ttcn @@ -0,0 +1,231 @@ +/* + * @author STF 370 + * @version $Id: LibIot_Functions.ttcn 16 2009-06-16 15:06:42Z pintar $ + * @desc This module provides the functions used by the test component + */ + +module LibIot_Functions { + import from LibCommon_VerdictControl all; + + import from LibUpperTester { + template mw_EO_Response; + type EquipmentOperationReq, EquipmentOperationRsp; + } + + import from LibIot_TypesAndValues { + type IotVerdict, IotVerdictType, Status, VerdictType; + } + + import from LibIot_PIXITS { + modulepar PX_EUT_TRIGGER_RESPONSE, PX_TTCN3_VERDICT; + } + + import from LibIot_TestInterface { + type IotEquipmentUser, OracleClient, OracleServer, TestCoordinator, EquipmentUser; + } + + + group oracleFunctions { + + /** + * @desc Sets the conformance verdict on the oracle client and sends it to the oracle server + * @param p_verdict conformance verdict set by the monitor + * @param p_reason reason why the verdict has been set + */ + function f_setConformanceVerdict(in verdicttype p_verdict, + in charstring p_reason) + runs on OracleClient { + var IotVerdict v_verdict := {conformance := {p_verdict, p_reason}}; + log("Conformance verdict set to: ", p_verdict, p_reason); + vPort.send(v_verdict); + } + + /** + * @desc Sets the end-to-end verdict on the oracle client and sends it to the oracle server + * @param p_verdict e2e verdict set by the monitor + * @param p_reason reason why the verdict has been set + */ + function f_setE2EVerdict(in verdicttype p_verdict, in charstring p_reason) + runs on OracleClient { + var IotVerdict v_verdict := {e2e := {p_verdict, p_reason}}; + log("E2E verdict set to: ", p_verdict, p_reason); + vPort.send(v_verdict); + } + + /** + * @desc Gets the conformance verdict on the oracle client + * @return conformance verdict of oracle server + */ + function f_getConformanceVerdict() + runs on OracleServer + return verdicttype { + return vc_conf_verdict.verdict; + } + + /** + * @desc Gets the end-to-end verdict on the oracle client + * @return end-to-end verdict of oracle server + */ + function f_getE2EVerdict() + runs on OracleServer + return verdicttype { + return vc_e3e_verdict.verdict; + } + + /** + * @desc Computes and logs overall verdict for end-to-end and conformance separately on oracle server + * @param p_verdict the verdict received + */ + function f_setIotVerdict(in IotVerdict p_verdict) runs on OracleServer { + f_logIotVerdict(p_verdict); + if (ischosen(p_verdict.e2e) and PX_TTCN3_VERDICT == e_e2e) { + setverdict(p_verdict.e2e.verdict, p_verdict.e2e.reason); + } else if (ischosen(p_verdict.conformance) and PX_TTCN3_VERDICT == e_conformance) { + setverdict(p_verdict.conformance.verdict, p_verdict.conformance.reason); + } + } + + /** + * @desc Set verdict PASS on main component (to be used, e.g on TestCoordinator) + */ + function f_setIotVerdictPASS(in charstring p_reason) runs on OracleServer { + var IotVerdict p_verdict := { + conformance := {verdict := pass, reason := p_reason} + }; + f_setIotVerdict(p_verdict); + } + /** + * @desc Set verdict PASS on main component (to be used, e.g on TestCoordinator) + */ + function f_setIotVerdictFAIL(in charstring p_reason) runs on OracleServer { + var IotVerdict p_verdict := { + conformance := {verdict := fail, reason := p_reason} + }; + f_setIotVerdict(p_verdict); + } + + + /** + * + * @desc logs the received IOT verdict + * @param p_verdict The verdict to set + */ + function f_logIotVerdict(in IotVerdict p_verdict) runs on OracleServer { + if (ischosen(p_verdict.e2e)) { + vc_e3e_verdict := f_getWorseVerdict(vc_e3e_verdict, p_verdict.e2e); + log("E2E verdict set to: ", p_verdict.e2e.verdict, "Reason: " & p_verdict.e2e.reason); + } else { + vc_conf_verdict := f_getWorseVerdict(vc_conf_verdict, p_verdict.conformance); + log("Conformance verdict set to: ", p_verdict.conformance.verdict, "Reason: " & p_verdict.conformance.reason); + } + } + + /** + * + * @desc returns the worse verdict + * @param p_org the original verdict + * @param p_new the new verdict + * @return the worse verdict + */ + function f_getWorseVerdict(in VerdictType p_org, in VerdictType p_new) return VerdictType { + if(p_org.verdict == pass) { + + if(p_new.verdict != pass) { + return p_new; + } + else { + return p_org; + } + } + else if (p_org.verdict == inconc) { + + if(p_new.verdict != pass) { + return p_new; + } + else { + return p_org; + } + } + else if (p_org.verdict == fail) { + if(p_new.verdict == pass) { + return p_org; + } + else if(p_new.verdict == inconc) { + return p_org; + } + else { + return p_new; + } + } + else if (p_org.verdict == error) { + return p_org; + } + + return p_org; + } + + /** + * @desc Altstep to be used for listening continously on the verdict port of the oracle server for receiving verdicts from oracle clients + */ + altstep a_receiveIOTVerdict() runs on OracleServer { + var IotVerdict v_verdict; + [] vPort.receive(IotVerdict:?) -> value v_verdict { + f_setIotVerdict(v_verdict); + repeat; + } + } + } + + group equipmentOperationFunctions { // TODO Update! + function f_sendEquipmentCmd(in EquipmentOperationReq p_req) runs on EquipmentUser { + var EquipmentOperationRsp v_response; + var charstring v_reason := ""; + + T_Equipment.start(PX_EUT_TRIGGER_RESPONSE); + eaPort.send(p_req); + + alt{ + [] eaPort.receive(mw_EO_Response(e_success)) -> value v_response { + T_Equipment.stop; + if(ispresent(v_response.status.reason)) { + v_reason := v_response.status.reason; + f_setE2EVerdict(pass, "Equipment command """ & p_req.cmd & """successful: " & v_reason); + }else { + f_setE2EVerdict(pass, "Equipment command successful"); + } + } + [] eaPort.receive(mw_EO_Response(?)) -> value v_response { + T_Equipment.stop; + if(ispresent(v_response.status.reason)) { + v_reason := v_response.status.reason; + f_setE2EVerdict(fail, "Equipment command """ & p_req.cmd & """unsuccessful: " & v_reason); + }else { + f_setE2EVerdict(fail, "Equipment command unsuccessful: no reason given"); + } + } + [] T_Equipment.timeout { + f_setE2EVerdict(inconc, "Timer expired while waiting for reponse of Trigger command """ & p_req.cmd & """"); + } + } + } + } + + group miscFunctions { + /** + * @desc searches the array for a given name and returns + * the corresponding index + * @param p_idx index of the port + * @return the index + */ + function f_getMonitorIdx(in charstring p_name) + runs on TestCoordinator return integer { + var integer v_size := lengthof(vc_compIds); + for (var integer i := 0; i < v_size; i := i + 1) { + if (vc_compIds[i].name == p_name) { + return vc_compIds[i].index; + } + } + return - 1; + } + } +} \ No newline at end of file diff --git a/ttcn/LibIot/LibIot_PIXITS.ttcn b/ttcn/LibIot/LibIot_PIXITS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..f4e20f7af1a3734b0aacfc242e281288d0afaa11 --- /dev/null +++ b/ttcn/LibIot/LibIot_PIXITS.ttcn @@ -0,0 +1,399 @@ +/* + * @author STF370 + * @version $Id: LibIot_PIXITS.ttcn $ + * @desc This module provides PIXIT parameters which need to be + * changeable within validation + */ + +module LibIot_PIXITS { + + import from LibIot_TypesAndValues + { + type IOTExecMode, IotVerdictType, CaptureMode, RecordMode, FileList, TimeOffset, EutInterfaceInfoList, + ProtocolFilter, IpAddress, PortNumber, ProductList, InterfaceAvailableList,MonitorInterfaceInfo; + } + + /** + * @desc PIXIT defines which verdict (E2E or conformance)is to be kept track of with the TTCN-3 verdict. + * Note that the verdict not chosen will be only available in log statements. + */ + modulepar IotVerdictType PX_TTCN3_VERDICT := e_conformance; + + /** + * + * @desc Maximum time limit used by monitor component for waiting for expected incoming messages + */ + modulepar float PX_MAX_MSG_WAIT := 10.0; + + /** + * + * @desc Example of module parameter based entry of EUT interface information for all products particpating in an interoperability event + */ +// remove at end of validation phase + modulepar ProductList PX_PRODUCTS := { + { + // productIndex = 0 + productName := "ProductA", + monitorInterfaces := { + { + interfaceName := "Gm", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:32e0", //"192.86.1.97", + portNumbers := {5060} + }, + { + domainName := omit, + IpAddress := "fe80::21a:a0ff:fe07:98", //"10.10.20.98", + portNumbers := {5060} + }, + { + domainName := omit, + IpAddress := "fe80::21a:a0ff:fe07:99", //"10.10.20.99", + portNumbers := {5060} + } + } + } + }, + { + interfaceName := "Mx", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:32e0", //"192.86.1.97", + portNumbers := {5060} + }, + { + domainName := "icscf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:98", //"192.86.1.98", + portNumbers := {5060} + }, + { + domainName := "scscf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:99", //"192.86.1.99", + portNumbers := {5060} + }, + { + domainName := "ibcf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:100", //"192.86.1.100", + portNumbers := {5060} + } + } + } + }, + { + interfaceName := "Ici", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "ibcf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:100", //"192.86.1.100", + portNumbers := {5060} + } + } + } + }, + { + interfaceName := "ISC", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "as.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:109", //"192.86.1.109", + portNumbers := {} + }, + { + domainName := "scscf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:99", //"192.86.1.99", + portNumbers := {5060} + } + + } + } + }, + { + interfaceName := "Rx", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "", + IpAddress := "", + portNumbers := {1111} + } + } + } + }, + { + interfaceName := "Sgi", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "", + IpAddress := "", + portNumbers := {1111} + } + } + } + }, + { + interfaceName := "Mw", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "", + IpAddress := "", + portNumbers := {2222} + } + } + } + } + } + }, + { + // productIndex = 1 + productName := "ProductB", + monitorInterfaces := { + { + interfaceName := "Gm", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:22c", + portNumbers := {5060} + }, + { + domainName := omit, + IpAddress := "fec0::216:d3ff:fe0d:106", + portNumbers := {5060} + }, + { + domainName := omit, + IpAddress := "fec0::216:d3ff:fe0d:107", + portNumbers := {5060} + } + } + } + }, + { + interfaceName := "Mx", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:22c", + portNumbers := {5060} + }, + { + domainName := "icscf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:10", + portNumbers := {5180,5185} + }, + { + domainName := "scscf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:10", + portNumbers := {5185,5187,5188,5189} + }, + { + domainName := "ibcf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:10", + portNumbers := {5190} + } + } + } + }, + { + interfaceName := "Ici", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "ibcf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:10", + portNumbers := {5185,5187,5188,5189} + } + } + } + }, + { + interfaceName := "ISC", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "scscf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:10", + portNumbers := {5060} + }, + { + domainName := "as.ProductB.net", + IpAddress := "fec0::216:d3ff:fe0d:20", + portNumbers := {5076} + } + } + } + } + } + } + } + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_A + * + */ + modulepar integer PX_EUT_A := 0; + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_A + * + */ + modulepar integer PX_EUT_A_EMERGENCY := 1; + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_B + */ + modulepar integer PX_EUT_B := 2; + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_B + */ + modulepar integer PX_EUT_B_EMERGENCY := 3; + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_C + */ + modulepar integer PX_EUT_C := 10; + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_D + */ + modulepar integer PX_EUT_D := 11; + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_B_B2 + */ + modulepar integer PX_EUT_B_B2 := 3; + + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for PSAP + * + */ + modulepar integer PX_PSAP := 12; + + /** + * + * @desc Selects if interfaces should be considered in the evaluation + * interfaceName needs to be consistent to AtsImsIot_TestConfiguration + */ + modulepar InterfaceAvailableList PX_AVAILABLE_INTERFACES := { + { interfaceName := "Gm A", available := true }, + { interfaceName := "Gm B", available := true }, + { interfaceName := "Gm C", available := true }, + { interfaceName := "Gm D", available := true }, + { interfaceName := "Mx", available := true }, + { interfaceName := "Rx", available := true }, + { interfaceName := "Mw", available := false }, + { interfaceName := "Sgi", available := false }, + { interfaceName := "Ici", available := true }, + { interfaceName := "ISC A", available := true }, + { interfaceName := "ISC B", available := true }, + { interfaceName := "User A", available := true }, + { interfaceName := "User B", available := true }, + { interfaceName := "User A2", available := true }, + { interfaceName := "User B2", available := true } + } + + group adapterGeneralConfiguration { + /** + * + * @desc Maximum time limit used by trigger component for waiting for EUT response after command has been sent + */ + modulepar float PX_EUT_TRIGGER_RESPONSE := 15.0; + + /** + * @desc + * In case of offline mode, it defines the path where all sessions's Pcap files are located. + */ + modulepar charstring PX_IOT_PCAP_SESSIONS_PATH := "C:/cygwin/tmp/IMS-UE_tool_pcaps"; // Do not forget to upgrade PX_EUT_A and PX_EUT_B + + /** + * @desc + * Defines if the record traffic capture mode must be activated or not. + */ + modulepar RecordMode PX_IOT_RECORD_MODE := e_norecord; + + /** + * @desc + * Defines list of the files to merge. + */ + modulepar FileList PX_IOT_FILE_MERGE_LIST := { }; + + /** + * @desc + * Defines the location of the files to merge. + */ + modulepar charstring PX_IOT_FILE_MERGE_PATH := "."; + + /** + * @desc + * Defines the location of the files to merge. + */ + modulepar charstring PX_IOT_MERGE_TOOL_PATH := "C:\\Program Files\\WireShark"; + + /** + * @desc + * Defines the time stamp offset to start playing record traffic capture file. + */ + modulepar TimeOffset PX_IOT_TIMESTAMP_OFFSET := + { + seconds := 0, + microseconds := 0 + }; + + /** + * @desc + * List of the network interfaces to monitor. + * Use ';' to separate the interfaces + */ + modulepar charstring PX_IOT_IFACES := "rpcap://\\Device\\NPF_{60DAA80A-2AC6-4592-B3A7-80FC0FF08908}"; + + modulepar EutInterfaceInfoList PX_IOT_EUTs_IFACE_INFO_LIST := + { + { + eut := "User A", + ipAddress := "3ffe:501:ffff:100::10", // "127.0.0.1", + portNumber := 5060 + }, + { + eut := "User B", + ipAddress := "3ffe:501:ffff:1000::1000", //"127.0.0.1", + portNumber := 5060 + } + }; + + } // group adapterGlobalConfiguration + + +} + diff --git a/ttcn/LibIot/LibIot_TestConfiguration.ttcn b/ttcn/LibIot/LibIot_TestConfiguration.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..bfa147b6b2f0fa671ab004089e9b3a9e16a53d4f --- /dev/null +++ b/ttcn/LibIot/LibIot_TestConfiguration.ttcn @@ -0,0 +1,50 @@ +/* + * @author STF 370 + * @version $Id: LibIot_TestConfiguration.ttcn 16 2009-06-16 15:06:42Z pintar $ + * @desc xxx. + */ + +module LibIot_TestConfiguration { + + import from LibIot_TestInterface { + type + InterfaceMonitor, + IotEquipmentUser, + OracleClient, + OracleServer, + TestCoordinator; + } + + /** + * @desc connects the port of the monitor component to the + * port of the test oracle and activates the default + * @param p_monitor monitor component + */ + function f_cf_oracle_up(in OracleClient p_client) runs on OracleServer { + connect(self:vPort, p_client:vPort); + } + + /** + * @desc deactivates the default and disconnects the port of the monitor + * component + * @param p_monitor monitor component + */ + function f_cf_oracle_down(in OracleClient p_client) runs on OracleServer { + disconnect(self:vPort, p_client:vPort); + } + + /** + * @desc creates a IOT equipment user component + * @param p_name name of the equipment user component + * @return reference to the created equipment user component + */ + function f_cf_create_IotEquipmentUser(in charstring p_name) runs on TestCoordinator return IotEquipmentUser { + var IotEquipmentUser v_iotEquipmentUser := IotEquipmentUser.create(p_name) alive; + // TODO var IotEquipmentUser v_iotEquipmentUser := IotEquipmentUser.create alive; + /* YANN + It's really better to use named port for debug and so on + */ + + return v_iotEquipmentUser; + } +} \ No newline at end of file diff --git a/ttcn/LibIot/LibIot_TestInterface.ttcn b/ttcn/LibIot/LibIot_TestInterface.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..275d435b25129bc9ec81d5ac487d2ed7373d9b2f --- /dev/null +++ b/ttcn/LibIot/LibIot_TestInterface.ttcn @@ -0,0 +1,119 @@ +/* + * @author STF 370 + * @version $Id: LibIot_TestInterface.ttcn 16 2009-06-16 15:06:42Z pintar $ + * @desc This module provides the types and components used by the test + * system component for Interoperability tests. + */ + +module LibIot_TestInterface { + + import from LibUpperTester { + type EquipmentOperationReq, EquipmentOperationRsp; + } + + import from LibIot_TypesAndValues all; + + import from LibIot_PIXITS all; + + import from LibCommon_Sync all; + import from LibSip_SIPTypesAndValues all; + import from AtsImsIot_TypesAndValues all; + + + group abstractTestComponents { + /** + * @desc + * used to coordinate the behavior of other components. It is in charge + * of controlling the overall execution, manangement of testing phases, + * test verdicts collection and synchronization. Used as MTC. + */ + type component TestCoordinator extends OracleServer { + var ComponentIdList vc_compIds; + port AdapterConfigPort acPort; + } + + /** + * @desc + * collecting information to manage E2E and conformance verdicts. + * Can be used as MTC. + */ + type component OracleServer extends ServerSyncComp { + port VerdictPort vPort; + var VerdictType vc_e3e_verdict := {none, "init"}; + var VerdictType vc_conf_verdict := {none, "init"}; + } + + type component OracleClient extends SelfSyncComp { + port VerdictPort vPort; + } + + /** + * @desc + * This component type is used to monitor interfaces. + * The library provides on the adapter configuration port. + * @remark + * As part of the ATS test system module this component type must be + * extended to include the ATS specific data port! + */ + type component InterfaceMonitor extends OracleClient { + timer tc_wait := PX_MAX_MSG_WAIT; + var charstring vc_interfaceName := "Undefined"; + var MonitorInterfaceInfo vc_Interface; + port AdapterConfigPort acPort; + } + + + /** + * @desc + * This component type is used to trigger, stimualte, configure etc any + * equipment related to the test, i.e., EUTs or other, or the + * interconnecting network. To be used as PTC. + */ + type component EquipmentUser extends OracleClient{ + port EquipmentAccessPort eaPort; + timer T_Equipment; + } + + /** + * @desc This component type is used to trigger, stimulate, configure etc + * any equipment related to the test, i.e., EUTs or other, or + * the interconnecting network. To be used as PTC. + */ + type component IotEquipmentUser extends EquipmentUser { + } + +// TODO commented out due to problems with tools not accepting 'extends' from several components + /** + * @desc This component type is used to trigger, stimulate, configure etc + * any equipment related to the test, i.e., EUTs or other, or + * the interconnecting network. To be used as PTC. + */ +// type component IotEquipmentUser extends EquipmentUser, OracleClient { +// } + + }// end group abstractTestComponents + + group portDefinitions { + + type port EquipmentAccessPort message { + out EquipmentOperationReq; + in EquipmentOperationRsp; + } + type port VerdictPort message { + inout IotVerdict; + } with { + extension "internal" + } + + type port AdapterConfigPort message { + out GeneralConfigurationReq; + out SetFilterReq; + out StartTrafficCaptureReq; + out StopTrafficCaptureReq; + in GeneralConfigurationRsp; + in SetFilterRsp; + in StartTrafficCaptureRsp; + in StopTrafficCaptureRsp; + } + }// end group portDefinitions +} diff --git a/ttcn/LibIot/LibIot_TypesAndValues.ttcn b/ttcn/LibIot/LibIot_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..b55260323415158452f0c4c9973113897583ba48 --- /dev/null +++ b/ttcn/LibIot/LibIot_TypesAndValues.ttcn @@ -0,0 +1,322 @@ +/* + * @author STF 370 + * @version $Id: LibIot_TypesAndValues.ttcn 16 2009-06-16 15:06:42Z pintar $ + * @desc This module provides the (message) types and constants used by the test component + * for Iot tests. + */ + +module LibIot_TypesAndValues { + + import from LibCommon_BasicTypesAndValues {type UInt32, UInt16;} + + import from LibCommon_VerdictControl all; + + group commonTypes { + type enumerated IOTExecMode { e_realtime, e_offline } + + type record Status { + FncRetCode code, + charstring reason optional + } + + } + + group interfaceInformationrelatedTypes { + + /** + * + * @desc IP address type e.g. "127.0.0.1" + */ + type charstring IpAddress; + + /** + * + * @desc Type for port number, e.g. "5060" + */ + type UInt16 PortNumber; + + /** + * + * @desc List of port numbers + */ + type record of PortNumber PortNumberList; + + type record InterfaceAvailable { + charstring interfaceName, + boolean available + } + + type set of InterfaceAvailable InterfaceAvailableList; + + /** + * + * @desc Required information for IP interfaces + * @member domainName the domain name + * @member IpAddress the ip address + * @member portNumbers the list of port numbers where message are received + */ + type record IpInterfaceInfo { + charstring domainName optional, + IpAddress IpAddress, + PortNumberList portNumbers + } + + /** + * + * @desc List of IP interfacees + */ + type record of IpInterfaceInfo IpInterfaceInfoList; + + /** + * + * @desc Collection of different interface types, e.g for IP communications + * This type can be extended with new alternative for other interface types + */ + type union InterfaceInfo { + IpInterfaceInfoList IpInterfaceInfo + } + + /** + * + * @desc Type for representing EUT interface information for monitored logical interfaces + * @member interfaceName Name of logical interface + * @member interfaceInfo Interface information specific to this logical interface + */ + type record MonitorInterfaceInfo { + charstring interfaceName, + InterfaceInfo interfaceInfo + } + + /** + * + * @desc List of monitored interfaces + */ + type record of MonitorInterfaceInfo MonitorInterfaceInfoList; + + /** + * + * @desc List of VxLTE Monitor interfaces + */ + type record VxLTEMonitorInterfaceList{ + MonitorInterfaceInfo gmA optional, + MonitorInterfaceInfo gmB optional, + MonitorInterfaceInfo mmB_PSAP optional,// Mm interface at IBCF to PSAP + MonitorInterfaceInfo mwEB optional,// Mw interface at ECSCF to IBCF + MonitorInterfaceInfo mlE_LRF optional, //Ml interface at ECSCF to LRF + MonitorInterfaceInfo mwS_PSAP optional,// Mw interface at SCSCF to PSAP + MonitorInterfaceInfo ic optional, + MonitorInterfaceInfo mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + MonitorInterfaceInfo mwPS optional, + MonitorInterfaceInfo mwPE optional,// Mw interface at P-CSCF to E-CSCF + MonitorInterfaceInfo mwIS optional,// Mw interface at I-CSCF/S-CSCF + MonitorInterfaceInfo mwPB optional,// Mw interface at P-CSCF/IBCF + MonitorInterfaceInfo mwIB optional,// Mw interface at I-CSCF/IBCF + MonitorInterfaceInfo mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF + MonitorInterfaceInfo isc optional, + MonitorInterfaceInfo cxIH optional, + MonitorInterfaceInfo cxSH optional, + MonitorInterfaceInfo gx optional, + MonitorInterfaceInfo rx optional, + MonitorInterfaceInfo s6a optional, + MonitorInterfaceInfo s9 optional, + MonitorInterfaceInfo sh optional + } + + /** + * @desc List of VxLTE Monitor interfaces + */ + type record FiveGNRMonitorInterfaceList{ + MonitorInterfaceInfo gmA optional, + MonitorInterfaceInfo gmB optional, + MonitorInterfaceInfo mmB_PSAP optional,// Mm interface at IBCF to PSAP + MonitorInterfaceInfo mwEB optional,// Mw interface at ECSCF to IBCF + MonitorInterfaceInfo mlE_LRF optional, //Ml interface at ECSCF to LRF + MonitorInterfaceInfo mwS_PSAP optional,// Mw interface at SCSCF to PSAP + MonitorInterfaceInfo ic optional, + MonitorInterfaceInfo mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + MonitorInterfaceInfo mwPS optional, + MonitorInterfaceInfo mwPE optional,// Mw interface at P-CSCF to E-CSCF + MonitorInterfaceInfo mwIS optional,// Mw interface at I-CSCF/S-CSCF + MonitorInterfaceInfo mwPB optional,// Mw interface at P-CSCF/IBCF + MonitorInterfaceInfo mwIB optional,// Mw interface at I-CSCF/IBCF + MonitorInterfaceInfo mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF + MonitorInterfaceInfo isc optional, + MonitorInterfaceInfo cxIH optional, + MonitorInterfaceInfo cxSH optional, + MonitorInterfaceInfo gx optional, + MonitorInterfaceInfo rx optional, + MonitorInterfaceInfo s6a optional, + MonitorInterfaceInfo s9 optional, + MonitorInterfaceInfo sh optional, + MonitorInterfaceInfo n5 optional, + MonitorInterfaceInfo ngap optional + } + + /** + * + * @desc Product specific EUT interface information + * @member name the name of the vendor + * @member monitorInterfaces monitor interface configuration + */ + type record Product { + charstring productName, + MonitorInterfaceInfoList monitorInterfaces + } + + /** + * + * @desc List of product specificr EUT interface information + */ + type record of Product ProductList; + } + + + + group adapterConfigurationTypes { + + type union CaptureMode { + LiveCapture liveCpature, + OfflineCapture offlineCapture + } + + // + type record of charstring PhysicalInterfaceList; + + type record LiveCapture { + PhysicalInterfaceList physicalInterfaces, // TODO document example syntax + RecordMode recordMode + } + + type enumerated RecordMode { + e_norecord, + e_record + } + + type record of charstring FileList; + + type record MergeFileList { + FileList mergeFileList, + charstring mergeFilePath, + charstring mergeToolPath + } + + type record CaptureSource { + charstring sessionsPath, // e.g., the path where session's PCAP files are located like /tmp/19 + MergeFileList mergeFileList + } + + type record TimeOffset + { + UInt32 seconds, + UInt32 microseconds + } + + type record OfflineCapture { + TimeOffset offset, + CaptureSource captureSource + } + + /** + * + * @desc Required information for EUTs IP interfaces + * @member IpAddress the ip address + * @member portNumber the list of port number where message are received + */ + type record EutInterfaceInfo { + charstring eut, + IpAddress ipAddress, + PortNumber portNumber + } + + /** + * + * @desc List of IP interfaces for EUTs + */ + type record of EutInterfaceInfo EutInterfaceInfoList; + + + + type record GeneralConfigurationReq { + charstring captureProcessIpAddress, + PortNumber captureProcessPort, + CaptureMode captureMode, + EutInterfaceInfoList eutInfoList optional + } + + type record GeneralConfigurationRsp + { + Status status + } + + + //type record (2..infinity) of InterfaceInfo InterfaceInfoList; + type record of InterfaceInfo InterfaceInfoList; + + type enumerated ProtocolFilter { + e_ip, + e_sip, + e_dns, + e_diameter, + e_ngap, + e_http + } + + type record SetFilterReq { + ProtocolFilter protocol, + InterfaceInfoList interfaceInfos + } + + + type record SetFilterRsp + { + Status status + } + + + type record StartTrafficCaptureReq { } + + type record StartTrafficCaptureRsp + { + Status status + } + + + type record StopTrafficCaptureReq { } + + type record StopTrafficCaptureRsp + { + Status status + } + + } + with{ + encode "IOTCodec"; + } + + group oracleRelatedTypes { + // used for PIXIT definition + type enumerated IotVerdictType { e_e2e, e_conformance } + + // used for verdict handling + type record VerdictType { + verdicttype verdict, + charstring reason optional + } + + type union IotVerdict { + VerdictType e2e, + VerdictType conformance + } + } + /** + * @desc Default record + */ + type record of default DefaultList; + + type record ComponentId { + charstring name, + integer index // explain more + } + + type set of ComponentId ComponentIdList; +} \ No newline at end of file diff --git a/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..ae289c6b929273f6bd53f5e756b2c927cd284410 --- /dev/null +++ b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn @@ -0,0 +1,756 @@ +/* + * @author STF 574 + * @version $Id: LibIot_VxLTE_Functions.ttcn 1 2020-05-29 15:06:42Z pintar $ + * @desc This module provides Functions parameters which need to be + * changeable within validation + */ + +module LibIot_VxLTE_Functions { + + import from LibIot_TypesAndValues all; + import from AtsImsIot_Templates all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_Templates all; + + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + + type record of charstring InterfaceNamesList; + group ConfigurationFunctions{ + /** + * @desc Check and create a list of monitor interfaces based on PIXITS + * @param + * @return the created monitor component list in vc_MonIntfList + */ + function f_setVxLteMonIterfacesAvailability(/*inout VxLTEMonitorInterfaceList p_vxlteMonIntfList*/)runs on ImsTestCoordinator{ + log(">>> f_setVxLteMonIterfacesAvailability"); + + if (PX_SIP_GMA_MONITORENABLED == true){ + //p_vxlteMonIntfList.gmA := valueof(m_MonIntf_Sip_Gm_A); + vc_MonIntfList.gmA := valueof(m_MonIntf_Sip_Gm_A); + } + if (PX_SIP_GMB_MONITORENABLED == true){ + vc_MonIntfList.gmB := valueof(m_MonIntf_Sip_Gm_B); + } + if (PX_SIP_MM_B_PSAP_MONITORENABLED == true){ + vc_MonIntfList.mmB_PSAP := valueof(m_MonIntf_Sip_MmB_PSAP); + } + if (PX_SIP_MW_EB_MONITORENABLED == true){ + vc_MonIntfList.mwEB := valueof(m_MonIntf_Sip_Mw_EB); + } + if (PX_SIP_ML_E_LRF_MONITORENABLED == true){ + vc_MonIntfList.mlE_LRF := valueof(m_MonIntf_Sip_Ml_E_LRF); + } + if (PX_SIP_MW_S_PSAP_MONITORENABLED == true){ + vc_MonIntfList.mwS_PSAP := valueof(m_MonIntf_Sip_MwS_PSAP); + } + if (PX_SIP_IC_MONITORENABLED == true){ + vc_MonIntfList.ic := valueof(m_MonIntf_Sip_Ic); + } + if (PX_SIP_MW_PI_MONITORENABLED == true){ + vc_MonIntfList.mwPI := valueof(m_MonIntf_Sip_Mw_PI); + } + if (PX_SIP_MW_PS_MONITORENABLED == true){ + vc_MonIntfList.mwPS := valueof(m_MonIntf_Sip_Mw_PS); + } + if (PX_SIP_MW_PE_MONITORENABLED == true){ + vc_MonIntfList.mwPE := valueof(m_MonIntf_Sip_Mw_PE); + } + if (PX_SIP_MW_IS_MONITORENABLED == true){ + vc_MonIntfList.mwIS := valueof(m_MonIntf_Sip_Mw_IS); + } + if (PX_SIP_MW_PB_MONITORENABLED == true){ + vc_MonIntfList.mwPB := valueof(m_MonIntf_Sip_Mw_PB); + } + if (PX_SIP_MW_IB_MONITORENABLED == true){ + vc_MonIntfList.mwIB := valueof(m_MonIntf_Sip_Mw_IB); + } + if (PX_SIP_MW_IE_MONITORENABLED == true){ + vc_MonIntfList.mwIE := valueof(m_MonIntf_Sip_Mw_IE); + } + if (PX_SIP_ISC_MONITORENABLED == true){ + vc_MonIntfList.isc := valueof(m_MonIntf_Sip_ISC); + } + + + if (PX_DIAMETER_CX_IH_MONITORENABLED == true){ + vc_MonIntfList.cxIH := valueof(m_MonIntf_Diameter_Cx_IH); + } + if (PX_DIAMETER_CX_SH_MONITORENABLED == true){ + vc_MonIntfList.cxSH := valueof(m_MonIntf_Diameter_Cx_SH); + } + if (PX_DIAMETER_GX_MONITORENABLED == true){ + vc_MonIntfList.gx := valueof(m_MonIntf_Diameter_Gx); + } + if (PX_DIAMETER_RX_MONITORENABLED == true){ + vc_MonIntfList.rx := valueof(m_MonIntf_Diameter_Rx); + } + if (PX_DIAMETER_S6A_MONITORENABLED == true){ + vc_MonIntfList.s6a := valueof(m_MonIntf_Diameter_S6a); + } + if (PX_DIAMETER_S9_MONITORENABLED == true){ + vc_MonIntfList.s9 := valueof(m_MonIntf_Diameter_S9); + } + if (PX_DIAMETER_SH_MONITORENABLED == true){ + vc_MonIntfList.sh := valueof(m_MonIntf_Diameter_Sh); + } + + } + + /** + * @desc Create monitor components based on vc_MonIntfList + * @param + * @return the created monitor components in vc_vxlte_monitor_components + */ + function f_cf_createVxLteMonitor() runs on ImsTestCoordinator{ + log(">>> f_cf_createVxLteMonitor"); + + if (isvalue(vc_MonIntfList.gmA)){ + vc_vxlte_monitor_components.gmA := f_cf_create_monitor_sip ( vc_MonIntfList.gmA); + } + if (isvalue(vc_MonIntfList.gmB)){ + vc_vxlte_monitor_components.gmB := f_cf_create_monitor_sip ( vc_MonIntfList.gmB); + } + + if (isvalue(vc_MonIntfList.mmB_PSAP)){ + vc_vxlte_monitor_components.mmB_PSAP := f_cf_create_monitor_sip ( vc_MonIntfList.mmB_PSAP); + } + if (isvalue(vc_MonIntfList.mwEB)){ + vc_vxlte_monitor_components.mwEB := f_cf_create_monitor_sip ( vc_MonIntfList.mwEB); + } + if (isvalue(vc_MonIntfList.mlE_LRF)){ + vc_vxlte_monitor_components.mlE_LRF := f_cf_create_monitor_sip ( vc_MonIntfList.mlE_LRF); + } + if (isvalue(vc_MonIntfList.mwS_PSAP)){ + vc_vxlte_monitor_components.mwS_PSAP := f_cf_create_monitor_sip ( vc_MonIntfList.mwS_PSAP); + } + if (isvalue(vc_MonIntfList.ic)){ + vc_vxlte_monitor_components.ic := f_cf_create_monitor_sip ( vc_MonIntfList.ic); + } + + if (isvalue(vc_MonIntfList.mwPI)){ + vc_vxlte_monitor_components.mwPI := f_cf_create_monitor_sip ( vc_MonIntfList.mwPI); + } + if (isvalue(vc_MonIntfList.mwPS)){ + vc_vxlte_monitor_components.mwPS := f_cf_create_monitor_sip ( vc_MonIntfList.mwPS); + } + if (isvalue(vc_MonIntfList.mwPE)){ + vc_vxlte_monitor_components.mwPE := f_cf_create_monitor_sip ( vc_MonIntfList.mwPE); + } + if (isvalue(vc_MonIntfList.mwIS)){ + vc_vxlte_monitor_components.mwIS := f_cf_create_monitor_sip ( vc_MonIntfList.mwIS); + } + if (isvalue(vc_MonIntfList.mwPB)){ + vc_vxlte_monitor_components.mwPB := f_cf_create_monitor_sip ( vc_MonIntfList.mwPB); + } + if (isvalue(vc_MonIntfList.mwIB)){ + vc_vxlte_monitor_components.mwIB := f_cf_create_monitor_sip ( vc_MonIntfList.mwIB); + } + if (isvalue(vc_MonIntfList.mwIE)){ + vc_vxlte_monitor_components.mwIE := f_cf_create_monitor_sip ( vc_MonIntfList.mwIE); + } + + if (isvalue(vc_MonIntfList.isc)){ + vc_vxlte_monitor_components.isc := f_cf_create_monitor_sip ( vc_MonIntfList.isc); + } + + + + if (isvalue(vc_MonIntfList.cxIH)){ + vc_vxlte_monitor_components.cxIH := f_cf_create_monitor_diameter ( vc_MonIntfList.cxIH); + } + if (isvalue(vc_MonIntfList.cxSH)){ + vc_vxlte_monitor_components.cxSH := f_cf_create_monitor_diameter ( vc_MonIntfList.cxSH); + } + if (isvalue(vc_MonIntfList.gx)){ + vc_vxlte_monitor_components.gx := f_cf_create_monitor_diameter ( vc_MonIntfList.gx); + } + if (isvalue(vc_MonIntfList.rx)){ + vc_vxlte_monitor_components.rx := f_cf_create_monitor_diameter ( vc_MonIntfList.rx); + } + if (isvalue(vc_MonIntfList.s6a)){ + vc_vxlte_monitor_components.s6a := f_cf_create_monitor_diameter ( vc_MonIntfList.s6a); + } + if (isvalue(vc_MonIntfList.s9)){ + vc_vxlte_monitor_components.s9 := f_cf_create_monitor_diameter ( vc_MonIntfList.s9); + } + if (isvalue(vc_MonIntfList.sh)){ + vc_vxlte_monitor_components.sh := f_cf_create_monitor_diameter ( vc_MonIntfList.sh); + } + } + + /** + * @desc Start monitor components based on vc_MonIntfList + * @param + * @return Created monitor components in vc_vxlte_monitor_components are connected/mapped + */ + function f_cf_VxLteMonitor_Up() runs on ImsTestCoordinator{ + log(">>> f_cf_VxLteMonitor_Up"); + + //Initialize the Adapter (including the TrafficCapture process). + timer tc_noAct; + f_cf_initCapture(); + + if (isvalue(vc_MonIntfList.gmA)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.gmA); + vc_vxlte_monitor_components.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.gmA.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.gmB)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.gmB); + vc_vxlte_monitor_components.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.gmB.interfaceInfo} + ) + ))); + } + + if (isvalue(vc_MonIntfList.mmB_PSAP)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mmB_PSAP); + vc_vxlte_monitor_components.mmB_PSAP.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mmB_PSAP.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwEB)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwEB); + vc_vxlte_monitor_components.mwEB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwEB.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mlE_LRF)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mlE_LRF); + vc_vxlte_monitor_components.mlE_LRF.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mlE_LRF.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwS_PSAP)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwS_PSAP); + vc_vxlte_monitor_components.mwS_PSAP.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwS_PSAP.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.ic)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.ic); + vc_vxlte_monitor_components.ic.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.ic.interfaceInfo} + ) + ))); + } + + if (isvalue(vc_MonIntfList.mwPI)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwPI); + vc_vxlte_monitor_components.mwPI.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwPI.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwPS)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwPS); + vc_vxlte_monitor_components.mwPS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwPS.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwPE)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwPE); + vc_vxlte_monitor_components.mwPS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwPE.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwIS)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwIS); + vc_vxlte_monitor_components.mwIS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwIS.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwPB)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwPB); + vc_vxlte_monitor_components.mwPB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwPB.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwIB)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwIB); + vc_vxlte_monitor_components.mwIB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwIB.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwIE)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwIE); + vc_vxlte_monitor_components.mwPS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwIE.interfaceInfo} + ) + ))); + } + + if (isvalue(vc_MonIntfList.isc)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.isc); + vc_vxlte_monitor_components.isc.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.isc.interfaceInfo} + ) + ))); + } + + + + if (isvalue(vc_MonIntfList.cxIH)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.cxIH); + vc_vxlte_monitor_components.cxIH.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.cxIH.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.cxSH)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.cxSH); + vc_vxlte_monitor_components.cxSH.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.cxSH.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.gx)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.gx); + vc_vxlte_monitor_components.gx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.gx.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.rx)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.rx); + vc_vxlte_monitor_components.rx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.rx.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.s6a)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.s6a); + vc_vxlte_monitor_components.s6a.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.s6a.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.s9)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.s9); + vc_vxlte_monitor_components.s9.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.s9.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.sh)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.sh); + vc_vxlte_monitor_components.sh.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.sh.interfaceInfo} + ) + ))); + } + + tc_noAct.start(3.0); + alt { + [] tc_noAct.timeout { + } + } + f_cf_startCapture(); + } + + /** + * @desc Stops monitor components based on vc_MonIntfList + * @param + * @return Created monitor components in vc_vxlte_monitor_components are disconnected/unmapped + */ + function f_cf_VxLteMonitor_Down() runs on ImsTestCoordinator{ + //Stop traffic capture processing. + f_cf_stopCapture(); + + if (isvalue(vc_MonIntfList.gmA)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.gmA); + } + if (isvalue(vc_MonIntfList.gmB)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.gmB); + } + if (isvalue(vc_MonIntfList.mmB_PSAP)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mmB_PSAP); + } + if (isvalue(vc_MonIntfList.mwEB)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwEB); + } + if (isvalue(vc_MonIntfList.mlE_LRF)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mlE_LRF); + } + if (isvalue(vc_MonIntfList.mwS_PSAP)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwS_PSAP); + } + if (isvalue(vc_MonIntfList.ic)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.ic); + } + + if (isvalue(vc_MonIntfList.mwPI)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwPI); + } + if (isvalue(vc_MonIntfList.mwPS)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwPS); + } + if (isvalue(vc_MonIntfList.mwPE)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwPE); + } + if (isvalue(vc_MonIntfList.mwIS)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwIS); + } + if (isvalue(vc_MonIntfList.mwPB)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwPB); + } + if (isvalue(vc_MonIntfList.mwIB)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwIB); + } + if (isvalue(vc_MonIntfList.mwIE)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwIE); + } + + if (isvalue(vc_MonIntfList.isc)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.isc); + } + + + + if (isvalue(vc_MonIntfList.cxIH)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.cxIH); + } + if (isvalue(vc_MonIntfList.cxSH)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.cxSH); + } + if (isvalue(vc_MonIntfList.gx)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.gx); + } + if (isvalue(vc_MonIntfList.rx)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.rx); + } + if (isvalue(vc_MonIntfList.s6a)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.s6a); + } + if (isvalue(vc_MonIntfList.s9)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.s9); + } + if (isvalue(vc_MonIntfList.sh)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.sh); + } + } + }//end group ConfigurationFunctions + group CheckFunctions{ + + /** + * @desc Check monitor components based on interfaces names + * @param + * @return true - Monitorinteface available/active + * false - Monitorinteface not exists or not available/active + */ + function f_checkVxLteRequiredMonitorInterface(InterfaceNamesList p_interfaces) runs on ImsTestCoordinator return boolean{ + var integer v_len:=lengthof(p_interfaces); + var integer i:=0; + var boolean v_check := false; + + if (v_len>0){ + for(i:=0;i + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Any additions to the templates shall follow the design rules + * and always modify base templates only; + * Existing templates shall not be changed or removed - + * change requests shall be made to http://t-ort.etsi.org + */ +module LibMsrp_Templates { + + // LibMsrp + import from LibMsrp_TypesAndValues all; + + /** + * @desc Declaration of constants used by templates + */ + group constants { + + group codes { + + /** + * @desc 200 status OK + * @see RFC 4975 - Clause 10.1 + */ + const StatusCode c_OKCode := 200; + + /** + * @desc 400 status Bad request + * @see RFC 4975 - Clause 10.2 + */ + const StatusCode c_BadRequestCode := 400; + + /** + * @desc 403 status Forbidden + * @see RFC 4975 - Clause 10.3 + */ + const StatusCode c_ForbiddenCode := 403; + + /** + * @desc 408 status Request Time-out + * @see RFC 4975 - Clause 10.4 + */ + const StatusCode c_RequestTimeoutCode := 408; + + /** + * @desc 413 status Request Entity Too Large + * @see RFC 4975 - Clause 10.5 + */ + const StatusCode c_RequestEntityTooLargeCode := 413; + + /** + * @desc 415 status Unsupported Media Type + * @see RFC 4975 - Clause 10.6 + */ + const StatusCode c_UnsupportedMediaTypeCode := 415; + + /** + * @desc 423 status Locked + * @see RFC 4975 - Clause 10.7 + */ + const StatusCode c_LockedCode := 423; + + /** + * @desc 481 status Call/Transaction Does Not Exist + * @see RFC 4975 - Clause 10.8 + */ + const StatusCode c_CallTransactionDoesNotExistCode := 481; + + /** + * @desc 501 status Not Implemented + * @see RFC 4975 - Clause 10.9 + */ + const StatusCode c_NotImplementedCode := 501; + + /** + * @desc 506 status Variant also negotiates + * @see RFC 4975 - Clause 10.10 + */ + const StatusCode c_VariantNegotiatesCode := 506; + + } // End of group codes + + group comments { + + /** + * @desc Comment for 200 status + * @see RFC 4975 - Clause 10.1 + */ + const charstring c_OKComment := "OK"; + + /** + * @desc Comment for 400 Bad request + * @see RFC 4975 - Clause 10.2 + */ + const charstring c_BadRequestComment := "Bad request"; + + /** + * @desc Comment for 403 Forbidden + * @see RFC 4975 - Clause 10.3 + */ + const charstring c_ForbiddenComment := "Forbidden"; + + /** + * @desc Comment for 408 Request Time-out + * @see RFC 4975 - Clause 10.4 + */ + const charstring c_RequestTimeoutComment := "Request Time-out"; + + /** + * @desc 413 status Request Entity Too Large + * @see RFC 4975 - Clause 10.5 + */ + const charstring c_RequestEntityTooLargeComment := "Request Entity Too Large"; + + /** + * @desc 415 status Unsupported Media Type + * @see RFC 4975 - Clause 10.6 + */ + const charstring c_UnsupportedMediaTypeComment := "Unsupported Media Type"; + + /** + * @desc 423 status Locked + * @see RFC 4975 - Clause 10.7 + */ + const charstring c_LockedComment := "Locked"; + + /** + * @desc 481 status Call/Transaction Does Not Exist + * @see RFC 4975 - Clause 10.8 + */ + const charstring c_CallTransactionDoesNotExistComment := "Call/Transaction Does Not Exist"; + + /** + * @desc 501 status Not Implemented + * @see RFC 4975 - Clause 10.9 + */ + const charstring c_NotImplementedComment := "Not Implemented"; + + /** + * @desc 506 status Variant also negotiates + * @see RFC 4975 - Clause 10.10 + */ + const charstring c_VariantNegotiatesComment := "Variant also negotiates"; + + } // End of group comments + + } // End of group constants + + /** + * @desc Start and End line descriptions + */ + group delimiterLines { + + /** + * @desc Generic receive template for SEND start request line + */ + template MsrpRequestLine mw_RequestLine_SEND_any := { + tagMsrp := e_MSRP, + transactionID := ?, + method := SEND_E + } // End of template mw_RequestLine_SEND_any + + template MsrpRequestLine mw_RequestLine_REPORT_any := { + tagMsrp := e_MSRP, + transactionID := ?, + method := REPORT_E + } // End of template mw_RequestLine_SEND_any + + /** + * @desc Generic receive template for RECEIVE start response line + */ + template MsrpResponseLine mw_ResponseLine_any := { + tagMsrp := e_MSRP, + transactionID := ?, + statusCode := ?, + comment := * + } // End of template mw_ResponseLine_any + + template MsrpResponseLine mw_ResponseLine_success + modifies mw_ResponseLine_any := { + statusCode := c_OKCode, + comment := c_OKComment + } // End of template mw_ResponseLine_success + + /** + * @desc Receive template for SEND/RECEIVE end line, assuming that message are small enought to prevent chunk + */ + template EndLine mw_EndLine_noMore := { + transactionID := ?, + continuationFlag := e_endMessage // No chunk + } // End of template mw_EndLine_noMore + + } // End of group delimiterLines + + /** + * @see RFC 4975 - Clause 5.2. MSRP Addressing + */ + group msrpAddressing { + + /** + * @desc Dummy send template for MsrpURI used by ToPath + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
msrp://biloxi.example.com:12763/kjhd37s2s20w2a;tcp
+ */ + template (value) MsrpURI m_msrpURIs_ToPath_Dummy := { + scheme := { + scheme := e_SCHEME + }, + authority := { + userinfo := omit, + host := "biloxi.example.com", + portNumber := 12763 + }, + sessionID := "kjhd37s2s20w2a", + transport := "tcp", + uriParams := omit + } // End of template m_msrpURIs_ToPath_Dummy + + /** + * @desc Dummy send template for MsrpURI used by FromPath + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
msrp://atlanta.example.com:7654/jshA7weztas;tcp
+ */ + template (value) MsrpURI m_msrpURIs_FromPath_Dummy := { + scheme := { + scheme := e_SCHEME + }, + authority := { + userinfo := omit, + host := "atlanta.example.com", + portNumber := 7654 + }, + sessionID := "jshA7weztas", + transport := "tcp", + uriParams := omit + } // End of template m_msrpURIs_FromPath_Dummy + + /** + * @desc Dummy send template for ToPath + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
msrp://atlanta.example.com:7654/jshA7weztas;tcp
+ */ + template (value) ToPath m_msrpToPath_Dummy := { + headerName := TO_PATH_E, + msrpURIs := { + m_msrpURIs_ToPath_Dummy + } + } // End of template m_msrpToPath_Dummy + + /** + * @desc Dummy send template for FromPath + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
msrp://atlanta.example.com:7654/jshA7weztas;tcp
+ */ + template (value) FromPath m_msrpFromPath_Dummy := { + headerName := FROM_PATH_E, + msrpURIs := { + m_msrpURIs_FromPath_Dummy + } + } // End of template m_msrpFromPath_Dummy + + template ToPath mw_toPath(in template (present) MsrpURI p_path) := { + headerName := TO_PATH_E, + msrpURIs := { + p_path + } + } // End of template mw_toPath + + template FromPath mw_fromPath(in template (present) MsrpURI p_path) := { + headerName := FROM_PATH_E, + msrpURIs := { + p_path + } + } // End of template mw_fromPath + + } // End of group msrpAddressing + + group msrpHeaders { + + /** + * @desc Dummy send template for MessageID + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
Message-ID: 87652491
+ */ + template (value) MessageID m_msrpMessageID_Dummy := { + headerName := MESSAGE_ID_E, + messageId := "87652491" + + } // End of template m_msrpMessageID_Dummy + + /** + * @desc Dummy send template for ByteRange + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
Byte-Range: 1-25/25
+ */ + template (value) ByteRange m_msrpByteRange_Dummy := { + headerName := BYTE_RANGE_E, + startValue := 1, + endValue := { intValue := 25 }, + totalValue := { intValue := 25 } + } // End of template m_msrpByteRange_Dummy + + template Headers mw_Headers_any := { + toPath := ?, + fromPath := ?, + headers := * + } // End of template mw_Headers_any + + template Headers mw_Headers_toPath_FromPath( + in template ToPath p_toPath, + in template FromPath p_fromPath + ) modifies mw_Headers_any := { + toPath := p_toPath, + fromPath := p_fromPath + } // End of template mw_Headers_toPath_FromPath + + } // End of group msrpHeaders + + group msrpContent { + + /** + * @desc Dummy send template for ContentStuff + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
+         * Content-Type: text/plain
+         * 
+         * 
+         * Hey Bob, are you there?
+         * 
+ */ + template (value) ContentStuff m_msrpContentStuff_Dummy := { + mimeHeaders := omit, + contentType := { + headerName := CONTENT_TYPE_E, + mediaType := { + mediaType := "text", + subType := "plain", + genParams := omit + } // End of 'mediaType' field + }, // End of 'contentType' field + data := char2oct("Hey Bob, are you there?") + } // End of template m_msrpByteRange_Dummy + + template MediaType mw_mediaType_any := { + mediaType := ?, + subType := ?, + genParams := * + } // End of template mw_mediaType_any + + template MsrpContentType mw_contentType_any := { + headerName := CONTENT_TYPE_E, + mediaType := mw_mediaType_any + } // End of template mw_contentType_any + + template ContentStuff mw_contentStuff_any := { + mimeHeaders := *, + contentType := mw_contentType_any, + data := ? + + } // End of template mw_contentStuff_any + + template MsrpContentType mw_contentType( + in charstring p_mediaType, + in charstring p_subType + ) modifies mw_contentType_any := { + headerName := CONTENT_TYPE_E, + mediaType := { + mediaType := p_mediaType, + subType := p_subType, + genParams := * + } // End of 'mediaType' field + } // End of template mw_contentType + + } // End of group msrpContent + + /** + * Provides types for MSRP request + * @see RFC 4975 - Clause 7.1. Constructing Requests + * @see RFC 4976 - Relay Extensions for the Message Session Relay Protocol (MSRP) + */ + group msrpRequest { + + group msrpAUTH { + + } // End of group msrpSEND + + group msrpSEND { + + /** + * @desc Dummy send template for SEND request + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
+             *     MSRP a786hjs2 SEND
+             *     To-Path: msrp://biloxi.example.com:12763/kjhd37s2s20w2a;tcp
+             *     From-Path: msrp://atlanta.example.com:7654/jshA7weztas;tcp
+             *     Message-ID: 87652491
+             *     Byte-Range: 1-25/25
+             *     Content-Type: text/plain
+             *  
+             *     Hey Bob, are you there?
+             *     -------a786hjs2$
+             *  
+             *     MSRP a786hjs2 200 OK
+             *     To-Path: msrp://atlanta.example.com:7654/jshA7weztas;tcp
+             *     From-Path: msrp://biloxi.example.com:12763/kjhd37s2s20w2a;tcp
+             *     -------a786hjs2$
+             * 
+ */ + template (value) SEND_request m_msrpSend_Dummy := { + startLine := { + tagMsrp := e_MSRP, + transactionID := "a786hjs2", + method := SEND_E + }, // End of 'startLine' field + headers := { + toPath := m_msrpToPath_Dummy, + fromPath := m_msrpFromPath_Dummy, + headers := { + messageID := m_msrpMessageID_Dummy, + successReport := omit, + failureReport := omit, + byteRange := m_msrpByteRange_Dummy, + status := omit, + expires := omit, + minExpires := omit, + maxExpires := omit, + usePath := omit, + wwwAuthenticate := omit, + authorization := omit, + authenticationInfo := omit, + extHeaders := omit + } + }, // End of 'headers' field + contentStuff := m_msrpContentStuff_Dummy, + endLine := { + transactionID := "a786hjs2", + continuationFlag := e_endMessage + } + } // End of template m_msrpSend_Dummy + + /** + * @desc Dummy send template for SEND request + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
+             *      MSRP a786hjs2 REPORT
+             *      To-Path: msrp://alicepc.example.com:7777/iau39soe2843z;tcp
+             *      From-Path: msrp://bob.example.com:8888/9di4eae923wzd;tcp
+             *      Message-ID: 87652491
+             *      Byte-Range: 1-25/25
+             *      Status: 000 200 OK
+             *      ——-a786hjs2$
+             * 
+ */ + template (value) SEND_request m_msrpReport_Dummy + modifies m_msrpSend_Dummy := { + headers := { + toPath := m_msrpToPath_Dummy, + fromPath := m_msrpFromPath_Dummy, + headers := { + messageID := m_msrpMessageID_Dummy, + byteRange := m_msrpByteRange_Dummy + } + } // End of 'headers' field + } // End of template m_msrpSend_Dummy + + /** + * @desc Generic receive template for SEND request + */ + template SEND_request mw_msrpSEND_any := { + startLine := mw_RequestLine_SEND_any, + headers := mw_Headers_any, + contentStuff := mw_contentStuff_any, + endLine := mw_EndLine_noMore + } // End of template mw_msrpSEND_any + + template SEND_request mw_msrpSEND_toPath_fromPath_contentType( + in template (present) ToPath p_toPath, + in template (present) FromPath p_fromPath, + in template (present) MsrpContentType p_contentType + ) modifies mw_msrpSEND_any := { + headers := mw_Headers_toPath_FromPath( + p_toPath, + p_fromPath), + contentStuff := { + contentType := p_contentType + } + } // End of template mw_msrpSEND_toPath_fromPath_contentType + + template SEND_request mw_msrpREPORT_success modifies mw_msrpSEND_any := { + startLine := mw_RequestLine_REPORT_any, + headers := { + headers := { + messageID := *, + successReport := *, + failureReport := *, + byteRange := *, + status := { + headerName := STATUS_E, + namespace := 0, + statusCode := c_OKCode, + comment := c_OKComment + }, // End of 'status' field + expires := *, + minExpires := *, + maxExpires := *, + usePath := *, + wwwAuthenticate := *, + authorization := *, + authenticationInfo := *, + extHeaders := * + } + } // End of 'headers' field + } // End of template mw_msrpREPORT_success + + } // End of group msrpSEND + + } // End of group msrpRequest + + group msrpResponse { + + /** + * @desc Dummy send template for RECEIVE response + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + */ + template (value) RECEIVE_response m_msrpResponse_Dummy := { + startLine := { + tagMsrp := e_MSRP, + transactionID := "a786hjs2", + statusCode := c_OKCode, + comment := c_OKComment + }, // End of 'startLine' field + headers := { + toPath := m_msrpToPath_Dummy, + fromPath := m_msrpFromPath_Dummy, + headers := { + messageID := m_msrpMessageID_Dummy, + successReport := omit, + failureReport := omit, + byteRange := omit, + status := omit, + expires := omit, + minExpires := omit, + maxExpires := omit, + usePath := omit, + wwwAuthenticate := omit, + authorization := omit, + authenticationInfo := omit, + extHeaders := omit + } + }, // End of 'headers' field + endLine := { + transactionID := "a786hjs2", + continuationFlag := e_endMessage + } + } // End of template m_msrpResponse_Dummy + + template RECEIVE_response mw_msrpResponse_any := { + startLine := mw_ResponseLine_any, + headers := mw_Headers_any, + endLine := mw_EndLine_noMore + } // End of template mw_msrpResponse_any + + template RECEIVE_response mw_msrpResponse_success + modifies mw_msrpResponse_any := { + startLine := mw_ResponseLine_success + } // End of template mw_msrpResponse_success + + template RECEIVE_response mw_msrpResponse_toPath_fromPath( + in template (present) ToPath p_toPath, + in template (present) FromPath p_fromPath + ) modifies mw_msrpResponse_success := { + headers := { + toPath := p_toPath, + fromPath := p_fromPath + } // End of 'headers' field + } // End of template mw_msrpResponse_toPath_fromPath + + template RECEIVE_response mw_msrpResponse_toPath_fromPath_with_transferReports( // TODO Check if it it really used + in template (present) ToPath p_toPath, + in template (present) FromPath p_fromPath + ) modifies mw_msrpResponse_toPath_fromPath := { + headers := { + headers := { + messageID := *, + successReport := { + headerName := SUCCESS_REPORT_E, + reportStatus := e_YES + }, + failureReport := { + headerName := FAILURE_REPORT_E, + reportStatus := e_NO + }, + byteRange := *, + status := *, + expires := *, + minExpires := *, + maxExpires := *, + usePath := *, + wwwAuthenticate := *, + authorization := *, + authenticationInfo := *, + extHeaders := * + } // End of 'header' field + } // End of 'headers' field + } // // End of template mw_msrpResponse_toPath_fromPath_with_transferReports + + } // End of group msrpResponse + +} // End of LibMsrp_Templates \ No newline at end of file diff --git a/ttcn/LibMsrp/LibMsrp_TypesAndValues.ttcn b/ttcn/LibMsrp/LibMsrp_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..790a41383cc57058ad73e1e6bfca788704e323d6 --- /dev/null +++ b/ttcn/LibMsrp/LibMsrp_TypesAndValues.ttcn @@ -0,0 +1,626 @@ +/* + * @author STF 435 + * @version $Id:$ + * @desc This module provides the (message) types and constants used by the test component + * for MSRP tests. + */ +module LibMsrp_TypesAndValues { + + group msrpKeywords { + + /** + * @desc Enumerate MSRP keywords + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type enumerated MsrpKeywords { + e_MSRP, // pMSRP = %x4D.53.52.50 ; MSRP in caps + e_SCHEME, // msrp-scheme = "msrp" / ... + e_SCHEMES, //"msrps" + e_YES, // "yes" + e_NO, // "no" + e_PARTIAL, // "partial" + e_WILDCARD // "*" + } // End of type MsrpKeywords + + type enumerated MsrpMethod { + //RFC 4975 + SEND_E, // mSEND = %x53.45.4e.44 ; SEND in caps + REPORT_E, // mREPORT = %x52.45.50.4f.52.54; REPORT in caps + //RFC 4976 + AUTH_E, // mAUTH = %x41.55.54.48 ; AUTH in caps + UNKNOWN_METHOD_E + } + + type enumerated HeaderName { + //RFC 4975 + TO_PATH_E, // "To-Path" + FROM_PATH_E, // "From-Path" + MESSAGE_ID_E, // "Message-ID" + SUCCESS_REPORT_E, //"Success-Report" + FAILURE_REPORT_E, //"Failure-Report" + BYTE_RANGE_E, // "Byte-Range" + STATUS_E, // "Status" + //MIME headers + CONTENT_ID_E, // "Content-ID" + CONTENT_DESCRIPTION_E, // "Content-Description" + CONTENT_DISPOSITION_E, // "Content-Disposition" + MIME_EXT_FIELD_E, // RFC2045 Section 9. "Content-*" + CONTENT_TYPE_E, // "Content-Type" + //RFC 4976 + EXPIRES_E, //"Expires" + MIN_EXPIRES_E, // "Min-Expires" + MAX_EXPIRES_E, // "Max-Expires" + USE_PATH_E, // "Use-Path" + WWW_AUTHENTICATE_E, // "WWW-Authenticate" + AUTHORIZATION_E, // "Authorization" + AUTHENTICATION_INFO_E, // "Authentication-Info" + EXT_HEADER_E //any other header + } + + } // End of group tokens + + /** + * @desc Start and End line descriptions + */ + group delimiterLines { + + type enumerated ContinuationFlag { + e_endMessage, // "$" + e_continueMessage, // "+" + e_cancelMessage // "#" + } + + /** + * @desc Desciption of the start line + * @see RFC 4975 - Clause 7.1. Constructing Requests + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MsrpRequestLine { + MsrpKeywords tagMsrp (e_MSRP), // MSRP keyword + TransactionID transactionID, // The transaction identifier created by sender + MsrpMethod method // The method name + } // End of type RequestLine + + /** + * @desc Desciption of the Response line + * @see RFC 4975 - Clause 7.1. Constructing Requests + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MsrpResponseLine { + MsrpKeywords tagMsrp (e_MSRP), // MSRP keyword + TransactionID transactionID, // The transaction identifier created by sender + StatusCode statusCode, // The status code, e.g. 200 + charstring comment optional // E.g. OK + } // End of type ResponseLine + + /** + * @desc Desciption of the end line + * @see RFC 4975 - Clause 5.1. MSRP Framing and Message Chunking + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record EndLine { // "-------" transact-id continuation-flag CRLF + TransactionID transactionID, // The transaction identifier created by sender + ContinuationFlag continuationFlag // "+"/"$"/"#" + } // End of type RequestLine + + } // End of group delimiterLines + + group msrpHeaders { + + group RFC4975HeaderTypes { + /** + * @desc Used to correlate status reports with the original message + * @member headerName Message-ID identifier + * @member messageId Value of the Message-ID + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MessageID { + HeaderName headerName (MESSAGE_ID_E), + Ident messageId + } // End of type MessageID + + type record SuccessReport { + HeaderName headerName (SUCCESS_REPORT_E), + MsrpKeywords reportStatus + } + + type record FailureReport { + HeaderName headerName (FAILURE_REPORT_E), + MsrpKeywords reportStatus + } + + /** + * @desc TODO + * @member byteRangeID Report status identifier + * @member startValue TODO + * @member endValue TODO + * @member totalValue TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record ByteRange { + HeaderName headerName (BYTE_RANGE_E), + integer startValue, // [1..infinity) + ByteRangeValue endValue, // [0..infinity) TODO can take also wilcard value: "*" + ByteRangeValue totalValue // [0..infinity) TODO can take also wilcard value: "*" + } // End of type ByteRange + + type union ByteRangeValue { + integer intValue, // [0..infinity) + MsrpKeywords wildcard // "*" + } + + /** + * @desc TODO + * @member statusID TODO + * @member namespace TODO + * @member statusCode TODO + * @member comment TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MsrpStatus { + HeaderName headerName (STATUS_E), + Namespace namespace, + StatusCode statusCode, + charstring comment optional + } // End of type Status + } + + group RFC4976HeaderTypes { + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MsrpExpires { + HeaderName headerName (STATUS_E), + integer intValue + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MsrpMinExpires { + HeaderName headerName (MIN_EXPIRES_E), + integer intValue + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MaxExpires { + HeaderName headerName (MAX_EXPIRES_E), + integer intValue + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record UsePath { + HeaderName headerName (USE_PATH_E), + MsrpURIs msrpURIs + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MsrpWWWAuthenticate { + HeaderName headerName (WWW_AUTHENTICATE_E), + Digest digest + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record Digest { + charstring realm optional, // quoted-string + charstring nonce optional, // quoted-string + charstring opaque optional, // quoted-string + charstring stale optional, // "true" / "false" (no quates) + charstring algorithm optional, // "MD5" / token (no quates) + Qop_ValueList qopOptions optional, // quoted-string + AuthParamList authParams optional + } + + type charstring Qop_Value; // "auth" / token + + type set of Qop_Value Qop_ValueList; + + type record AuthParam { + charstring pvalue, // token + charstring pname // token / quoted-string + } + + type set of AuthParam AuthParamList; + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MsrpAuthorization { + HeaderName headerName (AUTHORIZATION_E), + DigestResponse digestResponse + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record DigestResponse { + charstring username optional, // quoted-string + charstring realm optional, // quoted-string + charstring nonce optional, // quoted-string + charstring response optional, // DQUOTE 32LHEX DQUOTE; LHEX = DIGIT / %x61-66 ;lowercase a-f + charstring algorithm optional, // "MD5" / token + charstring cnonce optional, // quoted-string + charstring opaque optional, // quoted-string + Qop_Value message_qop optional, // no quates + charstring nonce_count optional, // no quates + AuthParamList authParams optional + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MsrpAuthenticationInfo { + HeaderName headerName (AUTHENTICATION_INFO_E), + AInfo ainfo + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type set AInfo { // order is not important + charstring nextnonce optional, + Qop_Value message_qop optional, // no quates + charstring response_auth optional, + charstring cnonce optional, + charstring nonce_count optional // no quates + } + } + + /** + * @desc TODO + * @member hname TODO + * @member hval TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record ExtHeader { + charstring hname, + charstring hval + } // End of type ExtHeader + + /** + * @desc Description of Header structure + * @member messageID + * @member reportStatus + * @member byteRange + * @member status + * @member extheader + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record HeaderList { + //RFC 4975 + MessageID messageID optional, + SuccessReport successReport optional, + FailureReport failureReport optional, + ByteRange byteRange optional, + MsrpStatus status optional, + //RFC 4976 + MsrpExpires expires optional, + MsrpMinExpires minExpires optional, + MaxExpires maxExpires optional, + UsePath usePath optional, + MsrpWWWAuthenticate wwwAuthenticate optional, + MsrpAuthorization authorization optional, + MsrpAuthenticationInfo authenticationInfo optional, + ExtHeaderList extHeaders optional + } // End of type Header + + type set of ExtHeader ExtHeaderList; + + type record Headers { + ToPath toPath, + FromPath fromPath, + HeaderList headers optional // for AUTH, a request with only To-Path and From-Path is valid + } // End of type Headers + + + + + /** + * @desc Description of a transaction ID structure + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type charstring TransactionID; + + /** + * @desc Description of an identifier structure + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type charstring Ident length (3..31); + + /** + * @desc Description of a Token structure + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type charstring Token; //token is compared case-insensitive + + /** + * @desc Description of a Namespace structure + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type integer Namespace;// length (3); + + /** + * @desc Description of a Status structure, e.g. 200 + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type integer StatusCode; // FIXME Use range instead? length (3); + + + + } // End of group msrpHeaders + + /** + * @see RFC 4975 - Clause 5.2. MSRP Addressing + */ + group msrpAddressing { + + /** + * @desc Description of URI-parameter item + * @member paramID Identifier of the parameter + * @member paramValue Value of the parameter + */ + type record MsrpGenericParam { // URI-parameter = token ["=" token] + Token paramID, + Token paramValue optional + } // End of type GenericParam + + /** + * @desc Description of URI-parameter list, separated by a semicolon + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type set of MsrpGenericParam URIParams; + + /** + * @desc Authorized MSRP scheme + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type union MsrpSchemes { + MsrpKeywords scheme (e_SCHEME), + MsrpKeywords secureScheme (e_SCHEMES) + } // End of type MsrpSchemes + + /** + * @desc identifies a participant in a particular MSRP session + * @see RFC 4975 - Clause 6. MSRP URIs + * @see RFC 4975 - Clause 9. Formal Syntax + * @see RFC 3986 - Clause 3.2. Authority + */ + type record Authority { // authority = [ userinfo "@" ] host [ ":" port ] + charstring userinfo optional, + charstring host, // if host is IPv6 the "[" and "]" should be removed when decoding and added when encoding + integer portNumber optional + } + + /** + * @desc Identifies a particular session of the participant + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type charstring SessionID; + + /** + * @desc Desciption of a MSRP-URI + * @member toPath The path of URIs to the destination + * @member fromPath The path of URIs of the sender + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MsrpURI { // scheme://domain:port/path?query_string#fragment_id + MsrpSchemes scheme, + Authority authority, + SessionID sessionID optional, + charstring transport, // transport = "tcp" / 1*ALPHANUM + URIParams uriParams optional // List of URI-parameter + } // End of type Values + + type set of MsrpURI MsrpURIs;// length (1..infinity); + + /** + * @desc The path of URIs to the destination + * @member pathID The To-Path identifier + * @member msrpURIs The URIs to the destination + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record ToPath { + HeaderName headerName (TO_PATH_E), + MsrpURIs msrpURIs + } // End of type Path + + /** + * @desc The path of URIs of the sender + * @member pathID The To-Path identifier + * @member msrpURIs The URIs of the sender + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record FromPath { + HeaderName headerName (FROM_PATH_E), + MsrpURIs msrpURIs + } // End of type Path + + } // End of group msrpAddressing + + group msrpContent { + + group msrpMimeTypes { // TODO To be refined + + /** + * @see RFC 2045 - Clause 7. Content-ID Header Field + */ + type record ContentID { + HeaderName headerName (CONTENT_ID_E), + charstring msgId + } + + /** + * @see RFC 2045 - Clause 8. Content-Description Header Field + */ + type record ContentDescription { + HeaderName headerName (CONTENT_DESCRIPTION_E), + charstring text + } + + /** + * @see RFC 2183 - Clause 2. The Content-Disposition Header Field + */ + type record MsrpContentDisposition { + HeaderName headerName (CONTENT_DISPOSITION_E), + charstring dispositionType, + GenParams dispositionParams optional + } + + /** + * @see RFC 2045 - Clause 9. Additional MIME Header Fields + */ + type record MimeExtensionField { + HeaderName headerName (MIME_EXT_FIELD_E), + charstring hname, + charstring hval + } + + type set of MimeExtensionField MimeExtensionFieldList; + + } // End of group msrpMimeTypes + + /** + * @desc TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MimeHeaders { + ContentID contentID optional, + ContentDescription contentDescription optional, + MsrpContentDisposition contentDisposition optional, + MimeExtensionFieldList mimeExtensionFields optional + } + + /** + * @desc TODO + * @member pname TODO + * @member pval TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record GenParam { + Token pname, + charstring pval optional // TODO To be refined + } // End of type GenParam + + /** + * @desc TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type set of GenParam GenParams; + + /** + * @desc TODO + * @member mediaType TODO + * @member subType TODO + * @member genParams TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MediaType { + Token mediaType, + Token subType, + GenParams genParams optional + } // End of type MediaType + + /** + * @desc TODO + * @member contentTypeID + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MsrpContentType { + HeaderName headerName (CONTENT_TYPE_E), + MediaType mediaType + } // End of type ContentType + + /** + * @desc TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type octetstring Data; + + /** + * @desc TODO + * @member TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record ContentStuff { + MimeHeaders mimeHeaders optional, + MsrpContentType contentType, + Data data + + } // End of type ContentStuff + + } // End of group msrpContent + + group msrpAuth { + + } // End of group msrpAuth + + /** + * Provides types for MSRP request + * @see RFC 4975 - Clause 7.1. Constructing Requests + * @see RFC 4976 - Relay Extensions for the Message Session Relay Protocol (MSRP) + */ + group msrpRequests { + + /** + * @desc TODO + * @see RFC 4975 - Clause 7.1.1. Sending SEND Requests + */ + type record SEND_request { + MsrpRequestLine startLine, + Headers headers, + ContentStuff contentStuff optional, + EndLine endLine + } // End of type SEND_request + + /** + * @desc TODO + * @see RFC 4975 - Clause 7.1.2. Sending REPORT Requests + */ + type record REPORT_request { + MsrpRequestLine startLine, + Headers headers, + ContentStuff contentStuff optional, + EndLine endLine + } // End of type REPORT_request + + /** + * @desc TODO + * @see RFC 4976 - Clause 5.1. Connecting to Relays Acting on Your Behalf + */ + type record AUTH_request { + MsrpRequestLine startLine, + Headers headers, + ContentStuff contentStuff optional, // TODO not sure is body is allowed or not + EndLine endLine + } // End of type AUTH_request + + + } // End of group msrpRequests + + group msrpResponses { + + /** + * @desc + * @see RFC 4975 - Clause 7.1.2. Sending REPORT Requests + */ + type record RECEIVE_response { + MsrpResponseLine startLine, + Headers headers, + EndLine endLine + } // End of type RECEIVE_response + + } // End of group msrpResponses + +} // End of LibMsrp_TypesAndValues +with { + encode "MSRPCodec" +} \ No newline at end of file diff --git a/ttcn/LibMsrp/module.mk b/ttcn/LibMsrp/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..d0428b335e44fe24ae55294fd715b5a5785b6352 --- /dev/null +++ b/ttcn/LibMsrp/module.mk @@ -0,0 +1,7 @@ +sources := \ + LibMsrp_Functions.ttcn \ + LibMsrp_PIXITS.ttcn \ + LibMsrp_Templates.ttcn \ + LibMsrp_TypesAndValues.ttcn \ + ../patch_lib_msrp_titan/ttcn/LibMsrp_EncDecDeclarations.ttcn \ + diff --git a/ttcn/LibNGAP/lib/LibNGAP_EncdecDeclarations.ttcn b/ttcn/LibNGAP/lib/LibNGAP_EncdecDeclarations.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6a044f39272fcea61c7d10a3cfb23863dbcd59b0 --- /dev/null +++ b/ttcn/LibNGAP/lib/LibNGAP_EncdecDeclarations.ttcn @@ -0,0 +1,120 @@ +/** +* @author ETSI / TTF033 +* @version $URL$ +* $Id$ +* @desc This module provides external function declarations. +* @copyright ETSI Copyright Notification +* No part may be reproduced except as authorized by written permission. +* The copyright and the foregoing restriction extend to reproduction in all media. +* All rights reserved. +* @see ETSI TS +*/ +module LibNGAP_EncdecDeclarations { + + import from LibNGAP_TypesAndValues all; + import from NGAP_PDU_Descriptions language "ASN.1:2002" all; + import from NGAP_IEs language "ASN.1:2002" all; + + external function fx_enc_NGAP_PDU (NGAP_PDU p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + external function fx_dec_NGAP_PDU (inout bitstring pdu, out NGAP_PDU p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + + //TODO: if no additional type in TypesAndvalues remove + //external function fx_enc_ProtocolIE (ProtocolIE p) return bitstring + // with {extension "prototype(convert) encode(LibNGAP_codec)"} + //external function fx_dec_ProtocolIE (inout bitstring pdu, out ProtocolIE p) return integer + // with {extension "prototype(sliding) decode(LibNGAP_codec)"} + + /*external function fx_enc_NGAP_IEs (NGAP_IEs p) return bitstring + with {extension "prototype(convert) encode(LibNGAP_codec)"} + external function fx_dec_NGAP_IEs (inout bitstring pdu, out NGAP_IEs p) return integer + with {extension "prototype(sliding) decode(LibNGAP_codec)"}*/ + //external function dec_PDUSessionResourceSetupResponseTransfer(inout bitstring pdu, out NGAP_IEs.PDUSessionResourceSetupResponseTransfer p) return integer + //with {extension "prototype(sliding) decode(LibNGAP_codec)"} + external function fx_dec_PDUSessionResourceSetupResponseTransfer(inout bitstring pdu, out NGAP_IEs.PDUSessionResourceSetupResponseTransfer p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + //with {extension "prototype(sliding) decode(LibNGAP_codec)"} + + external function fx_enc_PDUSessionResourceSetupRequestTransfer(NGAP_IEs.PDUSessionResourceSetupRequestTransfer p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + + + external function fx_dec_PDUSessionResourceSetupUnsuccessfulTransfer(inout bitstring pdu, out NGAP_IEs.PDUSessionResourceSetupUnsuccessfulTransfer p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + + external function fx_enc_PDUSessionResourceSetupUnsuccessfulTransfer(NGAP_IEs.PDUSessionResourceSetupUnsuccessfulTransfer p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + + + external function fx_dec_PDUSessionResourceReleaseCommandTransfer(inout bitstring pdu, out NGAP_IEs.PDUSessionResourceReleaseCommandTransfer p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + //with {extension "prototype(sliding) decode(LibNGAP_codec)"} + + external function fx_enc_PDUSessionResourceReleaseCommandTransfer(NGAP_IEs.PDUSessionResourceReleaseCommandTransfer p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + + + external function fx_dec_PDUSessionResourceReleaseResponseTransfer(inout bitstring pdu, out NGAP_IEs.PDUSessionResourceReleaseResponseTransfer p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + //with {extension "prototype(sliding) decode(LibNGAP_codec)"} + + external function fx_enc_PDUSessionResourceReleaseResponseTransfer(NGAP_IEs.PDUSessionResourceReleaseResponseTransfer p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + + + external function fx_dec_PDUSessionResourceModifyConfirmTransfer(inout bitstring pdu, out NGAP_IEs.PDUSessionResourceModifyConfirmTransfer p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + //with {extension "prototype(sliding) decode(LibNGAP_codec)"} + + external function fx_enc_PDUSessionResourceModifyConfirmTransfer(NGAP_IEs.PDUSessionResourceModifyConfirmTransfer p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + + + external function fx_dec_PDUSessionResourceModifyIndicationTransfer(inout bitstring pdu, out NGAP_IEs.PDUSessionResourceModifyIndicationTransfer p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + //with {extension "prototype(sliding) decode(LibNGAP_codec)"} + + external function fx_enc_PDUSessionResourceModifyIndicationTransfer(NGAP_IEs.PDUSessionResourceModifyIndicationTransfer p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + + + external function fx_dec_PDUSessionResourceModifyIndicationUnsuccessfulTransfer(inout bitstring pdu, out NGAP_IEs.PDUSessionResourceModifyIndicationUnsuccessfulTransfer p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + //with {extension "prototype(sliding) decode(LibNGAP_codec)"} + + external function fx_enc_PDUSessionResourceModifyIndicationUnsuccessfulTransfer(NGAP_IEs.PDUSessionResourceModifyIndicationUnsuccessfulTransfer p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + + + external function fx_dec_PDUSessionResourceModifyResponseTransfer(inout bitstring pdu, out NGAP_IEs.PDUSessionResourceModifyResponseTransfer p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + //with {extension "prototype(sliding) decode(LibNGAP_codec)"} + + external function fx_enc_PDUSessionResourceModifyResponseTransfer(NGAP_IEs.PDUSessionResourceModifyResponseTransfer p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + + + external function fx_dec_PDUSessionResourceModifyUnsuccessfulTransfer(inout bitstring pdu, out NGAP_IEs.PDUSessionResourceModifyUnsuccessfulTransfer p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + //with {extension "prototype(sliding) decode(LibNGAP_codec)"} + + external function fx_enc_PDUSessionResourceModifyUnsuccessfulTransfer(NGAP_IEs.PDUSessionResourceModifyUnsuccessfulTransfer p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + + + external function fx_dec_UEContextSuspendRequestTransfer(inout bitstring pdu, out NGAP_IEs.UEContextSuspendRequestTransfer p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + //with {extension "prototype(sliding) decode(LibNGAP_codec)"} + + external function fx_enc_UEContextSuspendRequestTransfer(NGAP_IEs.UEContextSuspendRequestTransfer p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + + external function fx_dec_PDUSessionResourceModifyRequestTransfer(inout bitstring pdu, out NGAP_IEs.PDUSessionResourceModifyRequestTransfer p) return integer + with {extension "prototype(sliding) decode(PER:ALIGNED)"} + //with {extension "prototype(sliding) decode(LibNGAP_codec)"} + + external function fx_enc_PDUSessionResourceModifyRequestTransfer(NGAP_IEs.PDUSessionResourceModifyRequestTransfer p) return bitstring + with {extension "prototype(convert) encode(PER:ALIGNED)"} + +} // End of module LibNGAP_EncdecDeclarations \ No newline at end of file diff --git a/ttcn/LibNGAP/lib/LibNGAP_Pixits.ttcn b/ttcn/LibNGAP/lib/LibNGAP_Pixits.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..0b8285254948bd6423f5d515cbaee4b6da52ab5e --- /dev/null +++ b/ttcn/LibNGAP/lib/LibNGAP_Pixits.ttcn @@ -0,0 +1,659 @@ + /** +* @author ETSI / TTF033 +* @version $URL$ +* $Id$ +* @desc This module provides PIXITS for NGAP protocol. +* @copyright ETSI Copyright Notification +* No part may be reproduced except as authorized by written permission. +* The copyright and the foregoing restriction extend to reproduction in all media. +* All rights reserved. +* @see ETSI TS +*/ +module LibNGAP_Pixits { + + // LibCommon + import from LibCommon_DataStrings all; + + // LibNGAP + import from NGAP_IEs language "ASN.1:1997" all; + import from NGAP_CommonDataTypes language "ASN.1:1997" all; + + /** + * @desc Define the network transportation layer + */ + type enumerated TransportProtocol { + UDP_E, + TCP_E, + SCTP_E + } + + /** + * @desc Network transportation layer setting + */ + group LibNGAP_Pixit_Parameters { + + /** + * @desc boolean (This is an operator option, not a protocol option), True, if IPv6 addresses are used + */ + modulepar boolean PX_IPv6 := false; + + /** + * @desc enumerated (This is an operator option, not a protocol option) + */ + modulepar TransportProtocol PX_NGAP_TRANSPORT_PROTOCOL := SCTP_E; + + } // End of group LibNGAP_Pixit_Parameters + + /** + * @desc Network transportation layer timers + */ + group LibNGAP_Timers { + + /** + * @desc float for TWait default value for waiting an operator action + */ + modulepar float PX_NGAP_TWAIT:= 30.0; + + modulepar integer PX_TIMER_T3560 := 500; // Default value is 500ms + // FSCOM: TTCN-3 timer are in seconds (ETSI ES 201 873-1 V4.16.1 (2024-10) Clause 12 Declaring timers) + + } // End of group NGAP_Timers + + /** + * @desc Unique identifier assigned by the AMF to the UE for NGAP signaling purposes + * @see EETSI TS 138 413 V16.12.0 (2023-05)TSI + */ + modulepar AMF_UE_NGAP_ID PX_AMF_UE_NGAP_ID := 102; + + /** + * @desc This IE carries an identifier assigned by the RAN to the UE for the purposes of NGAP signaling + * @see ETSI TS 138 413 V16.12.0 (2023-05) + */ + modulepar RAN_UE_NGAP_ID PX_RAN_UE_NGAP_ID := 1; + + /** + * @desc The identifier for the PDU session + * @see ETSI TS 138 413 V16.12.0 (2023-05) + */ + modulepar PDUSessionID PX_PDU_SESSION_ID := 0; + + /** + * @desc Single Network Slice Selection Assistance Information + * @see ETSI TS 138 413 V16.12.0 (2023-05) + */ + modulepar SST PX_SST := '01'O; + + /** + * @desc Single Network Slice Selection Assistance Information + * @see ETSI TS 138 413 V16.12.0 (2023-05) + */ + modulepar Oct3 PX_SD := '000000'O; + + /** + * @desc + * @see ETSI TS 138 413 V16.12.0 (2023-05) + */ + modulepar TransportLayerAddress PX_TRANSPORT_LAYER_ADDRESS := oct2bit('0a0000a2'O); // 10.0.0.162 + + /** + * @desc + * @see ETSI TS 138 413 V16.12.0 (2023-05) + */ + modulepar TransportLayerAddress PX_SOURCE_TRANSPORT_LAYER_ADDRESS := oct2bit('0a0000a2'O); // 10.0.0.162 + + /** + * @desc + * @see ETSI TS 138 413 V16.12.0 (2023-05) + */ + modulepar TransportLayerAddress PX_MC_TRANSPORT_LAYER_ADDRESS := oct2bit('0a0000a2'O); // 10.0.0.162 + + /** + * @desc GPRS Tunneling Protocol - Tunnel Endpoint Identifier + * @see ETSI TS 138 413 V16.12.0 (2023-05) + */ + modulepar GTP_TEID PX_GTP_TEID := '4f485cc3'O; + + /** + * @desc To identify QoS flow + * @see ETSI TS 138 413 V16.12.0 (2023-05) + */ + modulepar QosFlowIdentifier PX_QOS_FLOW_IDENTIFIER := 1; + + /** + * @desc To Indicate alternative sets of QoS parameters for the QoS flow + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.10 GBR QoS Flow Information + */ + modulepar AlternativeQoSParaSetIndex PX_ALTERNATIVE_QOS_PARA_SET_INDEX := 1; + + /** + * @desc To indicate the QoS parameters set which can currently be fulfilled + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.153 Alternative QoS Parameters Set Notify Index + */ + modulepar AlternativeQoSParaSetNotifyIndex PX_ALTERNATIVE_QOS_PARA_SET_NOTIFY_INDEX := 0; + + /** + * @desc The Mobile Country Code (MCC) and Mobile Network Code (MNC) + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.3.5 PLMN Identity + */ + modulepar PLMNIdentity PX_PLMN_IDENTITY := '00f110'O; // MCC: 1, MNC: 01 + + /** + * @desc The leftmost bits of the E-UTRA Cell Identity IE correspond to the ng-eNB ID + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.9 E-UTRA CGI + */ + modulepar EUTRACellIdentity PX_EUTRA_CELL_IDENTITY := hex2bit('1234501'H); + + modulepar NRCellIdentity PX_NR_CELL_IDENTITY := hex2bit('123450123'H); + /** + * @desc + * @see ETSI TS 138 413 V16.12.0 (2023-05) + */ + modulepar octetstring PX_PDU_SESSION_RESOURCE_RELEASE_COMMAND_TRANSFER := '1000'O; + + /** + * @desc The expected activity time in seconds + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.94 Expected UE Activity Behaviour + */ + modulepar ExpectedActivityPeriod PX_EXPECTED_ACTIVITY_PERIOD := 10; + + /** + * @desc The expected idle time in seconds + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.94 Expected UE Activity Behaviour + */ + modulepar ExpectedIdlePeriod PX_EXPECTED_IDLE_PERIOD := 10; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_CAUSE_INITIAL_SETUP_FAILURE := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_UE_CONTEXT_RELEASE_COMMAND_CAUSE := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_CAUSE_UE_CONTEXT_MODIFICATION_FAILURE := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_CAUSE_UE_CONTEXT_SUSPEND_FAILURE := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_CAUSE_UE_CONTEXT_RESUME_FAILURE := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_CAUSE_HANDOVER_REQUIRED := resource_optimisation_handover; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_CAUSE_HANDOVER_PREPARATION_FAILURE := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_CAUSE_HANDOVER_REQUEST := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_CAUSE_HANDOVER_FAILURE := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_CAUSE_HANDOVER_CANCEL := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_CAUSE_MULTIPLE_LOCATION_REPORTING := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_NG_SETUP_FAILURE := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_RAN_CONFIGURATION_UPDATE_FAILURE := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseRadioNetwork PX_AMF_CONFIGURATION_UPDATE_FAILURE := unspecified; + + + modulepar CauseTransport PX_xxx_1 := unspecified; + + modulepar CauseProtocol PX_xxx_2 := unspecified; + + /** + * @desc To indicate the reason for a particular event for the NGAP protocol + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.2 Cause + */ + modulepar CauseNas PX_CAUSE_NAS_NON_DELIVERY_INDICATION := unspecified; + + modulepar CauseMisc PX_xxx_4 := unspecified; + + + /** + * @desc To indicate the RRC state of the UE + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.92 RRC State + */ + modulepar RRCState PX_RRC_STATE := inactive; + + /** + * @desc To identify the AMF within the global 5G network + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause + */ + modulepar AMFPointer PX_AMF_POINTER:= '000001'B; + + /** + * @desc To identify the AMF within the global 5G network + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause + */ + modulepar AMFRegionID PX_AMF_REGION_ID:= '10000000'B; + + /** + * @desc To identify the AMF within the global 5G network + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause + */ + modulepar AMFSetID PX_AMF_SET_ID:= '0000000100'B; + + /** + * @desc + * @see ETSI TS 133 401 + */ + modulepar UL_NAS_MAC PX_UL_NAS_MAC := '0000000000000000'B; + + /** + * @desc + * @see ETSI TS 133 401 + */ + modulepar UL_NAS_Count PX_UL_NAS_COUNT := '00000'B; + + /** + * @desc + * @see ETSI TS 133 401 + */ + modulepar DL_NAS_MAC PX_DL_NAS_MAC := '0000000000000000'B; + + /** + * @desc To indicate the reason for RRC Connection Establishment/Resume + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.111 RRC Establishment Cause + */ + modulepar RRCEstablishmentCause PX_RRC_ESTABLISHMENT_CAUSE := notAvailable; + + /** + * @desc To indicate the reason for RRC Connection Establishment/Resume + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.111 RRC Establishment Cause + */ + modulepar RRCEstablishmentCause PX_RRC_RESUME_CAUSE := notAvailable; + + /** + * @desc To indicate which kind of handover was triggered in the source side + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.22 Handover Type + */ + modulepar HandoverType PX_HANDOVER_TYPE := intra5gs; + + /** + * @desc To indicates the UE Aggregate Maximum Bit Rate as specified in TS 23.501 in the downlink direction (bit/s) + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.58 UE Aggregate Maximum Bit Rate + */ + modulepar BitRate PX_UE_AGGREGATE_MAXIMUM_BIT_RATE_DL := 100000000; + + /** + * @desc To indicates the UE Aggregate Maximum Bit Rate as specified in TS 23.501 in the uplink direction (bit/s) + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.58 UE Aggregate Maximum Bit Rate + */ + modulepar BitRate PX_UE_AGGREGATE_MAXIMUM_BIT_RATE_UL := 1000000; + + /** + * @desc Each position in the bitmap represents an encryption algorithm + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.86 UE Security Capabilities + */ + modulepar NRencryptionAlgorithms PX_NR_ENCRYPTION_ALGORITHMS; + + /** + * @desc Each position in the bitmap represents an encryption algorithm + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.86 UE Security Capabilities + */ + modulepar NRintegrityProtectionAlgorithms PX_NR_INTEGRITY_PROTECTION_ALGORITHMS; + + /** + * @desc Each position in the bitmap represents an encryption algorithm + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.86 UE Security Capabilities + */ + modulepar EUTRAencryptionAlgorithms PX_EUTRA_ENCRYPTION_ALGORITHMS; + + /** + * @desc Each position in the bitmap represents an encryption algorithm + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.86 UE Security Capabilities + */ + modulepar EUTRAintegrityProtectionAlgorithms PX_EUTRA_INTEGRITY_PROTECTION_ALGORITHMS; + + modulepar NextHopChainingCount PX_NEXT_HOP_CHAINING_COUNT; + + modulepar SecurityKey PX_NEXT_HOP_NH; + + /** + * @desc Contains the DRB ID + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.53 DRB ID + */ + modulepar DRB_ID PX_DRB_ID := 1; + + /** + * @desc To indicate the Paging DRX as defined in TS 38.304 and TS 36.304 + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.90 Paging DRX + */ + modulepar PagingDRX PX_PAGING_DRX := v32; + + /** + * @desc To uniquely identify the AMF + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.3.21 AMF Name + */ + modulepar AMFName PX_AMF_NAME := "amarisoft.amf.5gc.mnc001.mcc001.3gppnetwork.org"; + + /** + * @desc Human readable name of the NG-RAN node + * @see ETSI TS 138 413 V16.12.0 (2023-05) + */ + modulepar RANNodeName PX_RAN_NODE_NAME := "gnb0012345"; + + /** + * @desc To identify the warning message + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.35 Message Identifier + */ + modulepar MessageIdentifier PX_MESSAGE_IDENTIFIER := '0000000000000000'B; + + /** + * @desc To identifies a particular message from the source and type indicated by the Message Identifier and is altered every time the message with a given Message Identifier is changed + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.36 Serial Number + */ + modulepar SerialNumber PX_SERIAL_NUMBER := '0000000000000000'B; + + /** + * @desc To indicate the periodicity of the warning message to be broadcast + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.49 Repetition Period + */ + modulepar RepetitionPeriod PX_REPETITION_PERIOD := 3; + + /** + * @desc To indicate the number of times a message is to be broadcast + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.1.38 Number of Broadcasts Requested + */ + modulepar NumberOfBroadcastsRequested PX_NUMBER_OF_BROADCASTS_REQUESTED := 4; + + modulepar octetstring PX_SOURCE_TO_TARGET_TRANSPARENT_CONTAINER; + + modulepar EPS_TAC PX_EPS_TAC := '0000'O; + + modulepar Bit20 PX_MACRO_NGENB_ID; + + modulepar Bit18 PX_SHORT_MACRO_NGENB_ID; + + modulepar Bit21 PX_LONG_MACRO_NGENB_ID; + + modulepar Bit10 PX_UE_IDENTITY_INDEX_VALUE; + + modulepar PeriodicRegistrationUpdateTimer PX_PERIODIC_REGISTRATION_UPDATE_TIMER; + + modulepar NGRANTraceID PX_NGRAN_TRACE_ID; + + modulepar InterfacesToTrace PX_INTERFACES_TO_TRACE; + + modulepar UERadioCapabilityID PX_U_E_RADIO_CAPABILITY_ID; + + modulepar Extended_ConnectedTime PX_EXTENDED_CONNECTED_TIME; + + modulepar BitRate PX_UE_SIDELINK_AGGREGATE_MAXIMUM_BIT_RATE; + + modulepar FiveQI PX_FIVE_QI; + + modulepar bitstring PX_GNB_ID := '10101010101010101010101010101010'B; + + /** + * @desc To indicate IMEISV value with a mask, to identify a terminal model without identifying an individual Mobile Equipment. + * @see 138 413 V16.12.0 (2023-05) Clause 9.3.1.54 Masked IMEISV + */ + modulepar bitstring PX_MaskedIMEISV; + + /** + * @desc To indicate local configuration for RRM strategies such as camp priorities in Idle mode and control of inter-RAT/inter-frequency handover in Active mode + * @see 138 413 V16.12.0 (2023-05) Clause 9.3.1.61 Index to RAT/Frequency Selection Priority + */ + modulepar integer PX_Index_to_RAT_Frequency_Selection_Priority; + + /** + * @desc eNB Identity. + * @see ETSI TS 136 413 Clause 9.2.1.37 Global eNB ID + */ + //modulepar ENB_ID PX_eNB_ID := { + // homeENB_ID := '0000000000000000000000000000'B + //}; + + /** + * @desc eNB Identity. + * @see ETSI TS 136 413 Clause 9.2.1.37 Global eNB ID + */ + // modulepar ENB_ID PX_eNB_ID_UNKNOWN := { + // homeENB_ID := '1100000000000000000000000000'B + // }; + + /** + * @desc Cell Identity. + */ + //modulepar CellIdentity PX_CELL_ID := '0000000000000000000000000000'B; + + /** + * @desc The TAC is used to uniquely identify a Tracking Area Code. + * @see ETSI TS 136 413 Clause 9.2.3.7 TAC + */ + /** + * @desc To uniquely identify a Tracking Area Code + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.3.3.10 TAC + */ + //modulepar TAC PX_TAC := '000000'O; + modulepar TAC PX_TACode := '000000'O; + + /** + * @desc The MME Group ID. + */ + //modulepar MME_Group_ID PX_MME_GROUP_ID := '0000'O; + + /** + * @desc The MME Code to uniquely identify an MME within an MME pool area. + * @see ETSI TS 136 413 Clause 9.2.3.12 MMEC + */ + //modulepar MME_Code PX_MME_CODE := '01'O; + + /** + * @desc The relative processing capacity of an MME with respect to the other MMEs in the pool in order to load-balance MMEs within a pool defined in TS 23.401. + * @see ETSI TS 136 413 Clause 9.2.3.17 Relative MME Capacity + */ + //modulepar RelativeMMECapacity PX_RELATIVE_MME_CAPACITY := 128; + + /** + * @desc The Message Identifier IE identifies a warning message. + * @see ETSI TS 136 413 Clause 9.2.1.44 Message Identifier + */ + //modulepar MessageIdentifier PX_MESSAGE_IDENTIFIER := oct2bit('0000'O); + + /** + * @desc The Serial Number IE identifies a particular message from the source and type indicated by the Message Identifie. + * @see ETSI TS 136 413 Clause 9.2.1.45 Serial Number + */ + //modulepar SerialNumber PX_SERIAL_NUMBER := oct2bit('0000'O); + + /** + * @desc The Repetition Period IE indicates the periodicity of the warning message to be broadcast. + * @see ETSI TS 136 413 Clause 9.2.1.48 Repetition Period + */ + //modulepar RepetitionPeriod PX_REPETITION_PERIOD := 1; + + /** + * @desc The Number of Broadcast Requested IE indicates the number of times a message is to be broadcast. + * @see ETSI TS 136 413 Clause 9.2.1.49 Number of Broadcasts Requested + */ + //modulepar NumberOfBroadcasts PX_NUMBER_OF_BROADCASTS_REQUESTED := 1; + + /** + * @desc The Emergency Area ID IE is used to indicate the area which has the emergency impact. + * @see ETSI TS 136 413 Clause 9.2.1.47 Emergency Area ID + */ + //modulepar EmergencyAreaID PX_EMERGENCY_AREA_ID := '000000'O; + + /** + * @desc Event Type. + * @see ETSI TS 136 413 Clause 9.2.1.34 Request Type + */ + //modulepar EventType PX_EVENT_TYPE := direct; + + /** + * @desc Report Area. + * @see ETSI TS 136 413 Clause 9.2.1.34 Request Type + */ + //modulepar ReportArea PX_REPORT_AREA := ecgi; + + /** + * @desc The E-UTRAN Trace ID. + * @see ETSI TS 136 413 Clause 9.2.1.4 Trace Activation + */ + //modulepar E_UTRAN_Trace_ID PX_EUTRAN_TRACE_ID := '0000000000000000'O; + + /** + * @desc The interfaces to trace. + * @see ETSI TS 136 413 Clause 9.2.1.4 Trace Activation + */ + //modulepar InterfacesToTrace PX_INTERFACES_TO_TRACE := '00000000'B; + + /** + * @desc The trace depth. + * @see ETSI TS 136 413 Clause 9.2.1.4 Trace Activation + */ + //modulepar TraceDepth PX_TRACE_DEPTH := medium; + + /** + * @desc Transport Layer Address. + * @see ETSI TS 136 413 Clause 9.2.2.1 Transport Layer Address + */ + //modulepar TransportLayerAddress PX_TRANSPORT_LAYER_ADDRESS := oct2bit('0a00000a'O); + + /** @desc CDMA2000 message + * @see ETSI TS 136 413 Clause 9.2.1.23 CDMA2000-PDU + */ + //modulepar octetstring PX_CDMA200_PDU := ''O; + + /** @desc CDMA2000 RAT type + * @see ETSI TS 136 413 Clause 9.2.1.24 CDMA2000 RAT Type + */ + //modulepar Cdma2000RATType PX_CDMA200_RAT_TYPE := hRPD; + + /** @desc CDMA2000 Reference Cell ID + * @see ETSI TS 136 413 Clause 9.2.1.25 CDMA2000 Sector ID + */ + //modulepar octetstring PX_CDMA200_SECTOR_ID := ''O; + + /** @desc The Paging DRX as defined in TS 36.304. + * @see ETSI TS 136 413 Clause 9.2.1.16 Paging DRX + */ + //modulepar PagingDRX PX_PAGING_DRX := v256; + + /** @desc The identifier of the Closed Subscriber Group, as defined in TS 23.003. + * @see ETSI TS 136 413 Clause 9.2.1.62 CSG Id + */ + //modulepar Bit27 PX_CSG_ID := '000000000000000000000000000'B; + + /** @desc The UE Identity Index value IE is used by the eNB to calculate the Paging Frame TS 36.304. + * @see ETSI TS 136 413 Clause 9.2.3.10 UE Identity Index value + */ + //modulepar UEIdentityIndexValue PX_UE_IDENTITY_INDEX_VALUE := '0000000000'B; + + /** @desc The International Mobile Subscriber Identity, which is commonly used to identify the UE in the CN. + * @see ETSI TS 136 413 Clause 9.2.3.11 IMSI + */ + //modulepar IMSI PX_IMSI := '000000'O; + + /** @desc Indicates whether Paging is originated from the CS or PS domain. + * @see ETSI TS 136 413 Clause 9.2.3.22 CN Domain + */ + //modulepar CNDomain PX_CNDOMAIN := ps; + + /** @desc Indicates a not supported algorithm. + * @see ETSI TS 136 413 Clause 9.2.1.40 UE Security Capabilities + */ + //modulepar EncryptionAlgorithms PX_UNSUPPORTED_ENCRYPTION_ALGORITHM := '1111111111111111'B; + + /** @desc Indicates a supported encription algorithm. + * @see ETSI TS 136 413 Clause 9.2.1.40 UE Security Capabilities + */ + ///modulepar EncryptionAlgorithms PX_ENCRYPTION_ALGORITHM := '0101010101010101'B; + + /** @desc Indicates a supported integrity protection algorithm. + * @see ETSI TS 136 413 Clause 9.2.1.40 UE Security Capabilities + */ + //modulepar IntegrityProtectionAlgorithms PX_INTEGRITY_PROTECTION_ALGORITHM := '0101010101010101'B; + + /** @desc Indicates the procedure value. + * @see ETSI TS 136 413 Clause 9.2.1.21 Criticality Diagnostics + */ + //modulepar ProcedureCode PX_PROCEURE_CODE := 0; + + /** @desc Indicates triggering message value + * @see ETSI TS 136 413 Clause 9.2.1.21 Criticality Diagnostics + */ + //modulepar TriggeringMessage PX_TRIGGERING_CODE := initiating_message; + + /** @desc Indicates a the criticality + * @see ETSI TS 136 413 Clause 9.2.1.21 Criticality Diagnostics + */ + //modulepar Criticality PX_CRITICALITY := ignore; + + /** @desc Indicates the transport layer address. + */ + //modulepar TransportLayerAddress PX_TPORT_LAYER_ADDR := '1'B; + + /** @desc Indicates an unacceptable transport layer address. + */ + //modulepar TransportLayerAddress PX_INVALID_TPORT_LAYER_ADDR := '0'B; + + /** @desc Indicates the Downlink GTP TEID. + */ + //modulepar GTP_TEID PX_DL_GTP_TEID := '00000000'O; + + /** @desc Indicates the source_ToTarget_TransparentContainer value. + * @see ETSI TS 136 413 Clause 9.2.1.56 Source to Target Transparent Container + */ + //modulepar Source_ToTarget_TransparentContainer PX_SOURCE_TO_TARGET_TANSPARENT_CONTAINER := '12121212'O; + + /** @desc Indicates the target_ToSource_TransparentContainer value. + * @see ETSI TS 136 413 Clause 9.2.1.57 Target to Source Transparent Container + */ + //modulepar Target_ToSource_TransparentContainer PX_TARGET_TO_SOURCE_TANSPARENT_CONTAINER := '12121212'O; + +} // End of module LibNGAP_Pixits + diff --git a/ttcn/LibNGAP/lib/LibNGAP_Templates.ttcn b/ttcn/LibNGAP/lib/LibNGAP_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..014925b9e81f7b6df6d1444489e1cfbf01103556 --- /dev/null +++ b/ttcn/LibNGAP/lib/LibNGAP_Templates.ttcn @@ -0,0 +1,24470 @@ +/** + * @author ETSI / TTF033 + * @version $URL$ + * $Id$ + * @desc This module provides templates for NGAP protocol. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI TS 138 413 / 3GPP TS 38.413 version 16.12 Release 16 + */ +module LibNGAP_Templates { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + // Lib3GPP/NAS + import from NAS_CommonTypeDefs all; + + // LibNGAP + import from NGAP_Constants language "ASN.1:2002" all; + import from NGAP_CommonDataTypes language "ASN.1:2002" all; + import from NGAP_IEs language "ASN.1:2002" all; + import from NGAP_PDU_Contents language "ASN.1:2002" all; + import from NGAP_PDU_Descriptions language "ASN.1:2002" all; + import from NGAP_Containers language "ASN.1:2002" all; + + import from LibNGAP_TypesAndValues all; + import from LibNGAP_Pixits all; + + group g_NGAP { + + group g_NGAP_PDU { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.1.1 PDU SESSION RESOURCE SETUP REQUEST + */ + template (value) NGAP_PDU m_ngap_initMsg( + in template (value) InitiatingMessage p_msg + ) := { + initiatingMessage := p_msg + } // End of template m_ngap_initMsg + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 8.1 List of NGAP Elementary Procedures + */ + template (value) NGAP_PDU m_ngap_succMsg( + in template (value) SuccessfulOutcome p_msg + ) := { + successfulOutcome := p_msg + } // End of template m_ngap_succMsg + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 8.1 List of NGAP Elementary Procedures + */ + template (value) NGAP_PDU m_ngap_unsuccMsg( + in template (value) UnsuccessfulOutcome p_msg + ) := { + unsuccessfulOutcome := p_msg + } // End of template m_ngap_unsuccMsg + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.1.1 PDU SESSION RESOURCE SETUP REQUEST + */ + template (present) NGAP_PDU mw_ngap_initMsg( + template (present) InitiatingMessage p_msg := ? + ) := { + initiatingMessage := p_msg + } // End of template mw_ngap_initMsg + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 8.1 List of NGAP Elementary Procedures + */ + template (present) NGAP_PDU mw_ngap_succMsg( + template (present) SuccessfulOutcome p_msg := ? + ) := { + successfulOutcome := p_msg + } // End of template mw_ngap_succMsg + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 8.1 List of NGAP Elementary Procedures + */ + template (present) NGAP_PDU mw_ngap_unsuccMsg( + template (present) UnsuccessfulOutcome p_msg := ? + ) := { + unsuccessfulOutcome := p_msg + } // End of template mw_ngap_unsuccMsg + + } // End of group Receive + + } // End of group g_NGAP_PDU + + group Message_Functional_Definition_and_Content { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.1 PDU Session Management Messages + */ + group PDU_Session_Management_Messages { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.1 PDU Session Management Messages + */ + group PDU_SESSION_RESOURCE_SETUP_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.1.1 PDU SESSION RESOURCE SETUP REQUEST + */ + template (value) InitiatingMessage m_n2_PDUSessionResourceSetupRequest( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceSetupListSUReq p_pDUSessionResourceSetupListSUReq + ) := { + procedureCode := id_PDUSessionResourceSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSetupListSUReq, + criticality := ignore, + value_ := { PDUSessionResourceSetupListSUReq := p_pDUSessionResourceSetupListSUReq } + } + } + } + } + } // End of template m_n2_PDUSessionResourceSetupRequest + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.1.1 PDU SESSION RESOURCE SETUP REQUEST + */ + template (present) InitiatingMessage mw_n2_PDUSessionResourceSetupRequest( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceSetupListSUReq p_pDUSessionResourceSetupListSUReq := ? + ) := { + procedureCode := id_PDUSessionResourceSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSetupListSUReq, + criticality := ignore, + value_ := { PDUSessionResourceSetupListSUReq := p_pDUSessionResourceSetupListSUReq } + } + } + } + } + } // End of template mw_n2_PDUSessionResourceSetupRequest + + } // End of group Receive + + } // End of group PDU_SESSION_RESOURCE_SETUP_REQUEST + + group PDU_SESSION_RESOURCE_SETUP_RESPONSE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.1.2 PDU SESSION RESOURCE SETUP RESPONSE + */ + template (value) SuccessfulOutcome m_n2_PDUSessionResourceSetupResponse( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceSetupListSURes p_pDUSessionResourceSetupListSURes + ) := { + procedureCode := id_PDUSessionResourceSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSetupListSURes, + criticality := ignore, + value_ := { PDUSessionResourceSetupListSURes := p_pDUSessionResourceSetupListSURes } + } + } + } + } + } // End of template mw_n2_PDUSessionResourceSetupResponse + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.1.2 PDU SESSION RESOURCE SETUP RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_PDUSessionResourceSetupResponse( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceSetupListSURes p_pDUSessionResourceSetupListSUReq := ? + ) := { + procedureCode := id_PDUSessionResourceSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSetupListSURes, + criticality := ignore, + value_ := { PDUSessionResourceSetupListSURes := p_pDUSessionResourceSetupListSUReq} + } + } + } + } + } // End of template mw_n2_PDUSessionResourceSetupResponse + + template (present) SuccessfulOutcome mw_n2_PDUSessionResourceSetupResponseFailed( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceFailedToSetupListSURes p_pDUSessionResourceFailedToSetupListSUReq := ? + ) := { + procedureCode := id_PDUSessionResourceSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceFailedToSetupListSURes, + criticality := ignore, + value_ := { PDUSessionResourceFailedToSetupListSURes := p_pDUSessionResourceFailedToSetupListSUReq} + } + } + } + } + } // End of template mw_n2_PDUSessionResourceSetupResponse + + } // End of group Receive + } // End of group PDU_SESSION_RESOURCE_SETUP_RESPONSE + + group PDU_SESSION_RESOURCE_RELEASE_COMMAND { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.3 PDU SESSION RESOURCE RELEASE COMMAND + */ + template (value) InitiatingMessage m_n2_PDUSessionResourceReleaseCommand( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceToReleaseListRelCmd p_pDUSessionResourceToReleaseListRelCmd + ) := { + + procedureCode := id_PDUSessionResourceToReleaseListRelCmd, + criticality := reject, + value_ := { + PDUSessionResourceReleaseCommand := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceToReleaseListRelCmd, + criticality := reject, + value_ := { PDUSessionResourceToReleaseListRelCmd := p_pDUSessionResourceToReleaseListRelCmd } + } + } + } + } + } // End of template m_n2_PDUSessionResourceReleaseCommand + + } // End of group Send + + group Receive { + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.3 PDU SESSION RESOURCE RELEASE COMMAND + */ + template (present) InitiatingMessage mw_n2_PDUSessionResourceReleaseCommand( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceToReleaseListRelCmd p_pDUSessionResourceToReleaseListRelCmd := ? + ) := { + + procedureCode := id_PDUSessionResourceToReleaseListRelCmd, + criticality := reject, + value_ := { + PDUSessionResourceReleaseCommand := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceToReleaseListRelCmd, + criticality := reject, + value_ := { PDUSessionResourceToReleaseListRelCmd := p_pDUSessionResourceToReleaseListRelCmd } + } + } + } + } + } // End of template mw_n2_PDUSessionResourceReleaseCommand + + } // End of group Receive + + } // End of group PDU_SESSION_RESOURCE_RELEASE_COMMAND + + group PDU_SESSION_RESOURCE_RELEASE_RESPONSE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.4 PDU SESSION RESOURCE RELEASE RESPONSE + */ + template (value) SuccessfulOutcome m_n2_PDUSessionResourceReleaseResponse( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceReleasedListRelRes p_pDUSessionResourceReleasedListRelRes + ) := { + + procedureCode := id_PDUSessionResourceRelease, + criticality := reject, + value_ := { + PDUSessionResourceReleaseResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceReleasedListRelRes, + criticality := reject, + value_ := { PDUSessionResourceReleasedListRelRes := p_pDUSessionResourceReleasedListRelRes + } + } + } + } + } + } // End of template m_n2_PDUSessionResourceReleaseResponse + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.4 PDU SESSION RESOURCE RELEASE RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_PDUSessionResourceReleaseResponse( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceReleasedListRelRes p_pDUSessionResourceReleasedListRelRes := ? + ) := { + + procedureCode := id_PDUSessionResourceRelease, + criticality := reject, + value_ := { + PDUSessionResourceReleaseResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceReleasedListRelRes, + criticality := reject, + value_ := { PDUSessionResourceReleasedListRelRes := p_pDUSessionResourceReleasedListRelRes + } + } + } + } + } + } // End of template mw_n2_PDUSessionResourceReleaseResponse + + } // End of group Receive + + } // End of group PDU_SESSION_RESOURCE_RELEASE_RESPONSE + + group PDU_SESSION_RESOURCE_MODIFY_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.5 PDU SESSION RESOURCE MODIFY REQUEST + */ + template (value) InitiatingMessage m_n2_PDUSessionResourceModify( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceModifyListModReq p_pDUSessionResourceModifyListModReq + ) := { + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceModifyListModReq, + criticality := reject, + value_ := { PDUSessionResourceModifyListModReq := p_pDUSessionResourceModifyListModReq } + } + } + } + } + } // End of template m_n2_PDUSessionResourceModify + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.5 PDU SESSION RESOURCE MODIFY REQUEST + */ + template (present) InitiatingMessage mw_n2_PDUSessionResourceModify( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceModifyListModReq p_pDUSessionResourceModifyListModReq := ? + ) := { + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceModifyListModReq, + criticality := reject, + value_ := { PDUSessionResourceModifyListModReq := p_pDUSessionResourceModifyListModReq } + } + } + } + } + } // End of template mw_n2_PDUSessionResourceModify + + } // End of group Receive + + } // End of group PDU_SESSION_RESOURCE_MODIFY_REQUEST + + group PDU_SESSION_RESOURCE_MODIFY_RESPONSE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.6 PDU SESSION RESOURCE MODIFY RESPONSE + */ + template (value) SuccessfulOutcome m_n2_PDUSessionResourceModifyResponse( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceModifyListModRes p_pDUSessionResourceModifyListModRes + ) := { + + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceModifyListModReq, + criticality := reject, + value_ := { PDUSessionResourceModifyListModRes := p_pDUSessionResourceModifyListModRes + } + } + } + } + } + } // End of template m_n2_PDUSessionResourceModifyResponse + + template (value) SuccessfulOutcome m_n2_PDUSessionResourceModifyResponseFailedToMod( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID, + in template (value) PDUSessionResourceFailedToModifyListModRes p_pDUSessionResourceFailedToModifyListModRes + ) := { + + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceFailedToModifyListModRes, + criticality := reject, + value_ := { PDUSessionResourceFailedToModifyListModRes := p_pDUSessionResourceFailedToModifyListModRes + } + } + } + } + } + } // End of template m_n2_PDUSessionResourceModifyResponse + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.6 PDU SESSION RESOURCE MODIFY RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_PDUSessionResourceModifyResponse( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceModifyListModRes p_pDUSessionResourceModifyListModRes := ? + ) := { + + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceModifyListModReq, + criticality := reject, + value_ := { PDUSessionResourceModifyListModRes := p_pDUSessionResourceModifyListModRes + } + } + } + } + } + } // End of template mw_n2_PDUSessionResourceModifyResponse + + template (present) SuccessfulOutcome mw_n2_PDUSessionResourceModifyResponseFailedToMod( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceFailedToModifyListModRes p_pDUSessionResourceFailedToModifyListModRes := ? + ) := { + + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceFailedToModifyListModRes, + criticality := reject, + value_ := { PDUSessionResourceFailedToModifyListModRes := p_pDUSessionResourceFailedToModifyListModRes + } + } + } + } + } + } // End of template mw_n2_PDUSessionResourceModifyResponse + + } // End of group Receive + + } // End of group PDU_SESSION_RESOURCE_MODIFY_RESPONSE + + group PDU_SESSION_RESOURCE_NOTIFY { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.7 PDU SESSION RESOURCE NOTIFY + */ + template (value) InitiatingMessage m_n2_PDUSessionResourceNotify( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceNotifyList p_pDUSessionResourceNotifyList + ) := { + + procedureCode := id_PDUSessionResourceNotify, + criticality := reject, + value_ := { + PDUSessionResourceNotify := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceNotifyList, + criticality := reject, + value_ := { PDUSessionResourceNotifyList := p_pDUSessionResourceNotifyList } + } + } + } + } + } // End of template m_n2_PDUSessionResourceNotify + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.7 PDU SESSION RESOURCE NOTIFY + */ + template (present) InitiatingMessage mw_n2_PDUSessionResourceNotify( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceNotifyList p_pDUSessionResourceNotifyList := ? + ) := { + + procedureCode := id_PDUSessionResourceNotify, + criticality := reject, + value_ := { + PDUSessionResourceNotify := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceNotifyList, + criticality := reject, + value_ := { PDUSessionResourceNotifyList := p_pDUSessionResourceNotifyList } + } + } + } + } + } // End of template mw_n2_PDUSessionResourceNotify + + } // End of group Receive + + } // End of group PDU_SESSION_RESOURCE_NOTIFY + + group PDU_SESSION_RESOURCE_MODIFY_INDICATION { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.6 PDU SESSION RESOURCE MODIFY RESPONSE + */ + template (value) InitiatingMessage m_n2_PDUSessionResourceModifyIndication( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceModifyListModInd p_pDUSessionResourceModifyListModInd + ) := { + + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceModifyListModReq, + criticality := reject, + value_ := { PDUSessionResourceModifyListModInd := p_pDUSessionResourceModifyListModInd + } + } + } + } + } + } // End of template m_n2_PDUSessionResourceModifyIndication + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.6 PDU SESSION RESOURCE MODIFY RESPONSE + */ + template (present) InitiatingMessage mw_n2_PDUSessionResourceModifyIndication( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceModifyListModInd p_pDUSessionResourceModifyListModInd := ? + ) := { + + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceModifyListModReq, + criticality := reject, + value_ := { PDUSessionResourceModifyListModInd := p_pDUSessionResourceModifyListModInd + } + } + } + } + } + } // End of template mw_n2_PDUSessionResourceModifyIndication + + } // End of group Receive + + } // End of group PDU_SESSION_RESOURCE_MODIFY_INDICATION + + group PDU_SESSION_RESOURCE_MODIFY_CONFIRM { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.9 PDU SESSION RESOURCE MODIFY CONFIRM + */ + template (value) SuccessfulOutcome m_n2_PDUSessionResourceModifyConfirm( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceModifyListModCfm p_pDUSessionResourceModifyListModCfm + ) := { + + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyConfirm := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceModifyListModReq, + criticality := ignore, + value_ := { PDUSessionResourceModifyListModCfm := p_pDUSessionResourceModifyListModCfm + } + } + } + } + } + } // End of template m_n2_PDUSessionResourceModifyConfirm + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.9 PDU SESSION RESOURCE MODIFY CONFIRM + */ + template (value) SuccessfulOutcome m_n2_PDUSessionResourceModifyConfirm_failed( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceFailedToModifyListModCfm p_PDUSessionResourceFailedToModifyListModCfm + ) := { + + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyConfirm := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceFailedToModifyListModCfm, + criticality := ignore, + value_ := { PDUSessionResourceFailedToModifyListModCfm := p_PDUSessionResourceFailedToModifyListModCfm + } + } + } + } + } + } // End of template m_n2_PDUSessionResourceModifyConfirm_failed + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.9 PDU SESSION RESOURCE MODIFY CONFIRM + */ + template (present) SuccessfulOutcome mw_n2_PDUSessionResourceModifyConfirm( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceModifyListModCfm p_pDUSessionResourceModifyListModCfm := ? + ) := { + + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyConfirm := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceModifyListModReq, + criticality := ignore, + value_ := { PDUSessionResourceModifyListModCfm := p_pDUSessionResourceModifyListModCfm + } + } + } + } + } + } // End of template mw_n2_PDUSessionResourceModifyConfirm + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) 9.2.1.9 PDU SESSION RESOURCE MODIFY CONFIRM + */ + template (present) SuccessfulOutcome mw_n2_PDUSessionResourceModifyConfirm_failed( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceFailedToModifyListModCfm p_PDUSessionResourceFailedToModifyListModCfm := ? + ) := { + + procedureCode := id_PDUSessionResourceModify, + criticality := reject, + value_ := { + PDUSessionResourceModifyConfirm := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceFailedToModifyListModCfm, + criticality := ignore, + value_ := { PDUSessionResourceFailedToModifyListModCfm := p_PDUSessionResourceFailedToModifyListModCfm + } + } + } + } + } + } // End of template mw_n2_PDUSessionResourceModifyConfirm_failed + + } // End of group Receive + + } // End of group PDU_SESSION_RESOURCE_MODIFY_CONFIRM + + } // End of group PDU_Session_Management_Messages + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2 UE Context Management Messages + */ + group UE_Context_Management_Messages { + + group INITIAL_CONTEXT_SETUP_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.1 INITIAL CONTEXT SETUP REQUEST + */ + template (value) InitiatingMessage m_n2_InitialContextSetupRequest( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) GUAMI p_gUAMI, + in template (value) PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq, + in template (value) AllowedNSSAI p_allowedNSSAI, + in template (value) UESecurityCapabilities p_uESecurityCapabilities, + in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + InitialContextSetupRequest := { + + + + + + + + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSetupListCxtReq, + criticality := reject, + value_ := { PDUSessionResourceSetupListCxtReq := p_pDUSessionResourceSetupListCxtReq } + } + } + } + } + } // End of template m_n2_InitialContextSetupRequest + + template (value) InitiatingMessage m_n2_InitialContextSetupRequest_noPDUSessionResourceSetupListCxtReq( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) GUAMI p_gUAMI, + in template (value) AllowedNSSAI p_allowedNSSAI, + in template (value) UESecurityCapabilities p_uESecurityCapabilities, + in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + InitialContextSetupRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_GUAMI, + criticality := reject, + value_ := { GUAMI := p_gUAMI } + }, + { + id := id_AllowedNSSAI, + criticality := reject, + value_ := { AllowedNSSAI := p_allowedNSSAI } + }, + { + id := id_UESecurityCapabilities, + criticality := reject, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + { + id := id_SecurityKey, + criticality := reject, + value_ := { SecurityKey := p_nextHopNH } + } + } + } + } + } // End of template m_n2_InitialContextSetupRequest_noPDUSessionResourceSetupListCxtReq + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.1 INITIAL CONTEXT SETUP REQUEST + */ + template (value) InitiatingMessage m_n2_InitialContextSetupRequest_optional_TraceActivation( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) GUAMI p_gUAMI, + in template (value) PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq, + in template (value) AllowedNSSAI p_allowedNSSAI, + in template (value) UESecurityCapabilities p_uESecurityCapabilities, + in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH, + in template (value) TraceActivation p_traceActivation + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + InitialContextSetupRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_GUAMI, + criticality := reject, + value_ := { GUAMI := p_gUAMI } + }, + { + id := id_PDUSessionResourceSetupListCxtReq, + criticality := reject, + value_ := { PDUSessionResourceSetupListCxtReq := p_pDUSessionResourceSetupListCxtReq } + }, + { + id := id_AllowedNSSAI, + criticality := reject, + value_ := { AllowedNSSAI := p_allowedNSSAI } + }, + { + id := id_UESecurityCapabilities, + criticality := reject, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + { + id := id_SecurityKey, + criticality := reject, + value_ := { SecurityKey := p_nextHopNH } + }, + { + id := id_TraceActivation, + criticality := ignore, + value_ := { TraceActivation := p_traceActivation } + } + } + } + } + } // End of template m_n2_InitialContextSetupRequest_optional_TraceActivation + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.1 INITIAL CONTEXT SETUP REQUEST + */ + template (value) InitiatingMessage m_n2_InitialContextSetupRequest_optional_MobilityRestriction( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) GUAMI p_gUAMI, + in template (value) PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq, + in template (value) AllowedNSSAI p_allowedNSSAI, + in template (value) UESecurityCapabilities p_uESecurityCapabilities, + in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH, + in template (value) MobilityRestrictionList p_mobilityRestrictionList + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + InitialContextSetupRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_GUAMI, + criticality := reject, + value_ := { GUAMI := p_gUAMI } + }, + { + id := id_PDUSessionResourceSetupListCxtReq, + criticality := reject, + value_ := { PDUSessionResourceSetupListCxtReq := p_pDUSessionResourceSetupListCxtReq } + }, + { + id := id_AllowedNSSAI, + criticality := reject, + value_ := { AllowedNSSAI := p_allowedNSSAI } + }, + { + id := id_UESecurityCapabilities, + criticality := reject, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + { + id := id_SecurityKey, + criticality := reject, + value_ := { SecurityKey := p_nextHopNH } + }, + { + id := id_TraceActivation, + criticality := ignore, + value_ := { MobilityRestrictionList := p_mobilityRestrictionList } + } + } + } + } + } // End of template m_n2_InitialContextSetupRequest_optional_MobilityRestriction + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.1 INITIAL CONTEXT SETUP REQUEST + */ + template (value) InitiatingMessage m_n2_InitialContextSetupRequest_differentOptionals( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) GUAMI p_gUAMI, + in template (value) PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq, + in template (value) AllowedNSSAI p_allowedNSSAI, + in template (value) UESecurityCapabilities p_uESecurityCapabilities, + in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH, + in template (value) UERadioCapability p_uERadioCapability, + in template (value) IndexToRFSP p_indexToRFSP := PX_Index_to_RAT_Frequency_Selection_Priority, + in template (value) MaskedIMEISV p_maskedIMEISV := PX_MaskedIMEISV, + in template (value) NAS_PDU p_nasPdu, + in template (value) EmergencyFallbackIndicator p_emergencyFallbackIndicator, + in template (value) RRCInactiveTransitionReportRequest p_rRCInactiveTransitionReportRequest, + in template (value) RedirectionVoiceFallback p_redirectionVoiceFallback, + in template (value) LocationReportingRequestType p_locationReportingRequestType, + in template (value) SRVCCOperationPossible p_sRVCCOperationPossible, + in template (value) IAB_Authorized p_iAB_Authorized, + in template (value) Enhanced_CoverageRestriction p_enhanced_CoverageRestriction, + in template (value) Extended_ConnectedTime p_extended_ConnectedTime := PX_EXTENDED_CONNECTED_TIME, + in template (value) UE_DifferentiationInfo p_uE_DifferentiationInfo, + in template (value) NRUESidelinkAggregateMaximumBitrate p_nRUESidelinkAggregateMaximumBitrate, + in template (value) LTEUESidelinkAggregateMaximumBitrate p_lTEUESidelinkAggregateMaximumBitrate, + in template (value) UERadioCapabilityID p_uERadioCapabilityID + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + InitialContextSetupRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_GUAMI, + criticality := reject, + value_ := { GUAMI := p_gUAMI } + }, + { + id := id_PDUSessionResourceSetupListCxtReq, + criticality := reject, + value_ := { PDUSessionResourceSetupListCxtReq := p_pDUSessionResourceSetupListCxtReq } + }, + { + id := id_AllowedNSSAI, + criticality := reject, + value_ := { AllowedNSSAI := p_allowedNSSAI } + }, + { + id := id_UESecurityCapabilities, + criticality := reject, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + { + id := id_SecurityKey, + criticality := reject, + value_ := { SecurityKey := p_nextHopNH } + }, + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + }, + { + id := id_IndexToRFSP, + criticality := ignore, + value_ := { IndexToRFSP := p_indexToRFSP } + }, + { + id := id_MaskedIMEISV, + criticality := ignore, + value_ := { MaskedIMEISV := p_maskedIMEISV } + }, + { + id := id_NAS_PDU, + criticality := ignore, + value_ := { NAS_PDU := p_nasPdu } + }, + { + id := id_EmergencyFallbackIndicator, + criticality := reject, + value_ := { EmergencyFallbackIndicator := p_emergencyFallbackIndicator} + }, + { + id := id_RRCInactiveTransitionReportRequest, + criticality := ignore, + value_ := { RRCInactiveTransitionReportRequest := p_rRCInactiveTransitionReportRequest} + }, + { + id := id_RedirectionVoiceFallback, + criticality := ignore, + value_ := { RedirectionVoiceFallback := p_redirectionVoiceFallback } + } , + { + id := id_LocationReportingRequestType, + criticality := ignore, + value_ := { LocationReportingRequestType := p_locationReportingRequestType } + }, + { + id := id_SRVCCOperationPossible, + criticality := ignore, + value_ := { SRVCCOperationPossible := p_sRVCCOperationPossible } + }, + { + id := id_IAB_Authorized, + criticality := ignore, + value_ := { IAB_Authorized := p_iAB_Authorized } + }, + { + id := id_Enhanced_CoverageRestriction, + criticality := ignore, + value_ := { Enhanced_CoverageRestriction := p_enhanced_CoverageRestriction } + }, + { + id := id_Extended_ConnectedTime, + criticality := ignore, + value_ := { Extended_ConnectedTime := p_extended_ConnectedTime } + }, + { + id := id_UE_DifferentiationInfo, + criticality := ignore, + value_ := { UE_DifferentiationInfo := p_uE_DifferentiationInfo } + }, + { + id := id_NRUESidelinkAggregateMaximumBitrate, + criticality := ignore, + value_ := { NRUESidelinkAggregateMaximumBitrate := p_nRUESidelinkAggregateMaximumBitrate } + }, + { + id := id_LTEUESidelinkAggregateMaximumBitrate, + criticality := ignore, + value_ := { LTEUESidelinkAggregateMaximumBitrate := p_lTEUESidelinkAggregateMaximumBitrate } + }, + { + id := id_UERadioCapabilityID, + criticality := reject, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + } + + + } + } + } + } // End of template m_n2_InitialContextSetupRequest_differentOptionals + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.1 INITIAL CONTEXT SETUP REQUEST + */ + template (present) InitiatingMessage mw_n2_InitialContextSetupRequest_withPDUSessionList( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) GUAMI p_gUAMI := ?, + template (present) PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq := ?, + template (present) AllowedNSSAI p_allowedNSSAI := ?, + template (present) UESecurityCapabilities p_uESecurityCapabilities := ?, + template (present) SecurityKey p_nextHopNH := ?, + template (present) MaskedIMEISV p_maskedIMEISV := ?, + template (present) NAS_PDU p_nasPdu := ? + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + InitialContextSetupRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_GUAMI, + criticality := reject, + value_ := { GUAMI := p_gUAMI } + }, + { + id := id_PDUSessionResourceSetupListCxtReq, + criticality := reject, + value_ := { PDUSessionResourceSetupListCxtReq := p_pDUSessionResourceSetupListCxtReq } + }, + { + id := id_AllowedNSSAI, + criticality := reject, + value_ := { AllowedNSSAI := p_allowedNSSAI } + }, + { + id := id_UESecurityCapabilities, + criticality := reject, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + { + id := id_SecurityKey, + criticality := reject, + value_ := { SecurityKey := p_nextHopNH } + }, + { + id := id_MaskedIMEISV, + criticality := ignore, + value_ := { MaskedIMEISV := p_maskedIMEISV } + }, + { + id := id_NAS_PDU, + criticality := ignore, + value_ := { NAS_PDU := p_nasPdu } + } + } + } + } + } // End of template mw_n2_InitialContextSetupRequest + + } // End of group Receive + + } // End of group INITIAL_CONTEXT_SETUP_REQUEST + + group INITIAL_CONTEXT_SETUP_RESPONSE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.2 INITIAL CONTEXT SETUP RESPONSE + */ + template (value) SuccessfulOutcome m_n2_InitialContextSetupResponse( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceSetupListSURes p_pDUSessionResourceSetupListSURes + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSetupListSURes, + criticality := ignore, + value_ := { PDUSessionResourceSetupListSURes := p_pDUSessionResourceSetupListSURes } + } + } + } + } + } // End of template m_n2_InitialContextSetupResponse + + template (value) SuccessfulOutcome m_n2_InitialContextSetupResponse_noPDUSessionResourceSetupListSURes( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template m_n2_InitialContextSetupResponse_noPDUSessionResourceSetupListSURes + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.2 INITIAL CONTEXT SETUP RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_InitialContextSetupResponse( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceSetupListSURes p_pDUSessionResourceSetupListSURes := ? + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSetupListSURes, + criticality := ignore, + value_ := { PDUSessionResourceSetupListSURes := p_pDUSessionResourceSetupListSURes } + } + } + } + } + } // End of template mw_n2_PDUInitialContextSetupResponse + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.2 INITIAL CONTEXT SETUP RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_InitialContextSetupResponse_Failed( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceFailedToSetupListSURes p_pDUSessionResourceFailedToSetupListURes := ? + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceFailedToSetupListSURes, + criticality := ignore, + value_ := { PDUSessionResourceFailedToSetupListSURes := p_pDUSessionResourceFailedToSetupListURes } + } + } + } + } + } // End of template mw_n2_InitialContextSetupResponse_Failed + + template (present) SuccessfulOutcome mw_n2_InitialContextSetupResponse_noPDUSessionResourceSetupListSURes( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ? + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_InitialContextSetupResponse_noPDUSessionResourceSetupListSURes + + } // End of group Receive + + } // End of group INITIAL_CONTEXT_SETUP_RESPONSE + + group INITIAL_CONTEXT_SETUP_FAILURE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.3 INITIAL CONTEXT SETUP FAILURE + */ + template (value) UnsuccessfulOutcome m_n2_InitialContextSetupFailure( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) Cause p_cause := m_cause_radioNetwork(PX_CAUSE_INITIAL_SETUP_FAILURE), + in template (value) PDUSessionResourceFailedToSetupListCxtFail p_pDUSessionResourceFailedToSetupListCxtFail + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + InitialContextSetupFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + }, + { + id := id_PDUSessionResourceFailedToSetupListCxtFail, + criticality := ignore, + value_ := { PDUSessionResourceFailedToSetupListCxtFail := p_pDUSessionResourceFailedToSetupListCxtFail } + } + } + } + } + } // End of template m_n2_InitialContextSetupFailure + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.3 INITIAL CONTEXT SETUP FAILURE + */ + template (present) UnsuccessfulOutcome mw_n2_InitialContextSetupFailure( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) Cause p_cause := ?, + template (present) PDUSessionResourceFailedToSetupListCxtFail p_pDUSessionResourceFailedToSetupListCxtFail := ? + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + InitialContextSetupFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + }, + { + id := id_PDUSessionResourceFailedToSetupListCxtFail, + criticality := ignore, + value_ := { PDUSessionResourceFailedToSetupListCxtFail := p_pDUSessionResourceFailedToSetupListCxtFail } + } + } + } + } + } // End of template mw_n2_PDUInitialContextSetupFailure + + } // End of group Receive + + } // End of group INITIAL_CONTEXT_SETUP_FAILURE + + group UE_CONTEXT_RELEASE_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.4 UE CONTEXT RELEASE REQUEST + */ + template (value) InitiatingMessage m_n2_UEContextReleaseRequest( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceListCxtRelReq p_pDUSessionResourceListCxtRelReq + ) := { + procedureCode := id_UEContextReleaseRequest, + criticality := reject, + value_ := { + UEContextReleaseRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceListCxtRelReq, + criticality := reject, + value_ := { PDUSessionResourceListCxtRelReq := p_pDUSessionResourceListCxtRelReq } + } + } + } + } + } // End of template m_n2_UEContextReleaseRequest + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.4 UE CONTEXT RELEASE REQUEST + */ + template (present) InitiatingMessage mw_n2_UEContextReleaseRequest( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) Cause p_cause := ? + ) := { + procedureCode := id_UEContextReleaseRequest, + criticality := reject, + value_ := { + UEContextReleaseRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_UEContextReleaseRequest + + } // End of group Receive + + } // End of group UE_CONTEXT_RELEASE_REQUEST + + group UE_CONTEXT_RELEASE_COMMAND { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.5 UE CONTEXT RELEASE COMMAND + */ + template (value) InitiatingMessage m_n2_UEContextReleaseCommand( + in template (value) UE_NGAP_IDs p_ueNgapIds, + in template (value) Cause p_cause := m_cause_radioNetwork(PX_UE_CONTEXT_RELEASE_COMMAND_CAUSE) + ) := { + procedureCode := id_UEContextRelease, + criticality := reject, + value_ := { + UEContextReleaseCommand := { + protocolIEs := { + { + id := id_UE_NGAP_IDs, + criticality := reject, + value_ := { UE_NGAP_IDs := p_ueNgapIds } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_UEContextReleaseCommand + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.5 UE CONTEXT RELEASE COMMAND + */ + template (present) InitiatingMessage mw_n2_UEContextReleaseCommand( + template (present) UE_NGAP_IDs p_ueNgapIds := ?, + template (present) Cause p_cause := ? + ) := { + procedureCode := id_UEContextRelease, + criticality := reject, + value_ := { + UEContextReleaseCommand := { + protocolIEs := { + { + id := id_UE_NGAP_IDs, + criticality := reject, + value_ := { UE_NGAP_IDs := p_ueNgapIds } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_UEContextReleaseCommand + + } // End of group Receive + + } // End of group UE_CONTEXT_RELEASE_COMMAND + + group UE_CONTEXT_RELEASE_COMPLETE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.6 UE CONTEXT RELEASE COMPLETE + */ + template (value) SuccessfulOutcome m_n2_UEContextReleaseComplete( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceSetupListSURes p_pDUSessionResourceSetupListSURes + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSetupListSURes, + criticality := reject, + value_ := { PDUSessionResourceSetupListSURes := p_pDUSessionResourceSetupListSURes } + } + } + } + } + } // End of template m_n2_UEContextReleaseComplete + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.6 UE CONTEXT RELEASE COMPLETE + */ + template (present) SuccessfulOutcome mw_n2_UEContextReleaseComplete( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceSetupListSURes p_pDUSessionResourceSetupListSURes := ? + ) := { + procedureCode := id_InitialContextSetup, + criticality := reject, + value_ := { + PDUSessionResourceSetupResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSetupListSURes, + criticality := reject, + value_ := { PDUSessionResourceSetupListSURes := p_pDUSessionResourceSetupListSURes } + } + } + } + } + } // End of template mw_n2_UEContextReleaseComplete + + } // End of group Receive + + } // End of group UE_CONTEXT_RELEASE_COMPLETE + + group UE_CONTEXT_MODIFICATION_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.7 UE CONTEXT MODIFICATION REQUEST + */ + template (value) InitiatingMessage m_n2_UEContextModificationRequest( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_UEContextModification, + criticality := reject, + value_ := { + UEContextModificationRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template m_n2_UEContextModificationRequest + + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.7 UE CONTEXT MODIFICATION REQUEST + */ + template (value) InitiatingMessage m_n2_UEContextModificationRequest_optional1( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH, + in template (value) UESecurityCapabilities p_uESecurityCapabilities := m_uESecurityCapabilities + ) := { + procedureCode := id_UEContextModification, + criticality := reject, + value_ := { + UEContextModificationRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_SecurityKey, + criticality := reject, + value_ := { SecurityKey := p_nextHopNH } + }, + { + id := id_UESecurityCapabilities, + criticality := reject, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + } + } + } + } + } // End of template m_n2_UEContextModificationRequest_optional1 + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.7 UE CONTEXT MODIFICATION REQUEST + */ + template (value) InitiatingMessage m_n2_UEContextModificationRequest_optional2( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) RANPagingPriority p_rANPagingPriority := 1, // RAN_Paging_Priority // TODO: do we need PIXIT here? + in template (value) IndexToRFSP p_indexToRFSP := PX_Index_to_RAT_Frequency_Selection_Priority, + in template (value) UEAggregateMaximumBitRate p_uEAggregateMaximumBitRate, // UE_Aggregate_Maximum_Bit_Rate containing + in template (value) UESecurityCapabilities p_uESecurityCapabilities, // UE_Security_Capabilities containing + in template (value) EmergencyFallbackIndicator p_emergencyFallbackIndicator, // Emergency_Fallback_Indicator, + in template (value) GUAMI p_gUAMI, // New_GUAMI containing + in template (value) IAB_Authorized p_iAB_Authorized, // IAB_Authorized, + in template (value) PC5QoSParameters p_pC5QoSParameters, // PC5_QoS_Parameters containing + in template (value) UERadioCapabilityID p_uERadioCapabilityID := PX_U_E_RADIO_CAPABILITY_ID, // UE_Radio_Capability_ID, + in template (value) RGLevelWirelineAccessCharacteristics p_rGLevelWirelineAccessCharacteristics := '00'O // RG_Level_Wireline_Access_Characteristics // TODO: do we need a PIXIT here? + ) := { + procedureCode := id_UEContextModification, + criticality := reject, + value_ := { + UEContextModificationRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + // in template (value) RANPagingPriority p_rANPagingPriority, // RAN_Paging_Priority + { + id := id_RANPagingPriority, + criticality := ignore, + value_ := { RANPagingPriority := p_rANPagingPriority } + }, + // in template (value) IndexToRFSP p_indexToRFSP, // Index_to_RAT_Frequency_Selection_Priority, + { + id := id_IndexToRFSP, + criticality := ignore, + value_ := { IndexToRFSP := p_indexToRFSP } + }, + // in template (value) UEAggregateMaximumBitRate p_uEAggregateMaximumBitRate, // UE_Aggregate_Maximum_Bit_Rate containing + { + id := id_UEAggregateMaximumBitRate, + criticality := ignore, + value_ := { UEAggregateMaximumBitRate := p_uEAggregateMaximumBitRate } + }, + // in template (value) UESecurityCapabilities p_uESecurityCapabilities, // UE_Security_Capabilities containing + { + id := id_UESecurityCapabilities, + criticality := reject, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + // in template (value) EmergencyFallbackIndicator p_emergencyFallbackIndicator, // Emergency_Fallback_Indicator, + { + id := id_EmergencyFallbackIndicator, + criticality := reject, + value_ := { EmergencyFallbackIndicator := p_emergencyFallbackIndicator } + }, + // in template (value) GUAMI p_gUAMI, // New_GUAMI containing + { + id := id_GUAMI, + criticality := reject, + value_ := { GUAMI := p_gUAMI } + }, + // in template (value) IAB_Authorized p_iAB_Authorized, // IAB_Authorized, + { + id := id_IAB_Authorized, + criticality := ignore, + value_ := { IAB_Authorized := p_iAB_Authorized } + }, + // in template (value) PC5QoSParameters p_pC5QoSParameters, // PC5_QoS_Parameters containing + { + id := id_PC5QoSParameters, + criticality := ignore, + value_ := { PC5QoSParameters := p_pC5QoSParameters } + }, + // in template (value) UERadioCapabilityID p_uERadioCapabilityID := PX_U_E_RADIO_CAPABILITY_ID, // UE_Radio_Capability_ID, + { + id := id_UERadioCapabilityID, + criticality := reject, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + }, + // in template (value) RGLevelWirelineAccessCharacteristics p_rGLevelWirelineAccessCharacteristics // RG_Level_Wireline_Access_Characteristics + { + id := id_RGLevelWirelineAccessCharacteristics, + criticality := ignore, + value_ := { RGLevelWirelineAccessCharacteristics := p_rGLevelWirelineAccessCharacteristics } + } + } + } + } + } // End of template m_n2_UEContextModificationRequest_optional2 + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.7 UE CONTEXT MODIFICATION REQUEST + */ + template (present) InitiatingMessage mw_n2_UEContextModificationRequest( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ? + ) := { + procedureCode := id_UEContextModification, + criticality := reject, + value_ := { + UEContextModificationRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_UEContextModificationRequest + + } // End of group Receive + + } // End of group UE_CONTEXT_MODIFICATION_REQUEST + + group UE_CONTEXT_MODIFICATION_RESPONSE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.8 UE CONTEXT MODIFICATION RESPONSE + */ + template (value) SuccessfulOutcome m_n2_UEContexModificationResponse( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_UEContextModification, + criticality := reject, + value_ := { + UEContextModificationResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template m_n2_UEContexModificationResponse + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.8 UE CONTEXT MODIFICATION RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_UEContexModificationResponse( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ? + ) := { + procedureCode := id_UEContextModification, + criticality := reject, + value_ := { + UEContextModificationResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_UEContexModificationResponse + + } // End of group Receive + + } // End of group UE_CONTEXT_MODIFICATION_RESPONSE + + group UE_CONTEXT_MODIFICATION_FAILURE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.9 UE CONTEXT MODIFICATION FAILURE + */ + template (value) UnsuccessfulOutcome m_n2_UEContextModificationFailure( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) Cause p_cause := m_cause_radioNetwork(PX_CAUSE_UE_CONTEXT_MODIFICATION_FAILURE) + ) := { + procedureCode := id_UEContextModification, + criticality := reject, + value_ := { + UEContextModificationFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_UEContextModificationFailure + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.9 UE CONTEXT MODIFICATION FAILURE + */ + template (present) UnsuccessfulOutcome mw_n2_UEContextModificationFailure( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) Cause p_cause := ? + ) := { + procedureCode := id_UEContextModification, + criticality := reject, + value_ := { + UEContextModificationFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_UEContextModificationFailure + + } // End of group Receive + + } // End of group UE_CONTEXT_MODIFICATION_FAILURE + + group RRC_INACTIVE_TRANSITION_REPORT{ + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.10 RRC INACTIVE TRANSITION REPORT + */ + template (value) InitiatingMessage m_n2_RRCInactiveTransitionReport( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) RRCState p_rrcState := inactive, + in template (value) UserLocationInformation p_userLocationInformation + ) := { + procedureCode := id_RRCInactiveTransitionReport, + criticality := reject, + value_ := { + RRCInactiveTransitionReport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_RRCState, + criticality := ignore, + value_ := { RRCState := p_rrcState } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + } + } + } + } + } // End of template m_n2_RRCInactiveTransitionReport + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.10 RRC INACTIVE TRANSITION REPORT + */ + template (present) InitiatingMessage mw_n2_RRCInactiveTransitionReport( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) RRCState p_rrcState := ?, + template (present) UserLocationInformation p_userLocationInformation := ? + ) := { + procedureCode := id_RRCInactiveTransitionReport, + criticality := reject, + value_ := { + RRCInactiveTransitionReport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_RRCState, + criticality := ignore, + value_ := { RRCState := p_rrcState } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + } + } + } + } + } // End of template mw_n2_RRCInactiveTransitionReport + + } // End of group Receive + + } // End of group RRC_INACTIVE_TRANSITION_REPORT + + group CONNECTION_ESTABLISHMENT_INDICATION { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.11 CONNECTION ESTABLISHMENT INDICATION + */ + template (value) InitiatingMessage m_n2_ConnectionEstablishmentIndication( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_ConnectionEstablishmentIndication, + criticality := reject, + value_ := { + ConnectionEstablishmentIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template m_n2_ConnectionEstablishmentIndication + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.10 9.2.2.11 CONNECTION ESTABLISHMENT INDICATION + */ + template (present) InitiatingMessage mw_n2_ConnectionEstablishmentIndication( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ? + ) := { + procedureCode := id_ConnectionEstablishmentIndication, + criticality := reject, + value_ := { + ConnectionEstablishmentIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_ConnectionEstablishmentIndication + + } // End of group Receive + + } // End of group CONNECTION_ESTABLISHMENT_INDICATION + + group AMF_CP_RELOCATION_INDICATION { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.12 AMF CP RELOCATION INDICATION + */ + template (value) InitiatingMessage m_n2_AMFCPRelocationIndication( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_AMFCPRelocationIndication, + criticality := reject, + value_ := { + AMFCPRelocationIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template m_n2_AMFCPRelocationIndication + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.12 AMF CP RELOCATION INDICATION + */ + template (present) InitiatingMessage mw_n2_AMFCPRelocationIndication( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ? + ) := { + procedureCode := id_AMFCPRelocationIndication, + criticality := reject, + value_ := { + AMFCPRelocationIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_AMFCPRelocationIndication + + } // End of group Receive + + } // End of group AMF_CP_RELOCATION_INDICATION + + group RAN_CP_RELOCATION_INDICATION { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.13 RAN CP RELOCATION INDICATION + */ + template (value) InitiatingMessage m_n2_RANCPRelocationIndication( + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) FiveG_S_TMSI p_fiveG_S_TMSI, + in template (value) EUTRA_CGI p_eUTRA_CGI, + in template (value) TAI p_tAI, + in template (value) UL_CP_SecurityInformation p_uL_CP_SecurityInformation + ) := { + procedureCode := id_RANCPRelocationIndication, + criticality := reject, + value_ := { + RANCPRelocationIndication := { + protocolIEs := { + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_FiveG_S_TMSI, + criticality := reject, + value_ := { FiveG_S_TMSI := p_fiveG_S_TMSI } + }, + { + id := id_EUTRA_CGI, + criticality := ignore, + value_ := { EUTRA_CGI := p_eUTRA_CGI } + }, + { + id := id_TAI, + criticality := ignore, + value_ := { TAI := p_tAI } + }, + { + id := id_UL_CP_SecurityInformation, + criticality := ignore, + value_ := { UL_CP_SecurityInformation := p_uL_CP_SecurityInformation } + } + } + } + } + } // End of template m_n2_RANCPRelocationIndication + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.13 RAN CP RELOCATION INDICATION + */ + template (present) InitiatingMessage mw_n2_RANCPRelocationIndication( + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) FiveG_S_TMSI p_fiveG_S_TMSI := ?, + template (present) EUTRA_CGI p_eUTRA_CGI := ?, + template (present) TAI p_tAI := ?, + template (present) UL_CP_SecurityInformation p_uL_CP_SecurityInformation + ) := { + procedureCode := id_RANCPRelocationIndication, + criticality := reject, + value_ := { + RANCPRelocationIndication := { + protocolIEs := { + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_FiveG_S_TMSI, + criticality := reject, + value_ := { FiveG_S_TMSI := p_fiveG_S_TMSI } + }, + { + id := id_EUTRA_CGI, + criticality := ignore, + value_ := { EUTRA_CGI := p_eUTRA_CGI } + }, + { + id := id_TAI, + criticality := ignore, + value_ := { TAI := p_tAI } + }, + { + id := id_UL_CP_SecurityInformation, + criticality := reject, + value_ := { UL_CP_SecurityInformation := p_uL_CP_SecurityInformation } + } + } + } + } + } // End of template mw_n2_RANCPRelocationIndication + + } // End of group Receive + + } // End of group RAN_CP_RELOCATION_INDICATION + + group RETRIEVE_UE_INFORMATION { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.14 RETRIEVE UE INFORMATION + */ + template (value) InitiatingMessage m_n2_RetrieveUEInformation( + in template (value) FiveG_S_TMSI p_fiveG_S_TMSI + ) := { + procedureCode := id_RetrieveUEInformation, + criticality := reject, + value_ := { + RetrieveUEInformation := { + protocolIEs := { + { + id := id_FiveG_S_TMSI, + criticality := reject, + value_ := { FiveG_S_TMSI := p_fiveG_S_TMSI } + } + } + } + } + } // End of template m_n2_RetrieveUEInformation + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.14 RETRIEVE UE INFORMATION + */ + template (present) InitiatingMessage mw_n2_RetrieveUEInformation( + template (present) FiveG_S_TMSI p_fiveG_S_TMSI := ? + ) := { + procedureCode := id_RetrieveUEInformation, + criticality := reject, + value_ := { + RetrieveUEInformation := { + protocolIEs := { + { + id := id_FiveG_S_TMSI, + criticality := reject, + value_ := { FiveG_S_TMSI := p_fiveG_S_TMSI } + } + } + } + } + } // End of template mw_n2_RetrieveUEInformation + + } // End of group Receive + + } // End of group RETRIEVE_UE_INFORMATION + + group UE_INFORMATION_TRANSFER { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.15 UE INFORMATION TRANSFER + */ + template (value) InitiatingMessage m_n2_UEInformationTransfer( + in template (value) FiveG_S_TMSI p_fiveG_S_TMSI + ) := { + procedureCode := id_UEInformationTransfer, + criticality := reject, + value_ := { + UEInformationTransfer := { + protocolIEs := { + { + id := id_FiveG_S_TMSI, + criticality := reject, + value_ := { FiveG_S_TMSI := p_fiveG_S_TMSI } + } + } + } + } + } // End of template m_n2_UEInformationTransfer + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.15 UE INFORMATION TRANSFER + */ + template (present) InitiatingMessage mw_n2_UEInformationTransfer( + template (present) FiveG_S_TMSI p_fiveG_S_TMSI := ? + ) := { + procedureCode := id_UEInformationTransfer, + criticality := reject, + value_ := { + UEInformationTransfer := { + protocolIEs := { + { + id := id_FiveG_S_TMSI, + criticality := reject, + value_ := { FiveG_S_TMSI := p_fiveG_S_TMSI } + } + } + } + } + } // End of template mw_n2_UEInformationTransfer + + } // End of group Receive + + } // End of group UE_INFORMATION_TRANSFER + + group UE_CONTEXT_SUSPEND_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.16 UE CONTEXT SUSPEND REQUEST + */ + template (value) InitiatingMessage m_n2_UEContextSuspendRequest( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceSuspendListSUSReq p_pDUSessionResourceSuspendListSUSReq + ) := { + procedureCode := id_UEContextSuspend, + criticality := reject, + value_ := { + UEContextSuspendRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSuspendListSUSReq, + criticality := reject, + value_ := { PDUSessionResourceSuspendListSUSReq := p_pDUSessionResourceSuspendListSUSReq } + } + } + } + } + } // End of template m_n2_UEContextSuspendRequest + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.16 UE CONTEXT SUSPEND REQUEST + */ + template (present) InitiatingMessage mw_n2_UEContextSuspendRequest( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceSuspendListSUSReq p_pDUSessionResourceSuspendListSUSReq := ? + ) := { + procedureCode := id_UEContextSuspend, + criticality := reject, + value_ := { + UEContextSuspendRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSuspendListSUSReq, + criticality := reject, + value_ := { PDUSessionResourceSuspendListSUSReq := p_pDUSessionResourceSuspendListSUSReq } + } + } + } + } + } // End of template mw_n2_UEContextSuspendRequest + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.16 UE CONTEXT SUSPEND REQUEST + */ + template (present) InitiatingMessage mw_n2_UEContextSuspendRequest_noPDUSession( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ? + ) := { + procedureCode := id_UEContextSuspend, + criticality := reject, + value_ := { + UEContextSuspendRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_UEContextSuspendRequest_noPDUSession + + } // End of group Receive + + } // End of group UE_CONTEXT_SUSPEND_REQUEST + + group UE_CONTEXT_SUSPEND_RESPONSE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.17 UE CONTEXT SUSPEND RESPONSE + */ + template (value) SuccessfulOutcome m_n2_UEContextSuspendResponse( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_UEContextSuspend, + criticality := reject, + value_ := { + UEContextSuspendResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template m_n2_UEContextSuspendResponse + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.17 UE CONTEXT SUSPEND RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_UEContextSuspendResponse( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ? + ) := { + procedureCode := id_UEContextSuspend, + criticality := reject, + value_ := { + UEContextSuspendResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_UEContextSuspendResponse + + } // End of group Receive + + } // End of group UE_CONTEXT_SUSPEND_RESPONSE + + group UE_CONTEXT_SUSPEND_FAILURE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.18 UE CONTEXT SUSPEND FAILURE + */ + template (value) UnsuccessfulOutcome m_n2_UEContextSuspendFailure( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) Cause p_cause := m_cause_radioNetwork(PX_CAUSE_UE_CONTEXT_SUSPEND_FAILURE) + ) := { + procedureCode := id_UEContextSuspend, + criticality := reject, + value_ := { + UEContextSuspendFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_UEContextSuspendFailure + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.18 UE CONTEXT SUSPEND FAILURE + */ + template (present) UnsuccessfulOutcome mw_n2_UEContextSuspendFailure( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) Cause p_cause := ? + ) := { + procedureCode := id_UEContextSuspend, + criticality := reject, + value_ := { + UEContextSuspendFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_UEContextSuspendFailure + + } // End of group Receive + + } // End of group UE_CONTEXT_SUSPEND_FAILURE + + group UE_CONTEXT_RESUME_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.19 UE CONTEXT RESUME REQUEST + */ + template (value) InitiatingMessage m_n2_UEContextResumeRequest( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) RRCEstablishmentCause p_rRCResumeCause := PX_RRC_RESUME_CAUSE + ) := { + procedureCode := id_UEContextResume, + criticality := reject, + value_ := { + UEContextResumeRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_RRCEstablishmentCause, + criticality := ignore, + value_ := { RRCEstablishmentCause := p_rRCResumeCause } + } + } + } + } + } // End of template m_n2_UEContextResumeRequest + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.19 UE CONTEXT RESUME REQUEST + */ + template (present) InitiatingMessage mw_n2_UEContextResumeRequest( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) RRCEstablishmentCause p_rRCResumeCause := ? + ) := { + procedureCode := id_UEContextResume, + criticality := reject, + value_ := { + UEContextResumeRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_RRCEstablishmentCause, + criticality := ignore, + value_ := { RRCEstablishmentCause := p_rRCResumeCause } + } + } + } + } + } // End of template mw_n2_UEContextResumeRequest + + } // End of group Receive + + } // End of group UE_CONTEXT_RESUME_REQUEST + + group UE_CONTEXT_RESUME_RESPONSE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.20 UE CONTEXT RESUME RESPONSE + */ + template (value) SuccessfulOutcome m_n2_UEContextResumeResponse( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_UEContextResume, + criticality := reject, + value_ := { + UEContextResumeResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template m_n2_UEContextResumeResponse + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.20 UE CONTEXT RESUME RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_UEContextResumeResponse( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ? + ) := { + procedureCode := id_UEContextResume, + criticality := reject, + value_ := { + UEContextResumeResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_UEContextResumeResponse + + } // End of group Receive + + } // End of group UE_CONTEXT_RESUME_RESPONSE + + group UE_CONTEXT_RESUME_FAILURE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.21 UE CONTEXT RESUME FAILURE + */ + template (value) UnsuccessfulOutcome m_n2_UEContextResumeFailure( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) Cause p_cause := m_cause_radioNetwork(PX_CAUSE_UE_CONTEXT_RESUME_FAILURE) + ) := { + procedureCode := id_UEContextResume, + criticality := reject, + value_ := { + UEContextResumeFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_UEContextResumeFailure + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.21 UE CONTEXT RESUME FAILURE + */ + template (present) UnsuccessfulOutcome mw_n2_UEContextResumeFailure( + in template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + in template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + in template (present) Cause p_cause := ? + ) := { + procedureCode := id_UEContextResume, + criticality := reject, + value_ := { + UEContextResumeFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_UEContextResumeFailure + + } // End of group Receive + + } // End of group UE_CONTEXT_RESUME_FAILURE + + } // End of group UE_Context_Management_Messages + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3 UE Mobility Management Messages + */ + group UE_Mobility_Management_Messages{ + + group HANDOVER_REQUIRED { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.1 HANDOVER REQUIRED + */ + template (value) InitiatingMessage m_n2_HandoverRequired( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) HandoverType p_handoverType := PX_HANDOVER_TYPE, + in template (value) Cause p_cause := m_cause_radioNetwork(PX_CAUSE_HANDOVER_REQUIRED), + in template (value) TargetID p_targetID, + in template (value) PDUSessionResourceListHORqd p_pDUSessionResourceListHORqd, + in template (value) SourceToTarget_TransparentContainer p_SourceToTarget_TransparentContainer + ) := { + procedureCode := id_HandoverPreparation, + criticality := reject, + value_ := { + HandoverRequired := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_HandoverType, + criticality := reject, + value_ := { HandoverType := p_handoverType } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + }, + { + id := id_TargetID, + criticality := reject, + value_ := { TargetID := p_targetID } + }, + { + id := id_PDUSessionResourceListHORqd, + criticality := reject, + value_ := { PDUSessionResourceListHORqd := p_pDUSessionResourceListHORqd } + } + } + } + } + } // End of template m_n2_HandoverRequired + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.1 HANDOVER REQUIRED + */ + template (present) InitiatingMessage mw_n2_HandoverRequired( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) HandoverType p_handoverType := ?, + template (present) Cause p_cause := ?, + template (present) TargetID p_targetID := ?, + template (present) PDUSessionResourceListHORqd p_pDUSessionResourceListHORqd := ?, + template (present) SourceToTarget_TransparentContainer p_SourceToTarget_TransparentContainer := ? + ) := { + procedureCode := id_HandoverPreparation, + criticality := reject, + value_ := { + HandoverRequired := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_HandoverType, + criticality := reject, + value_ := { HandoverType := p_handoverType } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + }, + { + id := id_TargetID, + criticality := reject, + value_ := { TargetID := p_targetID } + }, + { + id := id_PDUSessionResourceListHORqd, + criticality := reject, + value_ := { PDUSessionResourceListHORqd := p_pDUSessionResourceListHORqd } + }, + { + id := id_SourceToTarget_TransparentContainer, + criticality := reject, + value_ := { SourceToTarget_TransparentContainer := p_SourceToTarget_TransparentContainer } + } + } + } + } + } // End of template mw_n2_HandoverRequired + + } // End of group Receive + + } // End of group HANDOVER_REQUIRED + + group HANDOVER_COMMAND { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.2 HANDOVER COMMAND + */ + template (value) SuccessfulOutcome m_n2_HandoverCommand( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) HandoverType p_handoverType := PX_HANDOVER_TYPE, + in template (value) PDUSessionResourceHandoverList p_pDUSessionResourceHandoverList + ) := { + procedureCode := id_HandoverPreparation, + criticality := reject, + value_ := { + HandoverCommand := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_HandoverType, + criticality := reject, + value_ := { HandoverType := p_handoverType } + }, + { + id := id_PDUSessionResourceHandoverList, + criticality := ignore, + value_ := { PDUSessionResourceHandoverList := p_pDUSessionResourceHandoverList } + } + } + } + } + } // End of template m_n2_HandoverCommand + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.2 HANDOVER COMMAND + */ + template (present) SuccessfulOutcome mw_n2_HandoverCommand( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) HandoverType p_handoverType := ?, + template (present) PDUSessionResourceHandoverList p_pDUSessionResourceHandoverList := ? + ) := { + procedureCode := id_HandoverPreparation, + criticality := reject, + value_ := { + HandoverCommand := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_HandoverType, + criticality := reject, + value_ := { HandoverType := p_handoverType } + }, + { + id := id_PDUSessionResourceHandoverList, + criticality := ignore, + value_ := { PDUSessionResourceHandoverList := p_pDUSessionResourceHandoverList } + } + } + } + } + } // End of template mw_n2_HandoverCommand + + } // End of group Receive + + } // End of group HANDOVER_COMMAND + + group HANDOVER_PREPARATION_FAILURE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.3 HANDOVER PREPARATION FAILURE + */ + template (value) UnsuccessfulOutcome m_n2_HandoverPreparationFailure( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) Cause p_cause := m_cause_radioNetwork(PX_CAUSE_HANDOVER_PREPARATION_FAILURE) + ) := { + procedureCode := id_HandoverPreparation, + criticality := reject, + value_ := { + HandoverPreparationFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_HandoverPreparationFailure + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.3 HANDOVER PREPARATION FAILURE + */ + template (present) UnsuccessfulOutcome mw_n2_HandoverPreparationFailure( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) Cause p_cause := ? + ) := { + procedureCode := id_HandoverPreparation, + criticality := reject, + value_ := { + HandoverPreparationFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_HandoverPreparationFailure + + } // End of group Receive + + } // End of group HANDOVER_PREPARATION_FAILURE + + group HANDOVER_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.4 HANDOVER REQUEST + */ + template (value) InitiatingMessage m_n2_HandoverRequest( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) HandoverType p_handoverType := PX_HANDOVER_TYPE, + in template (value) Cause p_cause := m_cause_radioNetwork(PX_CAUSE_HANDOVER_REQUIRED), + in template (value) UEAggregateMaximumBitRate p_uEAggregateMaximumBitRate, + in template (value) UESecurityCapabilities p_uESecurityCapabilities, + in template (value) SecurityContext p_securityContext, + in template (value) PDUSessionResourceSetupListHOReq p_pDUSessionResourceSetupListHOReq, + in template (value) AllowedNSSAI p_allowedNSSAI, + in template (value) SourceToTarget_TransparentContainer p_SourceToTarget_TransparentContainer, + in template (value) GUAMI p_gUAMI + ) := { + procedureCode := id_HandoverResourceAllocation, + criticality := reject, + value_ := { + HandoverRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_HandoverType, + criticality := reject, + value_ := { HandoverType := p_handoverType } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + }, + { + id := id_UEAggregateMaximumBitRate, + criticality := reject, + value_ := { UEAggregateMaximumBitRate := p_uEAggregateMaximumBitRate } + }, + { + id := id_UESecurityCapabilities, + criticality := reject, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + { + id := id_SecurityContext, + criticality := reject, + value_ := { SecurityContext := p_securityContext } + }, + { + id := id_PDUSessionResourceListHORqd, + criticality := reject, + value_ := { PDUSessionResourceSetupListHOReq := p_pDUSessionResourceSetupListHOReq } + }, + { + id := id_AllowedNSSAI, + criticality := reject, + value_ := { AllowedNSSAI := p_allowedNSSAI } + }, + { + id := id_SourceToTarget_TransparentContainer, + criticality := reject, + value_ := { SourceToTarget_TransparentContainer := p_SourceToTarget_TransparentContainer } + }, + { + id := id_GUAMI, + criticality := reject, + value_ := { GUAMI := p_gUAMI } + } + } + } + } + } // End of template m_n2_HandoverRequest + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.4 HANDOVER REQUEST + */ + template (value) InitiatingMessage m_n2_HandoverRequest_full( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) HandoverType p_handoverType := PX_HANDOVER_TYPE, + in template (value) Cause p_cause := m_cause_radioNetwork(PX_CAUSE_HANDOVER_REQUIRED), + in template (value) UEAggregateMaximumBitRate p_uEAggregateMaximumBitRate, + in template (value) UESecurityCapabilities p_uESecurityCapabilities, + in template (value) SecurityContext p_securityContext, + in template (value) PDUSessionResourceSetupListHOReq p_pDUSessionResourceSetupListHOReq, + in template (value) AllowedNSSAI p_allowedNSSAI, + in template (value) SourceToTarget_TransparentContainer p_SourceToTarget_TransparentContainer, + in template (value) GUAMI p_gUAMI, + in template (value) CoreNetworkAssistanceInformationForInactive p_coreNetworkAssistanceInformationForInactive, + in template (value) NewSecurityContextInd p_newSecurityContextInd, + in template (value) NAS_PDU p_nAS_PDU, + in template (value) TraceActivation p_traceActivation, + in template (value) RRCInactiveTransitionReportRequest p_rRCInactiveTransitionReportRequest, + in template (value) RedirectionVoiceFallback p_redirectionVoiceFallback, + in template (value) CNAssistedRANTuning p_cNAssistedRANTuning, + in template (value) SRVCCOperationPossible p_sRVCCOperationPossible, + in template (value) Enhanced_CoverageRestriction p_enhanced_CoverageRestriction, + in template (value) UE_DifferentiationInfo p_uE_DifferentiationInfo, + in template (value) NRV2XServicesAuthorized p_nRV2XServicesAuthorized, + in template (value) LTEV2XServicesAuthorized p_lTEV2XServicesAuthorized, + in template (value) NRUESidelinkAggregateMaximumBitrate p_nRUESidelinkAggregateMaximumBitrate, + in template (value) LTEUESidelinkAggregateMaximumBitrate p_lTEUESidelinkAggregateMaximumBitrate, + in template (value) PC5QoSParameters p_pC5QoSParameters, + in template (value) CEmodeBrestricted p_cEmodeBrestricted, + in template (value) UE_UP_CIoT_Support p_uE_UP_CIoT_Support, + in template (value) MDTPLMNList p_mDTPLMNList, + in template (value) UERadioCapabilityID p_uERadioCapabilityID := PX_U_E_RADIO_CAPABILITY_ID, + in template (value) Extended_ConnectedTime p_extended_ConnectedTime := PX_EXTENDED_CONNECTED_TIME + ) modifies m_n2_HandoverRequest := { + procedureCode := id_HandoverResourceAllocation, + criticality := reject, + value_ := { + HandoverRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_HandoverType, + criticality := reject, + value_ := { HandoverType := p_handoverType } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + }, + { + id := id_UEAggregateMaximumBitRate, + criticality := reject, + value_ := { UEAggregateMaximumBitRate := p_uEAggregateMaximumBitRate } + }, + { + id := id_UESecurityCapabilities, + criticality := reject, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + { + id := id_SecurityContext, + criticality := reject, + value_ := { SecurityContext := p_securityContext } + }, + { + id := id_PDUSessionResourceListHORqd, + criticality := reject, + value_ := { PDUSessionResourceSetupListHOReq := p_pDUSessionResourceSetupListHOReq } + }, + { + id := id_AllowedNSSAI, + criticality := reject, + value_ := { AllowedNSSAI := p_allowedNSSAI } + }, + { + id := id_SourceToTarget_TransparentContainer, + criticality := reject, + value_ := { SourceToTarget_TransparentContainer := p_SourceToTarget_TransparentContainer } + }, + { + id := id_GUAMI, + criticality := reject, + value_ := { GUAMI := p_gUAMI } + }, + { + id := id_CoreNetworkAssistanceInformationForInactive, + criticality := ignore, + value_ := { CoreNetworkAssistanceInformationForInactive := p_coreNetworkAssistanceInformationForInactive } + }, + { + id := id_NewSecurityContextInd, + criticality := reject, + value_ := { NewSecurityContextInd := p_newSecurityContextInd } + }, + { + id := id_NASC, + criticality := reject, + value_ := { NAS_PDU := p_nAS_PDU } + }, + { + id := id_TraceActivation, + criticality := ignore, + value_ := { TraceActivation := p_traceActivation } + }, + { + id := id_RRCInactiveTransitionReportRequest, + criticality := ignore, + value_ := { RRCInactiveTransitionReportRequest := p_rRCInactiveTransitionReportRequest } + }, + { + id := id_RedirectionVoiceFallback, + criticality := ignore, + value_ := { RedirectionVoiceFallback := p_redirectionVoiceFallback } + }, + { + id := id_CNAssistedRANTuning, + criticality := ignore, + value_ := { CNAssistedRANTuning := p_cNAssistedRANTuning } + }, + { + id := id_SRVCCOperationPossible, + criticality := ignore, + value_ := { SRVCCOperationPossible := p_sRVCCOperationPossible } + }, + { + id := id_Enhanced_CoverageRestriction, + criticality := ignore, + value_ := { Enhanced_CoverageRestriction := p_enhanced_CoverageRestriction } + }, + { + id := id_UE_DifferentiationInfo, + criticality := ignore, + value_ := { UE_DifferentiationInfo := p_uE_DifferentiationInfo } + }, + { + id := id_NRV2XServicesAuthorized, + criticality := ignore, + value_ := { NRV2XServicesAuthorized := p_nRV2XServicesAuthorized } + }, + { + id := id_LTEV2XServicesAuthorized, + criticality := ignore, + value_ := { LTEV2XServicesAuthorized := p_lTEV2XServicesAuthorized } + }, + { + id := id_NRUESidelinkAggregateMaximumBitrate, + criticality := ignore, + value_ := { NRUESidelinkAggregateMaximumBitrate := p_nRUESidelinkAggregateMaximumBitrate } + }, + { + id := id_LTEUESidelinkAggregateMaximumBitrate, + criticality := ignore, + value_ := { LTEUESidelinkAggregateMaximumBitrate := p_lTEUESidelinkAggregateMaximumBitrate } + }, + { + id := id_PC5QoSParameters, + criticality := ignore, + value_ := { PC5QoSParameters := p_pC5QoSParameters } + }, + { + id := id_CEmodeBrestricted, + criticality := ignore, + value_ := { CEmodeBrestricted := p_cEmodeBrestricted } + }, + { + id := id_UE_UP_CIoT_Support, + criticality := ignore, + value_ := { UE_UP_CIoT_Support := p_uE_UP_CIoT_Support } + }, + { + id := id_ManagementBasedMDTPLMNList, + criticality := ignore, + value_ := { MDTPLMNList := p_mDTPLMNList } + }, + { + id := id_UERadioCapabilityID, + criticality := ignore, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + }, + { + id := id_Extended_ConnectedTime, + criticality := ignore, + value_ := { Extended_ConnectedTime := p_extended_ConnectedTime } + } + } + } + } + } // End of template m_n2_HandoverRequest + + } // End of group Send + + + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.4 HANDOVER REQUEST + */ + template (present) InitiatingMessage mw_n2_HandoverRequest( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) HandoverType p_handoverType := PX_HANDOVER_TYPE, + template (present) Cause p_cause := m_cause_radioNetwork(PX_CAUSE_HANDOVER_REQUIRED), + template (present) UEAggregateMaximumBitRate p_uEAggregateMaximumBitRate := ?, + template (present) UESecurityCapabilities p_uESecurityCapabilities := ?, + template (present) SecurityContext p_securityContext := ?, + template (present) PDUSessionResourceSetupListHOReq p_pDUSessionResourceSetupListHOReq := ?, + template (present) AllowedNSSAI p_allowedNSSAI := ?, + template (present) SourceToTarget_TransparentContainer p_SourceToTarget_TransparentContainer := ?, + template (present) GUAMI p_gUAMI := ? + ) := { + procedureCode := id_HandoverResourceAllocation, + criticality := reject, + value_ := { + HandoverRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_HandoverType, + criticality := reject, + value_ := { HandoverType := p_handoverType } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + }, + { + id := id_UEAggregateMaximumBitRate, + criticality := reject, + value_ := { UEAggregateMaximumBitRate := p_uEAggregateMaximumBitRate } + }, + { + id := id_UESecurityCapabilities, + criticality := reject, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + { + id := id_SecurityContext, + criticality := reject, + value_ := { SecurityContext := p_securityContext } + }, + { + id := id_PDUSessionResourceListHORqd, + criticality := reject, + value_ := { PDUSessionResourceSetupListHOReq := p_pDUSessionResourceSetupListHOReq } + }, + { + id := id_AllowedNSSAI, + criticality := reject, + value_ := { AllowedNSSAI := p_allowedNSSAI } + }, + { + id := id_SourceToTarget_TransparentContainer, + criticality := reject, + value_ := { SourceToTarget_TransparentContainer := p_SourceToTarget_TransparentContainer } + }, + { + id := id_GUAMI, + criticality := reject, + value_ := { GUAMI := p_gUAMI } + } + } + } + } + } // End of template mw_n2_HandoverRequest + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.4 HANDOVER REQUEST + */ + template (present) InitiatingMessage mw_n2_HandoverRequest_full( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) HandoverType p_handoverType := PX_HANDOVER_TYPE, + template (present) Cause p_cause := m_cause_radioNetwork(PX_CAUSE_HANDOVER_REQUIRED), + template (present) UEAggregateMaximumBitRate p_uEAggregateMaximumBitRate := ?, + template (present) UESecurityCapabilities p_uESecurityCapabilities := ?, + template (present) SecurityContext p_securityContext := ?, + template (present) PDUSessionResourceSetupListHOReq p_pDUSessionResourceSetupListHOReq := ?, + template (present) AllowedNSSAI p_allowedNSSAI := ?, + template (present) SourceToTarget_TransparentContainer p_SourceToTarget_TransparentContainer := ?, + template (present) GUAMI p_gUAMI := ?, + template (present) CoreNetworkAssistanceInformationForInactive p_coreNetworkAssistanceInformationForInactive := ?, + template (present) NewSecurityContextInd p_newSecurityContextInd := ?, + template (present) NAS_PDU p_nAS_PDU := ?, + template (present) TraceActivation p_traceActivation := ?, + template (present) RRCInactiveTransitionReportRequest p_rRCInactiveTransitionReportRequest := ?, + template (present) RedirectionVoiceFallback p_redirectionVoiceFallback := ?, + template (present) CNAssistedRANTuning p_cNAssistedRANTuning := ?, + template (present) SRVCCOperationPossible p_sRVCCOperationPossible := ?, + template (present) Enhanced_CoverageRestriction p_enhanced_CoverageRestriction := ?, + template (present) UE_DifferentiationInfo p_uE_DifferentiationInfo := ?, + template (present) NRV2XServicesAuthorized p_nRV2XServicesAuthorized := ?, + template (present) LTEV2XServicesAuthorized p_lTEV2XServicesAuthorized := ?, + template (present) NRUESidelinkAggregateMaximumBitrate p_nRUESidelinkAggregateMaximumBitrate := ?, + template (present) LTEUESidelinkAggregateMaximumBitrate p_lTEUESidelinkAggregateMaximumBitrate := ?, + template (present) PC5QoSParameters p_pC5QoSParameters := ?, + template (present) CEmodeBrestricted p_cEmodeBrestricted := ?, + template (present) UE_UP_CIoT_Support p_uE_UP_CIoT_Support := ?, + template (present) MDTPLMNList p_mDTPLMNList := ?, + template (present) UERadioCapabilityID p_uERadioCapabilityID := PX_U_E_RADIO_CAPABILITY_ID, + template (present) Extended_ConnectedTime p_extended_ConnectedTime := PX_EXTENDED_CONNECTED_TIME + ) := { + procedureCode := id_HandoverResourceAllocation, + criticality := reject, + value_ := { + HandoverRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_HandoverType, + criticality := reject, + value_ := { HandoverType := p_handoverType } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + }, + { + id := id_UEAggregateMaximumBitRate, + criticality := reject, + value_ := { UEAggregateMaximumBitRate := p_uEAggregateMaximumBitRate } + }, + { + id := id_CoreNetworkAssistanceInformationForInactive, + criticality := ignore, + value_ := { CoreNetworkAssistanceInformationForInactive := p_coreNetworkAssistanceInformationForInactive } + }, + { + id := id_UEAggregateMaximumBitRate, + criticality := reject, + value_ := { UEAggregateMaximumBitRate := p_uEAggregateMaximumBitRate } + }, + { + id := id_UESecurityCapabilities, + criticality := reject, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + { + id := id_SecurityContext, + criticality := reject, + value_ := { SecurityContext := p_securityContext } + }, + { + id := id_NewSecurityContextInd, + criticality := reject, + value_ := { NewSecurityContextInd := p_newSecurityContextInd } + }, + { + id := id_NASC, + criticality := reject, + value_ := { NAS_PDU := p_nAS_PDU } + }, + { + id := id_PDUSessionResourceListHORqd, + criticality := reject, + value_ := { PDUSessionResourceSetupListHOReq := p_pDUSessionResourceSetupListHOReq } + }, + { + id := id_AllowedNSSAI, + criticality := reject, + value_ := { AllowedNSSAI := p_allowedNSSAI } + }, + { + id := id_TraceActivation, + criticality := ignore, + value_ := { TraceActivation := p_traceActivation } + }, + { + id := id_SourceToTarget_TransparentContainer, + criticality := reject, + value_ := { SourceToTarget_TransparentContainer := p_SourceToTarget_TransparentContainer } + }, + { + id := id_RRCInactiveTransitionReportRequest, + criticality := ignore, + value_ := { RRCInactiveTransitionReportRequest := p_rRCInactiveTransitionReportRequest } + }, + { + id := id_GUAMI, + criticality := reject, + value_ := { GUAMI := p_gUAMI } + }, + { + id := id_RedirectionVoiceFallback, + criticality := ignore, + value_ := { RedirectionVoiceFallback := p_redirectionVoiceFallback } + }, + { + id := id_CNAssistedRANTuning, + criticality := ignore, + value_ := { CNAssistedRANTuning := p_cNAssistedRANTuning } + }, + { + id := id_SRVCCOperationPossible, + criticality := ignore, + value_ := { SRVCCOperationPossible := p_sRVCCOperationPossible } + }, + { + id := id_Enhanced_CoverageRestriction, + criticality := ignore, + value_ := { Enhanced_CoverageRestriction := p_enhanced_CoverageRestriction } + }, + { + id := id_UE_DifferentiationInfo, + criticality := ignore, + value_ := { UE_DifferentiationInfo := p_uE_DifferentiationInfo } + }, + { + id := id_NRV2XServicesAuthorized, + criticality := ignore, + value_ := { NRV2XServicesAuthorized := p_nRV2XServicesAuthorized } + }, + { + id := id_LTEV2XServicesAuthorized, + criticality := ignore, + value_ := { LTEV2XServicesAuthorized := p_lTEV2XServicesAuthorized } + }, + { + id := id_NRUESidelinkAggregateMaximumBitrate, + criticality := ignore, + value_ := { NRUESidelinkAggregateMaximumBitrate := p_nRUESidelinkAggregateMaximumBitrate } + }, + { + id := id_LTEUESidelinkAggregateMaximumBitrate, + criticality := ignore, + value_ := { LTEUESidelinkAggregateMaximumBitrate := p_lTEUESidelinkAggregateMaximumBitrate } + }, + { + id := id_PC5QoSParameters, + criticality := ignore, + value_ := { PC5QoSParameters := p_pC5QoSParameters } + }, + { + id := id_CEmodeBrestricted, + criticality := ignore, + value_ := { CEmodeBrestricted := p_cEmodeBrestricted } + }, + { + id := id_UE_UP_CIoT_Support, + criticality := ignore, + value_ := { UE_UP_CIoT_Support := p_uE_UP_CIoT_Support } + }, + { + id := id_ManagementBasedMDTPLMNList, + criticality := ignore, + value_ := { MDTPLMNList := p_mDTPLMNList } + }, + { + id := id_UERadioCapabilityID, + criticality := ignore, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + }, + { + id := id_Extended_ConnectedTime, + criticality := ignore, + value_ := { Extended_ConnectedTime := p_extended_ConnectedTime } + } + } + } + } + } // End of template mw_n2_HandoverRequest + + } // End of group Receive + + } // End of group HANDOVER_REQUEST + + group HANDOVER_FAILURE { + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.6 HANDOVER FAILURE + */ + template (value) UnsuccessfulOutcome m_n2_HandoverFailure( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID, + in template (value) Cause p_cause + ) := { + procedureCode := id_HandoverPreparation, + criticality := reject, + value_ := { + HandoverFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_HandoverFailure + + } + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.6 HANDOVER FAILURE + */ + template (present) UnsuccessfulOutcome mw_n2_HandoverFailure( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) Cause p_cause := ? + ) := { + procedureCode := id_HandoverPreparation, + criticality := reject, + value_ := { + HandoverFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_HandoverFailure + + } // End of group Receive + + } // End of group HANDOVER_FAILURE + + group HANDOVER_REQUEST_ACKNOWLEDGE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.5 HANDOVER REQUEST ACKNOWLEDGE + */ + template (value) SuccessfulOutcome m_n2_HandoverRequestAcknowledge( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceAdmittedList p_pDUSessionResourceAdmittedList + ) := { + procedureCode := id_HandoverResourceAllocation, + criticality := reject, + value_ := { + HandoverRequestAcknowledge := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceAdmittedList, + criticality := ignore, + value_ := { PDUSessionResourceAdmittedList := p_pDUSessionResourceAdmittedList } + } + } + } + } + } // End of template m_n2_HandoverRequestAcknowledge + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.5 HANDOVER REQUEST ACKNOWLEDGE + */ + template (present) SuccessfulOutcome mw_n2_HandoverRequestAcknowledge( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceAdmittedList p_pDUSessionResourceAdmittedList := ? + ) := { + procedureCode := id_HandoverResourceAllocation, + criticality := reject, + value_ := { + HandoverRequestAcknowledge := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceAdmittedList, + criticality := ignore, + value_ := { PDUSessionResourceAdmittedList := p_pDUSessionResourceAdmittedList } + } + } + } + } + } // End of template mw_n2_HandoverRequestAcknowledge + + } // End of group Receive + + } // End of group HANDOVER_REQUEST_ACKNOWLEDGE + + group HANDOVER_NOTIFY { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.7 HANDOVER NOTIFY + */ + template (value) InitiatingMessage m_n2_HandoverNotify( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) UserLocationInformation p_userLocationInformation + ) := { + procedureCode := id_HandoverNotification, + criticality := reject, + value_ := { + HandoverNotify := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + } + } + } + } + } // End of template m_n2_HandoverNotify + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.7 HANDOVER NOTIFY + */ + template (present) InitiatingMessage mw_n2_HandoverNotify( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) UserLocationInformation p_userLocationInformation := ? + ) := { + procedureCode := id_HandoverNotification, + criticality := reject, + value_ := { + HandoverNotify := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + } + } + } + } + } // End of template mw_n2_HandoverNotify + + } // End of group Receive + + } // End of group HANDOVER_NOTIFY + + group PATH_SWITCH_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.8 PATH SWITCH REQUEST + */ + template (value) InitiatingMessage m_n2_PathSwitchRequest( + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) UserLocationInformation p_userLocationInformation, + in template (value) UESecurityCapabilities p_uESecurityCapabilities, + in template (value) PDUSessionResourceToBeSwitchedDLList p_pDUSessionResourceToBeSwitchedDLList + ) := { + procedureCode := id_PathSwitchRequest, + criticality := reject, + value_ := { + PathSwitchRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + }, + { + id := id_UESecurityCapabilities, + criticality := ignore, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + { + id := id_PDUSessionResourceToBeSwitchedDLList, + criticality := reject, + value_ := { PDUSessionResourceToBeSwitchedDLList := p_pDUSessionResourceToBeSwitchedDLList } + } + } + } + } + } // End of template m_n2_PathSwitchRequest + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.8 PATH SWITCH REQUEST + */ + template (present) InitiatingMessage mw_n2_PathSwitchRequest( + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) UserLocationInformation p_userLocationInformation := ?, + template (present) UESecurityCapabilities p_uESecurityCapabilities := ?, + template (present) PDUSessionResourceToBeSwitchedDLList p_pDUSessionResourceToBeSwitchedDLList := ? + ) := { + procedureCode := id_PathSwitchRequest, + criticality := reject, + value_ := { + PathSwitchRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + }, + { + id := id_UESecurityCapabilities, + criticality := ignore, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }, + { + id := id_PDUSessionResourceToBeSwitchedDLList, + criticality := reject, + value_ := { PDUSessionResourceToBeSwitchedDLList := p_pDUSessionResourceToBeSwitchedDLList } + } + } + } + } + } // End of template mw_n2_PathSwitchRequest + + } // End of group Receive + + } // End of group PATH_SWITCH_REQUEST + + group PATH_SWITCH_REQUEST_ACKNOWLEDGE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.9 PATH SWITCH REQUEST ACKNOWLEDGE + */ + template (value) SuccessfulOutcome m_n2_PathSwitchRequestAcknowledge( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) SecurityContext p_securityContext, + in template (value) PDUSessionResourceSwitchedList p_pDUSessionResourceSwitchedList + ) := { + procedureCode := id_PathSwitchRequest, + criticality := reject, + value_ := { + PathSwitchRequestAcknowledge := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_SecurityContext, + criticality := reject, + value_ := { SecurityContext := p_securityContext } + }, + { + id := id_PDUSessionResourceSwitchedList, + criticality := ignore, + value_ := { PDUSessionResourceSwitchedList := p_pDUSessionResourceSwitchedList } + } + } + } + } + } // End of template m_n2_PathSwitchRequestAcknowledge + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.9 PATH SWITCH REQUEST ACKNOWLEDGE + */ + template (present) SuccessfulOutcome mw_n2_PathSwitchRequestAcknowledge( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) SecurityContext p_securityContext := ?, + template (present) PDUSessionResourceSwitchedList p_pDUSessionResourceSwitchedList := ? + ) := { + procedureCode := id_PathSwitchRequest, + criticality := reject, + value_ := { + PathSwitchRequestAcknowledge := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_SecurityContext, + criticality := reject, + value_ := { SecurityContext := p_securityContext } + }, + { + id := id_PDUSessionResourceSwitchedList, + criticality := ignore, + value_ := { PDUSessionResourceSwitchedList := p_pDUSessionResourceSwitchedList } + } + } + } + } + } // End of template mw_n2_PathSwitchRequestAcknowledge + + } // End of group Receive + + } // End of group PATH_SWITCH_REQUEST_ACKNOWLEDGE + + group PATH_SWITCH_REQUEST_FAILURE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.10 PATH SWITCH REQUEST FAILURE + */ + template (value) UnsuccessfulOutcome m_n2_PathSwitchRequestFailure( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceReleasedListPSFail p_pDUSessionResourceReleasedListPSFail + ) := { + procedureCode := id_PathSwitchRequest, + criticality := reject, + value_ := { + PathSwitchRequestFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSwitchedList, + criticality := ignore, + value_ := { PDUSessionResourceReleasedListPSFail := p_pDUSessionResourceReleasedListPSFail } + } + } + } + } + } // End of template m_n2_PathSwitchRequestFailure + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.10 PATH SWITCH REQUEST FAILURE + */ + template (present) UnsuccessfulOutcome mw_n2_PathSwitchRequestFailure( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) PDUSessionResourceReleasedListPSFail p_pDUSessionResourceReleasedListPSFail := ? + ) := { + procedureCode := id_PathSwitchRequest, + criticality := reject, + value_ := { + PathSwitchRequestFailure := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSwitchedList, + criticality := ignore, + value_ := { PDUSessionResourceReleasedListPSFail := p_pDUSessionResourceReleasedListPSFail } + } + } + } + } + } // End of template mw_n2_PathSwitchRequestFailure + + } // End of group Receive + + } // End of group PATH_SWITCH_REQUEST_FAILURE + + group HANDOVER_CANCEL { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.11 HANDOVER CANCEL + */ + template (value) InitiatingMessage m_n2_HandoverCancel( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) Cause p_cause := m_cause_radioNetwork(PX_CAUSE_HANDOVER_CANCEL) + ) := { + procedureCode := id_HandoverCancel, + criticality := reject, + value_ := { + HandoverCancel := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_HandoverCancel + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.11 HANDOVER CANCEL + */ + template (present) InitiatingMessage mw_n2_HandoverCancel( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) Cause p_cause := ? + ) := { + procedureCode := id_HandoverCancel, + criticality := reject, + value_ := { + HandoverCancel := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_HandoverCancel + + } // End of group Receive + + } // End of group HANDOVER_CANCEL + + group HANDOVER_CANCEL_ACKNOWLEDGE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.12 HANDOVER CANCEL ACKNOWLEDGE + */ + template (value) SuccessfulOutcome m_n2_HandoverCancelAcknowledge( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_HandoverCancel, + criticality := reject, + value_ := { + HandoverCancelAcknowledge := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template m_n2_HandoverCancelAcknowledge + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.12 HANDOVER CANCEL ACKNOWLEDGE + */ + template (present) SuccessfulOutcome mw_n2_HandoverCancelAcknowledge( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ? + ) := { + procedureCode := id_HandoverCancel, + criticality := reject, + value_ := { + HandoverCancelAcknowledge := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_HandoverCancelAcknowledge + + } // End of group Receive + + } // End of group HANDOVER_CANCEL_ACKNOWLEDGE + + group UPLINK_RAN_STATUS_TRANSFER { + + group Send { + + } // End of group Send + + group Receive { + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.13 UPLINK RAN STATUS TRANSFER + */ + template (value) InitiatingMessage m_n2_UplinkRANStatusTransfer( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) RANStatusTransfer_TransparentContainer p_rANStatusTransfer_TransparentContainer + ) := { + procedureCode := id_UplinkRANStatusTransfer, + criticality := reject, + value_ := { + UplinkRANStatusTransfer := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_RANStatusTransfer_TransparentContainer, + criticality := reject, + value_ := { RANStatusTransfer_TransparentContainer := p_rANStatusTransfer_TransparentContainer } + } + } + } + } + } // End of template m_n2_UplinkRANStatusTransfer + + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.13 UPLINK RAN STATUS TRANSFER + */ + template (present) InitiatingMessage mw_n2_UplinkRANStatusTransfer( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) RANStatusTransfer_TransparentContainer p_rANStatusTransfer_TransparentContainer := ? + ) := { + procedureCode := id_UplinkRANStatusTransfer, + criticality := reject, + value_ := { + UplinkRANStatusTransfer := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_RANStatusTransfer_TransparentContainer, + criticality := reject, + value_ := { RANStatusTransfer_TransparentContainer := p_rANStatusTransfer_TransparentContainer } + } + } + } + } + } // End of template mw_n2_UplinkRANStatusTransfer + + } // End of group Receive + + } // End of group UPLINK_RAN_STATUS_TRANSFER + + group DOWNLINK_RAN_STATUS_TRANSFER { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.14 DOWNLINK RAN STATUS TRANSFER + */ + template (value) InitiatingMessage m_n2_DownlinkRANStatusTransfer( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) RANStatusTransfer_TransparentContainer p_rANStatusTransfer_TransparentContainer + ) := { + procedureCode := id_DownlinkRANStatusTransfer, + criticality := reject, + value_ := { + DownlinkRANStatusTransfer := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_RANStatusTransfer_TransparentContainer, + criticality := reject, + value_ := { RANStatusTransfer_TransparentContainer := p_rANStatusTransfer_TransparentContainer } + } + } + } + } + } // End of template m_n2_DownlinkRANStatusTransfer + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.14 DOWNLINK RAN STATUS TRANSFER + */ + template (present) InitiatingMessage mw_n2_DownlinkRANStatusTransfer( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) RANStatusTransfer_TransparentContainer p_rANStatusTransfer_TransparentContainer := ? + ) := { + procedureCode := id_DownlinkRANStatusTransfer, + criticality := reject, + value_ := { + DownlinkRANStatusTransfer := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_RANStatusTransfer_TransparentContainer, + criticality := reject, + value_ := { RANStatusTransfer_TransparentContainer := p_rANStatusTransfer_TransparentContainer } + } + } + } + } + } // End of template mw_n2_DownlinkRANStatusTransfer + + } // End of group Receive + + } // End of group DOWNLINK_RAN_STATUS_TRANSFER + + group HANDOVER_SUCCESS { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.15 HANDOVER SUCCESS + */ + template (value) InitiatingMessage m_n2_HandoverSuccess( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_HandoverSuccess, + criticality := reject, + value_ := { + HandoverSuccess := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template m_n2_HandoverSuccess + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.15 HANDOVER SUCCESS + */ + template (present) InitiatingMessage mw_n2_HandoverSuccess( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ? + ) := { + procedureCode := id_HandoverSuccess, + criticality := reject, + value_ := { + HandoverSuccess := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_HandoverSuccess + + } // End of group Receive + + } // End of group HANDOVER_SUCCESS + + group UPLINK_RAN_EARLY_STATUS_TRANSFER { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.16 UPLINK RAN EARLY STATUS TRANSFER + */ + template (value) InitiatingMessage m_n2_UplinkRANEarlyStatusTransfer( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) EarlyStatusTransfer_TransparentContainer p_earlyStatusTransfer_TransparentContainer + ) := { + procedureCode := id_UplinkRANEarlyStatusTransfer, + criticality := reject, + value_ := { + UplinkRANEarlyStatusTransfer := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_EarlyStatusTransfer_TransparentContainer, + criticality := reject, + value_ := { EarlyStatusTransfer_TransparentContainer := p_earlyStatusTransfer_TransparentContainer } + } + } + } + } + } // End of template m_n2_UplinkRANEarlyStatusTransfer + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.16 UPLINK RAN EARLY STATUS TRANSFER + */ + template (present) InitiatingMessage mw_n2_UplinkRANEarlyStatusTransfer( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) EarlyStatusTransfer_TransparentContainer p_earlyStatusTransfer_TransparentContainer := ? + ) := { + procedureCode := id_UplinkRANEarlyStatusTransfer, + criticality := reject, + value_ := { + UplinkRANEarlyStatusTransfer := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_EarlyStatusTransfer_TransparentContainer, + criticality := reject, + value_ := { EarlyStatusTransfer_TransparentContainer := p_earlyStatusTransfer_TransparentContainer } + } + } + } + } + } // End of template mw_n2_UplinkRANEarlyStatusTransfer + + } // End of group Receive + + } // End of group UPLINK_RAN_EARLY_STATUS_TRANSFER + + group DOWNLINK_RAN_EARLY_STATUS_TRANSFER { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.17 DOWNLINK RAN EARLY STATUS TRANSFER + */ + template (value) InitiatingMessage m_n2_DownlinkRANEarlyStatusTransfer( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) EarlyStatusTransfer_TransparentContainer p_earlyStatusTransfer_TransparentContainer + ) := { + procedureCode := id_DownlinkRANEarlyStatusTransfer, + criticality := reject, + value_ := { + DownlinkRANEarlyStatusTransfer := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_EarlyStatusTransfer_TransparentContainer, + criticality := reject, + value_ := { EarlyStatusTransfer_TransparentContainer := p_earlyStatusTransfer_TransparentContainer } + } + } + } + } + } // End of template m_n2_DownlinkRANEarlyStatusTransfer + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.3.17 DOWNLINK RAN EARLY STATUS TRANSFER + */ + template (present) InitiatingMessage mw_n2_DownlinkRANEarlyStatusTransfer( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) EarlyStatusTransfer_TransparentContainer p_earlyStatusTransfer_TransparentContainer := ? + ) := { + procedureCode := id_DownlinkRANEarlyStatusTransfer, + criticality := reject, + value_ := { + DownlinkRANEarlyStatusTransfer := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_EarlyStatusTransfer_TransparentContainer, + criticality := reject, + value_ := { EarlyStatusTransfer_TransparentContainer := p_earlyStatusTransfer_TransparentContainer } + } + } + } + } + } // End of template mw_n2_DownlinkRANEarlyStatusTransfer + + } // End of group Receive + + } // End of group DOWNLINK_RAN_EARLY_STATUS_TRANSFER + + } // End of group UE_Mobility_Management_Messages + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.4 Paging Messages + */ + group Paging_Messages { + + group PAGING { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.4.1 PAGING + */ + template (value) InitiatingMessage m_n2_Paging( + in template (value) UEPagingIdentity p_uEPagingIdentity, + in template (value) TAIListForPaging p_tAIListForPaging + ) := { + procedureCode := id_Paging, + criticality := reject, + value_ := { + Paging := { + protocolIEs := { + { + id := id_UEPagingIdentity, + criticality := ignore, + value_ := { UEPagingIdentity := p_uEPagingIdentity } + }, + { + id := id_TAIListForPaging, + criticality := ignore, + value_ := { TAIListForPaging := p_tAIListForPaging } + } + } + } + } + } // End of template m_n2_Paging + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.4.1 PAGING + */ + template (present) InitiatingMessage mw_n2_Paging( + template (present) UEPagingIdentity p_uEPagingIdentity := ?, + template (present) TAIListForPaging p_tAIListForPaging := ? + ) := { + procedureCode := id_Paging, + criticality := reject, + value_ := { + Paging := { + protocolIEs := { + { + id := id_UEPagingIdentity, + criticality := ignore, + value_ := { UEPagingIdentity := p_uEPagingIdentity } + }, + { + id := id_TAIListForPaging, + criticality := ignore, + value_ := { TAIListForPaging := p_tAIListForPaging } + } + } + } + } + } // End of template mw_n2_Paging + + } // End of group Receive + + } // End of group PAGING + + } // End of group Paging_Messages + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5 NAS Transport Messages + */ + group NAS_Transport_Messages { + + group INITIAL_UE_MESSAGE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5.1 INITIAL UE MESSAGE + */ + template (value) InitiatingMessage m_n2_initialUeMessage( + in template (value) RAN_UE_NGAP_ID p_RANUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) NAS_PDU p_nasPdu, + in template (value) UserLocationInformation p_ueLocInf, + in template (value) RRCEstablishmentCause p_rrcEstCause := PX_RRC_ESTABLISHMENT_CAUSE + ) := { + procedureCode := id_InitialUEMessage, + criticality := reject, + value_ := { + InitialUEMessage := { + protocolIEs := { + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_RANUeNgapID } + }, + { + id := id_NAS_PDU, + criticality := reject, + value_ := { NAS_PDU := p_nasPdu } + }, + { + id := id_UserLocationInformation, + criticality := reject, + value_ := { UserLocationInformation := p_ueLocInf } + }, + { + id := id_RRCEstablishmentCause, + criticality := ignore, + value_ := { RRCEstablishmentCause := p_rrcEstCause } + }//, + /*{ + id := NGAP_Constants.id_FiveG_S_TMSI, + criticality := NGAP_CommonDataTypes.reject, + Value := "NGAP_IEs.FiveG_S_TMSI", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_AMFSetID, + criticality := NGAP_CommonDataTypes.ignore, + Value := "NGAP_IEs.AMFSetID", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_UEContextRequest, + criticality := NGAP_CommonDataTypes.ignore, + Value := "NGAP_IEs.UEContextRequest", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_AllowedNSSAI, + criticality := NGAP_CommonDataTypes.reject, + Value := "NGAP_IEs.AllowedNSSAI", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_SourceToTarget_AMFInformationReroute, + criticality := NGAP_CommonDataTypes.ignore, + Value := "NGAP_IEs.SourceToTarget_AMFInformationReroute", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_SelectedPLMNIdentity, + criticality := NGAP_CommonDataTypes.ignore, + Value := "NGAP_IEs.PLMNIdentity", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_IABNodeIndication, + criticality := NGAP_CommonDataTypes.reject, + Value := "NGAP_IEs.IABNodeIndication", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_CEmodeBSupport_Indicator, + criticality := NGAP_CommonDataTypes.reject, + Value := "NGAP_IEs.CEmodeBSupport_Indicator", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_LTEM_Indication, + criticality := NGAP_CommonDataTypes.ignore, + Value := "NGAP_IEs.LTEM_Indication", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_EDT_Session, + criticality := NGAP_CommonDataTypes.ignore, + Value := "NGAP_IEs.EDT_Session", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_AuthenticatedIndication, + criticality := NGAP_CommonDataTypes.ignore, + Value := "NGAP_IEs.AuthenticatedIndication", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_NPN_AccessInformation, + criticality := NGAP_CommonDataTypes.reject, + Value := "NGAP_IEs.NPN_AccessInformation", + presence := NGAP_CommonDataTypes.optional_ + }, + { + id := NGAP_Constants.id_RedCapIndication, + criticality := NGAP_CommonDataTypes.ignore, + Value := "NGAP_IEs.RedCapIndication", + presence := NGAP_CommonDataTypes.optional_ + }*/ + } + } + } + } // End of template m_n2_initialUeMessage + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5.1 INITIAL UE MESSAGE + */ + + template (present) InitiatingMessage mw_n2_initialUeMessage_base_nas:= { + procedureCode := id_InitialUEMessage, + criticality := ?, + value_ := { + InitialUEMessage := { + protocolIEs := {*, + { + id := id_NAS_PDU, + criticality := ?, + value_ := { NAS_PDU := ? } + }, + * + } + } + } + } + + template (present) InitiatingMessage mw_n2_initialUeMessage( + template (present) RAN_UE_NGAP_ID p_RANUeNgapID := ?, + template (present) NAS_PDU p_nasPdu := ?, + template (present) UserLocationInformation p_UeLocInf := ?, + template (present) RRCEstablishmentCause p_rrcEstCause := ? + ) := { + procedureCode := id_InitialUEMessage, + criticality := reject, + value_ := { + InitialUEMessage := { + protocolIEs := { + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_RANUeNgapID } + }, + { + id := id_NAS_PDU, + criticality := reject, + value_ := { NAS_PDU := p_nasPdu } + }, + { + id := id_UserLocationInformation, + criticality := reject, + value_ := { UserLocationInformation := p_UeLocInf } + }, + { + id := id_RRCEstablishmentCause, + criticality := ignore, + value_ := { RRCEstablishmentCause := p_rrcEstCause } + } + } + } + } + } // End of template mw_n2_initialUeMessage + + } // End of group Receive + + } // End of group INITIAL_UE_MESSAGE + + group DOWNLINK_NAS_TRANSPORT { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5.2 DOWNLINK NAS TRANSPORT + */ + template (value) InitiatingMessage m_n2_DownlinkNASTransport( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) NAS_PDU p_nasPdu + ) := { + procedureCode := id_DownlinkNASTransport, + criticality := ignore, + value_ := { + DownlinkNASTransport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NAS_PDU, + criticality := reject, + value_ := { NAS_PDU := p_nasPdu } + } + } + } + } + } // End of template m_n2_DownlinkNASTransport + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5.2 DOWNLINK NAS TRANSPORT + */ + template (present) InitiatingMessage mw_n2_DownlinkNASTransport_base_nas:= { + procedureCode := id_DownlinkNASTransport, + criticality := ?, + value_ := { + DownlinkNASTransport := { + protocolIEs := { + *, + { + id := id_NAS_PDU, + criticality := ?, + value_ := { NAS_PDU := ? } + }, + * + } + } + } + } // End of template mw_n2_DownlinkNASTransport_base_nas + + template (present) InitiatingMessage mw_n2_DownlinkNASTransport( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) NAS_PDU p_nasPdu := ? + ) := { + procedureCode := id_DownlinkNASTransport, + criticality := ignore, + value_ := { + DownlinkNASTransport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NAS_PDU, + criticality := reject, + value_ := { NAS_PDU := p_nasPdu } + } + } + } + } + } // End of template mw_n2_DownlinkNASTransport + + } // End of group Receive + + } // End of group DOWNLINK_NAS_TRANSPORT + + group UPLINK_NAS_TRANSPORT { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5.2 DOWNLINK NAS TRANSPORT + */ + template (value) InitiatingMessage m_n2_UplinkNASTransport( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) NAS_PDU p_nasPdu, + in template (value) UserLocationInformation p_userLocationInformation + ) := { + procedureCode := id_UplinkNASTransport, + criticality := ignore, + value_ := { + UplinkNASTransport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NAS_PDU, + criticality := reject, + value_ := { NAS_PDU := p_nasPdu } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + } + } + } + } + } // End of template m_n2_UplinkNASTransport + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5.2 DOWNLINK NAS TRANSPORT + */ + template (present) InitiatingMessage mw_n2_UplinkNASTransport_base_nas:= { + procedureCode := id_UplinkNASTransport, + criticality := ?, + value_ := { + UplinkNASTransport := { + protocolIEs := { + *, + { + id := id_NAS_PDU, + criticality := ?, + value_ := { NAS_PDU := ? } + }, + * + } + } + } + } // End of template mw_n2_UplinkNASTransport_base_nas + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5.2 DOWNLINK NAS TRANSPORT + */ + template (present) InitiatingMessage mw_n2_UplinkNASTransport( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) NAS_PDU p_nasPdu := ?, + template (present) UserLocationInformation p_userLocationInformation := ? + ) := { + procedureCode := id_UplinkNASTransport, + criticality := ignore, + value_ := { + UplinkNASTransport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NAS_PDU, + criticality := reject, + value_ := { NAS_PDU := p_nasPdu } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + } + } + } + } + } // End of template mw_n2_UplinkNASTransport + + } // End of group Receive + + } // End of group UPLINK_NAS_TRANSPORT + + group NAS_NON_DELIVERY_INDICATION { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5.4 NAS NON DELIVERY INDICATION + */ + template (value) InitiatingMessage m_n2_NASNonDeliveryIndication( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) NAS_PDU p_nasPdu, + in template (value) Cause p_cause := m_cause_nas(PX_CAUSE_NAS_NON_DELIVERY_INDICATION) + ) := { + procedureCode := id_NASNonDeliveryIndication, + criticality := reject, + value_ := { + NASNonDeliveryIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NAS_PDU, + criticality := reject, + value_ := { NAS_PDU := p_nasPdu } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_NASNonDeliveryIndication + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5.4 NAS NON DELIVERY INDICATION + */ + template (present) InitiatingMessage mw_n2_NASNonDeliveryIndication( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) NAS_PDU p_nasPdu := ?, + template (present) Cause p_cause := ? + ) := { + procedureCode := id_NASNonDeliveryIndication, + criticality := reject, + value_ := { + NASNonDeliveryIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NAS_PDU, + criticality := reject, + value_ := { NAS_PDU := p_nasPdu } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_NASNonDeliveryIndication + + } // End of group Receive + + } // End of group NAS_NON_DELIVERY_INDICATION + + group REROUTE_NAS_REQUEST{ + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5.5 REROUTE NAS REQUEST + */ + template (value) InitiatingMessage m_n2_RerouteNASRequest( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) octetstring p_nGAPMessage, + in template (value) AMFSetID p_aMFSetID := PX_AMF_SET_ID + ) := { + procedureCode := id_RerouteNASRequest, + criticality := reject, + value_ := { + RerouteNASRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NGAP_Message, + criticality := reject, + value_ := { NGAP_Message := p_nGAPMessage } + }, + { + id := id_AMFSetID, + criticality := ignore, + value_ := { AMFSetID := p_aMFSetID } + } + } + } + } + } // End of template m_n2_RerouteNASRequest + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.5.5 REROUTE NAS REQUEST + */ + template (present) InitiatingMessage mw_n2_RerouteNASRequest( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) octetstring p_nGAPMessage := ?, + template (present) AMFSetID p_aMFSetID := ? + ) := { + procedureCode := id_RerouteNASRequest, + criticality := reject, + value_ := { + RerouteNASRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NGAP_Message, + criticality := reject, + value_ := { NGAP_Message := p_nGAPMessage } + }, + { + id := id_AMFSetID, + criticality := ignore, + value_ := { AMFSetID := p_aMFSetID } + } + } + } + } + } // End of template mw_n2_RerouteNASRequest + + } // End of group Receive + + } // End of group REROUTE_NAS_REQUEST + + } // End of group NAS_Transport_Messages + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6 Interface Management Messages + */ + group Interface_Management_Messages { + + group NG_SETUP_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.1 NG SETUP REQUEST + */ + template (value) InitiatingMessage m_n2_NGSetupRequest( + in template (value) GlobalRANNodeID p_globalRANNodeID, + in template (value) SupportedTAList p_supportedTAs, + in template (value) PagingDRX p_pagingDRX := PX_PAGING_DRX + ) := { + procedureCode := id_NGSetup, + criticality := reject, + value_ := { + NGSetupRequest := { + protocolIEs := { + { + id := id_GlobalRANNodeID, + criticality := reject, + value_ := { GlobalRANNodeID := p_globalRANNodeID } + }, + { + id := id_SupportedTAList, + criticality := reject, + value_ := { SupportedTAList := p_supportedTAs } + }, + { + id := id_DefaultPagingDRX, + criticality := ignore, + value_ := { PagingDRX := p_pagingDRX } + } + } + } + } + } // End of template m_n2_NGSetupRequest + + template (value) InitiatingMessage m_n2_NGSetupRequest_UERetentionInf( + in template (value) GlobalRANNodeID p_globalRANNodeID, + in template (value) SupportedTAList p_supportedTAs, + in template (value) PagingDRX p_pagingDRX := PX_PAGING_DRX, + in template (value) UERetentionInformation p_ueRetentionInf + ) := { + procedureCode := id_NGSetup, + criticality := reject, + value_ := { + NGSetupRequest := { + protocolIEs := { + { + id := id_GlobalRANNodeID, + criticality := reject, + value_ := { GlobalRANNodeID := p_globalRANNodeID } + }, + { + id := id_SupportedTAList, + criticality := reject, + value_ := { SupportedTAList := p_supportedTAs } + }, + { + id := id_DefaultPagingDRX, + criticality := ignore, + value_ := { PagingDRX := p_pagingDRX } + }, + { + id := id_UERetentionInformation, + criticality := ignore, + value_ := { UERetentionInformation := p_ueRetentionInf } + } + } + } + } + } // End of template m_n2_NGSetupRequest_UERetentionInf + + template (value) InitiatingMessage m_n2_NGSetupRequest_ExtRanNodeName( + in template (value) GlobalRANNodeID p_globalRANNodeID, + in template (value) SupportedTAList p_supportedTAs, + in template (value) PagingDRX p_pagingDRX := PX_PAGING_DRX, + in template (value) NB_IoT_DefaultPagingDRX p_nbIotDefPagDrx, + in template (value) Extended_RANNodeName p_extRanNodeName + ) := { + procedureCode := id_NGSetup, + criticality := reject, + value_ := { + NGSetupRequest := { + protocolIEs := { + { + id := id_GlobalRANNodeID, + criticality := reject, + value_ := { GlobalRANNodeID := p_globalRANNodeID } + }, + { + id := id_SupportedTAList, + criticality := reject, + value_ := { SupportedTAList := p_supportedTAs } + }, + { + id := id_DefaultPagingDRX, + criticality := ignore, + value_ := { PagingDRX := p_pagingDRX } + }, + { + id := id_NB_IoT_DefaultPagingDRX, + criticality := ignore, + value_ := { NB_IoT_DefaultPagingDRX := p_nbIotDefPagDrx } + }, + { + id := id_Extended_RANNodeName, + criticality := ignore, + value_ := { Extended_RANNodeName := p_extRanNodeName } + } + } + } + } + } // End of template m_n2_NGSetupRequest_ExtRanNodeName + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.1 NG SETUP REQUEST + */ + template (present) InitiatingMessage mw_n2_NGSetupRequest_base := { + procedureCode := id_NGSetup, criticality := ?, value_ := {NGSetupRequest := {protocolIEs := {*}}} + } // End of template mw_n2_NGSetupRequest_base + + template (present) InitiatingMessage mw_n2_NGSetupRequest( + template (present) GlobalRANNodeID p_globalRANNodeID := ?, + template (present) SupportedTAList p_supportedTAs := ?, + template (present) PagingDRX p_pagingDRX := ? + ) := { + procedureCode := id_NGSetup, + criticality := reject, + value_ := { + NGSetupRequest := { + protocolIEs := { + { + id := id_GlobalRANNodeID, + criticality := reject, + value_ := { GlobalRANNodeID := p_globalRANNodeID } + }, + { + id := id_SupportedTAList, + criticality := reject, + value_ := { SupportedTAList := p_supportedTAs } + }, + { + id := id_DefaultPagingDRX, + criticality := ignore, + value_ := { PagingDRX := p_pagingDRX } + } + } + } + } + } // End of template mw_n2_NGSetupRequest + + } // End of group Receive + + } // End of group NG_SETUP_REQUEST + + group NG_SETUP_RESPONSE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.2 NG SETUP RESPONSE + */ + template (value) SuccessfulOutcome m_n2_NGSetupResponse( + in template (value) AMFName p_amfName := PX_AMF_NAME, + in template (value) ServedGUAMIList p_servedGUAMIList, + in template (value) RelativeAMFCapacity p_relativeAmfCap, + in template (value) PLMNSupportList p_plmnSuppList + ) := { + procedureCode := id_NGSetup, + criticality := reject, + value_ := { + NGSetupResponse := { + protocolIEs := { + { + id := id_AMFName, + criticality := reject, + value_ := { AMFName := p_amfName } + }, + { + id := id_ServedGUAMIList, + criticality := reject, + value_ := { ServedGUAMIList := p_servedGUAMIList } + }, + { + id := id_RelativeAMFCapacity, + criticality := ignore, + value_ := { RelativeAMFCapacity := p_relativeAmfCap } + }, + { + id := id_PLMNSupportList, + criticality := ignore, + value_ := { PLMNSupportList := p_plmnSuppList } + } + } + } + } + } // End of template m_n2_NGSetupResponse + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.2 NG SETUP RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_NGSetupResponse( + template (present) AMFName p_amfName := ?, + template (present) ServedGUAMIList p_servedGUAMIList := ?, + template (present) RelativeAMFCapacity p_relativeAmfCap:= ?, + template (present) PLMNSupportList p_plmnSuppList := ? + ) := { + procedureCode := id_NGSetup, + criticality := reject, + value_ := { + NGSetupResponse := { + protocolIEs := { + *, + { + id := id_AMFName, + criticality := reject, + value_ := { AMFName := p_amfName } + }, + { + id := id_ServedGUAMIList, + criticality := reject, + value_ := { ServedGUAMIList := (p_servedGUAMIList,*) } + }, + { + id := id_RelativeAMFCapacity, + criticality := ignore, + value_ := { RelativeAMFCapacity := p_relativeAmfCap } + }, + { + id := id_PLMNSupportList, + criticality := reject, + value_ := { PLMNSupportList := p_plmnSuppList } + }, + * + } + } + } + } // End of template mw_n2_NGSetupResponse + + template (present) SuccessfulOutcome mw_n2_NGSetupResponse_UERetentionInf( + template (present) AMFName p_amfName := ?, + template (present) ServedGUAMIList p_servedGUAMIList := ?, + template (present) RelativeAMFCapacity p_relativeAmfCap:= ?, + template (present) PLMNSupportList p_plmnSuppList := ?, + template (present) UERetentionInformation p_ueRetentionInf :=? + ) := { + procedureCode := id_NGSetup, + criticality := reject, + value_ := { + NGSetupResponse := { + protocolIEs := { + { + id := id_AMFName, + criticality := reject, + value_ := { AMFName := p_amfName } + }, + { + id := id_ServedGUAMIList, + criticality := reject, + value_ := { ServedGUAMIList := p_servedGUAMIList } + }, + { + id := id_RelativeAMFCapacity, + criticality := ignore, + value_ := { RelativeAMFCapacity := p_relativeAmfCap } + }, + { + id := id_PLMNSupportList, + criticality := reject, + value_ := { PLMNSupportList := p_plmnSuppList } + }, + { + id := id_UERetentionInformation, + criticality := ignore, + value_ := { UERetentionInformation := p_ueRetentionInf } + } + } + } + } + } // End of template mw_n2_NGSetupResponse_UERetentionInfo + + template (present) SuccessfulOutcome mw_n2_NGSetupResponse_ExtAmfName( + template (present) AMFName p_amfName := ?, + template (present) ServedGUAMIList p_servedGUAMIList := ?, + template (present) RelativeAMFCapacity p_relativeAmfCap:= ?, + template (present) PLMNSupportList p_plmnSuppList := ?, + template (present) Extended_AMFName p_extAmfName :=? + ) := { + procedureCode := id_NGSetup, + criticality := reject, + value_ := { + NGSetupResponse := { + protocolIEs := { + { + id := id_AMFName, + criticality := reject, + value_ := { AMFName := p_amfName } + }, + { + id := id_ServedGUAMIList, + criticality := reject, + value_ := { ServedGUAMIList := p_servedGUAMIList } + }, + { + id := id_RelativeAMFCapacity, + criticality := ignore, + value_ := { RelativeAMFCapacity := p_relativeAmfCap } + }, + { + id := id_PLMNSupportList, + criticality := reject, + value_ := { PLMNSupportList := p_plmnSuppList } + }, + { + id := id_Extended_AMFName, + criticality := ignore, + value_ := { Extended_AMFName := p_extAmfName } + } + } + } + } + } // End of template mw_n2_NGSetupResponse_ExtAmfName + + } // End of group Receive + + } // End of group NG_SETUP_RESPONSE + + group NG_SETUP_FAILURE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.3 NG SETUP FAILURE + */ + template (value) UnsuccessfulOutcome m_n2_NGSetupFailure( + in template (value) Cause p_cause := m_cause_radioNetwork(PX_NG_SETUP_FAILURE) + ) := { + procedureCode := id_NGSetup, + criticality := reject, + value_ := { + NGSetupFailure := { + protocolIEs := { + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_NGSetupFailure + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.3 NG SETUP FAILURE + */ + template (present) UnsuccessfulOutcome mw_n2_NGSetupFailure( + template (present) Cause p_cause := ? + ) := { + procedureCode := id_NGSetup, + criticality := reject, + value_ := { + NGSetupFailure := { + protocolIEs := { + permutation({ + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + },* + ) + } + } + } + } // End of template mw_n2_NGSetupFailure + + } // End of group Receive + + } // End of group NG_SETUP_FAILURE + + group RAN_CONFIGURATION_UPDATE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.4 RAN CONFIGURATION UPDATE + */ + template (value) InitiatingMessage m_n2_RANConfigurationUpdate( + in template (value) RANNodeName p_rANNodeName := PX_RAN_NODE_NAME + ) := { + procedureCode := id_RANConfigurationUpdate, + criticality := reject, + value_ := { + RANConfigurationUpdate := { + protocolIEs := { + { + id := id_RANNodeName, + criticality := ignore, + value_ := { RANNodeName := p_rANNodeName } + } + } + } + } + } // End of template m_n2_RANConfigurationUpdate + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.4 RAN CONFIGURATION UPDATE + */ + template (value) InitiatingMessage m_n2_RANConfigurationUpdate_SupportedTAList( + template (value) SupportedTAList p_supportedTAs + ) := { + procedureCode := id_RANConfigurationUpdate, + criticality := reject, + value_ := { + RANConfigurationUpdate := { + protocolIEs := { + { + id := id_SupportedTAList, + criticality := reject, + value_ := { SupportedTAList := p_supportedTAs } + } + } + } + } + } // End of template mw_n2_RANConfigurationUpdate_SupportedTAList + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.4 RAN CONFIGURATION UPDATE + */ + template (present) InitiatingMessage mw_n2_RANConfigurationUpdate( + template (present) RANNodeName p_rANNodeName := ? + ) := { + procedureCode := id_RANConfigurationUpdate, + criticality := reject, + value_ := { + RANConfigurationUpdate := { + protocolIEs := { + { + id := id_RANNodeName, + criticality := ignore, + value_ := { RANNodeName := p_rANNodeName } + } + } + } + } + } // End of template mw_n2_RANConfigurationUpdate + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.4 RAN CONFIGURATION UPDATE + */ + template (present) InitiatingMessage mw_n2_RANConfigurationUpdate_SupportedTAList( + template (present) SupportedTAList p_supportedTAs := ? + ) := { + procedureCode := id_RANConfigurationUpdate, + criticality := reject, + value_ := { + RANConfigurationUpdate := { + protocolIEs := { + { + id := id_SupportedTAList, + criticality := reject, + value_ := { SupportedTAList := p_supportedTAs } + } + } + } + } + } // End of template mw_n2_RANConfigurationUpdate_SupportedTAList + + } // End of group Receive + + } // End of group RAN_CONFIGURATION_UPDATE + + group RAN_CONFIGURATION_UPDATE_ACKNOWLEDGE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.5 RAN CONFIGURATION UPDATE ACKNOWLEDGE + */ + template (value) SuccessfulOutcome m_n2_RANConfigurationUpdateAcknowledge := { + procedureCode := id_RANConfigurationUpdate, + criticality := reject, + value_ := { + RANConfigurationUpdateAcknowledge := { + protocolIEs := { } + } + } + } // End of template m_n2_RANConfigurationUpdateAcknowledge + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.5 RAN CONFIGURATION UPDATE ACKNOWLEDGE + */ + template SuccessfulOutcome mw_n2_RANConfigurationUpdateAcknowledge := { + procedureCode := id_RANConfigurationUpdate, + criticality := reject, + value_ := { + RANConfigurationUpdateAcknowledge := { + protocolIEs := ? + } + } + } // End of template mw_n2_RANConfigurationUpdateAcknowledge + + } // End of group Receive + + } // End of group RAN_CONFIGURATION_UPDATE_ACKNOWLEDGE + + group RAN_CONFIGURATION_UPDATE_FAILURE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.6 RAN CONFIGURATION UPDATE FAILURE + */ + template (value) UnsuccessfulOutcome m_n2_RANConfigurationUpdateFailure( + in template (value) Cause p_cause := m_cause_radioNetwork(PX_RAN_CONFIGURATION_UPDATE_FAILURE) + ) := { + procedureCode := id_RANConfigurationUpdate, + criticality := reject, + value_ := { + RANConfigurationUpdateFailure := { + protocolIEs := { + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_RANConfigurationUpdateFailure + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.6 RAN CONFIGURATION UPDATE FAILURE + */ + template (present) UnsuccessfulOutcome mw_n2_RANConfigurationUpdateFailure( + template (present) Cause p_cause := ? + ) := { + procedureCode := id_RANConfigurationUpdate, + criticality := reject, + value_ := { + RANConfigurationUpdateFailure := { + protocolIEs := { + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_RANConfigurationUpdateFailure + + } // End of group Receive + + } // End of group RAN_CONFIGURATION_UPDATE_FAILURE + + group AMF_CONFIGURATION_UPDATE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.7 AMF CONFIGURATION UPDATE + */ + template (value) InitiatingMessage m_n2_AMFConfigurationUpdate( + in template (value) AMFName p_aMFName := PX_AMF_NAME + ) := { + procedureCode := id_AMFConfigurationUpdate, + criticality := reject, + value_ := { + AMFConfigurationUpdate := { + protocolIEs := { + { + id := id_AMFName, + criticality := ignore, + value_ := { AMFName := p_aMFName } + } + } + } + } + } // End of template m_n2_AMFConfigurationUpdate + + template (value) InitiatingMessage m_n2_AMFConfigurationUpdate_tnl( + //in template (value) AMFName p_AMFName, + in template (value) ServedGUAMIList p_servedGUAMIList, + //in template (value) RelativeAMFCapacity p_relativeAMFCapacity, + in template (value) PLMNSupportList p_pLMNSupportList, + in template (value) AMF_TNLAssociationToAddList p_aMF_TNLAssociationToAddList, + //in template (value) AMF_TNLAssociationToRemoveList p_aMF_TNLAssociationToRemoveList, + in template (value) AMF_TNLAssociationToUpdateList p_aMF_TNLAssociationToUpdateList//, + //in template (value) Extended_AMFName p_extended_AMFName + ):={ + procedureCode := id_AMFConfigurationUpdate, + criticality := reject, + value_ := { + AMFConfigurationUpdate := { + protocolIEs := { + //{ + // id := id_AMFName, + // criticality := ignore, + // value_ := { AMFName := p_aMFName } + //}, + { + id := id_ServedGUAMIList, + criticality := reject, + value_ := { ServedGUAMIList := p_servedGUAMIList } + }, + //{ id := id_RelativeAMFCapacity, + // criticality := ignore, + // value_ := { RelativeAMFCapacity := p_relativeAMFCapacity} + //}, + { + id := id_PLMNSupportList, + criticality := reject, + value_ := { PLMNSupportList := p_pLMNSupportList } + }, + { + id := id_AMF_TNLAssociationToAddList, + criticality := ignore, + value_ := { AMF_TNLAssociationToAddList := p_aMF_TNLAssociationToAddList } + }, + //{ + // id := id_AMF_TNLAssociationToRemoveList, + // criticality := ignore, + // value_ := { AMF_TNLAssociationToRemoveList := p_aMF_TNLAssociationToRemoveList} + //}, + { + id := id_AMF_TNLAssociationToUpdateList, + criticality := ignore, + value_ := { AMF_TNLAssociationToUpdateList := p_aMF_TNLAssociationToUpdateList} + }//, + //{ + // id := id_Extended_AMFName, + // criticality := ignore, + // value_ := { Extended_AMFName := p_extended_AMFName} + //} + } + } + } + } // End of template m_n2_AMFConfigurationUpdate_tnl + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.7 AMF CONFIGURATION UPDATE + */ + template (present) InitiatingMessage mw_n2_AMFConfigurationUpdate( + template (present) AMFName p_aMFName := ? + ) := { + procedureCode := id_AMFConfigurationUpdate, + criticality := reject, + value_ := { + AMFConfigurationUpdate := { + protocolIEs := { + { + id := id_AMFName, + criticality := ignore, + value_ := { AMFName := p_aMFName } + } + } + } + } + } // End of template mw_n2_AMFConfigurationUpdate + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.7 AMF CONFIGURATION UPDATE + */ + template (present) InitiatingMessage mw_n2_AMFConfigurationUpdate_options( + template (present) AMFName p_aMFName := ?, + template ServedGUAMIList p_servedGUAMIList := *, + template PLMNSupportList p_pLMNSupportList := * + ) := { + procedureCode := id_AMFConfigurationUpdate, + criticality := reject, + value_ := { + AMFConfigurationUpdate := { + protocolIEs := { + { + id := id_AMFName, + criticality := ignore, + value_ := { AMFName := p_aMFName } + }, + { + id := id_ServedGUAMIList, + criticality := reject, + value_ := { ServedGUAMIList := p_servedGUAMIList } + }, + { + id := id_PLMNSupportList, + criticality := ignore, + value_ := { PLMNSupportList := p_pLMNSupportList } + } + } + } + } + } // End of template mw_n2_AMFConfigurationUpdate_options + + } // End of group Receive + + } // End of group AMF_CONFIGURATION_UPDATE + + group AMF_CONFIGURATION_UPDATE_ACKNOWLEDGE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.8 AMF CONFIGURATION UPDATE ACKNOWLEDGE + */ + template (value) SuccessfulOutcome m_n2_AMFConfigurationUpdateAcknowledge := { + procedureCode := id_AMFConfigurationUpdate, + criticality := reject, + value_ := { + AMFConfigurationUpdateAcknowledge := { + protocolIEs := { } + } + } + } // End of template m_n2_AMFConfigurationUpdateAcknowledge + + template (value) SuccessfulOutcome m_n2_AMFConfigurationUpdateAcknowledge_aMF_TNLAssociationSetupList( + in template (value) AMF_TNLAssociationSetupList p_aMF_TNLAssociationSetupList + ) := { + procedureCode := id_AMFConfigurationUpdate, + criticality := reject, + value_ := { + AMFConfigurationUpdateAcknowledge := { + protocolIEs := { + { + id := id_AMF_TNLAssociationSetupList, + criticality := ignore, + value_ := { AMF_TNLAssociationSetupList := p_aMF_TNLAssociationSetupList } + } + } + } + } + } // End of template m_n2_AMFConfigurationUpdateAcknowledge_aMF_TNLAssociationSetupList + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.8 AMF CONFIGURATION UPDATE ACKNOWLEDGE + */ + template SuccessfulOutcome mw_n2_AMFConfigurationUpdateAcknowledge := { + procedureCode := id_AMFConfigurationUpdate, + criticality := reject, + value_ := { + AMFConfigurationUpdateAcknowledge := { + protocolIEs := { } + } + } + } // End of template mw_n2_AMFConfigurationUpdateAcknowledge + + template (present) SuccessfulOutcome mw_n2_AMFConfigurationUpdateAcknowledge_aMF_TNLAssociationSetupList( + template (present) AMF_TNLAssociationSetupList p_aMF_TNLAssociationSetupList := ? + ) := { + procedureCode := id_AMFConfigurationUpdate, + criticality := reject, + value_ := { + AMFConfigurationUpdateAcknowledge := { + protocolIEs := { + { + id := id_AMF_TNLAssociationSetupList, + criticality := ignore, + value_ := { AMF_TNLAssociationSetupList := p_aMF_TNLAssociationSetupList } + } + } + } + } + } // End of template mw_n2_AMFConfigurationUpdateAcknowledge_aMF_TNLAssociationSetupList + + } // End of group Receive + + } // End of group AMF_CONFIGURATION_UPDATE_ACKNOWLEDGE + + group AMF_CONFIGURATION_UPDATE_FAILURE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.9 AMF CONFIGURATION UPDATE FAILURE + */ + template (value) UnsuccessfulOutcome m_n2_AMFConfigurationUpdateFailure( + in template (value) Cause p_cause := m_cause_radioNetwork(PX_AMF_CONFIGURATION_UPDATE_FAILURE) + ) := { + procedureCode := id_AMFConfigurationUpdate, + criticality := reject, + value_ := { + AMFConfigurationUpdateFailure := { + protocolIEs := { + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_AMFConfigurationUpdateFailure + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.9 AMF CONFIGURATION UPDATE FAILURE + */ + template (present) UnsuccessfulOutcome mw_n2_AMFConfigurationUpdateFailure( + template (present) Cause p_cause := ? + ) := { + procedureCode := id_AMFConfigurationUpdate, + criticality := reject, + value_ := { + AMFConfigurationUpdateFailure := { + protocolIEs := { + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_AMFConfigurationUpdateFailure + + } // End of group Receive + + } // End of group AMF_CONFIGURATION_UPDATE_FAILURE + + group AMF_STATUS_INDICATION { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.10 AMF STATUS INDICATION + */ + template (value) InitiatingMessage m_n2_AMFStatusIndication( + in template (value) UnavailableGUAMIList p_unavailableGUAMIList + ) := { + procedureCode := id_AMFStatusIndication, + criticality := reject, + value_ := { + AMFStatusIndication := { + protocolIEs := { + { + id := id_UnavailableGUAMIList, + criticality := reject, + value_ := { UnavailableGUAMIList := p_unavailableGUAMIList } + } + } + } + } + } // End of template m_n2_AMFStatusIndication + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.10 AMF STATUS INDICATION + */ + template (present) InitiatingMessage mw_n2_AMFStatusIndication( + template (present) UnavailableGUAMIList p_unavailableGUAMIList := ? + ) := { + procedureCode := id_AMFStatusIndication, + criticality := reject, + value_ := { + AMFStatusIndication := { + protocolIEs := { + { + id := id_UnavailableGUAMIList, + criticality := reject, + value_ := { UnavailableGUAMIList := p_unavailableGUAMIList } + } + } + } + } + } // End of template mw_n2_AMFStatusIndication + + } // End of group Receive + + } // End of group AMF_STATUS_INDICATION + + group NG_RESET { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.11 NG RESET + */ + template (value) InitiatingMessage m_n2_NGReset( + in template (value) Cause p_cause, + in template (value) ResetType p_resetType + ) := { + procedureCode := id_NGReset, + criticality := reject, + value_ := { + NGReset := { + protocolIEs := { + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + }, + { + id := id_ResetType, + criticality := reject, + value_ := { ResetType := p_resetType } + } + } + } + } + } // End of template m_n2_NGReset + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.11 NG RESET + */ + template (present) InitiatingMessage mw_n2_NGReset( + template (present) Cause p_cause := ?, + template (present) ResetType p_resetType := ? + ) := { + procedureCode := id_NGReset, + criticality := reject, + value_ := { + NGReset := { + protocolIEs := { + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + }, + { + id := id_ResetType, + criticality := reject, + value_ := { ResetType := p_resetType } + } + } + } + } + } // End of template mw_n2_NGReset + + } // End of group Receive + + } // End of group NG_RESET + + group NG_RESET_ACKNOWLEDGE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.12 NG RESET ACKNOWLEDGE + */ + template (value) SuccessfulOutcome m_n2_NGResetAcknowledge := { + procedureCode := id_NGReset, + criticality := reject, + value_ := { + NGResetAcknowledge := { + protocolIEs := { } + } + } + } // End of template m_n2_NGResetAcknowledge + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.12 NG RESET ACKNOWLEDGE + */ + template (present) SuccessfulOutcome mw_n2_NGResetAcknowledge := { + procedureCode := id_NGReset, + criticality := reject, + value_ := { + NGResetAcknowledge := { + protocolIEs := { } + } + } + } // End of template mw_n2_NGResetAcknowledge + + } // End of group Receive + + } // End of group NG_RESET_ACKNOWLEDGE + + group ERROR_INDICATION { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.13 ERROR INDICATION + */ + template (value) InitiatingMessage m_n2_ErrorIndication := { + procedureCode := id_ErrorIndication, + criticality := reject, + value_ := { + ErrorIndication := { + protocolIEs := { } + } + } + } // End of template m_n2_ErrorIndication + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.13 ERROR INDICATION + */ + template (value) InitiatingMessage m_n2_ErrorIndication_ids( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) Cause p_cause + ) := { + procedureCode := id_ErrorIndication, + criticality := reject, + value_ := { + ErrorIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_ErrorIndication_ids + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.13 ERROR INDICATION + */ + template (present) InitiatingMessage mw_n2_ErrorIndication := { + procedureCode := id_ErrorIndication, + criticality := reject, + value_ := { + ErrorIndication := { + protocolIEs := { } + } + } + } // End of template mw_n2_ErrorIndication + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.13 ERROR INDICATION + */ + template (present) InitiatingMessage mw_n2_ErrorIndication_ids( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) Cause p_cause := ? + ) := { + procedureCode := id_ErrorIndication, + criticality := reject, + value_ := { + ErrorIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_ErrorIndication_ids + + } // End of group Receive + + } // End of group ERROR_INDICATION + + group OVERLOAD_START { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.14 OVERLOAD START + */ + template (value) InitiatingMessage m_n2_OverloadStart := { + procedureCode := id_OverloadStart, + criticality := reject, + value_ := { + OverloadStart := { + protocolIEs := { } + } + } + } // End of template m_n2_OverloadStart + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.14 OVERLOAD START + */ + template (present) InitiatingMessage mw_n2_OverloadStart := { + procedureCode := id_OverloadStart, + criticality := reject, + value_ := { + OverloadStart := { + protocolIEs := { } + } + } + } // End of template mw_n2_OverloadStart + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.14 OVERLOAD START + */ + template (present) InitiatingMessage mw_n2_OverloadStart_NSSAIList ( + template (present) OverloadStartNSSAIList p_overloadStartNSSAIList:= ? + ):= { + procedureCode := id_OverloadStart, + criticality := reject, + value_ := { + OverloadStart := { + protocolIEs := { + { + id := id_OverloadStartNSSAIList, + criticality := ignore, + value_ := { OverloadStartNSSAIList := p_overloadStartNSSAIList } + } + } + } + } + } // End of template mw_n2_OverloadStart_NSSAIList + + } // End of group Receive + + } // End of group OVERLOAD_START + + group OVERLOAD_STOP { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.15 OVERLOAD STOP + */ + template (value) InitiatingMessage m_n2_OverloadStop := { + procedureCode := id_OverloadStop, + criticality := reject, + value_ := { + OverloadStop := { + protocolIEs := { } + } + } + } // End of template m_n2_OverloadStop + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.6.15 OVERLOAD STOP + */ + template (present) InitiatingMessage mw_n2_OverloadStop := { + procedureCode := id_OverloadStop, + criticality := reject, + value_ := { + OverloadStop := { + protocolIEs := { } + } + } + } // End of template mw_n2_OverloadStop + + } // End of group Receive + + } // End of group OVERLOAD_STOP + + } // End of group Interface_Management_Messages + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.7 Configuration Transfer Messages + */ + group Configuration_Transfer_Messages { + + group UPLINK_RAN_CONFIGURATION_TRANSFER { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.7.1 UPLINK RAN CONFIGURATION TRANSFER + */ + template (value) InitiatingMessage m_n2_UplinkRANConfigurationTransfer := { + procedureCode := id_UplinkRANConfigurationTransfer, + criticality := reject, + value_ := { + UplinkRANConfigurationTransfer := { + protocolIEs := { } + } + } + } // End of template m_n2_UplinkRANConfigurationTransfer + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.7.1 UPLINK RAN CONFIGURATION TRANSFER + */ + template (present) InitiatingMessage mw_n2_UplinkRANConfigurationTransfer := { + procedureCode := id_UplinkRANConfigurationTransfer, + criticality := reject, + value_ := { + UplinkRANConfigurationTransfer := { + protocolIEs := { } + } + } + } // End of template mw_n2_UplinkRANConfigurationTransfer + + } // End of group Receive + + } // End of group UPLINK_RAN_CONFIGURATION_TRANSFER + + group DOWNLINK_RAN_CONFIGURATION_TRANSFER { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.7.2 DOWNLINK RAN CONFIGURATION TRANSFER + */ + template (value) InitiatingMessage m_n2_DownlinkRANConfigurationTransfer := { + procedureCode := id_DownlinkRANConfigurationTransfer, + criticality := reject, + value_ := { + DownlinkRANConfigurationTransfer := { + protocolIEs := { } + } + } + } // End of template m_n2_DownlinkRANConfigurationTransfer + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.7.2 DOWNLINK RAN CONFIGURATION TRANSFER + */ + template (present) InitiatingMessage mw_n2_DownlinkRANConfigurationTransfer := { + procedureCode := id_DownlinkRANConfigurationTransfer, + criticality := reject, + value_ := { + DownlinkRANConfigurationTransfer := { + protocolIEs := { } + } + } + } // End of template mw_n2_DownlinkRANConfigurationTransfer + + } // End of group Receive + + } // End of group DOWNLINK_RAN_CONFIGURATION_TRANSFER + + } // End of group Configuration_Transfer_Messages + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8 Warning Message Transmission Messages + */ + group Warning_Message_Transmission_Messages { + + group WRITE_REPLACE_WARNING_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.1 WRITE-REPLACE WARNING REQUEST + */ + template (value) InitiatingMessage m_n2_WriteReplaceWarningRequest( + in template (value) MessageIdentifier p_messageIdentifier := PX_MESSAGE_IDENTIFIER, + in template (value) SerialNumber p_serialNumber := PX_SERIAL_NUMBER, + in template (value) RepetitionPeriod p_repetitionPeriod := PX_REPETITION_PERIOD, + in template (value) NumberOfBroadcastsRequested p_numberOfBroadcastsRequested := PX_NUMBER_OF_BROADCASTS_REQUESTED + ) := { + procedureCode := id_WriteReplaceWarning, + criticality := reject, + value_ := { + WriteReplaceWarningRequest := { + protocolIEs := { + { + id := id_MessageIdentifier, + criticality := reject, + value_ := { MessageIdentifier := p_messageIdentifier } + }, + { + id := id_SerialNumber, + criticality := reject, + value_ := { SerialNumber := p_serialNumber } + }, + { + id := id_RepetitionPeriod, + criticality := reject, + value_ := { RepetitionPeriod := p_repetitionPeriod } + }, + { + id := id_NumberOfBroadcastsRequested, + criticality := reject, + value_ := { NumberOfBroadcastsRequested := p_numberOfBroadcastsRequested } + } + } + } + } + } // End of template m_n2_WriteReplaceWarningRequest + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.1 WRITE-REPLACE WARNING REQUEST + */ + template (present) InitiatingMessage mw_n2_WriteReplaceWarningRequest( + template (present) MessageIdentifier p_messageIdentifier :=?, + template (present) SerialNumber p_serialNumber := ?, + template (present) RepetitionPeriod p_repetitionPeriod := ?, + template (present) NumberOfBroadcastsRequested p_numberOfBroadcastsRequested := ? + ) := { + procedureCode := id_WriteReplaceWarning, + criticality := reject, + value_ := { + WriteReplaceWarningRequest := { + protocolIEs := { + { + id := id_MessageIdentifier, + criticality := reject, + value_ := { MessageIdentifier := p_messageIdentifier } + }, + { + id := id_SerialNumber, + criticality := reject, + value_ := { SerialNumber := p_serialNumber } + }, + { + id := id_RepetitionPeriod, + criticality := reject, + value_ := { RepetitionPeriod := p_repetitionPeriod } + }, + { + id := id_NumberOfBroadcastsRequested, + criticality := reject, + value_ := { NumberOfBroadcastsRequested := p_numberOfBroadcastsRequested } + } + } + } + } + } // End of template mw_n2_WriteReplaceWarningRequest + + } // End of group Receive + + } // End of group WRITE_REPLACE_WARNING_REQUEST + + group WRITE_REPLACE_WARNING_RESPONSE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.2 WRITE-REPLACE WARNING RESPONSE + */ + template (value) SuccessfulOutcome m_n2_WriteReplaceWarningResponse( + in template (value) MessageIdentifier p_messageIdentifier := PX_MESSAGE_IDENTIFIER, + in template (value) SerialNumber p_serialNumber := PX_SERIAL_NUMBER + ) := { + procedureCode := id_WriteReplaceWarning, + criticality := reject, + value_ := { + WriteReplaceWarningResponse := { + protocolIEs := { + { + id := id_MessageIdentifier, + criticality := reject, + value_ := { MessageIdentifier := p_messageIdentifier } + }, + { + id := id_SerialNumber, + criticality := reject, + value_ := { SerialNumber := p_serialNumber } + } + } + } + } + } // End of template m_n2_WriteReplaceWarningResponse + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.2 WRITE-REPLACE WARNING RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_WriteReplaceWarningResponse( + template (present) MessageIdentifier p_messageIdentifier := ?, + template (present) SerialNumber p_serialNumber := ? + ) := { + procedureCode := id_WriteReplaceWarning, + criticality := reject, + value_ := { + WriteReplaceWarningResponse := { + protocolIEs := { + { + id := id_MessageIdentifier, + criticality := reject, + value_ := { MessageIdentifier := p_messageIdentifier } + }, + { + id := id_SerialNumber, + criticality := reject, + value_ := { SerialNumber := p_serialNumber } + } + } + } + } + } // End of template mw_n2_WriteReplaceWarningResponse + + } // End of group Receive + + } // End of group WRITE_REPLACE_WARNING_RESPONSE + + group PWS_CANCEL_REQUEST { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.3 PWS CANCEL REQUEST + */ + template (value) InitiatingMessage m_n2_PWSCancelRequest( + in template (value) MessageIdentifier p_messageIdentifier := PX_MESSAGE_IDENTIFIER, + in template (value) SerialNumber p_serialNumber := PX_SERIAL_NUMBER + ) := { + procedureCode := id_PWSCancel, + criticality := reject, + value_ := { + PWSCancelRequest := { + protocolIEs := { + { + id := id_MessageIdentifier, + criticality := reject, + value_ := { MessageIdentifier := p_messageIdentifier } + }, + { + id := id_SerialNumber, + criticality := reject, + value_ := { SerialNumber := p_serialNumber } + } + } + } + } + } // End of template m_n2_PWSCancelRequest + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.3 PWS CANCEL REQUEST + */ + template (present) InitiatingMessage mw_n2_PWSCancelRequest( + template (present) MessageIdentifier p_messageIdentifier := ?, + template (present) SerialNumber p_serialNumber := ? + ) := { + procedureCode := id_PWSCancel, + criticality := reject, + value_ := { + PWSCancelRequest := { + protocolIEs := { + { + id := id_MessageIdentifier, + criticality := reject, + value_ := { MessageIdentifier := p_messageIdentifier } + }, + { + id := id_SerialNumber, + criticality := reject, + value_ := { SerialNumber := p_serialNumber } + } + } + } + } + } // End of template mw_n2_PWSCancelRequest + + } // End of group Receive + + } // End of group PWS_CANCEL_REQUEST + + group PWS_CANCEL_RESPONSE { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.4 PWS CANCEL RESPONSE + */ + template (value) SuccessfulOutcome m_n2_PWSCancelResponse( + in template (value) MessageIdentifier p_messageIdentifier := PX_MESSAGE_IDENTIFIER, + in template (value) SerialNumber p_serialNumber := PX_SERIAL_NUMBER + ) := { + procedureCode := id_PWSCancel, + criticality := reject, + value_ := { + PWSCancelResponse := { + protocolIEs := { + { + id := id_MessageIdentifier, + criticality := reject, + value_ := { MessageIdentifier := p_messageIdentifier } + }, + { + id := id_SerialNumber, + criticality := reject, + value_ := { SerialNumber := p_serialNumber } + } + } + } + } + } // End of template m_n2_PWSCancelResponse + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.4 PWS CANCEL RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_PWSCancelResponse( + template (present) MessageIdentifier p_messageIdentifier := ?, + template (present) SerialNumber p_serialNumber := ? + ) := { + procedureCode := id_PWSCancel, + criticality := reject, + value_ := { + PWSCancelResponse := { + protocolIEs := { + { + id := id_MessageIdentifier, + criticality := reject, + value_ := { MessageIdentifier := p_messageIdentifier } + }, + { + id := id_SerialNumber, + criticality := reject, + value_ := { SerialNumber := p_serialNumber } + } + } + } + } + } // End of template mw_n2_PWSCancelResponse + + } // End of group Receive + + } // End of group PWS_CANCEL_RESPONSE + + group PWS_RESTART_INDICATION { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.5 PWS RESTART INDICATION + */ + template (value) InitiatingMessage m_n2_PWSRestartIndication( + in template (value) CellIDListForRestart p_cellIDListForRestart, + in template (value) GlobalRANNodeID p_globalRANNodeID, + in template (value) TAIListForRestart p_tAIListForRestart, + in template (value) EmergencyAreaIDListForRestart p_emergencyAreaIDListForRestart + ) := { + procedureCode := id_PWSRestartIndication, + criticality := ignore, + value_ := { + PWSRestartIndication := { + protocolIEs := { + { + id := id_CellIDListForRestart, + criticality := reject, + value_ := { CellIDListForRestart := p_cellIDListForRestart } + }, + { + id := id_GlobalRANNodeID, + criticality := reject, + value_ := { GlobalRANNodeID := p_globalRANNodeID } + }, + { + id := id_TAIListForRestart, + criticality := reject, + value_ := { TAIListForRestart := p_tAIListForRestart } + }, + { + id := id_EmergencyAreaIDListForRestart, + criticality := reject, + value_ := { EmergencyAreaIDListForRestart := p_emergencyAreaIDListForRestart } + } + } + } + } + } // End of template m_n2_PWSRestartIndication + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.5 PWS RESTART INDICATION + */ + template (present) InitiatingMessage mw_n2_PWSRestartIndication( + template (present) CellIDListForRestart p_cellIDListForRestart := ?, + template (present) GlobalRANNodeID p_globalRANNodeID := ?, + template (present) TAIListForRestart p_tAIListForRestart := ?, + template (present) EmergencyAreaIDListForRestart p_emergencyAreaIDListForRestart := ? + ) := { + procedureCode := id_PWSRestartIndication, + criticality := ignore, + value_ := { + PWSRestartIndication := { + protocolIEs := { + { + id := id_CellIDListForRestart, + criticality := reject, + value_ := { CellIDListForRestart := p_cellIDListForRestart } + }, + { + id := id_GlobalRANNodeID, + criticality := reject, + value_ := { GlobalRANNodeID := p_globalRANNodeID } + }, + { + id := id_TAIListForRestart, + criticality := reject, + value_ := { TAIListForRestart := p_tAIListForRestart } + }, + { + id := id_EmergencyAreaIDListForRestart, + criticality := reject, + value_ := { EmergencyAreaIDListForRestart := p_emergencyAreaIDListForRestart } + } + } + } + } + } // End of template mw_n2_PWSRestartIndication + + } // End of group Receive + + } // End of group PWS_RESTART_INDICATION + + group PWS_FAILURE_INDICATION { + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.5 PWS RESTART INDICATION + */ + template (value) InitiatingMessage m_n2_PWSFailureIndication( + in template (value) PWSFailedCellIDList p_pWSFailedCellIDList, + in template (value) GlobalRANNodeID p_globalRANNodeID + ) := { + procedureCode := id_PWSRestartIndication, + criticality := ignore, + value_ := { + PWSFailureIndication := { + protocolIEs := { + { + id := id_PWSFailedCellIDList, + criticality := reject, + value_ := { PWSFailedCellIDList := p_pWSFailedCellIDList } + }, + { + id := id_GlobalRANNodeID, + criticality := reject, + value_ := { GlobalRANNodeID := p_globalRANNodeID } + } + } + } + } + } // End of template m_n2_PWSFailureIndication + + } // End of group Send + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.8.5 PWS RESTART INDICATION + */ + template (present) InitiatingMessage mw_n2_PWSFailureIndication( + template (present) PWSFailedCellIDList p_pWSFailedCellIDList := ?, + template (present) GlobalRANNodeID p_globalRANNodeID := ? + ) := { + procedureCode := id_PWSRestartIndication, + criticality := ignore, + value_ := { + PWSFailureIndication := { + protocolIEs := { + { + id := id_PWSFailedCellIDList, + criticality := reject, + value_ := { PWSFailedCellIDList := p_pWSFailedCellIDList } + }, + { + id := id_GlobalRANNodeID, + criticality := reject, + value_ := { GlobalRANNodeID := p_globalRANNodeID } + } + } + } + } + } // End of template mw_n2_PWSFailureIndication + + } // End of group Receive + + } // End of group PWS_FAILURE_INDICATION + + } // End of group Warning_Message_Transmission_Messages + + //9.2.9 + group NRPPa_Transport_Messages { + //9.2.9.1 + group DOWNLINK_UE_ASSOCIATED_NRPPA_TRANSPORT{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.9.1 DOWNLINK UE ASSOCIATED NRPPA TRANSPORT + */ + template (value) InitiatingMessage m_n2_DownlinkUEAssociatedNRPPaTransport( + in template (value) AMF_UE_NGAP_ID p_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_rAN_UE_NGAP_ID, + in template (value) RoutingID p_routingID, + in template (value) NRPPa_PDU p_nRPPa_PDU + ) := { + procedureCode := id_DownlinkUEAssociatedNRPPaTransport, + criticality := ignore, + value_ := { + DownlinkUEAssociatedNRPPaTransport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_AMF_UE_NGAP_ID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_rAN_UE_NGAP_ID } + }, + { + id := id_RoutingID, + criticality := reject, + value_ := { RoutingID := p_routingID } + }, + { + id := id_NRPPa_PDU, + criticality := reject, + value_ := { NRPPa_PDU := p_nRPPa_PDU } + } + } + } + } + } // End of template m_n2_DownlinkUEAssociatedNRPPaTransport + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.9.1 DOWNLINK UE ASSOCIATED NRPPA TRANSPORT + */ + template (present) InitiatingMessage mw_n2_DownlinkUEAssociatedNRPPaTransport( + template (present) AMF_UE_NGAP_ID p_AMF_UE_NGAP_ID := ?, + template (present) RAN_UE_NGAP_ID p_rAN_UE_NGAP_ID := ?, + template (present) RoutingID p_routingID := ?, + template (present) NRPPa_PDU p_nRPPa_PDU := ? + ) := { + procedureCode := id_DownlinkUEAssociatedNRPPaTransport, + criticality := ignore, + value_ := { + DownlinkUEAssociatedNRPPaTransport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_AMF_UE_NGAP_ID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_rAN_UE_NGAP_ID } + }, + { + id := id_RoutingID, + criticality := reject, + value_ := { RoutingID := p_routingID } + }, + { + id := id_NRPPa_PDU, + criticality := reject, + value_ := { NRPPa_PDU := p_nRPPa_PDU } + } + } + } + } + } // End of template mw_n2_DownlinkUEAssociatedNRPPaTransport + + } + } + //9.2.9.2 + group UPLINK_UE_ASSOCIATED_NRPPA_TRANSPORT{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.9.2 UPLINK UE ASSOCIATED NRPPA TRANSPORT + */ + template (value) InitiatingMessage m_n2_UplinkUEAssociatedNRPPaTransport( + in template (value) AMF_UE_NGAP_ID p_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_rAN_UE_NGAP_ID, + in template (value) RoutingID p_routingID, + in template (value) NRPPa_PDU p_nRPPa_PDU + ) := { + procedureCode := id_UplinkUEAssociatedNRPPaTransport, + criticality := ignore, + value_ := { + UplinkUEAssociatedNRPPaTransport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_AMF_UE_NGAP_ID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_rAN_UE_NGAP_ID } + }, + { + id := id_RoutingID, + criticality := reject, + value_ := { RoutingID := p_routingID } + }, + { + id := id_NRPPa_PDU, + criticality := reject, + value_ := { NRPPa_PDU := p_nRPPa_PDU } + } + } + } + } + } // End of template m_n2_UplinkUEAssociatedNRPPaTransport + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.9.2 UPLINK UE ASSOCIATED NRPPA TRANSPORT + */ + template (present) InitiatingMessage mw_n2_UplinkUEAssociatedNRPPaTransport( + template (present) AMF_UE_NGAP_ID p_AMF_UE_NGAP_ID := ?, + template (present) RAN_UE_NGAP_ID p_rAN_UE_NGAP_ID := ?, + template (present) RoutingID p_routingID := ?, + template (present) NRPPa_PDU p_nRPPa_PDU := ? + ) := { + procedureCode := id_UplinkUEAssociatedNRPPaTransport, + criticality := ignore, + value_ := { + UplinkUEAssociatedNRPPaTransport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_AMF_UE_NGAP_ID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_rAN_UE_NGAP_ID } + }, + { + id := id_RoutingID, + criticality := reject, + value_ := { RoutingID := p_routingID } + }, + { + id := id_NRPPa_PDU, + criticality := reject, + value_ := { NRPPa_PDU := p_nRPPa_PDU } + } + } + } + } + } // End of template mw_n2_UplinkUEAssociatedNRPPaTransport + + } + } + //9.2.9.3 + group DOWNLINK_NON_UE_ASSOCIATED_NRPPA_TRANSPORT{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.9.3 DOWNLINK NON UE ASSOCIATED NRPPA TRANSPORT + */ + template (value) InitiatingMessage m_n2_DownlinkNonUEAssociatedNRPPaTransport( + in template (value) RoutingID p_routingID, + in template (value) NRPPa_PDU p_nRPPa_PDU + ) := { + procedureCode := id_DownlinkNonUEAssociatedNRPPaTransport, + criticality := ignore, + value_ := { + DownlinkNonUEAssociatedNRPPaTransport := { + protocolIEs := { + { + id := id_RoutingID, + criticality := reject, + value_ := { RoutingID := p_routingID } + }, + { + id := id_NRPPa_PDU, + criticality := reject, + value_ := { NRPPa_PDU := p_nRPPa_PDU } + } + } + } + } + } // End of template m_n2_DownlinkNonUEAssociatedNRPPaTransport + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.9.1 DOWNLINK UE ASSOCIATED NRPPA TRANSPORT + */ + template (present) InitiatingMessage mw_n2_DownlinkNonUEAssociatedNRPPaTransport( + template (present) RoutingID p_routingID := ?, + template (present) NRPPa_PDU p_nRPPa_PDU := ? + ) := { + procedureCode := id_DownlinkNonUEAssociatedNRPPaTransport, + criticality := ignore, + value_ := { + DownlinkNonUEAssociatedNRPPaTransport := { + protocolIEs := { + { + id := id_RoutingID, + criticality := reject, + value_ := { RoutingID := p_routingID } + }, + { + id := id_NRPPa_PDU, + criticality := reject, + value_ := { NRPPa_PDU := p_nRPPa_PDU } + } + } + } + } + } // End of template mw_n2_DownlinkNonUEAssociatedNRPPaTransport + + } + } + //9.2.9.4 + group UPLINK_NON_UE_ASSOCIATED_NRPPA_TRANSPORT{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.9.4 UPLINK NON UE ASSOCIATED NRPPA TRANSPORT + */ + template (value) InitiatingMessage m_n2_UplinkNonUEAssociatedNRPPaTransport( + in template (value) RoutingID p_routingID, + in template (value) NRPPa_PDU p_nRPPa_PDU + ) := { + procedureCode := id_UplinkNonUEAssociatedNRPPaTransport, + criticality := ignore, + value_ := { + UplinkNonUEAssociatedNRPPaTransport := { + protocolIEs := { + { + id := id_RoutingID, + criticality := reject, + value_ := { RoutingID := p_routingID } + }, + { + id := id_NRPPa_PDU, + criticality := reject, + value_ := { NRPPa_PDU := p_nRPPa_PDU } + } + } + } + } + } // End of template m_n2_UplinkNonUEAssociatedNRPPaTransport + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.9.4 UPLINK NON UE ASSOCIATED NRPPA TRANSPORT + */ + template (present) InitiatingMessage mw_n2_UplinkNonUEAssociatedNRPPaTransport( + template (present) RoutingID p_routingID := ?, + template (present) NRPPa_PDU p_nRPPa_PDU := ? + ) := { + procedureCode := id_UplinkNonUEAssociatedNRPPaTransport, + criticality := ignore, + value_ := { + UplinkNonUEAssociatedNRPPaTransport := { + protocolIEs := { + { + id := id_RoutingID, + criticality := reject, + value_ := { RoutingID := p_routingID } + }, + { + id := id_NRPPa_PDU, + criticality := reject, + value_ := { NRPPa_PDU := p_nRPPa_PDU } + } + } + } + } + } // End of template mw_n2_UplinkNonUEAssociatedNRPPaTransport + + } + } + } // End of group NRPPa_Transport_Messages + + //9.2.10 + group Trace_Messages { + //9.2.10.1 + group TRACE_START{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.1 TRACE START + */ + template (value) InitiatingMessage m_n2_TraceStart_ie := { + procedureCode := id_TraceStart, + criticality := ignore, + value_ := { + TraceStart := { + protocolIEs := { } + } + } + } // End of template m_n2_TraceStart_ie + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.1 TRACE START + */ + template (value) InitiatingMessage m_n2_TraceStart( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) TraceActivation p_traceActivation + ) := { + procedureCode := id_TraceStart, + criticality := ignore, + value_ := { + TraceStart := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_TraceActivation, + criticality := ignore, + value_ := { TraceActivation := p_traceActivation } + } + } + } + } + } // End of template m_n2_TraceStart + } + + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.1 TRACE START + */ + template (present) InitiatingMessage mw_n2_TraceStart_ie := { + procedureCode := id_TraceStart, + criticality := ignore, + value_ := { + TraceStart := { + protocolIEs := { } + } + } + } // End of template mw_n2_TraceStart_ie + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.1 TRACE START + */ + template (present) InitiatingMessage mw_n2_TraceStart( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) TraceActivation p_traceActivation := ? + ) := { + procedureCode := id_TraceStart, + criticality := ignore, + value_ := { + TraceStart := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_TraceActivation, + criticality := ignore, + value_ := { TraceActivation := p_traceActivation } + } + } + } + } + } // End of template mw_n2_TraceStart + + } + } + //9.2.10.2 + group TRACE_FAILURE_INDICATION{ + + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.2 TRACE FAILURE INDICATION + */ + template (value) InitiatingMessage m_n2_TraceFailureIndication_ie := { + procedureCode := id_TraceFailureIndication, + criticality := ignore, + value_ := { + TraceFailureIndication := { + protocolIEs := { } + } + } + } // End of template m_n2_TraceFailureIndication_ie + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.2 TRACE FAILURE INDICATION + */ + template (value) InitiatingMessage m_n2_TraceFailureIndication( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) NGRANTraceID p_NGRANTraceID, + in template (value) Cause p_cause + ) := { + procedureCode := id_TraceFailureIndication, + criticality := ignore, + value_ := { + TraceFailureIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NGRANTraceID, + criticality := ignore, + value_ := { NGRANTraceID := p_NGRANTraceID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_TraceFailureIndication + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.2 TRACE FAILURE INDICATION + */ + template (present) InitiatingMessage mw_n2_TraceFailureIndication_ie := { + procedureCode := id_TraceFailureIndication, + criticality := ignore, + value_ := { + TraceFailureIndication := { + protocolIEs := { } + } + } + } // End of template mw_n2_TraceFailureIndication_ie + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.2 TRACE FAILURE INDICATION + */ + template (present) InitiatingMessage mw_n2_TraceFailureIndication( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) NGRANTraceID p_NGRANTraceID := ?, + template (present) Cause p_cause := ? + ) := { + procedureCode := id_TraceFailureIndication, + criticality := ignore, + value_ := { + TraceFailureIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NGRANTraceID, + criticality := ignore, + value_ := { NGRANTraceID := p_NGRANTraceID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_TraceFailureIndication + } + } + //9.2.10.3 + group DEACTIVATE_TRACE{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.3 DEACTIVATE TRACE + */ + template (value) InitiatingMessage m_n2_DeactivateTrace_ie := { + procedureCode := id_DeactivateTrace, + criticality := ignore, + value_ := { + DeactivateTrace := { + protocolIEs := { } + } + } + } // End of template m_n2_DeactivateTrace + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.3 DEACTIVATE TRACE + */ + template (value) InitiatingMessage m_n2_DeactivateTrace( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) NGRANTraceID p_NGRANTraceID + ) := { + procedureCode := id_DeactivateTrace, + criticality := ignore, + value_ := { + DeactivateTrace := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NGRANTraceID, + criticality := ignore, + value_ := { NGRANTraceID := p_NGRANTraceID } + } + } + } + } + } // End of template m_n2_DeactivateTrace + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.3 DEACTIVATE TRACE + */ + template (present) InitiatingMessage mw_n2_DeactivateTrace_ie := { + procedureCode := id_DeactivateTrace, + criticality := ignore, + value_ := { + DeactivateTrace := { + protocolIEs := { } + } + } + } // End of template mw_n2_DeactivateTrace_ie + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.3 DEACTIVATE TRACE + */ + template (present) InitiatingMessage mw_n2_DeactivateTrace( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) NGRANTraceID p_NGRANTraceID := ? + ) := { + procedureCode := id_DeactivateTrace, + criticality := ignore, + value_ := { + DeactivateTrace := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NGRANTraceID, + criticality := ignore, + value_ := { NGRANTraceID := p_NGRANTraceID } + } + } + } + } + } // End of template mw_n2_DeactivateTrace + } + } + //9.2.10.4 + group CELL_TRAFFIC_TRACE{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.4 CELL TRAFFIC TRACE + */ + template (value) InitiatingMessage m_n2_CellTrafficTrace_ie := { + procedureCode := id_CellTrafficTrace, + criticality := ignore, + value_ := { + CellTrafficTrace := { + protocolIEs := { } + } + } + } // End of template m_n2_CellTrafficTrace_ie + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.4 CELL TRAFFIC TRACE + */ + template (value) InitiatingMessage m_n2_CellTrafficTrace( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) NGRANTraceID p_NGRANTraceID, + in template (value) NGRAN_CGI p_nGRAN_CGI, + in template (value) TransportLayerAddress p_tla, + in template (value) PrivacyIndicator p_privacyInd, + in template (value) URI_address p_uRI_address + ) := { + procedureCode := id_CellTrafficTrace, + criticality := ignore, + value_ := { + CellTrafficTrace := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NGRANTraceID, + criticality := ignore, + value_ := { NGRANTraceID := p_NGRANTraceID } + }, + { + id := id_NGRAN_CGI, + criticality := ignore, + value_ := { NGRAN_CGI := p_nGRAN_CGI } + }, + { + id := id_TraceCollectionEntityIPAddress, + criticality := ignore, + value_ := { TransportLayerAddress := p_tla } + }, + { + id := id_PrivacyIndicator, + criticality := ignore, + value_ := { PrivacyIndicator := p_privacyInd } + }, + { + id := id_TraceCollectionEntityURI, + criticality := ignore, + value_ := { URI_address := p_uRI_address } + } + } + } + } + } // End of template m_n2_CellTrafficTrace + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.4 CELL TRAFFIC TRACE + */ + template (present) InitiatingMessage mw_n2_CellTrafficTrace_ie := { + procedureCode := id_CellTrafficTrace, + criticality := ignore, + value_ := { + CellTrafficTrace := { + protocolIEs := { } + } + } + } // End of template mw_n2_CellTrafficTrace_ie + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.10.4 CELL TRAFFIC TRACE + */ + template (present) InitiatingMessage mw_n2_CellTrafficTrace( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template (present) NGRANTraceID p_NGRANTraceID := ?, + template (present) NGRAN_CGI p_nGRAN_CGI := ?, + template (present) TransportLayerAddress p_tla := ?, + template (present) PrivacyIndicator p_privacyInd := ?, + template (present) URI_address p_uRI_address := ? + ) := { + procedureCode := id_CellTrafficTrace, + criticality := ignore, + value_ := { + CellTrafficTrace := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_NGRANTraceID, + criticality := ignore, + value_ := { NGRANTraceID := p_NGRANTraceID } + }, + { + id := id_NGRAN_CGI, + criticality := ignore, + value_ := { NGRAN_CGI := p_nGRAN_CGI } + }, + { + id := id_TraceCollectionEntityIPAddress, + criticality := ignore, + value_ := { TransportLayerAddress := p_tla } + }, + { + id := id_PrivacyIndicator, + criticality := ignore, + value_ := { PrivacyIndicator := p_privacyInd } + }, + { + id := id_TraceCollectionEntityURI, + criticality := ignore, + value_ := { URI_address := p_uRI_address } + } + } + } + } + } // End of template mw_n2_CellTrafficTrace + } + } + } // End of group Trace_Messages + + //9.2.11 + group Location_Reporting_Messages { + //9.2.11.1 + group LOCATION_REPORTING_CONTROL{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.11.1 LOCATION REPORTING CONTROL + */ + template (value) InitiatingMessage m_n2_LocationReportingControl( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) LocationReportingRequestType p_locationReportingRequestType + ) := { + procedureCode := id_LocationReportingControl, + criticality := ignore, + value_ := { + LocationReportingControl := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_LocationReportingRequestType, + criticality := ignore, + value_ := { LocationReportingRequestType := p_locationReportingRequestType} + } + } + } + } + } // End of template m_n2_LocationReportingControl + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.11.1 LOCATION REPORTING CONTROL + */ + template (present) InitiatingMessage mw_n2_LocationReportingControl( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (present) LocationReportingRequestType p_locationReportingRequestType := m_locationReportingRequestType(direct, cell) //TODO: do we need PX here? + ) := { + procedureCode := id_LocationReportingControl, + criticality := ignore, + value_ := { + LocationReportingControl := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_LocationReportingRequestType, + criticality := ignore, + value_ := { LocationReportingRequestType := p_locationReportingRequestType} + } + } + } + } + } // End of template mw_n2_LocationReportingControl + + } + } + //9.2.11.2 + group LOCATION_REPORTING_FAILURE_INDICATION{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.11.2 LOCATION REPORTING FAILURE INDICATION + */ + template (value) InitiatingMessage m_n2_LocationReportingFailureIndication( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) Cause p_cause + ) := { + procedureCode := id_LocationReportingFailureIndication, + criticality := ignore, + value_ := { + LocationReportingFailureIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template m_n2_LocationReportingFailureIndication + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.11.2 LOCATION REPORTING FAILURE INDICATION + */ + template (present) InitiatingMessage mw_n2_LocationReportingFailureIndication( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (present) Cause p_cause + ) := { + procedureCode := id_LocationReportingFailureIndication, + criticality := ignore, + value_ := { + LocationReportingFailureIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_Cause, + criticality := ignore, + value_ := { Cause := p_cause } + } + } + } + } + } // End of template mw_n2_LocationReportingFailureIndication + + } + } + //9.2.11.3 + group LOCATION_REPORT{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.11.3 LOCATION REPORT + */ + template (value) InitiatingMessage m_n2_LocationReport( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) UserLocationInformation p_userLocationInformation, + in template (value) LocationReportingRequestType p_locationReportingRequestType := m_locationReportingRequestType(direct, cell) //TODO: do we need PX here? + ) := { + procedureCode := id_LocationReport, + criticality := ignore, + value_ := { + LocationReport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + }, + { + id := id_LocationReportingRequestType, + criticality := ignore, + value_ := { LocationReportingRequestType := p_locationReportingRequestType} + } + } + } + } + } // End of template m_n2_LocationReport + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.11.3 LOCATION REPORT + */ + template (value) InitiatingMessage m_n2_LocationReport_options( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) UserLocationInformation p_userLocationInformation, + in template (value) UEPresenceInAreaOfInterestList p_uEPresenceInAreaOfInterestList, + in template (value) LocationReportingRequestType p_locationReportingRequestType := m_locationReportingRequestType(direct, cell) //TODO: do we need PX here? + ) := { + procedureCode := id_LocationReport, + criticality := ignore, + value_ := { + LocationReport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + }, + { + id := id_UEPresenceInAreaOfInterestList, + criticality := ignore, + value_ := { UEPresenceInAreaOfInterestList := p_uEPresenceInAreaOfInterestList } + }, + { + id := id_LocationReportingRequestType, + criticality := ignore, + value_ := { LocationReportingRequestType := p_locationReportingRequestType} + } + } + } + } + } // End of template m_n2_LocationReport_options + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.11.3 LOCATION REPORT + */ + template (present) InitiatingMessage mw_n2_LocationReport( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (present) UserLocationInformation p_userLocationInformation := ?, + template (present) LocationReportingRequestType p_locationReportingRequestType := ? + ) := { + procedureCode := id_LocationReport, + criticality := ignore, + value_ := { + LocationReport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + }, + { + id := id_LocationReportingRequestType, + criticality := ignore, + value_ := { LocationReportingRequestType := p_locationReportingRequestType} + } + } + } + } + } // End of template mw_n2_LocationReport + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.11.3 LOCATION REPORT + */ + template (present) InitiatingMessage mw_n2_LocationReport_options( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (present) UserLocationInformation p_userLocationInformation := ?, + template (present) UEPresenceInAreaOfInterestList p_uEPresenceInAreaOfInterestList := ?, + template (present) LocationReportingRequestType p_locationReportingRequestType := ? + ) := { + procedureCode := id_LocationReport, + criticality := ignore, + value_ := { + LocationReport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + }, + { + id := id_UEPresenceInAreaOfInterestList, + criticality := ignore, + value_ := { UEPresenceInAreaOfInterestList := p_uEPresenceInAreaOfInterestList } + }, + { + id := id_LocationReportingRequestType, + criticality := ignore, + value_ := { LocationReportingRequestType := p_locationReportingRequestType} + } + } + } + } + } // End of template mw_n2_LocationReport_options + + } + } + } // End of group Location_Reporting_Messages + + //9.2.12 + group UE_TNLA_Binding_Messages { + //9.2.12.1 + group UE_TNLA_BINDING_RELEASE_REQUEST{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.12.1 UE TNLA BINDING RELEASE REQUEST + */ + template (value) InitiatingMessage m_n2_UETNLABindingReleaseRequest( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_UETNLABindingRelease, + criticality := ignore, + value_ := { + UETNLABindingReleaseRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template m_n2_UETNLABindingReleaseRequest + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.12.1 UE TNLA BINDING RELEASE REQUEST + */ + template (present) InitiatingMessage mw_n2_UETNLABindingReleaseRequest( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_UETNLABindingRelease, + criticality := ignore, + value_ := { + UETNLABindingReleaseRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_UETNLABindingReleaseRequest + + + } + } + } // End of group UE_TNLA_Binding_Messages + + //9.2.13 + group UE_Radio_Capability_Management_Messages { + //9.2.13.1 + group UE_RADIO_CAPABILITY_INFO_INDICATION{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.1 UE RADIO CAPABILITY INFO INDICATION + */ + template (value) InitiatingMessage m_n2_UERadioCapabilityInfoIndication( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) UERadioCapability p_uERadioCapability + ) := { + procedureCode := id_UERadioCapabilityInfoIndication, + criticality := ignore, + value_ := { + UERadioCapabilityInfoIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + } + } + } + } + } // End of template m_n2_UERadioCapabilityInfoIndication + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.1 UE RADIO CAPABILITY INFO INDICATION + */ + template (value) InitiatingMessage m_n2_UERadioCapabilityInfoIndication_options( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) UERadioCapability p_uERadioCapability, + in template (value) UERadioCapabilityForPaging p_uERadioCapabilityForPaging, + in template (value) UERadioCapability p_uERadioCapability_EUTRA_Format + ) := { + procedureCode := id_UERadioCapabilityInfoIndication, + criticality := ignore, + value_ := { + UERadioCapabilityInfoIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + }, + { + id := id_UERadioCapabilityForPaging, + criticality := reject, + value_ := { UERadioCapabilityForPaging := p_uERadioCapabilityForPaging } + }, + { + id := id_UERadioCapability_EUTRA_Format, + criticality := reject, + value_ := { UERadioCapability := p_uERadioCapability_EUTRA_Format } + } + } + } + } + } // End of template m_n2_UERadioCapabilityInfoIndication_options + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.1 UE RADIO CAPABILITY INFO INDICATION + */ + template (present) InitiatingMessage mw_n2_UERadioCapabilityInfoIndication( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (present) UERadioCapability p_uERadioCapability := ? + ) := { + procedureCode := id_UERadioCapabilityInfoIndication, + criticality := ignore, + value_ := { + UERadioCapabilityInfoIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + } + } + } + } + } // End of template mw_n2_UERadioCapabilityInfoIndication + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.1 UE RADIO CAPABILITY INFO INDICATION + */ + template (present) InitiatingMessage mw_n2_UERadioCapabilityInfoIndication_options( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (present) UERadioCapability p_uERadioCapability := ?, + template (present) UERadioCapabilityForPaging p_uERadioCapabilityForPaging := ?, + template (present) UERadioCapability p_uERadioCapability_EUTRA_Format := ? + ) := { + procedureCode := id_UERadioCapabilityInfoIndication, + criticality := ignore, + value_ := { + UERadioCapabilityInfoIndication := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + }, + { + id := id_UERadioCapabilityForPaging, + criticality := reject, + value_ := { UERadioCapabilityForPaging := p_uERadioCapabilityForPaging } + }, + { + id := id_UERadioCapability_EUTRA_Format, + criticality := reject, + value_ := { UERadioCapability := p_uERadioCapability_EUTRA_Format } + } + } + } + } + } // End of template mw_n2_UERadioCapabilityInfoIndication_options + + } + } + //9.2.13.2 + group UE_RADIO_CAPABILITY_CHECK_REQUEST{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.2 UE RADIO CAPABILITY CHECK REQUEST + */ + template (value) InitiatingMessage m_n2_UERadioCapabilityCheckRequest( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_UERadioCapabilityCheck, + criticality := ignore, + value_ := { + UERadioCapabilityCheckRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template m_n2_UERadioCapabilityCheckRequest + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.2 UE RADIO CAPABILITY CHECK REQUEST + */ + template (value) InitiatingMessage m_n2_UERadioCapabilityCheckRequest_options( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) UERadioCapability p_uERadioCapability, + in template (value) UERadioCapabilityID p_uERadioCapabilityID + ) := { + procedureCode := id_UERadioCapabilityCheck, + criticality := ignore, + value_ := { + UERadioCapabilityCheckRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + }, + { + id := id_UERadioCapabilityID, + criticality := reject, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + } + } + } + } + } // End of template m_n2_UERadioCapabilityCheckRequest_options + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.2 UE RADIO CAPABILITY CHECK REQUEST + */ + template (present) InitiatingMessage mw_n2_UERadioCapabilityCheckRequest( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID + ) := { + procedureCode := id_UERadioCapabilityCheck, + criticality := ignore, + value_ := { + UERadioCapabilityCheckRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + } + } + } + } + } // End of template mw_n2_UERadioCapabilityCheckRequest + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.2 UE RADIO CAPABILITY CHECK REQUEST + */ + template (present) InitiatingMessage mw_n2_UERadioCapabilityCheckRequest_options( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (present) UERadioCapability p_uERadioCapability := ?, + template (present) UERadioCapabilityID p_uERadioCapabilityID := ? + ) := { + procedureCode := id_UERadioCapabilityCheck, + criticality := ignore, + value_ := { + UERadioCapabilityCheckRequest := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + }, + { + id := id_UERadioCapabilityID, + criticality := reject, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + } + } + } + } + } // End of template mw_n2_UERadioCapabilityCheckRequest_options + + } + } + //9.2.13.3 + group UE_RADIO_CAPABILITY_CHECK_RESPONSE{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.3 UE RADIO CAPABILITY CHECK RESPONSE + */ + template (value) SuccessfulOutcome m_n2_UERadioCapabilityCheckResponse( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) IMSVoiceSupportIndicator p_iMSVoiceSupportIndicator + ) := { + procedureCode := id_UERadioCapabilityCheck, + criticality := ignore, + value_ := { + UERadioCapabilityCheckResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_IMSVoiceSupportIndicator, + criticality := reject, + value_ := { IMSVoiceSupportIndicator := p_iMSVoiceSupportIndicator } + } + } + } + } + } // End of template m_n2_UERadioCapabilityCheckResponse + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.3 UE RADIO CAPABILITY CHECK RESPONSE + */ + template (value) SuccessfulOutcome m_n2_UERadioCapabilityCheckResponse_options( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) IMSVoiceSupportIndicator p_iMSVoiceSupportIndicator, + in template (value) CriticalityDiagnostics p_criticalityDiagnostics + ) := { + procedureCode := id_UERadioCapabilityCheck, + criticality := ignore, + value_ := { + UERadioCapabilityCheckResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_IMSVoiceSupportIndicator, + criticality := reject, + value_ := { IMSVoiceSupportIndicator := p_iMSVoiceSupportIndicator } + }, + { + id := id_CriticalityDiagnostics, + criticality := ignore, + value_ := { CriticalityDiagnostics := p_criticalityDiagnostics } + } + } + } + } + } // End of template m_n2_UERadioCapabilityCheckResponse_options + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.3 UE RADIO CAPABILITY CHECK RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_UERadioCapabilityCheckResponse( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (present) IMSVoiceSupportIndicator p_iMSVoiceSupportIndicator := ? + ) := { + procedureCode := id_UERadioCapabilityCheck, + criticality := ignore, + value_ := { + UERadioCapabilityCheckResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_IMSVoiceSupportIndicator, + criticality := reject, + value_ := { IMSVoiceSupportIndicator := p_iMSVoiceSupportIndicator } + } + } + } + } + } // End of template mw_n2_UERadioCapabilityCheckResponse + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.3 UE RADIO CAPABILITY CHECK RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_UERadioCapabilityCheckResponse_options( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (present) IMSVoiceSupportIndicator p_iMSVoiceSupportIndicator := ?, + template (present) CriticalityDiagnostics p_criticalityDiagnostics := ? + ) := { + procedureCode := id_UERadioCapabilityCheck, + criticality := ignore, + value_ := { + UERadioCapabilityCheckResponse := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := reject, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := reject, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_IMSVoiceSupportIndicator, + criticality := reject, + value_ := { IMSVoiceSupportIndicator := p_iMSVoiceSupportIndicator } + }, + { + id := id_CriticalityDiagnostics, + criticality := ignore, + value_ := { CriticalityDiagnostics := p_criticalityDiagnostics } + } + } + } + } + } // End of template mw_n2_UERadioCapabilityCheckResponse_options + + } + } + //9.2.13.4 + group UE_RADIO_CAPABILITY_ID_MAPPING_REQUEST{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.3 UE RADIO CAPABILITY CHECK RESPONSE + */ + template (value) InitiatingMessage m_n2_UERadioCapabilityIDMappingRequest( + in template (value) UERadioCapabilityID p_uERadioCapabilityID + ) := { + procedureCode := id_UERadioCapabilityIDMapping, + criticality := ignore, + value_ := { + UERadioCapabilityIDMappingRequest := { + protocolIEs := { + { + id := id_UERadioCapabilityID, + criticality := reject, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + } + } + } + } + } // End of template m_n2_UERadioCapabilityIDMappingRequest + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.3 UE RADIO CAPABILITY CHECK RESPONSE + */ + template (present) InitiatingMessage mw_n2_UERadioCapabilityIDMappingRequest( + template (present) UERadioCapabilityID p_uERadioCapabilityID := ? + ) := { + procedureCode := id_UERadioCapabilityIDMapping, + criticality := ignore, + value_ := { + UERadioCapabilityIDMappingRequest := { + protocolIEs := { + { + id := id_UERadioCapabilityID, + criticality := reject, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + } + } + } + } + } // End of template mw_n2_UERadioCapabilityIDMappingRequest + + } + } + //9.2.13.5 + group UE_RADIO_CAPABILITY_ID_MAPPING_RESPONSE{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.3 UE RADIO CAPABILITY CHECK RESPONSE + */ + template (value) SuccessfulOutcome m_n2_UERadioCapabilityIDMappingResponse( + in template (value) UERadioCapabilityID p_uERadioCapabilityID, + in template (value) UERadioCapability p_uERadioCapability + ) := { + procedureCode := id_UERadioCapabilityIDMapping, + criticality := ignore, + value_ := { + UERadioCapabilityIDMappingResponse := { + protocolIEs := { + { + id := id_UERadioCapabilityID, + criticality := reject, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + }, + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + } + } + } + } + } // End of template m_n2_UERadioCapabilityIDMappingResponse + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.3 UE RADIO CAPABILITY CHECK RESPONSE + */ + template (value) SuccessfulOutcome m_n2_UERadioCapabilityIDMappingResponse_options( + in template (value) UERadioCapabilityID p_uERadioCapabilityID, + in template (value) UERadioCapability p_uERadioCapability, + in template (value) CriticalityDiagnostics p_criticalityDiagnostics + ) := { + procedureCode := id_UERadioCapabilityIDMapping, + criticality := ignore, + value_ := { + UERadioCapabilityIDMappingResponse := { + protocolIEs := { + { + id := id_UERadioCapabilityID, + criticality := reject, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + }, + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + }, + { + id := id_CriticalityDiagnostics, + criticality := ignore, + value_ := { CriticalityDiagnostics := p_criticalityDiagnostics } + } + } + } + } + } // End of template m_n2_UERadioCapabilityIDMappingResponse_options + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.3 UE RADIO CAPABILITY CHECK RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_UERadioCapabilityIDMappingResponse( + template (present) UERadioCapabilityID p_uERadioCapabilityID := ?, + template (present) UERadioCapability p_uERadioCapability := ? + ) := { + procedureCode := id_UERadioCapabilityIDMapping, + criticality := ignore, + value_ := { + UERadioCapabilityIDMappingResponse := { + protocolIEs := { + { + id := id_UERadioCapabilityID, + criticality := reject, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + }, + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + } + } + } + } + } // End of template mw_n2_UERadioCapabilityIDMappingResponse + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.13.3 UE RADIO CAPABILITY CHECK RESPONSE + */ + template (present) SuccessfulOutcome mw_n2_UERadioCapabilityIDMappingResponse_options( + template (present) UERadioCapabilityID p_uERadioCapabilityID := ?, + template (present) UERadioCapability p_uERadioCapability := ?, + template (present) CriticalityDiagnostics p_criticalityDiagnostics := ? + ) := { + procedureCode := id_UERadioCapabilityIDMapping, + criticality := ignore, + value_ := { + UERadioCapabilityIDMappingResponse := { + protocolIEs := { + { + id := id_UERadioCapabilityID, + criticality := reject, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + }, + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + }, + { + id := id_CriticalityDiagnostics, + criticality := ignore, + value_ := { CriticalityDiagnostics := p_criticalityDiagnostics } + } + } + } + } + } // End of template mw_n2_UERadioCapabilityIDMappingResponse_options + + } + } + } // End of group UE_Radio_Capability_Management_Messages + + //9.2.14 + group Data_Usage_Reporting_Messages { + //9.2.14.1 + group SECONDARY_RAT_DATA_USAGE_REPORT{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.14.1 SECONDARY RAT DATA USAGE REPORT + */ + template (value) InitiatingMessage m_n2_SecondaryRATDataUsageReport( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceSecondaryRATUsageList p_pDUSessionResourceSecondaryRATUsageList + ) := { + procedureCode := id_SecondaryRATDataUsageReport, + criticality := ignore, + value_ := { + SecondaryRATDataUsageReport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSecondaryRATUsageList, + criticality := ignore, + value_ := { PDUSessionResourceSecondaryRATUsageList := p_pDUSessionResourceSecondaryRATUsageList } + } + } + } + } + } // End of template m_n2_SecondaryRATDataUsageReport + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.14.1 SECONDARY RAT DATA USAGE REPORT + */ + template (value) InitiatingMessage m_n2_SecondaryRATDataUsageReport_options( + in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + in template (value) PDUSessionResourceSecondaryRATUsageList p_pDUSessionResourceSecondaryRATUsageList, + in template (value) HandoverFlag p_handoverFlag, + in template (value) UserLocationInformation p_userLocationInformation + ) := { + procedureCode := id_SecondaryRATDataUsageReport, + criticality := ignore, + value_ := { + SecondaryRATDataUsageReport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSecondaryRATUsageList, + criticality := ignore, + value_ := { PDUSessionResourceSecondaryRATUsageList := p_pDUSessionResourceSecondaryRATUsageList } + }, + { + id := id_HandoverFlag, + criticality := ignore, + value_ := { HandoverFlag := p_handoverFlag } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + } + } + } + } + } // End of template m_n2_SecondaryRATDataUsageReport + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.14.1 SECONDARY RAT DATA USAGE REPORT + */ + template (present) InitiatingMessage mw_n2_SecondaryRATDataUsageReport( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (present) PDUSessionResourceSecondaryRATUsageList p_pDUSessionResourceSecondaryRATUsageList := ? + ) := { + procedureCode := id_SecondaryRATDataUsageReport, + criticality := ignore, + value_ := { + SecondaryRATDataUsageReport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSecondaryRATUsageList, + criticality := ignore, + value_ := { PDUSessionResourceSecondaryRATUsageList := p_pDUSessionResourceSecondaryRATUsageList } + } + } + } + } + } // End of template mw_n2_SecondaryRATDataUsageReport + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.14.1 SECONDARY RAT DATA USAGE REPORT + */ + template (present) InitiatingMessage mw_n2_SecondaryRATDataUsageReport_options( + template (present) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (present) PDUSessionResourceSecondaryRATUsageList p_pDUSessionResourceSecondaryRATUsageList := ?, + template (present) HandoverFlag p_handoverFlag := ?, + template (present) UserLocationInformation p_userLocationInformation := ? + ) := { + procedureCode := id_SecondaryRATDataUsageReport, + criticality := ignore, + value_ := { + SecondaryRATDataUsageReport := { + protocolIEs := { + { + id := id_AMF_UE_NGAP_ID, + criticality := ignore, + value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } + }, + { + id := id_RAN_UE_NGAP_ID, + criticality := ignore, + value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } + }, + { + id := id_PDUSessionResourceSecondaryRATUsageList, + criticality := ignore, + value_ := { PDUSessionResourceSecondaryRATUsageList := p_pDUSessionResourceSecondaryRATUsageList } + }, + { + id := id_HandoverFlag, + criticality := ignore, + value_ := { HandoverFlag := p_handoverFlag } + }, + { + id := id_UserLocationInformation, + criticality := ignore, + value_ := { UserLocationInformation := p_userLocationInformation } + } + } + } + } + } // End of template mw_n2_SecondaryRATDataUsageReport + + } + } + } // End of group Data_Usage_Reporting_Messages + + //9.2.15 + group RIM_Information_Transfer_Messages { + //9.2.15.1 + group UPLINK_RIM_INFORMATION_TRANSFER{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.15.1 UPLINK RIM INFORMATION TRANSFER + */ + template (value) InitiatingMessage m_n2_UplinkRIMInformationTransfer( + in template (value) RIMInformationTransfer p_rIMInformationTransfer + ) := { + procedureCode := id_UplinkRIMInformationTransfer, + criticality := ignore, + value_ := { + UplinkRIMInformationTransfer := { + protocolIEs := { + { + id := id_RIMInformationTransfer, + criticality := ignore, + value_ := { RIMInformationTransfer := p_rIMInformationTransfer } + } + } + } + } + } // End of template m_n2_UplinkRIMInformationTransfer + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.15.1 UPLINK RIM INFORMATION TRANSFER + */ + template (present) InitiatingMessage mw_n2_UplinkRIMInformationTransfer( + template (present) RIMInformationTransfer p_rIMInformationTransfer := ? + ) := { + procedureCode := id_UplinkRIMInformationTransfer, + criticality := ignore, + value_ := { + UplinkRIMInformationTransfer := { + protocolIEs := { + { + id := id_RIMInformationTransfer, + criticality := ignore, + value_ := { RIMInformationTransfer := p_rIMInformationTransfer } + } + } + } + } + } // End of template mw_n2_UplinkRIMInformationTransfer + + } + } + //9.2.15.2 + group DOWNLINK_RIM_INFORMATION_TRANSFER{ + group Send { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.15.1 DownLINK RIM INFORMATION TRANSFER + */ + template (value) InitiatingMessage m_n2_DownlinkRIMInformationTransfer( + in template (value) RIMInformationTransfer p_rIMInformationTransfer + ) := { + procedureCode := id_DownlinkRIMInformationTransfer, + criticality := ignore, + value_ := { + DownlinkRIMInformationTransfer := { + protocolIEs := { + { + id := id_RIMInformationTransfer, + criticality := ignore, + value_ := { RIMInformationTransfer := p_rIMInformationTransfer } + } + } + } + } + } // End of template m_n2_DownlinkRIMInformationTransfer + + } + group Receive { + + /** + * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.15.1 DownLINK RIM INFORMATION TRANSFER + */ + template (present) InitiatingMessage mw_n2_DownlinkRIMInformationTransfer( + template (present) RIMInformationTransfer p_rIMInformationTransfer := ? + ) := { + procedureCode := id_DownlinkRIMInformationTransfer, + criticality := ignore, + value_ := { + DownlinkRIMInformationTransfer := { + protocolIEs := { + { + id := id_RIMInformationTransfer, + criticality := ignore, + value_ := { RIMInformationTransfer := p_rIMInformationTransfer } + } + } + } + } + } // End of template mw_n2_DownlinkRIMInformationTransfer + + } + } + } // End of group RIM_Information_Transfer_Messages + + } // End of group Message_Functional_Definition_and_Content + + group Information_elements { + + group Send { + + template (omit) AdditionalDLUPTNLInformationForHOItem m_additionalDLUPTNLInformationForHOItem( + in template (value) UPTransportLayerInformation p_additionalDL_NGU_UP_TNLInformation, + in template (value) QosFlowListWithDataForwarding p_additionalQosFlowSetupResponseList, + in template (omit) UPTransportLayerInformation p_additionalDLForwardingUPTNLInformation := omit, + in template (omit) AdditionalDLUPTNLInformationForHOItem.iE_Extensions p_iE_Extensions := omit + ) := { + additionalDL_NGU_UP_TNLInformation := p_additionalDL_NGU_UP_TNLInformation, + additionalQosFlowSetupResponseList := p_additionalQosFlowSetupResponseList, + additionalDLForwardingUPTNLInformation := p_additionalDLForwardingUPTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_additionalDLUPTNLInformationForHOItem + + template (value) AdditionalDLUPTNLInformationForHOItem.iE_Extensions m_additionalDLUPTNLInformationForHOItem_uPTransportLayerInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_AdditionalRedundantDL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_additionalDLUPTNLInformationForHOItem_iE_Extensions + + template (value) AdditionalQosFlowInformation m_additionalQosFlowInformation(in AdditionalQosFlowInformation p_value := more_likely) := p_value; + + template (omit) AllocationAndRetentionPriority m_allocationAndRetentionPriority( + in template (value) PriorityLevelARP p_priorityLevelARP, + in template (value) Pre_emptionCapability p_pre_emptionCapability, + in template (value) Pre_emptionVulnerability p_pre_emptionVulnerability, + in template (omit) AllocationAndRetentionPriority.iE_Extensions p_iE_Extensions := omit + ) := { + priorityLevelARP := p_priorityLevelARP, + pre_emptionCapability := p_pre_emptionCapability, + pre_emptionVulnerability := p_pre_emptionVulnerability, + iE_Extensions := p_iE_Extensions + } // End of template m_allocationAndRetentionPriority + + template (omit) AllowedNSSAI_Item m_allowedNSSAI_Item( + in template (value) S_NSSAI p_s_NSSAI, + in template (omit) AllowedNSSAI_Item.iE_Extensions p_iE_Extensions := omit + ) := { + s_NSSAI := p_s_NSSAI, + iE_Extensions := p_iE_Extensions + } // End of template m_allowedNSSAI_Item + + template (omit) Allowed_PNI_NPN_Item m_allowed_PNI_NPN_Item( + in template (value) PLMNIdentity p_pLMNIdentity, + in template (value) Allowed_PNI_NPN_Item.pNI_NPN_restricted p_pNI_NPN_restricted := restricted, + in template (value) Allowed_CAG_List_per_PLMN p_allowed_CAG_List_per_PLMN, + in template (omit) Allowed_PNI_NPN_Item.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + pNI_NPN_restricted := p_pNI_NPN_restricted, + allowed_CAG_List_per_PLMN := p_allowed_CAG_List_per_PLMN, + iE_Extensions := p_iE_Extensions + } // End of template m_allowed_PNI_NPN_Item + + template (value) AlternativeQoSParaSetIndex m_alternativeQoSParaSetIndex(in template (value) integer p_value := PX_ALTERNATIVE_QOS_PARA_SET_INDEX) := p_value; + + template (value) AlternativeQoSParaSetNotifyIndex m_alternativeQoSParaSetNotifyIndex(in template (value) integer p_value := PX_ALTERNATIVE_QOS_PARA_SET_NOTIFY_INDEX) := p_value; + + template (omit) AlternativeQoSParaSetItem m_alternativeQoSParaSetItem( + in template (value) AlternativeQoSParaSetIndex p_alternativeQoSParaSetIndex, + in template (omit) BitRate p_guaranteedFlowBitRateDL := omit, + in template (omit) BitRate p_guaranteedFlowBitRateUL := omit, + in template (omit) PacketDelayBudget p_packetDelayBudget := omit, + in template (omit) PacketErrorRate p_packetErrorRate := omit, + in template (omit) AlternativeQoSParaSetItem.iE_Extensions p_iE_Extensions := omit + ) := { + alternativeQoSParaSetIndex := p_alternativeQoSParaSetIndex, + guaranteedFlowBitRateDL := p_guaranteedFlowBitRateDL, + guaranteedFlowBitRateUL := p_guaranteedFlowBitRateUL, + packetDelayBudget := p_packetDelayBudget, + packetErrorRate := p_packetErrorRate, + iE_Extensions := p_iE_Extensions + } // End of template m_alternativeQoSParaSetItem + + template (value) AMFName m_aMFName(in AMFName p_value) := p_value; + + template (value) AMFNameVisibleString m_aMFNameVisibleString(in AMFNameVisibleString p_value) := p_value; + + template (value) AMFNameUTF8String m_aMFNameUTF8String(in AMFNameUTF8String p_value) := p_value; + + template (value) AMFPagingTarget m_aMFPagingTarget_globalRANNodeID( + in template (value) GlobalRANNodeID p_globalRANNodeID + ) := { + globalRANNodeID := p_globalRANNodeID + } // End of template m_aMFPagingTarget_globalRANNodeID + + template (value) AMFPagingTarget m_aMFPagingTarget_tAI( + in template (value) TAI p_tAI + ) := { + tAI := p_tAI + } // End of template m_aMFPagingTarget_tAI + + template (value) AMFPagingTarget m_aMFPagingTarget_ext( + in template (value) AMFPagingTarget.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_aMFPagingTarget_ext + + template (omit) AMF_TNLAssociationSetupItem m_aMF_TNLAssociationSetupItem( + in template (value) CPTransportLayerInformation p_aMF_TNLAssociationAddress, + in template (omit) AMF_TNLAssociationSetupItem.iE_Extensions p_iE_Extensions := omit + ) := { + aMF_TNLAssociationAddress := p_aMF_TNLAssociationAddress, + iE_Extensions := p_iE_Extensions + } // End of template m_aMF_TNLAssociationSetupItem + + template (omit) AMF_TNLAssociationToAddItem m_aMF_TNLAssociationToAddItem( + in template (value) CPTransportLayerInformation p_aMF_TNLAssociationAddress, + in template (value) TNLAddressWeightFactor p_tNLAddressWeightFactor, + in template (omit) TNLAssociationUsage p_tNLAssociationUsage := omit, + in template (omit) AMF_TNLAssociationToAddItem.iE_Extensions p_iE_Extensions := omit + ):= { + aMF_TNLAssociationAddress := p_aMF_TNLAssociationAddress, + tNLAssociationUsage := p_tNLAssociationUsage, + tNLAddressWeightFactor := p_tNLAddressWeightFactor, + iE_Extensions := p_iE_Extensions + } // End of template m_aMF_TNLAssociationToAddItem + + template (omit) AMF_TNLAssociationToRemoveItem m_aMF_TNLAssociationToRemoveItem( + in template (value) CPTransportLayerInformation p_aMF_TNLAssociationAddress, + in template (omit) AMF_TNLAssociationToRemoveItem.iE_Extensions p_iE_Extensions := omit + ) := { + aMF_TNLAssociationAddress := p_aMF_TNLAssociationAddress, + iE_Extensions := p_iE_Extensions + } // End of template m_aMF_TNLAssociationToRemoveItem + + template (omit) AMF_TNLAssociationToUpdateItem m_aMF_TNLAssociationToUpdateItem( + in template (value) CPTransportLayerInformation p_aMF_TNLAssociationAddress, + in template (omit) TNLAssociationUsage p_tNLAssociationUsage := omit, + in template (omit) TNLAddressWeightFactor p_tNLAddressWeightFactor := omit, + in template (omit) AMF_TNLAssociationToUpdateItem.iE_Extensions p_iE_Extensions := omit + ) := { + aMF_TNLAssociationAddress := p_aMF_TNLAssociationAddress, + tNLAssociationUsage := p_tNLAssociationUsage, + tNLAddressWeightFactor := p_tNLAddressWeightFactor, + iE_Extensions := p_iE_Extensions + } // End of template m_aMF_TNLAssociationToUpdateItem + + template (omit) AreaOfInterest m_areaOfInterest( + in template (omit) AreaOfInterestTAIList p_areaOfInterestTAIList := omit, + in template (omit) AreaOfInterestCellList p_areaOfInterestCellList := omit, + in template (omit) AreaOfInterestRANNodeList p_areaOfInterestRANNodeList := omit, + in template (omit) AreaOfInterest.iE_Extensions p_iE_Extensions := omit + ) := { + areaOfInterestTAIList := p_areaOfInterestTAIList, + areaOfInterestCellList := p_areaOfInterestCellList, + areaOfInterestRANNodeList := p_areaOfInterestRANNodeList, + iE_Extensions := p_iE_Extensions + } // End of template m_areaOfInterest + + template (omit) AreaOfInterestCellItem m_areaOfInterestCellItem( + in template (value) NGRAN_CGI p_nGRAN_CGI, + in template (omit) AreaOfInterestCellItem.iE_Extensions p_iE_Extensions := omit + ) := { + nGRAN_CGI := p_nGRAN_CGI, + iE_Extensions := p_iE_Extensions + } // End of template m_areaOfInterestCellItem + + template (omit) AreaOfInterestItem m_areaOfInterestItem( + in template (value) AreaOfInterest p_areaOfInterest, + in template (value) LocationReportingReferenceID p_locationReportingReferenceID, + in template (omit) AreaOfInterestItem.iE_Extensions p_iE_Extensions := omit + ) := { + areaOfInterest := p_areaOfInterest, + locationReportingReferenceID := p_locationReportingReferenceID, + iE_Extensions := p_iE_Extensions + } // End of template m_areaOfInterestItem + + template (omit) AreaOfInterestRANNodeItem m_areaOfInterestRANNodeItem( + in template (value) GlobalRANNodeID p_globalRANNodeID, + in template (omit) AreaOfInterestRANNodeItem.iE_Extensions p_iE_Extensions := omit + ):= { + globalRANNodeID := p_globalRANNodeID, + iE_Extensions := p_iE_Extensions + } // End of template m_areaOfInterestRANNodeItem + + template (omit) AreaOfInterestTAIItem m_areaOfInterestTAIItem( + in template (value) TAI p_tAI, + in template (omit) AreaOfInterestTAIItem.iE_Extensions p_iE_Extensions := omit + ) := { + tAI := p_tAI, + iE_Extensions := p_iE_Extensions + } // End of template m_areaOfInterestTAIItem + + template (omit) AssistanceDataForPaging m_assistanceDataForPaging( + in template (omit) AssistanceDataForRecommendedCells p_assistanceDataForRecommendedCells := omit, + in template (omit) PagingAttemptInformation p_pagingAttemptInformation := omit, + in template (omit) AssistanceDataForPaging.iE_Extensions p_iE_Extensions := omit + ) := { + assistanceDataForRecommendedCells := p_assistanceDataForRecommendedCells, + pagingAttemptInformation := p_pagingAttemptInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_assistanceDataForPaging + + template (value) AssistanceDataForPaging.iE_Extensions m_assistanceDataForPaging_NPN_PagingAssistanceInformation( + in template (value) NPN_PagingAssistanceInformation p_nPN_PagingAssistanceInformation + ) := { + { + id := id_NPN_PagingAssistanceInformation, + criticality := ignore, + extensionValue := { NPN_PagingAssistanceInformation := p_nPN_PagingAssistanceInformation } + } + } // End of template m_assistanceDataForPaging_NPN_PagingAssistanceInformation + + template (value) AssistanceDataForPaging.iE_Extensions m_assistanceDataForPaging_pagingAssisDataforCEcapabUE( + in template (value) PagingAssisDataforCEcapabUE p_pagingAssisDataforCEcapabUE + ) := { + { + id := id_PagingAssisDataforCEcapabUE, + criticality := ignore, + extensionValue := { PagingAssisDataforCEcapabUE := p_pagingAssisDataforCEcapabUE } + } + } // End of template m_assistanceDataForPaging_pagingAssisDataforCEcapabUE + + template (value) AssistanceDataForPaging.iE_Extensions m_assistanceDataForPaging_full( + in template (value) NPN_PagingAssistanceInformation p_nPN_PagingAssistanceInformation, + in template (value) PagingAssisDataforCEcapabUE p_pagingAssisDataforCEcapabUE + ) := { + { + id := id_NPN_PagingAssistanceInformation, + criticality := ignore, + extensionValue := { NPN_PagingAssistanceInformation := p_nPN_PagingAssistanceInformation } + }, + { + id := id_PagingAssisDataforCEcapabUE, + criticality := ignore, + extensionValue := { PagingAssisDataforCEcapabUE := p_pagingAssisDataforCEcapabUE } + } + } // End of template m_assistanceDataForPaging_full + + template (omit) AssistanceDataForRecommendedCells m_assistanceDataForRecommendedCells( + in template (value) RecommendedCellsForPaging p_recommendedCellsForPaging, + in template (omit) AssistanceDataForRecommendedCells.iE_Extensions p_iE_Extensions := omit + ) := { + recommendedCellsForPaging := p_recommendedCellsForPaging, + iE_Extensions := p_iE_Extensions + } // End of template m_assistanceDataForRecommendedCells + + template (omit) AssociatedMBSQosFlowSetupRequestItem m_associatedMBSQosFlowSetupRequestItem( + in template (value) QosFlowIdentifier p_mBS_QosFlowIdentifier, + in template (value) QosFlowIdentifier p_associatedUnicastQosFlowIdentifier, + in template (omit) AssociatedMBSQosFlowSetupRequestItem.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_QosFlowIdentifier := p_mBS_QosFlowIdentifier, + associatedUnicastQosFlowIdentifier := p_associatedUnicastQosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template m_associatedMBSQosFlowSetupRequestItem + + template (omit) AssociatedMBSQosFlowSetuporModifyRequestItem m_associatedMBSQosFlowSetuporModifyRequestItem( + in template (value) QosFlowIdentifier p_mBS_QosFlowIdentifier, + in template (value) QosFlowIdentifier p_associatedUnicastQosFlowIdentifier, + in template (omit) AssociatedMBSQosFlowSetuporModifyRequestItem.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_QosFlowIdentifier := p_mBS_QosFlowIdentifier, + associatedUnicastQosFlowIdentifier := p_associatedUnicastQosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template m_associatedMBSQosFlowSetuporModifyRequestItem + + template (omit) AssociatedQosFlowItem m_associatedQosFlowItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (omit) AssociatedQosFlowItem.qosFlowMappingIndication p_qosFlowMappingIndication := omit, + in template (omit) AssociatedQosFlowItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + qosFlowMappingIndication := p_qosFlowMappingIndication, + iE_Extensions := p_iE_Extensions + } // End of template m_associatedQosFlowItem + + template (value) AssociatedQosFlowItem.iE_Extensions m_associatedQosFlowItem_alternativeQoSParaSetIndex( + in template (value) AlternativeQoSParaSetIndex p_alternativeQoSParaSetIndex + ) := { + { + id := id_CurrentQoSParaSetIndex, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetIndex := p_alternativeQoSParaSetIndex } + } + } // End of template m_associatedQosFlowItem_alternativeQoSParaSetIndex + + template (value) AuthenticatedIndication m_authenticatedIndication(in AuthenticatedIndication p_value := true_) := p_value; + + template (value) AreaScopeOfMDT_NR m_areaScopeOfMDT_NR_cellBased( + in template (value) CellBasedMDT_NR p_cellBased + ) := { + cellBased := p_cellBased + } // End of template m_areaScopeOfMDT_cellBased + + template (value) AreaScopeOfMDT_NR m_areaScopeOfMDT_tABased( + in template (value) TABasedMDT p_tABased + ) := { + tABased := p_tABased + } // End of template m_areaScopeOfMDT_tABased + + template (value) AreaScopeOfMDT_NR m_areaScopeOfMDT_pLMNWide := { + pLMNWide := NULL + } // End of template m_areaScopeOfMDT_pLMNWide + + template (value) AreaScopeOfMDT_NR m_areaScopeOfMDT_tAIBased( + in template (value) TAIBasedMDT p_tAIBased + ) := { + tAIBased := p_tAIBased + } // End of template m_areaScopeOfMDT_tAIBased + + template (value) AreaScopeOfMDT_NR m_areaScopeOfMDT_ext( + in template (value) AreaScopeOfMDT_NR.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_areaScopeOfMDT_ext + + template (omit) AreaScopeOfNeighCellsItem m_areaScopeOfNeighCellsItem( + in template (value) NRFrequencyInfo p_nrFrequencyInfo, + in template (omit) PCIListForMDT p_pciListForMDT := omit, + in template (omit) AreaScopeOfNeighCellsItem.iE_Extensions p_iE_Extensions := omit + ) := { + nrFrequencyInfo := p_nrFrequencyInfo, + pciListForMDT := p_pciListForMDT, + iE_Extensions := p_iE_Extensions + } // End of template m_areaScopeOfNeighCellsItem + + template (value) AreaScopeOfQMC m_areaScopeOfQMC_cellBased( + in template (value) CellBasedQMC p_cellBased + ) := { + cellBased := p_cellBased + } // End of template m_areaScopeOfQMC_cellBased + + template (value) AreaScopeOfQMC m_areaScopeOfQMC_tABased( + in template (value) TABasedQMC p_tABased + ) := { + tABased := p_tABased + } // End of template m_areaScopeOfQMC_tABased + + template (value) AreaScopeOfQMC m_areaScopeOfQMC_tAIBased( + in template (value) TAIBasedQMC p_tAIBased + ) := { + tAIBased := p_tAIBased + } // End of template m_areaScopeOfQMC_tAIBased + + template (value) AreaScopeOfQMC m_areaScopeOfQMC_pLMNAreaBased( + in template (value) PLMNAreaBasedQMC p_pLMNAreaBased + ) := { + pLMNAreaBased := p_pLMNAreaBased + } // End of template m_areaScopeOfQMC_pLMNAreaBased + + template (value) AreaScopeOfQMC m_areaScopeOfQMC_ext( + in template (value) AreaScopeOfQMC.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_areaScopeOfQMC_ext + + template (value) AreaScopeOfMDT_EUTRA m_areaScopeOfMDT_EUTRA_cellBased( + in template (value) CellBasedMDT_EUTRA p_cellBased + ) := { + cellBased := p_cellBased + } // End of template m_areaScopeOfMDT_EUTRA_cellBased + + template (value) AreaScopeOfMDT_EUTRA m_areaScopeOfMDT_EUTRA_tABased( + in template (value) TABasedMDT p_tABased + ) := { + tABased := p_tABased + } // End of template m_areaScopeOfMDT_EUTRA_tABased + + template (value) AreaScopeOfMDT_EUTRA m_areaScopeOfMDT_EUTRA_pLMNWide := { + pLMNWide := NULL + } // End of template m_areaScopeOfMDT_EUTRA_pLMNWide + + template (value) AreaScopeOfMDT_EUTRA m_areaScopeOfMDT_EUTRA_tAIBased( + in template (value) TAIBasedMDT p_tAIBased + ) := { + tAIBased := p_tAIBased + } // End of template m_areaScopeOfMDT_EUTRA_tAIBased + + template (value) AreaScopeOfMDT_EUTRA m_areaScopeOfMDT_EUTRA_ext( + in template (value) AreaScopeOfMDT_EUTRA.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_areaScopeOfMDT_EUTRA_ext + + template (omit) AvailableRANVisibleQoEMetrics m_availableRANVisibleQoEMetrics( + in template (omit) AvailableRANVisibleQoEMetrics.applicationLayerBufferLevelList p_applicationLayerBufferLevelList := omit, + in template (omit) AvailableRANVisibleQoEMetrics.playoutDelayForMediaStartup p_playoutDelayForMediaStartup := omit, + in template (omit) AvailableRANVisibleQoEMetrics.iE_Extensions p_iE_Extensions := omit + ) := { + applicationLayerBufferLevelList := p_applicationLayerBufferLevelList, + playoutDelayForMediaStartup := p_playoutDelayForMediaStartup, + iE_Extensions := p_iE_Extensions + } // End of template m_availableRANVisibleQoEMetrics + + template (omit) BeamMeasurementsReportConfiguration m_beamMeasurementsReportConfiguration( + in template (omit) BeamMeasurementsReportQuantity p_beamMeasurementsReportQuantity := omit, + in template (omit) MaxNrofRS_IndexesToReport p_maxNrofRS_IndexesToReport := omit, + in template (omit) BeamMeasurementsReportConfiguration.iE_Extensions p_iE_Extensions := omit + ) := { + beamMeasurementsReportQuantity := p_beamMeasurementsReportQuantity, + maxNrofRS_IndexesToReport := p_maxNrofRS_IndexesToReport, + iE_Extensions := p_iE_Extensions + } // End of template m_beamMeasurementsReportConfiguration + + template (omit) BeamMeasurementsReportQuantity m_beamMeasurementsReportQuantity( + in template (omit) BeamMeasurementsReportQuantity.rSRP p_rSRP := true_, + in template (omit) BeamMeasurementsReportQuantity.rSRQ p_rSRQ := true_, + in template (omit) BeamMeasurementsReportQuantity.sINR p_sINR := true_, + in template (omit) BeamMeasurementsReportQuantity.iE_Extensions p_iE_Extensions := omit + ) := { + rSRP := p_rSRP, + rSRQ := p_rSRQ, + sINR := p_sINR, + iE_Extensions := p_iE_Extensions + } // End of template m_beamMeasurementsReportQuantity + + template (value) BitRate m_bitRate(in template (value) BitRate p_value) := p_value; + + template (value) BroadcastCancelledAreaList m_broadcastCancelledAreaList_cellIDCancelledEUTRA( + in template (value) CellIDCancelledEUTRA p_cellIDCancelledEUTRA + ) := { + cellIDCancelledEUTRA := p_cellIDCancelledEUTRA + } // End of template m_broadcastCancelledAreaList_cellIDCancelledEUTRA + + template (value) BroadcastCancelledAreaList m_broadcastCancelledAreaList_tAICancelledEUTRA( + in template (value) TAICancelledEUTRA p_tAICancelledEUTRA + ) := { + tAICancelledEUTRA := p_tAICancelledEUTRA + } // End of template m_broadcastCancelledAreaList_tAICancelledEUTRA + + template (value) BroadcastCancelledAreaList m_broadcastCancelledAreaList_emergencyAreaIDCancelledEUTRA( + in template (value) EmergencyAreaIDCancelledEUTRA p_emergencyAreaIDCancelledEUTRA + ) := { + emergencyAreaIDCancelledEUTRA := p_emergencyAreaIDCancelledEUTRA + } // End of template m_broadcastCancelledAreaList_emergencyAreaIDCancelledEUTRA + + template (value) BroadcastCancelledAreaList m_broadcastCancelledAreaList_cellIDCancelledNR( + in template (value) CellIDCancelledNR p_cellIDCancelledNR + ) := { + cellIDCancelledNR := p_cellIDCancelledNR + } // End of template m_broadcastCancelledAreaList_cellIDCancelledNR + + template (value) BroadcastCancelledAreaList m_broadcastCancelledAreaList_tAICancelledNR( + in template (value) TAICancelledNR p_tAICancelledNR + ) := { + tAICancelledNR := p_tAICancelledNR + } // End of template m_broadcastCancelledAreaList_tAICancelledNR + + template (value) BroadcastCancelledAreaList m_broadcastCancelledAreaList_emergencyAreaIDCancelledNR( + in template (value) EmergencyAreaIDCancelledNR p_emergencyAreaIDCancelledNR + ) := { + emergencyAreaIDCancelledNR := p_emergencyAreaIDCancelledNR + } // End of template m_broadcastCancelledAreaList_ext + + template (value) BroadcastCancelledAreaList m_broadcastCancelledAreaList_ext( + in template (value) BroadcastCancelledAreaList.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_broadcastCancelledAreaList_ext + + template (value) BroadcastCompletedAreaList m_broadcastCompletedAreaList_cellIDBroadcastEUTRA( + in template (value) CellIDBroadcastEUTRA p_cellIDBroadcastEUTRA + ) := { + cellIDBroadcastEUTRA := p_cellIDBroadcastEUTRA + } // End of template m_broadcastCompletedAreaList_cellIDCancelledEUTRA + + template (value) BroadcastCompletedAreaList m_broadcastCompletedAreaList_tAIBroadcastEUTRA( + in template (value) TAIBroadcastEUTRA p_tAIBroadcastEUTRA + ) := { + tAIBroadcastEUTRA := p_tAIBroadcastEUTRA + } // End of template m_broadcastCompletedAreaList_tAIBroadcastEUTRA + + template (value) BroadcastCompletedAreaList m_broadcastCompletedAreaList_emergencyAreaIDBroadcastEUTRA( + in template (value) EmergencyAreaIDBroadcastEUTRA p_emergencyAreaIDBroadcastEUTRA + ) := { + emergencyAreaIDBroadcastEUTRA := p_emergencyAreaIDBroadcastEUTRA + } // End of template m_broadcastCompletedAreaList_emergencyAreaIDBroadcastEUTRA + + template (value) BroadcastCompletedAreaList m_broadcastCompletedAreaList_cellIDBroadcastNR( + in template (value) CellIDBroadcastNR p_cellIDBroadcastNR + ) := { + cellIDBroadcastNR := p_cellIDBroadcastNR + } // End of template m_broadcastCompletedAreaList_cellIDBroadcastNR + + template (value) BroadcastCompletedAreaList m_broadcastCompletedAreaList_tAIBroadcastNR( + in template (value) TAIBroadcastNR p_tAIBroadcastNR + ) := { + tAIBroadcastNR := p_tAIBroadcastNR + } // End of template m_broadcastCompletedAreaList_tAIBroadcastNR + + template (value) BroadcastCompletedAreaList m_broadcastCompletedAreaList_emergencyAreaIDBroadcastNR( + in template (value) EmergencyAreaIDBroadcastNR p_emergencyAreaIDBroadcastNR + ) := { + emergencyAreaIDBroadcastNR := p_emergencyAreaIDBroadcastNR + } // End of template m_broadcastCompletedAreaList_emergencyAreaIDBroadcastNR + + template (value) BroadcastCompletedAreaList m_broadcastCompletedAreaList_ext( + in template (value) BroadcastCompletedAreaList.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_broadcastCompletedAreaList_ext + + template (value) BroadcastPLMNList m_ie_broadcastPLMNList( + in template (value) BroadcastPLMNList p_list + ) := p_list; + + template (omit) BroadcastPLMNItem m_ie_broadcastPLMNItem( + in template (value) PLMNIdentity p_plmnId := PX_PLMN_IDENTITY, + in template (value) SliceSupportList p_ssl, + in template (omit) BroadcastPLMNItem.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_plmnId, + tAISliceSupportList := p_ssl, + iE_Extensions := p_iE_Extensions + } // End of template m_ie_broadcastPLMNItem + + template (omit) BluetoothMeasurementConfiguration m_bluetoothMeasurementConfiguration( + in template (value) BluetoothMeasConfig p_bluetoothMeasConfig, + in template (omit) BluetoothMeasConfigNameList p_bluetoothMeasConfigNameList := omit, + in template (omit) BluetoothMeasurementConfiguration.bt_rssi p_bt_rssi := omit, + in template (omit) BluetoothMeasurementConfiguration.iE_Extensions p_iE_Extensions := omit + ) := { + bluetoothMeasConfig := p_bluetoothMeasConfig, + bluetoothMeasConfigNameList := p_bluetoothMeasConfigNameList, + bt_rssi := p_bt_rssi, + iE_Extensions := p_iE_Extensions + } // End of template m_bluetoothMeasurementConfiguration + + template (omit) BluetoothMeasConfigNameItem m_bluetoothMeasConfigNameItem( + in template (value) BluetoothName p_bluetoothName, + in template (omit) BluetoothMeasConfigNameItem.iE_Extensions p_iE_Extensions := omit + ) := { + bluetoothName := p_bluetoothName, + iE_Extensions := p_iE_Extensions + } // End of template m_bluetoothMeasConfigNameItem + + template (value) BluetoothMeasConfig m_bluetoothMeasConfig(in BluetoothMeasConfig p_value := setup) := p_value; + + template (value) CancelAllWarningMessages m_cancelAllWarningMessages(in CancelAllWarningMessages p_value := true_) := p_value; + + template (omit) CancelledCellsInEAI_EUTRA_Item m_cancelledCellsInEAI_EUTRA_Item( + in template (value) EUTRA_CGI p_eUTRA_CGI, + in template (value) NumberOfBroadcasts p_numberOfBroadcasts, + in template (omit) CancelledCellsInEAI_EUTRA_Item.iE_Extensions p_iE_Extensions := omit + ) := { + eUTRA_CGI := p_eUTRA_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template m_cancelledCellsInEAI_EUTRA_Item + + template (omit) CancelledCellsInEAI_NR_Item m_cancelledCellsInEAI_NR_Item( + in template (value) NR_CGI p_nR_CGI, + in template (value) NumberOfBroadcasts p_numberOfBroadcasts, + in template (omit) CancelledCellsInEAI_NR_Item.iE_Extensions p_iE_Extensions := omit + ) := { + nR_CGI := p_nR_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template m_cancelledCellsInEAI_NR_Item + + template (omit) CancelledCellsInTAI_EUTRA_Item m_cancelledCellsInTAI_EUTRA_Item( + in template (value) EUTRA_CGI p_eUTRA_CGI, + in template (value) NumberOfBroadcasts p_numberOfBroadcasts, + in template (omit) CancelledCellsInTAI_EUTRA_Item.iE_Extensions p_iE_Extensions := omit + ) := { + eUTRA_CGI := p_eUTRA_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template m_cancelledCellsInTAI_EUTRA_Item + + template (omit) CancelledCellsInTAI_NR_Item m_CancelledCellsInTAI_NR_Item( + in template (value) NR_CGI p_nR_CGI, + in template (value) NumberOfBroadcasts p_numberOfBroadcasts, + in template (omit) CancelledCellsInTAI_NR_Item.iE_Extensions p_iE_Extensions := omit + ) := { + nR_CGI := p_nR_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template m_CancelledCellsInTAI_NR_Item + + template (omit) CandidateCellItem m_candidateCellItem( + in template (value) CandidateCell p_candidateCell, + in template (omit) CandidateCellItem.iE_Extensions p_iE_Extensions := omit + ) := { + candidateCell := p_candidateCell, + iE_Extensions := p_iE_Extensions + } // End of template m_candidateCellItem + + template (value) CandidateCell m_candidateCell_candidateCGI( + in template (value) CandidateCellID p_candidateCGI + ) := { + candidateCGI := p_candidateCGI + } // End of template m_candidateCell_candidateCGI + + template (value) CandidateCell m_candidateCell_candidatePCI( + in template (value) CandidatePCI p_candidatePCI + ) := { + candidatePCI := p_candidatePCI + } // End of template m_candidateCell_candidatePCI + + template (value) CandidateCell m_candidateCell_ext( + in template (value) CandidateCell.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_candidateCell_ext + + template (omit) CandidateCellID m_candidateCellID( + in template (value) NR_CGI p_candidateCellID, + in template (omit) CandidateCellID.iE_Extensions p_iE_Extensions := omit + ) := { + candidateCellID := p_candidateCellID, + iE_Extensions := p_iE_Extensions + } // End of template m_candidateCellID + + template (omit) CandidatePCI m_candidatePCI( + in template (value) CandidatePCI.candidatePCI p_candidatePCI, + in template (value) CandidatePCI.candidateNRARFCN p_candidateNRARFCN, + in template (omit) CandidatePCI.iE_Extensions p_iE_Extensions := omit + ) := { + candidatePCI := p_candidatePCI, + candidateNRARFCN := p_candidateNRARFCN, + iE_Extensions := p_iE_Extensions + } // End of template m_candidatePCI + + template (value) Cause m_cause_radioNetwork( + in template (value) CauseRadioNetwork p_radioNetwork + ) := { + radioNetwork := p_radioNetwork + } // End of template m_cause_radioNetwork + + template (value) Cause m_cause_transport( + in template (value) CauseTransport p_transport + ) := { + transport := p_transport + } // End of template m_cause_transport + + template (value) Cause m_cause_nas( + in template (value) CauseNas p_nas + ) := { + nas := p_nas + } // End of template m_cause_nas + + template (value) Cause m_cause_protocol( + in template (value) CauseProtocol p_protocol + ) := { + protocol := p_protocol + } // End of template m_cause_protocol + + template (value) Cause m_cause_misc( + in template (value) CauseMisc p_misc + ) := { + misc := p_misc + } // End of template m_cause_misc + + template (value) Cause m_cause_ext( + in template (value) Cause.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_cause_ext + + template (value) CauseMisc m_causeMisc(in CauseMisc p_value := unspecified) := p_value; + template (value) CauseNas m_causeNas(in CauseNas p_value := unspecified) := p_value; + template (value) CauseProtocol m_causeProtocol(in CauseProtocol p_value := unspecified) := p_value; + template (value) CauseRadioNetwork m_causeRadioNetwork(in CauseRadioNetwork p_value := unspecified) := p_value; + template (value) CauseTransport m_causeTransport(in CauseTransport p_value := unspecified) := p_value; + + template (omit) Cell_CAGInformation m_cell_CAGInformation( + in template (value) NGRAN_CGI p_nGRAN_CGI, + in template (value) CellCAGList p_cellCAGList, + in template (omit) Cell_CAGInformation.iE_Extensions p_iE_Extensions := omit + ) := { + nGRAN_CGI := p_nGRAN_CGI, + cellCAGList := p_cellCAGList, + iE_Extensions := p_iE_Extensions + } // End of template m_cell_CAGInformation + + template (omit) CellIDBroadcastEUTRA_Item m_cellIDBroadcastEUTRA_Item( + in template (value) EUTRA_CGI p_eUTRA_CGI, + in template (omit) CellIDBroadcastEUTRA_Item.iE_Extensions p_iE_Extensions := omit + ) := { + eUTRA_CGI := p_eUTRA_CGI, + iE_Extensions := p_iE_Extensions + } // End of template m_cellIDBroadcastEUTRA_Item + + template (omit) CellIDBroadcastNR_Item m_cellIDBroadcastNR_Item( + in template (value) NR_CGI p_nR_CGI, + in template (omit) CellIDBroadcastNR_Item.iE_Extensions p_iE_Extensions := omit + ) := { + nR_CGI := p_nR_CGI, + iE_Extensions := p_iE_Extensions + } // End of template m_cellIDBroadcastNR_Item + + template (omit) CellIDCancelledEUTRA_Item m_cellIDCancelledEUTRA_Item( + in template (value) EUTRA_CGI p_eUTRA_CGI, + in template (value) NumberOfBroadcasts p_numberOfBroadcasts, + in template (omit) CellIDCancelledEUTRA_Item.iE_Extensions p_iE_Extensions := omit + ) := { + eUTRA_CGI := p_eUTRA_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template m_cellIDCancelledEUTRA_Item + + template (omit) CellIDCancelledNR_Item m_cellIDCancelledNR_Item( + in template (value) NR_CGI p_nR_CGI, + in template (value) NumberOfBroadcasts p_numberOfBroadcasts, + in template (omit) CellIDCancelledNR_Item.iE_Extensions p_iE_Extensions := omit + ) := { + nR_CGI := p_nR_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template m_cellIDCancelledNR_Item + + template (value) CellIDListForRestart m_cellIDListForRestart_eUTRA_CGIListforRestart( + in template (value) EUTRA_CGIList p_eUTRA_CGIListforRestart + ) := { + eUTRA_CGIListforRestart := p_eUTRA_CGIListforRestart + } // End of template m_cellIDListForRestart_misc + + template (value) CellIDListForRestart m_cellIDListForRestart_nR_CGIListforRestart( + in template (value) NR_CGIList p_nR_CGIListforRestart + ) := { + nR_CGIListforRestart := p_nR_CGIListforRestart + } // End of template m_cellIDListForRestart_nR_CGIListforRestart + + template (value) CellIDListForRestart m_cellIDListForRestart_ext( + in template (value) CellIDListForRestart.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_cellIDListForRestart_ext + + template (value) CellSize m_cellSize(in CellSize p_value := medium) := p_value; + + template (omit) CellType m_cellType( + in template (value) CellSize p_cellSize, + in template (omit) CellType.iE_Extensions p_iE_Extensions := omit + ) := { + cellSize := p_cellSize, + iE_Extensions := p_iE_Extensions + } // End of template m_cellType + + template (value) CEmodeBSupport_Indicator m_cEmodeBSupport_Indicator(in CEmodeBSupport_Indicator p_value := supported) := p_value; + template (value) CEmodeBrestricted m_cEmodeBrestricted(in CEmodeBrestricted p_value := restricted) := p_value; + + template (omit) CNAssistedRANTuning m_cNAssistedRANTuning( + in template (omit) ExpectedUEBehaviour p_expectedUEBehaviour := omit, + in template (omit) CNAssistedRANTuning.iE_Extensions p_iE_Extensions := omit + ) := { + expectedUEBehaviour := p_expectedUEBehaviour, + iE_Extensions := p_iE_Extensions + } // End of template m_cNAssistedRANTuning + + template (omit) CNTypeRestrictionsForEquivalentItem m_cNTypeRestrictionsForEquivalentItem( + in template (value) PLMNIdentity p_plmnIdentity, + in template (value) CNTypeRestrictionsForEquivalentItem.cn_Type p_cn_Type, + in template (omit) CNTypeRestrictionsForEquivalentItem.iE_Extensions p_iE_Extensions := omit + ) := { + plmnIdentity := p_plmnIdentity, + cn_Type := p_cn_Type, + iE_Extensions := p_iE_Extensions + } // End of template m_cNTypeRestrictionsForEquivalentItem + + template (value) CNTypeRestrictionsForServing m_cNTypeRestrictionsForServing(in CNTypeRestrictionsForServing p_value := epc_forbidden) := p_value; + + template (omit) CompletedCellsInEAI_EUTRA_Item m_completedCellsInEAI_EUTRA_Item( + in template (value) EUTRA_CGI p_eUTRA_CGI, + in template (omit) CompletedCellsInEAI_EUTRA_Item.iE_Extensions p_iE_Extensions := omit + ) := { + eUTRA_CGI := p_eUTRA_CGI, + iE_Extensions := p_iE_Extensions + } // End of template m_completedCellsInEAI_EUTRA_Item + + template (omit) CompletedCellsInEAI_NR_Item m_completedCellsInEAI_NR_Item( + in template (value) NR_CGI p_nR_CGI, + in template (omit) CompletedCellsInEAI_NR_Item.iE_Extensions p_iE_Extensions := omit + ) := { + nR_CGI := p_nR_CGI, + iE_Extensions := p_iE_Extensions + } // End of template m_completedCellsInEAI_NR_Item + + template (omit) CompletedCellsInTAI_EUTRA_Item m_completedCellsInTAI_EUTRA_Item( + in template (value) EUTRA_CGI p_eUTRA_CGI, + in template (omit) CompletedCellsInTAI_EUTRA_Item.iE_Extensions p_iE_Extensions := omit + ) := { + eUTRA_CGI := p_eUTRA_CGI, + iE_Extensions := p_iE_Extensions + } // End of template m_completedCellsInTAI_EUTRA_Item + + template (omit) CompletedCellsInTAI_NR_Item m_completedCellsInTAI_NR_Item( + in template (value) NR_CGI p_nR_CGI, + in template (omit) CompletedCellsInTAI_NR_Item.iE_Extensions p_iE_Extensions := omit + ) := { + nR_CGI := p_nR_CGI, + iE_Extensions := p_iE_Extensions + } // End of template m_completedCellsInTAI_NR_Item + + template (value) ConcurrentWarningMessageInd m_concurrentWarningMessageInd(in ConcurrentWarningMessageInd p_value := true_) := p_value; + template (value) ConfidentialityProtectionIndication m_confidentialityProtectionIndication(in ConfidentialityProtectionIndication p_value := required) := p_value; + template (value) ConfidentialityProtectionResult m_confidentialityProtectionResult(in ConfidentialityProtectionResult p_value := performed) := p_value; + template (value) ConfiguredTACIndication m_configuredTACIndication(in ConfiguredTACIndication p_value := true_) := p_value; + + template (omit) CoreNetworkAssistanceInformationForInactive m_coreNetworkAssistanceInformationForInactive( + in template (value) UEIdentityIndexValue p_uEIdentityIndexValue, + in template (value) PeriodicRegistrationUpdateTimer p_periodicRegistrationUpdateTimer := PX_PERIODIC_REGISTRATION_UPDATE_TIMER, + in template (value) TAIListForInactive p_tAIListForInactive, + in template (omit) PagingDRX p_uESpecificDRX := omit, + in template (omit) MICOModeIndication p_mICOModeIndication := omit, + in template (omit) ExpectedUEBehaviour p_expectedUEBehaviour := omit, + in template (omit) CoreNetworkAssistanceInformationForInactive.iE_Extensions p_iE_Extensions := omit + ) := { + uEIdentityIndexValue := p_uEIdentityIndexValue, + uESpecificDRX := p_uESpecificDRX, + periodicRegistrationUpdateTimer := p_periodicRegistrationUpdateTimer, + mICOModeIndication := p_mICOModeIndication, + tAIListForInactive := p_tAIListForInactive, + expectedUEBehaviour := p_expectedUEBehaviour, + iE_Extensions := p_iE_Extensions + } // End of template m_coreNetworkAssistanceInformationForInactive + + template (value) CoreNetworkAssistanceInformationForInactive.iE_Extensions m_coreNetworkAssistanceInformationForInactive_paging( + in template (value) EUTRA_PagingeDRXInformation p_eUTRA_PagingeDRXInformation, + in template (value) ExtendedUEIdentityIndexValue p_extendedUEIdentityIndexValue, + in template (value) UERadioCapabilityForPaging p_uERadioCapabilityForPaging, + in template (value) MicoAllPLMN p_micoAllPLMN + ) := { + { + id := id_EUTRA_PagingeDRXInformation, + criticality := ignore, + extensionValue := { EUTRA_PagingeDRXInformation := p_eUTRA_PagingeDRXInformation } + }, + { + id := id_ExtendedUEIdentityIndexValue, + criticality := ignore, + extensionValue := { ExtendedUEIdentityIndexValue := p_extendedUEIdentityIndexValue } + }, + { + id := id_UERadioCapabilityForPaging, + criticality := ignore, + extensionValue := { UERadioCapabilityForPaging := p_uERadioCapabilityForPaging } + }, + { + id := id_MicoAllPLMN, + criticality := ignore, + extensionValue := { MicoAllPLMN := p_micoAllPLMN } + } + // TODO To be enhanced + } // End of template m_coreNetworkAssistanceInformationForInactive_paging + + template (omit) COUNTValueForPDCP_SN12 m_cOUNTValueForPDCP_SN12( + in template (value) COUNTValueForPDCP_SN12.pDCP_SN12 p_pDCP_SN12, + in template (value) COUNTValueForPDCP_SN12.hFN_PDCP_SN12 p_hFN_PDCP_SN12, + in template (omit) COUNTValueForPDCP_SN12.iE_Extensions p_iE_Extensions := omit + ) := { + pDCP_SN12 := p_pDCP_SN12, + hFN_PDCP_SN12 := p_hFN_PDCP_SN12, + iE_Extensions := p_iE_Extensions + } // End of template m_cOUNTValueForPDCP_SN12 + + template (omit) COUNTValueForPDCP_SN18 m_cOUNTValueForPDCP_SN18( + in template (value) COUNTValueForPDCP_SN18.pDCP_SN18 p_pDCP_SN18, + in template (value) COUNTValueForPDCP_SN18.hFN_PDCP_SN18 p_hFN_PDCP_SN18, + in template (omit) COUNTValueForPDCP_SN18.iE_Extensions p_iE_Extensions := omit + ) := { + pDCP_SN18 := p_pDCP_SN18, + hFN_PDCP_SN18 := p_hFN_PDCP_SN18, + iE_Extensions := p_iE_Extensions + } // End of template m_cOUNTValueForPDCP_SN18 + + template (value) CPTransportLayerInformation m_cPTransportLayerInformation_endpointIPAddress( + in template (value) TransportLayerAddress p_endpointIPAddress := PX_TRANSPORT_LAYER_ADDRESS + ) := { + endpointIPAddress := p_endpointIPAddress + } // End of template m_cPTransportLayerInformation_endpointIPAddress + + template (value) CPTransportLayerInformation m_cPTransportLayerInformation_choice_Extensions( + in template (value) CPTransportLayerInformation.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_cPTransportLayerInformation_choice_Extensions + + template (value) CPTransportLayerInformation.choice_Extensions m_cPTransportLayerInformation_ext( + in template (value) EndpointIPAddressAndPort p_EndpointIPAddressAndPort + ) := { + id := id_EndpointIPAddressAndPort, + criticality := reject, + value_ := { EndpointIPAddressAndPort := p_EndpointIPAddressAndPort } + } // End of template m_cPTransportLayerInformation_ext + + template (omit) CriticalityDiagnostics m_criticalityDiagnostics( + in template (omit) ProcedureCode p_procedureCode := omit, + in template (omit) TriggeringMessage p_triggeringMessage := omit, + in template (omit) Criticality p_procedureCriticality := omit, + in template (omit) CriticalityDiagnostics_IE_List p_criticalityDiagnostics_IE_List := omit, + in template (omit) CriticalityDiagnostics.iE_Extensions p_iE_Extensions := omit + ) := { + procedureCode := p_procedureCode, + triggeringMessage := p_triggeringMessage, + procedureCriticality := p_procedureCriticality, + iEsCriticalityDiagnostics := p_criticalityDiagnostics_IE_List, + iE_Extensions := p_iE_Extensions + } // End of template m_criticalityDiagnostics + + template (omit) CriticalityDiagnostics_IE_Item m_criticalityDiagnostics_IE_Item( + in template (value) Criticality p_iECriticality, + in template (value) ProtocolIE_ID p_iE_ID, + in template (value) TypeOfError p_typeOfError, + in template (omit) CriticalityDiagnostics_IE_Item.iE_Extensions p_iE_Extensions := omit + ) := { + iECriticality := p_iECriticality, + iE_ID := p_iE_ID, + typeOfError := p_typeOfError, + iE_Extensions := p_iE_Extensions + } // End of template m_criticalityDiagnostics_IE_Item + + template (omit) CellBasedMDT_NR m_cellBasedMDT_NR( + in template (value) CellIdListforMDT_NR p_cellIdListforMDT, + in template (omit) CellBasedMDT_NR.iE_Extensions p_iE_Extensions + ) := { + cellIdListforMDT := p_cellIdListforMDT, + iE_Extensions := p_iE_Extensions + } // End of template m_cellBasedMDT_NR + + template (omit) CellBasedMDT_EUTRA m_cellBasedMDT_EUTRA( + in template (value) CellIdListforMDT_EUTRA p_cellIdListforMDT, + in template (omit) CellBasedMDT_EUTRA.iE_Extensions p_iE_Extensions + ) := { + cellIdListforMDT := p_cellIdListforMDT, + iE_Extensions := p_iE_Extensions + } // End of template m_cellBasedMDT_EUTRA + + template (omit) CellBasedQMC m_cellBasedQMC( + in template (value) CellIdListforQMC p_cellIdListforQMC, + in template (omit) CellBasedQMC.iE_Extensions p_iE_Extensions + ) := { + cellIdListforQMC := p_cellIdListforQMC, + iE_Extensions := p_iE_Extensions + } // End of template m_cellBasedQMC + + template (value) DataForwardingNotPossible m_dataForwardingNotPossible(in DataForwardingNotPossible p_value := data_forwarding_not_possible) := p_value; + + template (value) DataForwardingAccepted m_dataForwardingAccepted(in DataForwardingAccepted p_value := data_forwarding_accepted) := p_value; + + template (omit) DataForwardingResponseDRBItem m_dataForwardingResponseDRBItem( + in template (value) DRB_ID p_dRB_ID, + in template (omit) UPTransportLayerInformation p_dLForwardingUP_TNLInformation := omit, + in template (omit) UPTransportLayerInformation p_uLForwardingUP_TNLInformation := omit, + in template (omit) DataForwardingResponseDRBItem.iE_Extensions p_iE_Extensions := omit + ) := { + dRB_ID := p_dRB_ID, + dLForwardingUP_TNLInformation := p_dLForwardingUP_TNLInformation, + uLForwardingUP_TNLInformation := p_uLForwardingUP_TNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_dataForwardingResponseDRBItem + + template (omit) DAPSRequestInfo m_dAPSRequestInfo( + in template (value) DAPSRequestInfo.dAPSIndicator p_dAPSIndicator := daps_ho_required, + in template (omit) DAPSRequestInfo.iE_Extensions p_iE_Extensions := omit + ) := { + dAPSIndicator := p_dAPSIndicator, + iE_Extensions := p_iE_Extensions + } // End of template m_dAPSRequestInfo + + template (omit) DAPSResponseInfoItem m_dAPSResponseInfoItem( + in template (value) DRB_ID p_dRB_ID, + in template (value) DAPSResponseInfo p_dAPSResponseInfo, + in template (omit) DAPSResponseInfoItem.iE_Extension p_iE_Extension := omit + ) := { + dRB_ID := p_dRB_ID, + dAPSResponseInfo := p_dAPSResponseInfo, + iE_Extension := p_iE_Extension + } // End of template m_dAPSResponseInfoItem + + template (omit) DAPSResponseInfo m_dAPSResponseInfo( + in template (value) DAPSResponseInfo.dapsresponseindicator p_dapsresponseindicator, + in template (omit) DAPSResponseInfo.iE_Extensions p_iE_Extensions := omit + ) := { + dapsresponseindicator := p_dapsresponseindicator, + iE_Extensions := p_iE_Extensions + } // End of template m_dAPSResponseInfo + + template (omit) DataForwardingResponseERABListItem m_DataForwardingResponseERABListItem( + in template (value) E_RAB_ID p_e_RAB_ID, + in template (value) UPTransportLayerInformation p_dLForwardingUP_TNLInformation, + in template (omit) DataForwardingResponseERABListItem.iE_Extensions p_iE_Extensions := omit + ) := { + e_RAB_ID := p_e_RAB_ID, + dLForwardingUP_TNLInformation := p_dLForwardingUP_TNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_DataForwardingResponseERABListItem + + template (value) DelayCritical m_delayCritical(in DelayCritical p_value) := p_value; + + template (omit) DL_CP_SecurityInformation m_dL_CP_SecurityInformation( + in template (value) DL_NAS_MAC p_dl_NAS_MAC := PX_DL_NAS_MAC, + in template (omit) DL_CP_SecurityInformation.iE_Extensions p_iE_Extensions := omit + ) := { + dl_NAS_MAC := p_dl_NAS_MAC, + iE_Extensions := p_iE_Extensions + } // End of template m_dL_CP_SecurityInformation + + template (value) DLForwarding m_dLForwarding(in DLForwarding p_value := dl_forwarding_proposed) := p_value; + + template (value) DL_NGU_TNLInformationReused m_dL_NGU_TNLInformationReused(in DL_NGU_TNLInformationReused p_value := true_) := p_value; + + template (value) DirectForwardingPathAvailability m_directForwardingPathAvailability(in DirectForwardingPathAvailability p_value := direct_path_available) := p_value; + + template (omit) DRBsSubjectToStatusTransferItem m_dRBsSubjectToStatusTransferItem( + in template (value) DRB_ID p_dRB_ID, + in template (value) DRBStatusUL p_dRBStatusUL, + in template (value) DRBStatusDL p_dRBStatusDL, + in template (omit) DRBsSubjectToStatusTransferItem.iE_Extension p_iE_Extension := omit + ) := { + dRB_ID := p_dRB_ID, + dRBStatusUL := p_dRBStatusUL, + dRBStatusDL := p_dRBStatusDL, + iE_Extension := p_iE_Extension + } // End of template m_dRBsSubjectToStatusTransferItem + + template (value) DRBsSubjectToStatusTransferItem.iE_Extension m_dRBsSubjectToStatusTransferItem_associatedQosFlowList( + in template (value) AssociatedQosFlowList p_associatedQosFlowList + ) := { + { + id := id_OldAssociatedQosFlowList_ULendmarkerexpected, + criticality := ignore, + extensionValue := { AssociatedQosFlowList := p_associatedQosFlowList } + } + } // End of template m_dRBsSubjectToStatusTransferItem_associatedQosFlowList + + template (value) DRBStatusDL m_dRBStatusDL_dRBStatusDL12( + in template (value) DRBStatusDL12 p_dRBStatusDL12 + ) := { + dRBStatusDL12 := p_dRBStatusDL12 + } // End of template m_dRBStatusDL_dRBStatusDL12 + + template (value) DRBStatusDL m_dRBStatusDL_dRBStatusDL18( + in template (value) DRBStatusDL18 p_dRBStatusDL18 + ) := { + dRBStatusDL18 := p_dRBStatusDL18 + } // End of template m_dRBStatusDL_dRBStatusDL18 + + template (value) DRBStatusDL m_dRBStatusDL_choice_Extensions( + in template (value) DRBStatusDL.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_dRBStatusDL_choice_Extensions // type NGAP_Containers.NGAP_PROTOCOL_IES DRBStatusDL_ExtIEs (?); + + template (omit) DRBStatusDL12 m_dRBStatusDL12( + in template (value) COUNTValueForPDCP_SN12 p_dL_COUNTValue, + in template (omit) DRBStatusDL12.iE_Extension p_iE_Extension := omit + ) := { + dL_COUNTValue := p_dL_COUNTValue, + iE_Extension := p_iE_Extension + } // End of template m_dRBStatusDL12 + + template (omit) DRBStatusDL18 m_dRBStatusDL18( + in template (value) COUNTValueForPDCP_SN18 p_dL_COUNTValue, + in template (omit) DRBStatusDL18.iE_Extension p_iE_Extension := omit + ) := { + dL_COUNTValue := p_dL_COUNTValue, + iE_Extension := p_iE_Extension + } // End of template m_dRBStatusDL18 + + template (value) DRBStatusUL m_dRBStatusUL_dRBStatusUL12( + in template (value) DRBStatusUL12 p_dRBStatusUL12 + ) := { + dRBStatusUL12 := p_dRBStatusUL12 + } // End of template m_dRBStatusUL_dRBStatusUL12 + + template (value) DRBStatusUL m_dRBStatusUL_dRBStatusUL18( + in template (value) DRBStatusUL18 p_dRBStatusUL18 + ) := { + dRBStatusUL18 := p_dRBStatusUL18 + } // End of template m_dRBStatusUL_dRBStatusUL18 + + template (value) DRBStatusUL m_dRBStatusUL_choice_Extensions( + in template (value) DRBStatusUL.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_dRBStatusUL_choice_Extensions + + template (omit) DRBStatusUL12 m_dRBStatusUL12( + in template (value) COUNTValueForPDCP_SN12 p_uL_COUNTValue, + in template (omit) DRBStatusUL12.receiveStatusOfUL_PDCP_SDUs p_receiveStatusOfUL_PDCP_SDUs := omit, + in template (omit) DRBStatusUL12.iE_Extension p_iE_Extension := omit + ) := { + uL_COUNTValue := p_uL_COUNTValue, + receiveStatusOfUL_PDCP_SDUs := p_receiveStatusOfUL_PDCP_SDUs, + iE_Extension := p_iE_Extension + } // End of template m_dRBStatusUL12 + + template (omit) DRBStatusUL18 m_dRBStatusUL18( + in template (value) COUNTValueForPDCP_SN18 p_uL_COUNTValue, + in template (omit) DRBStatusUL18.receiveStatusOfUL_PDCP_SDUs p_receiveStatusOfUL_PDCP_SDUs := omit, + in template (omit) DRBStatusUL18.iE_Extension p_iE_Extension := omit + ) := { + uL_COUNTValue := p_uL_COUNTValue, + receiveStatusOfUL_PDCP_SDUs := p_receiveStatusOfUL_PDCP_SDUs, + iE_Extension := p_iE_Extension + } // End of template m_dRBStatusUL18 + + template (omit) DRBsToQosFlowsMappingItem m_dRBsToQosFlowsMappingItem( + in template (value) DRB_ID p_dRB_ID, + in template (value) AssociatedQosFlowList p_associatedQosFlowList, + in template (omit) DRBsToQosFlowsMappingItem.iE_Extensions p_iE_Extensions := omit + ) := { + dRB_ID := p_dRB_ID, + associatedQosFlowList := p_associatedQosFlowList, + iE_Extensions := p_iE_Extensions + } // End of template m_dRBsToQosFlowsMappingItem + + template (value) DRBsToQosFlowsMappingItem.iE_Extensions m_dRBsToQosFlowsMappingItem_dAPSRequestInfo( + in template (value) DAPSRequestInfo p_dAPSRequestInfo + ) := { + { + id := id_DAPSRequestInfo, + criticality := ignore, + extensionValue := { DAPSRequestInfo := p_dAPSRequestInfo } + } + } // End of template m_dRBsToQosFlowsMappingItem_dAPSRequestInfo + + template (omit) Dynamic5QIDescriptor m_dynamic5QIDescriptor( + in template (value) PriorityLevelQos p_priorityLevelQos, + in template (value) PacketDelayBudget p_packetDelayBudget, + in template (value) PacketErrorRate p_packetErrorRate, + in template (omit) FiveQI p_fiveQI := omit, + in template (omit) DelayCritical p_delayCritical := omit, + in template (omit) AveragingWindow p_averagingWindow := omit, + in template (omit) MaximumDataBurstVolume p_maximumDataBurstVolume := omit, + in template (omit) Dynamic5QIDescriptor.iE_Extensions p_iE_Extensions := omit + ) := { + priorityLevelQos := p_priorityLevelQos, + packetDelayBudget := p_packetDelayBudget, + packetErrorRate := p_packetErrorRate, + fiveQI := p_fiveQI, + delayCritical := p_delayCritical, + // The above IE shall be present in case of GBR QoS flow + averagingWindow := p_averagingWindow, + // The above IE shall be present in case of GBR QoS flow + maximumDataBurstVolume := p_maximumDataBurstVolume, + iE_Extensions := p_iE_Extensions + } // End of template m_dynamic5QIDescriptor + + template (value) Dynamic5QIDescriptor.iE_Extensions m_dynamic5QIDescriptor_extendedPacketDelayBudget( + in template (value) ExtendedPacketDelayBudget p_extendedPacketDelayBudget + ) := { + { + id := id_ExtendedPacketDelayBudget, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template m_dynamic5QIDescriptor_extendedPacketDelayBudget + + template (value) Dynamic5QIDescriptor.iE_Extensions m_dynamic5QIDescriptor_cNPacketDelayBudgetDL( + in template (value) ExtendedPacketDelayBudget p_extendedPacketDelayBudget + ) := { + { + id := id_CNPacketDelayBudgetDL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template m_dynamic5QIDescriptor_cNPacketDelayBudgetDL + + template (value) Dynamic5QIDescriptor.iE_Extensions m_dynamic5QIDescriptor_cNPacketDelayBudgetUL( + in template (value) ExtendedPacketDelayBudget p_extendedPacketDelayBudget + ) := { + { + id := id_CNPacketDelayBudgetUL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template m_dynamic5QIDescriptor_cNPacketDelayBudgetUL + + template (value) EarlyMeasurement m_earlyMeasurement(in EarlyMeasurement p_value := true_) := p_value; + + template (omit) EarlyStatusTransfer_TransparentContainer m_earlyStatusTransfer_TransparentContainer( + in template (value) ProcedureStageChoice p_procedureStage, + in template (omit) EarlyStatusTransfer_TransparentContainer.iE_Extensions p_iE_Extensions := omit + ) := { + procedureStage := p_procedureStage, + iE_Extensions := p_iE_Extensions + } // End of template m_earlyStatusTransfer_TransparentContainer + + template (value) ProcedureStageChoice m_procedureStageChoice_firstDLCount( + in template (value) FirstDLCount p_firstDLCount + ) := { + first_dl_count := p_firstDLCount + } // End of template m_procedureStageChoice_firstDLCount + + template (value) ProcedureStageChoice m_procedureStageChoice_choice_Extensions( + in template (value) ProcedureStageChoice.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_procedureStageChoice_choice_Extensions + + template (omit) FirstDLCount m_firstDLCount( + in template (value) DRBsSubjectToEarlyStatusTransfer_List p_dRBsSubjectToEarlyStatusTransfer, + in template (omit) FirstDLCount.iE_Extension p_iE_Extension := omit + ) := { + dRBsSubjectToEarlyStatusTransfer := p_dRBsSubjectToEarlyStatusTransfer, + iE_Extension := p_iE_Extension + } // End of template m_firstDLCount + + template (omit) DRBsSubjectToEarlyStatusTransfer_Item m_dRBsSubjectToEarlyStatusTransfer_Item( + in template (value) DRB_ID p_dRB_ID, + in template (value) DRBStatusDL p_firstDLCOUNT, + in template (omit) DRBsSubjectToEarlyStatusTransfer_Item.iE_Extension p_iE_Extension := omit + ) := { + dRB_ID := p_dRB_ID, + firstDLCOUNT := p_firstDLCOUNT, + iE_Extension := p_iE_Extension + } // End of template m_dRBsSubjectToEarlyStatusTransfer_Item + + template (value) EDT_Session m_eDT_Session(in EDT_Session p_value := true_) := p_value; + + template (omit) EmergencyAreaIDBroadcastEUTRA_Item m_emergencyAreaIDBroadcastEUTRA_Item( + in template (value) EmergencyAreaID p_emergencyAreaID, + in template (value) CompletedCellsInEAI_EUTRA p_completedCellsInEAI_EUTRA, + in template (omit) EmergencyAreaIDBroadcastEUTRA_Item.iE_Extensions p_iE_Extensions := omit + ) := { + emergencyAreaID := p_emergencyAreaID, + completedCellsInEAI_EUTRA := p_completedCellsInEAI_EUTRA, + iE_Extensions := p_iE_Extensions + } // End of template m_emergencyAreaIDBroadcastEUTRA_Item + + template (omit) EmergencyAreaIDBroadcastNR_Item m_emergencyAreaIDBroadcastNR_Item( + in template (value) EmergencyAreaID p_emergencyAreaID, + in template (value) CompletedCellsInEAI_NR p_completedCellsInEAI_NR, + in template (omit) EmergencyAreaIDBroadcastNR_Item.iE_Extensions p_iE_Extensions := omit + ) := { + emergencyAreaID := p_emergencyAreaID, + completedCellsInEAI_NR := p_completedCellsInEAI_NR, + iE_Extensions := p_iE_Extensions + } // End of template m_emergencyAreaIDBroadcastNR_Item + + template (omit) EmergencyAreaIDCancelledEUTRA_Item m_emergencyAreaIDCancelledEUTRA_Item( + in template (value) EmergencyAreaID p_emergencyAreaID, + in template (value) CancelledCellsInEAI_EUTRA p_cancelledCellsInEAI_EUTRA, + in template (omit) EmergencyAreaIDCancelledEUTRA_Item.iE_Extensions p_iE_Extensions := omit + ) := { + emergencyAreaID := p_emergencyAreaID, + cancelledCellsInEAI_EUTRA := p_cancelledCellsInEAI_EUTRA, + iE_Extensions := p_iE_Extensions + } // End of template m_emergencyAreaIDCancelledEUTRA_Item + + template (omit) EmergencyAreaIDCancelledNR_Item m_emergencyAreaIDCancelledNR_Item( + in template (value) EmergencyAreaID p_emergencyAreaID, + in template (value) CancelledCellsInEAI_NR p_cancelledCellsInEAI_NR, + in template (omit) EmergencyAreaIDCancelledNR_Item.iE_Extensions p_iE_Extensions := omit + ) := { + emergencyAreaID := p_emergencyAreaID, + cancelledCellsInEAI_NR := p_cancelledCellsInEAI_NR, + iE_Extensions := p_iE_Extensions + } // End of template m_emergencyAreaIDCancelledNR_Item + + template (omit) EmergencyFallbackIndicator m_emergencyFallbackIndicator( + in template (value) EmergencyFallbackRequestIndicator p_emergencyFallbackRequestIndicator, + in template (omit) EmergencyServiceTargetCN p_emergencyServiceTargetCN := omit, + in template (omit) EmergencyFallbackIndicator.iE_Extensions p_iE_Extensions := omit + ) := { + emergencyFallbackRequestIndicator := p_emergencyFallbackRequestIndicator, + emergencyServiceTargetCN := p_emergencyServiceTargetCN, + iE_Extensions := p_iE_Extensions + } // End of template m_emergencyFallbackIndicator + + template (value) EmergencyFallbackRequestIndicator m_emergencyFallbackRequestIndicator(in EmergencyFallbackRequestIndicator p_value := emergency_fallback_requested) := p_value; + + template (value) EmergencyServiceTargetCN m_emergencyServiceTargetCN(in EmergencyServiceTargetCN p_value := fiveGC) := p_value; + + template (value) ENB_ID m_eNB_ID_macroENB_ID( + in template (value) Bit20 p_macroENB_ID + ) := { + macroENB_ID := p_macroENB_ID + } // End of template m_eNB_ID_macroENB_ID + + template (value) ENB_ID m_eNB_ID_homeENB_ID( + in template (value) Bit28 p_homeENB_ID + ) := { + homeENB_ID := p_homeENB_ID + } // End of template m_eNB_ID_homeENB_ID + + template (value) ENB_ID m_eNB_ID_short_macroENB_ID( + in template (value) Bit18 p_short_macroENB_ID + ) := { + short_macroENB_ID := p_short_macroENB_ID + } // End of template m_eNB_ID_short_macroENB_ID + + template (value) ENB_ID m_eNB_ID_long_macroENB_ID( + in template (value) Bit21 p_long_macroENB_ID + ) := { + long_macroENB_ID := p_long_macroENB_ID + } // End of template m_eNB_ID_long_macroENB_ID + + template (value) ENB_ID m_eNB_ID_choice_Extensions( + in template (value) ENB_ID.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_eNB_ID_choice_Extensions + + template (value) Enhanced_CoverageRestriction m_enhanced_CoverageRestriction(in Enhanced_CoverageRestriction p_value := restricted) := p_value; + + template (omit) EndpointIPAddressAndPort m_endpointIPAddressAndPort( + in template (value) TransportLayerAddress p_endpointIPAddress := PX_TRANSPORT_LAYER_ADDRESS, + in template (value) PortNumber p_portNumber, + in template (omit) EndpointIPAddressAndPort.iE_Extensions p_iE_Extensions := omit + ) := { + endpointIPAddress := p_endpointIPAddress, + portNumber := p_portNumber, + iE_Extensions := p_iE_Extensions + } // End of template m_endpointIPAddressAndPort + + template (value) EndIndication m_endIndication(in EndIndication p_value := no_further_data) := p_value; + + template (omit) EPS_TAI m_ePS_TAI( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) EPS_TAC p_ePS_TAC := PX_EPS_TAC, + in template (omit) EPS_TAI.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + ePS_TAC := p_ePS_TAC, + iE_Extensions := p_iE_Extensions + } // End of template m_ePS_TAI + + template (omit) E_RABInformationItem m_e_RABInformationItem( + in template (value) E_RAB_ID p_e_RAB_ID, + in template (value) DLForwarding p_dLForwarding, + in template (omit) E_RABInformationItem.iE_Extensions p_iE_Extensions := omit + ) := { + e_RAB_ID := p_e_RAB_ID, + dLForwarding := p_dLForwarding, + iE_Extensions := p_iE_Extensions + } // End of template m_e_RABInformationItem + + template (omit) E_RABInformationItem.iE_Extensions m_e_RABInformationItem_id_SourceTNLAddrInfo( + in template (value) TransportLayerAddress p_transportLayerAddress := PX_SOURCE_TRANSPORT_LAYER_ADDRESS + ) := { + { + id := id_SourceTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress } + } + } // End of template m_e_RABInformationItem_id_SourceTNLAddrInfo + + template (omit) E_RABInformationItem.iE_Extensions m_e_RABInformationItem_id_SourceNodeTNLAddrInfo( + in template (value) TransportLayerAddress p_transportLayerAddress := PX_SOURCE_TRANSPORT_LAYER_ADDRESS + ) := { + { + id := id_SourceNodeTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress } + } + } // End of template m_e_RABInformationItem_id_SourceNodeTNLAddrInfo + + template (omit) E_RABInformationItem.iE_Extensions m_e_RABInformationItem_full( + in template (value) TransportLayerAddress p_transportLayerAddress_id_SourceTNLAddrInfo := PX_SOURCE_TRANSPORT_LAYER_ADDRESS, + in template (value) TransportLayerAddress p_transportLayerAddress_id_SourceNodeTNLAddrInfo := PX_SOURCE_TRANSPORT_LAYER_ADDRESS + ) := { + { + id := id_SourceTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress_id_SourceTNLAddrInfo } + }, + { + id := id_SourceNodeTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress_id_SourceNodeTNLAddrInfo } + } + } // End of template m_e_RABInformationItem_full + + template (omit) EUTRA_CGI m_uUTRA_CGI( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) EUTRACellIdentity p_eUTRACellIdentity := PX_EUTRA_CELL_IDENTITY, + in template (omit) EUTRA_CGI.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + eUTRACellIdentity := p_eUTRACellIdentity, + iE_Extensions := p_iE_Extensions + } // End of template m_uUTRA_CGI + + template (omit) EUTRA_PagingeDRXInformation m_eUTRA_PagingeDRXInformation( + in template (value) EUTRA_Paging_eDRX_Cycle p_eUTRA_paging_eDRX_Cycle, + in template (omit) EUTRA_Paging_Time_Window p_eUTRA_paging_Time_Window := omit, + in template (omit) EUTRA_PagingeDRXInformation.iE_Extensions p_iE_Extensions := omit + ) := { + eUTRA_paging_eDRX_Cycle := p_eUTRA_paging_eDRX_Cycle, + eUTRA_paging_Time_Window := p_eUTRA_paging_Time_Window, + iE_Extensions := p_iE_Extensions + } // End of template m_eUTRA_PagingeDRXInformation + + template (value) EUTRA_Paging_eDRX_Cycle m_eUTRA_Paging_eDRX_Cycle(in EUTRA_Paging_eDRX_Cycle p_value := hfhalf) := p_value; + + template (value) EUTRA_Paging_Time_Window m_eUTRA_Paging_Time_Window(in EUTRA_Paging_Time_Window p_value := s1) := p_value; + + template (value) EventType m_eventType(in EventType p_value := direct) := p_value; + + template (omit) ExcessPacketDelayThresholdItem m_excessPacketDelayThresholdItem( + in template (value) FiveQI p_fiveQi, + in template (value) ExcessPacketDelayThresholdValue p_excessPacketDelayThresholdValue, + in template (omit) ExcessPacketDelayThresholdItem.iE_Extensions p_iE_Extensions := omit + ) := { + fiveQi := p_fiveQi, + excessPacketDelayThresholdValue := p_excessPacketDelayThresholdValue, + iE_Extensions := p_iE_Extensions + } // End of template m_excessPacketDelayThresholdItem + + template (value) ExcessPacketDelayThresholdValue m_excessPacketDelayThresholdValue(in ExcessPacketDelayThresholdValue p_value := ms0dot25) := p_value; + + template (value) ExpectedHOInterval m_expectedHOInterval(in ExpectedHOInterval p_value := sec15) := p_value; + + template (omit) ExpectedUEActivityBehaviour m_expectedUEActivityBehaviour( + in template (omit) ExpectedActivityPeriod p_expectedActivityPeriod := omit, + in template (omit) ExpectedIdlePeriod p_expectedIdlePeriod := omit, + in template (omit) SourceOfUEActivityBehaviourInformation p_sourceOfUEActivityBehaviourInformation := omit, + in template (omit) ExpectedUEActivityBehaviour.iE_Extensions p_iE_Extensions := omit + ) := { + expectedActivityPeriod := p_expectedActivityPeriod, + expectedIdlePeriod := p_expectedIdlePeriod, + sourceOfUEActivityBehaviourInformation := p_sourceOfUEActivityBehaviourInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_expectedUEActivityBehaviour + + template (omit) ExpectedUEBehaviour m_expectedUEBehaviour( + in template (omit) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour := omit, + in template (omit) ExpectedHOInterval p_expectedHOInterval := omit, + in template (omit) ExpectedUEMobility p_expectedUEMobility := omit, + in template (omit) ExpectedUEMovingTrajectory p_expectedUEMovingTrajectory:= omit, + in template (omit) ExpectedUEBehaviour.iE_Extensions p_iE_Extensions := omit + ) := { + expectedUEActivityBehaviour := p_expectedUEActivityBehaviour, + expectedHOInterval := p_expectedHOInterval, + expectedUEMobility := p_expectedUEMobility, + expectedUEMovingTrajectory := p_expectedUEMovingTrajectory, + iE_Extensions := p_iE_Extensions + } // End of template m_expectedUEBehaviour + + template (value) ExpectedUEMobility m_expectedUEMobility(in ExpectedUEMobility p_value := mobile) := p_value; + + template (omit) ExpectedUEMovingTrajectoryItem m_expectedUEMovingTrajectoryItem( + in template (value) NGRAN_CGI p_nGRAN_CGI, + in template (omit) ExpectedUEMovingTrajectoryItem.timeStayedInCell p_timeStayedInCell := omit, + in template (omit) ExpectedUEMovingTrajectoryItem.iE_Extensions p_iE_Extensions := omit + ) := { + nGRAN_CGI := p_nGRAN_CGI, + timeStayedInCell := p_timeStayedInCell, + iE_Extensions := p_iE_Extensions + } // End of template m_expectedUEMovingTrajectoryItem + + template (omit) Extended_AMFName m_extended_AMFName( + in template (omit) AMFNameVisibleString p_aMFNameVisibleString := omit, + in template (omit) AMFNameUTF8String p_aMFNameUTF8String := omit, + in template (omit) Extended_AMFName.iE_Extensions p_iE_Extensions := omit + ) := { + aMFNameVisibleString := p_aMFNameVisibleString, + aMFNameUTF8String := p_aMFNameUTF8String, + iE_Extensions := p_iE_Extensions + } // End of template m_extended_AMFName + + template (omit) Extended_RANNodeName m_extended_RANNodeName( + in template (omit) RANNodeNameVisibleString p_rANNodeNameVisibleString := omit, + in template (omit) RANNodeNameUTF8String p_rANNodeNameUTF8String := omit, + in template (omit) Extended_RANNodeName.iE_Extensions p_iE_Extensions := omit + ) := { + rANNodeNameVisibleString := p_rANNodeNameVisibleString, + rANNodeNameUTF8String := p_rANNodeNameUTF8String, + iE_Extensions := p_iE_Extensions + } // End of template m_extended_RANNodeName + + template (omit) ExtendedRATRestrictionInformation m_extendedRATRestrictionInformation( + in template (value) ExtendedRATRestrictionInformation.primaryRATRestriction p_primaryRATRestriction, + in template (value) ExtendedRATRestrictionInformation.secondaryRATRestriction p_secondaryRATRestriction, + in template (omit) ExtendedRATRestrictionInformation.iE_Extensions p_iE_Extensions := omit + ) := { + primaryRATRestriction := p_primaryRATRestriction, + secondaryRATRestriction := p_secondaryRATRestriction, + iE_Extensions := p_iE_Extensions + } // End of template m_extendedRATRestrictionInformation + + template (value) EventTrigger m_eventTrigger_outOfCoverage( + in template (value) EventTrigger.outOfCoverage p_outOfCoverage := true_ + ) := { + outOfCoverage := p_outOfCoverage + } // End of template m_eventTrigger_outOfCoverage + + template (value) EventTrigger m_eventTrigger_eventL1LoggedMDTConfig( + in template (value) EventL1LoggedMDTConfig p_eventL1LoggedMDTConfig + ) := { + eventL1LoggedMDTConfig := p_eventL1LoggedMDTConfig + } // End of template m_eventTrigger_eventL1LoggedMDTConfig + + template (value) EventTrigger m_eventTrigger_choice_Extensions( + in template (value) EventTrigger.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_eventTrigger_choice_Extensions + + template (omit) EventL1LoggedMDTConfig m_eventL1LoggedMDTConfig( + in template (value) MeasurementThresholdL1LoggedMDT p_l1Threshold, + in template (value) Hysteresis p_hysteresis, + in template (value) TimeToTrigger p_timeToTrigger, + in template (omit) EventL1LoggedMDTConfig.iE_Extensions p_iE_Extensions := omit + ) := { + l1Threshold := p_l1Threshold, + hysteresis := p_hysteresis, + timeToTrigger := p_timeToTrigger, + iE_Extensions := p_iE_Extensions + } // End of template m_eventL1LoggedMDTConfig + + template (value) MeasurementThresholdL1LoggedMDT m_measurementThresholdL1LoggedMDT_threshold_RSRP( + in template (value) Threshold_RSRP p_threshold_RSRP + ) := { + threshold_RSRP := p_threshold_RSRP + } // End of template m_measurementThresholdL1LoggedMDT_threshold_RSRP + + template (value) MeasurementThresholdL1LoggedMDT m_measurementThresholdL1LoggedMDT_threshold_RSRQ( + in template (value) Threshold_RSRQ p_threshold_RSRQ + ) := { + threshold_RSRQ := p_threshold_RSRQ + } // End of template m_measurementThresholdL1LoggedMDT_threshold_RSRQ + + template (value) MeasurementThresholdL1LoggedMDT m_measurementThresholdL1LoggedMDT_choice_Extensions( + in template (value) MeasurementThresholdL1LoggedMDT.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_measurementThresholdL1LoggedMDT_choice_Extensions + + template (omit) FailureIndication m_failureIndication( + in template (value) UERLFReportContainer p_uERLFReportContainer, + in template (omit) FailureIndication.iE_Extensions p_iE_Extensions := omit + ) := { + uERLFReportContainer := p_uERLFReportContainer, + iE_Extensions := p_iE_Extensions + } // End of template m_failureIndication + + template (omit) FiveG_ProSeAuthorized m_FiveG_ProSeAuthorized( + in template (omit) FiveGProSeDirectDiscovery p_fiveGProSeDirectDiscovery := omit, + in template (omit) FiveGProSeDirectCommunication p_fiveGProSeDirectCommunication := omit, + in template (omit) FiveGProSeLayer2UEtoNetworkRelay p_fiveGProSeLayer2UEtoNetworkRelay := omit, + in template (omit) FiveGProSeLayer3UEtoNetworkRelay p_fiveGProSeLayer3UEtoNetworkRelay := omit, + in template (omit) FiveGProSeLayer2RemoteUE p_fiveGProSeLayer2RemoteUE := omit, + in template (omit) FiveG_ProSeAuthorized.iE_Extensions p_iE_Extensions := omit + ) := { + fiveGProSeDirectDiscovery := p_fiveGProSeDirectDiscovery, + fiveGProSeDirectCommunication := p_fiveGProSeDirectCommunication, + fiveGProSeLayer2UEtoNetworkRelay := p_fiveGProSeLayer2UEtoNetworkRelay, + fiveGProSeLayer3UEtoNetworkRelay := p_fiveGProSeLayer3UEtoNetworkRelay, + fiveGProSeLayer2RemoteUE := p_fiveGProSeLayer2RemoteUE, + iE_Extensions := p_iE_Extensions + } // End of template m_FiveG_ProSeAuthorized + + template (value) FiveGProSeDirectDiscovery m_fiveGProSeDirectDiscovery(in FiveGProSeDirectDiscovery p_value := authorized) := p_value; + + template (value) FiveGProSeDirectCommunication m_fiveGProSeDirectCommunication(in FiveGProSeDirectCommunication p_value := authorized) := p_value; + + template (value) FiveGProSeLayer2UEtoNetworkRelay m_fiveGProSeLayer2UEtoNetworkRelay(in FiveGProSeLayer2UEtoNetworkRelay p_value := authorized) := p_value; + + template (value) FiveGProSeLayer3UEtoNetworkRelay m_fiveGProSeLayer3UEtoNetworkRelay(in FiveGProSeLayer3UEtoNetworkRelay p_value := authorized) := p_value; + + template (value) FiveGProSeLayer2RemoteUE m_fiveGProSeLayer2RemoteUE(in FiveGProSeLayer2RemoteUE p_value := authorized) := p_value; + + template (omit) FiveG_ProSePC5QoSParameters m_fiveG_ProSePC5QoSParameters( + in template (value) FiveGProSePC5QoSFlowList p_fiveGProSepc5QoSFlowList, + in template (omit) BitRate p_fiveGProSepc5LinkAggregateBitRates := omit, + in template (omit) FiveG_ProSePC5QoSParameters.iE_Extensions p_iE_Extensions := omit + ) := { + fiveGProSepc5QoSFlowList := p_fiveGProSepc5QoSFlowList, + fiveGProSepc5LinkAggregateBitRates := p_fiveGProSepc5LinkAggregateBitRates, + iE_Extensions := p_iE_Extensions + } // End of template m_fiveG_ProSePC5QoSParameters + + template (omit) FiveGProSePC5QoSFlowItem m_fiveGProSePC5QoSFlowItem( + in template (value) FiveQI p_fiveGproSepQI, + in template (omit) FiveGProSePC5FlowBitRates p_fiveGproSepc5FlowBitRates := omit, + in template (omit) Range p_fiveGproSerange := omit, + in template (omit) FiveGProSePC5QoSFlowItem.iE_Extensions p_iE_Extensions := omit + ) := { + fiveGproSepQI := p_fiveGproSepQI, + fiveGproSepc5FlowBitRates := p_fiveGproSepc5FlowBitRates, + fiveGproSerange := p_fiveGproSerange, + iE_Extensions := p_iE_Extensions + } // End of template m_fiveGProSePC5QoSFlowItem + + template (omit) FiveGProSePC5FlowBitRates m_fiveGProSePC5FlowBitRates( + in template (value) BitRate p_fiveGproSeguaranteedFlowBitRate, + in template (value) BitRate p_fiveGproSemaximumFlowBitRate, + in template (omit) FiveGProSePC5FlowBitRates.iE_Extensions p_iE_Extensions := omit + ) := { + fiveGproSeguaranteedFlowBitRate := p_fiveGproSeguaranteedFlowBitRate, + fiveGproSemaximumFlowBitRate := p_fiveGproSemaximumFlowBitRate, + iE_Extensions := p_iE_Extensions + } // End of template m_fiveGProSePC5FlowBitRates + + template (omit) FiveG_S_TMSI m_fiveG_S_TMSI( + in template (value) AMFSetID p_aMFSetID := PX_AMF_SET_ID, + in template (value) AMFPointer p_aMFPointer := PX_AMF_POINTER, + in template (value) FiveG_TMSI p_fiveG_TMSI, + in template (omit) FiveG_S_TMSI.iE_Extensions p_iE_Extensions := omit + ) := { + aMFSetID := p_aMFSetID, + aMFPointer := p_aMFPointer, + fiveG_TMSI := p_fiveG_TMSI, + iE_Extensions := p_iE_Extensions + } // End of template m_fiveG_S_TMSI + + template (omit) ForbiddenAreaInformation_Item m_forbiddenAreaInformation_Item( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) ForbiddenTACs p_forbiddenTACs, + in template (omit) ForbiddenAreaInformation_Item.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + forbiddenTACs := p_forbiddenTACs, + iE_Extensions := p_iE_Extensions + } // End of template m_forbiddenAreaInformation_Item + + template (omit) FromEUTRANtoNGRAN m_fromEUTRANtoNGRAN( + in template (value) IntersystemSONeNBID p_sourceeNBID, + in template (value) IntersystemSONNGRANnodeID p_targetNGRANnodeID, + in template (omit) FromEUTRANtoNGRAN.iE_Extensions p_iE_Extensions := omit + ) := { + sourceeNBID := p_sourceeNBID, + targetNGRANnodeID := p_targetNGRANnodeID, + iE_Extensions := p_iE_Extensions + } // End of template m_fromEUTRANtoNGRAN + + template (omit) FromNGRANtoEUTRAN m_fromNGRANtoEUTRAN( + in template (value) IntersystemSONNGRANnodeID p_sourceNGRANnodeID, + in template (value) IntersystemSONeNBID p_targeteNBID, + in template (omit) FromNGRANtoEUTRAN.iE_Extensions p_iE_Extensions := omit + ) := { + sourceNGRANnodeID := p_sourceNGRANnodeID, + targeteNBID := p_targeteNBID, + iE_Extensions := p_iE_Extensions + } // End of template m_fromNGRANtoEUTRAN + + template (omit) GBR_QosInformation m_gBR_QosInformation( + in template (value) BitRate p_maximumFlowBitRateDL, + in template (value) BitRate p_maximumFlowBitRateUL, + in template (value) BitRate p_guaranteedFlowBitRateDL, + in template (value) BitRate p_guaranteedFlowBitRateUL, + in template (omit) NotificationControl p_notificationControl := omit, + in template (omit) PacketLossRate p_maximumPacketLossRateDL := omit, + in template (omit) PacketLossRate p_maximumPacketLossRateUL := omit, + in template (omit) GBR_QosInformation.iE_Extensions p_iE_Extensions := omit + ) := { + maximumFlowBitRateDL := p_maximumFlowBitRateDL, + maximumFlowBitRateUL := p_maximumFlowBitRateUL, + guaranteedFlowBitRateDL := p_guaranteedFlowBitRateDL, + guaranteedFlowBitRateUL := p_guaranteedFlowBitRateUL, + notificationControl := p_notificationControl, + maximumPacketLossRateDL := p_maximumPacketLossRateDL, + maximumPacketLossRateUL := p_maximumPacketLossRateUL, + iE_Extensions := p_iE_Extensions + } // End of template m_gBR_QosInformation + + template (value) GBR_QosInformation.iE_Extensions m_gBR_QosInformation_id_AlternativeQoSParaSetList( + in template (value) AlternativeQoSParaSetList p_alternativeQoSParaSetList + ) := { + { + id := id_AlternativeQoSParaSetList, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetList := p_alternativeQoSParaSetList} + } + } // End of template m_gBR_QosInformation_id_AlternativeQoSParaSetList + + template (omit) GlobalCable_ID_new m_globalCable_ID_new( + in template (value) GlobalCable_ID p_globalCable_ID, + in template (value) TAI p_tAI, + in template (omit) GlobalCable_ID_new.iE_Extensions p_iE_Extensions := omit + ) := { + globalCable_ID := p_globalCable_ID, + tAI := p_tAI, + iE_Extensions := p_iE_Extensions + } // End of template m_globalCable_ID_new + + template (omit) GlobalGNB_ID m_ie_globalGnbId( + in template (value) PLMNIdentity p_plmnId := PX_PLMN_IDENTITY, + in template (value) bitstring p_gnbId := PX_GNB_ID, + in template (omit) GlobalGNB_ID.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_plmnId,//'010001'O, + gNB_ID := { gNB_ID := p_gnbId/*'0000000000000000000000'B*/}, + iE_Extensions := p_iE_Extensions + } // End of template m_ie_globalGnbId + + template (omit) GlobalN3IWF_ID m_globalN3IWF_ID( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) N3IWF_ID p_n3IWF_ID, + in template (omit) GlobalN3IWF_ID.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + n3IWF_ID := p_n3IWF_ID, + iE_Extensions := p_iE_Extensions + } // End of template m_globalN3IWF_ID + + template (omit) GlobalLine_ID m_globalLine_ID( + in template (value) GlobalLineIdentity p_globalLineIdentity, + in template (omit) LineType p_lineType := omit, + in template (omit) GlobalLine_ID.iE_Extensions p_iE_Extensions := omit + ) := { + globalLineIdentity := p_globalLineIdentity, + lineType := p_lineType, + iE_Extensions := p_iE_Extensions + } // End of template m_globalLine_ID + + template (value) GlobalLine_ID.iE_Extensions m_globalLine_ID_id_TAI(in template (value) TAI p_tAI) := { + { + id := id_TAI, + criticality := ignore, + extensionValue := { TAI := p_tAI } + } + } // End of template m_globalLine_ID_id_TAI + + template (omit) GlobalNgENB_ID m_globalNgENB_ID( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) NgENB_ID p_ngENB_ID, + in template (omit) GlobalNgENB_ID.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + ngENB_ID := p_ngENB_ID, + iE_Extensions := p_iE_Extensions + } // End of template m_globalNgENB_ID + + template (value) GlobalRANNodeID m_globalRANNodeID_globalGNB_ID( + in template (value) GlobalGNB_ID p_globalGNB_ID + ) := { + globalGNB_ID := p_globalGNB_ID + } // End of template m_globalRANNodeID_globalGNB_ID + + template (value) GlobalRANNodeID m_globalRANNodeID_globalNgENB_ID( + in template (value) GlobalNgENB_ID p_globalNgENB_ID + ) := { + globalNgENB_ID := p_globalNgENB_ID + } // End of template m_globalRANNodeID_globalNgENB_ID + + template (value) GlobalRANNodeID m_globalRANNodeID_globalN3IWF_ID( + in template (value) GlobalN3IWF_ID p_globalN3IWF_ID + ) := { + globalN3IWF_ID := p_globalN3IWF_ID + } // End of template m_globalRANNodeID_globalN3IWF_ID + + template (value) GlobalRANNodeID m_globalRANNodeID_choice_Extensions( + in template (value) GlobalRANNodeID.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_globalRANNodeID_choice_Extensions + + template (value) GlobalRANNodeID.choice_Extensions m_globalRANNodeID_id_GlobalTNGF_ID( + in template (value) GlobalTNGF_ID p_globalTNGF_ID + ) := { + id := id_GlobalTNGF_ID, + criticality := reject, + value_ := { GlobalTNGF_ID := p_globalTNGF_ID } + } // End of template m_globalRANNodeID_id_GlobalTNGF_ID + + template (value) GlobalRANNodeID.choice_Extensions m_globalRANNodeID_id_GlobalTWIF_ID( + in template (value) GlobalTNGF_ID p_globalTWIF_ID + ) := { + id := id_GlobalTWIF_ID, + criticality := reject, + value_ := { GlobalTNGF_ID := p_globalTWIF_ID } + } // End of template m_globalRANNodeID_id_GlobalTWIF_ID + + template (value) GlobalRANNodeID.choice_Extensions m_globalRANNodeID_id_GlobalW_AGF_ID( + in template (value) GlobalW_AGF_ID p_globalW_AGF_ID + ) := { + id := id_GlobalW_AGF_ID, + criticality := reject, + value_ := { GlobalW_AGF_ID := p_globalW_AGF_ID } + } // End of template m_globalRANNodeID_id_GlobalW_AGF_ID + + // template (value) GlobalRANNodeID.choice_Extensions m_globalRANNodeID_all( + // in template (value) GlobalTNGF_ID p_globalTNGF_ID, + // in template (value) GlobalTWIF_ID p_globalTWIF_ID, + // in template (value) GlobalW_AGF_ID p_globalW_AGF_ID + // ) := { + // { + // id := id_GlobalTNGF_ID, + // criticality := reject, + // value_ := { GlobalTNGF_ID := p_globalTNGF_ID } + // }, + // { + // id := id_GlobalTWIF_ID, + // criticality := reject, + // value_ := { GlobalTNGF_ID := p_globalTWIF_ID } + // }, + // { + // id := id_GlobalW_AGF_ID, + // criticality := reject, + // value_ := { GlobalW_AGF_ID := p_globalW_AGF_ID } + // } + // } // End of template m_globalRANNodeID_all + + template (omit) GlobalTNGF_ID m_globalTNGF_ID( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) TNGF_ID p_tNGF_ID, + in template (omit) GlobalTNGF_ID.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + tNGF_ID := p_tNGF_ID, + iE_Extensions := p_iE_Extensions + } // End of template m_globalTNGF_ID + + template (omit) GlobalTWIF_ID m_globalTWIF_ID( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) TWIF_ID p_tWIF_ID, + in template (omit) GlobalTWIF_ID.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + tWIF_ID := p_tWIF_ID, + iE_Extensions := p_iE_Extensions + } // End of template m_globalTWIF_ID + + template (omit) GlobalW_AGF_ID m_GlobalW_AGF_ID( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) W_AGF_ID p_w_AGF_ID, + in template (omit) GlobalW_AGF_ID.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + w_AGF_ID := p_w_AGF_ID, + iE_Extensions := p_iE_Extensions + } // End of template m_GlobalW_AGF_ID + + template (value) GNB_ID m_gNB_ID_gNB_ID( + in template (value) GNB_ID.gNB_ID p_gNB_ID + ) := { + gNB_ID := p_gNB_ID + } // End of template m_gNB_ID_gNB_ID + + template (value) GNB_ID m_gNB_ID_choice_Extensions( + in template (value) GNB_ID.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_gNB_ID_choice_Extensions + + template (omit) GTPTunnel m_gTPTunnel( + in template (value) TransportLayerAddress p_tla := PX_TRANSPORT_LAYER_ADDRESS, + in template (value) GTP_TEID p_gtp_teid := PX_GTP_TEID, + in template (omit) GTPTunnel.iE_Extensions p_iE_Extensions := omit + ):= { + transportLayerAddress := p_tla, + gTP_TEID := p_gtp_teid, + iE_Extensions := p_iE_Extensions + } // End of template m_gTPTunnel + + template (omit) GUAMI m_gUAMI( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) AMFRegionID p_aMFRegionID := PX_AMF_REGION_ID, + in template (value) AMFSetID p_aMFSetID := PX_AMF_SET_ID, + in template (value) AMFPointer p_aMFPointer := PX_AMF_POINTER, + in template (omit) GUAMI.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + aMFRegionID := p_aMFRegionID, + aMFSetID := p_aMFSetID, + aMFPointer := p_aMFPointer, + iE_Extensions := p_iE_Extensions + } // End of template m_gUAMI + + template (value) GUAMIType m_gUAMIType(in GUAMIType p_val := native) := p_val; + + template (omit) HandoverCommandTransfer m_handoverCommandTransfer( + in template (omit) UPTransportLayerInformation p_dLForwardingUP_TNLInformation := omit, + in template (omit) QosFlowToBeForwardedList p_qosFlowToBeForwardedList := omit, + in template (omit) DataForwardingResponseDRBList p_dataForwardingResponseDRBList := omit, + in template (omit) HandoverCommandTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + dLForwardingUP_TNLInformation := p_dLForwardingUP_TNLInformation, + qosFlowToBeForwardedList := p_qosFlowToBeForwardedList, + dataForwardingResponseDRBList := p_dataForwardingResponseDRBList, + iE_Extensions := p_iE_Extensions + } // End of template m_handoverCommandTransfer + + template (value) HandoverCommandTransfer.iE_Extensions m_handoverCommandTransfer_id_AdditionalDLForwardingUPTNLInformation( + in template (value) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList + ) := { + { + id := id_AdditionalDLForwardingUPTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template m_handoverCommandTransfer_id_AdditionalDLForwardingUPTNLInformation + + template (value) HandoverCommandTransfer.iE_Extensions m_handoverCommandTransfer_id_ULForwardingUP_TNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_ULForwardingUP_TNLInformation, + criticality := reject, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_handoverCommandTransfer_id_ULForwardingUP_TNLInformation + + template (value) HandoverCommandTransfer.iE_Extensions m_handoverCommandTransfer_id_AdditionalULForwardingUPTNLInformation( + in template (value) UPTransportLayerInformationList p_uPTransportLayerInformationList + ) := { + { + id := id_AdditionalULForwardingUPTNLInformation, + criticality := reject, + extensionValue := { UPTransportLayerInformationList := p_uPTransportLayerInformationList } + } + } // End of template m_handoverCommandTransfer_id_AdditionalULForwardingUPTNLInformation + + template (value) HandoverCommandTransfer.iE_Extensions m_handoverCommandTransfer_id_DataForwardingResponseERABList( + in template (value) DataForwardingResponseERABList p_dataForwardingResponseERABList + ) := { + { + id := id_DataForwardingResponseERABList, + criticality := ignore, + extensionValue := { DataForwardingResponseERABList := p_dataForwardingResponseERABList } + } + } // End of template m_handoverCommandTransfer_id_DataForwardingResponseERABList + + template (value) HandoverCommandTransfer.iE_Extensions m_handoverCommandTransfer_id_QosFlowFailedToSetupList( + in template (value) QosFlowListWithCause p_qosFlowListWithCause + ) := { + { + id := id_QosFlowFailedToSetupList, + criticality := ignore, + extensionValue := { QosFlowListWithCause := p_qosFlowListWithCause } + } + } // End of template m_handoverCommandTransfer_id_QosFlowFailedToSetupList + + template (value) HandoverFlag m_handoverFlag(in HandoverFlag p_val := handover_preparation) := p_val; + + template (omit) HandoverPreparationUnsuccessfulTransfer m_mandoverPreparationUnsuccessfulTransfer( + in template (value) Cause p_cause, + in template (omit) HandoverPreparationUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_mandoverPreparationUnsuccessfulTransfer + + template (omit) HandoverRequestAcknowledgeTransfer m_handoverRequestAcknowledgeTransfer( + in template (value) UPTransportLayerInformation p_dL_NGU_UP_TNLInformation, + in template (value) QosFlowListWithDataForwarding p_qosFlowSetupResponseList, + in template (omit) UPTransportLayerInformation p_dLForwardingUP_TNLInformation := omit, + in template (omit) SecurityResult p_securityResult := omit, + in template (omit) QosFlowListWithCause p_qosFlowFailedToSetupList := omit, + in template (omit) DataForwardingResponseDRBList p_dataForwardingResponseDRBList := omit, + in template (omit) HandoverRequestAcknowledgeTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + dL_NGU_UP_TNLInformation := p_dL_NGU_UP_TNLInformation, + dLForwardingUP_TNLInformation := p_dLForwardingUP_TNLInformation, + securityResult := p_securityResult, + qosFlowSetupResponseList := p_qosFlowSetupResponseList, + qosFlowFailedToSetupList := p_qosFlowFailedToSetupList, + dataForwardingResponseDRBList := p_dataForwardingResponseDRBList, + iE_Extensions := p_iE_Extensions + } // End of template m_handoverRequestAcknowledgeTransfer + + template (value) HandoverRequestAcknowledgeTransfer.iE_Extensions m_handoverRequestAcknowledgeTransfer_id_AdditionalDLUPTNLInformationForHOList( + in template (value) AdditionalDLUPTNLInformationForHOList p_additionalDLUPTNLInformationForHOList + ) := { + { + id := id_AdditionalDLUPTNLInformationForHOList, + criticality := reject, + extensionValue := { AdditionalDLUPTNLInformationForHOList := p_additionalDLUPTNLInformationForHOList } + } + } // End of template m_handoverRequestAcknowledgeTransfer_id_AdditionalDLUPTNLInformationForHOList + + template (value) HandoverRequestAcknowledgeTransfer.iE_Extensions m_handoverRequestAcknowledgeTransfer_id_ULForwardingUP_TNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_ULForwardingUP_TNLInformation, + criticality := reject, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_handoverRequestAcknowledgeTransfer_id_ULForwardingUP_TNLInformation + + template (value) HandoverRequestAcknowledgeTransfer.iE_Extensions m_handoverRequestAcknowledgeTransfer_id_AdditionalULForwardingUPTNLInformation( + in template (value) UPTransportLayerInformationList p_uPTransportLayerInformationList + ) := { + { + id := id_AdditionalULForwardingUPTNLInformation, + criticality := reject, + extensionValue := { UPTransportLayerInformationList := p_uPTransportLayerInformationList } + } + } // End of template m_handoverRequestAcknowledgeTransfer_id_AdditionalULForwardingUPTNLInformation + + template (value) HandoverRequestAcknowledgeTransfer.iE_Extensions m_handoverRequestAcknowledgeTransfer_id_DataForwardingResponseERABList( + in template (value) DataForwardingResponseERABList p_dataForwardingResponseERABList + ) := { + { + id := id_DataForwardingResponseERABList, + criticality := ignore, + extensionValue := { DataForwardingResponseERABList := p_dataForwardingResponseERABList } + } + } // End of template m_handoverRequestAcknowledgeTransfer_id_DataForwardingResponseERABList + + template (value) HandoverRequestAcknowledgeTransfer.iE_Extensions m_handoverRequestAcknowledgeTransfer_id_RedundantDL_NGU_UP_TNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_RedundantDL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_handoverRequestAcknowledgeTransfer_id_RedundantDL_NGU_UP_TNLInformation + + template (value) HandoverRequestAcknowledgeTransfer.iE_Extensions m_handoverRequestAcknowledgeTransfer_id_UsedRSNInformation( + in template (value) RedundantPDUSessionInformation p_redundantPDUSessionInformation + ) := { + { + id := id_UsedRSNInformation, + criticality := ignore, + extensionValue := { RedundantPDUSessionInformation := p_redundantPDUSessionInformation } + } + } // End of template m_handoverRequestAcknowledgeTransfer_id_UsedRSNInformation + + template (value) HandoverRequestAcknowledgeTransfer.iE_Extensions m_handoverRequestAcknowledgeTransfer_id_GlobalRANNodeID( + in template (value) GlobalRANNodeID p_globalRANNodeID + ) := { + { + id := id_GlobalRANNodeID, + criticality := ignore, + extensionValue := { GlobalRANNodeID := p_globalRANNodeID } + } + } // End of template m_handoverRequestAcknowledgeTransfer_id_GlobalRANNodeID + + template (value) HandoverRequestAcknowledgeTransfer.iE_Extensions m_handoverRequestAcknowledgeTransfer_id_MBS_SupportIndicator( + in template (value) MBS_SupportIndicator p_mBS_SupportIndicator + ) := { + { + id := id_MBS_SupportIndicator, + criticality := ignore, + extensionValue := { MBS_SupportIndicator := p_mBS_SupportIndicator } + } + } // End of template m_handoverRequestAcknowledgeTransfer_id_MBS_SupportIndicator + + template (omit) HandoverRequiredTransfer m_handoverRequiredTransfer( + in template (omit) DirectForwardingPathAvailability p_directForwardingPathAvailability := omit, + in template (omit) HandoverRequiredTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + directForwardingPathAvailability := p_directForwardingPathAvailability, + iE_Extensions := p_iE_Extensions + } // End of template m_handoverRequiredTransfer + + template (omit) HandoverResourceAllocationUnsuccessfulTransfer m_handoverResourceAllocationUnsuccessfulTransfer( + in template (value) Cause p_cause, + in template (omit) CriticalityDiagnostics p_criticalityDiagnostics := omit, + in template (omit) HandoverResourceAllocationUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + cause := p_cause, + criticalityDiagnostics := p_criticalityDiagnostics, + iE_Extensions := p_iE_Extensions + } // End of template m_handoverResourceAllocationUnsuccessfulTransfer + + template (value) HandoverType m_handoverType(in HandoverType p_value := intra5gs) := p_value; + + template (omit) HFCNode_ID_new m_hFCNode_ID_new( + in template (value) HFCNode_ID p_hFCNode_ID, + in template (value) TAI p_tAI, + in template (omit) HFCNode_ID_new.iE_Extensions p_iE_Extensions := omit + ) := { + hFCNode_ID := p_hFCNode_ID, + tAI := p_tAI, + iE_Extensions := p_iE_Extensions + } // End of template m_hFCNode_ID_new + + template (omit) HOReport m_hOReport( + in template (value) HOReport.handoverReportType p_handoverReportType := ho_too_early, + in template (value) Cause p_handoverCause, + in template (value) NGRAN_CGI p_sourcecellCGI, + in template (value) NGRAN_CGI p_targetcellCGI, + in template (omit) NGRAN_CGI p_reestablishmentcellCGI, + in template (omit) Bit16 p_sourcecellC_RNTI := omit, + in template (omit) EUTRA_CGI p_targetcellinE_UTRAN := omit, + in template (omit) MobilityInformation p_mobilityInformation := omit, + in template (omit) UERLFReportContainer p_uERLFReportContainer := omit, + in template (omit) HOReport.iE_Extensions p_iE_Extensions := omit + ) := { + handoverReportType := p_handoverReportType, + handoverCause := p_handoverCause, + sourcecellCGI := p_sourcecellCGI, + targetcellCGI := p_targetcellCGI, + reestablishmentcellCGI := p_reestablishmentcellCGI, + // The above IE shall be present if the Handover Report Type IE is set to the value "HO to wrong cell" + sourcecellC_RNTI := p_sourcecellC_RNTI, + targetcellinE_UTRAN := p_targetcellinE_UTRAN, + // The above IE shall be present if the Handover Report Type IE is set to the value "Inter System ping_pong" + mobilityInformation := p_mobilityInformation, + uERLFReportContainer := p_uERLFReportContainer, + iE_Extensions := p_iE_Extensions + } // End of template m_hOReport + + template (value) IAB_Authorized m_iAB_Authorized(in IAB_Authorized p_value := authorized) := p_value; + + template (value) IAB_Supported m_iAB_Supported(in IAB_Supported p_value := true_) := p_value; + + template (value) IABNodeIndication m_iABNodeIndication(in IABNodeIndication p_value := true_) := p_value; + + template (value) IMSVoiceSupportIndicator m_iMSVoiceSupportIndicator(in IMSVoiceSupportIndicator p_value := supported) := p_value; + + template (omit) InfoOnRecommendedCellsAndRANNodesForPaging m_infoOnRecommendedCellsAndRANNodesForPaging( + in template (value) RecommendedCellsForPaging p_recommendedCellsForPaging, + in template (value) RecommendedRANNodesForPaging p_recommendRANNodesForPaging, + in template (omit) InfoOnRecommendedCellsAndRANNodesForPaging.iE_Extensions p_iE_Extensions := omit + ) := { + recommendedCellsForPaging := p_recommendedCellsForPaging, + recommendRANNodesForPaging := p_recommendRANNodesForPaging, + iE_Extensions := p_iE_Extensions + } // End of template m_infoOnRecommendedCellsAndRANNodesForPaging + + template (value) IntegrityProtectionIndication m_integrityProtectionIndication(in IntegrityProtectionIndication p_value := required) := p_value; + + template (value) IntegrityProtectionResult m_integrityProtectionResult(in IntegrityProtectionResult p_value := performed) := p_value; + + template (omit) ImmediateMDTNr m_immediateMDTNr( + in template (value) MeasurementsToActivate p_measurementsToActivate, + in template (omit) M1Configuration p_m1Configuration := omit, + in template (omit) M4Configuration p_m4Configuration := omit, + in template (omit) M5Configuration p_m5Configuration := omit, + in template (omit) M6Configuration p_m6Configuration := omit, + in template (omit) M7Configuration p_m7Configuration := omit, + in template (omit) BluetoothMeasurementConfiguration p_bluetoothMeasurementConfiguration := omit, + in template (omit) WLANMeasurementConfiguration p_wLANMeasurementConfiguration := omit, + in template (omit) MDT_Location_Info p_mDT_Location_Info := omit, + in template (omit) SensorMeasurementConfiguration p_sensorMeasurementConfiguration := omit, + in template (omit) ImmediateMDTNr.iE_Extensions p_iE_Extensions := omit + ) := { + measurementsToActivate := p_measurementsToActivate, + m1Configuration := p_m1Configuration, + // The above IE shall be present if the Measurements to Activate IE has the first bit set to “1” + m4Configuration := p_m4Configuration, + // The above IE shall be present if the Measurements to Activate IE has the third bit set to “1” + m5Configuration := p_m5Configuration, + // The above IE shall be present if the Measurements to Activate IE has the fourth bit set to “1” + m6Configuration := p_m6Configuration, + // The above IE shall be present if the Measurements to Activate IE has the fifth bit set to “1” + m7Configuration := p_m7Configuration, + // The above IE shall be present if the Measurements to Activate IE has the sixth bit set to “1” + bluetoothMeasurementConfiguration := p_bluetoothMeasurementConfiguration, + wLANMeasurementConfiguration := p_wLANMeasurementConfiguration, + mDT_Location_Info := p_mDT_Location_Info, + sensorMeasurementConfiguration := p_sensorMeasurementConfiguration, + iE_Extensions := p_iE_Extensions + } // End of template m_immediateMDTNr + + template (omit) InterSystemFailureIndication m_interSystemFailureIndication( + in template (omit) UERLFReportContainer p_uERLFReportContainer := omit, + in template (omit) InterSystemFailureIndication.iE_Extensions p_iE_Extensions := omit + ) := { + uERLFReportContainer := p_uERLFReportContainer, + iE_Extensions := p_iE_Extensions + } // End of template m_interSystemFailureIndication + + template (omit) IntersystemSONConfigurationTransfer m_intersystemSONConfigurationTransfer( + in template (value) IntersystemSONTransferType p_transferType, + in template (value) IntersystemSONInformation p_intersystemSONInformation, + in template (omit) IntersystemSONConfigurationTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + transferType := p_transferType, + intersystemSONInformation := p_intersystemSONInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_intersystemSONConfigurationTransfer + + template (value) IntersystemSONTransferType m_intersystemSONTransferType_fromEUTRANtoNGRAN( + in template (value) FromEUTRANtoNGRAN p_fromEUTRANtoNGRAN + ) := { + fromEUTRANtoNGRAN := p_fromEUTRANtoNGRAN + } // End of template m_intersystemSONTransferType_fromEUTRANtoNGRAN + + template (value) IntersystemSONTransferType m_intersystemSONTransferType_fromNGRANtoEUTRAN( + in template (value) FromNGRANtoEUTRAN p_fromNGRANtoEUTRAN + ) := { + fromNGRANtoEUTRAN := p_fromNGRANtoEUTRAN + } // End of template m_intersystemSONTransferType_fromNGRANtoEUTRAN + + template (value) IntersystemSONTransferType m_intersystemSONTransferType_choice_Extensions( + in template (value) IntersystemSONTransferType.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_intersystemSONTransferType_choice_Extensions + + template (value) IntersystemSONeNBID m_intersystemSONeNBID( + in template (value) GlobalENB_ID p_globaleNBID, + in template (value) EPS_TAI p_selectedEPSTAI, + in template (omit) IntersystemSONeNBID.iE_Extensions p_iE_Extensions := omit + ) := { + globaleNBID := p_globaleNBID, + selectedEPSTAI := p_selectedEPSTAI, + iE_Extensions := p_iE_Extensions + } // End of template m_intersystemSONeNBID + + template (value) IntersystemSONNGRANnodeID m_intersystemSONNGRANnodeID( + in template (value) GlobalRANNodeID p_globalRANNodeID, + in template (value) TAI p_selectedTAI, + in template (omit) IntersystemSONNGRANnodeID.iE_Extensions p_iE_Extensions := omit + ) := { + globalRANNodeID := p_globalRANNodeID, + selectedTAI := p_selectedTAI, + iE_Extensions := p_iE_Extensions + } // End of template m_intersystemSONNGRANnodeID + + template (value) IntersystemSONInformation m_intersystemSONInformation_intersystemSONInformationReport( + in template (value) IntersystemSONInformationReport p_intersystemSONInformationReport + ) := { + intersystemSONInformationReport := p_intersystemSONInformationReport + } // End of template m_intersystemSONInformation_intersystemSONInformationReport + + template (value) IntersystemSONInformation m_intersystemSONInformation_choice_Extensions( + in template (value) IntersystemSONInformation.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_intersystemSONInformation_choice_Extensions + + template (value) IntersystemSONInformation.choice_Extensions m_intersystemSONInformation_id_IntersystemSONInformationRequest( + in template (value) IntersystemSONInformationRequest p_intersystemSONInformationRequest + ) := { + id := id_IntersystemSONInformationRequest, + criticality := ignore, + value_ := { IntersystemSONInformationRequest := p_intersystemSONInformationRequest } + } // End of template m_intersystemSONInformation_id_IntersystemSONInformationRequest + + template (value) IntersystemSONInformation.choice_Extensions m_intersystemSONInformation_id_IntersystemSONInformationReply( + in template (value) IntersystemSONInformationReply p_intersystemSONInformationReply + ) := { + id := id_IntersystemSONInformationReply, + criticality := ignore, + value_ := { IntersystemSONInformationReply := p_intersystemSONInformationReply } + } // End of template m_intersystemSONInformation_id_IntersystemSONInformationReply + + template (value) IntersystemSONInformationRequest m_intersystemSONInformationRequest_nGRAN_CellActivation( + in template (value) IntersystemCellActivationRequest p_nGRAN_CellActivation + ) := { + nGRAN_CellActivation := p_nGRAN_CellActivation + } // End of template m_intersystemSONInformationRequest_nGRAN_CellActivation + + template (value) IntersystemSONInformationRequest m_intersystemSONInformationRequest_resourceStatus( + in template (value) IntersystemResourceStatusRequest p_resourceStatus + ) := { + resourceStatus := p_resourceStatus + } // End of template m_intersystemSONInformationRequest_resourceStatus + + template (value) IntersystemSONInformationRequest m_intersystemSONInformationRequest_choice_Extensions( + in template (value) IntersystemSONInformationRequest.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_intersystemSONInformationRequest_choice_Extensions + + template (omit) IntersystemCellActivationRequest m_intersystemCellActivationRequest( + in template (value) IntersystemCellActivationRequest.activationID p_activationID, + in template (value) CellsToActivateList p_cellsToActivateList, + in template (omit) IntersystemCellActivationRequest.iE_Extensions p_iE_Extensions := omit + ) := { + activationID := p_activationID, + cellsToActivateList := p_cellsToActivateList, + iE_Extensions := p_iE_Extensions + } // End of template m_intersystemCellActivationRequest + + template (omit) IntersystemResourceStatusRequest m_intersystemResourceStatusRequest( + in template (value) ReportingSystem p_reportingSystem, + in template (value) ReportCharacteristics p_reportCharacteristics, + in template (value) ReportType p_reportType, + in template (omit) IntersystemResourceStatusRequest.iE_Extensions p_iE_Extensions := omit + ) := { + reportingSystem := p_reportingSystem, + reportCharacteristics := p_reportCharacteristics, + reportType := p_reportType, + iE_Extensions := p_iE_Extensions + } // End of template m_intersystemResourceStatusRequest + + template (value) ReportingSystem m_reportingSystem_eUTRAN( + in template (value) EUTRAN_ReportingSystemIEs p_eUTRAN + ) := { + eUTRAN := p_eUTRAN + } // End of template m_reportingSystem_eUTRAN + + template (value) ReportingSystem m_reportingSystem_nGRAN( + in template (value) NGRAN_ReportingSystemIEs p_nGRAN + ) := { + nGRAN := p_nGRAN + } // End of template m_reportingSystem_nGRAN + + template (value) ReportingSystem m_reportingSystem_choice_Extensions( + in template (value) ReportingSystem.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_reportingSystem_choice_Extensions + + template (omit) EUTRAN_ReportingSystemIEs m_eUTRAN_ReportingSystemIEs( + in template (value) EUTRAN_CellToReportList p_eUTRAN_CellToReportList, + in template (omit) EUTRAN_ReportingSystemIEs.iE_Extensions p_iE_Extensions := omit + ) := { + eUTRAN_CellToReportList := p_eUTRAN_CellToReportList, + iE_Extensions := p_iE_Extensions + } // End of template m_eUTRAN_ReportingSystemIEs + + template (omit) NGRAN_ReportingSystemIEs m_nGRAN_ReportingSystemIEs( + in template (value) NGRAN_CellToReportList p_nGRAN_CellToReportList, + in template (omit) NGRAN_ReportingSystemIEs.iE_Extensions p_iE_Extensions := omit + ) := { + nGRAN_CellToReportList := p_nGRAN_CellToReportList, + iE_Extensions := p_iE_Extensions + } // End of template m_nGRAN_ReportingSystemIEs + + template (omit) EUTRAN_CellToReportItem m_eUTRAN_CellToReportItem( + in template (value) EUTRA_CGI p_eCGI, + in template (omit) EUTRAN_CellToReportItem.iE_Extensions p_iE_Extensions := omit + ) := { + eCGI := p_eCGI, + iE_Extensions := p_iE_Extensions + } // End of template m_eUTRAN_CellToReportItem + + template (omit) NGRAN_CellToReportItem m_nGRAN_CellToReportItem( + in template (value) NGRAN_CGI p_nGRAN_CGI, + in template (omit) NGRAN_CellToReportItem.iE_Extensions p_iE_Extensions := omit + ):= { + nGRAN_CGI := p_nGRAN_CGI, + iE_Extensions := p_iE_Extensions + } // End of template m_nGRAN_CellToReportItem + + template (value) ReportType m_reportType_eventBasedReporting( + in template (value) EventBasedReportingIEs p_eventBasedReporting + ) := { + eventBasedReporting := p_eventBasedReporting + } // End of template m_reportType_eventBasedReporting + + template (value) ReportType m_reportType_periodicReporting( + in template (value) PeriodicReportingIEs p_periodicReporting + ) := { + periodicReporting := p_periodicReporting + } // End of template m_reportType_periodicReporting + + template (value) ReportType m_reportType_choice_Extensions( + in template (value) ReportType.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_reportType_choice_Extensions + + template (value) EventBasedReportingIEs m_eventBasedReportingIEs( + in template (value) IntersystemResourceThreshold p_intersystemResourceThresholdLow, + in template (value) IntersystemResourceThreshold p_intersystemResourceThresholdHigh, + in template (value)NumberOfMeasurementReportingLevels p_numberOfMeasurementReportingLevels, + in template (omit) EventBasedReportingIEs.iE_Extensions p_iE_Extensions := omit + ) := { + intersystemResourceThresholdLow := p_intersystemResourceThresholdLow, + intersystemResourceThresholdHigh := p_intersystemResourceThresholdHigh, + numberOfMeasurementReportingLevels := p_numberOfMeasurementReportingLevels, + iE_Extensions := p_iE_Extensions + } // End of template m_eventBasedReportingIEs + + template (value) NumberOfMeasurementReportingLevels m_numberOfMeasurementReportingLevels(in NumberOfMeasurementReportingLevels p_value := n2) := p_value; + + template (omit) PeriodicReportingIEs m_PeriodicReportingIEs( + in template (value) ReportingPeriodicity p_reportingPeriodicity, + in template (omit) PeriodicReportingIEs.iE_Extensions p_iE_Extensions := omit + ) := { + reportingPeriodicity := p_reportingPeriodicity, + iE_Extensions := p_iE_Extensions + } // End of template m_PeriodicReportingIEs + + template (value) ReportingPeriodicity m_reportingPeriodicity(in ReportingPeriodicity p_value := stop_) := p_value; + + template (value) IntersystemSONInformationReply m_intersystemSONInformationReply_nGRAN_CellActivation( + in template (value) IntersystemCellActivationReply p_nGRAN_CellActivation + ) := { + nGRAN_CellActivation := p_nGRAN_CellActivation + } // End of template m_intersystemSONInformationReply_nGRAN_CellActivation + + template (value) IntersystemSONInformationReply m_intersystemSONInformationReply_resourceStatus( + in template (value) IntersystemResourceStatusReply p_resourceStatus + ) := { + resourceStatus := p_resourceStatus + } // End of template m_intersystemSONInformationReply_resourceStatus + + template (value) IntersystemSONInformationReply m_intersystemSONInformationReply_choice_Extensions( + in template (value) IntersystemSONInformationReply.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_intersystemSONInformationReply_choice_Extensions + + template (omit) IntersystemCellActivationReply m_intersystemCellActivationReply( + in template (value) ActivatedCellList p_activatedCellList, + in template (value) IntersystemCellActivationReply.activation_ID p_activation_ID, + in template (omit) IntersystemCellActivationReply.iE_Extensions p_iE_Extensions := omit + ) := { + activatedCellList := p_activatedCellList, + activation_ID := p_activation_ID, + iE_Extensions := p_iE_Extensions + } // End of template m_intersystemCellActivationReply + + template (omit) IntersystemResourceStatusReply m_intersystemResourceStatusReply( + in template (value) ReportingSystem p_reportingsystem, + in template (omit) IntersystemResourceStatusReply.iE_Extensions p_iE_Extensions := omit + ) := { + reportingsystem := p_reportingsystem, + iE_Extensions := p_iE_Extensions + } // End of template m_intersystemResourceStatusReply + + template (value) IntersystemSONInformationReport m_intersystemSONInformationReport_hOReportInformation( + in template (value) InterSystemHOReport p_hOReportInformation + ) := { + hOReportInformation := p_hOReportInformation + } // End of template m_intersystemSONInformationReport_hOReportInformation + + template (value) IntersystemSONInformationReport m_intersystemSONInformationReport_failureIndicationInformation( + in template (value) InterSystemFailureIndication p_failureIndicationInformation + ) := { + failureIndicationInformation := p_failureIndicationInformation + } // End of template m_intersystemSONInformationReport_failureIndicationInformation + + template (value) IntersystemSONInformationReport m_intersystemSONInformationReport_choice_Extensions( + in template (value) IntersystemSONInformationReport.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_intersystemSONInformationReport_choice_Extensions + + template (value) IntersystemSONInformationReport.choice_Extensions m_intersystemSONInformationReport_id_EnergySavingIndication( + in template (value) IntersystemCellStateIndication p_intersystemCellStateIndication + ) := { + id := id_EnergySavingIndication, + criticality := ignore, + value_ := { IntersystemCellStateIndication := p_intersystemCellStateIndication } + } // End of template m_intersystemSONInformationReport_id_EnergySavingIndication + + template (value) IntersystemSONInformationReport.choice_Extensions m_intersystemSONInformationReport_id_IntersystemResourceStatusUpdate( + in template (value) IntersystemResourceStatusReport p_intersystemResourceStatusReport + ) := { + id := id_IntersystemResourceStatusUpdate, + criticality := ignore, + value_ := { IntersystemResourceStatusReport := p_intersystemResourceStatusReport } + } // End of template m_intersystemSONInformationReport_id_IntersystemResourceStatusUpdate + + template (omit) NotificationCell_Item m_notificationCell_Item( + in template (value) NGRAN_CGI p_nGRAN_CGI, + in template (value) NotificationCell_Item.notifyFlag p_notifyFlag := activated, + in template (omit) NotificationCell_Item.iE_Extensions p_iE_Extensions := omit + ) := { + nGRAN_CGI := p_nGRAN_CGI, + notifyFlag := p_notifyFlag, + iE_Extensions := p_iE_Extensions + } // End of template m_notificationCell_Item + + template (omit) IntersystemResourceStatusReport m_intersystemResourceStatusReport( + in template (value) ResourceStatusReportingSystem p_reportingSystem, + in template (omit) IntersystemResourceStatusReport.iE_Extensions p_iE_Extensions := omit + ) := { + reportingSystem := p_reportingSystem, + iE_Extensions := p_iE_Extensions + } // End of template m_intersystemResourceStatusReport + + template (value) ResourceStatusReportingSystem m_resourceStatusReportingSystemt_eUTRAN_ReportingStatus( + in template (value) EUTRAN_ReportingStatusIEs p_eUTRAN_ReportingStatus + ) := { + eUTRAN_ReportingStatus := p_eUTRAN_ReportingStatus + } // End of template m_resourceStatusReportingSystem_eUTRAN_ReportingStatus + + template (value) ResourceStatusReportingSystem m_resourceStatusReportingSystemt_nGRAN_ReportingStatus( + in template (value) NGRAN_ReportingStatusIEs p_nGRAN_ReportingStatus + ) := { + nGRAN_ReportingStatus := p_nGRAN_ReportingStatus + } // End of template m_resourceStatusReportingSystem_nGRAN_ReportingStatus + + template (value) ResourceStatusReportingSystem m_resourceStatusReportingSystem_choice_Extensions( + in template (value) ResourceStatusReportingSystem.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_resourceStatusReportingSystem_choice_Extensions + + template (omit) EUTRAN_ReportingStatusIEs m_eUTRAN_ReportingStatusIEs( + in template (value) EUTRAN_CellReportList p_eUTRAN_CellReportList, + in template (omit) EUTRAN_ReportingStatusIEs.iE_Extensions p_iE_Extensions := omit + ) := { + eUTRAN_CellReportList := p_eUTRAN_CellReportList, + iE_Extensions := p_iE_Extensions + } // End of template m_eUTRAN_ReportingStatusIEs + + template (omit) EUTRAN_CellReportItem m_eUTRAN_CellReportItem ( + in template (value) EUTRA_CGI p_eCGI, + in template (value) EUTRAN_CompositeAvailableCapacityGroup p_eUTRAN_CompositeAvailableCapacityGroup, + in template (omit) EUTRAN_NumberOfActiveUEs p_eUTRAN_NumberOfActiveUEs := omit, + in template (omit) NGRAN_NoofRRCConnections p_eUTRAN_NoofRRCConnections := omit, + in template (omit) EUTRAN_RadioResourceStatus p_eUTRAN_RadioResourceStatus := omit, + in template (omit) EUTRAN_CellReportItem.iE_Extensions p_iE_Extensions := omit + ):= { + eCGI := p_eCGI, + eUTRAN_CompositeAvailableCapacityGroup := p_eUTRAN_CompositeAvailableCapacityGroup, + eUTRAN_NumberOfActiveUEs := p_eUTRAN_NumberOfActiveUEs, + eUTRAN_NoofRRCConnections := p_eUTRAN_NoofRRCConnections, + eUTRAN_RadioResourceStatus := p_eUTRAN_RadioResourceStatus, + iE_Extensions := p_iE_Extensions + } // End of template m_eUTRAN_ReportingStatusIEs + + template (omit) EUTRAN_CompositeAvailableCapacityGroup m_EUTRAN_CompositeAvailableCapacityGroup( + in template (value) CompositeAvailableCapacity p_dL_CompositeAvailableCapacity, + in template (value) CompositeAvailableCapacity p_uL_CompositeAvailableCapacity, + in template (omit) EUTRAN_CompositeAvailableCapacityGroup.iE_Extensions p_iE_Extensions := omit + ) := { + dL_CompositeAvailableCapacity := p_dL_CompositeAvailableCapacity, + uL_CompositeAvailableCapacity := p_uL_CompositeAvailableCapacity, + iE_Extensions := p_iE_Extensions + } // End of template m_EUTRAN_CompositeAvailableCapacityGroup + + template (omit) CompositeAvailableCapacity m_compositeAvailableCapacity( + in template (value) CompositeAvailableCapacity.capacityValue p_capacityValue, + in template (omit) CompositeAvailableCapacity.cellCapacityClassValue p_cellCapacityClassValue := omit, + in template (omit) CompositeAvailableCapacity.iE_Extensions p_iE_Extensions := omit + ) := { + cellCapacityClassValue := p_cellCapacityClassValue, + capacityValue := p_capacityValue, + iE_Extensions := p_iE_Extensions + } // End of template m_compositeAvailableCapacity + + template (omit) EUTRAN_RadioResourceStatus m_eUTRAN_RadioResourceStatus( + in template (value) EUTRAN_RadioResourceStatus.dL_GBR_PRB_usage p_dL_GBR_PRB_usage, + in template (value) EUTRAN_RadioResourceStatus.uL_GBR_PRB_usage p_uL_GBR_PRB_usage, + in template (value) EUTRAN_RadioResourceStatus.dL_non_GBR_PRB_usage p_dL_non_GBR_PRB_usage, + in template (value) EUTRAN_RadioResourceStatus.uL_non_GBR_PRB_usage p_uL_non_GBR_PRB_usage, + in template (value) EUTRAN_RadioResourceStatus.dL_Total_PRB_usage p_dL_Total_PRB_usage, + in template (value) EUTRAN_RadioResourceStatus.uL_Total_PRB_usage p_uL_Total_PRB_usage, + in template (omit) EUTRAN_RadioResourceStatus.dL_scheduling_PDCCH_CCE_usage p_dL_scheduling_PDCCH_CCE_usage := omit, + in template (omit) EUTRAN_RadioResourceStatus.uL_scheduling_PDCCH_CCE_usage p_uL_scheduling_PDCCH_CCE_usage := omit, + in template (omit) EUTRAN_RadioResourceStatus.iE_Extensions p_iE_Extensions := omit + ) := { + dL_GBR_PRB_usage := p_dL_GBR_PRB_usage, + uL_GBR_PRB_usage := p_uL_GBR_PRB_usage, + dL_non_GBR_PRB_usage := p_dL_non_GBR_PRB_usage, + uL_non_GBR_PRB_usage := p_uL_non_GBR_PRB_usage, + dL_Total_PRB_usage := p_dL_Total_PRB_usage, + uL_Total_PRB_usage := p_uL_Total_PRB_usage, + dL_scheduling_PDCCH_CCE_usage := p_dL_scheduling_PDCCH_CCE_usage, + uL_scheduling_PDCCH_CCE_usage := p_uL_scheduling_PDCCH_CCE_usage, + iE_Extensions := p_iE_Extensions + } // End of template m_eUTRAN_RadioResourceStatus + + template (omit) NGRAN_ReportingStatusIEs m_nGRAN_ReportingStatusIEs( + in template (value) NGRAN_CellReportList p_nGRAN_CellReportList, + in template (omit) NGRAN_ReportingStatusIEs.iE_Extensions p_iE_Extensions := omit + ) := { + nGRAN_CellReportList := p_nGRAN_CellReportList, + iE_Extensions := p_iE_Extensions + } // End of template m_nGRAN_ReportingStatusIEs + + template (omit) NGRAN_CellReportItem m_nGRAN_CellReportItem( + in template (value) NGRAN_CGI p_nGRAN_CGI, + in template (value) EUTRAN_CompositeAvailableCapacityGroup p_nGRAN_CompositeAvailableCapacityGroup, + in template (omit) NGRAN_NumberOfActiveUEs p_nGRAN_NumberOfActiveUEs := omit, + in template (omit) NGRAN_NoofRRCConnections p_nGRAN_NoofRRCConnections := omit, + in template (omit) NGRAN_RadioResourceStatus p_nGRAN_RadioResourceStatus := omit, + in template (omit) NGRAN_CellReportItem.iE_Extensions p_iE_Extensions := omit + ) := { + nGRAN_CGI := p_nGRAN_CGI, + nGRAN_CompositeAvailableCapacityGroup := p_nGRAN_CompositeAvailableCapacityGroup, + nGRAN_NumberOfActiveUEs := p_nGRAN_NumberOfActiveUEs, + nGRAN_NoofRRCConnections := p_nGRAN_NoofRRCConnections, + nGRAN_RadioResourceStatus := p_nGRAN_RadioResourceStatus, + iE_Extensions := p_iE_Extensions + } // End of template m_nGRAN_CellReportItem + + template (omit) NGRAN_RadioResourceStatus m_nGRAN_RadioResourceStatus( + in template (value) NGRAN_RadioResourceStatus.dL_GBR_PRB_usage_for_MIMO p_dL_GBR_PRB_usage_for_MIMO, + in template (value) NGRAN_RadioResourceStatus.uL_GBR_PRB_usage_for_MIMO p_uL_GBR_PRB_usage_for_MIMO, + in template (value) NGRAN_RadioResourceStatus.dL_non_GBR_PRB_usage_for_MIMO p_dL_non_GBR_PRB_usage_for_MIMO, + in template (value) NGRAN_RadioResourceStatus.uL_non_GBR_PRB_usage_for_MIMO p_uL_non_GBR_PRB_usage_for_MIMO, + in template (value) NGRAN_RadioResourceStatus.dL_Total_PRB_usage_for_MIMO p_dL_Total_PRB_usage_for_MIMO, + in template (value) NGRAN_RadioResourceStatus.uL_Total_PRB_usage_for_MIMO p_uL_Total_PRB_usage_for_MIMO, + in template (omit) NGRAN_RadioResourceStatus.iE_Extensions p_iE_Extensions := omit + ) := { + dL_GBR_PRB_usage_for_MIMO := p_dL_GBR_PRB_usage_for_MIMO, + uL_GBR_PRB_usage_for_MIMO := p_uL_GBR_PRB_usage_for_MIMO, + dL_non_GBR_PRB_usage_for_MIMO := p_dL_non_GBR_PRB_usage_for_MIMO, + uL_non_GBR_PRB_usage_for_MIMO := p_uL_non_GBR_PRB_usage_for_MIMO, + dL_Total_PRB_usage_for_MIMO := p_dL_Total_PRB_usage_for_MIMO, + uL_Total_PRB_usage_for_MIMO := p_uL_Total_PRB_usage_for_MIMO, + iE_Extensions := p_iE_Extensions + } // End of template m_nGRAN_RadioResourceStatus + + template (omit) InterSystemHOReport m_interSystemHOReport( + in template (value) InterSystemHandoverReportType p_handoverReportType, + in template (omit) InterSystemHOReport.iE_Extensions p_iE_Extensions := omit + ) := { + handoverReportType := p_handoverReportType, + iE_Extensions := p_iE_Extensions + } // End of template m_interSystemHOReport + + template (value) InterSystemHandoverReportType m_interSystemHandoverReportType_tooearlyIntersystemHO( + in template (value) TooearlyIntersystemHO p_tooearlyIntersystemHO + ) := { + tooearlyIntersystemHO := p_tooearlyIntersystemHO + } // End of template m_interSystemHandoverReportType_tooearlyIntersystemHO + + template (value) InterSystemHandoverReportType m_interSystemHandoverReportType_intersystemUnnecessaryHO( + in template (value) IntersystemUnnecessaryHO p_intersystemUnnecessaryHO + ) := { + intersystemUnnecessaryHO := p_intersystemUnnecessaryHO + } // End of template m_interSystemHandoverReportType_intersystemUnnecessaryHO + + template (value) InterSystemHandoverReportType m_interSystemHandoverReportType_choice_Extensions( + in template (value) InterSystemHandoverReportType.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_interSystemHandoverReportType_choice_Extensions + + template (omit) IntersystemUnnecessaryHO m_intersystemUnnecessaryHO( + in template (value) NGRAN_CGI p_sourcecellID, + in template (value) EUTRA_CGI p_targetcellID, + in template (value) IntersystemUnnecessaryHO.earlyIRATHO p_earlyIRATHO := true_, + in template (value) CandidateCellList p_candidateCellList, + in template (omit) IntersystemUnnecessaryHO.iE_Extensions p_iE_Extensions := omit + ) := { + sourcecellID := p_sourcecellID, + targetcellID := p_targetcellID, + earlyIRATHO := p_earlyIRATHO, + candidateCellList := p_candidateCellList, + iE_Extensions := p_iE_Extensions + } // End of template m_intersystemUnnecessaryHO + + template (omit) LAI m_lai( + in template (value) PLMNIdentity p_pLMNidentity, + in template (value) LAC p_lAC, + in template (omit) LAI.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNidentity := p_pLMNidentity, + lAC := p_lAC, + iE_Extensions := p_iE_Extensions + } // End of template m_lai + + template (value) LastVisitedCellInformation m_interSystemHandoverReportType_nGRANCell( + in template (value) LastVisitedNGRANCellInformation p_nGRANCell + ) := { + nGRANCell := p_nGRANCell + } // End of template m_interSystemHandoverReportType_nGRANCell + + template (value) LastVisitedCellInformation m_interSystemHandoverReportType_eUTRANCell( + in template (value) LastVisitedEUTRANCellInformation p_eUTRANCell + ) := { + eUTRANCell := p_eUTRANCell + } // End of template m_interSystemHandoverReportType_eUTRANCell + + template (value) LastVisitedCellInformation m_interSystemHandoverReportType_uTRANCell( + in template (value) LastVisitedUTRANCellInformation p_uTRANCell + ) := { + uTRANCell := p_uTRANCell + } // End of template m_interSystemHandoverReportType_uTRANCell + + template (value) LastVisitedCellInformation m_interSystemHandoverReportType_gERANCell( + in template (value) LastVisitedGERANCellInformation p_gERANCell + ) := { + gERANCell := p_gERANCell + } // End of template m_interSystemHandoverReportType_gERANCell + + template (value) LastVisitedCellInformation m_lastVisitedCellInformation_choice_Extensions( + in template (value) LastVisitedCellInformation.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_lastVisitedCellInformation_choice_Extensions + + template (omit) LastVisitedCellItem m_lastVisitedCellItem( + in template (value) LastVisitedCellInformation p_lastVisitedCellInformation, + in template (omit) LastVisitedCellItem.iE_Extensions p_iE_Extensions := omit + ) := { + lastVisitedCellInformation := p_lastVisitedCellInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_lastVisitedCellItem + + template (omit) LastVisitedNGRANCellInformation m_lastVisitedNGRANCellInformation( + in template (value) NGRAN_CGI p_globalCellID, + in template (value) CellType p_cellType, + in template (value) TimeUEStayedInCell p_timeUEStayedInCell, + in template (omit) TimeUEStayedInCellEnhancedGranularity p_timeUEStayedInCellEnhancedGranularity := omit, + in template (omit) Cause p_hOCauseValue := omit, + in template (omit) LastVisitedNGRANCellInformation.iE_Extensions p_iE_Extensions := omit + ) := { + globalCellID := p_globalCellID, + cellType := p_cellType, + timeUEStayedInCell := p_timeUEStayedInCell, + timeUEStayedInCellEnhancedGranularity := p_timeUEStayedInCellEnhancedGranularity, + hOCauseValue := p_hOCauseValue, + iE_Extensions := p_iE_Extensions + } // End of template m_lastVisitedNGRANCellInformation + + template (value) LastVisitedNGRANCellInformation.iE_Extensions m_lastVisitedNGRANCellInformation_id_LastVisitedPSCellList( + in template (value) LastVisitedPSCellList p_lastVisitedPSCellList + ) := { + { + id := id_LastVisitedPSCellList, + criticality := ignore, + extensionValue := { LastVisitedPSCellList := p_lastVisitedPSCellList } + } + } // End of template m_lastVisitedNGRANCellInformation_id_LastVisitedPSCellList + + template (omit) LastVisitedPSCellInformation m_LastVisitedPSCellInformation( + in template (value) NGRAN_CGI p_pSCellID, + in template (value) LastVisitedPSCellInformation.timeStay p_timeStay, + in template (omit) LastVisitedPSCellInformation.iE_Extensions p_iE_Extensions := omit + ) := { + pSCellID := p_pSCellID, + timeStay := p_timeStay, + iE_Extensions := p_iE_Extensions + } // End of template m_LastVisitedPSCellInformation + + template (value) LineType m_lineType(in LineType p_value := pon) := p_value; + + template (value) LocationReportingAdditionalInfo m_locationReportingAdditionalInfo(in LocationReportingAdditionalInfo p_value := includePSCell) := p_value; + + template (omit) LocationReportingRequestType m_locationReportingRequestType( + in template (value) EventType p_eventType, + in template (value) ReportArea p_reportArea, + in template (omit) AreaOfInterestList p_areaOfInterestList := omit, + in template (omit) LocationReportingReferenceID p_locationReportingReferenceIDToBeCancelled := omit, + in template (omit) LocationReportingRequestType.iE_Extensions p_iE_Extensions := omit + ) := { + eventType := p_eventType, + reportArea := p_reportArea, + areaOfInterestList := p_areaOfInterestList, + locationReportingReferenceIDToBeCancelled := p_locationReportingReferenceIDToBeCancelled, + // The above IE shall be present if the event type is set to “stop reporting UE presence in the area of interest” + iE_Extensions := p_iE_Extensions + } // End of template m_locationReportingRequestType + + template (value) LocationReportingRequestType.iE_Extensions m_locationReportingRequestType_id_LocationReportingAdditionalInfo( + in template (value) LocationReportingAdditionalInfo p_locationReportingAdditionalInfo + ) := { + { + id := id_LocationReportingAdditionalInfo, + criticality := ignore, + extensionValue := { LocationReportingAdditionalInfo := p_locationReportingAdditionalInfo } + } + } // End of template m_locationReportingRequestType_id_LocationReportingAdditionalInfo + + template (omit) LoggedMDTNr m_loggedMDTNr( + in template (value) LoggingInterval p_loggingInterval, + in template (value) LoggingDuration p_loggingDuration, + in template (value) LoggedMDTTrigger p_loggedMDTTrigger, + in template (omit) BluetoothMeasurementConfiguration p_bluetoothMeasurementConfiguration := omit, + in template (omit) WLANMeasurementConfiguration p_wLANMeasurementConfiguration := omit, + in template (omit) SensorMeasurementConfiguration p_sensorMeasurementConfiguration := omit, + in template (omit) AreaScopeOfNeighCellsList p_areaScopeOfNeighCellsList := omit, + in template (omit) LoggedMDTNr.iE_Extensions p_iE_Extensions := omit + ) := { + loggingInterval := p_loggingInterval, + loggingDuration := p_loggingDuration, + loggedMDTTrigger := p_loggedMDTTrigger, + bluetoothMeasurementConfiguration := p_bluetoothMeasurementConfiguration, + wLANMeasurementConfiguration := p_wLANMeasurementConfiguration, + sensorMeasurementConfiguration := p_sensorMeasurementConfiguration, + areaScopeOfNeighCellsList := p_areaScopeOfNeighCellsList, + iE_Extensions := p_iE_Extensions + } // End of template m_loggedMDTNr + + template (value) LoggingInterval m_loggingInterval(in LoggingInterval p_value := ms320) := p_value; + + template (value) LoggingDuration m_loggingDuration(in LoggingDuration p_value := m10) := p_value; + + template (value) Links_to_log m_Links_to_log(in Links_to_log p_value := uplink) := p_value; + + template (value) LoggedMDTTrigger m_loggedMDTTrigger_gERANCell( + in template (value) EventTrigger p_eventTrigger + ) := { + eventTrigger := p_eventTrigger + } // End of template m_loggedMDTTrigger_gERANCell + + template (value) LoggedMDTTrigger m_loggedMDTTrigger_choice_Extensions( + in template (value) LoggedMDTTrigger.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_loggedMDTTrigger_choice_Extensions + + template (value) LTEM_Indication m_lTEM_Indication(in LTEM_Indication p_value := lte_m) := p_value; + + template (omit) LTEV2XServicesAuthorized m_lTEV2XServicesAuthorized( + in template (omit) VehicleUE p_vehicleUE := omit, + in template (omit) PedestrianUE p_pedestrianUE:= omit, + in template (omit) LTEV2XServicesAuthorized.iE_Extensions p_iE_Extensions := omit + ) := { + vehicleUE := p_vehicleUE, + pedestrianUE := p_pedestrianUE, + iE_Extensions := p_iE_Extensions + } // End of template m_lTEV2XServicesAuthorized + + template (omit) LTEUESidelinkAggregateMaximumBitrate m_lTEUESidelinkAggregateMaximumBitrate( + in template (value) BitRate p_uESidelinkAggregateMaximumBitRate := PX_UE_SIDELINK_AGGREGATE_MAXIMUM_BIT_RATE, + in template (omit) LTEUESidelinkAggregateMaximumBitrate.iE_Extensions p_iE_Extensions := omit + ) := { + uESidelinkAggregateMaximumBitRate := p_uESidelinkAggregateMaximumBitRate, + iE_Extensions := p_iE_Extensions + } // End of template m_lTEUESidelinkAggregateMaximumBitrate + + template (value) MaximumIntegrityProtectedDataRate m_maximumIntegrityProtectedDataRate(in MaximumIntegrityProtectedDataRate p_value := bitrate64kbs) := p_value; + + template (omit) MBS_DataForwardingResponseMRBItem m_mBS_DataForwardingResponseMRBItem( + in template (value) MRB_ID p_mRB_ID, + in template (value) UPTransportLayerInformation p_dL_Forwarding_UPTNLInformation, + in template (omit) MRB_ProgressInformation p_mRB_ProgressInformation := omit, + in template (omit) MBS_DataForwardingResponseMRBItem.iE_Extensions p_iE_Extensions := omit + ) := { + mRB_ID := p_mRB_ID, + dL_Forwarding_UPTNLInformation := p_dL_Forwarding_UPTNLInformation, + mRB_ProgressInformation := p_mRB_ProgressInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_DataForwardingResponseMRBItem + + template (omit) MBS_MappingandDataForwardingRequestItem m_mBS_MappingandDataForwardingRequestItem( + in template (value) MRB_ID p_mRB_ID, + in template (value) MBS_QoSFlowList p_mBS_QoSFlowList, + in template (omit) MRB_ProgressInformation p_mRB_ProgressInformation := omit, + in template (omit) MBS_MappingandDataForwardingRequestItem.iE_Extensions p_iE_Extensions := omit + ) := { + mRB_ID := p_mRB_ID, + mBS_QoSFlowList := p_mBS_QoSFlowList, + mRB_ProgressInformation := p_mRB_ProgressInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_MappingandDataForwardingRequestItem + + template (value) MRB_ProgressInformation m_mRB_ProgressInformation_pDCP_SN_Length12( + in template (value) MRB_ProgressInformation.pDCP_SN_Length12 p_pDCP_SN_Length12 + ) := { + pDCP_SN_Length12 := p_pDCP_SN_Length12 + } // End of template m_mRB_ProgressInformation_pDCP_SN_Length12 + + template (value) MRB_ProgressInformation m_mRB_ProgressInformation_pDCP_SN_Length18( + in template (value) MRB_ProgressInformation.pDCP_SN_Length18 p_pDCP_SN_Length18 + ) := { + pDCP_SN_Length18 := p_pDCP_SN_Length18 + } // End of template m_mRB_ProgressInformation_pDCP_SN_Length18 + + template (value) MRB_ProgressInformation m_mRB_ProgressInformation_choice_Extensions( + in template (value) MRB_ProgressInformation.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_mRB_ProgressInformation_choice_Extensions + + template (omit) MBS_QoSFlowsToBeSetupItem m_mBS_QoSFlowsToBeSetupItem( + in template (value)QosFlowIdentifier p_mBSqosFlowIdentifier, + in template (value)QosFlowLevelQosParameters p_mBSqosFlowLevelQosParameters, + in template (omit) MBS_QoSFlowsToBeSetupItem.iE_Extensions p_iE_Extensions := omit + ) := { + mBSqosFlowIdentifier := p_mBSqosFlowIdentifier, + mBSqosFlowLevelQosParameters := p_mBSqosFlowLevelQosParameters, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_QoSFlowsToBeSetupItem + + template (value) MBS_ServiceArea m_mBS_ServiceArea_locationindependent( + in template (value) MBS_ServiceAreaInformation p_locationindependent + ) := { + locationindependent := p_locationindependent + } // End of template m_mBS_ServiceArea_locationindependent + + template (value) MBS_ServiceArea m_mBS_ServiceArea_locationdependent( + in template (value) MBS_ServiceAreaInformationList p_locationdependent + ) := { + locationdependent := p_locationdependent + } // End of template m_mBS_ServiceArea_locationdependent + + template (value) MBS_ServiceArea m_mBS_ServiceArea_choice_Extensions( + in template (value) MBS_ServiceArea.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_mBS_ServiceArea_choice_Extensions + + template (omit) MBS_ServiceAreaInformationItem m_mBS_ServiceAreaInformationItem( + in template (value) MBS_AreaSessionID p_mBS_AreaSessionID, + in template (value) MBS_ServiceAreaInformation p_mBS_ServiceAreaInformation, + in template (omit) MBS_ServiceAreaInformationItem.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_AreaSessionID := p_mBS_AreaSessionID, + mBS_ServiceAreaInformation := p_mBS_ServiceAreaInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_ServiceAreaInformationItem + + template (omit) MBS_ServiceAreaInformation m_mBS_ServiceAreaInformation( + in template (omit) MBS_ServiceAreaCellList p_mBS_ServiceAreaCellList := omit, + in template (omit) MBS_ServiceAreaTAIList p_mBS_ServiceAreaTAIList := omit, + in template (omit) MBS_ServiceAreaInformation.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_ServiceAreaCellList := p_mBS_ServiceAreaCellList, + mBS_ServiceAreaTAIList := p_mBS_ServiceAreaTAIList, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_ServiceAreaInformation + + template (omit) MBS_SessionID m_mBS_SessionID( + in template (value) TMGI p_tMGI, + in template (omit) NID p_nID := omit, + in template (omit) MBS_SessionID.iE_Extensions p_iE_Extensions := omit + ) := { + tMGI := p_tMGI, + nID := p_nID, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_SessionID + + template (omit) MBSSessionFailedtoSetupItem m_mBSSessionFailedtoSetupItem( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (value) Cause p_cause, + in template (omit) MBS_AreaSessionID p_mBS_AreaSessionID := omit, + in template (omit) MBSSessionFailedtoSetupItem.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_mBSSessionFailedtoSetupItem + + template (omit) MBS_ActiveSessionInformation_SourcetoTargetItem m_mBS_ActiveSessionInformation_SourcetoTargetItem( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (value) MBS_QoSFlowsToBeSetupList p_mBS_QoSFlowsToBeSetupList, + in template (omit) MBS_AreaSessionID p_mBS_AreaSessionID := omit, + in template (omit) MBS_ServiceArea p_mBS_ServiceArea := omit, + in template (omit) MBS_MappingandDataForwardingRequestList p_mBS_MappingandDataForwardingRequestList := omit, + in template (omit) MBS_ActiveSessionInformation_SourcetoTargetItem.iE_Extensions p_iE_Extensions := omit + ):= { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + mBS_ServiceArea := p_mBS_ServiceArea, + mBS_QoSFlowsToBeSetupList := p_mBS_QoSFlowsToBeSetupList, + mBS_MappingandDataForwardingRequestList := p_mBS_MappingandDataForwardingRequestList, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_ActiveSessionInformation_SourcetoTargetItem + + template (omit) MBS_ActiveSessionInformation_TargettoSourceItem m_mBS_ActiveSessionInformation_TargettoSourceItem( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (omit) MBS_DataForwardingResponseMRBList p_mBS_DataForwardingResponseMRBList := omit, + in template (omit) MBS_ActiveSessionInformation_TargettoSourceItem.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_DataForwardingResponseMRBList := p_mBS_DataForwardingResponseMRBList, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_ActiveSessionInformation_TargettoSourceItem + + template (omit) MBSSessionSetupOrModFailureTransfer m_mBSSessionSetupOrModFailureTransfer( + in template (value) Cause p_cause, + in template (omit) CriticalityDiagnostics p_criticalityDiagnostics := omit, + in template (omit) MBSSessionSetupOrModFailureTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + cause := p_cause, + criticalityDiagnostics := p_criticalityDiagnostics, + iE_Extensions := p_iE_Extensions + } // End of template m_mBSSessionSetupOrModFailureTransfer + + template (omit) MBSSessionSetupResponseItem m_mBSSessionSetupResponseItem( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (omit) MBS_AreaSessionID p_mBS_AreaSessionID := omit, + in template (omit) MBSSessionSetupResponseItem.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + iE_Extensions := p_iE_Extensions + } // End of template m_mBSSessionSetupResponseItem + + template (value) MBSSessionSetupOrModRequestTransfer m_mBSSessionSetupOrModRequestTransfer( + in template (value) MBSSessionSetupOrModRequestTransfer.protocolIEs p_protocolIEs + ) := { + protocolIEs := p_protocolIEs + } // End of template m_mBSSessionSetupOrModRequestTransfer + + template (value) MBSSessionSetupOrModRequestTransfer m_mBSSessionSetupOrModRequestTransfer_options( + in template (value) MBS_SessionTNLInfo5GC p_mBS_SessionTNLInfo5GC, + in template (value) MBS_QoSFlowsToBeSetupList p_mBS_QoSFlowsToBeSetupList, + in template (value) MBS_SessionFSAIDList p_mBS_SessionFSAIDList + ) := { + protocolIEs := { + { + id := id_MBS_SessionTNLInfo5GC, + criticality := reject, + value_ := { MBS_SessionTNLInfo5GC := p_mBS_SessionTNLInfo5GC } + }, + { + id := id_MBS_QoSFlowsToBeSetupModList, + criticality := reject, + value_ := { MBS_QoSFlowsToBeSetupList := p_mBS_QoSFlowsToBeSetupList } + }, + { + id := id_MBS_SessionFSAIDList, + criticality := ignore, + value_ := { MBS_SessionFSAIDList := p_mBS_SessionFSAIDList } + } + } + } // End of template m_mBSSessionSetupOrModRequestTransfer_options + + template (omit) MBSSessionReleaseResponseTransfer m_mBSSessionReleaseResponseTransfer( + in template (omit) MBS_SessionTNLInfoNGRAN p_mBS_SessionTNLInfoNGRAN := omit, + in template (omit) MBSSessionReleaseResponseTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionTNLInfoNGRAN := p_mBS_SessionTNLInfoNGRAN, + iE_Extensions := p_iE_Extensions + } // End of template m_mBSSessionReleaseResponseTransfer + + template (omit) MBSSessionSetupOrModResponseTransfer m_mBSSessionSetupOrModResponseTransfer( + in template (omit) MBS_SessionTNLInfoNGRAN p_mBS_SessionTNLInfoNGRAN := omit, + in template (omit) MBSSessionSetupOrModResponseTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionTNLInfoNGRAN := p_mBS_SessionTNLInfoNGRAN, + iE_Extensions := p_iE_Extensions + } // End of template m_mBSSessionSetupOrModResponseTransfer + + template (value) MBS_SupportIndicator m_mBS_SupportIndicator(in MBS_SupportIndicator p_value := true_) := p_value; + + template (value) MBS_SessionTNLInfo5GC m_mBS_SessionTNLInfo5GC_locationindependent( + in template (value) SharedNGU_MulticastTNLInformation p_locationindependent + ) := { + locationindependent := p_locationindependent + } // End of template m_mBS_SessionTNLInfo5GC_locationindependent + + template (value) MBS_SessionTNLInfo5GC m_mBS_SessionTNLInfo5GC_locationdependent( + in template (value) MBS_SessionTNLInfo5GCList p_locationdependent + ) := { + locationdependent := p_locationdependent + } // End of template m_mBS_SessionTNLInfo5GC_locationdependent + + template (value) MBS_SessionTNLInfo5GC m_mBS_SessionTNLInfo5GC_choice_Extensions( + in template (value) MBS_SessionTNLInfo5GC.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_mBS_SessionTNLInfo5GC_choice_Extensions + + template (omit) MBS_SessionTNLInfo5GCItem m_mBS_SessionTNLInfo5GCItem( + in template (value) MBS_AreaSessionID p_mBS_AreaSessionID, + in template (value) SharedNGU_MulticastTNLInformation p_sharedNGU_MulticastTNLInformation, + in template (omit) MBS_SessionTNLInfo5GCItem.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_AreaSessionID := p_mBS_AreaSessionID, + sharedNGU_MulticastTNLInformation := p_sharedNGU_MulticastTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_SessionTNLInfo5GCItem + + template (value) MBS_SessionTNLInfoNGRAN m_mBS_SessionTNLInfoNGRAN_locationindependent( + in template (value) UPTransportLayerInformation p_locationindependent + ) := { + locationindependent := p_locationindependent + } // End of template m_mBS_SessionTNLInfoNGRAN_locationindependent + + template (value) MBS_SessionTNLInfoNGRAN m_mBS_SessionTNLInfoNGRAN_locationdependent( + in template (value) MBS_SessionTNLInfoNGRANList p_locationdependent + ) := { + locationdependent := p_locationdependent + } // End of template m_mBS_SessionTNLInfoNGRAN_locationdependent + + template (value) MBS_SessionTNLInfoNGRAN m_mBS_SessionTNLInfoNGRAN_choice_Extensions( + in template (value) MBS_SessionTNLInfoNGRAN.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_mBS_SessionTNLInfoNGRAN_choice_Extensions + + template (omit) MBS_SessionTNLInfoNGRANItem m_mBS_SessionTNLInfoNGRANItem( + in template (value) MBS_AreaSessionID p_mBS_AreaSessionID, + in template (omit) UPTransportLayerInformation p_sharedNGU_UnicastTNLInformation := omit, + in template (omit) MBS_SessionTNLInfoNGRANItem.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_AreaSessionID := p_mBS_AreaSessionID, + sharedNGU_UnicastTNLInformation := p_sharedNGU_UnicastTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_SessionTNLInfoNGRANItem + + template (omit) MBS_DistributionReleaseRequestTransfer m_mBS_DistributionReleaseRequestTransfer( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (value) Cause p_cause, + in template (omit) MBS_AreaSessionID p_mBS_AreaSessionID := omit, + in template (omit) UPTransportLayerInformation p_sharedNGU_UnicastTNLInformation := omit, + in template (omit) MBS_DistributionReleaseRequestTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + sharedNGU_UnicastTNLInformation := p_sharedNGU_UnicastTNLInformation, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_DistributionReleaseRequestTransfer + + template (omit) MBS_DistributionSetupRequestTransfer m_mBS_DistributionSetupRequestTransfer( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (omit) MBS_AreaSessionID p_mBS_AreaSessionID := omit, + in template (omit) UPTransportLayerInformation p_sharedNGU_UnicastTNLInformation := omit, + in template (omit) MBS_DistributionSetupRequestTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + sharedNGU_UnicastTNLInformation := p_sharedNGU_UnicastTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_DistributionSetupRequestTransfer + + template (omit) MBS_DistributionSetupResponseTransfer m_mBS_DistributionSetupResponseTransfer( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (value) MBS_QoSFlowsToBeSetupList p_mBS_QoSFlowsToBeSetupList, + in template (value) MBSSessionStatus p_mBSSessionStatus, + in template (omit) MBS_AreaSessionID p_mBS_AreaSessionID := omit, + in template (omit) MBS_SessionTNLInfo5GCItem p_sharedNGU_MulticastTNLInformation := omit, + in template (omit) MBS_ServiceArea p_mBS_ServiceArea := omit, + in template (omit) MBS_DistributionSetupResponseTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + sharedNGU_MulticastTNLInformation := p_sharedNGU_MulticastTNLInformation, + mBS_QoSFlowsToBeSetupList := p_mBS_QoSFlowsToBeSetupList, + mBSSessionStatus := p_mBSSessionStatus, + mBS_ServiceArea := p_mBS_ServiceArea, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_DistributionSetupResponseTransfer + + template (omit) MBS_DistributionSetupUnsuccessfulTransfer m_mBS_DistributionSetupUnsuccessfulTransfer( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (value) Cause p_cause, + in template (omit) MBS_AreaSessionID p_mBS_AreaSessionID := omit, + in template (omit) CriticalityDiagnostics p_criticalityDiagnostics := omit, + in template (omit) MBS_DistributionSetupUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + cause := p_cause, + criticalityDiagnostics := p_criticalityDiagnostics, + iE_Extensions := p_iE_Extensions + } // End of template m_mBS_DistributionSetupUnsuccessfulTransfer + + template (omit) MBSSessionSetupRequestItem m_mBSSessionSetupRequestItem( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (omit) MBS_AreaSessionID p_mBS_AreaSessionID := omit, + in template (omit) AssociatedMBSQosFlowSetupRequestList p_associatedMBSQosFlowSetupRequestList := omit, + in template (omit) MBSSessionSetupRequestItem.iE_Extensions p_iE_Extensions := omit + ):= { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + associatedMBSQosFlowSetupRequestList := p_associatedMBSQosFlowSetupRequestList, + iE_Extensions := p_iE_Extensions + } // End of template m_mBSSessionSetupRequestItem + + template (omit) MBSSessionSetuporModifyRequestItem m_mBSSessionSetuporModifyRequestItem( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (omit) MBS_AreaSessionID p_mBS_AreaSessionID := omit, + in template (omit) AssociatedMBSQosFlowSetuporModifyRequestList p_associatedMBSQosFlowSetuporModifyRequestList := omit, + in template (omit) QosFlowListWithCause p_mBS_QosFlowToReleaseList := omit, + in template (omit) MBSSessionSetuporModifyRequestItem.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + associatedMBSQosFlowSetuporModifyRequestList := p_associatedMBSQosFlowSetuporModifyRequestList, + mBS_QosFlowToReleaseList := p_mBS_QosFlowToReleaseList, + iE_Extensions := p_iE_Extensions + } // End of template m_mBSSessionSetuporModifyRequestItem + + template (omit) MBSSessionToReleaseItem m_mBSSessionToReleaseItem( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (value) Cause p_cause, + in template (omit) MBSSessionToReleaseItem.iE_Extensions p_iE_Extensions := omit + ):= { + mBS_SessionID := p_mBS_SessionID, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_mBSSessionToReleaseItem + + template (value) MBSSessionStatus m_mBSSessionStatus(in MBSSessionStatus p_value := activated) := p_value; + + template (value) MicoAllPLMN m_micoAllPLMN(in MicoAllPLMN p_value := true_) := p_value; + + template (value) MICOModeIndication m_mICOModeIndication(in MICOModeIndication p_value := true_) := p_value; + + template (omit) MobilityRestrictionList m_mobilityRestrictionList( + in template (value) PLMNIdentity p_servingPLMN, + in template (omit) EquivalentPLMNs p_equivalentPLMNs := omit, + in template (omit) RATRestrictions p_rATRestrictions := omit, + in template (omit) ForbiddenAreaInformation p_forbiddenAreaInformation := omit, + in template (omit) ServiceAreaInformation p_serviceAreaInformation := omit, + in template (omit) MobilityRestrictionList.iE_Extensions p_iE_Extensions := omit + ) := { + servingPLMN := p_servingPLMN, + equivalentPLMNs := p_equivalentPLMNs, + rATRestrictions := p_rATRestrictions, + forbiddenAreaInformation := p_forbiddenAreaInformation, + serviceAreaInformation := p_serviceAreaInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_mobilityRestrictionList + + template (value) MobilityRestrictionList.iE_Extensions m_mobilityRestrictionList_id_LastEUTRAN_PLMNIdentity( + in template (value) PLMNIdentity p_pLMNIdentity + ) := { + { + id := id_LastEUTRAN_PLMNIdentity, + criticality := ignore, + extensionValue := { PLMNIdentity := p_pLMNIdentity } + } + } // End of template m_mobilityRestrictionList_id_LastEUTRAN_PLMNIdentity + + template (value) MobilityRestrictionList.iE_Extensions m_mobilityRestrictionList_id_CNTypeRestrictionsForServing( + in template (value) CNTypeRestrictionsForServing p_cNTypeRestrictionsForServing + ) := { + { + id := id_CNTypeRestrictionsForServing, + criticality := ignore, + extensionValue := { CNTypeRestrictionsForServing := p_cNTypeRestrictionsForServing } + } + } // End of template m_mobilityRestrictionList_id_CNTypeRestrictionsForServing + + template (value) MobilityRestrictionList.iE_Extensions m_mobilityRestrictionList_id_CNTypeRestrictionsForEquivalent( + in template (value) CNTypeRestrictionsForEquivalent p_cNTypeRestrictionsForEquivalent + ) := { + { + id := id_CNTypeRestrictionsForEquivalent, + criticality := ignore, + extensionValue := { CNTypeRestrictionsForEquivalent := p_cNTypeRestrictionsForEquivalent } + } + } // End of template m_mobilityRestrictionList_id_CNTypeRestrictionsForEquivalent + + template (value) MobilityRestrictionList.iE_Extensions m_mobilityRestrictionList_id_NPN_MobilityInformation( + in template (value) NPN_MobilityInformation p_nPN_MobilityInformation + ) := { + { + id := id_NPN_MobilityInformation, + criticality := reject, + extensionValue := { NPN_MobilityInformation := p_nPN_MobilityInformation } + } + } // End of template m_mobilityRestrictionList_id_NPN_MobilityInformation + + template (value) MDT_AlignmentInfo m_mDT_AlignmentInfo_s_basedMDT( + in template (value) NGRANTraceID p_s_basedMDT + ) := { + s_basedMDT := p_s_basedMDT + } // End of template m_mDT_AlignmentInfo_s_basedMDT + + template (value) MDT_AlignmentInfo m_mDT_AlignmentInfo_choice_Extensions( + in template (value) MDT_AlignmentInfo.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_mDT_AlignmentInfo_choice_Extensions + + template (omit) MDT_Configuration m_mDT_Configuration( + in template (omit) MDT_Configuration_NR p_mdt_Config_NR := omit, + in template (omit) MDT_Configuration_EUTRA p_mdt_Config_EUTRA := omit, + in template (omit) MDT_Configuration.iE_Extensions p_iE_Extensions := omit + ) := { + mdt_Config_NR := p_mdt_Config_NR, + mdt_Config_EUTRA := p_mdt_Config_EUTRA, + iE_Extensions := p_iE_Extensions + } // End of template m_mDT_Configuration + + template (omit) MDT_Configuration_NR m_mDT_Configuration_NR( + in template (value) MDT_Activation p_mdt_Activation, + in template (value) AreaScopeOfMDT_NR p_areaScopeOfMDT, + in template (value) MDTModeNr p_mDTModeNr, + in template (omit) MDTPLMNList p_signallingBasedMDTPLMNList := omit, + in template (omit) MDT_Configuration_NR.iE_Extensions p_iE_Extensions := omit + ) := { + mdt_Activation := p_mdt_Activation, + areaScopeOfMDT := p_areaScopeOfMDT, + mDTModeNr := p_mDTModeNr, + signallingBasedMDTPLMNList := p_signallingBasedMDTPLMNList, + iE_Extensions := p_iE_Extensions + } // End of template m_mDT_Configuration_NR + + template (omit) MDT_Configuration_EUTRA m_mDT_Configuration_EUTRA( + in template (value) MDT_Activation p_mdt_Activation, + in template (value) AreaScopeOfMDT_EUTRA p_areaScopeOfMDT, + in template (value) MDTModeEutra p_mDTMode, + in template (omit) MDTPLMNList p_signallingBasedMDTPLMNList := omit, + in template (omit) MDT_Configuration_EUTRA.iE_Extensions p_iE_Extensions := omit + ) := { + mdt_Activation := p_mdt_Activation, + areaScopeOfMDT := p_areaScopeOfMDT, + mDTMode := p_mDTMode, + signallingBasedMDTPLMNList := p_signallingBasedMDTPLMNList, + iE_Extensions := p_iE_Extensions + } // End of template m_mDT_Configuration_EUTRA + + template (value) MDT_Activation m_mDT_Activation(in MDT_Activation p_value := immediate_MDT_only) := p_value; + + template (value) MDTModeNr m_mDTModeNro_immediateMDTNr( + in template (value) ImmediateMDTNr p_immediateMDTNr + ) := { + immediateMDTNr := p_immediateMDTNr + } // End of template m_mDTModeNr_immediateMDTNr + + template (value) MDTModeNr m_mDTModeNro_loggedMDTNr( + in template (value) LoggedMDTNr p_loggedMDTNr + ) := { + loggedMDTNr := p_loggedMDTNr + } // End of template m_mDTModeNr_loggedMDTNr + + template (value) MDTModeNr m_mDTModeNr_choice_Extensions( + in template (value) MDTModeNr.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_mDTModeNr_choice_Extensions + + template (omit) MulticastSessionActivationRequestTransfer m_multicastSessionActivationRequestTransfer( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (omit) MulticastSessionActivationRequestTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionID := p_mBS_SessionID, + iE_Extensions := p_iE_Extensions + } // End of template m_multicastSessionActivationRequestTransfer + + template (omit) MulticastSessionDeactivationRequestTransfer m_multicastSessionDeactivationRequestTransfer( + in template (value) MBS_SessionID p_mBS_SessionID, + in template (omit) MulticastSessionDeactivationRequestTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_SessionID := p_mBS_SessionID, + iE_Extensions := p_iE_Extensions + } // End of template m_multicastSessionDeactivationRequestTransfer + + template (value) MulticastSessionUpdateRequestTransfer m_multicastSessionUpdateRequestTransfer( + in template (value) MulticastSessionUpdateRequestTransfer.protocolIEs p_protocolIEs + ) := { + protocolIEs := p_protocolIEs + } // End of template m_multicastSessionUpdateRequestTransfer + + template (value) MulticastSessionUpdateRequestTransfer.protocolIEs m_multicastSessionUpdateRequestTransfer_id_MBS_SessionID( + in template (value) MBS_SessionID p_mBS_SessionID + ) := { + { + id := id_MBS_SessionID, + criticality := reject, + value_ := { MBS_SessionID := p_mBS_SessionID } + } + } // End of template m_multicastSessionUpdateRequestTransfer_id_MBS_SessionID + + template (value) MulticastSessionUpdateRequestTransfer.protocolIEs m_multicastSessionUpdateRequestTransfer_id_MBS_ServiceArea( + in template (value) MBS_ServiceArea p_mBS_ServiceArea + ) := { + { + id := id_MBS_ServiceArea, + criticality := reject, + value_ := { MBS_ServiceArea := p_mBS_ServiceArea } + } + } // End of template m_multicastSessionUpdateRequestTransfer_id_MBS_ServiceArea + + template (value) MulticastSessionUpdateRequestTransfer.protocolIEs m_multicastSessionUpdateRequestTransfer_id_MBS_QoSFlowsToBeSetupModList( + in template (value) MBS_QoSFlowsToBeSetupList p_mBS_QoSFlowsToBeSetupList + ) := { + { + id := id_MBS_QoSFlowsToBeSetupModList, + criticality := reject, + value_ := { MBS_QoSFlowsToBeSetupList := p_mBS_QoSFlowsToBeSetupList } + } + } // End of template m_multicastSessionUpdateRequestTransfer_id_MBS_QoSFlowsToBeSetupModList + + template (value) MulticastSessionUpdateRequestTransfer.protocolIEs m_multicastSessionUpdateRequestTransfer_id_MBS_QoSFlowToReleaseList( + in template (value) QosFlowListWithCause p_qosFlowListWithCause + ) := { + { + id := id_MBS_QoSFlowToReleaseList, + criticality := reject, + value_ := { QosFlowListWithCause := p_qosFlowListWithCause } + } + } // End of template m_multicastSessionUpdateRequestTransfer_id_MBS_QoSFlowToReleaseList + + template (value) MulticastSessionUpdateRequestTransfer.protocolIEs m_multicastSessionUpdateRequestTransfer_id_MBS_SessionTNLInfo5GC( + in template (value) MBS_SessionTNLInfo5GC p_mBS_SessionTNLInfo5GC + ) := { + { + id := id_MBS_SessionTNLInfo5GC, + criticality := reject, + value_ := { MBS_SessionTNLInfo5GC := p_mBS_SessionTNLInfo5GC } + } + } // End of template m_multicastSessionUpdateRequestTransfer_id_MBS_SessionTNLInfo5GC + + template (omit) MulticastGroupPagingAreaItem m_multicastGroupPagingAreaItem( + in template (value) MulticastGroupPagingArea p_multicastGroupPagingArea, + in template (omit) UE_PagingList p_uE_PagingList := omit, + in template (omit) MulticastGroupPagingAreaItem.iE_Extensions p_iE_Extensions := omit + ) := { + multicastGroupPagingArea := p_multicastGroupPagingArea, + uE_PagingList := p_uE_PagingList, + iE_Extensions := p_iE_Extensions + } // End of template m_multicastGroupPagingAreaItem + + template (omit) MulticastGroupPagingArea m_multicastGroupPagingArea( + in template (value) MBS_AreaTAIList p_mBS_AreaTAIList, + in template (omit) MulticastGroupPagingArea.iE_Extensions p_iE_Extensions := omit + ) := { + mBS_AreaTAIList := p_mBS_AreaTAIList, + iE_Extensions := p_iE_Extensions + } // End of template m_multicastGroupPagingArea + + template (omit) UE_PagingItem m_uE_PagingItem( + in template (value) UEIdentityIndexValue p_uEIdentityIndexValue, + in template (omit) PagingDRX p_pagingDRX := omit, + in template (omit) UE_PagingItem.iE_Extensions p_iE_Extensions := omit + ) := { + uEIdentityIndexValue := p_uEIdentityIndexValue, + pagingDRX := p_pagingDRX, + iE_Extensions := p_iE_Extensions + } // End of template m_uE_PagingItem + + template (omit) M1Configuration m_m1Configuration( + in template (value) M1ReportingTrigger p_m1reportingTrigger, + in template (omit) M1ThresholdEventA2 p_m1thresholdEventA2 := omit, + in template (omit) M1PeriodicReporting p_m1periodicReporting := omit, + in template (omit) M1Configuration.iE_Extensions p_iE_Extensions := omit + ) := { + m1reportingTrigger := p_m1reportingTrigger, + m1thresholdEventA2 := p_m1thresholdEventA2, + // The above IE shall be present if the M1 Reporting Trigger IE is set to “A2event_triggered” or “A2event_triggered periodic” + m1periodicReporting := p_m1periodicReporting, + // The above IE shall be present if the M1 Reporting Trigger IE is set to “periodic” or “A2event_triggered periodic” + iE_Extensions := p_iE_Extensions + } // End of template m_m1Configuration + + template (value) M1Configuration.iE_Extensions m_m1Configuration_id_IncludeBeamMeasurementsIndication( + in template (value) IncludeBeamMeasurementsIndication p_includeBeamMeasurementsIndication + ) := { + { + id := id_IncludeBeamMeasurementsIndication, + criticality := ignore, + extensionValue := { IncludeBeamMeasurementsIndication := p_includeBeamMeasurementsIndication } + } + } // End of template m_m1Configuration_id_IncludeBeamMeasurementsIndication + + template (value) M1Configuration.iE_Extensions m_m1Configuration_id_BeamMeasurementsReportConfiguration( + in template (value) BeamMeasurementsReportConfiguration p_beamMeasurementsReportConfiguration + ) := { + { + id := id_BeamMeasurementsReportConfiguration, + criticality := ignore, + extensionValue := { BeamMeasurementsReportConfiguration := p_beamMeasurementsReportConfiguration } + } + } // End of template m_m1Configuration_id_BeamMeasurementsReportConfiguration + + template (value) IncludeBeamMeasurementsIndication m_includeBeamMeasurementsIndication(in IncludeBeamMeasurementsIndication p_value := true_) := p_value; + + template (value) M1ReportingTrigger m_m1ReportingTrigger(in M1ReportingTrigger p_value := periodic) := p_value; + + template (omit) M1ThresholdEventA2 m_m1ThresholdEventA2( + in template (value) M1ThresholdType p_m1ThresholdType, + in template (omit) M1ThresholdEventA2.iE_Extensions p_iE_Extensions := omit + ) := { + m1ThresholdType := p_m1ThresholdType, + iE_Extensions := p_iE_Extensions + } // End of template m_m1ThresholdEventA2 + + template (value) M1ThresholdType m_m1ThresholdType_threshold_RSRP( + in template (value) Threshold_RSRP p_threshold_RSRP + ) := { + threshold_RSRP := p_threshold_RSRP + } // End of template m_m1ThresholdType_threshold_RSRP + + template (value) M1ThresholdType m_m1ThresholdType_threshold_RSRQ( + in template (value) Threshold_RSRQ p_threshold_RSRQ + ) := { + threshold_RSRQ := p_threshold_RSRQ + } // End of template m_m1ThresholdType_threshold_RSRQ + + template (value) M1ThresholdType m_m1ThresholdType_threshold_SINR( + in template (value) Threshold_SINR p_threshold_SINR + ) := { + threshold_SINR := p_threshold_SINR + } // End of template m_m1ThresholdType_threshold_SINR + + template (value) M1ThresholdType m_m1ThresholdType_choice_Extensions( + in template (value) M1ThresholdType.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_m1ThresholdType_choice_Extensions + + template (omit) M1PeriodicReporting m_m1PeriodicReporting( + in template (value) ReportIntervalMDT p_reportInterval, + in template (value) ReportAmountMDT p_reportAmount, + in template (omit) M1PeriodicReporting.iE_Extensions p_iE_Extensions := omit + ) := { + reportInterval := p_reportInterval, + reportAmount := p_reportAmount, + iE_Extensions := p_iE_Extensions + } // End of template m_m1PeriodicReporting + + template (value) M1PeriodicReporting.iE_Extensions m_m1PeriodicReporting_id_ExtendedReportIntervalMDT( + in template (value) ExtendedReportIntervalMDT p_extendedReportIntervalMDT + ) := { + { + id := id_ExtendedReportIntervalMDT, + criticality := ignore, + extensionValue := { ExtendedReportIntervalMDT := p_extendedReportIntervalMDT } + } + } // End of template m_m1PeriodicReporting_id_ExtendedReportIntervalMDT + + template (omit) M4Configuration m_m4Configuration( + in template (value) M4period p_m4period, + in template (value) Links_to_log p_m4_links_to_log, + in template (omit) M4Configuration.iE_Extensions p_iE_Extensions := omit + ) := { + m4period := p_m4period, + m4_links_to_log := p_m4_links_to_log, + iE_Extensions := p_iE_Extensions + } // End of template m_m4Configuration + + template (value) M4Configuration.iE_Extensions m_m4Configuration_id_M4ReportAmount( + in template (value) M4ReportAmountMDT p_m4ReportAmountMDT + ) := { + { + id := id_ExtendedReportIntervalMDT, + criticality := ignore, + extensionValue := { M4ReportAmountMDT := p_m4ReportAmountMDT } + } + } // End of template m_m4Configuration_id_M4ReportAmount + + template (value) M4ReportAmountMDT m_m4ReportAmountMDT(in M4ReportAmountMDT p_value := r1) := p_value; + + template (value) M4period m_m4period(in M4period p_value := ms1024) := p_value; + + template (omit) M5Configuration m_m5Configuration( + in template (value) M5period p_m5period, + in template (value) Links_to_log p_m5_links_to_log, + in template (omit) M5Configuration.iE_Extensions p_iE_Extensions := omit + ) := { + m5period := p_m5period, + m5_links_to_log := p_m5_links_to_log, + iE_Extensions := p_iE_Extensions + } // End of template m_m5Configuration + + template (value) M5Configuration.iE_Extensions m_m5Configuration_id_M5ReportAmount( + in template (value) M5ReportAmountMDT p_m5ReportAmountMDT + ) := { + { + id := id_M5ReportAmount, + criticality := ignore, + extensionValue := { M5ReportAmountMDT := p_m5ReportAmountMDT } + } + } // End of template m_m5Configuration_id_M5ReportAmount + + template (value) M5ReportAmountMDT m_m5ReportAmountMDT(in M5ReportAmountMDT p_value := r1) := p_value; + + template (value) M5period m_m5period(in M5period p_value := ms1024) := p_value; + + template (omit) M6Configuration m_m6Configuration( + in template (value) M6report_Interval p_m6report_Interval, + in template (value) Links_to_log p_m6_links_to_log, + in template (omit) M6Configuration.iE_Extensions p_iE_Extensions := omit + ) := { + m6report_Interval := p_m6report_Interval, + m6_links_to_log := p_m6_links_to_log, + iE_Extensions := p_iE_Extensions + } // End of template m_m6Configuration + + template (value) M6Configuration.iE_Extensions m_m6Configuration_id_M6ReportAmount( + in template (value) M6ReportAmountMDT p_m6ReportAmountMDT + ) := { + { + id := id_M6ReportAmount, + criticality := ignore, + extensionValue := { M6ReportAmountMDT := p_m6ReportAmountMDT } + } + } // End of template m_m6Configuration_id_M6ReportAmount + + template (value) M6Configuration.iE_Extensions m_m6Configuration_id_ExcessPacketDelayThresholdConfiguration( + in template (value) ExcessPacketDelayThresholdConfiguration p_excessPacketDelayThresholdConfiguration + ) := { + { + id := id_ExcessPacketDelayThresholdConfiguration, + criticality := ignore, + extensionValue := { ExcessPacketDelayThresholdConfiguration := p_excessPacketDelayThresholdConfiguration } + } + } // End of template m_m6Configuration_id_ExcessPacketDelayThresholdConfiguration + + template (value) M6ReportAmountMDT m_m6ReportAmountMDT(in M6ReportAmountMDT p_value := r1) := p_value; + + template (value) M6report_Interval m_m6report_Interval(in M6report_Interval p_value := ms120) := p_value; + + template (omit) M7Configuration m_m7Configuration( + in template (value) M7period p_m7period, + in template (value) Links_to_log p_m7_links_to_log, + in template (omit) M7Configuration.iE_Extensions p_iE_Extensions := omit + ) := { + m7period := p_m7period, + m7_links_to_log := p_m7_links_to_log, + iE_Extensions := p_iE_Extensions + } // End of template m_m7Configuration + + template (value) M7Configuration.iE_Extensions m_m7Configuration_id_M7ReportAmount( + in template (value) M7ReportAmountMDT p_m7ReportAmountMDT + ) := { + { + id := id_M7ReportAmount, + criticality := ignore, + extensionValue := { M7ReportAmountMDT := p_m7ReportAmountMDT } + } + } // End of template m_m7Configuration_id_M7ReportAmount + + template (value) M7ReportAmountMDT m_m7ReportAmountMDT(in M7ReportAmountMDT p_value := r1) := p_value; + + template (omit) MDT_Location_Info m_mDT_Location_Info( + in template (value) MDT_Location_Information p_mDT_Location_Information, + in template (omit) MDT_Location_Info.iE_Extensions p_iE_Extensions := omit + ) := { + mDT_Location_Information := p_mDT_Location_Information, + iE_Extensions := p_iE_Extensions + } // End of template m_mDT_Location_Info + + template (value) N3IWF_ID m_n3IWF_ID_n3IWF_ID( + in template (value) N3IWF_ID.n3IWF_ID p_n3IWF_ID + ) := { + n3IWF_ID := p_n3IWF_ID + } // End of template m_n3IWF_ID_n3IWF_ID + + template (value) N3IWF_ID m_n3IWF_ID_choice_Extensions( + in template (value) N3IWF_ID.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_n3IWF_ID_choice_Extensions + + template (value) NB_IoT_DefaultPagingDRX m_nB_IoT_DefaultPagingDRX(in NB_IoT_DefaultPagingDRX p_value := rf128) := p_value; + + template (value) NB_IoT_PagingDRX m_nB_IoT_PagingDRX(in NB_IoT_PagingDRX p_value := rf32) := p_value; + + template (value) NB_IoT_Paging_eDRXCycle m_nB_IoT_Paging_eDRXCycle(in NB_IoT_Paging_eDRXCycle p_value := hf2) := p_value; + + template (value) NB_IoT_Paging_TimeWindow m_nB_IoT_Paging_TimeWindow(in NB_IoT_Paging_TimeWindow p_value := s1) := p_value; + + template (omit) NB_IoT_Paging_eDRXInfo m_nB_IoT_Paging_eDRXInfo( + in template (value) NB_IoT_Paging_eDRXCycle p_nB_IoT_Paging_eDRXCycle, + in template (omit) NB_IoT_Paging_TimeWindow p_nB_IoT_Paging_TimeWindow := omit, + in template (omit) NB_IoT_Paging_eDRXInfo.iE_Extensions p_iE_Extensions := omit + ) := { + nB_IoT_Paging_eDRXCycle := p_nB_IoT_Paging_eDRXCycle, + nB_IoT_Paging_TimeWindow := p_nB_IoT_Paging_TimeWindow, + iE_Extensions := p_iE_Extensions + } // End of template m_nB_IoT_Paging_eDRXInfo + + template (value) NewSecurityContextInd m_newSecurityContextInd(in NewSecurityContextInd p_value := true_) := p_value; + + template (value) NextPagingAreaScope m_nextPagingAreaScope(in NextPagingAreaScope p_value := same) := p_value; + + template (omit) NGAPIESupportInformationRequestItem m_nGAPIESupportInformationRequestItem( + in template (value) ProtocolIE_ID p_ngap_ProtocolIE_Id, + in template (omit) NGAPIESupportInformationRequestItem.iE_Extensions p_iE_Extensions := omit + ) := { + ngap_ProtocolIE_Id := p_ngap_ProtocolIE_Id, + iE_Extensions := p_iE_Extensions + } // End of template m_nGAPIESupportInformationRequestItem + + template (omit) NGAPIESupportInformationResponseItem m_nGAPIESupportInformationResponseItem( + in template (value) ProtocolIE_ID p_ngap_ProtocolIE_Id, + in template (value) NGAPIESupportInformationResponseItem.ngap_ProtocolIESupportInfo p_ngap_ProtocolIESupportInfo, + in template (value) NGAPIESupportInformationResponseItem.ngap_ProtocolIEPresenceInfo p_ngap_ProtocolIEPresenceInfo, + in template (omit) NGAPIESupportInformationResponseItem.iE_Extensions p_iE_Extensions := omit + ) := { + ngap_ProtocolIE_Id := p_ngap_ProtocolIE_Id, + ngap_ProtocolIESupportInfo := p_ngap_ProtocolIESupportInfo, + ngap_ProtocolIEPresenceInfo := p_ngap_ProtocolIEPresenceInfo, + iE_Extensions := p_iE_Extensions + } // End of template m_nGAPIESupportInformationResponseItem + + template (value) NgENB_ID m_ngENB_ID_macroNgENB_ID( + in template (value) NgENB_ID.macroNgENB_ID p_macroNgENB_ID := PX_MACRO_NGENB_ID + ) := { + macroNgENB_ID := p_macroNgENB_ID + } // End of template m_ngENB_ID_macroNgENB_ID + + template (value) NgENB_ID m_ngENB_ID_shortMacroNgENB_ID( + in template (value) NgENB_ID.shortMacroNgENB_ID p_shortMacroNgENB_ID := PX_SHORT_MACRO_NGENB_ID + ) := { + shortMacroNgENB_ID := p_shortMacroNgENB_ID + } // End of template m_ngENB_ID_shortMacroNgENB_ID + + template (value) NgENB_ID m_ngENB_ID_longMacroNgENB_ID( + in template (value) NgENB_ID.longMacroNgENB_ID p_longMacroNgENB_ID := PX_LONG_MACRO_NGENB_ID + ) := { + longMacroNgENB_ID := p_longMacroNgENB_ID + } // End of template m_ngENB_ID_longMacroNgENB_ID + + template (value) NgENB_ID m_ngENB_ID_choice_Extensions( + in template (value) NgENB_ID.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_ngENB_ID_choice_Extensions + + template (value) NotifySourceNGRANNode m_notifySourceNGRANNode(in NotifySourceNGRANNode p_value := notifySource) := p_value; + + template (value) NGRAN_CGI m_ngENB_ID_nR_CGI( + in template (value) NR_CGI p_nR_CGI + ) := { + nR_CGI := p_nR_CGI + } // End of template m_ngENB_ID_nR_CGI + + template (value) NGRAN_CGI m_ngENB_ID_eUTRA_CGI( + in template (value) EUTRA_CGI p_eUTRA_CGI + ) := { + eUTRA_CGI := p_eUTRA_CGI + } // End of template m_ngENB_ID_eUTRA_CGI + + template (value) NGRAN_CGI m_nGRAN_CGI_choice_Extensions( + in template (value) NGRAN_CGI.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_nGRAN_CGI_choice_Extensions + + template (omit) NGRAN_TNLAssociationToRemoveItem m_nGRAN_TNLAssociationToRemoveItem( + in template (value) CPTransportLayerInformation p_tNLAssociationTransportLayerAddress, + in template (omit) CPTransportLayerInformation p_tNLAssociationTransportLayerAddressAMF := omit, + in template (omit) NGRAN_TNLAssociationToRemoveItem.iE_Extensions p_iE_Extensions := omit + ) := { + tNLAssociationTransportLayerAddress := p_tNLAssociationTransportLayerAddress, + tNLAssociationTransportLayerAddressAMF := p_tNLAssociationTransportLayerAddressAMF, + iE_Extensions := p_iE_Extensions + } // End of template m_nGRAN_TNLAssociationToRemoveItem + + template (omit) NonDynamic5QIDescriptor m_nonDynamic5QIDescriptor( + in template (value) FiveQI p_fiveQI, + in template (omit) PriorityLevelQos p_priorityLevelQos := omit, + in template (omit) AveragingWindow p_averagingWindow := omit, + in template (omit) MaximumDataBurstVolume p_maximumDataBurstVolume := omit, + in template (omit) NonDynamic5QIDescriptor.iE_Extensions p_iE_Extensions := omit + ) := { + fiveQI := p_fiveQI, + priorityLevelQos := p_priorityLevelQos, + averagingWindow := p_averagingWindow, + maximumDataBurstVolume := p_maximumDataBurstVolume, + iE_Extensions := p_iE_Extensions + } // End of template m_nonDynamic5QIDescriptor + + template (value) NonDynamic5QIDescriptor.iE_Extensions m_nonDynamic5QIDescriptor_id_CNPacketDelayBudgetDL( + in template (value) ExtendedPacketDelayBudget p_extendedPacketDelayBudget + ) := { + { + id := id_CNPacketDelayBudgetDL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template m_nonDynamic5QIDescriptor_id_CNPacketDelayBudgetDL + + template (value) NonDynamic5QIDescriptor.iE_Extensions m_nonDynamic5QIDescriptor_id_CNPacketDelayBudgetUL( + in template (value) ExtendedPacketDelayBudget p_extendedPacketDelayBudget + ) := { + { + id := id_CNPacketDelayBudgetUL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template m_nonDynamic5QIDescriptor_id_CNPacketDelayBudgetUL + + template (value) NotificationCause m_notificationCause(in NotificationCause p_value := fulfilled) := p_value; + + template (value) NotificationControl m_notificationControl(in NotificationControl p_value := notification_requested) := p_value; + + template (value) NPN_AccessInformation m_nPN_AccessInformation_pNI_NPN_Access_Information( + in template (value) CellCAGList p_pNI_NPN_Access_Information + ) := { + pNI_NPN_Access_Information := p_pNI_NPN_Access_Information + } // End of template m_nPN_AccessInformation_pNI_NPN_Access_Information + + template (value) NPN_AccessInformation m_nPN_AccessInformation_choice_Extensions( + in template (value) NPN_AccessInformation.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_nPN_AccessInformation_choice_Extensions + + template (value) NPN_MobilityInformation m_nPN_MobilityInformation_sNPN_MobilityInformation( + in template (value) SNPN_MobilityInformation p_sNPN_MobilityInformation + ) := { + sNPN_MobilityInformation := p_sNPN_MobilityInformation + } // End of template m_nPN_MobilityInformation_sNPN_MobilityInformation + + template (value) NPN_MobilityInformation m_nPN_MobilityInformation_pNI_NPN_MobilityInformation( + in template (value) PNI_NPN_MobilityInformation p_pNI_NPN_MobilityInformation + ) := { + pNI_NPN_MobilityInformation := p_pNI_NPN_MobilityInformation + } // End of template m_nPN_MobilityInformation_pNI_NPN_MobilityInformation + + template (value) NPN_MobilityInformation m_nPN_MobilityInformation_choice_Extensions( + in template (value) NPN_MobilityInformation.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_nPN_MobilityInformation_choice_Extensions + + template (value) NPN_PagingAssistanceInformation m_nPN_PagingAssistanceInformation_pNI_NPN_PagingAssistance( + in template (value) Allowed_PNI_NPN_List p_pNI_NPN_PagingAssistance + ) := { + pNI_NPN_PagingAssistance := p_pNI_NPN_PagingAssistance + } // End of template m_nPN_PagingAssistanceInformation_pNI_NPN_PagingAssistance + + template (value) NPN_PagingAssistanceInformation m_nPN_PagingAssistanceInformation_choice_Extensions( + in template (value) NPN_PagingAssistanceInformation.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_nPN_PagingAssistanceInformation_choice_Extensions + + template (value) NPN_Support m_nPN_Support_sNPN( + in template (value) NID p_sNPN + ) := { + sNPN := p_sNPN + } // End of template m_nPN_Support_sNPN + + template (value) NPN_Support m_nPN_Support_choice_Extensions( + in template (value) NPN_Support.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_nPN_Support_choice_Extensions + + template (omit) NR_CGI m_nR_CGI( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) NRCellIdentity p_nRCellIdentity := PX_NR_CELL_IDENTITY, + in template (omit) NR_CGI.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + nRCellIdentity := p_nRCellIdentity, + iE_Extensions := p_iE_Extensions + } // End of template m_nR_CGI + + template (omit) NR_PagingeDRXInformation m_NR_PagingeDRXInformation( + in template (value) NR_Paging_eDRX_Cycle p_nR_paging_eDRX_Cycle, + in template (omit) NR_Paging_Time_Window p_nR_paging_Time_Window := omit, + in template (omit) NR_PagingeDRXInformation.iE_Extensions p_iE_Extensions := omit + ) := { + nR_paging_eDRX_Cycle := p_nR_paging_eDRX_Cycle, + nR_paging_Time_Window := p_nR_paging_Time_Window, + iE_Extensions := p_iE_Extensions + } // End of template m_NR_PagingeDRXInformation + + template (value) NR_Paging_eDRX_Cycle m_nR_Paging_eDRX_Cycle(in NR_Paging_eDRX_Cycle p_value := hfquarter) := p_value; + + template (value) NR_Paging_Time_Window m_nR_Paging_Time_Window(in NR_Paging_Time_Window p_value := s1) := p_value; + + template (omit) NRNTNTAIInformation m_nRNTNTAIInformation( + in template (value) PLMNIdentity p_servingPLMN, + in template (value) TACListInNRNTN p_tACListInNRNTN, + in template (omit) TAC p_uELocationDerivedTACInNRNTN := omit, + in template (omit) NRNTNTAIInformation.iE_Extensions p_iE_Extensions := omit + ) := { + servingPLMN := p_servingPLMN, + tACListInNRNTN := p_tACListInNRNTN, + uELocationDerivedTACInNRNTN := p_uELocationDerivedTACInNRNTN, + iE_Extensions := p_iE_Extensions + } // End of template m_nRNTNTAIInformation + + template (omit) NRFrequencyBandItem m_nRFrequencyBandItem( + in template (value) NRFrequencyBand p_nr_frequency_band, + in template (omit) NRFrequencyBandItem.iE_Extension p_iE_Extension := omit + ) := { + nr_frequency_band := p_nr_frequency_band, + iE_Extension := p_iE_Extension + } // End of template m_nRFrequencyBandItem + + template (omit) NRFrequencyInfo m_nRFrequencyInfo( + in template (value) NRARFCN p_nrARFCN, + in template (value) NRFrequencyBand_List p_frequencyBand_List, + in template (omit) NRFrequencyInfo.iE_Extension p_iE_Extension := omit + ) := { + nrARFCN := p_nrARFCN, + frequencyBand_List := p_frequencyBand_List, + iE_Extension := p_iE_Extension + } // End of template m_nRFrequencyInfo + + template (omit) NRV2XServicesAuthorized m_nRV2XServicesAuthorized( + in template (omit) VehicleUE p_vehicleUE := omit, + in template (omit) PedestrianUE p_pedestrianUE := omit, + in template (omit) NRV2XServicesAuthorized.iE_Extensions p_iE_Extensions := omit + + ) := { + vehicleUE := p_vehicleUE, + pedestrianUE := p_pedestrianUE, + iE_Extensions := p_iE_Extensions + } // End of template m_nRV2XServicesAuthorized + + template (value) VehicleUE m_vehicleUE(in VehicleUE p_value := authorized) := p_value; + + template (value) PedestrianUE m_pedestrianUE(in PedestrianUE p_value := authorized) := p_value; + + template (omit) NRUESidelinkAggregateMaximumBitrate m_nRUESidelinkAggregateMaximumBitrate( + in template (value) BitRate p_uESidelinkAggregateMaximumBitRate := PX_UE_SIDELINK_AGGREGATE_MAXIMUM_BIT_RATE, + in template (omit) NRUESidelinkAggregateMaximumBitrate.iE_Extensions p_iE_Extensions := omit + ) := { + uESidelinkAggregateMaximumBitRate := p_uESidelinkAggregateMaximumBitRate, + iE_Extensions := p_iE_Extensions + } // End of template m_nRUESidelinkAggregateMaximumBitrate + + template (value) OnboardingSupport m_onboardingSupport(in OnboardingSupport p_value := true_) := p_value; + + template (value) OverloadAction m_overloadAction(in OverloadAction p_value := reject_non_emergency_mo_dt) := p_value; + + template (value) OverloadResponse m_overloadResponse_overloadAction( + in template (value) OverloadAction p_overloadAction + ) := { + overloadAction := p_overloadAction + } // End of template m_overloadResponse_overloadAction + + template (value) OverloadResponse m_overloadResponse_choice_Extensions( + in template (value) OverloadResponse.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_overloadResponse_choice_Extensions + + template (omit) OverloadStartNSSAIItem m_overloadStartNSSAIItem( + in template (value) SliceOverloadList p_sliceOverloadList, + in template (omit) OverloadResponse p_sliceOverloadResponse := omit, + in template (omit) TrafficLoadReductionIndication p_sliceTrafficLoadReductionIndication := omit, + in template (omit) OverloadStartNSSAIItem.iE_Extensions p_iE_Extensions := omit + ) := { + sliceOverloadList := p_sliceOverloadList, + sliceOverloadResponse := p_sliceOverloadResponse, + sliceTrafficLoadReductionIndication := p_sliceTrafficLoadReductionIndication, + iE_Extensions := p_iE_Extensions + } // End of template m_overloadStartNSSAIItem + + template (omit) PacketErrorRate m_PacketErrorRate( + in template (value) PacketErrorRate.pERScalar p_pERScalar, + in template (value) PacketErrorRate.pERExponent p_pERExponent, + in template (omit) PacketErrorRate.iE_Extensions p_iE_Extensions := omit + ) := { + pERScalar := p_pERScalar, + pERExponent := p_pERExponent, + iE_Extensions := p_iE_Extensions + } // End of template m_PacketErrorRate + + template (omit) PagingAssisDataforCEcapabUE m_pagingAssisDataforCEcapabUE( + in template (value) EUTRA_CGI p_eUTRA_CGI, + in template (value) CoverageEnhancementLevel p_coverageEnhancementLevel, + in template (omit) PagingAssisDataforCEcapabUE.iE_Extensions p_iE_Extensions := omit + ) := { + eUTRA_CGI := p_eUTRA_CGI, + coverageEnhancementLevel := p_coverageEnhancementLevel, + iE_Extensions := p_iE_Extensions + } // End of template m_pagingAssisDataforCEcapabUE + + template (omit) PagingAttemptInformation m_pagingAttemptInformation( + in template (value) PagingAttemptCount p_pagingAttemptCount, + in template (value) IntendedNumberOfPagingAttempts p_intendedNumberOfPagingAttempts, + in template (omit) NextPagingAreaScope p_nextPagingAreaScope := omit, + in template (omit) PagingAttemptInformation.iE_Extensions p_iE_Extensions := omit + ) := { + pagingAttemptCount := p_pagingAttemptCount, + intendedNumberOfPagingAttempts := p_intendedNumberOfPagingAttempts, + nextPagingAreaScope := p_nextPagingAreaScope, + iE_Extensions := p_iE_Extensions + } // End of template m_pagingAttemptInformation + + template (value) PagingCause m_pagingCause(in PagingCause p_value := voice) := p_value; + + template (value) PagingCauseIndicationForVoiceService m_pagingCauseIndicationForVoiceService(in PagingCauseIndicationForVoiceService p_value := supported) := p_value; + + template (value) PagingDRX m_pagingDRX(in PagingDRX p_value := v256) := p_value; + + template (value) PagingOrigin m_pagingOrigin(in PagingOrigin p_value := non_3gpp) := p_value; + + template (value) PagingPriority m_pagingPriority(in PagingPriority p_value := priolevel1) := p_value; + + template (value) PagingProbabilityInformation m_pagingProbabilityInformation(in PagingProbabilityInformation p_value := p00) := p_value; + + template (omit) PathSwitchRequestAcknowledgeTransfer m_PathSwitchRequestAcknowledgeTransfer( + in template (omit) UPTransportLayerInformation p_uL_NGU_UP_TNLInformation := omit, + in template (omit) SecurityIndication p_securityIndication := omit, + in template (omit) PathSwitchRequestAcknowledgeTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + uL_NGU_UP_TNLInformation := p_uL_NGU_UP_TNLInformation, + securityIndication := p_securityIndication, + iE_Extensions := p_iE_Extensions + } // End of template m_PathSwitchRequestAcknowledgeTransfer + + template (value) PathSwitchRequestAcknowledgeTransfer.iE_Extensions m_pathSwitchRequestAcknowledgeTransfer_id_AdditionalNGU_UP_TNLInformation( + in template (value) UPTransportLayerInformationPairList p_uPTransportLayerInformationPairList + ) := { + { + id := id_AdditionalNGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformationPairList := p_uPTransportLayerInformationPairList } + } + } // End of template m_pathSwitchRequestAcknowledgeTransfer_id_AdditionalNGU_UP_TNLInformation + + template (value) PathSwitchRequestAcknowledgeTransfer.iE_Extensions m_pathSwitchRequestAcknowledgeTransfer_id_RedundantUL_NGU_UP_TNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_RedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_pathSwitchRequestAcknowledgeTransfer_id_RedundantUL_NGU_UP_TNLInformation + + template (value) PathSwitchRequestAcknowledgeTransfer.iE_Extensions m_pathSwitchRequestAcknowledgeTransfer_id_AdditionalRedundantNGU_UP_TNLInformation( + in template (value) UPTransportLayerInformationPairList p_uPTransportLayerInformationPairList + ) := { + { + id := id_AdditionalRedundantNGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformationPairList := p_uPTransportLayerInformationPairList } + } + } // End of template m_pathSwitchRequestAcknowledgeTransfer_id_AdditionalRedundantNGU_UP_TNLInformation + + template (value) PathSwitchRequestAcknowledgeTransfer.iE_Extensions m_pathSwitchRequestAcknowledgeTransfer_id_QosFlowParametersList( + in template (value) QosFlowParametersList p_qosFlowParametersList + ) := { + { + id := id_QosFlowParametersList, + criticality := ignore, + extensionValue := { QosFlowParametersList := p_qosFlowParametersList } + } + } // End of template m_pathSwitchRequestAcknowledgeTransfer_id_QosFlowParametersList + + template (omit) PathSwitchRequestSetupFailedTransfer m_pathSwitchRequestSetupFailedTransfer( + in template (value) Cause p_cause, + in template (omit) PathSwitchRequestSetupFailedTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_pathSwitchRequestSetupFailedTransfer + + template (omit) PathSwitchRequestTransfer m_pathSwitchRequestTransfer( + in template (value) UPTransportLayerInformation p_dL_NGU_UP_TNLInformation, + in template (value) QosFlowAcceptedList p_qosFlowAcceptedList, + in template (omit) DL_NGU_TNLInformationReused p_dL_NGU_TNLInformationReused := omit, + in template (omit) UserPlaneSecurityInformation p_userPlaneSecurityInformation := omit, + in template (omit) PathSwitchRequestTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + dL_NGU_UP_TNLInformation := p_dL_NGU_UP_TNLInformation, + dL_NGU_TNLInformationReused := p_dL_NGU_TNLInformationReused, + userPlaneSecurityInformation := p_userPlaneSecurityInformation, + qosFlowAcceptedList := p_qosFlowAcceptedList, + iE_Extensions := p_iE_Extensions + } // End of template m_pathSwitchRequestTransfer + + template (value) PathSwitchRequestTransfer.iE_Extensions m_pathSwitchRequestTransferr_id_AdditionalDLQosFlowPerTNLInformation( + in template (value) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList + ) := { + { + id := id_AdditionalDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template m_pathSwitchRequestTransferr_id_AdditionalDLQosFlowPerTNLInformation + + template (value) PathSwitchRequestTransfer.iE_Extensions m_pathSwitchRequestTransferr_id_RedundantDL_NGU_UP_TNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_RedundantDL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_pathSwitchRequestTransferr_id_RedundantDL_NGU_UP_TNLInformation + + template (value) PathSwitchRequestTransfer.iE_Extensions m_pathSwitchRequestTransferr_id_RedundantDL_NGU_TNLInformationReused( + in template (value) DL_NGU_TNLInformationReused p_dL_NGU_TNLInformationReused + ) := { + { + id := id_RedundantDL_NGU_TNLInformationReused, + criticality := ignore, + extensionValue := { DL_NGU_TNLInformationReused := p_dL_NGU_TNLInformationReused } + } + } // End of template m_pathSwitchRequestTransferr_id_RedundantDL_NGU_TNLInformationReused + + template (value) PathSwitchRequestTransfer.iE_Extensions m_pathSwitchRequestTransferr_id_AdditionalRedundantDLQosFlowPerTNLInformation( + in template (value) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList + ) := { + { + id := id_AdditionalRedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template m_pathSwitchRequestTransferr_id_AdditionalRedundantDLQosFlowPerTNLInformation + + template (value) PathSwitchRequestTransfer.iE_Extensions m_pathSwitchRequestTransferr_id_UsedRSNInformation( + in template (value) RedundantPDUSessionInformation p_redundantPDUSessionInformation + ) := { + { + id := id_UsedRSNInformation, + criticality := ignore, + extensionValue := { RedundantPDUSessionInformation := p_redundantPDUSessionInformation } + } + } // End of template m_pathSwitchRequestTransferr_id_UsedRSNInformation + + template (value) PathSwitchRequestTransfer.iE_Extensions m_pathSwitchRequestTransferr_id_GlobalRANNodeID( + in template (value) GlobalRANNodeID p_globalRANNodeID + ) := { + { + id := id_GlobalRANNodeID, + criticality := ignore, + extensionValue := { GlobalRANNodeID := p_globalRANNodeID } + } + } // End of template m_pathSwitchRequestTransferr_id_GlobalRANNodeID + + template (value) PathSwitchRequestTransfer.iE_Extensions m_pathSwitchRequestTransfer_id_MBS_SupportIndicator( + in template (value) MBS_SupportIndicator p_mBS_SupportIndicator + ) := { + { + id := id_MBS_SupportIndicator, + criticality := ignore, + extensionValue := { MBS_SupportIndicator := p_mBS_SupportIndicator } + } + } // End of template m_pathSwitchRequestTransfer_id_MBS_SupportIndicator + + template (omit) PathSwitchRequestUnsuccessfulTransfer m_pathSwitchRequestUnsuccessfulTransfer( + in template (value) Cause p_cause, + in template (omit) PathSwitchRequestUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_pathSwitchRequestUnsuccessfulTransfer + + template (omit) PC5QoSParameters m_pC5QoSParameters( + in template (value) PC5QoSFlowList p_pc5QoSFlowList, + in template (omit) BitRate p_pc5LinkAggregateBitRates := omit, + in template (omit) PC5QoSParameters.iE_Extensions p_iE_Extensions := omit + ) := { + pc5QoSFlowList := p_pc5QoSFlowList, + pc5LinkAggregateBitRates := p_pc5LinkAggregateBitRates, + iE_Extensions := p_iE_Extensions + } // End of template m_pC5QoSParameters + + template (omit) PC5QoSFlowItem m_pC5QoSFlowItem( + in template (value) FiveQI p_pQI := PX_FIVE_QI, + in template (omit) PC5FlowBitRates p_pc5FlowBitRates := omit, + in template (omit) Range p_range := omit, + in template (omit) PC5QoSFlowItem.iE_Extensions p_iE_Extensions := omit + ) := { + pQI := p_pQI, + pc5FlowBitRates := p_pc5FlowBitRates, + range := p_range, + iE_Extensions := p_iE_Extensions + } // End of template m_pC5QoSFlowItem + + template (omit) PC5FlowBitRates m_pC5FlowBitRates( + in template (value) BitRate p_guaranteedFlowBitRate, + in template (value) BitRate p_maximumFlowBitRate, + in template (omit) PC5FlowBitRates.iE_Extensions p_iE_Extensions := omit + ) := { + guaranteedFlowBitRate := p_guaranteedFlowBitRate, + maximumFlowBitRate := p_maximumFlowBitRate, + iE_Extensions := p_iE_Extensions + } // End of template m_pC5FlowBitRates + + template (value) PrivacyIndicator m_privacyIndicator(in PrivacyIndicator p_value := immediate_MDT) := p_value; + + template (omit) PDUSessionAggregateMaximumBitRate m_pDUSessionAggregateMaximumBitRate( + in template (value) BitRate p_pDUSessionAggregateMaximumBitRateDL, + in template (value) BitRate p_pDUSessionAggregateMaximumBitRateUL, + in template (omit) PDUSessionAggregateMaximumBitRate.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionAggregateMaximumBitRateDL := p_pDUSessionAggregateMaximumBitRateDL, + pDUSessionAggregateMaximumBitRateUL := p_pDUSessionAggregateMaximumBitRateUL, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionAggregateMaximumBitRate + + template (omit) PDUSessionResourceAdmittedItem m_pDUSessionResourceAdmittedItem( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceAdmittedItem.handoverRequestAcknowledgeTransfer p_handoverRequestAcknowledgeTransfer, + in template (omit) PDUSessionResourceAdmittedItem.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + handoverRequestAcknowledgeTransfer := p_handoverRequestAcknowledgeTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceAdmittedItem + + template (omit) PDUSessionResourceFailedToModifyItemModCfm m_pDUSessionResourceFailedToModifyItemModCfm( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceFailedToModifyItemModCfm.pDUSessionResourceModifyIndicationUnsuccessfulTransfer p_pDUSessionResourceModifyIndicationUnsuccessfulTransfer, + in template (omit) PDUSessionResourceFailedToModifyItemModCfm.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceModifyIndicationUnsuccessfulTransfer := p_pDUSessionResourceModifyIndicationUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceFailedToModifyItemModCfm + + template (omit) PDUSessionResourceFailedToModifyItemModRes m_pDUSessionResourceFailedToModifyItemModRes( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceFailedToModifyItemModRes.pDUSessionResourceModifyUnsuccessfulTransfer p_pDUSessionResourceModifyUnsuccessfulTransfer, + in template (omit) PDUSessionResourceFailedToModifyItemModRes.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceModifyUnsuccessfulTransfer := p_pDUSessionResourceModifyUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceFailedToModifyItemModRes + + template (omit) PDUSessionResourceFailedToResumeItemRESReq m_pDUSessionResourceFailedToResumeItemRESReq( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) Cause p_cause, + in template (omit) PDUSessionResourceFailedToResumeItemRESReq.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceFailedToResumeItemRESReq + + template (omit) PDUSessionResourceFailedToResumeItemRESRes m_pDUSessionResourceFailedToResumeItemRESRes( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) Cause p_cause, + in template (omit) PDUSessionResourceFailedToResumeItemRESRes.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceFailedToResumeItemRESRes + + template (omit) PDUSessionResourceFailedToSetupItemCxtFail m_pDUSessionResourceFailedToSetupItemCxtFail( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceFailedToSetupItemCxtFail.pDUSessionResourceSetupUnsuccessfulTransfer p_pDUSessionResourceSetupUnsuccessfulTransfer, + in template (omit) PDUSessionResourceFailedToSetupItemCxtFail.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceSetupUnsuccessfulTransfer := p_pDUSessionResourceSetupUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceFailedToSetupItemCxtFail + + template (omit) PDUSessionResourceFailedToSetupItemCxtRes m_pDUSessionResourceFailedToSetupItemCxtRes( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceFailedToSetupItemCxtRes.pDUSessionResourceSetupUnsuccessfulTransfer p_pDUSessionResourceSetupUnsuccessfulTransfer, + in template (omit) PDUSessionResourceFailedToSetupItemCxtRes.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceSetupUnsuccessfulTransfer := p_pDUSessionResourceSetupUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceFailedToSetupItemCxtRes + + template (omit) PDUSessionResourceFailedToSetupItemHOAck m_pDUSessionResourceFailedToSetupItemHOAck( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceFailedToSetupItemHOAck.handoverResourceAllocationUnsuccessfulTransfer p_handoverResourceAllocationUnsuccessfulTransfer, + in template (omit) PDUSessionResourceFailedToSetupItemHOAck.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + handoverResourceAllocationUnsuccessfulTransfer := p_handoverResourceAllocationUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceFailedToSetupItemHOAck + + template (omit) PDUSessionResourceFailedToSetupItemPSReq m_pDUSessionResourceFailedToSetupItemPSReq( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceFailedToSetupItemPSReq.pathSwitchRequestSetupFailedTransfer p_pathSwitchRequestSetupFailedTransfer, + in template (omit) PDUSessionResourceFailedToSetupItemPSReq.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pathSwitchRequestSetupFailedTransfer := p_pathSwitchRequestSetupFailedTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceFailedToSetupItemPSReq + + template (omit) PDUSessionResourceFailedToSetupItemSURes m_pDUSessionResourceFailedToSetupItemSURes( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceFailedToSetupItemSURes.pDUSessionResourceSetupUnsuccessfulTransfer p_pDUSessionResourceSetupUnsuccessfulTransfer, + in template (omit) PDUSessionResourceFailedToSetupItemSURes.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceSetupUnsuccessfulTransfer := p_pDUSessionResourceSetupUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceFailedToSetupItemSURes + + template (omit) PDUSessionResourceHandoverItem m_pDUSessionResourceHandoverItem( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceHandoverItem.handoverCommandTransfer p_handoverCommandTransfer, + in template (omit) PDUSessionResourceHandoverItem.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + handoverCommandTransfer := p_handoverCommandTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceHandoverItem + + template (omit) PDUSessionResourceInformationItem m_pDUSessionResourceInformationItem( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) QosFlowInformationList p_qosFlowInformationList, + in template (omit) DRBsToQosFlowsMappingList p_dRBsToQosFlowsMappingList := omit, + in template (omit) PDUSessionResourceInformationItem.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + qosFlowInformationList := p_qosFlowInformationList, + dRBsToQosFlowsMappingList := p_dRBsToQosFlowsMappingList, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceInformationItem + + template (omit) PDUSessionResourceItemCxtRelCpl m_pDUSessionResourceItemCxtRelCpl( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (omit) PDUSessionResourceItemCxtRelCpl.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceItemCxtRelCpl + + template (value) PDUSessionResourceItemCxtRelCpl.iE_Extensions m_pDUSessionResourceItemCxtRelCpl_id_PDUSessionResourceReleaseResponseTransfer( + in template (value) PDUSessionResourceReleaseResponseTransfer_OCTET_STRING p_pDUSessionResourceReleaseResponseTransfer_OCTET_STRING + ) := { + { + id := id_PDUSessionResourceReleaseResponseTransfer, + criticality := ignore, + extensionValue := { PDUSessionResourceReleaseResponseTransfer_OCTET_STRING := p_pDUSessionResourceReleaseResponseTransfer_OCTET_STRING } + } + } // End of template m_pDUSessionResourceItemCxtRelCpl_id_PDUSessionResourceReleaseResponseTransfer + + template (omit) PDUSessionResourceItemCxtRelReq m_pDUSessionResourceItemCxtRelReq( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (omit) PDUSessionResourceItemCxtRelReq.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceItemCxtRelReq + + template (omit) PDUSessionResourceItemHORqd m_pDUSessionResourceItemHORqd( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceItemHORqd.handoverRequiredTransfer p_handoverRequiredTransfer, + in template (omit) PDUSessionResourceItemHORqd.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + handoverRequiredTransfer := p_handoverRequiredTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceItemHORqd + + template (omit) PDUSessionResourceModifyConfirmTransfer m_pDUSessionResourceModifyConfirmTransfer( + in template (value) QosFlowModifyConfirmList p_qosFlowModifyConfirmList, + in template (value) UPTransportLayerInformation p_uLNGU_UP_TNLInformation, + in template (omit) UPTransportLayerInformationPairList p_additionalNG_UUPTNLInformation := omit, + in template (omit) QosFlowListWithCause p_qosFlowFailedToModifyList := omit, + in template (omit) PDUSessionResourceModifyConfirmTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowModifyConfirmList := p_qosFlowModifyConfirmList, + uLNGU_UP_TNLInformation := p_uLNGU_UP_TNLInformation, + additionalNG_UUPTNLInformation := p_additionalNG_UUPTNLInformation, + qosFlowFailedToModifyList := p_qosFlowFailedToModifyList, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceModifyConfirmTransfer + + template (value) PDUSessionResourceModifyConfirmTransfer.iE_Extensions m_pDUSessionResourceModifyConfirmTransfer_id_RedundantUL_NGU_UP_TNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_RedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_pDUSessionResourceModifyConfirmTransferr_id_RedundantUL_NGU_UP_TNLInformation + + template (value) PDUSessionResourceModifyConfirmTransfer.iE_Extensions m_pDUSessionResourceModifyConfirmTransfer_id_AdditionalRedundantNGU_UP_TNLInformation( + in template (value) UPTransportLayerInformationPairList p_uPTransportLayerInformationPairList + ) := { + { + id := id_AdditionalRedundantNGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformationPairList := p_uPTransportLayerInformationPairList } + } + } // End of template m_pDUSessionResourceModifyConfirmTransferr_id_AdditionalRedundantNGU_UP_TNLInformation + + template (omit) PDUSessionResourceModifyIndicationUnsuccessfulTransfer m_pDUSessionResourceModifyIndicationUnsuccessfulTransfer( + in template (value) Cause p_cause, + in template (omit) PDUSessionResourceModifyIndicationUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceModifyIndicationUnsuccessfulTransfer + + template (value) PDUSessionResourceModifyRequestTransfer m_pDUSessionResourceModifyRequestTransfer( + in template (omit) PDUSessionResourceModifyRequestTransfer.protocolIEs p_protocolIEs + ) := { + protocolIEs := p_protocolIEs + } // End of template m_pDUSessionResourceModifyRequestTransfer + + template (value) PDUSessionResourceModifyRequestTransfer m_pDUSessionResourceModifyRequestTransfer_options( + in template (value) UL_NGU_UP_TNLModifyList p_uL_NGU_UP_TNLModifyList, + in template (value) QosFlowAddOrModifyRequestList p_qosFlowAddOrModifyRequestList + ) := { + protocolIEs := { + { + id := id_UL_NGU_UP_TNLModifyList, + criticality := reject, + value_ := { UL_NGU_UP_TNLModifyList := p_uL_NGU_UP_TNLModifyList } + }, + { + id := id_QosFlowAddOrModifyRequestList, + criticality := reject, + value_ := { QosFlowAddOrModifyRequestList := p_qosFlowAddOrModifyRequestList } + } + } + } // End of template m_pDUSessionResourceModifyRequestTransfer_options + + template (omit) PDUSessionResourceModifyResponseTransfer m_pDUSessionResourceModifyResponseTransfer( + in template (omit) UPTransportLayerInformation p_dL_NGU_UP_TNLInformation := omit, + in template (omit) UPTransportLayerInformation p_uL_NGU_UP_TNLInformation := omit, + in template (omit) QosFlowAddOrModifyResponseList p_qosFlowAddOrModifyResponseList := omit, + in template (omit) QosFlowPerTNLInformationList p_additionalDLQosFlowPerTNLInformation := omit, + in template (omit) QosFlowListWithCause p_qosFlowFailedToAddOrModifyList := omit, + in template (omit) PDUSessionResourceModifyResponseTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + dL_NGU_UP_TNLInformation := p_dL_NGU_UP_TNLInformation, + uL_NGU_UP_TNLInformation := p_uL_NGU_UP_TNLInformation, + qosFlowAddOrModifyResponseList := p_qosFlowAddOrModifyResponseList, + additionalDLQosFlowPerTNLInformation := p_additionalDLQosFlowPerTNLInformation, + qosFlowFailedToAddOrModifyList := p_qosFlowFailedToAddOrModifyList, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceModifyResponseTransfer + + template (value) PDUSessionResourceModifyResponseTransfer.iE_Extensions m_pDUSessionResourceModifyResponseTransfer_id_AdditionalNGU_UP_TNLInformation( + in template (value) UPTransportLayerInformationPairList p_uPTransportLayerInformationPairList + ) := { + { + id := id_AdditionalNGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformationPairList := p_uPTransportLayerInformationPairList } + } + } // End of template m_pDUSessionResourceModifyResponseTransfer_id_AdditionalNGU_UP_TNLInformation + + template (value) PDUSessionResourceModifyResponseTransfer.iE_Extensions m_pDUSessionResourceModifyResponseTransfer_id_RedundantDL_NGU_UP_TNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_RedundantDL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_pDUSessionResourceModifyResponseTransfer_id_RedundantDL_NGU_UP_TNLInformation + + template (value) PDUSessionResourceModifyResponseTransfer.iE_Extensions m_pDUSessionResourceModifyResponseTransfer_id_RedundantUL_NGU_UP_TNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_RedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_pDUSessionResourceModifyResponseTransfer_id_RedundantUL_NGU_UP_TNLInformation + + template (value) PDUSessionResourceModifyResponseTransfer.iE_Extensions m_pDUSessionResourceModifyResponseTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation( + in template (value) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList + ) := { + { + id := id_AdditionalRedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template m_pDUSessionResourceModifyResponseTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation + + template (value) PDUSessionResourceModifyResponseTransfer.iE_Extensions m_pDUSessionResourceModifyResponseTransfer_id_AdditionalRedundantNGU_UP_TNLInformation( + in template (value) UPTransportLayerInformationPairList p_uPTransportLayerInformationPairList + ) := { + { + id := id_AdditionalRedundantNGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformationPairList := p_uPTransportLayerInformationPairList } + } + } // End of template m_pDUSessionResourceModifyResponseTransfer_id_AdditionalRedundantNGU_UP_TNLInformation + + template (value) PDUSessionResourceModifyResponseTransfer.iE_Extensions m_pDUSessionResourceModifyResponseTransfer_id_SecondaryRATUsageInformation( + in template (value) SecondaryRATUsageInformation p_secondaryRATUsageInformation + ) := { + { + id := id_SecondaryRATUsageInformation, + criticality := ignore, + extensionValue := { SecondaryRATUsageInformation := p_secondaryRATUsageInformation } + } + } // End of template m_pDUSessionResourceModifyResponseTransfer_id_SecondaryRATUsageInformation + + template (value) PDUSessionResourceModifyResponseTransfer.iE_Extensions m_pDUSessionResourceModifyResponseTransfer_id_MBS_SupportIndicator( + in template (value) MBS_SupportIndicator p_mBS_SupportIndicator + ) := { + { + id := id_MBS_SupportIndicator, + criticality := ignore, + extensionValue := { MBS_SupportIndicator := p_mBS_SupportIndicator } + } + } // End of template m_pDUSessionResourceModifyResponseTransfer_id_MBS_SupportIndicator + + template (value) PDUSessionResourceModifyResponseTransfer.iE_Extensions m_pDUSessionResourceModifyResponseTransfer_id_MBSSessionSetuporModifyResponseList( + in template (value) MBSSessionSetupResponseList p_mBSSessionSetupResponseList + ) := { + { + id := id_MBSSessionSetuporModifyResponseList, + criticality := ignore, + extensionValue := { MBSSessionSetupResponseList := p_mBSSessionSetupResponseList } + } + } // End of template m_pDUSessionResourceModifyResponseTransfer_id_MBSSessionSetuporModifyResponseList + + template (value) PDUSessionResourceModifyResponseTransfer.iE_Extensions m_pDUSessionResourceModifyResponseTransfer_id_MBSSessionFailedtoSetuporModifyList( + in template (value) MBSSessionFailedtoSetupList p_mBSSessionFailedtoSetupList + ) := { + { + id := id_MBSSessionFailedtoSetuporModifyList, + criticality := ignore, + extensionValue := { MBSSessionFailedtoSetupList := p_mBSSessionFailedtoSetupList } + } + } // End of template m_pDUSessionResourceModifyResponseTransfer_id_MBSSessionFailedtoSetuporModifyList + + template (omit) PDUSessionResourceModifyIndicationTransfer m_pDUSessionResourceModifyIndicationTransfer( + in template (value) QosFlowPerTNLInformation p_dLQosFlowPerTNLInformation, + in template (omit) QosFlowPerTNLInformationList p_additionalDLQosFlowPerTNLInformation := omit, + in template (omit) PDUSessionResourceModifyIndicationTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + dLQosFlowPerTNLInformation := p_dLQosFlowPerTNLInformation, + additionalDLQosFlowPerTNLInformation := p_additionalDLQosFlowPerTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceModifyIndicationTransfer + + template (value) PDUSessionResourceModifyIndicationTransfer.iE_Extensions m_pDUSessionResourceModifyIndicationTransfer_id_SecondaryRATUsageInformation( + in template (value) SecondaryRATUsageInformation p_secondaryRATUsageInformation + ) := { + { + id := id_SecondaryRATUsageInformation, + criticality := ignore, + extensionValue := { SecondaryRATUsageInformation := p_secondaryRATUsageInformation } + } + } // End of template m_pDUSessionResourceModifyIndicationTransfer_id_SecondaryRATUsageInformation + + template (value) PDUSessionResourceModifyIndicationTransfer.iE_Extensions m_pDUSessionResourceModifyIndicationTransfer_id_SecurityResult( + in template (value) SecurityResult p_securityResult + ) := { + { + id := id_SecurityResult, + criticality := ignore, + extensionValue := { SecurityResult := p_securityResult } + } + } // End of template m_pDUSessionResourceModifyIndicationTransfer_id_SecurityResult + + template (value) PDUSessionResourceModifyIndicationTransfer.iE_Extensions m_pDUSessionResourceModifyIndicationTransfer_id_RedundantDLQosFlowPerTNLInformation( + in template (value) QosFlowPerTNLInformation p_qosFlowPerTNLInformation + ) := { + { + id := id_RedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformation := p_qosFlowPerTNLInformation } + } + } // End of template m_pDUSessionResourceModifyIndicationTransfer_id_RedundantDLQosFlowPerTNLInformation + + template (value) PDUSessionResourceModifyIndicationTransfer.iE_Extensions m_pDUSessionResourceModifyIndicationTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation( + in template (value) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList + ) := { + { + id := id_AdditionalRedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template m_pDUSessionResourceModifyIndicationTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation + + template (value) PDUSessionResourceModifyIndicationTransfer.iE_Extensions m_pDUSessionResourceModifyIndicationTransfer_id_GlobalRANNodeID( + in template (value) GlobalRANNodeID p_globalRANNodeID + ) := { + { + id := id_GlobalRANNodeID, + criticality := ignore, + extensionValue := { GlobalRANNodeID := p_globalRANNodeID } + } + } // End of template m_pDUSessionResourceModifyIndicationTransfer_id_GlobalRANNodeID + + template (omit) PDUSessionResourceModifyItemModCfm m_pDUSessionResourceModifyItemModCfm( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceModifyItemModCfm.pDUSessionResourceModifyConfirmTransfer p_pDUSessionResourceModifyConfirmTransfer, + in template (omit) PDUSessionResourceModifyItemModCfm.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceModifyConfirmTransfer := p_pDUSessionResourceModifyConfirmTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceModifyItemModCfm + + template (omit) PDUSessionResourceModifyItemModInd m_pDUSessionResourceModifyItemModInd( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceModifyItemModInd.pDUSessionResourceModifyIndicationTransfer p_pDUSessionResourceModifyIndicationTransfer, + in template (omit) PDUSessionResourceModifyItemModInd.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceModifyIndicationTransfer := p_pDUSessionResourceModifyIndicationTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceModifyItemModInd + + template (omit) PDUSessionResourceModifyItemModReq m_pDUSessionResourceModifyItemModReq( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceModifyItemModReq.pDUSessionResourceModifyRequestTransfer p_pDUSessionResourceModifyRequestTransfer, + in template (omit) NAS_PDU p_nAS_PDU := omit, + in template (omit) PDUSessionResourceModifyItemModReq.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + nAS_PDU := p_nAS_PDU, + pDUSessionResourceModifyRequestTransfer := p_pDUSessionResourceModifyRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceModifyItemModReq + + template (value) PDUSessionResourceModifyItemModReq.iE_Extensions m_pDUSessionResourceModifyItemModReq_id_S_NSSAI( + in template (value) S_NSSAI p_s_nSSAI + ) := { + { + id := id_S_NSSAI, + criticality := reject, + extensionValue := { S_NSSAI := p_s_nSSAI } + } + } // End of template m_pDUSessionResourceModifyItemModReq_id_S_NSSAI + + template (value) PDUSessionResourceModifyItemModReq.iE_Extensions m_pDUSessionResourceModifyItemModReq_id_PduSessionExpectedUEActivityBehaviour( + in template (value) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour + ) := { + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template m_pDUSessionResourceModifyItemModReq_id_PduSessionExpectedUEActivityBehaviour + + template (value) PDUSessionResourceModifyItemModReq.iE_Extensions m_pDUSessionResourceModifyItemModReq_full( + in template (value) S_NSSAI p_s_nSSAI, + in template (value) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour + ) := { + { + id := id_S_NSSAI, + criticality := reject, + extensionValue := { S_NSSAI := p_s_nSSAI } + }, + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template m_pDUSessionResourceModifyItemModReq_full + + template (omit) PDUSessionResourceModifyItemModRes m_pDUSessionResourceModifyItemModRes( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceModifyItemModRes.pDUSessionResourceModifyResponseTransfer p_pDUSessionResourceModifyResponseTransfer, + in template (omit) PDUSessionResourceModifyItemModRes.iE_Extensions p_iE_Extensions := omit + ) := { + + pDUSessionID := p_pDUSessionID, + pDUSessionResourceModifyResponseTransfer := p_pDUSessionResourceModifyResponseTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceModifyItemModRes + + template (omit) PDUSessionResourceModifyUnsuccessfulTransfer m_pDUSessionResourceModifyUnsuccessfulTransfer( + in template (value) Cause p_cause, + in template (omit) CriticalityDiagnostics p_criticalityDiagnostics := omit, + in template (omit) PDUSessionResourceModifyUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + cause := p_cause, + criticalityDiagnostics := p_criticalityDiagnostics, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceModifyUnsuccessfulTransfer + + template (omit) PDUSessionResourceNotifyItem m_pDUSessionResourceNotifyItem( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceNotifyItem.pDUSessionResourceNotifyTransfer p_pDUSessionResourceNotifyTransfer, + in template (omit) PDUSessionResourceNotifyItem.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceNotifyTransfer := p_pDUSessionResourceNotifyTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceNotifyItem + + template (omit) PDUSessionResourceNotifyReleasedTransfer m_pDUSessionResourceNotifyReleasedTransfer( + in template (value) Cause p_cause, + in template (omit) PDUSessionResourceNotifyReleasedTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceNotifyReleasedTransfer + + template (value) PDUSessionResourceNotifyReleasedTransfer.iE_Extensions m_pDUSessionResourceNotifyReleasedTransfer_id_SecondaryRATUsageInformation( + in template (value) SecondaryRATUsageInformation p_secondaryRATUsageInformation + ) := { + { + id := id_SecondaryRATUsageInformation, + criticality := ignore, + extensionValue := { SecondaryRATUsageInformation := p_secondaryRATUsageInformation } + } + } // End of template m_pDUSessionResourceNotifyReleasedTransfer_id_SecondaryRATUsageInformation + + template (omit) PDUSessionResourceNotifyTransfer m_pDUSessionResourceNotifyTransfer( + in template (omit) QosFlowNotifyList p_qosFlowNotifyList := omit, + in template (omit) QosFlowListWithCause p_qosFlowReleasedList := omit, + in template (omit) PDUSessionResourceNotifyTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowNotifyList := p_qosFlowNotifyList, + qosFlowReleasedList := p_qosFlowReleasedList, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceNotifyTransfer + + template (value) PDUSessionResourceNotifyTransfer.iE_Extensions m_pDUSessionResourceNotifyTransfer_id_SecondaryRATUsageInformation( + in template (value) SecondaryRATUsageInformation p_secondaryRATUsageInformation + ) := { + { + id := id_SecondaryRATUsageInformation, + criticality := ignore, + extensionValue := { SecondaryRATUsageInformation := p_secondaryRATUsageInformation } + } + } // End of template m_pDUSessionResourceNotifyReleasedTransfer_id_SecondaryRATUsageInformation + + template (value) PDUSessionResourceNotifyTransfer.iE_Extensions m_pDUSessionResourceNotifyTransfer_id_QosFlowFeedbackList( + in template (value) QosFlowFeedbackList p_qosFlowFeedbackList + ) := { + { + id := id_QosFlowFeedbackList, + criticality := ignore, + extensionValue := { QosFlowFeedbackList := p_qosFlowFeedbackList } + } + } // End of template m_pDUSessionResourceNotifyReleasedTransfer_id_QosFlowFeedbackList + + template (omit) PDUSessionResourceReleaseCommandTransfer m_pDUSessionResourceReleaseCommandTransfer( + in template (value) Cause p_cause, + in template (omit) PDUSessionResourceReleaseCommandTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceReleaseCommandTransfer + + template (omit) PDUSessionResourceReleasedItemNot m_pDUSessionResourceReleasedItemNot( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceReleasedItemNot.pDUSessionResourceNotifyReleasedTransfer p_pDUSessionResourceNotifyReleasedTransfer, + in template (omit) PDUSessionResourceReleasedItemNot.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceNotifyReleasedTransfer := p_pDUSessionResourceNotifyReleasedTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceReleasedItemNot + + template (omit) PDUSessionResourceReleasedItemPSAck m_pDUSessionResourceReleasedItemPSAck( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceReleasedItemPSAck.pathSwitchRequestUnsuccessfulTransfer p_pathSwitchRequestUnsuccessfulTransfer, + in template (omit) PDUSessionResourceReleasedItemPSAck.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pathSwitchRequestUnsuccessfulTransfer := p_pathSwitchRequestUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceReleasedItemPSAck + + template (omit) PDUSessionResourceReleasedItemPSFail m_pDUSessionResourceReleasedItemPSFail( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceReleasedItemPSFail.pathSwitchRequestUnsuccessfulTransfer p_pathSwitchRequestUnsuccessfulTransfer, + in template (omit) PDUSessionResourceReleasedItemPSFail.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pathSwitchRequestUnsuccessfulTransfer := p_pathSwitchRequestUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceReleasedItemPSFail + + template (omit) PDUSessionResourceReleasedItemRelRes m_pDUSessionResourceReleasedItemRelRes( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceReleasedItemRelRes.pDUSessionResourceReleaseResponseTransfer p_pDUSessionResourceReleaseResponseTransfer, + in template (omit) PDUSessionResourceReleasedItemRelRes.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceReleaseResponseTransfer := p_pDUSessionResourceReleaseResponseTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceReleasedItemRelRes + + template (omit) PDUSessionResourceReleaseResponseTransfer m_pDUSessionResourceReleaseResponseTransfer( + in template (omit) PDUSessionResourceReleaseResponseTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceReleaseResponseTransfer + + template (value) PDUSessionResourceNotifyTransfer.iE_Extensions m_pDUSessionResourceReleaseResponseTransfer_id_SecondaryRATUsageInformation( + in template (value) SecondaryRATUsageInformation p_secondaryRATUsageInformation + ) := { + { + id := id_SecondaryRATUsageInformation, + criticality := ignore, + extensionValue := { SecondaryRATUsageInformation := p_secondaryRATUsageInformation } + } + } // End of template m_pDUSessionResourceReleaseResponseTransfer_id_SecondaryRATUsageInformation + + template (omit) PDUSessionResourceResumeItemRESReq m_pDUSessionResourceResumeItemRESReq( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceResumeItemRESReq.uEContextResumeRequestTransfer p_uEContextResumeRequestTransfer, + in template (omit) PDUSessionResourceResumeItemRESReq.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + uEContextResumeRequestTransfer := p_uEContextResumeRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceResumeItemRESReq + + template (omit) PDUSessionResourceResumeItemRESRes m_pDUSessionResourceResumeItemRESRes( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceResumeItemRESRes.uEContextResumeResponseTransfer p_uEContextResumeResponseTransfer, + in template (omit) PDUSessionResourceResumeItemRESRes.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + uEContextResumeResponseTransfer := p_uEContextResumeResponseTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceResumeItemRESRes + + template (omit) PDUSessionResourceSecondaryRATUsageItem m_pPDUSessionResourceSecondaryRATUsageItem( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceSecondaryRATUsageItem.secondaryRATDataUsageReportTransfer p_secondaryRATDataUsageReportTransfer, + in template (omit) PDUSessionResourceSecondaryRATUsageItem.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + secondaryRATDataUsageReportTransfer := p_secondaryRATDataUsageReportTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pPDUSessionResourceSecondaryRATUsageItem + + template (omit) PDUSessionResourceSetupItemCxtReq m_pDUSessionResourceSetupItemCxtReq( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) S_NSSAI p_s_NSSAI, + in template (value) PDUSessionResourceSetupItemCxtReq.pDUSessionResourceSetupRequestTransfer p_pDUSessionResourceSetupRequestTransfer, + in template (omit) NAS_PDU p_nAS_PDU := omit, + in template (omit) PDUSessionResourceSetupItemCxtReq.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + nAS_PDU := p_nAS_PDU, + s_NSSAI := p_s_NSSAI, + pDUSessionResourceSetupRequestTransfer := p_pDUSessionResourceSetupRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceSetupItemCxtReq + + template (value) PDUSessionResourceSetupItemCxtReq.iE_Extensions m_pDUSessionResourceSetupItemCxtReq_id_PduSessionExpectedUEActivityBehaviour( + in template (value) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour + ) := { + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template m_pDUSessionResourceSetupItemCxtReq_id_PduSessionExpectedUEActivityBehaviour + + template (omit) PDUSessionResourceSetupItemCxtRes m_pDUSessionResourceSetupItemCxtRes( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceSetupItemCxtRes.pDUSessionResourceSetupResponseTransfer p_pDUSessionResourceSetupResponseTransfer, + in template (omit) PDUSessionResourceSetupItemCxtRes.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceSetupResponseTransfer := p_pDUSessionResourceSetupResponseTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceSetupItemCxtRes + + template (omit) PDUSessionResourceSetupItemHOReq m_pDUSessionResourceSetupItemHOReq( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) S_NSSAI p_s_NSSAI, + in template (value) PDUSessionResourceSetupItemHOReq.handoverRequestTransfer p_handoverRequestTransfer, + in template (omit) PDUSessionResourceSetupItemHOReq.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + s_NSSAI := p_s_NSSAI, + handoverRequestTransfer := p_handoverRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceSetupItemHOReq + + template (value) PDUSessionResourceSetupItemHOReq.iE_Extensions m_pDUSessionResourceSetupItemHOReq_id_PduSessionExpectedUEActivityBehaviour( + in template (value) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour + ) := { + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template m_pDUSessionResourceSetupItemCxtReq_id_PduSessionExpectedUEActivityBehaviour + + template (omit) PDUSessionResourceSetupItemSUReq m_pDUSessionResourceSetupItemSUReq( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) S_NSSAI p_s_NSSAI, + in template (value) PDUSessionResourceSetupItemSUReq.pDUSessionResourceSetupRequestTransfer p_pDUSessionResourceSetupRequestTransfer, + in template (omit) NAS_PDU p_pDUSessionNAS_PDU := omit, + in template (omit) PDUSessionResourceSetupItemSUReq.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionNAS_PDU := p_pDUSessionNAS_PDU, + s_NSSAI := p_s_NSSAI, + pDUSessionResourceSetupRequestTransfer := p_pDUSessionResourceSetupRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceSetupItemSUReq + + template (value) PDUSessionResourceSetupItemSUReq.iE_Extensions m_pDUSessionResourceSetupItemSUReq_id_PduSessionExpectedUEActivityBehaviour( + in template (value) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour + ) := { + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template m_pDUSessionResourceSetupItemSUReq_id_PduSessionExpectedUEActivityBehaviour + + template (omit) PDUSessionResourceSetupItemSURes m_pDUSessionResourceSetupItemSURes( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceSetupItemSURes.pDUSessionResourceSetupResponseTransfer p_pDUSessionResourceSetupResponseTransfer, + in template (omit) PDUSessionResourceSetupItemSURes.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceSetupResponseTransfer := p_pDUSessionResourceSetupResponseTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceSetupItemSURes + + template (value) PDUSessionResourceSetupRequestTransfer m_pDUSessionResourceSetupRequestTransfer( + in template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs p_protocolIEs + ) := { + protocolIEs := p_protocolIEs + } // End of template m_pDUSessionResourceSetupRequestTransfer + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_mandatories( + in template (value) PDUSessionType p_pDUSessionType, + in template (value) QosFlowSetupRequestList p_qosFlowSetupRequestList, + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_PDUSessionType, + criticality := reject, + value_ := { PDUSessionType := p_pDUSessionType } + }, + { + id := id_QosFlowSetupRequestList, + criticality := reject, + value_ := { QosFlowSetupRequestList := p_qosFlowSetupRequestList } + }, + { + id := id_UL_NGU_UP_TNLInformation, + criticality := reject, + value_ := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_mandatories + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_handover( + in template (value) PDUSessionType p_pDUSessionType, + in template (value) QosFlowSetupRequestList p_qosFlowSetupRequestList, + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation, + in template (value) DataForwardingNotPossible p_dataForwardingNotPossible, + in template (value) SecurityIndication p_securityIndication + ) := { + { + id := id_PDUSessionType, + criticality := reject, + value_ := { PDUSessionType := p_pDUSessionType } + }, + { + id := id_QosFlowSetupRequestList, + criticality := reject, + value_ := { QosFlowSetupRequestList := p_qosFlowSetupRequestList } + }, + { + id := id_UL_NGU_UP_TNLInformation, + criticality := reject, + value_ := { UPTransportLayerInformation := p_uPTransportLayerInformation } + }, + { + id := id_DataForwardingNotPossible, + criticality := reject, + value_ := { DataForwardingNotPossible := p_dataForwardingNotPossible } + }, + { + id := id_SecurityIndication, + criticality := reject, + value_ := { SecurityIndication := p_securityIndication } + } + + } // End of template m_pDUSessionResourceSetupRequestTransfer_handover + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_handover_1( + in template (value) PDUSessionType p_pDUSessionType, + in template (value) QosFlowSetupRequestList p_qosFlowSetupRequestList, + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation, + in template (value) DirectForwardingPathAvailability p_directForwardingPathAvailability + ) := { + { + id := id_PDUSessionType, + criticality := reject, + value_ := { PDUSessionType := p_pDUSessionType } + }, + { + id := id_QosFlowSetupRequestList, + criticality := reject, + value_ := { QosFlowSetupRequestList := p_qosFlowSetupRequestList } + }, + { + id := id_UL_NGU_UP_TNLInformation, + criticality := reject, + value_ := { UPTransportLayerInformation := p_uPTransportLayerInformation } + }, + { + id := id_DirectForwardingPathAvailability, + criticality := ignore, + value_ := { DirectForwardingPathAvailability := p_directForwardingPathAvailability } + } + + } // End of template m_pDUSessionResourceSetupRequestTransfer_handover_1 + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_PDUSessionAggregateMaximumBitRate( + in template (value) PDUSessionAggregateMaximumBitRate p_pDUSessionAggregateMaximumBitRate + ) := { + { + id := id_PDUSessionAggregateMaximumBitRate, + criticality := reject, + value_ := { PDUSessionAggregateMaximumBitRate := p_pDUSessionAggregateMaximumBitRate } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_PDUSessionAggregateMaximumBitRate + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_UL_NGU_UP_TNLInformation( + in template (value) UPTransportLayerInformationList p_uPTransportLayerInformationList + ) := { + { + id := id_UL_NGU_UP_TNLInformation, + criticality := reject, + value_ := { UPTransportLayerInformationList := p_uPTransportLayerInformationList } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_UL_NGU_UP_TNLInformation + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_DataForwardingNotPossible( + in template (value) DataForwardingNotPossible p_dataForwardingNotPossible + ) := { + { + id := id_DataForwardingNotPossible, + criticality := reject, + value_ := { DataForwardingNotPossible := p_dataForwardingNotPossible } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_DataForwardingNotPossible + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_PDUSessionType( + in template (value) PDUSessionType p_pDUSessionType + ) := { + { + id := id_PDUSessionType, + criticality := reject, + value_ := { PDUSessionType := p_pDUSessionType } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_PDUSessionType + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_SecurityIndication( + in template (value) SecurityIndication p_securityIndication + ) := { + { + id := id_SecurityIndication, + criticality := reject, + value_ := { SecurityIndication := p_securityIndication } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_SecurityIndication + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_NetworkInstance( + in template (value) NetworkInstance p_networkInstance + ) := { + { + id := id_NetworkInstance, + criticality := reject, + value_ := { NetworkInstance := p_networkInstance } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_NetworkInstance + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_QosFlowSetupRequestList( + in template (value) QosFlowSetupRequestList p_qosFlowSetupRequestList + ) := { + { + id := id_QosFlowSetupRequestList, + criticality := reject, + value_ := { QosFlowSetupRequestList := p_qosFlowSetupRequestList } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_QosFlowSetupRequestList + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_CommonNetworkInstance( + in template (value) CommonNetworkInstance p_commonNetworkInstance + ) := { + { + id := id_CommonNetworkInstance, + criticality := ignore, + value_ := { CommonNetworkInstance := p_commonNetworkInstance } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_CommonNetworkInstance + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_DirectForwardingPathAvailability( + in template (value) DirectForwardingPathAvailability p_directForwardingPathAvailability + ) := { + { + id := id_DirectForwardingPathAvailability, + criticality := ignore, + value_ := { DirectForwardingPathAvailability := p_directForwardingPathAvailability } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_DirectForwardingPathAvailability + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_RedundantUL_NGU_UP_TNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_RedundantUL_NGU_UP_TNLInformation, + criticality := reject, + value_ := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_RedundantUL_NGU_UP_TNLInformation + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_AdditionalRedundantUL_NGU_UP_TNLInformation( + in template (value) UPTransportLayerInformationList p_uPTransportLayerInformationList + ) := { + { + id := id_AdditionalRedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + value_ := { UPTransportLayerInformationList := p_uPTransportLayerInformationList } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_AdditionalRedundantUL_NGU_UP_TNLInformation + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_RedundantCommonNetworkInstancen( + in template (value) CommonNetworkInstance p_commonNetworkInstance + ) := { + { + id := id_RedundantCommonNetworkInstance, + criticality := ignore, + value_ := { CommonNetworkInstance := p_commonNetworkInstance } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_RedundantCommonNetworkInstance + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_RedundantPDUSessionInformation( + in template (value) RedundantPDUSessionInformation p_redundantPDUSessionInformation + ) := { + { + id := id_RedundantPDUSessionInformation, + criticality := ignore, + value_ := { RedundantPDUSessionInformation := p_redundantPDUSessionInformation } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_RedundantPDUSessionInformation + + template (value) PDUSessionResourceSetupRequestTransfer.protocolIEs m_pDUSessionResourceSetupRequestTransfer_id_MBSSessionSetupRequestList( + in template (value) MBSSessionSetupRequestList p_mBSSessionSetupRequestList + ) := { + { + id := id_MBSSessionSetupRequestList, + criticality := ignore, + value_ := { MBSSessionSetupRequestList := p_mBSSessionSetupRequestList } + } + } // End of template m_pDUSessionResourceSetupRequestTransfer_id_MBSSessionSetupRequestList + + template (omit) PDUSessionResourceSetupResponseTransfer m_pDUSessionResourceSetupResponseTransfer( + in template (value) QosFlowPerTNLInformation p_dLQosFlowPerTNLInformation, + in template (omit) QosFlowPerTNLInformationList p_additionalDLQosFlowPerTNLInformation := omit, + in template (omit) SecurityResult p_securityResult := omit, + in template (omit) QosFlowListWithCause p_qosFlowFailedToSetupList := omit, + in template (omit) PDUSessionResourceSetupResponseTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + dLQosFlowPerTNLInformation := p_dLQosFlowPerTNLInformation, + additionalDLQosFlowPerTNLInformation := p_additionalDLQosFlowPerTNLInformation, + securityResult := p_securityResult, + qosFlowFailedToSetupList := p_qosFlowFailedToSetupList, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceSetupResponseTransfer + + template (value) PDUSessionResourceSetupResponseTransfer.iE_Extensions m_pDUSessionResourceSetupResponseTransfer_id_RedundantDLQosFlowPerTNLInformation( + in template (value) QosFlowPerTNLInformation p_qosFlowPerTNLInformation + ) := { + { + id := id_RedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformation := p_qosFlowPerTNLInformation } + } + } // End of template m_pDUSessionResourceSetupResponseTransfer_id_RedundantDLQosFlowPerTNLInformation + + template (value) PDUSessionResourceSetupResponseTransfer.iE_Extensions m_pDUSessionResourceSetupResponseTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation( + in template (value) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList + ) := { + { + id := id_AdditionalRedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template m_pDUSessionResourceSetupResponseTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation + + template (value) PDUSessionResourceSetupResponseTransfer.iE_Extensions m_pDUSessionResourceSetupResponseTransfer_id_UsedRSNInformation( + in template (value) RedundantPDUSessionInformation p_redundantPDUSessionInformation + ) := { + { + id := id_UsedRSNInformation, + criticality := ignore, + extensionValue := { RedundantPDUSessionInformation := p_redundantPDUSessionInformation } + } + } // End of template m_pDUSessionResourceSetupResponseTransfer_id_UsedRSNInformation + + template (value) PDUSessionResourceSetupResponseTransfer.iE_Extensions m_pDUSessionResourceSetupResponseTransfer_id_GlobalRANNodeID( + in template (value) GlobalRANNodeID p_globalRANNodeID + ) := { + { + id := id_GlobalRANNodeID, + criticality := ignore, + extensionValue := { GlobalRANNodeID := p_globalRANNodeID } + } + } // End of template m_pDUSessionResourceSetupResponseTransfer_id_GlobalRANNodeID + + template (value) PDUSessionResourceSetupResponseTransfer.iE_Extensions m_pDUSessionResourceSetupResponseTransfer_id_MBS_SupportIndicator( + in template (value) MBS_SupportIndicator p_mBS_SupportIndicator + ) := { + { + id := id_MBS_SupportIndicator, + criticality := ignore, + extensionValue := { MBS_SupportIndicator := p_mBS_SupportIndicator } + } + } // End of template m_pDUSessionResourceSetupResponseTransfer_id_MBS_SupportIndicator + + template (value) PDUSessionResourceSetupResponseTransfer.iE_Extensions m_pDUSessionResourceSetupResponseTransfer_id_MBSSessionSetupResponseList( + in template (value) MBSSessionSetupResponseList p_mBSSessionSetupResponseList + ) := { + { + id := id_MBSSessionSetupResponseList, + criticality := ignore, + extensionValue := { MBSSessionSetupResponseList := p_mBSSessionSetupResponseList } + } + } // End of template m_pDUSessionResourceSetupResponseTransfer_id_MBSSessionSetupResponseList + + template (value) PDUSessionResourceSetupResponseTransfer.iE_Extensions m_pDUSessionResourceSetupResponseTransfer_id_MBSSessionFailedtoSetupList( + in template (value) MBSSessionFailedtoSetupList p_mBSSessionFailedtoSetupList + ) := { + { + id := id_MBSSessionFailedtoSetupList, + criticality := ignore, + extensionValue := { MBSSessionFailedtoSetupList := p_mBSSessionFailedtoSetupList } + } + } // End of template m_pDUSessionResourceSetupResponseTransfer_id_MBSSessionFailedtoSetupList + + template (omit) PDUSessionResourceSetupUnsuccessfulTransfer m_pDUSessionResourceSetupUnsuccessfulTransfer( + in template (value) Cause p_cause, + in template (omit) CriticalityDiagnostics p_criticalityDiagnostics := omit, + in template (omit) PDUSessionResourceSetupUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + cause := p_cause, + criticalityDiagnostics := p_criticalityDiagnostics, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceSetupUnsuccessfulTransfer + + template (omit) PDUSessionResourceSuspendItemSUSReq m_pDUSessionResourceSuspendItemSUSReq( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceSuspendItemSUSReq.uEContextSuspendRequestTransfer p_uEContextSuspendRequestTransfer, + in template (omit) PDUSessionResourceSuspendItemSUSReq.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + uEContextSuspendRequestTransfer := p_uEContextSuspendRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceSuspendItemSUSReq + + template (omit) PDUSessionResourceSwitchedItem m_pDUSessionResourceSwitchedItem( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceSwitchedItem.pathSwitchRequestAcknowledgeTransfer p_pathSwitchRequestAcknowledgeTransfer, + in template (omit) PDUSessionResourceSwitchedItem.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pathSwitchRequestAcknowledgeTransfer := p_pathSwitchRequestAcknowledgeTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceSwitchedItem + + template (value) PDUSessionResourceSwitchedItem.iE_Extensions m_pDUSessionResourceSwitchedItem_id_PduSessionExpectedUEActivityBehaviour( + in template (value) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour + ) := { + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template m_pDUSessionResourceSwitchedItem_id_PduSessionExpectedUEActivityBehaviour + + template (omit) PDUSessionResourceToBeSwitchedDLItem m_pDUSessionResourceToBeSwitchedDLItem( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceToBeSwitchedDLItem.pathSwitchRequestTransfer p_pathSwitchRequestTransfer, + in template (omit) PDUSessionResourceToBeSwitchedDLItem.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pathSwitchRequestTransfer := p_pathSwitchRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceToBeSwitchedDLItem + + template (omit) PDUSessionResourceToReleaseItemHOCmd m_pDUSessionResourceToReleaseItemHOCmd( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceToReleaseItemHOCmd.handoverPreparationUnsuccessfulTransfer p_handoverPreparationUnsuccessfulTransfer, + in template (omit) PDUSessionResourceToReleaseItemHOCmd.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + handoverPreparationUnsuccessfulTransfer := p_handoverPreparationUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceToReleaseItemHOCmd + + template (omit) PDUSessionResourceToReleaseItemRelCmd m_pDUSessionResourceToReleaseItemRelCmd( + in template (value) PDUSessionID p_pDUSessionID := PX_PDU_SESSION_ID, + in template (value) PDUSessionResourceToReleaseItemRelCmd.pDUSessionResourceReleaseCommandTransfer p_pDUSessionResourceReleaseCommandTransfer, + in template (omit) PDUSessionResourceToReleaseItemRelCmd.iE_Extensions p_iE_Extensions := omit + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceReleaseCommandTransfer := p_pDUSessionResourceReleaseCommandTransfer, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionResourceToReleaseItemRelCmd + + template (value) PDUSessionType m_pDUSessionType(in PDUSessionType p_value := ipv4) := p_value; + + template (omit) PDUSessionUsageReport m_pDUSessionUsageReport( + in template (value) PDUSessionUsageReport.rATType p_rATType := nr, + in template (value) VolumeTimedReportList p_pDUSessionTimedReportList, + in template (omit) PDUSessionUsageReport.iE_Extensions p_iE_Extensions := omit + ) := { + rATType := p_rATType, + pDUSessionTimedReportList := p_pDUSessionTimedReportList, + iE_Extensions := p_iE_Extensions + } // End of template m_pDUSessionUsageReport + + template (omit) PEIPSassistanceInformation m_pEIPSassistanceInformation( + in template (value)CNsubgroupID p_cNsubgroupID, + in template (omit) PEIPSassistanceInformation.iE_Extensions p_iE_Extensions := omit + ) := { + cNsubgroupID := p_cNsubgroupID, + iE_Extensions := p_iE_Extensions + } // End of template m_pEIPSassistanceInformation + + template (omit) PLMNAreaBasedQMC m_pLMNAreaBasedQMC( + in template (value) PLMNListforQMC p_plmnListforQMC, + in template (omit) PLMNAreaBasedQMC.iE_Extensions p_iE_Extensions := omit + ) := { + plmnListforQMC := p_plmnListforQMC, + iE_Extensions := p_iE_Extensions + } // End of template m_pLMNAreaBasedQMC + + template (omit) PLMNSupportItem m_pLMNSupportItem( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) SliceSupportList p_sliceSupportList, + in template (omit) PLMNSupportItem.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + sliceSupportList := p_sliceSupportList, + iE_Extensions := p_iE_Extensions + } // End of template m_pLMNSupportItem + + template (value) PLMNSupportItem.iE_Extensions m_pLMNSupportItem_id_NPN_Support( + in template (value) NPN_Support p_nPN_Support + ) := { + { + id := id_NPN_Support, + criticality := reject, + extensionValue := { NPN_Support := p_nPN_Support } + } + } // End of template m_pLMNSupportItem_id_NPN_Support + + template (value) PLMNSupportItem.iE_Extensions m_pLMNSupportItem_id_ExtendedSliceSupportList( + in template (value) ExtendedSliceSupportList p_extendedSliceSupportList + ) := { + { + id := id_ExtendedSliceSupportList, + criticality := reject, + extensionValue := { ExtendedSliceSupportList := p_extendedSliceSupportList } + } + } // End of template m_pLMNSupportItem_id_ExtendedSliceSupportList + + template (value) PLMNSupportItem.iE_Extensions m_pLMNSupportItem_id_OnboardingSupport( + in template (value) OnboardingSupport p_onboardingSupport + ) := { + { + id := id_OnboardingSupport, + criticality := ignore, + extensionValue := { OnboardingSupport := p_onboardingSupport } + } + } // End of template m_pLMNSupportItem_id_OnboardingSupport + + template (omit) PNI_NPN_MobilityInformation m_pNI_NPN_MobilityInformation( + in template (value) Allowed_PNI_NPN_List p_allowed_PNI_NPI_List, + in template (omit) PNI_NPN_MobilityInformation.iE_Extensions p_iE_Extensions := omit + ) := { + allowed_PNI_NPI_List := p_allowed_PNI_NPI_List, + iE_Extensions := p_iE_Extensions + } // End of template m_pNI_NPN_MobilityInformation + + template (value) Pre_emptionCapability m_pre_emptionCapability(in Pre_emptionCapability p_value := shall_not_trigger_pre_emption) := p_value; + + template (value) Pre_emptionVulnerability m_pre_emptionVulnerability(in Pre_emptionVulnerability p_value := not_pre_emptable) := p_value; + + template (value) PWSFailedCellIDList m_pWSFailedCellIDList_nR_CGI_PWSFailedList( + in template (value) NR_CGIList p_nR_CGI_PWSFailedList + ) := { + nR_CGI_PWSFailedList := p_nR_CGI_PWSFailedList + } // End of template m_pWSFailedCellIDList_nR_CGI_PWSFailedList + + template (value) PWSFailedCellIDList m_pWSFailedCellIDList_eUTRA_CGI_PWSFailedList( + in template (value) EUTRA_CGIList p_eUTRA_CGI_PWSFailedList + ) := { + eUTRA_CGI_PWSFailedList := p_eUTRA_CGI_PWSFailedList + } // End of template m_pWSFailedCellIDList_eUTRA_CGI_PWSFailedList + + template (value) PWSFailedCellIDList m_pWSFailedCellIDList_choice_Extensions( + in template (value) PWSFailedCellIDList.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_pWSFailedCellIDList_choice_Extensions + + template (omit) QMCConfigInfo m_qMCConfigInfo( + in template (value) UEAppLayerMeasInfoList p_uEAppLayerMeasInfoList, + in template (omit) QMCConfigInfo.iE_Extensions p_iE_Extensions := omit + ) := { + uEAppLayerMeasInfoList := p_uEAppLayerMeasInfoList, + iE_Extensions := p_iE_Extensions + } // End of template m_qMCConfigInfo + + template (omit) QMCDeactivation m_qMCDeactivation( + in template (value) QoEReferenceList p_qoEReferenceList, + in template (omit) QMCDeactivation.iE_Extensions p_iE_Extensions := omit + ) := { + qoEReferenceList := p_qoEReferenceList, + iE_Extensions := p_iE_Extensions + } // End of template m_qMCDeactivation + + template (value) QosCharacteristics m_qosCharacteristics_nonDynamic5QI( + in template (value) NonDynamic5QIDescriptor p_nonDynamic5QI + ) := { + nonDynamic5QI := p_nonDynamic5QI + } // End of template m_qosCharacteristics_nonDynamic5QI + + template (value) QosCharacteristics m_qosCharacteristics_dynamic5QI( + in template (value) Dynamic5QIDescriptor p_dynamic5QI + ) := { + dynamic5QI := p_dynamic5QI + } // End of template m_qosCharacteristics_dynamic5QI + + template (value) QosCharacteristics m_qosCharacteristics_choice_Extensions( + in template (value) QosCharacteristics.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_qosCharacteristics_choice_Extensions + + template (omit) QosFlowAcceptedItem m_qosFlowAcceptedItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (omit) QosFlowAcceptedItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template + + template (value) QosFlowAcceptedItem.iE_Extensions m_pLMNSupportItem_id_CurrentQoSParaSetIndex( + in template (value) AlternativeQoSParaSetIndex p_alternativeQoSParaSetIndex + ) := { + { + id := id_CurrentQoSParaSetIndex, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetIndex := p_alternativeQoSParaSetIndex } + } + } // End of template m_pLMNSupportItem_id_ExtendedSliceSupportList + + template (omit) QosFlowAddOrModifyRequestItem m_qosFlowAddOrModifyRequestItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (omit) QosFlowLevelQosParameters p_qosFlowLevelQosParameters := omit, + in template (omit) E_RAB_ID p_e_RAB_ID := omit, + in template (omit) QosFlowAddOrModifyRequestItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + qosFlowLevelQosParameters := p_qosFlowLevelQosParameters, + e_RAB_ID := p_e_RAB_ID, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowAddOrModifyRequestItem + + template (value) QosFlowAddOrModifyRequestItem.iE_Extensions m_qosFlowAddOrModifyRequestItem_id_TSCTrafficCharacteristics( + in template (value) TSCTrafficCharacteristics p_tSCTrafficCharacteristics + ) := { + { + id := id_TSCTrafficCharacteristics, + criticality := ignore, + extensionValue := { TSCTrafficCharacteristics := p_tSCTrafficCharacteristics } + } + } // End of template m_qosFlowAddOrModifyRequestItem_id_TSCTrafficCharacteristics + + template (value) QosFlowAddOrModifyRequestItem.iE_Extensions m_qosFlowAddOrModifyRequestItem_id_RedundantQosFlowIndicator( + in template (value) RedundantQosFlowIndicator p_redundantQosFlowIndicator + ) := { + { + id := id_RedundantQosFlowIndicator, + criticality := ignore, + extensionValue := { RedundantQosFlowIndicator := p_redundantQosFlowIndicator } + } + } // End of template m_qosFlowAddOrModifyRequestItem_id_RedundantQosFlowIndicator + + template (value) QosFlowAddOrModifyRequestItem.iE_Extensions m_qosFlowAddOrModifyRequestItem_full( + in template (value) TSCTrafficCharacteristics p_tSCTrafficCharacteristics, + in template (value) RedundantQosFlowIndicator p_redundantQosFlowIndicator + ) := { + { + id := id_TSCTrafficCharacteristics, + criticality := ignore, + extensionValue := { TSCTrafficCharacteristics := p_tSCTrafficCharacteristics } + }, + { + id := id_RedundantQosFlowIndicator, + criticality := ignore, + extensionValue := { RedundantQosFlowIndicator := p_redundantQosFlowIndicator } + } + } // End of template m_qosFlowAddOrModifyRequestItem_full + + template (omit) QosFlowAddOrModifyResponseItem m_qosFlowAddOrModifyResponseItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (omit) QosFlowAddOrModifyResponseItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowAddOrModifyResponseItem + + template (value) QosFlowAddOrModifyResponseItem.iE_Extensions m_qosFlowAddOrModifyResponseItem_id_CurrentQoSParaSetIndex( + in template (value) AlternativeQoSParaSetIndex p_alternativeQoSParaSetIndex + ) := { + { + id := id_CurrentQoSParaSetIndex, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetIndex := p_alternativeQoSParaSetIndex } + } + } // End of template m_qosFlowAddOrModifyResponseItem_id_CurrentQoSParaSetIndex + + template (omit) QosFlowFeedbackItem m_qosFlowFeedbackItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (omit) UpdateFeedback p_updateFeedback := omit, + in template (omit) ExtendedPacketDelayBudget p_cNpacketDelayBudgetDL := omit, + in template (omit) ExtendedPacketDelayBudget p_cNpacketDelayBudgetUL := omit, + in template (omit) QosFlowFeedbackItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + updateFeedback := p_updateFeedback, + cNpacketDelayBudgetDL := p_cNpacketDelayBudgetDL, + cNpacketDelayBudgetUL := p_cNpacketDelayBudgetUL, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowFeedbackItem + + template (omit) QosFlowInformationItem m_qosFlowInformationItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (omit) DLForwarding p_dLForwarding := omit, + in template (omit) QosFlowInformationItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + dLForwarding := p_dLForwarding, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowInformationItem + + template (value) QosFlowInformationItem.iE_Extensions m_qosFlowInformationItem_id_ULForwarding( + in template (value) ULForwarding p_uLForwarding + ) := { + { + id := id_ULForwarding, + criticality := ignore, + extensionValue := { ULForwarding := p_uLForwarding } + } + } // End of template m_qosFlowInformationItem_id_ULForwarding + + template (value) QosFlowInformationItem.iE_Extensions m_qosFlowInformationItem_id_SourceTNLAddrInfo( + in template (value) TransportLayerAddress p_transportLayerAddress := PX_SOURCE_TRANSPORT_LAYER_ADDRESS + ) := { + { + id := id_SourceTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress } + } + } // End of template m_qosFlowInformationItem_id_SourceTNLAddrInfo + + template (value) QosFlowInformationItem.iE_Extensions m_qosFlowInformationItem_id_SourceNodeTNLAddrInfo( + in template (value) TransportLayerAddress p_transportLayerAddress := PX_SOURCE_TRANSPORT_LAYER_ADDRESS + ) := { + { + id := id_SourceNodeTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress } + } + } // End of template m_qosFlowInformationItem_id_SourceNodeTNLAddrInfo + + template (omit) QosFlowLevelQosParameters m_qosFlowLevelQosParameters( + in template (value) QosCharacteristics p_qosCharacteristics, + in template (value) AllocationAndRetentionPriority p_allocationAndRetentionPriority, + in template (omit) GBR_QosInformation p_gBR_QosInformation := omit, + in template (omit) ReflectiveQosAttribute p_reflectiveQosAttribute := omit, + in template (omit) AdditionalQosFlowInformation p_additionalQosFlowInformation := omit, + in template (omit) QosFlowLevelQosParameters.iE_Extensions p_iE_Extensions := omit + ) := { + qosCharacteristics := p_qosCharacteristics, + allocationAndRetentionPriority := p_allocationAndRetentionPriority, + gBR_QosInformation := p_gBR_QosInformation, + reflectiveQosAttribute := p_reflectiveQosAttribute, + additionalQosFlowInformation := p_additionalQosFlowInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowLevelQosParameters + + template (value) QosFlowLevelQosParameters.iE_Extensions m_qosFlowLevelQosParameters_id_QosMonitoringRequest( + in template (value) QosMonitoringRequest p_qosMonitoringRequest + ) := { + { + id := id_QosMonitoringRequest, + criticality := ignore, + extensionValue := { QosMonitoringRequest := p_qosMonitoringRequest } + } + } // End of template m_qosFlowLevelQosParameters_id_QosMonitoringRequest + + template (value) QosFlowLevelQosParameters.iE_Extensions m_qosFlowLevelQosParameters_id_QosMonitoringReportingFrequency( + in template (value) QosMonitoringReportingFrequency p_qosMonitoringReportingFrequency + ) := { + { + id := id_QosMonitoringReportingFrequency, + criticality := ignore, + extensionValue := { QosMonitoringReportingFrequency := p_qosMonitoringReportingFrequency } + } + } // End of template m_qosFlowLevelQosParameters_id_QosMonitoringReportingFrequency + + template (value) QosFlowLevelQosParameters.iE_Extensions m_qosFlowLevelQosParameters_full( + in template (value) QosMonitoringRequest p_qosMonitoringRequest, + in template (value) QosMonitoringReportingFrequency p_qosMonitoringReportingFrequency + ) := { + { + id := id_QosMonitoringRequest, + criticality := ignore, + extensionValue := { QosMonitoringRequest := p_qosMonitoringRequest } + }, + { + id := id_QosMonitoringReportingFrequency, + criticality := ignore, + extensionValue := { QosMonitoringReportingFrequency := p_qosMonitoringReportingFrequency } + } + } // End of template m_qosFlowLevelQosParameters_full + + template (value) QosMonitoringRequest m_qosMonitoringRequest(in QosMonitoringRequest p_value := ul) := p_value; + + template (omit) QosFlowWithCauseItem m_qosFlowWithCauseItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (value) Cause p_cause, + in template (omit) QosFlowWithCauseItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowWithCauseItem + + template (omit) QosFlowModifyConfirmItem m_qosFlowModifyConfirmItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (omit) QosFlowModifyConfirmItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowModifyConfirmItem + + template (omit) QosFlowNotifyItem m_qosFlowNotifyItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (value) NotificationCause p_notificationCause, + in template (omit) QosFlowNotifyItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + notificationCause := p_notificationCause, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowNotifyItem + + template (value) QosFlowNotifyItem.iE_Extensions m_qosFlowNotifyItem_id_CurrentQoSParaSetIndex( + in template (value) AlternativeQoSParaSetNotifyIndex p_alternativeQoSParaSetNotifyIndex + ) := { + { + id := id_CurrentQoSParaSetIndex, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetNotifyIndex := p_alternativeQoSParaSetNotifyIndex } + } + } // End of template m_qosFlowNotifyItem_id_CurrentQoSParaSetIndex + + template (omit) QosFlowParametersItem m_qosFlowParametersItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (omit) AlternativeQoSParaSetList p_alternativeQoSParaSetList := omit, + in template (omit) QosFlowParametersItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + alternativeQoSParaSetList := p_alternativeQoSParaSetList, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowParametersItem + + template (value) QosFlowParametersItem.iE_Extensions m_qosFlowParametersItem_id_CNPacketDelayBudgetDL( + in template (value) ExtendedPacketDelayBudget p_extendedPacketDelayBudget + ) := { + { + id := id_CNPacketDelayBudgetDL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template m_qosFlowParametersItem_id_CNPacketDelayBudgetDL + + template (value) QosFlowParametersItem.iE_Extensions m_qosFlowParametersItem_id_CNPacketDelayBudgetUL( + in template (value) ExtendedPacketDelayBudget p_extendedPacketDelayBudget + ) := { + { + id := id_CNPacketDelayBudgetUL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template m_qosFlowParametersItem_id_CNPacketDelayBudgetUL + + template (value) QosFlowParametersItem.iE_Extensions m_qosFlowParametersItem_id_BurstArrivalTimeDownlink( + in template (value) BurstArrivalTime p_burstArrivalTime + ) := { + { + id := id_BurstArrivalTimeDownlink, + criticality := ignore, + extensionValue := { BurstArrivalTime := p_burstArrivalTime } + } + } // End of template m_qosFlowParametersItem_id_BurstArrivalTimeDownlink + + template (omit) QosFlowPerTNLInformation m_qosFlowPerTNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation, + in template (value) AssociatedQosFlowList p_associatedQosFlowList, + in template (omit) QosFlowPerTNLInformation.iE_Extensions p_iE_Extensions := omit + ) := { + uPTransportLayerInformation := p_uPTransportLayerInformation, + associatedQosFlowList := p_associatedQosFlowList, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowPerTNLInformation + + template (omit) QosFlowPerTNLInformationItem m_qosFlowPerTNLInformationItem( + in template (value) QosFlowPerTNLInformation p_qosFlowPerTNLInformation, + in template (omit) QosFlowPerTNLInformationItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowPerTNLInformation := p_qosFlowPerTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowPerTNLInformationItem + + template (omit) QosFlowSetupRequestItem m_qosFlowSetupRequestItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (value) QosFlowLevelQosParameters p_qosFlowLevelQosParameters, + in template (omit) E_RAB_ID p_e_RAB_ID := omit, + in template (omit) QosFlowSetupRequestItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + qosFlowLevelQosParameters := p_qosFlowLevelQosParameters, + e_RAB_ID := p_e_RAB_ID, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowSetupRequestItem + + template (value) QosFlowSetupRequestItem.iE_Extensions m_qosFlowSetupRequestItem_id_TSCTrafficCharacteristics( + in template (value) TSCTrafficCharacteristics p_tSCTrafficCharacteristics + ) := { + { + id := id_TSCTrafficCharacteristics, + criticality := ignore, + extensionValue := { TSCTrafficCharacteristics := p_tSCTrafficCharacteristics } + } + } // End of template m_qosFlowSetupRequestItem_id_TSCTrafficCharacteristics + + template (value) QosFlowSetupRequestItem.iE_Extensions m_qosFlowSetupRequestItem_id_RedundantQosFlowIndicator( + in template (value) RedundantQosFlowIndicator p_redundantQosFlowIndicator + ) := { + { + id := id_RedundantQosFlowIndicator, + criticality := ignore, + extensionValue := { RedundantQosFlowIndicator := p_redundantQosFlowIndicator } + } + } // End of template m_qosFlowSetupRequestItem_id_RedundantQosFlowIndicator + + template (value) QosFlowSetupRequestItem.iE_Extensions m_qosFlowSetupRequestItem_full( + in template (value) TSCTrafficCharacteristics p_tSCTrafficCharacteristics, + in template (value) RedundantQosFlowIndicator p_redundantQosFlowIndicator + ) := { + { + id := id_TSCTrafficCharacteristics, + criticality := ignore, + extensionValue := { TSCTrafficCharacteristics := p_tSCTrafficCharacteristics } + }, + { + id := id_RedundantQosFlowIndicator, + criticality := ignore, + extensionValue := { RedundantQosFlowIndicator := p_redundantQosFlowIndicator } + } + } // End of template m_qosFlowSetupRequestItem_full + + template (omit) QosFlowItemWithDataForwarding m_qosFlowItemWithDataForwarding( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (omit) DataForwardingAccepted p_dataForwardingAccepted := omit, + in template (omit) QosFlowItemWithDataForwarding.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + dataForwardingAccepted := p_dataForwardingAccepted, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowItemWithDataForwarding + + template (value) QosFlowItemWithDataForwarding.iE_Extensions m_qosFlowItemWithDataForwarding_id_CurrentQoSParaSetIndex( + in template (value) AlternativeQoSParaSetIndex p_alternativeQoSParaSetIndex + ) := { + { + id := id_CurrentQoSParaSetIndex, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetIndex := p_alternativeQoSParaSetIndex } + } + } // End of template m_qosFlowItemWithDataForwarding_id_CurrentQoSParaSetIndex + + template (omit) QosFlowToBeForwardedItem m_qosFlowToBeForwardedItem( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (omit) QosFlowToBeForwardedItem.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template m_qosFlowToBeForwardedItem + + template (omit) QoSFlowsUsageReport_Item m_qoSFlowsUsageReport_Item( + in template (value) QosFlowIdentifier p_qosFlowIdentifier := PX_QOS_FLOW_IDENTIFIER, + in template (value) QoSFlowsUsageReport_Item.rATType p_rATType := nr, + in template (value) VolumeTimedReportList p_qoSFlowsTimedReportList, + in template (omit) QoSFlowsUsageReport_Item.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + rATType := p_rATType, + qoSFlowsTimedReportList := p_qoSFlowsTimedReportList, + iE_Extensions := p_iE_Extensions + } // End of template m_qoSFlowsUsageReport_Item + + template (value) Range m_range(in Range p_value := m50) := p_value; + + template (omit) RANStatusTransfer_TransparentContainer m_rANStatusTransfer_TransparentContainer( + in template (value) DRBsSubjectToStatusTransferList p_dRBsSubjectToStatusTransferList, + in template (omit) RANStatusTransfer_TransparentContainer.iE_Extensions p_iE_Extensions := omit + ) := { + dRBsSubjectToStatusTransferList := p_dRBsSubjectToStatusTransferList, + iE_Extensions := p_iE_Extensions + } // End of template m_rANStatusTransfer_TransparentContainer + + template (value) RAT_Information m_rAT_Information(in RAT_Information p_value := unlicensed) := p_value; + + template (omit) RATRestrictions_Item m_rATRestrictions_Item( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) RATRestrictionInformation p_rATRestrictionInformation, + in template (omit) RATRestrictions_Item.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + rATRestrictionInformation := p_rATRestrictionInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_rATRestrictions_Item + + template (value) RATRestrictions_Item.iE_Extensions m_rATRestrictions_Item_id_ExtendedRATRestrictionInformation( + in template (value) ExtendedRATRestrictionInformation p_extendedRATRestrictionInformation + ) := { + { + id := id_ExtendedRATRestrictionInformation, + criticality := ignore, + extensionValue := { ExtendedRATRestrictionInformation := p_extendedRATRestrictionInformation } + } + } // End of template m_rATRestrictions_Item_id_ExtendedRATRestrictionInformation + + template (omit) RecommendedCellsForPaging m_recommendedCellsForPaging( + in template (value) RecommendedCellList p_recommendedCellList, + in template (omit) RecommendedCellsForPaging.iE_Extensions p_iE_Extensions := omit + ) := { + recommendedCellList := p_recommendedCellList, + iE_Extensions := p_iE_Extensions + } // End of template m_recommendedCellsForPaging + + template (omit) RecommendedCellItem m_recommendedCellItem( + in template (value) NGRAN_CGI p_nGRAN_CGI, + in template (omit) RecommendedCellItem.timeStayedInCell p_timeStayedInCell := omit, + in template (omit) RecommendedCellItem.iE_Extensions p_iE_Extensions := omit + ) := { + nGRAN_CGI := p_nGRAN_CGI, + timeStayedInCell := p_timeStayedInCell, + iE_Extensions := p_iE_Extensions + } // End of template m_recommendedCellItem + + template (omit) RecommendedRANNodesForPaging m_recommendedRANNodesForPaging( + in template (value) RecommendedRANNodeList p_recommendedRANNodeList, + in template (omit) RecommendedRANNodesForPaging.iE_Extensions p_iE_Extensions := omit + ) := { + recommendedRANNodeList := p_recommendedRANNodeList, + iE_Extensions := p_iE_Extensions + } // End of template m_recommendedRANNodesForPaging + + template (omit) RecommendedRANNodeItem m_recommendedRANNodeItem( + in template (value) AMFPagingTarget p_aMFPagingTarget, + in template (omit) RecommendedRANNodeItem.iE_Extensions p_iE_Extensions := omit + ) := { + aMFPagingTarget := p_aMFPagingTarget, + iE_Extensions := p_iE_Extensions + } // End of template m_recommendedRANNodeItem + + template (value) RedCapIndication m_redCapIndication(in RedCapIndication p_value := redcap) := p_value; + + template (value) RedirectionVoiceFallback m_redirectionVoiceFallback(in RedirectionVoiceFallback p_value := possible) := p_value; + + template (omit) RedundantPDUSessionInformation m_redundantPDUSessionInformation( + in template (value) RSN p_rSN, + in template (omit) RedundantPDUSessionInformation.iE_Extensions p_iE_Extensions := omit + ) := { + rSN := p_rSN, + iE_Extensions := p_iE_Extensions + } // End of template m_redundantPDUSessionInformation + + template (value) RedundantPDUSessionInformation.iE_Extensions m_redundantPDUSessionInformation_id_PDUSessionPairID( + in template (value) PDUSessionPairID p_pDUSessionPairID + ) := { + { + id := id_PDUSessionPairID, + criticality := ignore, + extensionValue := { PDUSessionPairID := p_pDUSessionPairID } + } + } // End of template m_redundantPDUSessionInformation_id_PDUSessionPairID + + template (value) RedundantQosFlowIndicator m_RedundantQosFlowIndicator(in RedundantQosFlowIndicator p_value := true_) := p_value; + + template (value) ReflectiveQosAttribute m_reflectiveQosAttribute(in ReflectiveQosAttribute p_value := subject_to) := p_value; + + template (value) ReportArea m_reportArea(in ReportArea p_value := cell) := p_value; + + template (value) ResetAll m_resetAll(in ResetAll p_value := reset_all) := p_value; + + template (value) ReportAmountMDT m_reportAmountMDT(in ReportAmountMDT p_value := r1) := p_value; + + template (value) ReportIntervalMDT m_reportIntervalMDT(in ReportIntervalMDT p_value := ms120) := p_value; + + template (value) ExtendedReportIntervalMDT m_extendedReportIntervalMDT(in ExtendedReportIntervalMDT p_value := ms20480) := p_value; + + template (value) ResetType m_resetType_nG_Interface( + in template (value) ResetAll p_nG_Interface + ) := { + nG_Interface := p_nG_Interface + } // End of template m_resetType_nG_Interface + + template (value) ResetType m_resetType_partOfNG_Interface( + in template (value) UE_associatedLogicalNG_connectionList p_partOfNG_Interface + ) := { + partOfNG_Interface := p_partOfNG_Interface + } // End of template m_resetType_partOfNG_Interface + + template (value) ResetType m_resetType_choice_Extensions( + in template (value) ResetType.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_resetType_choice_Extensions + + template (value) RRCEstablishmentCause m_rRCEstablishmentCause(in RRCEstablishmentCause p_value := emergency) := p_value; + + template (value) RRCInactiveTransitionReportRequest m_rRCInactiveTransitionReportRequest(in RRCInactiveTransitionReportRequest p_value := subsequent_state_transition_report) := p_value; + + template (value) RRCState m_rRCState(in RRCState p_value := inactive) := p_value; + + template (value) RSN m_rSN(in RSN p_value := v1) := p_value; + + template (omit) RIMInformationTransfer m_rIMInformationTransfer( + in template (value) TargetRANNodeID_RIM p_targetRANNodeID_RIM, + in template (value) SourceRANNodeID p_sourceRANNodeID, + in template (value) RIMInformation p_rIMInformation, + in template (omit) RIMInformationTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + targetRANNodeID_RIM := p_targetRANNodeID_RIM, + sourceRANNodeID := p_sourceRANNodeID, + rIMInformation := p_rIMInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_rIMInformationTransfer + + template (omit) RIMInformation m_rIMInformation( + in template (value) GNBSetID p_targetgNBSetID, + in template (value) RIMInformation.rIM_RSDetection p_rIM_RSDetection := rs_detected, + in template (omit) RIMInformation.iE_Extensions p_iE_Extensions := omit + ) := { + targetgNBSetID := p_targetgNBSetID, + rIM_RSDetection := p_rIM_RSDetection, + iE_Extensions := p_iE_Extensions + } // End of template m_rIMInformation + + template (omit) ScheduledCommunicationTime m_scheduledCommunicationTime( + in template (omit) ScheduledCommunicationTime.dayofWeek p_dayofWeek := omit, + in template (omit) ScheduledCommunicationTime.timeofDayStart p_timeofDayStart := omit, + in template (omit) ScheduledCommunicationTime.timeofDayEnd p_timeofDayEnd := omit, + in template (omit) ScheduledCommunicationTime.iE_Extensions p_iE_Extensions := omit + ) := { + dayofWeek := p_dayofWeek, + timeofDayStart := p_timeofDayStart, + timeofDayEnd := p_timeofDayEnd, + iE_Extensions := p_iE_Extensions + } // End of template m_scheduledCommunicationTime + + template (omit) SecondaryRATUsageInformation m_secondaryRATUsageInformation( + in template (omit) PDUSessionUsageReport p_pDUSessionUsageReport := omit, + in template (omit) QoSFlowsUsageReportList p_qosFlowsUsageReportList := omit, + in template (omit) SecondaryRATUsageInformation.iE_Extension p_iE_Extensions := omit + ) := { + pDUSessionUsageReport := p_pDUSessionUsageReport, + qosFlowsUsageReportList := p_qosFlowsUsageReportList, + iE_Extension := p_iE_Extensions + } // End of template m_secondaryRATUsageInformation + + template (omit) SecondaryRATDataUsageReportTransfer m_secondaryRATDataUsageReportTransfer( + in template (omit) SecondaryRATUsageInformation p_secondaryRATUsageInformation := omit, + in template (omit) SecondaryRATDataUsageReportTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + secondaryRATUsageInformation := p_secondaryRATUsageInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_secondaryRATDataUsageReportTransfer + + template (omit) SecurityContext m_securityContext( + in template (value) NextHopChainingCount p_nextHopChainingCount := PX_NEXT_HOP_CHAINING_COUNT, + in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH, + in template (omit) SecurityContext.iE_Extensions p_iE_Extensions := omit + ) := { + nextHopChainingCount := p_nextHopChainingCount, + nextHopNH := p_nextHopNH, + iE_Extensions := p_iE_Extensions + } // End of template m_securityContext + + template (omit) SecurityIndication m_securityIndication( + in template (value) IntegrityProtectionIndication p_integrityProtectionIndication, + in template (value) ConfidentialityProtectionIndication p_confidentialityProtectionIndication, + in template (omit) MaximumIntegrityProtectedDataRate p_maximumIntegrityProtectedDataRate_UL := omit, + in template (omit) SecurityIndication.iE_Extensions p_iE_Extensions := omit + ) := { + integrityProtectionIndication := p_integrityProtectionIndication, + confidentialityProtectionIndication := p_confidentialityProtectionIndication, + maximumIntegrityProtectedDataRate_UL := p_maximumIntegrityProtectedDataRate_UL, + // The above IE shall be present if integrity protection is required or preferred + iE_Extensions := p_iE_Extensions + } // End of template m_securityIndication + + template (value) SecurityIndication.iE_Extensions m_securityIndication_id_MaximumIntegrityProtectedDataRate_DL( + in template (value) MaximumIntegrityProtectedDataRate p_maximumIntegrityProtectedDataRate + ) := { + { + id := id_MaximumIntegrityProtectedDataRate_DL, + criticality := ignore, + extensionValue := { MaximumIntegrityProtectedDataRate := p_maximumIntegrityProtectedDataRate } + } + } // End of template m_securityIndication_id_MaximumIntegrityProtectedDataRate_DL + + template (omit) SecurityResult m_securityResult( + in template (value) IntegrityProtectionResult p_integrityProtectionResult, + in template (value) ConfidentialityProtectionResult p_confidentialityProtectionResult, + in template (omit) SecurityResult.iE_Extensions p_iE_Extensions := omit + ) := { + integrityProtectionResult := p_integrityProtectionResult, + confidentialityProtectionResult := p_confidentialityProtectionResult, + iE_Extensions := p_iE_Extensions + } // End of template m_securityResult + + template (omit) SensorMeasurementConfiguration m_sensorMeasurementConfiguration( + in template (value) SensorMeasConfig p_sensorMeasConfig, + in template (omit) SensorMeasConfigNameList p_sensorMeasConfigNameList := omit, + in template (omit) SensorMeasurementConfiguration.iE_Extensions p_iE_Extensions := omit + ) := { + sensorMeasConfig := p_sensorMeasConfig, + sensorMeasConfigNameList := p_sensorMeasConfigNameList, + iE_Extensions := p_iE_Extensions + } // End of template m_sensorMeasurementConfiguration + + template (omit) SensorMeasConfigNameItem m_sensorMeasConfigNameItem( + in template (value) SensorNameConfig p_sensorNameConfig, + in template (omit) SensorMeasConfigNameItem.iE_Extensions p_iE_Extensions := omit + ) := { + sensorNameConfig := p_sensorNameConfig, + iE_Extensions := p_iE_Extensions + } // End of template m_sensorMeasConfigNameItem + + template (value) SensorMeasConfig m_sensorMeasConfig(in SensorMeasConfig p_value := setup) := p_value; + + template (value) SensorNameConfig m_sensorNameConfig_uncompensatedBarometricConfig( + in template (value) SensorNameConfig.uncompensatedBarometricConfig p_uncompensatedBarometricConfig := true_ + ) := { + uncompensatedBarometricConfig := p_uncompensatedBarometricConfig + } // End of template m_sensorNameConfig_uncompensatedBarometricConfig + + template (value) SensorNameConfig m_sensorNameConfig_ueSpeedConfig( + in template (value) SensorNameConfig.ueSpeedConfig p_ueSpeedConfig := true_ + ) := { + ueSpeedConfig := p_ueSpeedConfig + } // End of template m_sensorNameConfig_ueSpeedConfig + + template (value) SensorNameConfig m_sensorNameConfig_ueOrientationConfig( + in template (value) SensorNameConfig.ueOrientationConfig p_ueOrientationConfig := true_ + ) := { + ueOrientationConfig := p_ueOrientationConfig + } // End of template m_sensorNameConfig_ueOrientationConfig + + template (value) SensorNameConfig m_sensorNameConfig_choice_Extensions( + in template (value) SensorNameConfig.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_sensorNameConfig_choice_Extensions + + template (omit) ServedGUAMIItem m_servedGUAMIItem( + in template (value) GUAMI p_gUAMI, + in template (omit) AMFName p_backupAMFName := omit, + in template (omit) ServedGUAMIItem.iE_Extensions p_iE_Extensions := omit + ) := { + gUAMI := p_gUAMI, + backupAMFName := p_backupAMFName, + iE_Extensions := p_iE_Extensions + } // End of template m_servedGUAMIItem + + template (value) ServedGUAMIItem.iE_Extensions m_servedGUAMIItem_id_GUAMIType( + in template (value) GUAMIType p_gUAMIType + ) := { + { + id := id_GUAMIType, + criticality := ignore, + extensionValue := { GUAMIType := p_gUAMIType } + } + } // End of template m_servedGUAMIItem_id_GUAMIType + + template (omit) ServiceAreaInformation_Item m_serviceAreaInformation_Item( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (omit) AllowedTACs p_allowedTACs := omit, + in template (omit) NotAllowedTACs p_notAllowedTACs := omit, + in template (omit) ServiceAreaInformation_Item.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + allowedTACs := p_allowedTACs, + notAllowedTACs := p_notAllowedTACs, + iE_Extensions := p_iE_Extensions + } // End of template m_serviceAreaInformation_Item + + template (value) ServiceType m_serviceType(in ServiceType p_value := streaming) := p_value; + + template (omit) SharedNGU_MulticastTNLInformation m_sharedNGU_MulticastTNLInformation( + in template (value) TransportLayerAddress p_iP_MulticastAddress := PX_MC_TRANSPORT_LAYER_ADDRESS, + in template (value) TransportLayerAddress p_iP_SourceAddress := PX_SOURCE_TRANSPORT_LAYER_ADDRESS, + in template (value) GTP_TEID p_gTP_TEID := PX_GTP_TEID, + in template (omit) SharedNGU_MulticastTNLInformation.iE_Extensions p_iE_Extensions := omit + ) := { + iP_MulticastAddress := p_iP_MulticastAddress, + iP_SourceAddress := p_iP_SourceAddress, + gTP_TEID := p_gTP_TEID, + iE_Extensions := p_iE_Extensions + } // End of template m_sharedNGU_MulticastTNLInformation + + template (omit) SliceOverloadItem m_sliceOverloadItem( + in template (value) S_NSSAI p_s_NSSAI, + in template (omit) SliceOverloadItem.iE_Extensions p_iE_Extensions := omit + ) := { + s_NSSAI := p_s_NSSAI, + iE_Extensions := p_iE_Extensions + } // End of template m_sliceOverloadItem + + template (omit) SliceSupportItem m_sliceSupportItem( + in template (value) S_NSSAI p_s_NSSAI, + in template (omit) SliceSupportItem.iE_Extensions p_iE_Extensions := omit + ) := { + s_NSSAI := p_s_NSSAI, + iE_Extensions := p_iE_Extensions + } // End of template m_sliceSupportItem + + template (omit) SliceSupportQMC_Item m_sliceSupportQMC_Item( + in template (value) S_NSSAI p_s_NSSAI, + in template (omit) SliceSupportQMC_Item.iE_Extensions p_iE_Extensions := omit + ) := { + s_NSSAI := p_s_NSSAI, + iE_Extensions := p_iE_Extensions + } // End of template m_sliceSupportQMC_Item + + template (omit) SNPN_MobilityInformation m_sNPN_MobilityInformation( + in template (value) NID p_serving_NID, + in template (omit) SNPN_MobilityInformation.iE_Extensions p_iE_Extensions := omit + ) := { + serving_NID := p_serving_NID, + iE_Extensions := p_iE_Extensions + } // End of template m_sNPN_MobilityInformation + + template (omit) S_NSSAI m_s_NSSAI( + in template (value) SST p_sST := PX_SST, + in template (omit) SD p_sD := omit, + in template (omit) S_NSSAI.iE_Extensions p_iE_Extensions := omit + ) := { + sST := p_sST, + sD := p_sD, + iE_Extensions := p_iE_Extensions + } // End of template m_s_NSSAI + + template (omit) SONConfigurationTransfer m_sONConfigurationTransfer( + in template (value) TargetRANNodeID_SON p_targetRANNodeID_SON, + in template (value) SourceRANNodeID p_sourceRANNodeID, + in template (value) SONInformation p_sONInformation, + in template (omit) XnTNLConfigurationInfo p_xnTNLConfigurationInfo := omit, + in template (omit) SONConfigurationTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + targetRANNodeID_SON := p_targetRANNodeID_SON, + sourceRANNodeID := p_sourceRANNodeID, + sONInformation := p_sONInformation, + xnTNLConfigurationInfo := p_xnTNLConfigurationInfo, + // The above IE shall be present if the SON Information IE contains the SON Information Request IE set to “Xn TNL Configuration Info” + iE_Extensions := p_iE_Extensions + } // End of template m_sONConfigurationTransfer + + template (value) SONInformation m_sONInformation_sONInformationRequest( + in template (value) SONInformationRequest p_sONInformationRequest + ) := { + sONInformationRequest := p_sONInformationRequest + } // End of template m_sONInformation_sONInformationRequest + + template (value) SONInformation m_sONInformation_sONInformationReply( + in template (value) SONInformationReply p_sONInformationReply + ) := { + sONInformationReply := p_sONInformationReply + } // End of template m_sONInformation_sONInformationReply + + template (value) SONInformation m_sONInformation_choice_Extensions( + in template (value) SONInformation.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_sONInformation_choice_Extensions + + template (value) SONInformation.choice_Extensions m_sONInformatio_id_SONInformationReport( + in template (value) SONInformationReport p_sONInformationReport + ) := { + id := id_SONInformationReport, + criticality := ignore, + value_ := { SONInformationReport := p_sONInformationReport } + } // End of template m_sONInformatio_id_SONInformationReport + + template (omit) SONInformationReply m_sONInformationReply( + in template (omit) XnTNLConfigurationInfo p_xnTNLConfigurationInfo := omit, + in template (omit) SONInformationReply.iE_Extensions p_iE_Extensions := omit + ) := { + xnTNLConfigurationInfo := p_xnTNLConfigurationInfo, + iE_Extensions := p_iE_Extensions + } // End of template m_sONInformationReply + + template (value) SONInformationReport m_sONInformationReport_failureIndicationInformation( + in template (value) FailureIndication p_failureIndicationInformation + ) := { + failureIndicationInformation := p_failureIndicationInformation + } // End of template m_sONInformationReport_failureIndicationInformation + + template (value) SONInformationReport m_sONInformationReport_hOReportInformation( + in template (value) HOReport p_hOReportInformation + ) := { + hOReportInformation := p_hOReportInformation + } // End of template m_sONInformationReport_hOReportInformation + + template (value) SONInformationReport m_sONInformationReport_choice_Extensions( + in template (value) SONInformationReport.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_sONInformationReport_choice_Extensions + + template (value) SONInformationReport.choice_Extensions m_sONInformationReport_id_SONInformationReport( + in template (value) SuccessfulHandoverReportList p_successfulHandoverReportList + ) := { + id := id_SONInformationReport, + criticality := ignore, + value_ := { SuccessfulHandoverReportList := p_successfulHandoverReportList } + } // End of template m_sONInformationReport_id_SONInformationReport + + template (omit) SuccessfulHandoverReport_Item m_successfulHandoverReport_Item( + in template (value) octetstring p_successfulHOReportContainer, + in template (omit) SuccessfulHandoverReport_Item.iE_Extensions p_iE_Extensions := omit + ) := { + successfulHOReportContainer := p_successfulHOReportContainer, + iE_Extensions := p_iE_Extensions + } // End of template m_successfulHandoverReport_Item + + template (value) SONInformationRequest m_sONInformationRequest(in SONInformationRequest p_value := xn_TNL_configuration_info) := p_value; + + template (omit) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer( + in template (value) NGRAN_CGI p_targetCell_ID, + in template (value) RRCContainer p_rRCContainer, + in template (value) UEHistoryInformation p_uEHistoryInformation, + in template (omit) PDUSessionResourceInformationList p_pDUSessionResourceInformationList := omit, + in template (omit) E_RABInformationList p_e_RABInformationList := omit, + in template (omit) IndexToRFSP p_indexToRFSP := omit, + in template (omit) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions p_iE_Extensions := omit + ):= { + rRCContainer := p_rRCContainer, + pDUSessionResourceInformationList := p_pDUSessionResourceInformationList, + e_RABInformationList := p_e_RABInformationList, + targetCell_ID := p_targetCell_ID, + indexToRFSP := p_indexToRFSP, + uEHistoryInformation := p_uEHistoryInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer + + template (value) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_SgNB_UE_X2AP_ID( + in template (value) SgNB_UE_X2AP_ID p_sgNB_UE_X2AP_ID + ) := { + { + id := id_SgNB_UE_X2AP_ID, + criticality := ignore, + extensionValue := { SgNB_UE_X2AP_ID := p_sgNB_UE_X2AP_ID } + } + } // End of template m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_SgNB_UE_X2AP_ID + + template (value) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_UEHistoryInformationFromTheUE( + in template (value) UEHistoryInformationFromTheUE p_uEHistoryInformationFromTheUE + ) := { + { + id := id_UEHistoryInformationFromTheUE, + criticality := ignore, + extensionValue := { UEHistoryInformationFromTheUE := p_uEHistoryInformationFromTheUE } + } + } // End of template m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_UEHistoryInformationFromTheUE + + template (value) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_SourceNodeID( + in template (value) SourceNodeID p_sourceNodeID + ) := { + { + id := id_SourceNodeID, + criticality := ignore, + extensionValue := { SourceNodeID := p_sourceNodeID } + } + } // End of template m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_SourceNodeID + + template (value) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_UEContextReferenceAtSource( + in template (value) RAN_UE_NGAP_ID p_rAN_UE_NGAP_ID := PX_RAN_UE_NGAP_ID + ) := { + { + id := id_UEContextReferenceAtSource, + criticality := ignore, + extensionValue := { RAN_UE_NGAP_ID := p_rAN_UE_NGAP_ID } + } + } // End of template m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_UEContextReferenceAtSource + + template (value) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_MBS_ActiveSessionInformation_SourcetoTargetList( + in template (value) MBS_ActiveSessionInformation_SourcetoTargetList p_mBS_ActiveSessionInformation_SourcetoTargetListD + ) := { + { + id := id_MBS_ActiveSessionInformation_SourcetoTargetList, + criticality := ignore, + extensionValue := { MBS_ActiveSessionInformation_SourcetoTargetList := p_mBS_ActiveSessionInformation_SourcetoTargetListD } + } + } // End of template m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_MBS_ActiveSessionInformation_SourcetoTargetList + + template (value) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_QMCConfigInfo( + in template (value) QMCConfigInfo p_qMCConfigInfo + ) := { + { + id := id_QMCConfigInfo, + criticality := ignore, + extensionValue := { QMCConfigInfo := p_qMCConfigInfo } + } + } // End of template m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_QMCConfigInfo + + template (value) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_NGAPIESupportInformationRequestList( + in template (value) NGAPIESupportInformationRequestList p_nGAPIESupportInformationRequestList + ) := { + { + id := id_NGAPIESupportInformationRequestList, + criticality := ignore, + extensionValue := { NGAPIESupportInformationRequestList := p_nGAPIESupportInformationRequestList } + } + } // End of template m_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_NGAPIESupportInformationRequestList + + template (value) SourceNodeID m_sourceNodeID_sourceengNB_ID( + in template (value) GlobalGNB_ID p_sourceengNB_ID + ) := { + sourceengNB_ID := p_sourceengNB_ID + } // End of template m_sourceNodeID_sourceengNB_ID + + template (value) SourceNodeID m_sourceNodeID_choice_Extensions( + in template (value) SourceNodeID.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_sourceNodeID_choice_Extensions + + template (value) SourceOfUEActivityBehaviourInformation m_sourceOfUEActivityBehaviourInformation(in SourceOfUEActivityBehaviourInformation p_value := subscription_information) := p_value; + + template (omit) SourceRANNodeID m_sourceRANNodeID( + in template (value) GlobalRANNodeID p_globalRANNodeID, + in template (value) TAI p_selectedTAI, + in template (omit) SourceRANNodeID.iE_Extensions p_iE_Extensions := omit + ) := { + globalRANNodeID := p_globalRANNodeID, + selectedTAI := p_selectedTAI, + iE_Extensions := p_iE_Extensions + } // End of template m_sourceRANNodeID + + // This IE includes a transparent container from the source RAN node to the target RAN node. + // The octets of the OCTET STRING are encoded according to the specifications of the target system. + + template (omit) SourceToTarget_AMFInformationReroute m_sourceToTarget_AMFInformationReroute( + in template (omit) ConfiguredNSSAI p_configuredNSSAI := omit, + in template (omit) RejectedNSSAIinPLMN p_rejectedNSSAIinPLMN := omit, + in template (omit) RejectedNSSAIinTA p_rejectedNSSAIinTA := omit, + in template (omit) SourceToTarget_AMFInformationReroute.iE_Extensions p_iE_Extensions := omit + ) := { + configuredNSSAI := p_configuredNSSAI, + rejectedNSSAIinPLMN := p_rejectedNSSAIinPLMN, + rejectedNSSAIinTA := p_rejectedNSSAIinTA, + iE_Extensions := p_iE_Extensions + } // End of template m_sourceToTarget_AMFInformationReroute + + // This IE includes information from the source Core node to the target Core node for reroute information provide by NSSF. + // The octets of the OCTET STRING are encoded according to the specifications of the Core network. + + template (value) SRVCCOperationPossible m_sRVCCOperationPossible(in SRVCCOperationPossible p_value := possible) := p_value; + + template (omit) SupportedTAItem m_supportedTAItem( + in template (value) TAC p_tAC := PX_TACode, + in template (value) BroadcastPLMNList p_broadcastPLMNList, + in template (omit) SupportedTAItem.iE_Extensions p_iE_Extensions := omit + ) := { + tAC := p_tAC, + broadcastPLMNList := p_broadcastPLMNList, + iE_Extensions := p_iE_Extensions + } // End of template m_supportedTAItem + + template (value) SupportedTAItem.iE_Extensions m_supportedTAItem_id_ConfiguredTACIndication( + in template (value) ConfiguredTACIndication p_configuredTACIndication + ) := { + { + id := id_ConfiguredTACIndication, + criticality := ignore, + extensionValue := { ConfiguredTACIndication := p_configuredTACIndication } + } + } // End of template m_supportedTAItem_id_ConfiguredTACIndication + + template (value) SupportedTAItem.iE_Extensions m_supportedTAItem_id_RAT_Information( + in template (value) RAT_Information p_rAT_Information + ) := { + { + id := id_RAT_Information, + criticality := reject, + extensionValue := { RAT_Information := p_rAT_Information } + } + } // End of template m_supportedTAItem_id_RAT_Information + + template (value) SupportedTAItem.iE_Extensions m_supportedTAItem_full( + in template (value) ConfiguredTACIndication p_configuredTACIndication, + in template (value) RAT_Information p_rAT_Information + ) := { + { + id := id_ConfiguredTACIndication, + criticality := ignore, + extensionValue := { ConfiguredTACIndication := p_configuredTACIndication } + }, + { + id := id_RAT_Information, + criticality := reject, + extensionValue := { RAT_Information := p_rAT_Information } + } + } // End of template m_supportedTAItem_full + + template (value) SuspendIndicator m_suspendIndicator(in SuspendIndicator p_value := true_) := p_value; + + template (value) Suspend_Request_Indication m_suspend_Request_Indication(in Suspend_Request_Indication p_value := suspend_requested) := p_value; + + template (value) Suspend_Response_Indication m_suspend_Response_Indication(in Suspend_Response_Indication p_value := suspend_indicated) := p_value; + + template (omit) TAI m_tAI( + in template (value) PLMNIdentity p_pLMNIdentity := PX_PLMN_IDENTITY, + in template (value) TAC p_tAC := PX_TACode, + in template (omit) TAI.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNIdentity := p_pLMNIdentity, + tAC := p_tAC, + iE_Extensions := p_iE_Extensions + } // End of template m_tAI + + template (omit) TAIBroadcastEUTRA_Item m_tAIBroadcastEUTRA_Item( + in template (value) TAI p_tAI, + in template (value) CompletedCellsInTAI_EUTRA p_completedCellsInTAI_EUTRA, + in template (omit) TAIBroadcastEUTRA_Item.iE_Extensions p_iE_Extensions := omit + ) := { + tAI := p_tAI, + completedCellsInTAI_EUTRA := p_completedCellsInTAI_EUTRA, + iE_Extensions := p_iE_Extensions + } // End of template m_tAIBroadcastEUTRA_Item + + template (omit) TAIBroadcastNR_Item m_tAIBroadcastNR_Item( + in template (value) TAI p_tAI, + in template (value) CompletedCellsInTAI_NR p_completedCellsInTAI_NR, + in template (omit) TAIBroadcastNR_Item.iE_Extensions p_iE_Extensions := omit + ) := { + tAI := p_tAI, + completedCellsInTAI_NR := p_completedCellsInTAI_NR, + iE_Extensions := p_iE_Extensions + } // End of template m_tAIBroadcastNR_Item + + template (omit) TAICancelledEUTRA_Item m_tAICancelledEUTRA_Item( + in template (value) TAI p_tAI, + in template (value) CancelledCellsInTAI_EUTRA p_cancelledCellsInTAI_EUTRA, + in template (omit) TAICancelledEUTRA_Item.iE_Extensions p_iE_Extensions := omit + ) := { + tAI := p_tAI, + cancelledCellsInTAI_EUTRA := p_cancelledCellsInTAI_EUTRA, + iE_Extensions := p_iE_Extensions + } // End of template m_tAICancelledEUTRA_Item + + template (omit) TAICancelledNR_Item m_tAICancelledNR_Item( + in template (value) TAI p_tAI, + in template (value) CancelledCellsInTAI_NR p_cancelledCellsInTAI_NR, + in template (omit) TAICancelledNR_Item.iE_Extensions p_iE_Extensions := omit + ) := { + tAI := p_tAI, + cancelledCellsInTAI_NR := p_cancelledCellsInTAI_NR, + iE_Extensions := p_iE_Extensions + } // End of template m_tAICancelledNR_Item + + template (omit) TAIListForInactiveItem m_tAIListForInactiveItem( + in template (value) TAI p_tAI, + in template (omit) TAIListForInactiveItem.iE_Extensions p_iE_Extensions := omit + ) := { + tAI := p_tAI, + iE_Extensions := p_iE_Extensions + } // End of template m_tAIListForInactiveItem + + template (omit) TAIListForPagingItem m_tAIListForPagingItem( + in template (value) TAI p_tAI, + in template (omit) TAIListForPagingItem.iE_Extensions p_iE_Extensions := omit + ) := { + tAI := p_tAI, + iE_Extensions := p_iE_Extensions + } // End of template m_tAIListForPagingItem + + template (omit) TAINSAGSupportItem m_tAINSAGSupportItem( + in template (value) NSAG_ID p_nSAG_ID, + in template (value) ExtendedSliceSupportList p_nSAGSliceSupportList, + in template (omit) TAINSAGSupportItem.iE_Extensions p_iE_Extensions := omit + ) := { + nSAG_ID := p_nSAG_ID, + nSAGSliceSupportList := p_nSAGSliceSupportList, + iE_Extensions := p_iE_Extensions + } // End of template m_tAINSAGSupportItem + + template (omit) TargeteNB_ID m_targeteNB_ID( + in template (value) GlobalNgENB_ID p_globalENB_ID, + in template (value) EPS_TAI p_selected_EPS_TAI, + in template (omit) TargeteNB_ID.iE_Extensions p_iE_Extensions := omit + ) := { + globalENB_ID := p_globalENB_ID, + selected_EPS_TAI := p_selected_EPS_TAI, + iE_Extensions := p_iE_Extensions + } // End of template m_targeteNB_ID + + template (omit) TargetHomeENB_ID m_targetHomeENB_ID( + in template (value) PLMNIdentity p_pLMNidentity, + in template (value) TargetHomeENB_ID.homeENB_ID p_homeENB_ID, + in template (value) EPS_TAI p_selected_EPS_TAI, + in template (omit) TargetHomeENB_ID.iE_Extensions p_iE_Extensions := omit + ) := { + pLMNidentity := p_pLMNidentity, + homeENB_ID := p_homeENB_ID, + selected_EPS_TAI := p_selected_EPS_TAI, + iE_Extensions := p_iE_Extensions + } // End of template m_targetHomeENB_ID + + template (value) TargetID m_targetID_targetRANNodeID( + in template (value) TargetRANNodeID p_targetRANNodeID + ) := { + targetRANNodeID := p_targetRANNodeID + } // End of template m_targetID_targetRANNodeID + + template (value) TargetID m_targetID_targeteNB_ID( + in template (value) TargeteNB_ID p_targeteNB_ID + ) := { + targeteNB_ID := p_targeteNB_ID + } // End of template m_targetID_targeteNB_ID + + template (value) TargetID m_targetID_choice_Extensions( + in template (value) TargetID.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_targetID_choice_Extensions + + template (value) TargetID.choice_Extensions m_targetID_id_TargetRNC_ID( + in template (value) TargetRNC_ID p_targetRNC_ID + ) := { + id := id_TargetRNC_ID, + criticality := reject, + value_ := { TargetRNC_ID := p_targetRNC_ID } + } // End of template m_sONInformationReport_id_SONInformationReport + + template (value) TargetID.choice_Extensions m_targetID_id_TargetHomeENB_ID( + in template (value) TargetHomeENB_ID p_targetHomeENB_ID + ) := { + id := id_TargetHomeENB_ID, + criticality := reject, + value_ := { TargetHomeENB_ID := p_targetHomeENB_ID } + } // End of template m_sONInformationReport_id_TargetHomeENB_ID + + template (omit) TargetNGRANNode_ToSourceNGRANNode_TransparentContainer m_targetNGRANNode_ToSourceNGRANNode_TransparentContainer( + in template (value) RRCContainer p_rRCContainer, + in template (omit) TargetNGRANNode_ToSourceNGRANNode_TransparentContainer.iE_Extensions p_iE_Extensions := omit + ) := { + rRCContainer := p_rRCContainer, + iE_Extensions := p_iE_Extensions + } // End of template m_targetNGRANNode_ToSourceNGRANNode_TransparentContainer + + template (value) TargetNGRANNode_ToSourceNGRANNode_TransparentContainer.iE_Extensions m_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_DAPSResponseInfoList( + in template (value) DAPSResponseInfoList p_dAPSResponseInfoList + ) := { + { + id := id_ConfiguredTACIndication, + criticality := ignore, + extensionValue := { DAPSResponseInfoList := p_dAPSResponseInfoList } + } + } // End of template m_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_DAPSResponseInfoList + + template (value) TargetNGRANNode_ToSourceNGRANNode_TransparentContainer.iE_Extensions m_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_DirectForwardingPathAvailability( + in template (value) DirectForwardingPathAvailability p_directForwardingPathAvailability + ) := { + { + id := id_DirectForwardingPathAvailability, + criticality := ignore, + extensionValue := { DirectForwardingPathAvailability := p_directForwardingPathAvailability } + } + } // End of template m_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_DirectForwardingPathAvailability + + template (value) TargetNGRANNode_ToSourceNGRANNode_TransparentContainer.iE_Extensions m_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_MBS_ActiveSessionInformation_TargettoSourceList( + in template (value) MBS_ActiveSessionInformation_TargettoSourceList p_mBS_ActiveSessionInformation_TargettoSourceList + ) := { + { + id := id_MBS_ActiveSessionInformation_TargettoSourceList, + criticality := ignore, + extensionValue := { MBS_ActiveSessionInformation_TargettoSourceList := p_mBS_ActiveSessionInformation_TargettoSourceList } + } + } // End of template m_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_MBS_ActiveSessionInformation_TargettoSourceList + + template (value) TargetNGRANNode_ToSourceNGRANNode_TransparentContainer.iE_Extensions m_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_NGAPIESupportInformationResponseList( + in template (value) NGAPIESupportInformationResponseList p_nGAPIESupportInformationResponseList + ) := { + { + id := id_NGAPIESupportInformationResponseList, + criticality := ignore, + extensionValue := { NGAPIESupportInformationResponseList := p_nGAPIESupportInformationResponseList } + } + } // End of template m_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_NGAPIESupportInformationResponseList + + template (omit) TargetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer m_targetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer( + in template (omit) Cell_CAGInformation p_cell_CAGInformation := omit, + in template (omit) TargetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer.iE_Extensions p_iE_Extensions := omit + ) := { + cell_CAGInformation := p_cell_CAGInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_targetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer + + template (value) TargetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer.iE_Extensions m_targetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer_id_NGAPIESupportInformationResponseList( + in template (value) NGAPIESupportInformationResponseList p_nGAPIESupportInformationResponseList + ) := { + { + id := id_NGAPIESupportInformationResponseList, + criticality := ignore, + extensionValue := { NGAPIESupportInformationResponseList := p_nGAPIESupportInformationResponseList } + } + } // End of template m_targetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer_id_NGAPIESupportInformationResponseList + + template (omit) TargetNSSAI_Item m_targetNSSAI_Item( + in template (value) S_NSSAI p_s_NSSAI, + in template (omit) TargetNSSAI_Item.iE_Extensions p_iE_Extensions := omit + ) := { + s_NSSAI := p_s_NSSAI, + iE_Extensions := p_iE_Extensions + } // End of template m_targetNSSAI_Item + + template (omit) TargetNSSAIInformation m_targetNSSAIInformation( + in template (value) TargetNSSAI p_targetNSSAI, + in template (value) IndexToRFSP p_indexToRFSP, + in template (omit) TargetNSSAIInformation.iE_Extensions p_iE_Extensions := omit + ) := { + targetNSSAI := p_targetNSSAI, + indexToRFSP := p_indexToRFSP, + iE_Extensions := p_iE_Extensions + } // End of template m_targetNSSAIInformation + + template (omit) TargetRANNodeID m_targetRANNodeID( + in template (value) GlobalRANNodeID p_globalRANNodeID, + in template (value) TAI p_selectedTAI, + in template (omit) TargetRANNodeID.iE_Extensions p_iE_Extensions := omit + ) := { + globalRANNodeID := p_globalRANNodeID, + selectedTAI := p_selectedTAI, + iE_Extensions := p_iE_Extensions + } // End of template m_targetRANNodeID + + template (omit) TargetRANNodeID_RIM m_targetRANNodeID_RIM( + in template (value) GlobalRANNodeID p_globalRANNodeID, + in template (value) TAI p_selectedTAI, + in template (omit) TargetRANNodeID_RIM.iE_Extensions p_iE_Extensions := omit + ) := { + globalRANNodeID := p_globalRANNodeID, + selectedTAI := p_selectedTAI, + iE_Extensions := p_iE_Extensions + } // End of template m_targetRANNodeID_RIM + + template (omit) TargetRANNodeID_SON m_targetRANNodeID_SON( + in template (value) GlobalRANNodeID p_globalRANNodeID, + in template (value) TAI p_selectedTAI, + in template (omit) TargetRANNodeID_SON.iE_Extensions p_iE_Extensions := omit + ) := { + globalRANNodeID := p_globalRANNodeID, + selectedTAI := p_selectedTAI, + iE_Extensions := p_iE_Extensions + } // End of template m_targetRANNodeID_SON + + template (value) TargetRANNodeID_SON.iE_Extensions m_targetRANNodeID_SON_id_NR_CGI( + in template (value) NR_CGI p_nR_CGI + ) := { + { + id := id_NR_CGI, + criticality := ignore, + extensionValue := { NR_CGI := p_nR_CGI } + } + } // End of template m_targetRANNodeID_SON_id_NR_CGI + + template (omit) TargetRNC_ID m_targetRNC_ID( + in template (value) LAI p_lAI, + in template (value) RNC_ID p_rNC_ID, + in template (omit) ExtendedRNC_ID p_extendedRNC_ID := omit, + in template (omit) TargetRNC_ID.iE_Extensions p_iE_Extensions := omit + ) := { + lAI := p_lAI, + rNC_ID := p_rNC_ID, + extendedRNC_ID := p_extendedRNC_ID, + iE_Extensions := p_iE_Extensions + } // End of template m_targetRNC_ID + + template (value) TimerApproachForGUAMIRemoval m_timerApproachForGUAMIRemoval(in TimerApproachForGUAMIRemoval p_value := apply_timer) := p_value; + + template (omit) TimeSyncAssistanceInfo m_timeSyncAssistanceInfo( + in template (value) TimeSyncAssistanceInfo.timeDistributionIndication p_timeDistributionIndication := enabled, + in template (omit) TimeSyncAssistanceInfo.uUTimeSyncErrorBudget p_uUTimeSyncErrorBudget := omit, + in template (omit) TimeSyncAssistanceInfo.iE_Extensions p_iE_Extensions := omit + ) := { + timeDistributionIndication := p_timeDistributionIndication, + uUTimeSyncErrorBudget := p_uUTimeSyncErrorBudget, + // The above IE shall be present if the Time Distribution Indication IE is set to the value “enabled” + iE_Extensions := p_iE_Extensions + } // End of template m_timeSyncAssistanceInfo + + template (value) TimeToWait m_timeToWait(in TimeToWait p_value := v1s) := p_value; + + template (value) TNGF_ID m_tNGF_ID_tNGF_ID( + in template (value) TNGF_ID.tNGF_ID p_tNGF_ID + ) := { + tNGF_ID := p_tNGF_ID + } // End of template m_tNGF_ID_tNGF_ID + + template (value) TNGF_ID m_tNGF_ID_choice_Extensions( + in template (value) TNGF_ID.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_tNGF_ID_choice_Extensions + + template (omit) TNLAssociationItem m_tNLAssociationItem( + in template (value) CPTransportLayerInformation p_tNLAssociationAddress, + in template (value) Cause p_cause, + in template (omit) TNLAssociationItem.iE_Extensions p_iE_Extensions := omit + ) := { + tNLAssociationAddress := p_tNLAssociationAddress, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template m_tNLAssociationItem + + template (value) TNLAssociationUsage m_TNLAssociationUsage(in TNLAssociationUsage p_value := ue) := p_value; + + template (omit) TooearlyIntersystemHO m_tooearlyIntersystemHO( + in template (value) EUTRA_CGI p_sourcecellID, + in template (value) NGRAN_CGI p_failurecellID, + in template (omit) UERLFReportContainer p_uERLFReportContainer := omit, + in template (omit) TooearlyIntersystemHO.iE_Extensions p_iE_Extensions := omit + ) := { + sourcecellID := p_sourcecellID, + failurecellID := p_failurecellID, + uERLFReportContainer := p_uERLFReportContainer, + iE_Extensions := p_iE_Extensions + } // End of template m_tooearlyIntersystemHO + + template (omit) TraceActivation m_traceActivation( + in template (value) NGRANTraceID p_nGRANTraceID := PX_NGRAN_TRACE_ID, + in template (value) InterfacesToTrace p_interfacesToTrace := PX_INTERFACES_TO_TRACE, + in template (value) TraceDepth p_traceDepth, + in template (value) TransportLayerAddress p_traceCollectionEntityIPAddress := PX_TRANSPORT_LAYER_ADDRESS, + in template (omit) TraceActivation.iE_Extensions p_iE_Extensions := omit + ) := { + nGRANTraceID := p_nGRANTraceID, + interfacesToTrace := p_interfacesToTrace, + traceDepth := p_traceDepth, + traceCollectionEntityIPAddress := p_traceCollectionEntityIPAddress, + iE_Extensions := p_iE_Extensions + } // End of template m_traceActivation + + template (value) TraceActivation.iE_Extensions m_traceActivation_id_MDTConfiguration( + in template (value) MDT_Configuration p_mDT_Configuration + ) := { + { + id := id_MDTConfiguration, + criticality := ignore, + extensionValue := { MDT_Configuration := p_mDT_Configuration } + } + } // End of template m_traceActivation_id_MDTConfiguration + + template (value) TraceActivation.iE_Extensions m_traceActivation_id_TraceCollectionEntityURI( + in template (value) URI_address p_uRI_address + ) := { + { + id := id_TraceCollectionEntityURI, + criticality := ignore, + extensionValue := { URI_address := p_uRI_address } + } + } // End of template m_traceActivation_id_TraceCollectionEntityURI + + template (value) TraceActivation.iE_Extensions m_traceActivation_full( + in template (value) MDT_Configuration p_mDT_Configuration, + in template (value) URI_address p_uRI_address + ) := { + { + id := id_MDTConfiguration, + criticality := ignore, + extensionValue := { MDT_Configuration := p_mDT_Configuration } + }, + { + id := id_TraceCollectionEntityURI, + criticality := ignore, + extensionValue := { URI_address := p_uRI_address } + } + } // End of template m_traceActivation_full + + template (value) TraceDepth m_traceDepth(in TraceDepth p_value := minimum) := p_value; + + template (value) TypeOfError m_typeOfError(in TypeOfError p_value := not_understood) := p_value; + + template (omit) TAIBasedMDT m_tAIBasedMDT( + in template (value) TAIListforMDT p_tAIListforMDT, + in template (omit) TAIBasedMDT.iE_Extensions p_iE_Extensions := omit + ) := { + tAIListforMDT := p_tAIListforMDT, + iE_Extensions := p_iE_Extensions + } // End of template m_tAIBasedMDT + + template (omit) TAIBasedQMC m_tAIBasedQMC( + in template (value) TAIListforQMC p_tAIListforQMC, + in template (omit) TAIBasedQMC.iE_Extensions p_iE_Extensions := omit + ) := { + tAIListforQMC := p_tAIListforQMC, + iE_Extensions := p_iE_Extensions + } // End of template m_tAIBasedQMC + + template (omit) TABasedQMC m_tABasedQMC( + in template (value) TAListforQMC p_tAListforQMC, + in template (omit) TABasedQMC.iE_Extensions p_iE_Extensions := omit + ) := { + tAListforQMC := p_tAListforQMC, + iE_Extensions := p_iE_Extensions + } // End of template m_tABasedQMC + + template (omit) TABasedMDT m_tABasedMDT( + in template (value) TAListforMDT p_tAListforMDT, + in template (omit) TABasedMDT.iE_Extensions p_iE_Extensions := omit + ) := { + tAListforMDT := p_tAListforMDT, + iE_Extensions := p_iE_Extensions + } // End of template m_tABasedMDT + + template (value) TimeToTrigger m_timeToTrigger(in TimeToTrigger p_value := ms0) := p_value; + + template (value) TWIF_ID m_tWIF_ID_tWIF_ID( + in template (value) TWIF_ID.tWIF_ID p_tWIF_ID + ) := { + tWIF_ID := p_tWIF_ID + } // End of template m_tWIF_ID_tWIF_ID + + template (value) TWIF_ID m_tWIF_ID_choice_Extensions( + in template (value) TWIF_ID.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_tWIF_ID_choice_Extensions + + template (omit) TSCAssistanceInformation m_tSCAssistanceInformation( + in template (value) Periodicity p_periodicity, + in template (omit) BurstArrivalTime p_burstArrivalTime := omit, + in template (omit) TSCAssistanceInformation.iE_Extensions p_iE_Extensions := omit + ) := { + periodicity := p_periodicity, + burstArrivalTime := p_burstArrivalTime, + iE_Extensions := p_iE_Extensions + } // End of template m_tSCAssistanceInformation + + template (value) TSCAssistanceInformation.iE_Extensions m_tSCAssistanceInformation_id_SurvivalTime( + in template (value) SurvivalTime p_survivalTime + ) := { + { + id := id_SurvivalTime, + criticality := ignore, + extensionValue := { SurvivalTime := p_survivalTime } + } + } // End of template m_tSCAssistanceInformation_id_SurvivalTime + + template (omit) TSCTrafficCharacteristics m_tSCTrafficCharacteristics( + in template (omit) TSCAssistanceInformation p_tSCAssistanceInformationDL := omit, + in template (omit) TSCAssistanceInformation p_tSCAssistanceInformationUL := omit, + in template (omit) TSCTrafficCharacteristics.iE_Extensions p_iE_Extensions := omit + ) := { + tSCAssistanceInformationDL := p_tSCAssistanceInformationDL, + tSCAssistanceInformationUL := p_tSCAssistanceInformationUL, + iE_Extensions := p_iE_Extensions + } // End of template m_tSCTrafficCharacteristics + + template (omit) UEAggregateMaximumBitRate m_uEAggregateMaximumBitRate( + in template (value) BitRate p_uEAggregateMaximumBitRateDL := PX_UE_AGGREGATE_MAXIMUM_BIT_RATE_DL, + in template (value) BitRate p_uEAggregateMaximumBitRateUL := PX_UE_AGGREGATE_MAXIMUM_BIT_RATE_UL, + in template (omit) UEAggregateMaximumBitRate.iE_Extensions p_iE_Extensions := omit + ) := { + uEAggregateMaximumBitRateDL := p_uEAggregateMaximumBitRateDL, + uEAggregateMaximumBitRateUL := p_uEAggregateMaximumBitRateUL, + iE_Extensions := p_iE_Extensions + } // End of template m_uEAggregateMaximumBitRate + + template (omit) UEAppLayerMeasInfoItem m_uEAppLayerMeasInfoItem( + in template (value) UEAppLayerMeasConfigInfo p_uEAppLayerMeasConfigInfo, + in template (omit) UEAppLayerMeasInfoItem.iE_Extensions p_iE_Extensions := omit + ) := { + uEAppLayerMeasConfigInfo := p_uEAppLayerMeasConfigInfo, + iE_Extensions := p_iE_Extensions + } // End of template m_uEAppLayerMeasInfoItem + + template (omit) UEAppLayerMeasConfigInfo m_uEAppLayerMeasConfigInfo( + in template (value) QoEReference p_qoEReference, + in template (value) TransportLayerAddress p_measCollEntityIPAddress, + in template (omit) ServiceType p_serviceType, + in template (omit) AreaScopeOfQMC p_areaScopeOfQMC := omit, + in template (omit) UEAppLayerMeasConfigInfo.qoEMeasurementStatus p_qoEMeasurementStatus := omit, + in template (omit) UEAppLayerMeasConfigInfo.containerForAppLayerMeasConfig p_containerForAppLayerMeasConfig := omit, + in template (omit) UEAppLayerMeasConfigInfo.measConfigAppLayerID p_measConfigAppLayerID := omit, + in template (omit) SliceSupportListQMC p_sliceSupportListQMC := omit, + in template (omit) MDT_AlignmentInfo p_mDT_AlignmentInfo := omit, + in template (omit) AvailableRANVisibleQoEMetrics p_availableRANVisibleQoEMetrics := omit, + in template (omit) UEAppLayerMeasConfigInfo.iE_Extensions p_iE_Extensions := omit + ) := { + qoEReference := p_qoEReference, + serviceType := p_serviceType, + areaScopeOfQMC := p_areaScopeOfQMC, + measCollEntityIPAddress := p_measCollEntityIPAddress, + qoEMeasurementStatus := p_qoEMeasurementStatus, + containerForAppLayerMeasConfig := p_containerForAppLayerMeasConfig, + measConfigAppLayerID := p_measConfigAppLayerID, + sliceSupportListQMC := p_sliceSupportListQMC, + mDT_AlignmentInfo := p_mDT_AlignmentInfo, + availableRANVisibleQoEMetrics := p_availableRANVisibleQoEMetrics, + iE_Extensions := p_iE_Extensions + } // End of template m_uEAppLayerMeasConfigInfo + + template (omit) UE_associatedLogicalNG_connectionItem m_uE_associatedLogicalNG_connectionItem( + in template (omit) AMF_UE_NGAP_ID p_aMF_UE_NGAP_ID := omit, + in template (omit) RAN_UE_NGAP_ID p_rAN_UE_NGAP_ID := omit, + in template (omit) UE_associatedLogicalNG_connectionItem.iE_Extensions p_iE_Extensions := omit + ) := { + aMF_UE_NGAP_ID := p_aMF_UE_NGAP_ID, + rAN_UE_NGAP_ID := p_rAN_UE_NGAP_ID, + iE_Extensions := p_iE_Extensions + } // End of template m_uE_associatedLogicalNG_connectionItem + + template (value) UECapabilityInfoRequest m_uECapabilityInfoRequest(in UECapabilityInfoRequest p_value := requested) := p_value; + + template (value) UEContextRequest m_uEContextRequest(in UEContextRequest p_value := requested) := p_value; + + template (omit) UEContextResumeRequestTransfer m_uEContextResumeRequestTransfer( + in template (omit) QosFlowListWithCause p_qosFlowFailedToResumeList := omit, + in template (omit) UEContextResumeRequestTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowFailedToResumeList := p_qosFlowFailedToResumeList, + iE_Extensions := p_iE_Extensions + } // End of template m_uEContextResumeRequestTransfer + + template (omit) UEContextResumeResponseTransfer m_uEContextResumeResponseTransfer( + in template (omit) QosFlowListWithCause p_qosFlowFailedToResumeList := omit, + in template (omit) UEContextResumeResponseTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + qosFlowFailedToResumeList := p_qosFlowFailedToResumeList, + iE_Extensions := p_iE_Extensions + } // End of template m_uEContextResumeResponseTransfer + + template (omit) UEContextSuspendRequestTransfer m_uEContextSuspendRequestTransfer( + in template (omit) SuspendIndicator p_suspendIndicator := omit, + in template (omit) UEContextSuspendRequestTransfer.iE_Extensions p_iE_Extensions := omit + ) := { + suspendIndicator := p_suspendIndicator, + iE_Extensions := p_iE_Extensions + } // End of template m_uEContextSuspendRequestTransfer + + template (omit) UE_DifferentiationInfo m_uE_DifferentiationInfo( + in template (omit) UE_DifferentiationInfo.periodicCommunicationIndicator p_periodicCommunicationIndicator := omit, + in template (omit) UE_DifferentiationInfo.periodicTime p_periodicTime := omit, + in template (omit) UE_DifferentiationInfo.scheduledCommunicationTime p_scheduledCommunicationTime := omit, + in template (omit) UE_DifferentiationInfo.stationaryIndication p_stationaryIndication := omit, + in template (omit) UE_DifferentiationInfo.trafficProfile p_trafficProfile := omit, + in template (omit) UE_DifferentiationInfo.batteryIndication p_batteryIndication := omit, + in template (omit) UE_DifferentiationInfo.iE_Extensions p_iE_Extensions := omit + ) := { + periodicCommunicationIndicator := p_periodicCommunicationIndicator, + periodicTime := p_periodicTime, + scheduledCommunicationTime := p_scheduledCommunicationTime, + stationaryIndication := p_stationaryIndication, + trafficProfile := p_trafficProfile, + batteryIndication := p_batteryIndication, + iE_Extensions := p_iE_Extensions + } // End of template m_uE_DifferentiationInfo + + template (value) UEHistoryInformationFromTheUE m_uEHistoryInformationFromTheUE_nR( + in template (value) NRMobilityHistoryReport p_nR + ) := { + nR := p_nR + } // End of template m_uEHistoryInformationFromTheUE_nR + + template (value) UEHistoryInformationFromTheUE m_uEHistoryInformationFromTheUE_choice_Extensions( + in template (value) UEHistoryInformationFromTheUE.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_uEHistoryInformationFromTheUE_choice_Extensions + + template (value) UEIdentityIndexValue m_uEIdentityIndexValue_indexLength10( + in template (value) UEIdentityIndexValue.indexLength10 p_indexLength10 + ) := { + indexLength10 := p_indexLength10 + } // End of template m_uEIdentityIndexValue_indexLength10 + + template (value) UEIdentityIndexValue m_uEIdentityIndexValue_choice_Extensions( + in template (value) UEIdentityIndexValue.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_uEIdentityIndexValue_choice_Extensions + + template (value) UE_NGAP_IDs m_uE_NGAP_IDs_uE_NGAP_ID_pair( + in template (value) UE_NGAP_ID_pair p_uE_NGAP_ID_pair + ) := { + uE_NGAP_ID_pair := p_uE_NGAP_ID_pair + } // End of template m_uE_NGAP_IDs_uE_NGAP_ID_pair + + template (value) UE_NGAP_IDs m_uE_NGAP_IDs_aMF_UE_NGAP_ID( + in template (value) AMF_UE_NGAP_ID p_aMF_UE_NGAP_ID := PX_AMF_UE_NGAP_ID + ) := { + aMF_UE_NGAP_ID := p_aMF_UE_NGAP_ID + } // End of template m_uE_NGAP_IDs_aMF_UE_NGAP_ID + + template (value) UE_NGAP_IDs m_uE_NGAP_IDs_choice_Extensions( + in template (value) UE_NGAP_IDs.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_uE_NGAP_IDs_choice_Extensions + + template (omit) UE_NGAP_ID_pair m_uE_NGAP_ID_pair( + in template (value) AMF_UE_NGAP_ID p_aMF_UE_NGAP_ID := PX_AMF_UE_NGAP_ID, + in template (value) RAN_UE_NGAP_ID p_rAN_UE_NGAP_ID := PX_RAN_UE_NGAP_ID, + in template (omit) UE_NGAP_ID_pair.iE_Extensions p_iE_Extensions := omit + ) := { + aMF_UE_NGAP_ID := p_aMF_UE_NGAP_ID, + rAN_UE_NGAP_ID := p_rAN_UE_NGAP_ID, + iE_Extensions := p_iE_Extensions + } // End of template m_uE_NGAP_ID_pair + + template (value) UEPagingIdentity m_uEPagingIdentity_fiveG_S_TMSI( + in template (value) FiveG_S_TMSI p_fiveG_S_TMSI + ) := { + fiveG_S_TMSI := p_fiveG_S_TMSI + } // End of template m_uEPagingIdentity_fiveG_S_TMSI + + template (value) UEPagingIdentity m_uEPagingIdentity_choice_Extensions( + in template (value) UEPagingIdentity.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_uEPagingIdentity_choice_Extensions + + template (value) UEPresence m_uEPresence(in UEPresence p_value := in_) := p_value; + + template (omit) UEPresenceInAreaOfInterestItem m_uEPresenceInAreaOfInterestItem( + in template (value) LocationReportingReferenceID p_locationReportingReferenceID, + in template (value) UEPresence p_uEPresence, + in template (omit) UEPresenceInAreaOfInterestItem.iE_Extensions p_iE_Extensions := omit + ) := { + locationReportingReferenceID := p_locationReportingReferenceID, + uEPresence := p_uEPresence, + iE_Extensions := p_iE_Extensions + } // End of template m_uEPresenceInAreaOfInterestItem + + template (omit) UERadioCapabilityForPaging m_uERadioCapabilityForPaging( + in template (omit) UERadioCapabilityForPagingOfNR p_uERadioCapabilityForPagingOfNR := omit, + in template (omit) UERadioCapabilityForPagingOfEUTRA p_uERadioCapabilityForPagingOfEUTRA := omit, + in template (omit) UERadioCapabilityForPaging.iE_Extensions p_iE_Extensions := omit + ) := { + uERadioCapabilityForPagingOfNR := p_uERadioCapabilityForPagingOfNR, + uERadioCapabilityForPagingOfEUTRA := p_uERadioCapabilityForPagingOfEUTRA, + iE_Extensions := p_iE_Extensions + } // End of template m_uERadioCapabilityForPaging + + template (value) UERadioCapabilityForPaging.iE_Extensions m_uERadioCapabilityForPaging_id_UERadioCapabilityForPagingOfNB_IoT( + in template (value) UERadioCapabilityForPagingOfNB_IoT p_uERadioCapabilityForPagingOfNB_IoT + ) := { + { + id := id_UERadioCapabilityForPagingOfNB_IoT, + criticality := ignore, + extensionValue := { UERadioCapabilityForPagingOfNB_IoT := p_uERadioCapabilityForPagingOfNB_IoT } + } + } // End of template m_uERadioCapabilityForPaging_id_UERadioCapabilityForPagingOfNB_IoT + + template (value) UERetentionInformation m_uERetentionInformation(in UERetentionInformation p_value := ues_retained):= p_value; + + template (value) UERLFReportContainer m_uERLFReportContainer_nR( + in template (value) NRUERLFReportContainer p_nR + ) := { + nR := p_nR + } // End of template m_uERLFReportContainer_nR + + template (value) UERLFReportContainer m_uERLFReportContainer_lTE( + in template (value) LTEUERLFReportContainer p_lTE + ) := { + lTE := p_lTE + } // End of template m_uERLFReportContainer_lTE + + template (value) UERLFReportContainer m_uERLFReportContainer_choice_Extensions( + in template (value) UERLFReportContainer.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_uERLFReportContainer_choice_Extensions + + template (omit) UESecurityCapabilities m_uESecurityCapabilities( + in template (value) NRencryptionAlgorithms p_nRencryptionAlgorithms := PX_NR_ENCRYPTION_ALGORITHMS, + in template (value) NRintegrityProtectionAlgorithms p_nRintegrityProtectionAlgorithms := PX_NR_INTEGRITY_PROTECTION_ALGORITHMS, + in template (value) EUTRAencryptionAlgorithms p_eUTRAencryptionAlgorithms := PX_EUTRA_ENCRYPTION_ALGORITHMS, + in template (value) EUTRAintegrityProtectionAlgorithms p_eUTRAintegrityProtectionAlgorithms := PX_EUTRA_INTEGRITY_PROTECTION_ALGORITHMS, + in template (omit) UESecurityCapabilities.iE_Extensions p_iE_Extensions := omit + ) := { + nRencryptionAlgorithms := p_nRencryptionAlgorithms, + nRintegrityProtectionAlgorithms := p_nRintegrityProtectionAlgorithms, + eUTRAencryptionAlgorithms := p_eUTRAencryptionAlgorithms, + eUTRAintegrityProtectionAlgorithms := p_eUTRAintegrityProtectionAlgorithms, + iE_Extensions := p_iE_Extensions + } // End of template m_uESecurityCapabilities + + template (omit) UESliceMaximumBitRateItem m_uESliceMaximumBitRateItem( + in template (value) S_NSSAI p_s_NSSAI, + in template (value) BitRate p_uESliceMaximumBitRateDL, + in template (value) BitRate p_uESliceMaximumBitRateUL, + in template (omit) UESliceMaximumBitRateItem.iE_Extensions p_iE_Extensions := omit + ) := { + s_NSSAI := p_s_NSSAI, + uESliceMaximumBitRateDL := p_uESliceMaximumBitRateDL, + uESliceMaximumBitRateUL := p_uESliceMaximumBitRateUL, + iE_Extensions := p_iE_Extensions + } // End of template m_uESliceMaximumBitRateItem + + template (value) UE_UP_CIoT_Support m_uE_UP_CIoT_Support(in UE_UP_CIoT_Support p_value := supported) := p_value; + + template (omit) UL_CP_SecurityInformation m_UL_CP_SecurityInformation( + in template (value) UL_NAS_MAC p_ul_NAS_MAC := PX_UL_NAS_MAC, + in template (value) UL_NAS_Count p_ul_NAS_Count := PX_UL_NAS_COUNT, + in template (omit) UL_CP_SecurityInformation.iE_Extensions p_iE_Extensions := omit + ) := { + ul_NAS_MAC := p_ul_NAS_MAC, + ul_NAS_Count := p_ul_NAS_Count, + iE_Extensions := p_iE_Extensions + } // End of template + + template (omit) UL_NGU_UP_TNLModifyItem m_uL_NGU_UP_TNLModifyItem( + in template (value) UPTransportLayerInformation p_uL_NGU_UP_TNLInformation, + in template (value) UPTransportLayerInformation p_dL_NGU_UP_TNLInformation, + in template (omit) UL_NGU_UP_TNLModifyItem.iE_Extensions p_iE_Extensions := omit + ) := { + uL_NGU_UP_TNLInformation := p_uL_NGU_UP_TNLInformation, + dL_NGU_UP_TNLInformation := p_dL_NGU_UP_TNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_uL_NGU_UP_TNLModifyItem + + template (value) UL_NGU_UP_TNLModifyItem.iE_Extensions m_uL_NGU_UP_TNLModifyItem_id_RedundantUL_NGU_UP_TNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_RedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_uL_NGU_UP_TNLModifyItem_id_RedundantUL_NGU_UP_TNLInformation + + template (value) UL_NGU_UP_TNLModifyItem.iE_Extensions m_uL_NGU_UP_TNLModifyItem_id_RedundantDL_NGU_UP_TNLInformation( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation + ) := { + { + id := id_RedundantDL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template m_uL_NGU_UP_TNLModifyItem_id_RedundantDL_NGU_UP_TNLInformation + + template (value) UL_NGU_UP_TNLModifyItem.iE_Extensions m_uL_NGU_UP_TNLModifyItem_full( + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation_id_RedundantUL_NGU_UP_TNLInformation, + in template (value) UPTransportLayerInformation p_uPTransportLayerInformation_id_RedundantDL_NGU_UP_TNLInformation + ) := { + { + id := id_RedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation_id_RedundantUL_NGU_UP_TNLInformation } + }, + { + id := id_RedundantDL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation_id_RedundantDL_NGU_UP_TNLInformation } + } + } // End of template m_uL_NGU_UP_TNLModifyItem_full + + template (omit) UnavailableGUAMIItem m_unavailableGUAMIItem( + in template (value) GUAMI p_gUAMI, + in template (omit) TimerApproachForGUAMIRemoval p_timerApproachForGUAMIRemoval := omit, + in template (omit) AMFName p_backupAMFName := omit, + in template (omit) UnavailableGUAMIItem.iE_Extensions p_iE_Extensions := omit + ) := { + gUAMI := p_gUAMI, + timerApproachForGUAMIRemoval := p_timerApproachForGUAMIRemoval, + backupAMFName := p_backupAMFName, + iE_Extensions := p_iE_Extensions + } // End of template m_unavailableGUAMIItem + + template (value) ULForwarding m_uLForwarding(in ULForwarding p_value := ul_forwarding_proposed) := p_value; + + template (value) UPTransportLayerInformation m_uPTransportLayerInformation_gTPTunnel( + in template (value) GTPTunnel p_gTPTunnel + ) := { + gTPTunnel := p_gTPTunnel + } // End of template m_uPTransportLayerInformation_gTPTunnel + + template (value) UPTransportLayerInformation m_uPTransportLayerInformation_choice_Extensions( + in template (value) UPTransportLayerInformation.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_uPTransportLayerInformation_choice_Extensions + + template (omit) UPTransportLayerInformationItem m_uPTransportLayerInformationItem( + in template (value) UPTransportLayerInformation p_nGU_UP_TNLInformation, + in template (omit) UPTransportLayerInformationItem.iE_Extensions p_iE_Extensions := omit + ) := { + nGU_UP_TNLInformation := p_nGU_UP_TNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_uPTransportLayerInformationItem + + template (value) UPTransportLayerInformationItem.iE_Extensions m_uPTransportLayerInformationItem_id_CommonNetworkInstance( + in template (value) CommonNetworkInstance p_commonNetworkInstance + ) := { + { + id := id_CommonNetworkInstance, + criticality := ignore, + extensionValue := { CommonNetworkInstance := p_commonNetworkInstance } + } + } // End of template m_uPTransportLayerInformationItem_id_CommonNetworkInstance + + template (omit) UPTransportLayerInformationPairItem m_uPTransportLayerInformationPairItem( + in template (value) UPTransportLayerInformation p_uL_NGU_UP_TNLInformation, + in template (value) UPTransportLayerInformation p_dL_NGU_UP_TNLInformation, + in template (omit) UPTransportLayerInformationPairItem.iE_Extensions p_iE_Extensions := omit + ) := { + uL_NGU_UP_TNLInformation := p_uL_NGU_UP_TNLInformation, + dL_NGU_UP_TNLInformation := p_dL_NGU_UP_TNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_uPTransportLayerInformationPairItem + + template (value) UserLocationInformation m_uPTransportLayerInformation_userLocationInformationEUTRA( + in template (value) UserLocationInformationEUTRA p_userLocationInformationEUTRA + ) := { + userLocationInformationEUTRA := p_userLocationInformationEUTRA + } // End of template m_uPTransportLayerInformation_userLocationInformationEUTRA + + template (value) UserLocationInformation m_uPTransportLayerInformation_userLocationInformationNR( + in template (value) UserLocationInformationNR p_userLocationInformationNR + ) := { + userLocationInformationNR := p_userLocationInformationNR + } // End of template m_uPTransportLayerInformation_userLocationInformationNR + + template (value) UserLocationInformation m_uPTransportLayerInformation_userLocationInformationN3IWF( + in template (value) UserLocationInformationN3IWF p_userLocationInformationN3IWF + ) := { + userLocationInformationN3IWF := p_userLocationInformationN3IWF + } // End of template m_uPTransportLayerInformation_userLocationInformationN3IWF + + template (value) UserLocationInformation m_userLocationInformation_choice_Extensions( + in template (value) UserLocationInformation.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_userLocationInformation_choice_Extensions + + template (value) UserLocationInformation.choice_Extensions m_userLocationInformation_id_UserLocationInformationTNGF( + in template (value) UserLocationInformationTNGF p_userLocationInformationTNGF + ) := { + id := id_UserLocationInformationTNGF, + criticality := ignore, + value_ := { UserLocationInformationTNGF := p_userLocationInformationTNGF } + } // End of template m_userLocationInformation_id_UserLocationInformationTNGF + + template (value) UserLocationInformation.choice_Extensions m_userLocationInformation_id_UserLocationInformationTWIF( + in template (value) UserLocationInformationTWIF p_userLocationInformationTWIF + ) := { + id := id_UserLocationInformationTWIF, + criticality := ignore, + value_ := { UserLocationInformationTWIF := p_userLocationInformationTWIF } + } // End of template m_userLocationInformation_id_UserLocationInformationTWIF + + template (value) UserLocationInformation.choice_Extensions m_userLocationInformation_id_UserLocationInformationW_AGF( + in template (value) UserLocationInformationW_AGF p_userLocationInformationW_AGF + ) := { + id := id_UserLocationInformationW_AGF, + criticality := ignore, + value_ := { UserLocationInformationW_AGF := p_userLocationInformationW_AGF } + } // End of template m_userLocationInformation_id_UserLocationInformationW_AGF + + template (omit) UserLocationInformationEUTRA m_userLocationInformationEUTRA( + in template (value) EUTRA_CGI p_eUTRA_CGI, + in template (value) TAI p_tAI, + in template (omit) TimeStamp p_timeStamp := omit, + in template (omit) UserLocationInformationEUTRA.iE_Extensions p_iE_Extensions := omit + ) := { + eUTRA_CGI := p_eUTRA_CGI, + tAI := p_tAI, + timeStamp := p_timeStamp, + iE_Extensions := p_iE_Extensions + } // End of template m_userLocationInformationEUTRA + + template (value) UserLocationInformationEUTRA.iE_Extensions m_userLocationInformationEUTRA_id_PSCellInformation( + in template (value) NGRAN_CGI p_nGRAN_CGI + ) := { + { + id := id_PSCellInformation, + criticality := ignore, + extensionValue := { NGRAN_CGI := p_nGRAN_CGI } + } + } // End of template m_userLocationInformationEUTRA_id_PSCellInformation + + template (omit) UserLocationInformationN3IWF m_userLocationInformationN3IWF( + in template (value) TransportLayerAddress p_iPAddress := PX_TRANSPORT_LAYER_ADDRESS, + in template (value) PortNumber p_portNumber, + in template (omit) UserLocationInformationN3IWF.iE_Extensions p_iE_Extensions := omit + ) := { + iPAddress := p_iPAddress, + portNumber := p_portNumber, + iE_Extensions := p_iE_Extensions + } // End of template m_userLocationInformationN3IWF + + template (value) UserLocationInformationN3IWF.iE_Extensions m_userLocationInformationN3IWF_id_TAI( + in template (value) TAI p_tAI + ) := { + { + id := id_TAI, + criticality := ignore, + extensionValue := { TAI := p_tAI } + } + } // End of template m_userLocationInformationN3IWF_id_TAI + + template (omit) UserLocationInformationTNGF m_userLocationInformationTNGF( + in template (value) TNAP_ID p_tNAP_ID, + in template (value) TransportLayerAddress p_iPAddress := PX_TRANSPORT_LAYER_ADDRESS, + in template (value) PortNumber p_portNumber, + in template (omit) UserLocationInformationTNGF.iE_Extensions p_iE_Extensions := omit + ) := { + tNAP_ID := p_tNAP_ID, + iPAddress := p_iPAddress, + portNumber := p_portNumber, + iE_Extensions := p_iE_Extensions + } // End of template m_userLocationInformationTNGF + + template (value) UserLocationInformationTNGF.iE_Extensions m_userLocationInformationTNGF_id_TAI( + in template (value) TAI p_tAI + ) := { + { + id := id_TAI, + criticality := ignore, + extensionValue := { TAI := p_tAI } + } + } // End of template m_userLocationInformationTNGF_id_TAI + + template (omit) UserLocationInformationTWIF m_userLocationInformationTWIF( + in template (value) TWAP_ID p_tWAP_ID, + in template (value) TransportLayerAddress p_iPAddress := PX_TRANSPORT_LAYER_ADDRESS, + in template (value) PortNumber p_portNumber, + in template (omit) UserLocationInformationTWIF.iE_Extensions p_iE_Extensions := omit + ) := { + tWAP_ID := p_tWAP_ID, + iPAddress := p_iPAddress, + portNumber := p_portNumber, + iE_Extensions := p_iE_Extensions + } // End of template m_userLocationInformationTWIF + + template (value) UserLocationInformationTWIF.iE_Extensions m_userLocationInformationTWIF_id_TAI( + in template (value) TAI p_tAI + ) := { + { + id := id_TAI, + criticality := ignore, + extensionValue := { TAI := p_tAI } + } + } // End of template m_userLocationInformationTWIF_id_TAI + + template (value) UserLocationInformationW_AGF m_userLocationInformationW_AGF_globalLine_ID( + in template (value) GlobalLine_ID p_globalLine_ID + ) := { + globalLine_ID := p_globalLine_ID + } // End of template m_userLocationInformationW_AGF_globalLine_ID + + template (value) UserLocationInformationW_AGF m_userLocationInformationW_AGF_hFCNode_ID( + in template (value) HFCNode_ID p_hFCNode_ID + ) := { + hFCNode_ID := p_hFCNode_ID + } // End of template m_userLocationInformationW_AGF_hFCNode_ID + + template (value) UserLocationInformationW_AGF m_userLocationInformationW_AGF_choice_Extensions( + in template (value) UserLocationInformationW_AGF.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_userLocationInformationW_AGF_choice_Extensions + + template (value) UserLocationInformationW_AGF.choice_Extensions m_userLocationInformationW_AGF_id_GlobalCable_ID( + in template (value) GlobalCable_ID p_globalCable_ID + ) := { + id := id_GlobalCable_ID, + criticality := ignore, + value_ := { GlobalCable_ID := p_globalCable_ID } + } // End of template m_userLocationInformationW_AGF_id_GlobalCable_ID + + template (value) UserLocationInformationW_AGF.choice_Extensions m_userLocationInformationW_AGF_id_HFCNode_ID_new( + in template (value) HFCNode_ID_new p_hFCNode_ID_new + ) := { + id := id_HFCNode_ID_new, + criticality := ignore, + value_ := { HFCNode_ID_new := p_hFCNode_ID_new } + } // End of template m_userLocationInformationW_AGF_id_HFCNode_ID_new + + template (value) UserLocationInformationW_AGF.choice_Extensions m_userLocationInformationW_AGF_id_GlobalCable_ID_new( + in template (value) GlobalCable_ID_new p_globalCable_ID_new + ) := { + id := id_GlobalCable_ID_new, + criticality := ignore, + value_ := { GlobalCable_ID_new := p_globalCable_ID_new } + } // End of template m_userLocationInformationW_AGF_id_GlobalCable_ID_new + + + + template (omit) UserLocationInformationNR m_userLocationInformationNR( + in template (value) NR_CGI p_nR_CGI, + in template (value) TAI p_tAI, + in template (omit) TimeStamp p_timeStamp := omit, + in template (omit) UserLocationInformationNR.iE_Extensions p_iE_Extensions := omit + ) := { + nR_CGI := p_nR_CGI, + tAI := p_tAI, + timeStamp := p_timeStamp, + iE_Extensions := p_iE_Extensions + } // End of template m_userLocationInformationNR + + template (value) UserLocationInformationNR.iE_Extensions m_userLocationInformationNR_id_PSCellInformation( + in template (value) NGRAN_CGI p_nGRAN_CGI + ) := { + { + id := id_PSCellInformation, + criticality := ignore, + extensionValue := { NGRAN_CGI := p_nGRAN_CGI } + } + } // End of template m_userLocationInformationNR_id_PSCellInformation + + template (value) UserLocationInformationNR.iE_Extensions m_userLocationInformationNR_id_NID( + in template (value) NID p_nID + ) := { + { + id := id_NID, + criticality := reject, + extensionValue := { NID := p_nID } + } + } // End of template m_userLocationInformationNR_id_NID + + template (value) UserLocationInformationNR.iE_Extensions m_userLocationInformationNR_id_NRNTNTAIInformation( + in template (value) NRNTNTAIInformation p_nRNTNTAIInformation + ) := { + { + id := id_NRNTNTAIInformation, + criticality := ignore, + extensionValue := { NRNTNTAIInformation := p_nRNTNTAIInformation } + } + } // End of template m_userLocationInformationNR_id_NRNTNTAIInformation + + template (omit) UserPlaneSecurityInformation m_userPlaneSecurityInformation( + in template (value) SecurityResult p_securityResult, + in template (value) SecurityIndication p_securityIndication, + in template (omit) UserPlaneSecurityInformation.iE_Extensions p_iE_Extensions := omit + ) := { + securityResult := p_securityResult, + securityIndication := p_securityIndication, + iE_Extensions := p_iE_Extensions + } // End of template m_userPlaneSecurityInformation + + template (omit) VolumeTimedReport_Item m_volumeTimedReport_Item( + in template (value) VolumeTimedReport_Item.startTimeStamp p_startTimeStamp, + in template (value) VolumeTimedReport_Item.endTimeStamp p_endTimeStamp, + in template (value) VolumeTimedReport_Item.usageCountUL p_usageCountUL, + in template (value) VolumeTimedReport_Item.usageCountDL p_usageCountDL, + in template (omit) VolumeTimedReport_Item.iE_Extensions p_iE_Extensions := omit + ) := { + startTimeStamp := p_startTimeStamp, + endTimeStamp := p_endTimeStamp, + usageCountUL := p_usageCountUL, + usageCountDL := p_usageCountDL, + iE_Extensions := p_iE_Extensions + } // End of template m_volumeTimedReport_Item + + template (value) W_AGF_ID m_w_AGF_ID_w_AGF_ID( + in template (value) W_AGF_ID.w_AGF_ID p_w_AGF_ID + ) := { + w_AGF_ID := p_w_AGF_ID + } // End of template m_w_AGF_ID_w_AGF_ID + + template (value) W_AGF_ID m_w_AGF_ID_choice_Extensions( + in template (value) W_AGF_ID.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_w_AGF_ID_choice_Extensions + + template (value) WarningAreaList m_warningAreaList_eUTRA_CGIListForWarning( + in template (value) EUTRA_CGIListForWarning p_eUTRA_CGIListForWarning + ) := { + eUTRA_CGIListForWarning := p_eUTRA_CGIListForWarning + } // End of template m_warningAreaList_eUTRA_CGIListForWarning + + template (value) WarningAreaList m_warningAreaList_nR_CGIListForWarning( + in template (value) NR_CGIListForWarning p_nR_CGIListForWarning + ) := { + nR_CGIListForWarning := p_nR_CGIListForWarning + } // End of template m_warningAreaList_nR_CGIListForWarning + + template (value) WarningAreaList m_warningAreaList_tAIListForWarning( + in template (value) TAIListForWarning p_tAIListForWarning + ) := { + tAIListForWarning := p_tAIListForWarning + } // End of template m_warningAreaList_tAIListForWarning + + template (value) WarningAreaList m_warningAreaList_emergencyAreaIDList( + in template (value) EmergencyAreaIDList p_emergencyAreaIDList + ) := { + emergencyAreaIDList := p_emergencyAreaIDList + } // End of template m_warningAreaList_emergencyAreaIDList + + template (value) WarningAreaList m_warningAreaList_choice_Extensions( + in template (value) WarningAreaList.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template m_warningAreaList_choice_Extensions + + template (omit) WLANMeasurementConfiguration m_wLANMeasurementConfiguration( + in template (value) WLANMeasConfig p_wlanMeasConfig, + in template (omit) WLANMeasConfigNameList p_wlanMeasConfigNameList := omit, + in template (omit) WLANMeasurementConfiguration.wlan_rssi p_wlan_rssi := omit, + in template (omit) WLANMeasurementConfiguration.wlan_rtt p_wlan_rtt := omit, + in template (omit) WLANMeasurementConfiguration.iE_Extensions p_iE_Extensions := omit + ) := { + wlanMeasConfig := p_wlanMeasConfig, + wlanMeasConfigNameList := p_wlanMeasConfigNameList, + wlan_rssi := p_wlan_rssi, + wlan_rtt := p_wlan_rtt, + iE_Extensions := p_iE_Extensions + } // End of template m_wLANMeasurementConfiguration + + template (omit) WLANMeasConfigNameItem m_wLANMeasConfigNameItem( + in template (value) WLANName p_wLANName, + in template (omit) WLANMeasConfigNameItem.iE_Extensions p_iE_Extensions := omit + ) := { + wLANName := p_wLANName, + iE_Extensions := p_iE_Extensions + } // End of template m_wLANMeasConfigNameItem + + template (value) WLANMeasConfig m_wLANMeasConfig(in WLANMeasConfig p_value := setup) := p_value; + + template (omit) WUS_Assistance_Information m_wUS_Assistance_Information( + in template (value) PagingProbabilityInformation p_pagingProbabilityInformation, + in template (omit) WUS_Assistance_Information.iE_Extensions p_iE_Extensions := omit + ) := { + pagingProbabilityInformation := p_pagingProbabilityInformation, + iE_Extensions := p_iE_Extensions + } // End of template m_wUS_Assistance_Information + + template (omit) XnExtTLA_Item m_xnExtTLA_Item( + in template (omit) TransportLayerAddress p_iPsecTLA := omit, + in template (omit) XnGTP_TLAs p_gTP_TLAs := omit, + in template (omit) XnExtTLA_Item.iE_Extensions p_iE_Extensions := omit + ) := { + iPsecTLA := p_iPsecTLA, + gTP_TLAs := p_gTP_TLAs, + iE_Extensions := p_iE_Extensions + } // End of template m_xnExtTLA_Item + + template (value) XnExtTLA_Item.iE_Extensions m_xnExtTLA_Item_id_SCTP_TLAs( + in template (value) SCTP_TLAs p_sCTP_TLAs + ) := { + { + id := id_SCTP_TLAs, + criticality := ignore, + extensionValue := { SCTP_TLAs := p_sCTP_TLAs } + } + } // End of template m_xnExtTLA_Item_id_SCTP_TLAs + + template (omit) XnTNLConfigurationInfo m_xnTNLConfigurationInfo( + in template (value) XnTLAs p_xnTransportLayerAddresses, + in template (omit) XnExtTLAs p_xnExtendedTransportLayerAddresses := omit, + in template (omit) XnTNLConfigurationInfo.iE_Extensions p_iE_Extensions := omit + ) := { + xnTransportLayerAddresses := p_xnTransportLayerAddresses, + xnExtendedTransportLayerAddresses := p_xnExtendedTransportLayerAddresses, + iE_Extensions := p_iE_Extensions + } // End of template m_xnTNLConfigurationInfo + + } // End of group send + + group Receive { + + template (present) AdditionalDLUPTNLInformationForHOItem mw_additionalDLUPTNLInformationForHOItem( + template (present) UPTransportLayerInformation p_additionalDL_NGU_UP_TNLInformation := ?, + template (present) QosFlowListWithDataForwarding p_additionalQosFlowSetupResponseList := ?, + template UPTransportLayerInformation p_additionalDLForwardingUPTNLInformation := *, + template AdditionalDLUPTNLInformationForHOItem.iE_Extensions p_iE_Extensions := * + ) := { + additionalDL_NGU_UP_TNLInformation := p_additionalDL_NGU_UP_TNLInformation, + additionalQosFlowSetupResponseList := p_additionalQosFlowSetupResponseList, + additionalDLForwardingUPTNLInformation := p_additionalDLForwardingUPTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_additionalDLUPTNLInformationForHOItem + + template (present) AdditionalDLUPTNLInformationForHOItem.iE_Extensions mw_additionalDLUPTNLInformationForHOItem_uPTransportLayerInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_AdditionalRedundantDL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_additionalDLUPTNLInformationForHOItem_iE_Extensions + + template (present) AdditionalQosFlowInformation mw_additionalQosFlowInformation(template (present) AdditionalQosFlowInformation p_value := ?) := p_value; + + template (present) AllocationAndRetentionPriority mw_allocationAndRetentionPriority( + template (present) PriorityLevelARP p_priorityLevelARP := ?, + template (present) Pre_emptionCapability p_pre_emptionCapability := ?, + template (present) Pre_emptionVulnerability p_pre_emptionVulnerability := ?, + template AllocationAndRetentionPriority.iE_Extensions p_iE_Extensions := * + ) := { + priorityLevelARP := p_priorityLevelARP, + pre_emptionCapability := p_pre_emptionCapability, + pre_emptionVulnerability := p_pre_emptionVulnerability, + iE_Extensions := p_iE_Extensions + } // End of template mw_allocationAndRetentionPriority + + template (present) AllowedNSSAI_Item mw_allowedNSSAI_Item( + template (present) S_NSSAI p_s_NSSAI := ?, + template AllowedNSSAI_Item.iE_Extensions p_iE_Extensions := * + ) := { + s_NSSAI := p_s_NSSAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_allowedNSSAI_Item + + template (present) Allowed_PNI_NPN_Item mw_allowed_PNI_NPN_Item( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) Allowed_PNI_NPN_Item.pNI_NPN_restricted p_pNI_NPN_restricted := ?, + template (present) Allowed_CAG_List_per_PLMN p_allowed_CAG_List_per_PLMN := ?, + template Allowed_PNI_NPN_Item.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + pNI_NPN_restricted := p_pNI_NPN_restricted, + allowed_CAG_List_per_PLMN := p_allowed_CAG_List_per_PLMN, + iE_Extensions := p_iE_Extensions + } // End of template mw_allowed_PNI_NPN_Item + + template (present) AlternativeQoSParaSetIndex mw_alternativeQoSParaSetIndex(template (present) integer p_value := ?) := p_value; + + template (present) AlternativeQoSParaSetNotifyIndex mw_alternativeQoSParaSetNotifyIndex(template (present) integer p_value := ?) := p_value; + + template (present) AlternativeQoSParaSetItem mw_alternativeQoSParaSetItem( + template (present) AlternativeQoSParaSetIndex p_alternativeQoSParaSetIndex := ?, + template BitRate p_guaranteedFlowBitRateDL := *, + template BitRate p_guaranteedFlowBitRateUL := *, + template PacketDelayBudget p_packetDelayBudget := *, + template PacketErrorRate p_packetErrorRate := *, + template AlternativeQoSParaSetItem.iE_Extensions p_iE_Extensions := * + ) := { + alternativeQoSParaSetIndex := p_alternativeQoSParaSetIndex, + guaranteedFlowBitRateDL := p_guaranteedFlowBitRateDL, + guaranteedFlowBitRateUL := p_guaranteedFlowBitRateUL, + packetDelayBudget := p_packetDelayBudget, + packetErrorRate := p_packetErrorRate, + iE_Extensions := p_iE_Extensions + } // End of template mw_alternativeQoSParaSetItem + + template (present) AMFName mw_aMFName(template (present) AMFName p_value := ?) := p_value; + + template (present) AMFNameVisibleString mw_aMFNameVisibleString(template (present) AMFNameVisibleString p_value := ?) := p_value; + + template (present) AMFNameUTF8String mw_aMFNameUTF8String(template (present) AMFNameUTF8String p_value := ?) := p_value; + + template (present) AMFPagingTarget mw_aMFPagingTarget_globalRANNodeID( + template (present) GlobalRANNodeID p_globalRANNodeID := ? + ) := { + globalRANNodeID := p_globalRANNodeID + } // End of template mw_aMFPagingTarget_globalRANNodeID + + template (present) AMFPagingTarget mw_aMFPagingTarget_tAI( + template (present) TAI p_tAI := ? + ) := { + tAI := p_tAI + } // End of template mw_aMFPagingTarget_tAI + + template (present) AMFPagingTarget mw_aMFPagingTarget_ext( + template (present) AMFPagingTarget.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_aMFPagingTarget_ext + + template (present) AMF_TNLAssociationSetupItem mw_aMF_TNLAssociationSetupItem( + template (present) CPTransportLayerInformation p_aMF_TNLAssociationAddress := ?, + template AMF_TNLAssociationSetupItem.iE_Extensions p_iE_Extensions := * + ) := { + aMF_TNLAssociationAddress := p_aMF_TNLAssociationAddress, + iE_Extensions := p_iE_Extensions + } // End of template mw_aMF_TNLAssociationSetupItem + + template (present) AMF_TNLAssociationToAddItem mw_aMF_TNLAssociationToAddItem( + template (present) CPTransportLayerInformation p_aMF_TNLAssociationAddress := ?, + template (present) TNLAddressWeightFactor p_tNLAddressWeightFactor := ?, + template TNLAssociationUsage p_tNLAssociationUsage := *, + template AMF_TNLAssociationToAddItem.iE_Extensions p_iE_Extensions := * + ):= { + aMF_TNLAssociationAddress := p_aMF_TNLAssociationAddress, + tNLAssociationUsage := p_tNLAssociationUsage, + tNLAddressWeightFactor := p_tNLAddressWeightFactor, + iE_Extensions := p_iE_Extensions + } // End of template mw_aMF_TNLAssociationToAddItem + + template (present) AMF_TNLAssociationToRemoveItem mw_aMF_TNLAssociationToRemoveItem( + template (present) CPTransportLayerInformation p_aMF_TNLAssociationAddress := ?, + template AMF_TNLAssociationToRemoveItem.iE_Extensions p_iE_Extensions := * + ) := { + aMF_TNLAssociationAddress := p_aMF_TNLAssociationAddress, + iE_Extensions := p_iE_Extensions + } // End of template mw_aMF_TNLAssociationToRemoveItem + + template (present) AMF_TNLAssociationToUpdateItem mw_aMF_TNLAssociationToUpdateItem( + template (present) CPTransportLayerInformation p_aMF_TNLAssociationAddress := ?, + template TNLAssociationUsage p_tNLAssociationUsage := *, + template TNLAddressWeightFactor p_tNLAddressWeightFactor := *, + template AMF_TNLAssociationToUpdateItem.iE_Extensions p_iE_Extensions := * + ) := { + aMF_TNLAssociationAddress := p_aMF_TNLAssociationAddress, + tNLAssociationUsage := p_tNLAssociationUsage, + tNLAddressWeightFactor := p_tNLAddressWeightFactor, + iE_Extensions := p_iE_Extensions + } // End of template mw_aMF_TNLAssociationToUpdateItem + + template AreaOfInterest mw_areaOfInterest( + template AreaOfInterestTAIList p_areaOfInterestTAIList := *, + template AreaOfInterestCellList p_areaOfInterestCellList := *, + template AreaOfInterestRANNodeList p_areaOfInterestRANNodeList := *, + template AreaOfInterest.iE_Extensions p_iE_Extensions := * + ) := { + areaOfInterestTAIList := p_areaOfInterestTAIList, + areaOfInterestCellList := p_areaOfInterestCellList, + areaOfInterestRANNodeList := p_areaOfInterestRANNodeList, + iE_Extensions := p_iE_Extensions + } // End of template mw_areaOfInterest + + template (present) AreaOfInterestCellItem mw_areaOfInterestCellItem( + template (present) NGRAN_CGI p_nGRAN_CGI := ?, + template AreaOfInterestCellItem.iE_Extensions p_iE_Extensions := * + ) := { + nGRAN_CGI := p_nGRAN_CGI, + iE_Extensions := p_iE_Extensions + } // End of template mw_areaOfInterestCellItem + + template (present) AreaOfInterestItem mw_areaOfInterestItem( + template (present) AreaOfInterest p_areaOfInterest := ?, + template (present) LocationReportingReferenceID p_locationReportingReferenceID := ?, + template AreaOfInterestItem.iE_Extensions p_iE_Extensions := * + ) := { + areaOfInterest := p_areaOfInterest, + locationReportingReferenceID := p_locationReportingReferenceID, + iE_Extensions := p_iE_Extensions + } // End of template mw_areaOfInterestItem + + template (present) AreaOfInterestRANNodeItem mw_areaOfInterestRANNodeItem( + template (present) GlobalRANNodeID p_globalRANNodeID := ?, + template AreaOfInterestRANNodeItem.iE_Extensions p_iE_Extensions := * + ):= { + globalRANNodeID := p_globalRANNodeID, + iE_Extensions := p_iE_Extensions + } // End of template mw_areaOfInterestRANNodeItem + + template (present) AreaOfInterestTAIItem mw_areaOfInterestTAIItem( + template (present) TAI p_tAI := ?, + template AreaOfInterestTAIItem.iE_Extensions p_iE_Extensions := * + ) := { + tAI := p_tAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_areaOfInterestTAIItem + + template AssistanceDataForPaging mw_assistanceDataForPaging( + template AssistanceDataForRecommendedCells p_assistanceDataForRecommendedCells := *, + template PagingAttemptInformation p_pagingAttemptInformation := *, + template AssistanceDataForPaging.iE_Extensions p_iE_Extensions := * + ) := { + assistanceDataForRecommendedCells := p_assistanceDataForRecommendedCells, + pagingAttemptInformation := p_pagingAttemptInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_assistanceDataForPaging + + template (present) AssistanceDataForPaging.iE_Extensions mw_assistanceDataForPaging_NPN_PagingAssistanceInformation( + template (present) NPN_PagingAssistanceInformation p_nPN_PagingAssistanceInformation := ? + ) := { + { + id := id_NPN_PagingAssistanceInformation, + criticality := ignore, + extensionValue := { NPN_PagingAssistanceInformation := p_nPN_PagingAssistanceInformation } + } + } // End of template mw_assistanceDataForPaging_NPN_PagingAssistanceInformation + + template (present) AssistanceDataForPaging.iE_Extensions mw_assistanceDataForPaging_pagingAssisDataforCEcapabUE( + template (present) PagingAssisDataforCEcapabUE p_pagingAssisDataforCEcapabUE := ? + ) := { + { + id := id_PagingAssisDataforCEcapabUE, + criticality := ignore, + extensionValue := { PagingAssisDataforCEcapabUE := p_pagingAssisDataforCEcapabUE } + } + } // End of template mw_assistanceDataForPaging_pagingAssisDataforCEcapabUE + + template (present) AssistanceDataForPaging.iE_Extensions mw_assistanceDataForPaging_full( + template (present) NPN_PagingAssistanceInformation p_nPN_PagingAssistanceInformation := ?, + template (present) PagingAssisDataforCEcapabUE p_pagingAssisDataforCEcapabUE := ? + ) := { + { + id := id_NPN_PagingAssistanceInformation, + criticality := ignore, + extensionValue := { NPN_PagingAssistanceInformation := p_nPN_PagingAssistanceInformation } + }, + { + id := id_PagingAssisDataforCEcapabUE, + criticality := ignore, + extensionValue := { PagingAssisDataforCEcapabUE := p_pagingAssisDataforCEcapabUE } + } + } // End of template mw_assistanceDataForPaging_full + + template (present) AssistanceDataForRecommendedCells mw_assistanceDataForRecommendedCells( + template (present) RecommendedCellsForPaging p_recommendedCellsForPaging := ?, + template AssistanceDataForRecommendedCells.iE_Extensions p_iE_Extensions := * + ) := { + recommendedCellsForPaging := p_recommendedCellsForPaging, + iE_Extensions := p_iE_Extensions + } // End of template mw_assistanceDataForRecommendedCells + + template (present) AssociatedMBSQosFlowSetupRequestItem mw_associatedMBSQosFlowSetupRequestItem( + template (present) QosFlowIdentifier p_mBS_QosFlowIdentifier := ?, + template (present) QosFlowIdentifier p_associatedUnicastQosFlowIdentifier := ?, + template AssociatedMBSQosFlowSetupRequestItem.iE_Extensions p_iE_Extensions := * + ) := { + mBS_QosFlowIdentifier := p_mBS_QosFlowIdentifier, + associatedUnicastQosFlowIdentifier := p_associatedUnicastQosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template mw_associatedMBSQosFlowSetupRequestItem + + template (present) AssociatedMBSQosFlowSetuporModifyRequestItem mw_associatedMBSQosFlowSetuporModifyRequestItem( + template (present) QosFlowIdentifier p_mBS_QosFlowIdentifier := ?, + template (present) QosFlowIdentifier p_associatedUnicastQosFlowIdentifier := ?, + template AssociatedMBSQosFlowSetuporModifyRequestItem.iE_Extensions p_iE_Extensions := * + ) := { + mBS_QosFlowIdentifier := p_mBS_QosFlowIdentifier, + associatedUnicastQosFlowIdentifier := p_associatedUnicastQosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template mw_associatedMBSQosFlowSetuporModifyRequestItem + + template (present) AssociatedQosFlowItem mw_associatedQosFlowItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template AssociatedQosFlowItem.qosFlowMappingIndication p_qosFlowMappingIndication := *, + template AssociatedQosFlowItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + qosFlowMappingIndication := p_qosFlowMappingIndication, + iE_Extensions := p_iE_Extensions + } // End of template mw_associatedQosFlowItem + + template (present) AssociatedQosFlowItem.iE_Extensions mw_associatedQosFlowItem_alternativeQoSParaSetIndex( + template (present) AlternativeQoSParaSetIndex p_alternativeQoSParaSetIndex := ? + ) := { + { + id := id_CurrentQoSParaSetIndex, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetIndex := p_alternativeQoSParaSetIndex } + } + } // End of template mw_associatedQosFlowItem_alternativeQoSParaSetIndex + + template (present) AuthenticatedIndication mw_authenticatedIndication(template (present) AuthenticatedIndication p_value := true_) := p_value; + + template (present) AreaScopeOfMDT_NR mw_areaScopeOfMDT_NR_cellBased( + template (present) CellBasedMDT_NR p_cellBased := ? + ) := { + cellBased := p_cellBased + } // End of template mw_areaScopeOfMDT_cellBased + + template (present) AreaScopeOfMDT_NR mw_areaScopeOfMDT_tABased( + template (present) TABasedMDT p_tABased := ? + ) := { + tABased := p_tABased + } // End of template mw_areaScopeOfMDT_tABased + + template (present) AreaScopeOfMDT_NR mw_areaScopeOfMDT_pLMNWide := { + pLMNWide := NULL + } // End of template mw_areaScopeOfMDT_pLMNWide + + template (present) AreaScopeOfMDT_NR mw_areaScopeOfMDT_tAIBased( + template (present) TAIBasedMDT p_tAIBased := ? + ) := { + tAIBased := p_tAIBased + } // End of template mw_areaScopeOfMDT_tAIBased + + template (present) AreaScopeOfMDT_NR mw_areaScopeOfMDT_ext( + template (present) AreaScopeOfMDT_NR.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_areaScopeOfMDT_ext + + template (present) AreaScopeOfNeighCellsItem mw_areaScopeOfNeighCellsItem( + template (present) NRFrequencyInfo p_nrFrequencyInfo := ?, + template PCIListForMDT p_pciListForMDT := *, + template AreaScopeOfNeighCellsItem.iE_Extensions p_iE_Extensions := * + ) := { + nrFrequencyInfo := p_nrFrequencyInfo, + pciListForMDT := p_pciListForMDT, + iE_Extensions := p_iE_Extensions + } // End of template mw_areaScopeOfNeighCellsItem + + template (present) AreaScopeOfQMC mw_areaScopeOfQMC_cellBased( + template (present) CellBasedQMC p_cellBased := ? + ) := { + cellBased := p_cellBased + } // End of template mw_areaScopeOfQMC_cellBased + + template (present) AreaScopeOfQMC mw_areaScopeOfQMC_tABased( + template (present) TABasedQMC p_tABased := ? + ) := { + tABased := p_tABased + } // End of template mw_areaScopeOfQMC_tABased + + template (present) AreaScopeOfQMC mw_areaScopeOfQMC_tAIBased( + template (present) TAIBasedQMC p_tAIBased := ? + ) := { + tAIBased := p_tAIBased + } // End of template mw_areaScopeOfQMC_tAIBased + + template (present) AreaScopeOfQMC mw_areaScopeOfQMC_pLMNAreaBased( + template (present) PLMNAreaBasedQMC p_pLMNAreaBased := ? + ) := { + pLMNAreaBased := p_pLMNAreaBased + } // End of template mw_areaScopeOfQMC_pLMNAreaBased + + template (present) AreaScopeOfQMC mw_areaScopeOfQMC_ext( + template (present) AreaScopeOfQMC.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_areaScopeOfQMC_ext + + template (present) AreaScopeOfMDT_EUTRA mw_areaScopeOfMDT_EUTRA_cellBased( + template (present) CellBasedMDT_EUTRA p_cellBased + ) := { + cellBased := p_cellBased + } // End of template mw_areaScopeOfMDT_EUTRA_cellBased + + template (present) AreaScopeOfMDT_EUTRA mw_areaScopeOfMDT_EUTRA_tABased( + template (present) TABasedMDT p_tABased + ) := { + tABased := p_tABased + } // End of template mw_areaScopeOfMDT_EUTRA_tABased + + template (present) AreaScopeOfMDT_EUTRA mw_areaScopeOfMDT_EUTRA_pLMNWide := { + pLMNWide := NULL + } // End of template mw_areaScopeOfMDT_EUTRA_pLMNWide + + template (present) AreaScopeOfMDT_EUTRA mw_areaScopeOfMDT_EUTRA_tAIBased( + template (present) TAIBasedMDT p_tAIBased + ) := { + tAIBased := p_tAIBased + } // End of template mw_areaScopeOfMDT_EUTRA_tAIBased + + template (present) AreaScopeOfMDT_EUTRA mw_areaScopeOfMDT_EUTRA_ext( + template (present) AreaScopeOfMDT_EUTRA.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_areaScopeOfMDT_EUTRA_ext + + template AvailableRANVisibleQoEMetrics mw_availableRANVisibleQoEMetrics( + template AvailableRANVisibleQoEMetrics.applicationLayerBufferLevelList p_applicationLayerBufferLevelList := *, + template AvailableRANVisibleQoEMetrics.playoutDelayForMediaStartup p_playoutDelayForMediaStartup := *, + template AvailableRANVisibleQoEMetrics.iE_Extensions p_iE_Extensions := * + ) := { + applicationLayerBufferLevelList := p_applicationLayerBufferLevelList, + playoutDelayForMediaStartup := p_playoutDelayForMediaStartup, + iE_Extensions := p_iE_Extensions + } // End of template mw_availableRANVisibleQoEMetrics + + template BeamMeasurementsReportConfiguration mw_beamMeasurementsReportConfiguration( + template BeamMeasurementsReportQuantity p_beamMeasurementsReportQuantity := *, + template MaxNrofRS_IndexesToReport p_maxNrofRS_IndexesToReport := *, + template BeamMeasurementsReportConfiguration.iE_Extensions p_iE_Extensions := * + ) := { + beamMeasurementsReportQuantity := p_beamMeasurementsReportQuantity, + maxNrofRS_IndexesToReport := p_maxNrofRS_IndexesToReport, + iE_Extensions := p_iE_Extensions + } // End of template mw_beamMeasurementsReportConfiguration + + template BeamMeasurementsReportQuantity mw_beamMeasurementsReportQuantity( + template BeamMeasurementsReportQuantity.rSRP p_rSRP := true_, + template BeamMeasurementsReportQuantity.rSRQ p_rSRQ := true_, + template BeamMeasurementsReportQuantity.sINR p_sINR := true_, + template BeamMeasurementsReportQuantity.iE_Extensions p_iE_Extensions := * + ) := { + rSRP := p_rSRP, + rSRQ := p_rSRQ, + sINR := p_sINR, + iE_Extensions := p_iE_Extensions + } // End of template mw_beamMeasurementsReportQuantity + + template (present) BitRate mw_bitRate (template (present) BitRate p_value := ?) := p_value; + + template (present) BroadcastCancelledAreaList mw_broadcastCancelledAreaList_cellIDCancelledEUTRA( + template (present) CellIDCancelledEUTRA p_cellIDCancelledEUTRA := ? + ) := { + cellIDCancelledEUTRA := p_cellIDCancelledEUTRA + } // End of template mw_broadcastCancelledAreaList_cellIDCancelledEUTRA + + template (present) BroadcastCancelledAreaList mw_broadcastCancelledAreaList_tAICancelledEUTRA( + template (present) TAICancelledEUTRA p_tAICancelledEUTRA := ? + ) := { + tAICancelledEUTRA := p_tAICancelledEUTRA + } // End of template mw_broadcastCancelledAreaList_tAICancelledEUTRA + + template (present) BroadcastCancelledAreaList mw_broadcastCancelledAreaList_emergencyAreaIDCancelledEUTRA( + template (present) EmergencyAreaIDCancelledEUTRA p_emergencyAreaIDCancelledEUTRA := ? + ) := { + emergencyAreaIDCancelledEUTRA := p_emergencyAreaIDCancelledEUTRA + } // End of template mw_broadcastCancelledAreaList_emergencyAreaIDCancelledEUTRA + + template (present) BroadcastCancelledAreaList mw_broadcastCancelledAreaList_cellIDCancelledNR( + template (present) CellIDCancelledNR p_cellIDCancelledNR := ? + ) := { + cellIDCancelledNR := p_cellIDCancelledNR + } // End of template mw_broadcastCancelledAreaList_cellIDCancelledNR + + template (present) BroadcastCancelledAreaList mw_broadcastCancelledAreaList_tAICancelledNR( + template (present) TAICancelledNR p_tAICancelledNR := ? + ) := { + tAICancelledNR := p_tAICancelledNR + } // End of template mw_broadcastCancelledAreaList_tAICancelledNR + + template (present) BroadcastCancelledAreaList mw_broadcastCancelledAreaList_emergencyAreaIDCancelledNR( + template (present) EmergencyAreaIDCancelledNR p_emergencyAreaIDCancelledNR := ? + ) := { + emergencyAreaIDCancelledNR := p_emergencyAreaIDCancelledNR + } // End of template mw_broadcastCancelledAreaList_ext + + template (present) BroadcastCancelledAreaList mw_broadcastCancelledAreaList_ext( + template (present) BroadcastCancelledAreaList.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_broadcastCancelledAreaList_ext + + template (present) BroadcastCompletedAreaList mw_broadcastCompletedAreaList_cellIDBroadcastEUTRA( + template (present) CellIDBroadcastEUTRA p_cellIDBroadcastEUTRA + ) := { + cellIDBroadcastEUTRA := p_cellIDBroadcastEUTRA + } // End of template mw_broadcastCompletedAreaList_cellIDCancelledEUTRA + + template (present) BroadcastCompletedAreaList mw_broadcastCompletedAreaList_tAIBroadcastEUTRA( + template (present) TAIBroadcastEUTRA p_tAIBroadcastEUTRA + ) := { + tAIBroadcastEUTRA := p_tAIBroadcastEUTRA + } // End of template mw_broadcastCompletedAreaList_tAIBroadcastEUTRA + + template (present) BroadcastCompletedAreaList mw_broadcastCompletedAreaList_emergencyAreaIDBroadcastEUTRA( + template (present) EmergencyAreaIDBroadcastEUTRA p_emergencyAreaIDBroadcastEUTRA + ) := { + emergencyAreaIDBroadcastEUTRA := p_emergencyAreaIDBroadcastEUTRA + } // End of template mw_broadcastCompletedAreaList_emergencyAreaIDBroadcastEUTRA + + template (present) BroadcastCompletedAreaList mw_broadcastCompletedAreaList_cellIDBroadcastNR( + template (present) CellIDBroadcastNR p_cellIDBroadcastNR + ) := { + cellIDBroadcastNR := p_cellIDBroadcastNR + } // End of template mw_broadcastCompletedAreaList_cellIDBroadcastNR + + template (present) BroadcastCompletedAreaList mw_broadcastCompletedAreaList_tAIBroadcastNR( + template (present) TAIBroadcastNR p_tAIBroadcastNR + ) := { + tAIBroadcastNR := p_tAIBroadcastNR + } // End of template mw_broadcastCompletedAreaList_tAIBroadcastNR + + template (present) BroadcastCompletedAreaList mw_broadcastCompletedAreaList_emergencyAreaIDBroadcastNR( + template (present) EmergencyAreaIDBroadcastNR p_emergencyAreaIDBroadcastNR + ) := { + emergencyAreaIDBroadcastNR := p_emergencyAreaIDBroadcastNR + } // End of template mw_broadcastCompletedAreaList_emergencyAreaIDBroadcastNR + + template (present) BroadcastCompletedAreaList mw_broadcastCompletedAreaList_ext( + template (present) BroadcastCompletedAreaList.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_broadcastCompletedAreaList_ext + + template (present) BroadcastPLMNItem mw_ie_broadcastPLMNItem( + template (present) PLMNIdentity p_plmnId := ?, + template (present) SliceSupportList p_ssl := ?, + template BroadcastPLMNItem.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_plmnId, + tAISliceSupportList := p_ssl, + iE_Extensions := p_iE_Extensions + } // End of template mw_ie_broadcastPLMNItem + + template (present) BluetoothMeasurementConfiguration mw_bluetoothMeasurementConfiguration( + template (present) BluetoothMeasConfig p_bluetoothMeasConfig := ?, + template BluetoothMeasConfigNameList p_bluetoothMeasConfigNameList := *, + template BluetoothMeasurementConfiguration.bt_rssi p_bt_rssi := *, + template BluetoothMeasurementConfiguration.iE_Extensions p_iE_Extensions := * + ) := { + bluetoothMeasConfig := p_bluetoothMeasConfig, + bluetoothMeasConfigNameList := p_bluetoothMeasConfigNameList, + bt_rssi := p_bt_rssi, + iE_Extensions := p_iE_Extensions + } // End of template mw_bluetoothMeasurementConfiguration + + template (present) BluetoothMeasConfigNameItem mw_bluetoothMeasConfigNameItem( + template (present) BluetoothName p_bluetoothName := ?, + template BluetoothMeasConfigNameItem.iE_Extensions p_iE_Extensions := * + ) := { + bluetoothName := p_bluetoothName, + iE_Extensions := p_iE_Extensions + } // End of template mw_bluetoothMeasConfigNameItem + + template (present) BluetoothMeasConfig mw_bluetoothMeasConfig(template (present) BluetoothMeasConfig p_value := setup) := p_value; + + template (present) CancelAllWarningMessages mw_cancelAllWarningMessages(template (present) CancelAllWarningMessages p_value := true_) := p_value; + + template (present) CancelledCellsInEAI_EUTRA_Item mw_cancelledCellsInEAI_EUTRA_Item( + template (present) EUTRA_CGI p_eUTRA_CGI := ?, + template (present) NumberOfBroadcasts p_numberOfBroadcasts := ?, + template CancelledCellsInEAI_EUTRA_Item.iE_Extensions p_iE_Extensions := * + ) := { + eUTRA_CGI := p_eUTRA_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template mw_cancelledCellsInEAI_EUTRA_Item + + template (present) CancelledCellsInEAI_NR_Item mw_cancelledCellsInEAI_NR_Item( + template (present) NR_CGI p_nR_CGI := ?, + template (present) NumberOfBroadcasts p_numberOfBroadcasts := ?, + template CancelledCellsInEAI_NR_Item.iE_Extensions p_iE_Extensions := * + ) := { + nR_CGI := p_nR_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template mw_cancelledCellsInEAI_NR_Item + + template (present) CancelledCellsInTAI_EUTRA_Item mw_cancelledCellsInTAI_EUTRA_Item( + template (present) EUTRA_CGI p_eUTRA_CGI := ?, + template (present) NumberOfBroadcasts p_numberOfBroadcasts := ?, + template CancelledCellsInTAI_EUTRA_Item.iE_Extensions p_iE_Extensions := * + ) := { + eUTRA_CGI := p_eUTRA_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template mw_cancelledCellsInTAI_EUTRA_Item + + template (present) CancelledCellsInTAI_NR_Item mw_CancelledCellsInTAI_NR_Item( + template (present) NR_CGI p_nR_CGI := ?, + template (present) NumberOfBroadcasts p_numberOfBroadcasts := ?, + template CancelledCellsInTAI_NR_Item.iE_Extensions p_iE_Extensions := * + ) := { + nR_CGI := p_nR_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template mw_CancelledCellsInTAI_NR_Item + + template (present) CandidateCellItem mw_candidateCellItem( + template (present) CandidateCell p_candidateCell := ?, + template CandidateCellItem.iE_Extensions p_iE_Extensions := * + ) := { + candidateCell := p_candidateCell, + iE_Extensions := p_iE_Extensions + } // End of template mw_candidateCellItem + + template (present) CandidateCell mw_candidateCell_candidateCGI( + template (present) CandidateCellID p_candidateCGI := ? + ) := { + candidateCGI := p_candidateCGI + } // End of template mw_candidateCell_candidateCGI + + template (present) CandidateCell mw_candidateCell_candidatePCI( + template (present) CandidatePCI p_candidatePCI := ? + ) := { + candidatePCI := p_candidatePCI + } // End of template mw_candidateCell_candidatePCI + + template (present) CandidateCell mw_candidateCell_ext( + template (present) CandidateCell.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_candidateCell_ext + + template (present) CandidatePCI mw_candidatePCI( + template (present) CandidatePCI.candidatePCI p_candidatePCI := ?, + template (present) CandidatePCI.candidateNRARFCN p_candidateNRARFCN := ?, + template CandidatePCI.iE_Extensions p_iE_Extensions := * + ) := { + candidatePCI := p_candidatePCI, + candidateNRARFCN := p_candidateNRARFCN, + iE_Extensions := p_iE_Extensions + } // End of template mw_candidatePCI + + template (present) Cause mw_cause_radioNetwork( + template (present) CauseRadioNetwork p_radioNetwork + ) := { + radioNetwork := p_radioNetwork + } // End of template mw_cause_radioNetwork + + template (present) Cause mw_cause_transport( + template (present) CauseTransport p_transport + ) := { + transport := p_transport + } // End of template mw_cause_transport + + template (present) Cause mw_cause_nas( + template (present) CauseNas p_nas + ) := { + nas := p_nas + } // End of template mw_cause_nas + + template (present) Cause mw_cause_protocol( + template (present) CauseProtocol p_protocol + ) := { + protocol := p_protocol + } // End of template mw_cause_protocol + + template (present) Cause mw_cause_misc( + template (present) CauseMisc p_misc + ) := { + misc := p_misc + } // End of template mw_cause_misc + + template (present) Cause mw_cause_ext( + template (present) Cause.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_cause_ext + + template (present) CauseMisc mw_causeMisc(template (present) CauseMisc p_value := ?) := p_value; + + template (present) CauseNas mw_causeNas(template (present) CauseNas p_value := ?) := p_value; + + template (present) CauseProtocol mw_causeProtocol(template (present) CauseProtocol p_value := ?) := p_value; + + template (present) CauseRadioNetwork mww_causeRadioNetwork(template (present) CauseRadioNetwork p_value := ?) := p_value; + + template (present) CauseTransport mw_causeTransport(template (present) CauseTransport p_value := ?) := p_value; + + template (present) Cell_CAGInformation mw_cell_CAGInformation( + template (present) NGRAN_CGI p_nGRAN_CGI := ?, + template (present) CellCAGList p_cellCAGList := ?, + template Cell_CAGInformation.iE_Extensions p_iE_Extensions := * + ) := { + nGRAN_CGI := p_nGRAN_CGI, + cellCAGList := p_cellCAGList, + iE_Extensions := p_iE_Extensions + } // End of template mw_cell_CAGInformation + + template (present) CellIDBroadcastEUTRA_Item mw_cellIDBroadcastEUTRA_Item( + template (present) EUTRA_CGI p_eUTRA_CGI := ?, + template CellIDBroadcastEUTRA_Item.iE_Extensions p_iE_Extensions := * + ) := { + eUTRA_CGI := p_eUTRA_CGI, + iE_Extensions := p_iE_Extensions + } // End of template mw_cellIDBroadcastEUTRA_Item + + template (present) CellIDBroadcastNR_Item mw_cellIDBroadcastNR_Item( + template (present) NR_CGI p_nR_CGI := ?, + template CellIDBroadcastNR_Item.iE_Extensions p_iE_Extensions := * + ) := { + nR_CGI := p_nR_CGI, + iE_Extensions := p_iE_Extensions + } // End of template mw_cellIDBroadcastNR_Item + + template (present) CellIDCancelledEUTRA_Item mw_cellIDCancelledEUTRA_Item( + template (present) EUTRA_CGI p_eUTRA_CGI := ?, + template (present) NumberOfBroadcasts p_numberOfBroadcasts := ?, + template CellIDCancelledEUTRA_Item.iE_Extensions p_iE_Extensions := * + ) := { + eUTRA_CGI := p_eUTRA_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template mw_cellIDCancelledEUTRA_Item + + template (present) CellIDCancelledNR_Item mw_cellIDCancelledNR_Item( + template (present) NR_CGI p_nR_CGI := ?, + template (present) NumberOfBroadcasts p_numberOfBroadcasts := ?, + template CellIDCancelledNR_Item.iE_Extensions p_iE_Extensions := * + ) := { + nR_CGI := p_nR_CGI, + numberOfBroadcasts := p_numberOfBroadcasts, + iE_Extensions := p_iE_Extensions + } // End of template mw_cellIDCancelledNR_Item + + template (present) CellIDListForRestart mw_cellIDListForRestart_eUTRA_CGIListforRestart( + template (present) EUTRA_CGIList p_eUTRA_CGIListforRestart := ? + ) := { + eUTRA_CGIListforRestart := p_eUTRA_CGIListforRestart + } // End of template mw_cellIDListForRestart_misc + + template (present) CellIDListForRestart mw_cellIDListForRestart_nR_CGIListforRestart( + template (present) NR_CGIList p_nR_CGIListforRestart := ? + ) := { + nR_CGIListforRestart := p_nR_CGIListforRestart + } // End of template mw_cellIDListForRestart_nR_CGIListforRestart + + template (present) CellIDListForRestart mw_cellIDListForRestart_ext( + template (present) CellIDListForRestart.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_cellIDListForRestart_ext + + template (present) CellSize mw_cellSize(template (present) CellSize p_value := ?) := p_value; + + template (present) CellType mw_cellType( + template (present) CellSize p_cellSize:= ?, + template CellType.iE_Extensions p_iE_Extensions := * + ) := { + cellSize := p_cellSize, + iE_Extensions := p_iE_Extensions + } // End of template mw_cellType + + template (present) CEmodeBSupport_Indicator mw_cEmodeBSupport_Indicator(template (present) CEmodeBSupport_Indicator p_value := ?) := p_value; + + template (present) CEmodeBrestricted mw_cEmodeBrestricted(template (present) CEmodeBrestricted p_value := ?) := p_value; + + template CNAssistedRANTuning mw_cNAssistedRANTuning( + template ExpectedUEBehaviour p_expectedUEBehaviour := *, + template CNAssistedRANTuning.iE_Extensions p_iE_Extensions := * + ) := { + expectedUEBehaviour := p_expectedUEBehaviour, + iE_Extensions := p_iE_Extensions + } // End of template mw_cNAssistedRANTuning + + template (present) CNTypeRestrictionsForEquivalentItem mw_cNTypeRestrictionsForEquivalentItem( + template (present) PLMNIdentity p_plmnIdentity := ?, + template (present) CNTypeRestrictionsForEquivalentItem.cn_Type p_cn_Type := ?, + template CNTypeRestrictionsForEquivalentItem.iE_Extensions p_iE_Extensions := * + ) := { + plmnIdentity := p_plmnIdentity, + cn_Type := p_cn_Type, + iE_Extensions := p_iE_Extensions + } // End of template mw_cNTypeRestrictionsForEquivalentItem + + template (present) CNTypeRestrictionsForServing mw_cNTypeRestrictionsForServing(template (present) CNTypeRestrictionsForServing p_value := ?) := p_value; + + template (present) CompletedCellsInEAI_EUTRA_Item mw_completedCellsInEAI_EUTRA_Item( + template (present) EUTRA_CGI p_eUTRA_CGI := ?, + template CompletedCellsInEAI_EUTRA_Item.iE_Extensions p_iE_Extensions := * + ) := { + eUTRA_CGI := p_eUTRA_CGI, + iE_Extensions := p_iE_Extensions + } // End of template mw_completedCellsInEAI_EUTRA_Item + + template (present) CompletedCellsInEAI_NR_Item mw_completedCellsInEAI_NR_Item( + template (present) NR_CGI p_nR_CGI := ?, + template CompletedCellsInEAI_NR_Item.iE_Extensions p_iE_Extensions := * + ) := { + nR_CGI := p_nR_CGI, + iE_Extensions := p_iE_Extensions + } // End of template mw_completedCellsInEAI_NR_Item + + template (present) CompletedCellsInTAI_EUTRA_Item mw_completedCellsInTAI_EUTRA_Item( + template (present) EUTRA_CGI p_eUTRA_CGI := ?, + template CompletedCellsInTAI_EUTRA_Item.iE_Extensions p_iE_Extensions := * + ) := { + eUTRA_CGI := p_eUTRA_CGI, + iE_Extensions := p_iE_Extensions + } // End of template mw_completedCellsInTAI_EUTRA_Item + + template (present) CompletedCellsInTAI_NR_Item mw_completedCellsInTAI_NR_Item( + template (present) NR_CGI p_nR_CGI := ?, + template CompletedCellsInTAI_NR_Item.iE_Extensions p_iE_Extensions := * + ) := { + nR_CGI := p_nR_CGI, + iE_Extensions := p_iE_Extensions + } // End of template mw_completedCellsInTAI_NR_Item + + template (present) ConcurrentWarningMessageInd mw_concurrentWarningMessageInd(template (present) ConcurrentWarningMessageInd p_value := true_) := p_value; + + template (present) ConfidentialityProtectionIndication mw_confidentialityProtectionIndication(template (present) ConfidentialityProtectionIndication p_value := ?) := p_value; + + template (present) ConfidentialityProtectionResult mw_confidentialityProtectionResult(template (present) ConfidentialityProtectionResult p_value := ?) := p_value; + + template (present) ConfiguredTACIndication mw_configuredTACIndication(template (present) ConfiguredTACIndication p_value := true_) := p_value; + + template (present) CoreNetworkAssistanceInformationForInactive mw_coreNetworkAssistanceInformationForInactive( + template (present) UEIdentityIndexValue p_uEIdentityIndexValue := ?, + template (present) PeriodicRegistrationUpdateTimer p_periodicRegistrationUpdateTimer := ?, + template (present) TAIListForInactive p_tAIListForInactive := ?, + template PagingDRX p_uESpecificDRX := *, + template MICOModeIndication p_mICOModeIndication := *, + template ExpectedUEBehaviour p_expectedUEBehaviour := *, + template CoreNetworkAssistanceInformationForInactive.iE_Extensions p_iE_Extensions := * + ) := { + uEIdentityIndexValue := p_uEIdentityIndexValue, + uESpecificDRX := p_uESpecificDRX, + periodicRegistrationUpdateTimer := p_periodicRegistrationUpdateTimer, + mICOModeIndication := p_mICOModeIndication, + tAIListForInactive := p_tAIListForInactive, + expectedUEBehaviour := p_expectedUEBehaviour, + iE_Extensions := p_iE_Extensions + } // End of template mw_coreNetworkAssistanceInformationForInactive + + template (present) CoreNetworkAssistanceInformationForInactive.iE_Extensions mw_coreNetworkAssistanceInformationForInactive_paging( + template (present) EUTRA_PagingeDRXInformation p_eUTRA_PagingeDRXInformation := ?, + template (present) ExtendedUEIdentityIndexValue p_extendedUEIdentityIndexValue := ?, + template (present) UERadioCapabilityForPaging p_uERadioCapabilityForPaging := ?, + template (present) MicoAllPLMN p_micoAllPLMN := ? + ) := { + { + id := id_EUTRA_PagingeDRXInformation, + criticality := ignore, + extensionValue := { EUTRA_PagingeDRXInformation := p_eUTRA_PagingeDRXInformation } + }, + { + id := id_ExtendedUEIdentityIndexValue, + criticality := ignore, + extensionValue := { ExtendedUEIdentityIndexValue := p_extendedUEIdentityIndexValue } + }, + { + id := id_UERadioCapabilityForPaging, + criticality := ignore, + extensionValue := { UERadioCapabilityForPaging := p_uERadioCapabilityForPaging } + }, + { + id := id_MicoAllPLMN, + criticality := ignore, + extensionValue := { MicoAllPLMN := p_micoAllPLMN } + } + // TODO To be enhanced + } // End of template mw_coreNetworkAssistanceInformationForInactive_paging + + template (present) COUNTValueForPDCP_SN12 mw_cOUNTValueForPDCP_SN12( + template (present) COUNTValueForPDCP_SN12.pDCP_SN12 p_pDCP_SN12 := ?, + template (present) COUNTValueForPDCP_SN12.hFN_PDCP_SN12 p_hFN_PDCP_SN12 := ?, + template COUNTValueForPDCP_SN12.iE_Extensions p_iE_Extensions := * + ) := { + pDCP_SN12 := p_pDCP_SN12, + hFN_PDCP_SN12 := p_hFN_PDCP_SN12, + iE_Extensions := p_iE_Extensions + } // End of template mw_cOUNTValueForPDCP_SN12 + + template (present) COUNTValueForPDCP_SN18 mw_cOUNTValueForPDCP_SN18( + template (present) COUNTValueForPDCP_SN18.pDCP_SN18 p_pDCP_SN18 := ?, + template (present) COUNTValueForPDCP_SN18.hFN_PDCP_SN18 p_hFN_PDCP_SN18 := ?, + template COUNTValueForPDCP_SN18.iE_Extensions p_iE_Extensions := * + ) := { + pDCP_SN18 := p_pDCP_SN18, + hFN_PDCP_SN18 := p_hFN_PDCP_SN18, + iE_Extensions := p_iE_Extensions + } // End of template mw_cOUNTValueForPDCP_SN18 + + template (present) CPTransportLayerInformation mw_cPTransportLayerInformation_endpointIPAddress( + template (present) TransportLayerAddress p_endpointIPAddress := ? + ) := { + endpointIPAddress := p_endpointIPAddress + } // End of template mw_cPTransportLayerInformation_endpointIPAddress + + template (present) CPTransportLayerInformation mw_cPTransportLayerInformation_choice_Extensions( + template (present) CPTransportLayerInformation.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_cPTransportLayerInformation_choice_Extensions + + template (present) CPTransportLayerInformation.choice_Extensions mw_cPTransportLayerInformation_ext( + template (present) EndpointIPAddressAndPort p_EndpointIPAddressAndPort := ? + ) := { + id := id_EndpointIPAddressAndPort, + criticality := reject, + value_ := { EndpointIPAddressAndPort := p_EndpointIPAddressAndPort } + } // End of template mw_cPTransportLayerInformation_ext + + template CriticalityDiagnostics mw_criticalityDiagnostics( + template ProcedureCode p_procedureCode := *, + template TriggeringMessage p_triggeringMessage := *, + template Criticality p_procedureCriticality := *, + template CriticalityDiagnostics_IE_List p_criticalityDiagnostics_IE_List := *, + template CriticalityDiagnostics.iE_Extensions p_iE_Extensions := * + ) := { + procedureCode := p_procedureCode, + triggeringMessage := p_triggeringMessage, + procedureCriticality := p_procedureCriticality, + iEsCriticalityDiagnostics := p_criticalityDiagnostics_IE_List, + iE_Extensions := p_iE_Extensions + } // End of template mw_criticalityDiagnostics + + template (present) CriticalityDiagnostics_IE_Item mw_criticalityDiagnostics_IE_Item( + template (present) Criticality p_iECriticality := ?, + template (present) ProtocolIE_ID p_iE_ID := ?, + template (present) TypeOfError p_typeOfError := ?, + template CriticalityDiagnostics_IE_Item.iE_Extensions p_iE_Extensions := * + ) := { + iECriticality := p_iECriticality, + iE_ID := p_iE_ID, + typeOfError := p_typeOfError, + iE_Extensions := p_iE_Extensions + } // End of template mw_criticalityDiagnostics_IE_Item + + template (present) CellBasedMDT_NR mw_cellBasedMDT_NR( + in template (present) CellIdListforMDT_NR p_cellIdListforMDT := ?, + in template CellBasedMDT_NR.iE_Extensions p_iE_Extensions := * + ) := { + cellIdListforMDT := p_cellIdListforMDT, + iE_Extensions := p_iE_Extensions + } // End of template mw_cellBasedMDT_NR + + template (present) CellBasedMDT_EUTRA mw_cellBasedMDT_EUTRA( + template (present) CellIdListforMDT_EUTRA p_cellIdListforMDT := ?, + template CellBasedMDT_EUTRA.iE_Extensions p_iE_Extensions := * + ) := { + cellIdListforMDT := p_cellIdListforMDT, + iE_Extensions := p_iE_Extensions + } // End of template mw_cellBasedMDT_EUTRA + + template (present) CellBasedQMC mw_cellBasedQMC( + template (present) CellIdListforQMC p_cellIdListforQMC := ?, + template CellBasedQMC.iE_Extensions p_iE_Extensions := * + ) := { + cellIdListforQMC := p_cellIdListforQMC, + iE_Extensions := p_iE_Extensions + } // End of template mw_cellBasedQMC + + template (present) DataForwardingNotPossible mw_DataForwardingNotPossible(template (present) DataForwardingNotPossible p_value := data_forwarding_not_possible) := p_value; + + template (present) DataForwardingAccepted mw_dataForwardingAccepted(template (present) DataForwardingAccepted p_value := ?) := p_value; + + template (present) DataForwardingResponseDRBItem mw_dataForwardingResponseDRBItem( + template (present) DRB_ID p_dRB_ID := ?, + template UPTransportLayerInformation p_dLForwardingUP_TNLInformation := *, + template UPTransportLayerInformation p_uLForwardingUP_TNLInformation := *, + template DataForwardingResponseDRBItem.iE_Extensions p_iE_Extensions := * + ) := { + dRB_ID := p_dRB_ID, + dLForwardingUP_TNLInformation := p_dLForwardingUP_TNLInformation, + uLForwardingUP_TNLInformation := p_uLForwardingUP_TNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_dataForwardingResponseDRBItem + + template (present) DAPSRequestInfo mw_dAPSRequestInfo( + template (present) DAPSRequestInfo.dAPSIndicator p_dAPSIndicator := daps_ho_required, + template DAPSRequestInfo.iE_Extensions p_iE_Extensions := * + ) := { + dAPSIndicator := p_dAPSIndicator, + iE_Extensions := p_iE_Extensions + } // End of template mw_dAPSRequestInfo + + template (present) DAPSResponseInfoItem mw_dAPSResponseInfoItem( + template (present) DRB_ID p_dRB_ID := ?, + template (present) DAPSResponseInfo p_dAPSResponseInfo := ?, + template DAPSResponseInfoItem.iE_Extension p_iE_Extension := * + ) := { + dRB_ID := p_dRB_ID, + dAPSResponseInfo := p_dAPSResponseInfo, + iE_Extension := p_iE_Extension + } // End of template mw_dAPSResponseInfoItem + + template (present) DAPSResponseInfo mw_dAPSResponseInfo( + template (present) DAPSResponseInfo.dapsresponseindicator p_dapsresponseindicator := ?, + template DAPSResponseInfo.iE_Extensions p_iE_Extensions := * + ) := { + dapsresponseindicator := p_dapsresponseindicator, + iE_Extensions := p_iE_Extensions + } // End of template mw_dAPSResponseInfo + + template (present) DataForwardingResponseERABListItem mw_DataForwardingResponseERABListItem( + template (present) E_RAB_ID p_e_RAB_ID := ?, + template (present) UPTransportLayerInformation p_dLForwardingUP_TNLInformation := ?, + template DataForwardingResponseERABListItem.iE_Extensions p_iE_Extensions := * + ) := { + e_RAB_ID := p_e_RAB_ID, + dLForwardingUP_TNLInformation := p_dLForwardingUP_TNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_DataForwardingResponseERABListItem + + template (present) DelayCritical mw_delayCritical(template (present) DelayCritical p_value := ?) := p_value; + + template (present) DL_CP_SecurityInformation mw_dL_CP_SecurityInformation( + template (present) DL_NAS_MAC p_dl_NAS_MAC := ?, + template DL_CP_SecurityInformation.iE_Extensions p_iE_Extensions := * + ) := { + dl_NAS_MAC := p_dl_NAS_MAC, + iE_Extensions := p_iE_Extensions + } // End of template mw_dL_CP_SecurityInformation + + template (present) DLForwarding mw_dLForwarding(template (present) DLForwarding p_value := dl_forwarding_proposed) := p_value; + + template (present) DL_NGU_TNLInformationReused mw_dL_NGU_TNLInformationReused(template (present) DL_NGU_TNLInformationReused p_value := true_) := p_value; + + template (present) DirectForwardingPathAvailability mw_directForwardingPathAvailability(template (present) DirectForwardingPathAvailability p_value := direct_path_available) := p_value; + + template (present) DRBsSubjectToStatusTransferItem mw_dRBsSubjectToStatusTransferItem( + in template (present) DRB_ID p_dRB_ID := ?, + in template (present) DRBStatusUL p_dRBStatusUL := ?, + in template (present) DRBStatusDL p_dRBStatusDL := ?, + in template DRBsSubjectToStatusTransferItem.iE_Extension p_iE_Extension := * + ) := { + dRB_ID := p_dRB_ID, + dRBStatusUL := p_dRBStatusUL, + dRBStatusDL := p_dRBStatusDL, + iE_Extension := p_iE_Extension + } // End of template mw_dRBsSubjectToStatusTransferItem + + template (present) DRBsSubjectToStatusTransferItem.iE_Extension mw_dRBsSubjectToStatusTransferItem_associatedQosFlowList( + template (present) AssociatedQosFlowList p_AssociatedQosFlowList := ? + ) := { + { + id := id_OldAssociatedQosFlowList_ULendmarkerexpected, + criticality := ignore, + extensionValue := { AssociatedQosFlowList := p_AssociatedQosFlowList } + } + } // End of template mw_dRBsSubjectToStatusTransferItem_associatedQosFlowList + + template (present) DRBStatusDL mw_dRBStatusDL_dRBStatusDL12( + template (present) DRBStatusDL12 p_dRBStatusDL12 := ? + ) := { + dRBStatusDL12 := p_dRBStatusDL12 + } // End of template mw_dRBStatusDL_dRBStatusDL12 + + template (present) DRBStatusDL mw_dRBStatusDL_dRBStatusDL18( + template (present) DRBStatusDL18 p_dRBStatusDL18 := ? + ) := { + dRBStatusDL18 := p_dRBStatusDL18 + } // End of template mw_dRBStatusDL_dRBStatusDL18 + + template (present) DRBStatusDL mw_dRBStatusDL_choice_Extensions( + template (present) DRBStatusDL.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_dRBStatusDL_choice_Extensions + + template (present) DRBStatusDL12 mw_dRBStatusDL12( + template (present) COUNTValueForPDCP_SN12 p_dL_COUNTValue := ?, + template DRBStatusDL12.iE_Extension p_iE_Extension := * + ) := { + dL_COUNTValue := p_dL_COUNTValue, + iE_Extension := p_iE_Extension + } // End of template mw_dRBStatusDL12 + + template (present) DRBStatusDL18 mw_dRBStatusDL18( + template (present) COUNTValueForPDCP_SN18 p_dL_COUNTValue := ?, + template DRBStatusDL18.iE_Extension p_iE_Extension := * + ) := { + dL_COUNTValue := p_dL_COUNTValue, + iE_Extension := p_iE_Extension + } // End of template mw_dRBStatusDL18 + + template (present) DRBStatusUL mw_dRBStatusUL_dRBStatusUL12( + template (present) DRBStatusUL12 p_dRBStatusUL12 := ? + ) := { + dRBStatusUL12 := p_dRBStatusUL12 + } // End of template mw_dRBStatusUL_dRBStatusUL12 + + template (present) DRBStatusUL mw_dRBStatusUL_dRBStatusUL18( + template (present) DRBStatusUL18 p_dRBStatusUL18 := ? + ) := { + dRBStatusUL18 := p_dRBStatusUL18 + } // End of template mw_dRBStatusUL_dRBStatusUL18 + + template (present) DRBStatusUL mw_dRBStatusUL_choice_Extensions( + template (present) DRBStatusUL.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_dRBStatusUL_choice_Extensions + + template (present) DRBStatusUL12 mw_dRBStatusUL12( + template (present) COUNTValueForPDCP_SN12 p_uL_COUNTValue := ?, + template DRBStatusUL12.receiveStatusOfUL_PDCP_SDUs p_receiveStatusOfUL_PDCP_SDUs := *, + template DRBStatusUL12.iE_Extension p_iE_Extension := * + ) := { + uL_COUNTValue := p_uL_COUNTValue, + receiveStatusOfUL_PDCP_SDUs := p_receiveStatusOfUL_PDCP_SDUs, + iE_Extension := p_iE_Extension + } // End of template mw_dRBStatusUL12 + + template (present) DRBStatusUL18 mw_dRBStatusUL18( + template (present) COUNTValueForPDCP_SN18 p_uL_COUNTValue := ?, + template DRBStatusUL18.receiveStatusOfUL_PDCP_SDUs p_receiveStatusOfUL_PDCP_SDUs := *, + template DRBStatusUL18.iE_Extension p_iE_Extension := * + ) := { + uL_COUNTValue := p_uL_COUNTValue, + receiveStatusOfUL_PDCP_SDUs := p_receiveStatusOfUL_PDCP_SDUs, + iE_Extension := p_iE_Extension + } // End of template mw_dRBStatusUL18 + + template (present) DRBsToQosFlowsMappingItem mw_dRBsToQosFlowsMappingItem( + template (present) DRB_ID p_dRB_ID := ?, + template (present) AssociatedQosFlowList p_associatedQosFlowList := ?, + template DRBsToQosFlowsMappingItem.iE_Extensions p_iE_Extensions := * + ) := { + dRB_ID := p_dRB_ID, + associatedQosFlowList := p_associatedQosFlowList, + iE_Extensions := p_iE_Extensions + } // End of template mw_dRBsToQosFlowsMappingItem + + template (present) DRBsToQosFlowsMappingItem.iE_Extensions mw_dRBsToQosFlowsMappingItem_dAPSRequestInfo( + template (present) DAPSRequestInfo p_dAPSRequestInfo := ? + ) := { + { + id := id_DAPSRequestInfo, + criticality := ignore, + extensionValue := { DAPSRequestInfo := p_dAPSRequestInfo } + } + } // End of template mw_dRBsToQosFlowsMappingItem_dAPSRequestInfo + + template (present) Dynamic5QIDescriptor mw_dynamic5QIDescriptor( + template (present) PriorityLevelQos p_priorityLevelQos := ?, + template (present) PacketDelayBudget p_packetDelayBudget := ?, + template (present) PacketErrorRate p_packetErrorRate := ?, + template FiveQI p_fiveQI := *, + template DelayCritical p_delayCritical := *, + template AveragingWindow p_averagingWindow := *, + template MaximumDataBurstVolume p_maximumDataBurstVolume := *, + template Dynamic5QIDescriptor.iE_Extensions p_iE_Extensions := * + ) := { + priorityLevelQos := p_priorityLevelQos, + packetDelayBudget := p_packetDelayBudget, + packetErrorRate := p_packetErrorRate, + fiveQI := p_fiveQI, + delayCritical := p_delayCritical, + // The above IE shall be present in case of GBR QoS flow + averagingWindow := p_averagingWindow, + // The above IE shall be present in case of GBR QoS flow + maximumDataBurstVolume := p_maximumDataBurstVolume, + iE_Extensions := p_iE_Extensions + } // End of template mw_dynamic5QIDescriptor + + template (present) Dynamic5QIDescriptor.iE_Extensions mw_dynamic5QIDescriptor_extendedPacketDelayBudget( + template (present) ExtendedPacketDelayBudget p_extendedPacketDelayBudget := ? + ) := { + { + id := id_ExtendedPacketDelayBudget, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template mw_dynamic5QIDescriptor_extendedPacketDelayBudget + + template (present) Dynamic5QIDescriptor.iE_Extensions mw_dynamic5QIDescriptor_cNPacketDelayBudgetDL( + template (present) ExtendedPacketDelayBudget p_extendedPacketDelayBudget := ? + ) := { + { + id := id_CNPacketDelayBudgetDL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template mw_dynamic5QIDescriptor_cNPacketDelayBudgetDL + + template (present) Dynamic5QIDescriptor.iE_Extensions mw_dynamic5QIDescriptor_cNPacketDelayBudgetUL( + template (present) ExtendedPacketDelayBudget p_extendedPacketDelayBudget := ? + ) := { + { + id := id_CNPacketDelayBudgetUL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template mw_dynamic5QIDescriptor_cNPacketDelayBudgetUL + + template (present) EarlyMeasurement mw_earlyMeasurement(template (present) EarlyMeasurement p_value := true_) := p_value; + + template (present) EarlyStatusTransfer_TransparentContainer mw_earlyStatusTransfer_TransparentContainer( + template (present) ProcedureStageChoice p_procedureStage := ?, + template EarlyStatusTransfer_TransparentContainer.iE_Extensions p_iE_Extensions := * + ) := { + procedureStage := p_procedureStage, + iE_Extensions := p_iE_Extensions + } // End of template mw_earlyStatusTransfer_TransparentContainer + + template (present) ProcedureStageChoice mw_procedureStageChoice_firstDLCount( + template (present) FirstDLCount p_firstDLCount := ? + ) := { + first_dl_count := p_firstDLCount + } // End of template mw_procedureStageChoice_firstDLCount + + template (present) ProcedureStageChoice mw_procedureStageChoice_choice_Extensions( + template (present) ProcedureStageChoice.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_procedureStageChoice_choice_Extensions + + template (present) FirstDLCount mw_firstDLCount( + template (present) DRBsSubjectToEarlyStatusTransfer_List p_dRBsSubjectToEarlyStatusTransfer := ?, + template FirstDLCount.iE_Extension p_iE_Extension := * + ) := { + dRBsSubjectToEarlyStatusTransfer := p_dRBsSubjectToEarlyStatusTransfer, + iE_Extension := p_iE_Extension + } // End of template mw_firstDLCount + + template (present) DRBsSubjectToEarlyStatusTransfer_Item mw_dRBsSubjectToEarlyStatusTransfer_Item( + template (present) DRB_ID p_dRB_ID := ?, + template (present) DRBStatusDL p_firstDLCOUNT := ?, + template DRBsSubjectToEarlyStatusTransfer_Item.iE_Extension p_iE_Extension := * + ) := { + dRB_ID := p_dRB_ID, + firstDLCOUNT := p_firstDLCOUNT, + iE_Extension := p_iE_Extension + } // End of template mw_dRBsSubjectToEarlyStatusTransfer_Item + + template (present) EDT_Session mw_eDT_Session(template (present) EDT_Session p_value := true_) := p_value; + + template (present) EmergencyAreaIDBroadcastEUTRA_Item mw_emergencyAreaIDBroadcastEUTRA_Item( + template (present) EmergencyAreaID p_emergencyAreaID := ?, + template (present) CompletedCellsInEAI_EUTRA p_completedCellsInEAI_EUTRA := ?, + template EmergencyAreaIDBroadcastEUTRA_Item.iE_Extensions p_iE_Extensions := * + ) := { + emergencyAreaID := p_emergencyAreaID, + completedCellsInEAI_EUTRA := p_completedCellsInEAI_EUTRA, + iE_Extensions := p_iE_Extensions + } // End of template mw_emergencyAreaIDBroadcastEUTRA_Item + + template (present) EmergencyAreaIDBroadcastNR_Item mw_emergencyAreaIDBroadcastNR_Item( + template (present) EmergencyAreaID p_emergencyAreaID := ?, + template (present) CompletedCellsInEAI_NR p_completedCellsInEAI_NR := ?, + template EmergencyAreaIDBroadcastNR_Item.iE_Extensions p_iE_Extensions := * + ) := { + emergencyAreaID := p_emergencyAreaID, + completedCellsInEAI_NR := p_completedCellsInEAI_NR, + iE_Extensions := p_iE_Extensions + } // End of template mw_emergencyAreaIDBroadcastNR_Item + + template (present) EmergencyAreaIDCancelledEUTRA_Item mw_emergencyAreaIDCancelledEUTRA_Item( + template (present) EmergencyAreaID p_emergencyAreaID := ?, + template (present) CancelledCellsInEAI_EUTRA p_cancelledCellsInEAI_EUTRA := ?, + template EmergencyAreaIDCancelledEUTRA_Item.iE_Extensions p_iE_Extensions := * + ) := { + emergencyAreaID := p_emergencyAreaID, + cancelledCellsInEAI_EUTRA := p_cancelledCellsInEAI_EUTRA, + iE_Extensions := p_iE_Extensions + } // End of template mw_emergencyAreaIDCancelledEUTRA_Item + + template (present) EmergencyAreaIDCancelledNR_Item mw_emergencyAreaIDCancelledNR_Item( + template (present) EmergencyAreaID p_emergencyAreaID := ?, + template (present) CancelledCellsInEAI_NR p_cancelledCellsInEAI_NR := ?, + template EmergencyAreaIDCancelledNR_Item.iE_Extensions p_iE_Extensions := * + ) := { + emergencyAreaID := p_emergencyAreaID, + cancelledCellsInEAI_NR := p_cancelledCellsInEAI_NR, + iE_Extensions := p_iE_Extensions + } // End of template mw_emergencyAreaIDCancelledNR_Item + + template (present) EmergencyFallbackIndicator mw_emergencyFallbackIndicator( + template (present) EmergencyFallbackRequestIndicator p_emergencyFallbackRequestIndicator := ?, + template EmergencyServiceTargetCN p_emergencyServiceTargetCN := *, + template EmergencyFallbackIndicator.iE_Extensions p_iE_Extensions := * + ) := { + emergencyFallbackRequestIndicator := p_emergencyFallbackRequestIndicator, + emergencyServiceTargetCN := p_emergencyServiceTargetCN, + iE_Extensions := p_iE_Extensions + } // End of template mw_emergencyFallbackIndicator + + template (present) EmergencyFallbackRequestIndicator mw_emergencyFallbackRequestIndicator(template (present) EmergencyFallbackRequestIndicator p_value := emergency_fallback_requested) := p_value; + + template (present) EmergencyServiceTargetCN mw_emergencyServiceTargetCN(template (present) EmergencyServiceTargetCN p_value := ?) := p_value; + + template (present) ENB_ID mw_eNB_ID_macroENB_ID( + template (present) Bit20 p_macroENB_ID := ? + ) := { + macroENB_ID := p_macroENB_ID + } // End of template mw_eNB_ID_macroENB_ID + + template (present) ENB_ID mw_eNB_ID_homeENB_ID( + template (present) Bit28 p_homeENB_ID := ? + ) := { + homeENB_ID := p_homeENB_ID + } // End of template mw_eNB_ID_homeENB_ID + + template (present) ENB_ID mw_eNB_ID_short_macroENB_ID( + template (present) Bit18 p_short_macroENB_ID := ? + ) := { + short_macroENB_ID := p_short_macroENB_ID + } // End of template mw_eNB_ID_short_macroENB_ID + + template (present) ENB_ID mw_eNB_ID_long_macroENB_ID( + template (present) Bit21 p_long_macroENB_ID := ? + ) := { + long_macroENB_ID := p_long_macroENB_ID + } // End of template mw_eNB_ID_long_macroENB_ID + + template (present) ENB_ID mw_eNB_ID_choice_Extensions( + template (present) ENB_ID.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_eNB_ID_choice_Extensions + + template (present) Enhanced_CoverageRestriction mw_enhanced_CoverageRestriction(template (present) Enhanced_CoverageRestriction p_value := restricted) := p_value; + + template (present) EndpointIPAddressAndPort mw_endpointIPAddressAndPort( + template (present) TransportLayerAddress p_endpointIPAddress := ?, + template (present) PortNumber p_portNumber := ?, + template EndpointIPAddressAndPort.iE_Extensions p_iE_Extensions := * + ) := { + endpointIPAddress := p_endpointIPAddress, + portNumber := p_portNumber, + iE_Extensions := p_iE_Extensions + } // End of template mw_endpointIPAddressAndPort + + template (present) EndIndication mw_endIndication(template (present) EndIndication p_value := ?) := p_value; + + template (present) EPS_TAI mw_ePS_TAI( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) EPS_TAC p_ePS_TAC := ?, + template EPS_TAI.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + ePS_TAC := p_ePS_TAC, + iE_Extensions := p_iE_Extensions + } // End of template mw_ePS_TAI + + template (present) E_RABInformationItem mw_e_RABInformationItem( + template (present) E_RAB_ID p_e_RAB_ID := ?, + template (present) DLForwarding p_dLForwarding := ?, + template E_RABInformationItem.iE_Extensions p_iE_Extensions := * + ) := { + e_RAB_ID := p_e_RAB_ID, + dLForwarding := p_dLForwarding, + iE_Extensions := p_iE_Extensions + } // End of template mw_e_RABInformationItem + + template (present) E_RABInformationItem.iE_Extensions mw_e_RABInformationItem_id_SourceTNLAddrInfo( + template (present) TransportLayerAddress p_transportLayerAddress := ? + ) := { + { + id := id_SourceTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress } + } + } // End of template mw_e_RABInformationItem_id_SourceTNLAddrInfo + + template (present) E_RABInformationItem.iE_Extensions mw_e_RABInformationItem_id_SourceNodeTNLAddrInfo( + template (present) TransportLayerAddress p_transportLayerAddress := ? + ) := { + { + id := id_SourceNodeTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress } + } + } // End of template mw_e_RABInformationItem_id_SourceNodeTNLAddrInfo + + template (present) E_RABInformationItem.iE_Extensions mw_e_RABInformationItem_full( + template (present) TransportLayerAddress p_transportLayerAddress_id_SourceTNLAddrInfo := ?, + template (present) TransportLayerAddress p_transportLayerAddress_id_SourceNodeTNLAddrInfo := ? + ) := { + { + id := id_SourceTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress_id_SourceTNLAddrInfo } + }, + { + id := id_SourceNodeTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress_id_SourceNodeTNLAddrInfo } + } + } // End of template mw_e_RABInformationItem_full + + template (present) EUTRA_CGI mw_uUTRA_CGI( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) EUTRACellIdentity p_eUTRACellIdentity := ?, + template EUTRA_CGI.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + eUTRACellIdentity := p_eUTRACellIdentity, + iE_Extensions := p_iE_Extensions + } // End of template mw_uUTRA_CGI + + template (present) EUTRA_PagingeDRXInformation mw_eUTRA_PagingeDRXInformation( + template (present) EUTRA_Paging_eDRX_Cycle p_eUTRA_paging_eDRX_Cycle := ?, + template EUTRA_Paging_Time_Window p_eUTRA_paging_Time_Window := *, + template EUTRA_PagingeDRXInformation.iE_Extensions p_iE_Extensions := * + ) := { + eUTRA_paging_eDRX_Cycle := p_eUTRA_paging_eDRX_Cycle, + eUTRA_paging_Time_Window := p_eUTRA_paging_Time_Window, + iE_Extensions := p_iE_Extensions + } // End of template mw_eUTRA_PagingeDRXInformation + + template (present) EUTRA_Paging_eDRX_Cycle mw_eUTRA_Paging_eDRX_Cycle(template (present) EUTRA_Paging_eDRX_Cycle p_value := ?) := p_value; + + template (present) EUTRA_Paging_Time_Window mw_eUTRA_Paging_Time_Window(template (present) EUTRA_Paging_Time_Window p_value := ?) := p_value; + + template (present) EventType mw_eventType(template (present) EventType p_value := ?) := p_value; + + template (present) ExcessPacketDelayThresholdItem mw_excessPacketDelayThresholdItem( + template (present) FiveQI p_fiveQi := ?, + template (present) ExcessPacketDelayThresholdValue p_excessPacketDelayThresholdValue := ?, + template ExcessPacketDelayThresholdItem.iE_Extensions p_iE_Extensions := * + ) := { + fiveQi := p_fiveQi, + excessPacketDelayThresholdValue := p_excessPacketDelayThresholdValue, + iE_Extensions := p_iE_Extensions + } // End of template mw_excessPacketDelayThresholdItem + + template (present) ExcessPacketDelayThresholdValue mw_excessPacketDelayThresholdValue(template (present) ExcessPacketDelayThresholdValue p_value := ?) := p_value; + + template (present) ExpectedHOInterval mw_expectedHOInterval(template (present) ExpectedHOInterval p_value := ?) := p_value; + + template ExpectedUEActivityBehaviour mw_expectedUEActivityBehaviour( + template ExpectedActivityPeriod p_expectedActivityPeriod := *, + template ExpectedIdlePeriod p_expectedIdlePeriod := *, + template SourceOfUEActivityBehaviourInformation p_sourceOfUEActivityBehaviourInformation := *, + template ExpectedUEActivityBehaviour.iE_Extensions p_iE_Extensions := * + ) := { + expectedActivityPeriod := p_expectedActivityPeriod, + expectedIdlePeriod := p_expectedIdlePeriod, + sourceOfUEActivityBehaviourInformation := p_sourceOfUEActivityBehaviourInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_expectedUEActivityBehaviour + + template ExpectedUEBehaviour mw_expectedUEBehaviour( + template ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour := *, + template ExpectedHOInterval p_expectedHOInterval := *, + template ExpectedUEMobility p_expectedUEMobility := *, + template ExpectedUEMovingTrajectory p_expectedUEMovingTrajectory:= *, + template ExpectedUEBehaviour.iE_Extensions p_iE_Extensions := * + ) := { + expectedUEActivityBehaviour := p_expectedUEActivityBehaviour, + expectedHOInterval := p_expectedHOInterval, + expectedUEMobility := p_expectedUEMobility, + expectedUEMovingTrajectory := p_expectedUEMovingTrajectory, + iE_Extensions := p_iE_Extensions + } // End of template m_expectedUEBehaviour + + template (present) ExpectedUEMobility mw_expectedUEMobility(template (present) ExpectedUEMobility p_value := ?) := p_value; + + template (present) ExpectedUEMovingTrajectoryItem mw_expectedUEMovingTrajectoryItem( + template (present) NGRAN_CGI p_nGRAN_CGI := ?, + template ExpectedUEMovingTrajectoryItem.timeStayedInCell p_timeStayedInCell := *, + template ExpectedUEMovingTrajectoryItem.iE_Extensions p_iE_Extensions := * + ) := { + nGRAN_CGI := p_nGRAN_CGI, + timeStayedInCell := p_timeStayedInCell, + iE_Extensions := p_iE_Extensions + } // End of template mw_expectedUEMovingTrajectoryItem + + template Extended_AMFName mw_extended_AMFName( + template AMFNameVisibleString p_aMFNameVisibleString := *, + template AMFNameUTF8String p_aMFNameUTF8String := *, + template Extended_AMFName.iE_Extensions p_iE_Extensions := * + ) := { + aMFNameVisibleString := p_aMFNameVisibleString, + aMFNameUTF8String := p_aMFNameUTF8String, + iE_Extensions := p_iE_Extensions + } // End of template mw_extended_AMFName + + template Extended_RANNodeName mw_extended_RANNodeName( + template RANNodeNameVisibleString p_rANNodeNameVisibleString := *, + template RANNodeNameUTF8String p_rANNodeNameUTF8String := *, + template Extended_RANNodeName.iE_Extensions p_iE_Extensions := * + ) := { + rANNodeNameVisibleString := p_rANNodeNameVisibleString, + rANNodeNameUTF8String := p_rANNodeNameUTF8String, + iE_Extensions := p_iE_Extensions + } // End of template mw_extended_RANNodeName + + template (present) ExtendedRATRestrictionInformation mw_extendedRATRestrictionInformation( + template (present) ExtendedRATRestrictionInformation.primaryRATRestriction p_primaryRATRestriction := ?, + template (present) ExtendedRATRestrictionInformation.secondaryRATRestriction p_secondaryRATRestriction := ?, + template ExtendedRATRestrictionInformation.iE_Extensions p_iE_Extensions := * + ) := { + primaryRATRestriction := p_primaryRATRestriction, + secondaryRATRestriction := p_secondaryRATRestriction, + iE_Extensions := p_iE_Extensions + } // End of template mw_extendedRATRestrictionInformation + + template (present) EventTrigger mw_eventTrigger_outOfCoverage( + template (present) EventTrigger.outOfCoverage p_outOfCoverage := true_ + ) := { + outOfCoverage := p_outOfCoverage + } // End of template mw_eventTrigger_outOfCoverage + + template (present) EventTrigger mw_eventTrigger_eventL1LoggedMDTConfig( + template (present) EventL1LoggedMDTConfig p_eventL1LoggedMDTConfig := ? + ) := { + eventL1LoggedMDTConfig := p_eventL1LoggedMDTConfig + } // End of template mw_eventTrigger_eventL1LoggedMDTConfig + + template (present) EventTrigger mw_eventTrigger_choice_Extensions( + template (present) EventTrigger.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_eventTrigger_choice_Extensions + + template (present) EventL1LoggedMDTConfig mw_eventL1LoggedMDTConfig( + template (present) MeasurementThresholdL1LoggedMDT p_l1Threshold := ?, + template (present) Hysteresis p_hysteresis := ?, + template (present) TimeToTrigger p_timeToTrigger := ?, + template EventL1LoggedMDTConfig.iE_Extensions p_iE_Extensions := * + ) := { + l1Threshold := p_l1Threshold, + hysteresis := p_hysteresis, + timeToTrigger := p_timeToTrigger, + iE_Extensions := p_iE_Extensions + } // End of template mw_eventL1LoggedMDTConfig + + template (present) MeasurementThresholdL1LoggedMDT mw_measurementThresholdL1LoggedMDT_threshold_RSRP( + template (present) Threshold_RSRP p_threshold_RSRP := ? + ) := { + threshold_RSRP := p_threshold_RSRP + } // End of template mw_measurementThresholdL1LoggedMDT_threshold_RSRP + + template (present) MeasurementThresholdL1LoggedMDT mw_measurementThresholdL1LoggedMDT_threshold_RSRQ( + template (present) Threshold_RSRQ p_threshold_RSRQ := ? + ) := { + threshold_RSRQ := p_threshold_RSRQ + } // End of template mw_measurementThresholdL1LoggedMDT_threshold_RSRQ + + template (present) MeasurementThresholdL1LoggedMDT mw_measurementThresholdL1LoggedMDT_choice_Extensions( + template (present) MeasurementThresholdL1LoggedMDT.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_measurementThresholdL1LoggedMDT_choice_Extensions + + template (present) FailureIndication mw_failureIndication( + template (present) UERLFReportContainer p_uERLFReportContainer := ?, + template FailureIndication.iE_Extensions p_iE_Extensions := * + ) := { + uERLFReportContainer := p_uERLFReportContainer, + iE_Extensions := p_iE_Extensions + } // End of template mw_failureIndication + + template FiveG_ProSeAuthorized mw_FiveG_ProSeAuthorized( + template FiveGProSeDirectDiscovery p_fiveGProSeDirectDiscovery := *, + template FiveGProSeDirectCommunication p_fiveGProSeDirectCommunication := *, + template FiveGProSeLayer2UEtoNetworkRelay p_fiveGProSeLayer2UEtoNetworkRelay := *, + template FiveGProSeLayer3UEtoNetworkRelay p_fiveGProSeLayer3UEtoNetworkRelay := *, + template FiveGProSeLayer2RemoteUE p_fiveGProSeLayer2RemoteUE := *, + template FiveG_ProSeAuthorized.iE_Extensions p_iE_Extensions := * + ) := { + fiveGProSeDirectDiscovery := p_fiveGProSeDirectDiscovery, + fiveGProSeDirectCommunication := p_fiveGProSeDirectCommunication, + fiveGProSeLayer2UEtoNetworkRelay := p_fiveGProSeLayer2UEtoNetworkRelay, + fiveGProSeLayer3UEtoNetworkRelay := p_fiveGProSeLayer3UEtoNetworkRelay, + fiveGProSeLayer2RemoteUE := p_fiveGProSeLayer2RemoteUE, + iE_Extensions := p_iE_Extensions + } // End of template mw_FiveG_ProSeAuthorized + + template (present) FiveGProSeDirectDiscovery mw_fiveGProSeDirectDiscovery(template (present) FiveGProSeDirectDiscovery p_value := ?) := p_value; + + template (present) FiveGProSeDirectCommunication mw_fiveGProSeDirectCommunication(template (present) FiveGProSeDirectCommunication p_value := ?) := p_value; + + template (present) FiveGProSeLayer2UEtoNetworkRelay mw_fiveGProSeLayer2UEtoNetworkRelay(template (present) FiveGProSeLayer2UEtoNetworkRelay p_value := ?) := p_value; + + template (present) FiveGProSeLayer3UEtoNetworkRelay mw_fiveGProSeLayer3UEtoNetworkRelay(template (present) FiveGProSeLayer3UEtoNetworkRelay p_value := ?) := p_value; + + template (present) FiveGProSeLayer2RemoteUE mw_fiveGProSeLayer2RemoteUE(template (present) FiveGProSeLayer2RemoteUE p_value := ?) := p_value; + + template (present) FiveG_ProSePC5QoSParameters mw_fiveG_ProSePC5QoSParameters( + template (present) FiveGProSePC5QoSFlowList p_fiveGProSepc5QoSFlowList := ?, + template BitRate p_fiveGProSepc5LinkAggregateBitRates := *, + template FiveG_ProSePC5QoSParameters.iE_Extensions p_iE_Extensions := * + ) := { + fiveGProSepc5QoSFlowList := p_fiveGProSepc5QoSFlowList, + fiveGProSepc5LinkAggregateBitRates := p_fiveGProSepc5LinkAggregateBitRates, + iE_Extensions := p_iE_Extensions + } // End of template mw_fiveG_ProSePC5QoSParameters + + template (present) FiveGProSePC5QoSFlowItem mw_fiveGProSePC5QoSFlowItem( + template (present) FiveQI p_fiveGproSepQI := ?, + template FiveGProSePC5FlowBitRates p_fiveGproSepc5FlowBitRates := *, + template Range p_fiveGproSerange := *, + template FiveGProSePC5QoSFlowItem.iE_Extensions p_iE_Extensions := * + ) := { + fiveGproSepQI := p_fiveGproSepQI, + fiveGproSepc5FlowBitRates := p_fiveGproSepc5FlowBitRates, + fiveGproSerange := p_fiveGproSerange, + iE_Extensions := p_iE_Extensions + } // End of template mw_fiveGProSePC5QoSFlowItem + + template (present) FiveGProSePC5FlowBitRates mw_fiveGProSePC5FlowBitRates( + template (present) BitRate p_fiveGproSeguaranteedFlowBitRate := ?, + template (present) BitRate p_fiveGproSemaximumFlowBitRate := ?, + template FiveGProSePC5FlowBitRates.iE_Extensions p_iE_Extensions := * + ) := { + fiveGproSeguaranteedFlowBitRate := p_fiveGproSeguaranteedFlowBitRate, + fiveGproSemaximumFlowBitRate := p_fiveGproSemaximumFlowBitRate, + iE_Extensions := p_iE_Extensions + } // End of template mw_fiveGProSePC5FlowBitRates + + template (present) FiveG_S_TMSI mw_fiveG_S_TMSI( + template (present) AMFSetID p_aMFSetID := ?, + template (present) AMFPointer p_aMFPointer := ?, + template (present) FiveG_TMSI p_fiveG_TMSI := ?, + template FiveG_S_TMSI.iE_Extensions p_iE_Extensions := * + ) := { + aMFSetID := p_aMFSetID, + aMFPointer := p_aMFPointer, + fiveG_TMSI := p_fiveG_TMSI, + iE_Extensions := p_iE_Extensions + } // End of template mw_fiveG_S_TMSI + + template (present) ForbiddenAreaInformation_Item mw_forbiddenAreaInformation_Item( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) ForbiddenTACs p_forbiddenTACs := ?, + template ForbiddenAreaInformation_Item.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + forbiddenTACs := p_forbiddenTACs, + iE_Extensions := p_iE_Extensions + } // End of template mw_forbiddenAreaInformation_Item + + template (present) FromEUTRANtoNGRAN mw_fromEUTRANtoNGRAN( + template (present) IntersystemSONeNBID p_sourceeNBID := ?, + template (present) IntersystemSONNGRANnodeID p_targetNGRANnodeID := ?, + template FromEUTRANtoNGRAN.iE_Extensions p_iE_Extensions := * + ) := { + sourceeNBID := p_sourceeNBID, + targetNGRANnodeID := p_targetNGRANnodeID, + iE_Extensions := p_iE_Extensions + } // End of template mw_fromEUTRANtoNGRAN + + template (present) FromNGRANtoEUTRAN mw_fromNGRANtoEUTRAN( + template (present) IntersystemSONNGRANnodeID p_sourceNGRANnodeID := ?, + template (present) IntersystemSONeNBID p_targeteNBID := ?, + template FromNGRANtoEUTRAN.iE_Extensions p_iE_Extensions := * + ) := { + sourceNGRANnodeID := p_sourceNGRANnodeID, + targeteNBID := p_targeteNBID, + iE_Extensions := p_iE_Extensions + } // End of template mw_fromNGRANtoEUTRAN + + template (present) GBR_QosInformation mw_gBR_QosInformation( + template (present) BitRate p_maximumFlowBitRateDL := ?, + template (present) BitRate p_maximumFlowBitRateUL := ?, + template (present) BitRate p_guaranteedFlowBitRateDL := ?, + template (present) BitRate p_guaranteedFlowBitRateUL := ?, + template NotificationControl p_notificationControl := *, + template PacketLossRate p_maximumPacketLossRateDL := *, + template PacketLossRate p_maximumPacketLossRateUL := *, + template GBR_QosInformation.iE_Extensions p_iE_Extensions := * + ) := { + maximumFlowBitRateDL := p_maximumFlowBitRateDL, + maximumFlowBitRateUL := p_maximumFlowBitRateUL, + guaranteedFlowBitRateDL := p_guaranteedFlowBitRateDL, + guaranteedFlowBitRateUL := p_guaranteedFlowBitRateUL, + notificationControl := p_notificationControl, + maximumPacketLossRateDL := p_maximumPacketLossRateDL, + maximumPacketLossRateUL := p_maximumPacketLossRateUL, + iE_Extensions := p_iE_Extensions + } // End of template mw_gBR_QosInformation + + template (present) GBR_QosInformation.iE_Extensions mw_gBR_QosInformation_id_AlternativeQoSParaSetList( + template (present) AlternativeQoSParaSetList p_alternativeQoSParaSetList := ? + ) := { + { + id := id_AlternativeQoSParaSetList, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetList := p_alternativeQoSParaSetList} + } + } // End of template mw_gBR_QosInformation_id_AlternativeQoSParaSetList + + template (present) GlobalCable_ID_new mw_globalCable_ID_new( + template (present) GlobalCable_ID p_globalCable_ID := ?, + template (present) TAI p_tAI := ?, + template GlobalCable_ID_new.iE_Extensions p_iE_Extensions := * + ) := { + globalCable_ID := p_globalCable_ID, + tAI := p_tAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_globalCable_ID_new + + template (present) GlobalGNB_ID mw_ie_globalGnbId( + template (present) PLMNIdentity p_plmnId := ?, + template (present) bitstring p_gnbId := ?, + template GlobalGNB_ID.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_plmnId,//'010001'O, + gNB_ID := { gNB_ID := p_gnbId/*'0000000000000000000000'B*/}, + iE_Extensions := p_iE_Extensions + } // End of template mw_ie_globalGnbId + + template (present) GlobalN3IWF_ID mw_globalN3IWF_ID( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) N3IWF_ID p_n3IWF_ID := ?, + template GlobalN3IWF_ID.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + n3IWF_ID := p_n3IWF_ID, + iE_Extensions := p_iE_Extensions + } // End of template mw_globalN3IWF_ID + + template (present) GlobalLine_ID mw_globalLine_ID( + template (present) GlobalLineIdentity p_globalLineIdentity := ?, + template LineType p_lineType := *, + template GlobalLine_ID.iE_Extensions p_iE_Extensions := * + ) := { + globalLineIdentity := p_globalLineIdentity, + lineType := p_lineType, + iE_Extensions := p_iE_Extensions + } // End of template mw_globalLine_ID + + template (present) GlobalLine_ID.iE_Extensions mw_globalLine_ID_id_TAI(template TAI p_tAI := *) := { + { + id := id_TAI, + criticality := ignore, + extensionValue := { TAI := p_tAI } + } + } // End of template mw_globalLine_ID_id_TAI + + template (present) GlobalNgENB_ID mw_globalNgENB_ID( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) NgENB_ID p_ngENB_ID := ?, + template GlobalNgENB_ID.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + ngENB_ID := p_ngENB_ID, + iE_Extensions := p_iE_Extensions + } // End of template mw_globalNgENB_ID + + template (present) GlobalRANNodeID mw_globalRANNodeID_globalGNB_ID( + template (present) GlobalGNB_ID p_globalGNB_ID := ? + ) := { + globalGNB_ID := p_globalGNB_ID + } // End of template mw_globalRANNodeID_globalGNB_ID + + template (present) GlobalRANNodeID mw_globalRANNodeID_globalNgENB_ID( + template (present) GlobalNgENB_ID p_globalNgENB_ID := ? + ) := { + globalNgENB_ID := p_globalNgENB_ID + } // End of template mw_globalRANNodeID_globalNgENB_ID + + template (present) GlobalRANNodeID mw_globalRANNodeID_globalN3IWF_ID( + template (present) GlobalN3IWF_ID p_globalN3IWF_ID := ? + ) := { + globalN3IWF_ID := p_globalN3IWF_ID + } // End of template mw_globalRANNodeID_globalN3IWF_ID + + template (present) GlobalRANNodeID mw_globalRANNodeID_choice_Extensions( + template (present) GlobalRANNodeID.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_globalRANNodeID_choice_Extensions + + template (present) GlobalRANNodeID.choice_Extensions mw_globalRANNodeID_id_GlobalTNGF_ID( + template (present) GlobalTNGF_ID p_globalTNGF_ID := ? + ) := { + id := id_GlobalTNGF_ID, + criticality := reject, + value_ := { GlobalTNGF_ID := p_globalTNGF_ID } + } // End of template mw_globalRANNodeID_id_GlobalTNGF_ID + + template (present) GlobalRANNodeID.choice_Extensions mw_globalRANNodeID_id_GlobalTWIF_ID( + template (present) GlobalTNGF_ID p_globalTWIF_ID := ? + ) := { + id := id_GlobalTWIF_ID, + criticality := reject, + value_ := { GlobalTNGF_ID := p_globalTWIF_ID } + } // End of template mw_globalRANNodeID_id_GlobalTWIF_ID + + template (present) GlobalRANNodeID.choice_Extensions mw_globalRANNodeID_id_GlobalW_AGF_ID( + template (present) GlobalW_AGF_ID p_globalW_AGF_ID := ? + ) := { + id := id_GlobalW_AGF_ID, + criticality := reject, + value_ := { GlobalW_AGF_ID := p_globalW_AGF_ID } + } // End of template mw_globalRANNodeID_id_GlobalW_AGF_ID + + template (present) GlobalTNGF_ID mw_globalTNGF_ID( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) TNGF_ID p_tNGF_ID := ?, + template GlobalTNGF_ID.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + tNGF_ID := p_tNGF_ID, + iE_Extensions := p_iE_Extensions + } // End of template mw_globalTNGF_ID + + template (present) GlobalTWIF_ID mw_globalTWIF_ID( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) TWIF_ID p_tWIF_ID := ?, + template GlobalTWIF_ID.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + tWIF_ID := p_tWIF_ID, + iE_Extensions := p_iE_Extensions + } // End of template mw_globalTWIF_ID + + template (present) GlobalW_AGF_ID mw_GlobalW_AGF_ID( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) W_AGF_ID p_w_AGF_ID := ?, + template GlobalW_AGF_ID.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + w_AGF_ID := p_w_AGF_ID, + iE_Extensions := p_iE_Extensions + } // End of template mw_GlobalW_AGF_ID + + template (present) GNB_ID mw_gNB_ID_gNB_ID( + template (present) GNB_ID.gNB_ID p_gNB_ID := ? + ) := { + gNB_ID := p_gNB_ID + } // End of template mw_gNB_ID_gNB_ID + + template (present) GNB_ID mw_gNB_ID_choice_Extensions( + template (present) GNB_ID.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_gNB_ID_choice_Extensions + + template (present) GTPTunnel mw_gTPTunnel( + in template (present) TransportLayerAddress p_tla := ?, + in template (present) GTP_TEID p_gtp_teid := ?, + in template GTPTunnel.iE_Extensions p_iE_Extensions := * + ):= { + transportLayerAddress := p_tla, + gTP_TEID := p_gtp_teid, + iE_Extensions := p_iE_Extensions + } // End of template mw_gTPTunnel + + template (present) GUAMI mw_gUAMI( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) AMFRegionID p_aMFRegionID := ?, + template (present) AMFSetID p_aMFSetID := ?, + template (present) AMFPointer p_aMFPointer := ?, + template GUAMI.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + aMFRegionID := p_aMFRegionID, + aMFSetID := p_aMFSetID, + aMFPointer := p_aMFPointer, + iE_Extensions := p_iE_Extensions + } // End of template mw_gUAMI + + template (present) GUAMIType mw_gUAMIType(template (present) GUAMIType p_val := ?) := p_val; + + template HandoverCommandTransfer mw_handoverCommandTransfer( + template UPTransportLayerInformation p_dLForwardingUP_TNLInformation := *, + template QosFlowToBeForwardedList p_qosFlowToBeForwardedList := *, + template DataForwardingResponseDRBList p_dataForwardingResponseDRBList := *, + template HandoverCommandTransfer.iE_Extensions p_iE_Extensions := * + ) := { + dLForwardingUP_TNLInformation := p_dLForwardingUP_TNLInformation, + qosFlowToBeForwardedList := p_qosFlowToBeForwardedList, + dataForwardingResponseDRBList := p_dataForwardingResponseDRBList, + iE_Extensions := p_iE_Extensions + } // End of template mw_handoverCommandTransfer + + template (present) HandoverCommandTransfer.iE_Extensions mw_handoverCommandTransfer_id_AdditionalDLForwardingUPTNLInformation( + template (present) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList := ? + ) := { + { + id := id_AdditionalDLForwardingUPTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template mw_handoverCommandTransfer_id_AdditionalDLForwardingUPTNLInformation + + template (present) HandoverCommandTransfer.iE_Extensions mw_handoverCommandTransfer_id_ULForwardingUP_TNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_ULForwardingUP_TNLInformation, + criticality := reject, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_handoverCommandTransfer_id_ULForwardingUP_TNLInformation + + template (present) HandoverCommandTransfer.iE_Extensions mw_handoverCommandTransfer_id_AdditionalULForwardingUPTNLInformation( + template (present) UPTransportLayerInformationList p_uPTransportLayerInformationList := ? + ) := { + { + id := id_AdditionalULForwardingUPTNLInformation, + criticality := reject, + extensionValue := { UPTransportLayerInformationList := p_uPTransportLayerInformationList } + } + } // End of template mw_handoverCommandTransfer_id_AdditionalULForwardingUPTNLInformation + + template (present) HandoverCommandTransfer.iE_Extensions mw_handoverCommandTransfer_id_DataForwardingResponseERABList( + template (present) DataForwardingResponseERABList p_dataForwardingResponseERABList := ? + ) := { + { + id := id_DataForwardingResponseERABList, + criticality := ignore, + extensionValue := { DataForwardingResponseERABList := p_dataForwardingResponseERABList } + } + } // End of template mw_handoverCommandTransfer_id_DataForwardingResponseERABList + + template (present) HandoverCommandTransfer.iE_Extensions mw_handoverCommandTransfer_id_QosFlowFailedToSetupList( + template (present) QosFlowListWithCause p_qosFlowListWithCause := ? + ) := { + { + id := id_QosFlowFailedToSetupList, + criticality := ignore, + extensionValue := { QosFlowListWithCause := p_qosFlowListWithCause } + } + } // End of template mwhandoverCommandTransfer_id_QosFlowFailedToSetupList + + template (present) HandoverFlag mw_handoverFlag(template (present) HandoverFlag p_val := handover_preparation) := p_val; + + template (present) HandoverPreparationUnsuccessfulTransfer mw_mandoverPreparationUnsuccessfulTransfer( + template (present) Cause p_cause := ?, + template HandoverPreparationUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := * + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_mandoverPreparationUnsuccessfulTransfer + + template (present) HandoverRequestAcknowledgeTransfer mw_handoverRequestAcknowledgeTransfer( + template (present) UPTransportLayerInformation p_dL_NGU_UP_TNLInformation := ?, + template (present) QosFlowListWithDataForwarding p_qosFlowSetupResponseList := ?, + template UPTransportLayerInformation p_dLForwardingUP_TNLInformation := *, + template SecurityResult p_securityResult := *, + template QosFlowListWithCause p_qosFlowFailedToSetupList := *, + template DataForwardingResponseDRBList p_dataForwardingResponseDRBList := *, + template HandoverRequestAcknowledgeTransfer.iE_Extensions p_iE_Extensions := * + ) := { + dL_NGU_UP_TNLInformation := p_dL_NGU_UP_TNLInformation, + dLForwardingUP_TNLInformation := p_dLForwardingUP_TNLInformation, + securityResult := p_securityResult, + qosFlowSetupResponseList := p_qosFlowSetupResponseList, + qosFlowFailedToSetupList := p_qosFlowFailedToSetupList, + dataForwardingResponseDRBList := p_dataForwardingResponseDRBList, + iE_Extensions := p_iE_Extensions + } // End of template mw_handoverRequestAcknowledgeTransfer + + template (present) HandoverRequestAcknowledgeTransfer.iE_Extensions mw_handoverRequestAcknowledgeTransfer_id_AdditionalDLUPTNLInformationForHOList( + template (present) AdditionalDLUPTNLInformationForHOList p_additionalDLUPTNLInformationForHOList := ? + ) := { + { + id := id_AdditionalDLUPTNLInformationForHOList, + criticality := reject, + extensionValue := { AdditionalDLUPTNLInformationForHOList := p_additionalDLUPTNLInformationForHOList } + } + } // End of template mw_handoverRequestAcknowledgeTransfer_id_AdditionalDLUPTNLInformationForHOList + + template (present) HandoverRequestAcknowledgeTransfer.iE_Extensions mw_handoverRequestAcknowledgeTransfer_id_ULForwardingUP_TNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_ULForwardingUP_TNLInformation, + criticality := reject, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_handoverRequestAcknowledgeTransfer_id_ULForwardingUP_TNLInformation + + template (present) HandoverRequestAcknowledgeTransfer.iE_Extensions mw_handoverRequestAcknowledgeTransfer_id_AdditionalULForwardingUPTNLInformation( + template (present) UPTransportLayerInformationList p_uPTransportLayerInformationList := ? + ) := { + { + id := id_AdditionalULForwardingUPTNLInformation, + criticality := reject, + extensionValue := { UPTransportLayerInformationList := p_uPTransportLayerInformationList } + } + } // End of template mw_handoverRequestAcknowledgeTransfer_id_AdditionalULForwardingUPTNLInformation + + template (present) HandoverRequestAcknowledgeTransfer.iE_Extensions mw_handoverRequestAcknowledgeTransfer_id_DataForwardingResponseERABList( + template (present) DataForwardingResponseERABList p_dataForwardingResponseERABList := ? + ) := { + { + id := id_DataForwardingResponseERABList, + criticality := ignore, + extensionValue := { DataForwardingResponseERABList := p_dataForwardingResponseERABList } + } + } // End of template mw_handoverRequestAcknowledgeTransfer_id_DataForwardingResponseERABList + + template (present) HandoverRequestAcknowledgeTransfer.iE_Extensions mw_handoverRequestAcknowledgeTransfer_id_RedundantDL_NGU_UP_TNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_RedundantDL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_handoverRequestAcknowledgeTransfer_id_RedundantDL_NGU_UP_TNLInformation + + template (present) HandoverRequestAcknowledgeTransfer.iE_Extensions mw_handoverRequestAcknowledgeTransfer_id_UsedRSNInformation( + template (present) RedundantPDUSessionInformation p_redundantPDUSessionInformation := ? + ) := { + { + id := id_UsedRSNInformation, + criticality := ignore, + extensionValue := { RedundantPDUSessionInformation := p_redundantPDUSessionInformation } + } + } // End of template mw_handoverRequestAcknowledgeTransfer_id_UsedRSNInformation + + template (present) HandoverRequestAcknowledgeTransfer.iE_Extensions mw_handoverRequestAcknowledgeTransfer_id_GlobalRANNodeID( + template (present) GlobalRANNodeID p_globalRANNodeID := ? + ) := { + { + id := id_GlobalRANNodeID, + criticality := ignore, + extensionValue := { GlobalRANNodeID := p_globalRANNodeID } + } + } // End of template mw_handoverRequestAcknowledgeTransfer_id_GlobalRANNodeID + + template (present) HandoverRequestAcknowledgeTransfer.iE_Extensions mw_handoverRequestAcknowledgeTransfer_id_MBS_SupportIndicator( + template (present) MBS_SupportIndicator p_mBS_SupportIndicator := ? + ) := { + { + id := id_MBS_SupportIndicator, + criticality := ignore, + extensionValue := { MBS_SupportIndicator := p_mBS_SupportIndicator } + } + } // End of template mw_handoverRequestAcknowledgeTransfer_id_MBS_SupportIndicator + + template HandoverRequiredTransfer mw_handoverRequiredTransfer( + template DirectForwardingPathAvailability p_directForwardingPathAvailability := *, + template HandoverRequiredTransfer.iE_Extensions p_iE_Extensions := * + ) := { + directForwardingPathAvailability := p_directForwardingPathAvailability, + iE_Extensions := p_iE_Extensions + } // End of template mw_handoverRequiredTransfer + + template (present) HandoverResourceAllocationUnsuccessfulTransfer mw_handoverResourceAllocationUnsuccessfulTransfer( + template (present) Cause p_cause := ?, + template CriticalityDiagnostics p_criticalityDiagnostics := *, + template HandoverResourceAllocationUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := * + ) := { + cause := p_cause, + criticalityDiagnostics := p_criticalityDiagnostics, + iE_Extensions := p_iE_Extensions + } // End of template mw_handoverResourceAllocationUnsuccessfulTransfer + + template (present) HandoverType mw_handoverType(template (present) HandoverType p_value := ?) := p_value; + + template (present) HFCNode_ID_new mw_hFCNode_ID_new( + template (present) HFCNode_ID p_hFCNode_ID := ?, + template (present) TAI p_tAI := ?, + template HFCNode_ID_new.iE_Extensions p_iE_Extensions := * + ) := { + hFCNode_ID := p_hFCNode_ID, + tAI := p_tAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_hFCNode_ID_new + + template (present) HOReport mw_hOReport( + template (present) HOReport.handoverReportType p_handoverReportType := ?, + template (present) Cause p_handoverCause := ?, + template (present) NGRAN_CGI p_sourcecellCGI := ?, + template (present) NGRAN_CGI p_targetcellCGI := ?, + template NGRAN_CGI p_reestablishmentcellCGI := ?, + template Bit16 p_sourcecellC_RNTI := *, + template EUTRA_CGI p_targetcellinE_UTRAN := *, + template MobilityInformation p_mobilityInformation := *, + template UERLFReportContainer p_uERLFReportContainer := *, + template HOReport.iE_Extensions p_iE_Extensions := * + ) := { + handoverReportType := p_handoverReportType, + handoverCause := p_handoverCause, + sourcecellCGI := p_sourcecellCGI, + targetcellCGI := p_targetcellCGI, + reestablishmentcellCGI := p_reestablishmentcellCGI, + // The above IE shall be present if the Handover Report Type IE is set to the value "HO to wrong cell" + sourcecellC_RNTI := p_sourcecellC_RNTI, + targetcellinE_UTRAN := p_targetcellinE_UTRAN, + // The above IE shall be present if the Handover Report Type IE is set to the value "Inter System ping_pong" + mobilityInformation := p_mobilityInformation, + uERLFReportContainer := p_uERLFReportContainer, + iE_Extensions := p_iE_Extensions + } // End of template mw_hOReport + + template (present) IAB_Authorized mw_iAB_Authorized(template (present) IAB_Authorized p_value := ?) := p_value; + + template (present) IAB_Supported mw_iAB_Supported(template (present) IAB_Supported p_value := true_) := p_value; + + template (present) IABNodeIndication mw_iABNodeIndication(template (present) IABNodeIndication p_value := true_) := p_value; + + template (present) IMSVoiceSupportIndicator mw_iMSVoiceSupportIndicator(template (present) IMSVoiceSupportIndicator p_value := ?) := p_value; + + template (present) InfoOnRecommendedCellsAndRANNodesForPaging mw_infoOnRecommendedCellsAndRANNodesForPaging( + template (present) RecommendedCellsForPaging p_recommendedCellsForPaging := ?, + template (present) RecommendedRANNodesForPaging p_recommendRANNodesForPaging := ?, + template InfoOnRecommendedCellsAndRANNodesForPaging.iE_Extensions p_iE_Extensions := * + ) := { + recommendedCellsForPaging := p_recommendedCellsForPaging, + recommendRANNodesForPaging := p_recommendRANNodesForPaging, + iE_Extensions := p_iE_Extensions + } // End of template mw_infoOnRecommendedCellsAndRANNodesForPaging + + template (present) IntegrityProtectionIndication mw_integrityProtectionIndication(template (present) IntegrityProtectionIndication p_value := ?) := p_value; + + template (present) IntegrityProtectionResult mw_integrityProtectionResult(template (present) IntegrityProtectionResult p_value := ?) := p_value; + + template (present) ImmediateMDTNr mw_immediateMDTNr( + template (present) MeasurementsToActivate p_measurementsToActivate := ?, + template M1Configuration p_m1Configuration := *, + template M4Configuration p_m4Configuration := *, + template M5Configuration p_m5Configuration := *, + template M6Configuration p_m6Configuration := *, + template M7Configuration p_m7Configuration := *, + template BluetoothMeasurementConfiguration p_bluetoothMeasurementConfiguration := *, + template WLANMeasurementConfiguration p_wLANMeasurementConfiguration := *, + template MDT_Location_Info p_mDT_Location_Info := *, + template SensorMeasurementConfiguration p_sensorMeasurementConfiguration := *, + template ImmediateMDTNr.iE_Extensions p_iE_Extensions := * + ) := { + measurementsToActivate := p_measurementsToActivate, + m1Configuration := p_m1Configuration, + // The above IE shall be present if the Measurements to Activate IE has the first bit set to “1” + m4Configuration := p_m4Configuration, + // The above IE shall be present if the Measurements to Activate IE has the third bit set to “1” + m5Configuration := p_m5Configuration, + // The above IE shall be present if the Measurements to Activate IE has the fourth bit set to “1” + m6Configuration := p_m6Configuration, + // The above IE shall be present if the Measurements to Activate IE has the fifth bit set to “1” + m7Configuration := p_m7Configuration, + // The above IE shall be present if the Measurements to Activate IE has the sixth bit set to “1” + bluetoothMeasurementConfiguration := p_bluetoothMeasurementConfiguration, + wLANMeasurementConfiguration := p_wLANMeasurementConfiguration, + mDT_Location_Info := p_mDT_Location_Info, + sensorMeasurementConfiguration := p_sensorMeasurementConfiguration, + iE_Extensions := p_iE_Extensions + } // End of template mw_immediateMDTNr + + template InterSystemFailureIndication mw_interSystemFailureIndication( + template UERLFReportContainer p_uERLFReportContainer := *, + template InterSystemFailureIndication.iE_Extensions p_iE_Extensions := * + ) := { + uERLFReportContainer := p_uERLFReportContainer, + iE_Extensions := p_iE_Extensions + } // End of template mw_interSystemFailureIndication + + template (present) IntersystemSONConfigurationTransfer mw_intersystemSONConfigurationTransfer( + template (present) IntersystemSONTransferType p_transferType := ?, + template (present) IntersystemSONInformation p_intersystemSONInformation := ?, + template IntersystemSONConfigurationTransfer.iE_Extensions p_iE_Extensions := * + ) := { + transferType := p_transferType, + intersystemSONInformation := p_intersystemSONInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_intersystemSONConfigurationTransfer + + template (present) IntersystemSONTransferType mw_intersystemSONTransferType_fromEUTRANtoNGRAN( + template (present) FromEUTRANtoNGRAN p_fromEUTRANtoNGRAN := ? + ) := { + fromEUTRANtoNGRAN := p_fromEUTRANtoNGRAN + } // End of template mw_intersystemSONTransferType_fromEUTRANtoNGRAN + + template (present) IntersystemSONTransferType mw_intersystemSONTransferType_fromNGRANtoEUTRAN( + template (present) FromNGRANtoEUTRAN p_fromNGRANtoEUTRAN := ? + ) := { + fromNGRANtoEUTRAN := p_fromNGRANtoEUTRAN + } // End of template mw_intersystemSONTransferType_fromNGRANtoEUTRAN + + template (present) IntersystemSONTransferType mw_intersystemSONTransferType_choice_Extensions( + template (present) IntersystemSONTransferType.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_intersystemSONTransferType_choice_Extensions + + template (present) IntersystemSONeNBID mw_intersystemSONeNBID( + template (present) GlobalENB_ID p_globaleNBID := ?, + template (present) EPS_TAI p_selectedEPSTAI := ?, + template IntersystemSONeNBID.iE_Extensions p_iE_Extensions := * + ) := { + globaleNBID := p_globaleNBID, + selectedEPSTAI := p_selectedEPSTAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_intersystemSONeNBID + + template (present) IntersystemSONNGRANnodeID mw_intersystemSONNGRANnodeID( + template (present) GlobalRANNodeID p_globalRANNodeID := ?, + template (present) TAI p_selectedTAI := ?, + template IntersystemSONNGRANnodeID.iE_Extensions p_iE_Extensions := * + ) := { + globalRANNodeID := p_globalRANNodeID, + selectedTAI := p_selectedTAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_intersystemSONNGRANnodeID + + template (present) IntersystemSONInformation mw_intersystemSONInformation_intersystemSONInformationReport( + in template (present) IntersystemSONInformationReport p_intersystemSONInformationReport := ? + ) := { + intersystemSONInformationReport := p_intersystemSONInformationReport + } // End of template mw_intersystemSONInformation_intersystemSONInformationReport + + template (present) IntersystemSONInformation mw_intersystemSONInformation_choice_Extensions( + template (present) IntersystemSONInformation.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_intersystemSONInformation_choice_Extensions + + template (present) IntersystemSONInformation.choice_Extensions mw_intersystemSONInformation_id_IntersystemSONInformationRequest( + template (present) IntersystemSONInformationRequest p_intersystemSONInformationRequest := ? + ) := { + id := id_IntersystemSONInformationRequest, + criticality := ignore, + value_ := { IntersystemSONInformationRequest := p_intersystemSONInformationRequest } + } // End of template mw_intersystemSONInformation_id_IntersystemSONInformationRequest + + template (present) IntersystemSONInformation.choice_Extensions mw_intersystemSONInformation_id_IntersystemSONInformationReply( + template (present) IntersystemSONInformationReply p_intersystemSONInformationReply := ? + ) := { + id := id_IntersystemSONInformationReply, + criticality := ignore, + value_ := { IntersystemSONInformationReply := p_intersystemSONInformationReply } + } // End of template mw_intersystemSONInformation_id_IntersystemSONInformationReply + + template (present) IntersystemSONInformationRequest mw_intersystemSONInformationRequest_nGRAN_CellActivation( + template (present) IntersystemCellActivationRequest p_nGRAN_CellActivation := ? + ) := { + nGRAN_CellActivation := p_nGRAN_CellActivation + } // End of template mw_intersystemSONInformationRequest_nGRAN_CellActivation + + template (present) IntersystemSONInformationRequest mw_intersystemSONInformationRequest_resourceStatus( + template (present) IntersystemResourceStatusRequest p_resourceStatus := ? + ) := { + resourceStatus := p_resourceStatus + } // End of template mw_intersystemSONInformationRequest_resourceStatus + + template (present) IntersystemSONInformationRequest mw_intersystemSONInformationRequest_choice_Extensions( + template (present) IntersystemSONInformationRequest.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_intersystemSONInformationRequest_choice_Extensions + + template (present) IntersystemCellActivationRequest mw_intersystemCellActivationRequest( + template (present) IntersystemCellActivationRequest.activationID p_activationID := ?, + template (present) CellsToActivateList p_cellsToActivateList := ?, + template IntersystemCellActivationRequest.iE_Extensions p_iE_Extensions := * + ) := { + activationID := p_activationID, + cellsToActivateList := p_cellsToActivateList, + iE_Extensions := p_iE_Extensions + } // End of template mw_intersystemCellActivationRequest + + template (present) IntersystemResourceStatusRequest mw_intersystemResourceStatusRequest( + template (present) ReportingSystem p_reportingSystem := ?, + template (present) ReportCharacteristics p_reportCharacteristics := ?, + template (present) ReportType p_reportType := ?, + template IntersystemResourceStatusRequest.iE_Extensions p_iE_Extensions := * + ) := { + reportingSystem := p_reportingSystem, + reportCharacteristics := p_reportCharacteristics, + reportType := p_reportType, + iE_Extensions := p_iE_Extensions + } // End of template mw_intersystemResourceStatusRequest + + template (present) ReportingSystem mw_reportingSystem_eUTRAN( + template (present) EUTRAN_ReportingSystemIEs p_eUTRAN := ? + ) := { + eUTRAN := p_eUTRAN + } // End of template mw_reportingSystem_eUTRAN + + template (present) ReportingSystem mw_reportingSystem_nGRAN( + template (present) NGRAN_ReportingSystemIEs p_nGRAN := ? + ) := { + nGRAN := p_nGRAN + } // End of template mw_reportingSystem_nGRAN + + template (present) ReportingSystem mw_reportingSystem_choice_Extensions( + template (present) ReportingSystem.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_reportingSystem_choice_Extensions + + template (present) EUTRAN_ReportingSystemIEs mw_eUTRAN_ReportingSystemIEs( + template (present) EUTRAN_CellToReportList p_eUTRAN_CellToReportList := ?, + template EUTRAN_ReportingSystemIEs.iE_Extensions p_iE_Extensions := * + ) := { + eUTRAN_CellToReportList := p_eUTRAN_CellToReportList, + iE_Extensions := p_iE_Extensions + } // End of template mw_eUTRAN_ReportingSystemIEs + + template (present) NGRAN_ReportingSystemIEs mw_nGRAN_ReportingSystemIEs( + template (present) NGRAN_CellToReportList p_nGRAN_CellToReportList := ?, + template NGRAN_ReportingSystemIEs.iE_Extensions p_iE_Extensions := * + ) := { + nGRAN_CellToReportList := p_nGRAN_CellToReportList, + iE_Extensions := p_iE_Extensions + } // End of template mw_nGRAN_ReportingSystemIEs + + template (present) EUTRAN_CellToReportItem mw_eUTRAN_CellToReportItem( + template (present) EUTRA_CGI p_eCGI := ?, + template EUTRAN_CellToReportItem.iE_Extensions p_iE_Extensions := * + ) := { + eCGI := p_eCGI, + iE_Extensions := p_iE_Extensions + } // End of template mw_eUTRAN_CellToReportItem + + template (present) NGRAN_CellToReportItem mw_nGRAN_CellToReportItem( + template (present) NGRAN_CGI p_nGRAN_CGI := ?, + template NGRAN_CellToReportItem.iE_Extensions p_iE_Extensions := * + ):= { + nGRAN_CGI := p_nGRAN_CGI, + iE_Extensions := p_iE_Extensions + } // End of template mw_nGRAN_CellToReportItem + + template (present) ReportType mw_reportType_eventBasedReporting( + template (present) EventBasedReportingIEs p_eventBasedReporting := ? + ) := { + eventBasedReporting := p_eventBasedReporting + } // End of template mw_reportType_eventBasedReporting + + template (present) ReportType mw_reportType_periodicReporting( + template (present) PeriodicReportingIEs p_periodicReporting := ? + ) := { + periodicReporting := p_periodicReporting + } // End of template mw_reportType_periodicReporting + + template (present) ReportType mw_reportType_choice_Extensions( + template (present) ReportType.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_reportType_choice_Extensions + + template (present) NumberOfMeasurementReportingLevels mw_numberOfMeasurementReportingLevels(template (present) NumberOfMeasurementReportingLevels p_value := ?) := p_value; + + template (present) PeriodicReportingIEs mw_PeriodicReportingIEs( + template (present) ReportingPeriodicity p_reportingPeriodicity := ?, + template PeriodicReportingIEs.iE_Extensions p_iE_Extensions := * + ) := { + reportingPeriodicity := p_reportingPeriodicity, + iE_Extensions := p_iE_Extensions + } // End of template mw_PeriodicReportingIEs + + template (present) ReportingPeriodicity mw_reportingPeriodicity(template (present) ReportingPeriodicity p_value := ?) := p_value; + + template (present) IntersystemSONInformationReply mw_intersystemSONInformationReply_nGRAN_CellActivation( + template (present) IntersystemCellActivationReply p_nGRAN_CellActivation := ? + ) := { + nGRAN_CellActivation := p_nGRAN_CellActivation + } // End of template mw_intersystemSONInformationReply_nGRAN_CellActivation + + template (present) IntersystemSONInformationReply mw_intersystemSONInformationReply_resourceStatus( + template (present) IntersystemResourceStatusReply p_resourceStatus := ? + ) := { + resourceStatus := p_resourceStatus + } // End of template mw_intersystemSONInformationReply_resourceStatus + + template (present) IntersystemSONInformationReply mw_intersystemSONInformationReply_choice_Extensions( + template (present) IntersystemSONInformationReply.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_intersystemSONInformationReply_choice_Extensions + + template (present) IntersystemCellActivationReply mw_intersystemCellActivationReply( + template (present) ActivatedCellList p_activatedCellList := ?, + template (present) IntersystemCellActivationReply.activation_ID p_activation_ID := ?, + template IntersystemCellActivationReply.iE_Extensions p_iE_Extensions := * + ) := { + activatedCellList := p_activatedCellList, + activation_ID := p_activation_ID, + iE_Extensions := p_iE_Extensions + } // End of template mw_intersystemCellActivationReply + + template (present) IntersystemResourceStatusReply mw_intersystemResourceStatusReply( + template (present) ReportingSystem p_reportingsystem := ?, + template IntersystemResourceStatusReply.iE_Extensions p_iE_Extensions := * + ) := { + reportingsystem := p_reportingsystem, + iE_Extensions := p_iE_Extensions + } // End of template mw_intersystemResourceStatusReply + + template (present) IntersystemSONInformationReport mw_intersystemSONInformationReport_hOReportInformation( + template (present) InterSystemHOReport p_hOReportInformation := ? + ) := { + hOReportInformation := p_hOReportInformation + } // End of template mw_intersystemSONInformationReport_hOReportInformation + + template (present) IntersystemSONInformationReport mw_intersystemSONInformationReport_failureIndicationInformation( + template (present) InterSystemFailureIndication p_failureIndicationInformation := ? + ) := { + failureIndicationInformation := p_failureIndicationInformation + } // End of template mw_intersystemSONInformationReport_failureIndicationInformation + + template (present) IntersystemSONInformationReport mw_intersystemSONInformationReport_choice_Extensions( + template (present) IntersystemSONInformationReport.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_intersystemSONInformationReport_choice_Extensions + + template (present) IntersystemSONInformationReport.choice_Extensions mw_intersystemSONInformationReport_id_EnergySavingIndication( + template (present) IntersystemCellStateIndication p_intersystemCellStateIndication := ? + ) := { + id := id_EnergySavingIndication, + criticality := ignore, + value_ := { IntersystemCellStateIndication := p_intersystemCellStateIndication } + } // End of template mw_intersystemSONInformationReport_id_EnergySavingIndication + + template (present) IntersystemSONInformationReport.choice_Extensions mw_intersystemSONInformationReport_id_IntersystemResourceStatusUpdate( + template (present) IntersystemResourceStatusReport p_intersystemResourceStatusReport := ? + ) := { + id := id_IntersystemResourceStatusUpdate, + criticality := ignore, + value_ := { IntersystemResourceStatusReport := p_intersystemResourceStatusReport } + } // End of template mw_intersystemSONInformationReport_id_IntersystemResourceStatusUpdate + + template (present) NotificationCell_Item mw_notificationCell_Item( + template (present) NGRAN_CGI p_nGRAN_CGI := ?, + template (present) NotificationCell_Item.notifyFlag p_notifyFlag := ?, + template NotificationCell_Item.iE_Extensions p_iE_Extensions := * + ) := { + nGRAN_CGI := p_nGRAN_CGI, + notifyFlag := p_notifyFlag, + iE_Extensions := p_iE_Extensions + } // End of template mw_notificationCell_Item + + template (present) IntersystemResourceStatusReport mw_intersystemResourceStatusReport( + template (present) ResourceStatusReportingSystem p_reportingSystem := ?, + template IntersystemResourceStatusReport.iE_Extensions p_iE_Extensions := * + ) := { + reportingSystem := p_reportingSystem, + iE_Extensions := p_iE_Extensions + } // End of template mw_intersystemResourceStatusReport + + template (present) ResourceStatusReportingSystem mw_resourceStatusReportingSystemt_eUTRAN_ReportingStatus( + template (present) EUTRAN_ReportingStatusIEs p_eUTRAN_ReportingStatus := ? + ) := { + eUTRAN_ReportingStatus := p_eUTRAN_ReportingStatus + } // End of template mw_resourceStatusReportingSystem_eUTRAN_ReportingStatus + + template (present) ResourceStatusReportingSystem mw_resourceStatusReportingSystemt_nGRAN_ReportingStatus( + template (present) NGRAN_ReportingStatusIEs p_nGRAN_ReportingStatus := ? + ) := { + nGRAN_ReportingStatus := p_nGRAN_ReportingStatus + } // End of template mw_resourceStatusReportingSystem_nGRAN_ReportingStatus + + template (present) ResourceStatusReportingSystem mw_resourceStatusReportingSystem_choice_Extensions( + template (present) ResourceStatusReportingSystem.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_resourceStatusReportingSystem_choice_Extensions + + template (present) EUTRAN_ReportingStatusIEs mw_eUTRAN_ReportingStatusIEs( + template (present) EUTRAN_CellReportList p_eUTRAN_CellReportList := ?, + template EUTRAN_ReportingStatusIEs.iE_Extensions p_iE_Extensions := * + ) := { + eUTRAN_CellReportList := p_eUTRAN_CellReportList, + iE_Extensions := p_iE_Extensions + } // End of template mw_eUTRAN_ReportingStatusIEs + + template (present) EUTRAN_CellReportItem mw_eUTRAN_CellReportItem ( + template (present) EUTRA_CGI p_eCGI, + template (present) EUTRAN_CompositeAvailableCapacityGroup p_eUTRAN_CompositeAvailableCapacityGroup := ?, + template EUTRAN_NumberOfActiveUEs p_eUTRAN_NumberOfActiveUEs := *, + template NGRAN_NoofRRCConnections p_eUTRAN_NoofRRCConnections := *, + template EUTRAN_RadioResourceStatus p_eUTRAN_RadioResourceStatus := *, + template EUTRAN_CellReportItem.iE_Extensions p_iE_Extensions := * + ):= { + eCGI := p_eCGI, + eUTRAN_CompositeAvailableCapacityGroup := p_eUTRAN_CompositeAvailableCapacityGroup, + eUTRAN_NumberOfActiveUEs := p_eUTRAN_NumberOfActiveUEs, + eUTRAN_NoofRRCConnections := p_eUTRAN_NoofRRCConnections, + eUTRAN_RadioResourceStatus := p_eUTRAN_RadioResourceStatus, + iE_Extensions := p_iE_Extensions + } // End of template mw_eUTRAN_ReportingStatusIEs + + template (present) EUTRAN_CompositeAvailableCapacityGroup mw_EUTRAN_CompositeAvailableCapacityGroup( + template (present) CompositeAvailableCapacity p_dL_CompositeAvailableCapacity := ?, + template (present) CompositeAvailableCapacity p_uL_CompositeAvailableCapacity := ?, + template EUTRAN_CompositeAvailableCapacityGroup.iE_Extensions p_iE_Extensions := * + ) := { + dL_CompositeAvailableCapacity := p_dL_CompositeAvailableCapacity, + uL_CompositeAvailableCapacity := p_uL_CompositeAvailableCapacity, + iE_Extensions := p_iE_Extensions + } // End of template mw_EUTRAN_CompositeAvailableCapacityGroup + + template (present) CompositeAvailableCapacity mw_compositeAvailableCapacity( + template (present) CompositeAvailableCapacity.capacityValue p_capacityValue := ?, + template CompositeAvailableCapacity.cellCapacityClassValue p_cellCapacityClassValue := *, + template CompositeAvailableCapacity.iE_Extensions p_iE_Extensions := * + ) := { + cellCapacityClassValue := p_cellCapacityClassValue, + capacityValue := p_capacityValue, + iE_Extensions := p_iE_Extensions + } // End of template mw_compositeAvailableCapacity + + template (present) EUTRAN_RadioResourceStatus mw_eUTRAN_RadioResourceStatus( + template (present) EUTRAN_RadioResourceStatus.dL_GBR_PRB_usage p_dL_GBR_PRB_usage := ?, + template (present) EUTRAN_RadioResourceStatus.uL_GBR_PRB_usage p_uL_GBR_PRB_usage := ?, + template (present) EUTRAN_RadioResourceStatus.dL_non_GBR_PRB_usage p_dL_non_GBR_PRB_usage := ?, + template (present) EUTRAN_RadioResourceStatus.uL_non_GBR_PRB_usage p_uL_non_GBR_PRB_usage := ?, + template (present) EUTRAN_RadioResourceStatus.dL_Total_PRB_usage p_dL_Total_PRB_usage := ?, + template (present) EUTRAN_RadioResourceStatus.uL_Total_PRB_usage p_uL_Total_PRB_usage := ?, + template EUTRAN_RadioResourceStatus.dL_scheduling_PDCCH_CCE_usage p_dL_scheduling_PDCCH_CCE_usage := *, + template EUTRAN_RadioResourceStatus.uL_scheduling_PDCCH_CCE_usage p_uL_scheduling_PDCCH_CCE_usage := *, + template EUTRAN_RadioResourceStatus.iE_Extensions p_iE_Extensions := * + ) := { + dL_GBR_PRB_usage := p_dL_GBR_PRB_usage, + uL_GBR_PRB_usage := p_uL_GBR_PRB_usage, + dL_non_GBR_PRB_usage := p_dL_non_GBR_PRB_usage, + uL_non_GBR_PRB_usage := p_uL_non_GBR_PRB_usage, + dL_Total_PRB_usage := p_dL_Total_PRB_usage, + uL_Total_PRB_usage := p_uL_Total_PRB_usage, + dL_scheduling_PDCCH_CCE_usage := p_dL_scheduling_PDCCH_CCE_usage, + uL_scheduling_PDCCH_CCE_usage := p_uL_scheduling_PDCCH_CCE_usage, + iE_Extensions := p_iE_Extensions + } // End of template mw_eUTRAN_RadioResourceStatus + + template (present) NGRAN_ReportingStatusIEs mw_nGRAN_ReportingStatusIEs( + template (present) NGRAN_CellReportList p_nGRAN_CellReportList := ?, + template NGRAN_ReportingStatusIEs.iE_Extensions p_iE_Extensions := * + ) := { + nGRAN_CellReportList := p_nGRAN_CellReportList, + iE_Extensions := p_iE_Extensions + } // End of template mw_nGRAN_ReportingStatusIEs + + template (present) NGRAN_CellReportItem mw_nGRAN_CellReportItem( + template (present) NGRAN_CGI p_nGRAN_CGI, + template (present) EUTRAN_CompositeAvailableCapacityGroup p_nGRAN_CompositeAvailableCapacityGroup := ?, + template NGRAN_NumberOfActiveUEs p_nGRAN_NumberOfActiveUEs := *, + template NGRAN_NoofRRCConnections p_nGRAN_NoofRRCConnections := *, + template NGRAN_RadioResourceStatus p_nGRAN_RadioResourceStatus := *, + template NGRAN_CellReportItem.iE_Extensions p_iE_Extensions := * + ) := { + nGRAN_CGI := p_nGRAN_CGI, + nGRAN_CompositeAvailableCapacityGroup := p_nGRAN_CompositeAvailableCapacityGroup, + nGRAN_NumberOfActiveUEs := p_nGRAN_NumberOfActiveUEs, + nGRAN_NoofRRCConnections := p_nGRAN_NoofRRCConnections, + nGRAN_RadioResourceStatus := p_nGRAN_RadioResourceStatus, + iE_Extensions := p_iE_Extensions + } // End of template mw_nGRAN_CellReportItem + + template (present) NGRAN_RadioResourceStatus mw_nGRAN_RadioResourceStatus( + template (present) NGRAN_RadioResourceStatus.dL_GBR_PRB_usage_for_MIMO p_dL_GBR_PRB_usage_for_MIMO := ?, + template (present) NGRAN_RadioResourceStatus.uL_GBR_PRB_usage_for_MIMO p_uL_GBR_PRB_usage_for_MIMO := ?, + template (present) NGRAN_RadioResourceStatus.dL_non_GBR_PRB_usage_for_MIMO p_dL_non_GBR_PRB_usage_for_MIMO := ?, + template (present) NGRAN_RadioResourceStatus.uL_non_GBR_PRB_usage_for_MIMO p_uL_non_GBR_PRB_usage_for_MIMO := ?, + template (present) NGRAN_RadioResourceStatus.dL_Total_PRB_usage_for_MIMO p_dL_Total_PRB_usage_for_MIMO := ?, + template (present) NGRAN_RadioResourceStatus.uL_Total_PRB_usage_for_MIMO p_uL_Total_PRB_usage_for_MIMO := ?, + template NGRAN_RadioResourceStatus.iE_Extensions p_iE_Extensions := * + ) := { + dL_GBR_PRB_usage_for_MIMO := p_dL_GBR_PRB_usage_for_MIMO, + uL_GBR_PRB_usage_for_MIMO := p_uL_GBR_PRB_usage_for_MIMO, + dL_non_GBR_PRB_usage_for_MIMO := p_dL_non_GBR_PRB_usage_for_MIMO, + uL_non_GBR_PRB_usage_for_MIMO := p_uL_non_GBR_PRB_usage_for_MIMO, + dL_Total_PRB_usage_for_MIMO := p_dL_Total_PRB_usage_for_MIMO, + uL_Total_PRB_usage_for_MIMO := p_uL_Total_PRB_usage_for_MIMO, + iE_Extensions := p_iE_Extensions + } // End of template mw_nGRAN_RadioResourceStatus + + template (present) InterSystemHOReport mw_interSystemHOReport( + template (present) InterSystemHandoverReportType p_handoverReportType := ?, + template InterSystemHOReport.iE_Extensions p_iE_Extensions := * + ) := { + handoverReportType := p_handoverReportType, + iE_Extensions := p_iE_Extensions + } // End of template mw_interSystemHOReport + + template (present) InterSystemHandoverReportType mw_interSystemHandoverReportType_tooearlyIntersystemHO( + template (present) TooearlyIntersystemHO p_tooearlyIntersystemHO := ? + ) := { + tooearlyIntersystemHO := p_tooearlyIntersystemHO + } // End of template mw_interSystemHandoverReportType_tooearlyIntersystemHO + + template (present) InterSystemHandoverReportType mw_interSystemHandoverReportType_intersystemUnnecessaryHO( + template (present) IntersystemUnnecessaryHO p_intersystemUnnecessaryHO := ? + ) := { + intersystemUnnecessaryHO := p_intersystemUnnecessaryHO + } // End of template mw_interSystemHandoverReportType_intersystemUnnecessaryHO + + template (present) InterSystemHandoverReportType mw_interSystemHandoverReportType_choice_Extensions( + template (present) InterSystemHandoverReportType.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_interSystemHandoverReportType_choice_Extensions + + template (present) IntersystemUnnecessaryHO mw_intersystemUnnecessaryHO( + template (present) NGRAN_CGI p_sourcecellID := ?, + template (present) EUTRA_CGI p_targetcellID := ?, + template (present) IntersystemUnnecessaryHO.earlyIRATHO p_earlyIRATHO := ?, + template (present) CandidateCellList p_candidateCellList := ?, + template IntersystemUnnecessaryHO.iE_Extensions p_iE_Extensions := * + ) := { + sourcecellID := p_sourcecellID, + targetcellID := p_targetcellID, + earlyIRATHO := p_earlyIRATHO, + candidateCellList := p_candidateCellList, + iE_Extensions := p_iE_Extensions + } // End of template mw_intersystemUnnecessaryHO + + template (present) LAI mw_lai( + template (present) PLMNIdentity p_pLMNidentity := ?, + template (present) LAC p_lAC := ?, + template LAI.iE_Extensions p_iE_Extensions := * + ) := { + pLMNidentity := p_pLMNidentity, + lAC := p_lAC, + iE_Extensions := p_iE_Extensions + } // End of template mw_lai + + template (present) LastVisitedCellInformation mw_interSystemHandoverReportType_nGRANCell( + template (present) LastVisitedNGRANCellInformation p_nGRANCell := ? + ) := { + nGRANCell := p_nGRANCell + } // End of template mw_interSystemHandoverReportType_nGRANCell + + template (present) LastVisitedCellInformation mw_interSystemHandoverReportType_eUTRANCell( + template (present) LastVisitedEUTRANCellInformation p_eUTRANCell := ? + ) := { + eUTRANCell := p_eUTRANCell + } // End of template mw_interSystemHandoverReportType_eUTRANCell + + template (present) LastVisitedCellInformation mw_interSystemHandoverReportType_uTRANCell( + template (present) LastVisitedUTRANCellInformation p_uTRANCell := ? + ) := { + uTRANCell := p_uTRANCell + } // End of template mw_interSystemHandoverReportType_uTRANCell + + template (present) LastVisitedCellInformation mw_interSystemHandoverReportType_gERANCell( + template (present) LastVisitedGERANCellInformation p_gERANCell := ? + ) := { + gERANCell := p_gERANCell + } // End of template mw_interSystemHandoverReportType_gERANCell + + template (present) LastVisitedCellInformation mw_lastVisitedCellInformation_choice_Extensions( + template (present) LastVisitedCellInformation.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_lastVisitedCellInformation_choice_Extensions + + template (present) LastVisitedCellItem mw_lastVisitedCellItem( + template (present) LastVisitedCellInformation p_lastVisitedCellInformation := ?, + template LastVisitedCellItem.iE_Extensions p_iE_Extensions := * + ) := { + lastVisitedCellInformation := p_lastVisitedCellInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_lastVisitedCellItem + + template (present) LastVisitedNGRANCellInformation mw_lastVisitedNGRANCellInformation( + template (present) NGRAN_CGI p_globalCellID := ?, + template (present) CellType p_cellType := ?, + template (present) TimeUEStayedInCell p_timeUEStayedInCell := ?, + template TimeUEStayedInCellEnhancedGranularity p_timeUEStayedInCellEnhancedGranularity := *, + template Cause p_hOCauseValue := *, + template LastVisitedNGRANCellInformation.iE_Extensions p_iE_Extensions := * + ) := { + globalCellID := p_globalCellID, + cellType := p_cellType, + timeUEStayedInCell := p_timeUEStayedInCell, + timeUEStayedInCellEnhancedGranularity := p_timeUEStayedInCellEnhancedGranularity, + hOCauseValue := p_hOCauseValue, + iE_Extensions := p_iE_Extensions + } // End of template mw_lastVisitedNGRANCellInformation + + template (present) LastVisitedNGRANCellInformation.iE_Extensions mw_lastVisitedNGRANCellInformation_id_LastVisitedPSCellList( + template (present) LastVisitedPSCellList p_lastVisitedPSCellList := ? + ) := { + { + id := id_LastVisitedPSCellList, + criticality := ignore, + extensionValue := { LastVisitedPSCellList := p_lastVisitedPSCellList } + } + } // End of template mw_lastVisitedNGRANCellInformation_id_LastVisitedPSCellList + + template (present) LastVisitedPSCellInformation mw_LastVisitedPSCellInformation( + template (present) NGRAN_CGI p_pSCellID := ?, + template (present) LastVisitedPSCellInformation.timeStay p_timeStay := ?, + template LastVisitedPSCellInformation.iE_Extensions p_iE_Extensions := * + ) := { + pSCellID := p_pSCellID, + timeStay := p_timeStay, + iE_Extensions := p_iE_Extensions + } // End of template mw_LastVisitedPSCellInformation + + template (present) LineType mw_lineType(template (present) LineType p_value := pon) := p_value; + + template (present) LocationReportingAdditionalInfo mw_locationReportingAdditionalInfo(template (present) LocationReportingAdditionalInfo p_value := includePSCell) := p_value; + + template (present) LocationReportingRequestType mw_locationReportingRequestType( + template (present) EventType p_eventType := ?, + template (present) ReportArea p_reportArea := ?, + template AreaOfInterestList p_areaOfInterestList := *, + template LocationReportingReferenceID p_locationReportingReferenceIDToBeCancelled := *, + template LocationReportingRequestType.iE_Extensions p_iE_Extensions := * + ) := { + eventType := p_eventType, + reportArea := p_reportArea, + areaOfInterestList := p_areaOfInterestList, + locationReportingReferenceIDToBeCancelled := p_locationReportingReferenceIDToBeCancelled, + // The above IE shall be present if the event type is set to “stop reporting UE presence in the area of interest” + iE_Extensions := p_iE_Extensions + } // End of template mw_locationReportingRequestType + + template (present) LocationReportingRequestType.iE_Extensions mw_locationReportingRequestType_id_LocationReportingAdditionalInfo( + template (present) LocationReportingAdditionalInfo p_locationReportingAdditionalInfo := ? + ) := { + { + id := id_LocationReportingAdditionalInfo, + criticality := ignore, + extensionValue := { LocationReportingAdditionalInfo := p_locationReportingAdditionalInfo } + } + } // End of template mw_locationReportingRequestType_id_LocationReportingAdditionalInfo + + template (present) LoggedMDTNr mw_loggedMDTNr( + template (present) LoggingInterval p_loggingInterval := ?, + template (present) LoggingDuration p_loggingDuration := ?, + template (present) LoggedMDTTrigger p_loggedMDTTrigger := ?, + template BluetoothMeasurementConfiguration p_bluetoothMeasurementConfiguration := *, + template WLANMeasurementConfiguration p_wLANMeasurementConfiguration := *, + template SensorMeasurementConfiguration p_sensorMeasurementConfiguration := *, + template AreaScopeOfNeighCellsList p_areaScopeOfNeighCellsList := *, + template LoggedMDTNr.iE_Extensions p_iE_Extensions := * + ) := { + loggingInterval := p_loggingInterval, + loggingDuration := p_loggingDuration, + loggedMDTTrigger := p_loggedMDTTrigger, + bluetoothMeasurementConfiguration := p_bluetoothMeasurementConfiguration, + wLANMeasurementConfiguration := p_wLANMeasurementConfiguration, + sensorMeasurementConfiguration := p_sensorMeasurementConfiguration, + areaScopeOfNeighCellsList := p_areaScopeOfNeighCellsList, + iE_Extensions := p_iE_Extensions + } // End of template mw_loggedMDTNr + + template (present) LoggingInterval mw_loggingInterval(template (present) LoggingInterval p_value := ?) := p_value; + + template (present) LoggingDuration mw_loggingDuration(template (present) LoggingDuration p_value := ?) := p_value; + + template (present) Links_to_log mw_Links_to_log(template (present) Links_to_log p_value := ?) := p_value; + + template (present) LoggedMDTTrigger mw_loggedMDTTrigger_gERANCell( + template (present) EventTrigger p_eventTrigger := ? + ) := { + eventTrigger := p_eventTrigger + } // End of template mw_loggedMDTTrigger_gERANCell + + template (present) LoggedMDTTrigger mw_loggedMDTTrigger_choice_Extensions( + template (present) LoggedMDTTrigger.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_loggedMDTTrigger_choice_Extensions + + template (present) LTEM_Indication mw_lTEM_Indication(template (present) LTEM_Indication p_value := lte_m) := p_value; + + template LTEV2XServicesAuthorized mw_lTEV2XServicesAuthorized( + template VehicleUE p_vehicleUE := *, + template PedestrianUE p_pedestrianUE:= *, + template LTEV2XServicesAuthorized.iE_Extensions p_iE_Extensions := * + ) := { + vehicleUE := p_vehicleUE, + pedestrianUE := p_pedestrianUE, + iE_Extensions := p_iE_Extensions + } // End of template mw_lTEV2XServicesAuthorized + + template (present) LTEUESidelinkAggregateMaximumBitrate mw_lTEUESidelinkAggregateMaximumBitrate( + template (present) BitRate p_uESidelinkAggregateMaximumBitRate := ?, + template LTEUESidelinkAggregateMaximumBitrate.iE_Extensions p_iE_Extensions := * + ) := { + uESidelinkAggregateMaximumBitRate := p_uESidelinkAggregateMaximumBitRate, + iE_Extensions := p_iE_Extensions + } // End of template mw_lTEUESidelinkAggregateMaximumBitrate + + template (present) MaximumIntegrityProtectedDataRate mw_maximumIntegrityProtectedDataRate(template (present) MaximumIntegrityProtectedDataRate p_value := ?) := p_value; + + template (present) MBS_DataForwardingResponseMRBItem mw_mBS_DataForwardingResponseMRBItem( + template (present) MRB_ID p_mRB_ID := ?, + template (present) UPTransportLayerInformation p_dL_Forwarding_UPTNLInformation := ?, + template MRB_ProgressInformation p_mRB_ProgressInformation := *, + template MBS_DataForwardingResponseMRBItem.iE_Extensions p_iE_Extensions := * + ) := { + mRB_ID := p_mRB_ID, + dL_Forwarding_UPTNLInformation := p_dL_Forwarding_UPTNLInformation, + mRB_ProgressInformation := p_mRB_ProgressInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_DataForwardingResponseMRBItem + + template (present) MBS_MappingandDataForwardingRequestItem mw_mBS_MappingandDataForwardingRequestItem( + template (present) MRB_ID p_mRB_ID := ?, + template (present) MBS_QoSFlowList p_mBS_QoSFlowList := ?, + template MRB_ProgressInformation p_mRB_ProgressInformation := *, + template MBS_MappingandDataForwardingRequestItem.iE_Extensions p_iE_Extensions := * + ) := { + mRB_ID := p_mRB_ID, + mBS_QoSFlowList := p_mBS_QoSFlowList, + mRB_ProgressInformation := p_mRB_ProgressInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_MappingandDataForwardingRequestItem + + template (present) MRB_ProgressInformation mw_mRB_ProgressInformation_pDCP_SN_Length12( + template (present) MRB_ProgressInformation.pDCP_SN_Length12 p_pDCP_SN_Length12 := ? + ) := { + pDCP_SN_Length12 := p_pDCP_SN_Length12 + } // End of template mw_mRB_ProgressInformation_pDCP_SN_Length12 + + template (present) MRB_ProgressInformation mw_mRB_ProgressInformation_pDCP_SN_Length18( + template (present) MRB_ProgressInformation.pDCP_SN_Length18 p_pDCP_SN_Length18 := ? + ) := { + pDCP_SN_Length18 := p_pDCP_SN_Length18 + } // End of template m_mRB_ProgressInformation_pDCP_SN_Length18 + + template (present) MRB_ProgressInformation mw_mRB_ProgressInformation_choice_Extensions( + template (present) MRB_ProgressInformation.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_mRB_ProgressInformation_choice_Extensions + + template (present) MBS_QoSFlowsToBeSetupItem mw_mBS_QoSFlowsToBeSetupItem( + template (present)QosFlowIdentifier p_mBSqosFlowIdentifier := ?, + template (present)QosFlowLevelQosParameters p_mBSqosFlowLevelQosParameters := ?, + template MBS_QoSFlowsToBeSetupItem.iE_Extensions p_iE_Extensions := * + ) := { + mBSqosFlowIdentifier := p_mBSqosFlowIdentifier, + mBSqosFlowLevelQosParameters := p_mBSqosFlowLevelQosParameters, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_QoSFlowsToBeSetupItem + + template (present) MBS_ServiceArea mw_mBS_ServiceArea_locationindependent( + template (present) MBS_ServiceAreaInformation p_locationindependent := ? + ) := { + locationindependent := p_locationindependent + } // End of template mw_mBS_ServiceArea_locationindependent + + template (present) MBS_ServiceArea mw_mBS_ServiceArea_locationdependent( + template (present) MBS_ServiceAreaInformationList p_locationdependent := ? + ) := { + locationdependent := p_locationdependent + } // End of template mw_mBS_ServiceArea_locationdependent + + template (present) MBS_ServiceArea mw_mBS_ServiceArea_choice_Extensions( + template (present) MBS_ServiceArea.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_mBS_ServiceArea_choice_Extensions + + template (present) MBS_ServiceAreaInformationItem mw_mBS_ServiceAreaInformationItem( + template (present) MBS_AreaSessionID p_mBS_AreaSessionID := ?, + template (present) MBS_ServiceAreaInformation p_mBS_ServiceAreaInformation := ?, + template MBS_ServiceAreaInformationItem.iE_Extensions p_iE_Extensions := * + ) := { + mBS_AreaSessionID := p_mBS_AreaSessionID, + mBS_ServiceAreaInformation := p_mBS_ServiceAreaInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_ServiceAreaInformationItem + + template MBS_ServiceAreaInformation mw_mBS_ServiceAreaInformation( + template MBS_ServiceAreaCellList p_mBS_ServiceAreaCellList := *, + template MBS_ServiceAreaTAIList p_mBS_ServiceAreaTAIList := *, + template MBS_ServiceAreaInformation.iE_Extensions p_iE_Extensions := * + ) := { + mBS_ServiceAreaCellList := p_mBS_ServiceAreaCellList, + mBS_ServiceAreaTAIList := p_mBS_ServiceAreaTAIList, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_ServiceAreaInformation + + template (present) MBS_SessionID mw_mBS_SessionID( + template (present) TMGI p_tMGI := ?, + template NID p_nID := *, + template MBS_SessionID.iE_Extensions p_iE_Extensions := * + ) := { + tMGI := p_tMGI, + nID := p_nID, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_SessionID + + template (present) MBSSessionFailedtoSetupItem mw_mBSSessionFailedtoSetupItem( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template (present) Cause p_cause := ?, + template MBS_AreaSessionID p_mBS_AreaSessionID := *, + template MBSSessionFailedtoSetupItem.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBSSessionFailedtoSetupItem + + template (present) MBS_ActiveSessionInformation_SourcetoTargetItem mw_mBS_ActiveSessionInformation_SourcetoTargetItem( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template (present) MBS_QoSFlowsToBeSetupList p_mBS_QoSFlowsToBeSetupList := ?, + template MBS_AreaSessionID p_mBS_AreaSessionID := *, + template MBS_ServiceArea p_mBS_ServiceArea := *, + template MBS_MappingandDataForwardingRequestList p_mBS_MappingandDataForwardingRequestList := *, + template MBS_ActiveSessionInformation_SourcetoTargetItem.iE_Extensions p_iE_Extensions := * + ):= { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + mBS_ServiceArea := p_mBS_ServiceArea, + mBS_QoSFlowsToBeSetupList := p_mBS_QoSFlowsToBeSetupList, + mBS_MappingandDataForwardingRequestList := p_mBS_MappingandDataForwardingRequestList, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_ActiveSessionInformation_SourcetoTargetItem + + template (present) MBS_ActiveSessionInformation_TargettoSourceItem mw_mBS_ActiveSessionInformation_TargettoSourceItem( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template MBS_DataForwardingResponseMRBList p_mBS_DataForwardingResponseMRBList := *, + template MBS_ActiveSessionInformation_TargettoSourceItem.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_DataForwardingResponseMRBList := p_mBS_DataForwardingResponseMRBList, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_ActiveSessionInformation_TargettoSourceItem + + template (present) MBSSessionSetupOrModFailureTransfer mw_mBSSessionSetupOrModFailureTransfer( + template (present) Cause p_cause := ?, + template CriticalityDiagnostics p_criticalityDiagnostics := *, + template MBSSessionSetupOrModFailureTransfer.iE_Extensions p_iE_Extensions := * + ) := { + cause := p_cause, + criticalityDiagnostics := p_criticalityDiagnostics, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBSSessionSetupOrModFailureTransfer + + template (present) MBSSessionSetupResponseItem mw_mBSSessionSetupResponseItem( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template MBS_AreaSessionID p_mBS_AreaSessionID := *, + template MBSSessionSetupResponseItem.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBSSessionSetupResponseItem + + template (present) MBSSessionSetupOrModRequestTransfer mw_mBSSessionSetupOrModRequestTransfer( + template (present) MBSSessionSetupOrModRequestTransfer.protocolIEs p_protocolIEs := ? + ) := { + protocolIEs := p_protocolIEs + } // End of template mw_mBSSessionSetupOrModRequestTransfer + + template (present) MBSSessionSetupOrModRequestTransfer mw_mBSSessionSetupOrModRequestTransfer_options( + template (present) MBS_SessionTNLInfo5GC p_mBS_SessionTNLInfo5GC := ?, + template (present) MBS_QoSFlowsToBeSetupList p_mBS_QoSFlowsToBeSetupList := ?, + template (present) MBS_SessionFSAIDList p_mBS_SessionFSAIDList := ? + ) := { + protocolIEs := { + { + id := id_MBS_SessionTNLInfo5GC, + criticality := reject, + value_ := { MBS_SessionTNLInfo5GC := p_mBS_SessionTNLInfo5GC } + }, + { + id := id_MBS_QoSFlowsToBeSetupModList, + criticality := reject, + value_ := { MBS_QoSFlowsToBeSetupList := p_mBS_QoSFlowsToBeSetupList } + }, + { + id := id_MBS_SessionFSAIDList, + criticality := ignore, + value_ := { MBS_SessionFSAIDList := p_mBS_SessionFSAIDList } + } + } + } // End of template mw_mBSSessionSetupOrModRequestTransfer_options + + template MBSSessionReleaseResponseTransfer mw_mBSSessionReleaseResponseTransfer( + template MBS_SessionTNLInfoNGRAN p_mBS_SessionTNLInfoNGRAN := *, + template MBSSessionReleaseResponseTransfer.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionTNLInfoNGRAN := p_mBS_SessionTNLInfoNGRAN, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBSSessionReleaseResponseTransfer + + template MBSSessionSetupOrModResponseTransfer mw_mBSSessionSetupOrModResponseTransfer( + template MBS_SessionTNLInfoNGRAN p_mBS_SessionTNLInfoNGRAN := *, + template MBSSessionSetupOrModResponseTransfer.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionTNLInfoNGRAN := p_mBS_SessionTNLInfoNGRAN, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBSSessionSetupOrModResponseTransfer + + template (present) MBS_SupportIndicator mw_mBS_SupportIndicator(template (present) MBS_SupportIndicator p_value := true_) := p_value; + + template (present) MBS_SessionTNLInfo5GC mw_mBS_SessionTNLInfo5GC_locationindependent( + template (present) SharedNGU_MulticastTNLInformation p_locationindependent := ? + ) := { + locationindependent := p_locationindependent + } // End of template mw_mBS_SessionTNLInfo5GC_locationindependent + + template (present) MBS_SessionTNLInfo5GC mw_mBS_SessionTNLInfo5GC_locationdependent( + template (present) MBS_SessionTNLInfo5GCList p_locationdependent := ? + ) := { + locationdependent := p_locationdependent + } // End of template mw_mBS_SessionTNLInfo5GC_locationdependent + + template (present) MBS_SessionTNLInfo5GC mw_mBS_SessionTNLInfo5GC_choice_Extensions( + template (present) MBS_SessionTNLInfo5GC.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_mBS_SessionTNLInfo5GC_choice_Extensions + + + template (present) MBS_SessionTNLInfo5GCItem mw_mBS_SessionTNLInfo5GCItem( + template (present) MBS_AreaSessionID p_mBS_AreaSessionID := ?, + template (present) SharedNGU_MulticastTNLInformation p_sharedNGU_MulticastTNLInformation := ?, + template MBS_SessionTNLInfo5GCItem.iE_Extensions p_iE_Extensions := * + ) := { + mBS_AreaSessionID := p_mBS_AreaSessionID, + sharedNGU_MulticastTNLInformation := p_sharedNGU_MulticastTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_SessionTNLInfo5GCItem + + template (present) MBS_SessionTNLInfoNGRAN mw_mBS_SessionTNLInfoNGRAN_locationindependent( + template (present) UPTransportLayerInformation p_locationindependent := ? + ) := { + locationindependent := p_locationindependent + } // End of template mw_mBS_SessionTNLInfoNGRAN_locationindependent + + template (present) MBS_SessionTNLInfoNGRAN mw_mBS_SessionTNLInfoNGRAN_locationdependent( + template (present) MBS_SessionTNLInfoNGRANList p_locationdependent := ? + ) := { + locationdependent := p_locationdependent + } // End of template mw_mBS_SessionTNLInfoNGRAN_locationdependent + + template (present) MBS_SessionTNLInfoNGRAN mw_mBS_SessionTNLInfoNGRAN_choice_Extensions( + template (present) MBS_SessionTNLInfoNGRAN.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_mBS_SessionTNLInfoNGRAN_choice_Extensions + + template (present) MBS_SessionTNLInfoNGRANItem mw_mBS_SessionTNLInfoNGRANItem( + template (present) MBS_AreaSessionID p_mBS_AreaSessionID := ?, + template UPTransportLayerInformation p_sharedNGU_UnicastTNLInformation := *, + template MBS_SessionTNLInfoNGRANItem.iE_Extensions p_iE_Extensions := * + ) := { + mBS_AreaSessionID := p_mBS_AreaSessionID, + sharedNGU_UnicastTNLInformation := p_sharedNGU_UnicastTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_SessionTNLInfoNGRANItem + + template (present) MBS_DistributionReleaseRequestTransfer mw_mBS_DistributionReleaseRequestTransfer( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template (present) Cause p_cause := ?, + template MBS_AreaSessionID p_mBS_AreaSessionID := *, + template UPTransportLayerInformation p_sharedNGU_UnicastTNLInformation := *, + template MBS_DistributionReleaseRequestTransfer.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + sharedNGU_UnicastTNLInformation := p_sharedNGU_UnicastTNLInformation, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_DistributionReleaseRequestTransfer + + template (present) MBS_DistributionSetupRequestTransfer mw_mBS_DistributionSetupRequestTransfer( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template MBS_AreaSessionID p_mBS_AreaSessionID := *, + template UPTransportLayerInformation p_sharedNGU_UnicastTNLInformation := *, + template MBS_DistributionSetupRequestTransfer.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + sharedNGU_UnicastTNLInformation := p_sharedNGU_UnicastTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_DistributionSetupRequestTransfer + + template (present) MBS_DistributionSetupResponseTransfer mw_mBS_DistributionSetupResponseTransfer( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template (present) MBS_QoSFlowsToBeSetupList p_mBS_QoSFlowsToBeSetupList := ?, + template (present) MBSSessionStatus p_mBSSessionStatus := ?, + template MBS_AreaSessionID p_mBS_AreaSessionID := *, + template MBS_SessionTNLInfo5GCItem p_sharedNGU_MulticastTNLInformation := *, + template MBS_ServiceArea p_mBS_ServiceArea := *, + template MBS_DistributionSetupResponseTransfer.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + sharedNGU_MulticastTNLInformation := p_sharedNGU_MulticastTNLInformation, + mBS_QoSFlowsToBeSetupList := p_mBS_QoSFlowsToBeSetupList, + mBSSessionStatus := p_mBSSessionStatus, + mBS_ServiceArea := p_mBS_ServiceArea, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_DistributionSetupResponseTransfer + + template (present) MBS_DistributionSetupUnsuccessfulTransfer mw_mBS_DistributionSetupUnsuccessfulTransfer( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template (present) Cause p_cause := ?, + template MBS_AreaSessionID p_mBS_AreaSessionID := *, + template CriticalityDiagnostics p_criticalityDiagnostics := *, + template MBS_DistributionSetupUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + cause := p_cause, + criticalityDiagnostics := p_criticalityDiagnostics, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBS_DistributionSetupUnsuccessfulTransfer + + template (present) MBSSessionSetupRequestItem mw_mBSSessionSetupRequestItem( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template MBS_AreaSessionID p_mBS_AreaSessionID := *, + template AssociatedMBSQosFlowSetupRequestList p_associatedMBSQosFlowSetupRequestList := *, + template MBSSessionSetupRequestItem.iE_Extensions p_iE_Extensions := * + ):= { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + associatedMBSQosFlowSetupRequestList := p_associatedMBSQosFlowSetupRequestList, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBSSessionSetupRequestItem + + template (present) MBSSessionSetuporModifyRequestItem mw_mBSSessionSetuporModifyRequestItem( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template MBS_AreaSessionID p_mBS_AreaSessionID := *, + template AssociatedMBSQosFlowSetuporModifyRequestList p_associatedMBSQosFlowSetuporModifyRequestList := *, + template QosFlowListWithCause p_mBS_QosFlowToReleaseList := *, + template MBSSessionSetuporModifyRequestItem.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionID := p_mBS_SessionID, + mBS_AreaSessionID := p_mBS_AreaSessionID, + associatedMBSQosFlowSetuporModifyRequestList := p_associatedMBSQosFlowSetuporModifyRequestList, + mBS_QosFlowToReleaseList := p_mBS_QosFlowToReleaseList, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBSSessionSetuporModifyRequestItem + + template (present) MBSSessionToReleaseItem mw_mBSSessionToReleaseItem( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template (present) Cause p_cause := ?, + template MBSSessionToReleaseItem.iE_Extensions p_iE_Extensions := * + ):= { + mBS_SessionID := p_mBS_SessionID, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_mBSSessionToReleaseItem + + template (present) MBSSessionStatus mw_mBSSessionStatus(template (present) MBSSessionStatus p_value := ?) := p_value; + + template (present) MicoAllPLMN mw_micoAllPLMN(template (present) MicoAllPLMN p_value := true_) := p_value; + + template (present) MICOModeIndication mw_mICOModeIndication(template (present) MICOModeIndication p_value := true_) := p_value; + + template (present) MobilityRestrictionList mw_mobilityRestrictionList( + template (present) PLMNIdentity p_servingPLMN := ?, + template EquivalentPLMNs p_equivalentPLMNs := *, + template RATRestrictions p_rATRestrictions := *, + template ForbiddenAreaInformation p_forbiddenAreaInformation := *, + template ServiceAreaInformation p_serviceAreaInformation := *, + template MobilityRestrictionList.iE_Extensions p_iE_Extensions := * + ) := { + servingPLMN := p_servingPLMN, + equivalentPLMNs := p_equivalentPLMNs, + rATRestrictions := p_rATRestrictions, + forbiddenAreaInformation := p_forbiddenAreaInformation, + serviceAreaInformation := p_serviceAreaInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_mobilityRestrictionList + + template (present) MobilityRestrictionList.iE_Extensions mw_mobilityRestrictionList_id_LastEUTRAN_PLMNIdentity( + template (present) PLMNIdentity p_pLMNIdentity := ? + ) := { + { + id := id_LastEUTRAN_PLMNIdentity, + criticality := ignore, + extensionValue := { PLMNIdentity := p_pLMNIdentity } + } + } // End of template mw_mobilityRestrictionList_id_LastEUTRAN_PLMNIdentity + + template (present) MobilityRestrictionList.iE_Extensions mw_mobilityRestrictionList_id_CNTypeRestrictionsForServing( + template (present) CNTypeRestrictionsForServing p_cNTypeRestrictionsForServing := ? + ) := { + { + id := id_CNTypeRestrictionsForServing, + criticality := ignore, + extensionValue := { CNTypeRestrictionsForServing := p_cNTypeRestrictionsForServing } + } + } // End of template mw_mobilityRestrictionList_id_CNTypeRestrictionsForServing + + template (present) MobilityRestrictionList.iE_Extensions mw_mobilityRestrictionList_id_CNTypeRestrictionsForEquivalent( + template (present) CNTypeRestrictionsForEquivalent p_cNTypeRestrictionsForEquivalent := ? + ) := { + { + id := id_CNTypeRestrictionsForEquivalent, + criticality := ignore, + extensionValue := { CNTypeRestrictionsForEquivalent := p_cNTypeRestrictionsForEquivalent } + } + } // End of template mw_mobilityRestrictionList_id_CNTypeRestrictionsForEquivalent + + template (present) MobilityRestrictionList.iE_Extensions mw_mobilityRestrictionList_id_NPN_MobilityInformation( + template (present) NPN_MobilityInformation p_nPN_MobilityInformation := ? + ) := { + { + id := id_NPN_MobilityInformation, + criticality := reject, + extensionValue := { NPN_MobilityInformation := p_nPN_MobilityInformation } + } + } // End of template mw_mobilityRestrictionList_id_NPN_MobilityInformation + + template (present) MDT_AlignmentInfo mw_mDT_AlignmentInfo_s_basedMDT( + template (present) NGRANTraceID p_s_basedMDT := ? + ) := { + s_basedMDT := p_s_basedMDT + } // End of template mw_mDT_AlignmentInfo_s_basedMDT + + template (present) MDT_AlignmentInfo mw_mDT_AlignmentInfo_choice_Extensions( + template (present) MDT_AlignmentInfo.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_mDT_AlignmentInfo_choice_Extensions + + template MDT_Configuration mw_mDT_Configuration( + template MDT_Configuration_NR p_mdt_Config_NR := *, + template MDT_Configuration_EUTRA p_mdt_Config_EUTRA := *, + template MDT_Configuration.iE_Extensions p_iE_Extensions := * + ) := { + mdt_Config_NR := p_mdt_Config_NR, + mdt_Config_EUTRA := p_mdt_Config_EUTRA, + iE_Extensions := p_iE_Extensions + } // End of template mw_mDT_Configuration + + template (present) MDT_Configuration_NR mw_mDT_Configuration_NR( + template (present) MDT_Activation p_mdt_Activation := ?, + template (present) AreaScopeOfMDT_NR p_areaScopeOfMDT := ?, + template (present) MDTModeNr p_mDTModeNr := ?, + template MDTPLMNList p_signallingBasedMDTPLMNList := *, + template MDT_Configuration_NR.iE_Extensions p_iE_Extensions := * + ) := { + mdt_Activation := p_mdt_Activation, + areaScopeOfMDT := p_areaScopeOfMDT, + mDTModeNr := p_mDTModeNr, + signallingBasedMDTPLMNList := p_signallingBasedMDTPLMNList, + iE_Extensions := p_iE_Extensions + } // End of template mw_mDT_Configuration_NR + + template (present) MDT_Configuration_EUTRA mw_mDT_Configuration_EUTRA( + template (present) MDT_Activation p_mdt_Activation := ?, + template (present) AreaScopeOfMDT_EUTRA p_areaScopeOfMDT := ?, + template (present) MDTModeEutra p_mDTMode := ?, + template MDTPLMNList p_signallingBasedMDTPLMNList := *, + template MDT_Configuration_EUTRA.iE_Extensions p_iE_Extensions := * + ) := { + mdt_Activation := p_mdt_Activation, + areaScopeOfMDT := p_areaScopeOfMDT, + mDTMode := p_mDTMode, + signallingBasedMDTPLMNList := p_signallingBasedMDTPLMNList, + iE_Extensions := p_iE_Extensions + } // End of template mw_mDT_Configuration_EUTRA + + template (present) MDT_Activation mw_mDT_Activation(template (present) MDT_Activation p_value := ?) := p_value; + + template (present) MDTModeNr mw_mDTModeNro_immediateMDTNr( + template (present) ImmediateMDTNr p_immediateMDTNr := ? + ) := { + immediateMDTNr := p_immediateMDTNr + } // End of template mw_mDTModeNr_immediateMDTNr + + template (present) MDTModeNr mw_mDTModeNro_loggedMDTNr( + template (present) LoggedMDTNr p_loggedMDTNr := ? + ) := { + loggedMDTNr := p_loggedMDTNr + } // End of template mw_mDTModeNr_loggedMDTNr + + template (present) MDTModeNr mw_mDTModeNr_choice_Extensions( + template (present) MDTModeNr.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_mDTModeNr_choice_Extensions + + template (present) MulticastSessionActivationRequestTransfer mw_multicastSessionActivationRequestTransfer( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template MulticastSessionActivationRequestTransfer.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionID := p_mBS_SessionID, + iE_Extensions := p_iE_Extensions + } // End of template mw_multicastSessionActivationRequestTransfer + + template (present) MulticastSessionDeactivationRequestTransfer mw_multicastSessionDeactivationRequestTransfer( + template (present) MBS_SessionID p_mBS_SessionID := ?, + template MulticastSessionDeactivationRequestTransfer.iE_Extensions p_iE_Extensions := * + ) := { + mBS_SessionID := p_mBS_SessionID, + iE_Extensions := p_iE_Extensions + } // End of template mw_multicastSessionDeactivationRequestTransfer + + template (present) MulticastSessionUpdateRequestTransfer mw_multicastSessionUpdateRequestTransfer( + template (present) MulticastSessionUpdateRequestTransfer.protocolIEs p_protocolIEs := ? + ) := { + protocolIEs := p_protocolIEs + } // End of template mw_multicastSessionUpdateRequestTransfer + + template (present) MulticastSessionUpdateRequestTransfer.protocolIEs mw_multicastSessionUpdateRequestTransfer_id_MBS_SessionID( + template (present) MBS_SessionID p_mBS_SessionID := ? + ) := { + { + id := id_MBS_SessionID, + criticality := reject, + value_ := { MBS_SessionID := p_mBS_SessionID } + } + } // End of template mw_multicastSessionUpdateRequestTransfer_id_MBS_SessionID + + template (present) MulticastSessionUpdateRequestTransfer.protocolIEs mw_multicastSessionUpdateRequestTransfer_id_MBS_ServiceArea( + template (present) MBS_ServiceArea p_mBS_ServiceArea := ? + ) := { + { + id := id_MBS_ServiceArea, + criticality := reject, + value_ := { MBS_ServiceArea := p_mBS_ServiceArea } + } + } // End of template mw_multicastSessionUpdateRequestTransfer_id_MBS_ServiceArea + + template (present) MulticastSessionUpdateRequestTransfer.protocolIEs mw_multicastSessionUpdateRequestTransfer_id_MBS_QoSFlowsToBeSetupModList( + template (present) MBS_QoSFlowsToBeSetupList p_mBS_QoSFlowsToBeSetupList := ? + ) := { + { + id := id_MBS_QoSFlowsToBeSetupModList, + criticality := reject, + value_ := { MBS_QoSFlowsToBeSetupList := p_mBS_QoSFlowsToBeSetupList } + } + } // End of template mw_multicastSessionUpdateRequestTransfer_id_MBS_QoSFlowsToBeSetupModList + + template (present) MulticastSessionUpdateRequestTransfer.protocolIEs mw_multicastSessionUpdateRequestTransfer_id_MBS_QoSFlowToReleaseList( + template (present) QosFlowListWithCause p_qosFlowListWithCause := ? + ) := { + { + id := id_MBS_QoSFlowToReleaseList, + criticality := reject, + value_ := { QosFlowListWithCause := p_qosFlowListWithCause } + } + } // End of template mw_multicastSessionUpdateRequestTransfer_id_MBS_QoSFlowToReleaseList + + template (present) MulticastSessionUpdateRequestTransfer.protocolIEs mw_multicastSessionUpdateRequestTransfer_id_MBS_SessionTNLInfo5GC( + template (present) MBS_SessionTNLInfo5GC p_mBS_SessionTNLInfo5GC := ? + ) := { + { + id := id_MBS_SessionTNLInfo5GC, + criticality := reject, + value_ := { MBS_SessionTNLInfo5GC := p_mBS_SessionTNLInfo5GC } + } + } // End of template mw_multicastSessionUpdateRequestTransfer_id_MBS_SessionTNLInfo5GC + + template (present) MulticastGroupPagingAreaItem mw_multicastGroupPagingAreaItem( + template (present) MulticastGroupPagingArea p_multicastGroupPagingArea := ?, + template UE_PagingList p_uE_PagingList := *, + template MulticastGroupPagingAreaItem.iE_Extensions p_iE_Extensions := * + ) := { + multicastGroupPagingArea := p_multicastGroupPagingArea, + uE_PagingList := p_uE_PagingList, + iE_Extensions := p_iE_Extensions + } // End of template mw_multicastGroupPagingAreaItem + + template (present) MulticastGroupPagingArea mw_multicastGroupPagingArea( + template (present) MBS_AreaTAIList p_mBS_AreaTAIList := ?, + template MulticastGroupPagingArea.iE_Extensions p_iE_Extensions := * + ) := { + mBS_AreaTAIList := p_mBS_AreaTAIList, + iE_Extensions := p_iE_Extensions + } // End of template mw_multicastGroupPagingArea + + template (present) UE_PagingItem mw_uE_PagingItem( + template (present) UEIdentityIndexValue p_uEIdentityIndexValue := ?, + template PagingDRX p_pagingDRX := *, + template UE_PagingItem.iE_Extensions p_iE_Extensions := * + ) := { + uEIdentityIndexValue := p_uEIdentityIndexValue, + pagingDRX := p_pagingDRX, + iE_Extensions := p_iE_Extensions + } // End of template mw_uE_PagingItem + + template (present) M1Configuration mw_m1Configuration( + template (present) M1ReportingTrigger p_m1reportingTrigger := ?, + template M1ThresholdEventA2 p_m1thresholdEventA2 := *, + template M1PeriodicReporting p_m1periodicReporting := *, + template M1Configuration.iE_Extensions p_iE_Extensions := * + ) := { + m1reportingTrigger := p_m1reportingTrigger, + m1thresholdEventA2 := p_m1thresholdEventA2, + // The above IE shall be present if the M1 Reporting Trigger IE is set to “A2event_triggered” or “A2event_triggered periodic” + m1periodicReporting := p_m1periodicReporting, + // The above IE shall be present if the M1 Reporting Trigger IE is set to “periodic” or “A2event_triggered periodic” + iE_Extensions := p_iE_Extensions + } // End of template mw_m1Configuration + + template (present) M1Configuration.iE_Extensions mw_m1Configuration_id_IncludeBeamMeasurementsIndication( + template (present) IncludeBeamMeasurementsIndication p_includeBeamMeasurementsIndication := ? + ) := { + { + id := id_IncludeBeamMeasurementsIndication, + criticality := ignore, + extensionValue := { IncludeBeamMeasurementsIndication := p_includeBeamMeasurementsIndication } + } + } // End of template mw_m1Configuration_id_IncludeBeamMeasurementsIndication + + template (present) M1Configuration.iE_Extensions mw_m1Configuration_id_BeamMeasurementsReportConfiguration( + template (present) BeamMeasurementsReportConfiguration p_beamMeasurementsReportConfiguration := ? + ) := { + { + id := id_BeamMeasurementsReportConfiguration, + criticality := ignore, + extensionValue := { BeamMeasurementsReportConfiguration := p_beamMeasurementsReportConfiguration } + } + } // End of template mw_m1Configuration_id_BeamMeasurementsReportConfiguration + + template (present) IncludeBeamMeasurementsIndication mw_includeBeamMeasurementsIndication(template (present) IncludeBeamMeasurementsIndication p_value := true_) := p_value; + + template (present) M1ReportingTrigger mw_m1ReportingTrigger(template (present) M1ReportingTrigger p_value := ?) := p_value; + + template (present) M1ThresholdEventA2 mw_m1ThresholdEventA2( + template (present) M1ThresholdType p_m1ThresholdType := ?, + template M1ThresholdEventA2.iE_Extensions p_iE_Extensions := * + ) := { + m1ThresholdType := p_m1ThresholdType, + iE_Extensions := p_iE_Extensions + } // End of template mw_m1ThresholdEventA2 + + template (present) M1ThresholdType mw_m1ThresholdType_threshold_RSRP( + template (present) Threshold_RSRP p_threshold_RSRP := ? + ) := { + threshold_RSRP := p_threshold_RSRP + } // End of template mw_m1ThresholdType_threshold_RSRP + + template (present) M1ThresholdType mw_m1ThresholdType_threshold_RSRQ( + template (present) Threshold_RSRQ p_threshold_RSRQ := ? + ) := { + threshold_RSRQ := p_threshold_RSRQ + } // End of template mw_m1ThresholdType_threshold_RSRQ + + template (present) M1ThresholdType mw_m1ThresholdType_threshold_SINR( + template (present) Threshold_SINR p_threshold_SINR := ? + ) := { + threshold_SINR := p_threshold_SINR + } // End of template mw_m1ThresholdType_threshold_SINR + + template (present) M1ThresholdType mw_m1ThresholdType_choice_Extensions( + template (present) M1ThresholdType.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_m1ThresholdType_choice_Extensions + + template (present) M1PeriodicReporting mw_m1PeriodicReporting( + template (present) ReportIntervalMDT p_reportInterval := ?, + template (present) ReportAmountMDT p_reportAmount := ?, + template M1PeriodicReporting.iE_Extensions p_iE_Extensions := * + ) := { + reportInterval := p_reportInterval, + reportAmount := p_reportAmount, + iE_Extensions := p_iE_Extensions + } // End of template mw_m1PeriodicReporting + + template (present) M1PeriodicReporting.iE_Extensions mw_m1PeriodicReporting_id_ExtendedReportIntervalMDT( + template (present) ExtendedReportIntervalMDT p_extendedReportIntervalMDT := ? + ) := { + { + id := id_ExtendedReportIntervalMDT, + criticality := ignore, + extensionValue := { ExtendedReportIntervalMDT := p_extendedReportIntervalMDT } + } + } // End of template mw_m1PeriodicReporting_id_ExtendedReportIntervalMDT + + template (present) M4Configuration mw_m4Configuration( + template (present) M4period p_m4period := ?, + template (present) Links_to_log p_m4_links_to_log := ?, + template M4Configuration.iE_Extensions p_iE_Extensions := * + ) := { + m4period := p_m4period, + m4_links_to_log := p_m4_links_to_log, + iE_Extensions := p_iE_Extensions + } // End of template mw_m4Configuration + + template (present) M4Configuration.iE_Extensions mw_m4Configuration_id_M4ReportAmount( + template (present) M4ReportAmountMDT p_m4ReportAmountMDT := ? + ) := { + { + id := id_ExtendedReportIntervalMDT, + criticality := ignore, + extensionValue := { M4ReportAmountMDT := p_m4ReportAmountMDT } + } + } // End of template mw_m4Configuration_id_M4ReportAmount + + template (present) M4ReportAmountMDT mw_m4ReportAmountMDT(template (present) M4ReportAmountMDT p_value := ?) := p_value; + + template (present) M4period mw_m4period(template (present) M4period p_value := ?) := p_value; + + template (present) M5Configuration mw_m5Configuration( + template (present) M5period p_m5period := ?, + template (present) Links_to_log p_m5_links_to_log := ?, + template M5Configuration.iE_Extensions p_iE_Extensions := * + ) := { + m5period := p_m5period, + m5_links_to_log := p_m5_links_to_log, + iE_Extensions := p_iE_Extensions + } // End of template mw_m5Configuration + + template (present) M5Configuration.iE_Extensions mw_m5Configuration_id_M5ReportAmount( + template (present) M5ReportAmountMDT p_m5ReportAmountMDT := ? + ) := { + { + id := id_M5ReportAmount, + criticality := ignore, + extensionValue := { M5ReportAmountMDT := p_m5ReportAmountMDT } + } + } // End of template mw_m5Configuration_id_M5ReportAmount + + template (present) M5ReportAmountMDT mw_m5ReportAmountMDT(template (present) M5ReportAmountMDT p_value := ?) := p_value; + + template (present) M5period mw_m5period(template (present) M5period p_value := ?) := p_value; + + template (present) M6Configuration mw_m6Configuration( + template (present) M6report_Interval p_m6report_Interval := ?, + template (present) Links_to_log p_m6_links_to_log := ?, + template M6Configuration.iE_Extensions p_iE_Extensions := * + ) := { + m6report_Interval := p_m6report_Interval, + m6_links_to_log := p_m6_links_to_log, + iE_Extensions := p_iE_Extensions + } // End of template mw_m6Configuration + + template (present) M6Configuration.iE_Extensions mw_m6Configuration_id_M6ReportAmount( + template (present) M6ReportAmountMDT p_m6ReportAmountMDT := ? + ) := { + { + id := id_M6ReportAmount, + criticality := ignore, + extensionValue := { M6ReportAmountMDT := p_m6ReportAmountMDT } + } + } // End of template mw_m6Configuration_id_M6ReportAmount + + template (present) M6Configuration.iE_Extensions mw_m6Configuration_id_ExcessPacketDelayThresholdConfiguration( + template (present) ExcessPacketDelayThresholdConfiguration p_excessPacketDelayThresholdConfiguration := ? + ) := { + { + id := id_ExcessPacketDelayThresholdConfiguration, + criticality := ignore, + extensionValue := { ExcessPacketDelayThresholdConfiguration := p_excessPacketDelayThresholdConfiguration } + } + } // End of template mw_m6Configuration_id_ExcessPacketDelayThresholdConfiguration + + template (present) M6ReportAmountMDT mw_m6ReportAmountMDT(template (present) M6ReportAmountMDT p_value := ?) := p_value; + + template (present) M6report_Interval mw_m6report_Interval(template (present) M6report_Interval p_value := ?) := p_value; + + template (present) M7Configuration mw_m7Configuration( + template (present) M7period p_m7period := ?, + template (present) Links_to_log p_m7_links_to_log := ?, + template M7Configuration.iE_Extensions p_iE_Extensions := * + ) := { + m7period := p_m7period, + m7_links_to_log := p_m7_links_to_log, + iE_Extensions := p_iE_Extensions + } // End of template mw_m7Configuration + + template (present) M7Configuration.iE_Extensions mw_m7Configuration_id_M7ReportAmount( + template (present) M7ReportAmountMDT p_m7ReportAmountMDT := ? + ) := { + { + id := id_M7ReportAmount, + criticality := ignore, + extensionValue := { M7ReportAmountMDT := p_m7ReportAmountMDT } + } + } // End of template mw_m7Configuration_id_M7ReportAmount + + template (present) M7ReportAmountMDT mw_m7ReportAmountMDT(template (present) M7ReportAmountMDT p_value := ?) := p_value; + + template (present) MDT_Location_Info mw_mDT_Location_Info( + template (present) MDT_Location_Information p_mDT_Location_Information := ?, + template MDT_Location_Info.iE_Extensions p_iE_Extensions := * + ) := { + mDT_Location_Information := p_mDT_Location_Information, + iE_Extensions := p_iE_Extensions + } // End of template mw_mDT_Location_Info + + template (present) N3IWF_ID mw_n3IWF_ID_n3IWF_ID( + template (present) N3IWF_ID.n3IWF_ID p_n3IWF_ID := ? + ) := { + n3IWF_ID := p_n3IWF_ID + } // End of template mw_n3IWF_ID_n3IWF_ID + + template (present) N3IWF_ID mw_n3IWF_ID_choice_Extensions( + template (present) N3IWF_ID.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_n3IWF_ID_choice_Extensions + + template (present) NB_IoT_DefaultPagingDRX mw_nB_IoT_DefaultPagingDRX(template (present) NB_IoT_DefaultPagingDRX p_value := ?) := p_value; + + template (present) NB_IoT_PagingDRX mw_nB_IoT_PagingDRX(template (present) NB_IoT_PagingDRX p_value := ?) := p_value; + + template (present) NB_IoT_Paging_eDRXCycle mw_nB_IoT_Paging_eDRXCycle(template (present) NB_IoT_Paging_eDRXCycle p_value := ?) := p_value; + + template (present) NB_IoT_Paging_TimeWindow mw_nB_IoT_Paging_TimeWindow(template (present) NB_IoT_Paging_TimeWindow p_value := ?) := p_value; + + template (present) NB_IoT_Paging_eDRXInfo mw_nB_IoT_Paging_eDRXInfo( + template (present) NB_IoT_Paging_eDRXCycle p_nB_IoT_Paging_eDRXCycle := ?, + template NB_IoT_Paging_TimeWindow p_nB_IoT_Paging_TimeWindow := *, + template NB_IoT_Paging_eDRXInfo.iE_Extensions p_iE_Extensions := * + ) := { + nB_IoT_Paging_eDRXCycle := p_nB_IoT_Paging_eDRXCycle, + nB_IoT_Paging_TimeWindow := p_nB_IoT_Paging_TimeWindow, + iE_Extensions := p_iE_Extensions + } // End of template mw_nB_IoT_Paging_eDRXInfo + + template (present) NewSecurityContextInd mw_newSecurityContextInd(template (present) NewSecurityContextInd p_value := true_) := p_value; + + template (present) NextPagingAreaScope mw_nextPagingAreaScope(template (present) NextPagingAreaScope p_value := ?) := p_value; + + template (present) NGAPIESupportInformationRequestItem mw_nGAPIESupportInformationRequestItem( + template (present) ProtocolIE_ID p_ngap_ProtocolIE_Id := ?, + template NGAPIESupportInformationRequestItem.iE_Extensions p_iE_Extensions := * + ) := { + ngap_ProtocolIE_Id := p_ngap_ProtocolIE_Id, + iE_Extensions := p_iE_Extensions + } // End of template mw_nGAPIESupportInformationRequestItem + + template (present) NGAPIESupportInformationResponseItem mw_nGAPIESupportInformationResponseItem( + template (present) ProtocolIE_ID p_ngap_ProtocolIE_Id := ?, + template (present) NGAPIESupportInformationResponseItem.ngap_ProtocolIESupportInfo p_ngap_ProtocolIESupportInfo := ?, + template (present) NGAPIESupportInformationResponseItem.ngap_ProtocolIEPresenceInfo p_ngap_ProtocolIEPresenceInfo := ?, + template NGAPIESupportInformationResponseItem.iE_Extensions p_iE_Extensions := * + ) := { + ngap_ProtocolIE_Id := p_ngap_ProtocolIE_Id, + ngap_ProtocolIESupportInfo := p_ngap_ProtocolIESupportInfo, + ngap_ProtocolIEPresenceInfo := p_ngap_ProtocolIEPresenceInfo, + iE_Extensions := p_iE_Extensions + } // End of template mw_nGAPIESupportInformationResponseItem + + template (present) NgENB_ID mw_ngENB_ID_macroNgENB_ID( + template (present) NgENB_ID.macroNgENB_ID p_macroNgENB_ID := ? + ) := { + macroNgENB_ID := p_macroNgENB_ID + } // End of template mw_ngENB_ID_macroNgENB_ID + + template (present) NgENB_ID mw_ngENB_ID_shortMacroNgENB_ID( + template (present) NgENB_ID.shortMacroNgENB_ID p_shortMacroNgENB_ID := ? + ) := { + shortMacroNgENB_ID := p_shortMacroNgENB_ID + } // End of template mw_ngENB_ID_shortMacroNgENB_ID + + template (present) NgENB_ID mw_ngENB_ID_longMacroNgENB_ID( + template (present) NgENB_ID.longMacroNgENB_ID p_longMacroNgENB_ID := ? + ) := { + longMacroNgENB_ID := p_longMacroNgENB_ID + } // End of template mw_ngENB_ID_longMacroNgENB_ID + + template (present) NgENB_ID mw_ngENB_ID_choice_Extensions( + template (present) NgENB_ID.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_ngENB_ID_choice_Extensions + + template (present) NotifySourceNGRANNode mw_notifySourceNGRANNode(template (present) NotifySourceNGRANNode p_value := ?) := p_value; + + template (present) NGRAN_CGI mw_ngENB_ID_nR_CGI( + template (present) NR_CGI p_nR_CGI + ) := { + nR_CGI := p_nR_CGI + } // End of template mw_ngENB_ID_nR_CGI + + template (present) NGRAN_CGI mw_ngENB_ID_eUTRA_CGI( + template (present) EUTRA_CGI p_eUTRA_CGI := ? + ) := { + eUTRA_CGI := p_eUTRA_CGI + } // End of template mw_ngENB_ID_eUTRA_CGI + + template (present) NGRAN_CGI mw_nGRAN_CGI_choice_Extensions( + template (present) NGRAN_CGI.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_nGRAN_CGI_choice_Extensions + + template (present) NGRAN_TNLAssociationToRemoveItem mw_nGRAN_TNLAssociationToRemoveItem( + template (present) CPTransportLayerInformation p_tNLAssociationTransportLayerAddress := ?, + template CPTransportLayerInformation p_tNLAssociationTransportLayerAddressAMF := *, + template NGRAN_TNLAssociationToRemoveItem.iE_Extensions p_iE_Extensions := * + ) := { + tNLAssociationTransportLayerAddress := p_tNLAssociationTransportLayerAddress, + tNLAssociationTransportLayerAddressAMF := p_tNLAssociationTransportLayerAddressAMF, + iE_Extensions := p_iE_Extensions + } // End of template mw_nGRAN_TNLAssociationToRemoveItem + + template (present) NonDynamic5QIDescriptor mw_nonDynamic5QIDescriptor( + template (present) FiveQI p_fiveQI := ?, + template PriorityLevelQos p_priorityLevelQos := *, + template AveragingWindow p_averagingWindow := *, + template MaximumDataBurstVolume p_maximumDataBurstVolume := *, + template NonDynamic5QIDescriptor.iE_Extensions p_iE_Extensions := * + ) := { + fiveQI := p_fiveQI, + priorityLevelQos := p_priorityLevelQos, + averagingWindow := p_averagingWindow, + maximumDataBurstVolume := p_maximumDataBurstVolume, + iE_Extensions := p_iE_Extensions + } // End of template mw_nonDynamic5QIDescriptor + + template (present) NonDynamic5QIDescriptor.iE_Extensions mw_nonDynamic5QIDescriptor_id_CNPacketDelayBudgetDL( + template (present) ExtendedPacketDelayBudget p_extendedPacketDelayBudget := ? + ) := { + { + id := id_CNPacketDelayBudgetDL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template mw_nonDynamic5QIDescriptor_id_CNPacketDelayBudgetDL + + template (present) NonDynamic5QIDescriptor.iE_Extensions mw_nonDynamic5QIDescriptor_id_CNPacketDelayBudgetUL( + template (present) ExtendedPacketDelayBudget p_extendedPacketDelayBudget := ? + ) := { + { + id := id_CNPacketDelayBudgetUL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template mw_nonDynamic5QIDescriptor_id_CNPacketDelayBudgetUL + + template (present) NotificationCause mw_notificationCause(template (present) NotificationCause p_value := ?) := p_value; + + template (present) NotificationControl mw_notificationControl(template (present) NotificationControl p_value := ?) := p_value; + + template (present) NPN_AccessInformation mw_nPN_AccessInformation_pNI_NPN_Access_Information( + template (present) CellCAGList p_pNI_NPN_Access_Information := ? + ) := { + pNI_NPN_Access_Information := p_pNI_NPN_Access_Information + } // End of template mw_nPN_AccessInformation_pNI_NPN_Access_Information + + template (present) NPN_AccessInformation mw_nPN_AccessInformation_choice_Extensions( + template (present) NPN_AccessInformation.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_nPN_AccessInformation_choice_Extensions + + template (present) NPN_MobilityInformation mw_nPN_MobilityInformation_sNPN_MobilityInformation( + template (present) SNPN_MobilityInformation p_sNPN_MobilityInformation := ? + ) := { + sNPN_MobilityInformation := p_sNPN_MobilityInformation + } // End of template mw_nPN_MobilityInformation_sNPN_MobilityInformation + + template (present) NPN_MobilityInformation mw_nPN_MobilityInformation_pNI_NPN_MobilityInformation( + template (present) PNI_NPN_MobilityInformation p_pNI_NPN_MobilityInformation := ? + ) := { + pNI_NPN_MobilityInformation := p_pNI_NPN_MobilityInformation + } // End of template mw_nPN_MobilityInformation_pNI_NPN_MobilityInformation + + template (present) NPN_MobilityInformation mw_nPN_MobilityInformation_choice_Extensions( + template (present) NPN_MobilityInformation.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_nPN_MobilityInformation_choice_Extensions + + template (present) NPN_PagingAssistanceInformation mw_nPN_PagingAssistanceInformation_pNI_NPN_PagingAssistance( + template (present) Allowed_PNI_NPN_List p_pNI_NPN_PagingAssistance := ? + ) := { + pNI_NPN_PagingAssistance := p_pNI_NPN_PagingAssistance + } // End of template mw_nPN_PagingAssistanceInformation_pNI_NPN_PagingAssistance + + template (present) NPN_PagingAssistanceInformation mw_nPN_PagingAssistanceInformation_choice_Extensions( + template (present) NPN_PagingAssistanceInformation.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_nPN_PagingAssistanceInformation_choice_Extensions + + template (present) NPN_Support mw_nPN_Support_sNPN( + template (present) NID p_sNPN := ? + ) := { + sNPN := p_sNPN + } // End of template mw_nPN_Support_sNPN + + template (present) NPN_Support mw_nPN_Support_choice_Extensions( + template (present) NPN_Support.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_nPN_Support_choice_Extensions + + template (present) NR_CGI mw_nR_CGI( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) NRCellIdentity p_nRCellIdentity := ?, + template NR_CGI.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + nRCellIdentity := p_nRCellIdentity, + iE_Extensions := p_iE_Extensions + } // End of template mw_nR_CGI + + template (present) NR_PagingeDRXInformation mw_NR_PagingeDRXInformation( + template (present) NR_Paging_eDRX_Cycle p_nR_paging_eDRX_Cycle := ?, + template NR_Paging_Time_Window p_nR_paging_Time_Window := *, + template NR_PagingeDRXInformation.iE_Extensions p_iE_Extensions := * + ) := { + nR_paging_eDRX_Cycle := p_nR_paging_eDRX_Cycle, + nR_paging_Time_Window := p_nR_paging_Time_Window, + iE_Extensions := p_iE_Extensions + } // End of template mw_NR_PagingeDRXInformation + + template (present) NR_Paging_eDRX_Cycle mw_nR_Paging_eDRX_Cycle(template (present) NR_Paging_eDRX_Cycle p_value := ?) := p_value; + + template (present) NR_Paging_Time_Window mw_nR_Paging_Time_Window(template (present) NR_Paging_Time_Window p_value := ?) := p_value; + + template (present) NRNTNTAIInformation mw_nRNTNTAIInformation( + template (present) PLMNIdentity p_servingPLMN := ?, + template (present) TACListInNRNTN p_tACListInNRNTN := ?, + template TAC p_uELocationDerivedTACInNRNTN := *, + template NRNTNTAIInformation.iE_Extensions p_iE_Extensions := * + ) := { + servingPLMN := p_servingPLMN, + tACListInNRNTN := p_tACListInNRNTN, + uELocationDerivedTACInNRNTN := p_uELocationDerivedTACInNRNTN, + iE_Extensions := p_iE_Extensions + } // End of template mw_nRNTNTAIInformation + + template (present) NRFrequencyBandItem mw_nRFrequencyBandItem( + template (present) NRFrequencyBand p_nr_frequency_band := ?, + template NRFrequencyBandItem.iE_Extension p_iE_Extension := * + ) := { + nr_frequency_band := p_nr_frequency_band, + iE_Extension := p_iE_Extension + } // End of template mw_nRFrequencyBandItem + + template (present) NRFrequencyInfo mw_nRFrequencyInfo( + template (present) NRARFCN p_nrARFCN := ?, + template (present) NRFrequencyBand_List p_frequencyBand_List, + template NRFrequencyInfo.iE_Extension p_iE_Extension := * + ) := { + nrARFCN := p_nrARFCN, + frequencyBand_List := p_frequencyBand_List, + iE_Extension := p_iE_Extension + } // End of template mw_nRFrequencyInfo + + template (present) NRV2XServicesAuthorized mw_nRV2XServicesAuthorized( + template VehicleUE p_vehicleUE := *, + template PedestrianUE p_pedestrianUE := *, + template NRV2XServicesAuthorized.iE_Extensions p_iE_Extensions := * + ) := { + vehicleUE := p_vehicleUE, + pedestrianUE := p_pedestrianUE, + iE_Extensions := p_iE_Extensions + } // End of template mw_nRV2XServicesAuthorized + + template (present) VehicleUE mw_vehicleUE(template (present) VehicleUE p_value := ?) := p_value; + + template (present) PedestrianUE mw_pedestrianUE(template (present) PedestrianUE p_value := ?) := p_value; + + template (present) NRUESidelinkAggregateMaximumBitrate mw_nRUESidelinkAggregateMaximumBitrate( + template (present) BitRate p_uESidelinkAggregateMaximumBitRate := ?, + template NRUESidelinkAggregateMaximumBitrate.iE_Extensions p_iE_Extensions := * + ) := { + uESidelinkAggregateMaximumBitRate := p_uESidelinkAggregateMaximumBitRate, + iE_Extensions := p_iE_Extensions + } // End of template mw_nRUESidelinkAggregateMaximumBitrate + + template (present) OnboardingSupport mw_onboardingSupport(template (present) OnboardingSupport p_value := true_) := p_value; + + template (present) OverloadAction mw_overloadAction(template (present) OverloadAction p_value := ?) := p_value; + + template (present) OverloadResponse mw_overloadResponse_overloadAction( + template (present) OverloadAction p_overloadAction := ? + ) := { + overloadAction := p_overloadAction + } // End of template mw_overloadResponse_overloadAction + + template (present) OverloadResponse mw_overloadResponse_choice_Extensions( + template (present) OverloadResponse.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_overloadResponse_choice_Extensions + + + template (present) OverloadStartNSSAIItem mw_overloadStartNSSAIItem( + template (present) SliceOverloadList p_sliceOverloadList := ?, + template OverloadResponse p_sliceOverloadResponse := *, + template TrafficLoadReductionIndication p_sliceTrafficLoadReductionIndication := *, + template OverloadStartNSSAIItem.iE_Extensions p_iE_Extensions := * + ) := { + sliceOverloadList := p_sliceOverloadList, + sliceOverloadResponse := p_sliceOverloadResponse, + sliceTrafficLoadReductionIndication := p_sliceTrafficLoadReductionIndication, + iE_Extensions := p_iE_Extensions + } // End of template mw_overloadStartNSSAIItem + + template (present) PacketErrorRate mw_PacketErrorRate( + template (present) PacketErrorRate.pERScalar p_pERScalar := ?, + template (present) PacketErrorRate.pERExponent p_pERExponent := ?, + template PacketErrorRate.iE_Extensions p_iE_Extensions := * + ) := { + pERScalar := p_pERScalar, + pERExponent := p_pERExponent, + iE_Extensions := p_iE_Extensions + } // End of template mw_PacketErrorRate + + template (present) PagingAssisDataforCEcapabUE mw_pagingAssisDataforCEcapabUE( + template (present) EUTRA_CGI p_eUTRA_CGI := ?, + template (present) CoverageEnhancementLevel p_coverageEnhancementLevel := ?, + template PagingAssisDataforCEcapabUE.iE_Extensions p_iE_Extensions := * + ) := { + eUTRA_CGI := p_eUTRA_CGI, + coverageEnhancementLevel := p_coverageEnhancementLevel, + iE_Extensions := p_iE_Extensions + } // End of template mw_pagingAssisDataforCEcapabUE + + template (present) PagingAttemptInformation mw_pagingAttemptInformation( + template (present) PagingAttemptCount p_pagingAttemptCount := ?, + template (present) IntendedNumberOfPagingAttempts p_intendedNumberOfPagingAttempts := ?, + template NextPagingAreaScope p_nextPagingAreaScope := *, + template PagingAttemptInformation.iE_Extensions p_iE_Extensions := * + ) := { + pagingAttemptCount := p_pagingAttemptCount, + intendedNumberOfPagingAttempts := p_intendedNumberOfPagingAttempts, + nextPagingAreaScope := p_nextPagingAreaScope, + iE_Extensions := p_iE_Extensions + } // End of template mw_pagingAttemptInformation + + template (present) PagingCause mw_pagingCause(template (present) PagingCause p_value := voice) := p_value; + + template (present) PagingCauseIndicationForVoiceService mw_pagingCauseIndicationForVoiceService(template (present) PagingCauseIndicationForVoiceService p_value := ?) := p_value; + + template (present) PagingDRX mw_pagingDRX(template (present) PagingDRX p_value := ?) := p_value; + + template (present) PagingOrigin mw_pagingOrigin(template (present) PagingOrigin p_value := ?) := p_value; + + template (present) PagingPriority mw_pagingPriority(template (present) PagingPriority p_value := ?) := p_value; + + template (present) PagingProbabilityInformation mw_pagingProbabilityInformation(template (present) PagingProbabilityInformation p_value := ?) := p_value; + + template PathSwitchRequestAcknowledgeTransfer mw_PathSwitchRequestAcknowledgeTransfer( + template UPTransportLayerInformation p_uL_NGU_UP_TNLInformation := *, + template SecurityIndication p_securityIndication := *, + template PathSwitchRequestAcknowledgeTransfer.iE_Extensions p_iE_Extensions := * + ) := { + uL_NGU_UP_TNLInformation := p_uL_NGU_UP_TNLInformation, + securityIndication := p_securityIndication, + iE_Extensions := p_iE_Extensions + } // End of template mw_PathSwitchRequestAcknowledgeTransfer + + template (present) PathSwitchRequestAcknowledgeTransfer.iE_Extensions mw_pathSwitchRequestAcknowledgeTransfer_id_AdditionalNGU_UP_TNLInformation( + template (present) UPTransportLayerInformationPairList p_uPTransportLayerInformationPairList := ? + ) := { + { + id := id_AdditionalNGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformationPairList := p_uPTransportLayerInformationPairList } + } + } // End of template mw_pathSwitchRequestAcknowledgeTransfer_id_AdditionalNGU_UP_TNLInformation + + template (present) PathSwitchRequestAcknowledgeTransfer.iE_Extensions mw_pathSwitchRequestAcknowledgeTransfer_id_RedundantUL_NGU_UP_TNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_RedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_pathSwitchRequestAcknowledgeTransfer_id_RedundantUL_NGU_UP_TNLInformation + + template (present) PathSwitchRequestAcknowledgeTransfer.iE_Extensions mw_pathSwitchRequestAcknowledgeTransfer_id_AdditionalRedundantNGU_UP_TNLInformation( + template (present) UPTransportLayerInformationPairList p_uPTransportLayerInformationPairList := ? + ) := { + { + id := id_AdditionalRedundantNGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformationPairList := p_uPTransportLayerInformationPairList } + } + } // End of template mw_pathSwitchRequestAcknowledgeTransfer_id_AdditionalRedundantNGU_UP_TNLInformation + + template (present) PathSwitchRequestAcknowledgeTransfer.iE_Extensions mw_pathSwitchRequestAcknowledgeTransfer_id_QosFlowParametersList( + template (present) QosFlowParametersList p_qosFlowParametersList := ? + ) := { + { + id := id_QosFlowParametersList, + criticality := ignore, + extensionValue := { QosFlowParametersList := p_qosFlowParametersList } + } + } // End of template mw_pathSwitchRequestAcknowledgeTransfer_id_QosFlowParametersList + + template (present) PathSwitchRequestSetupFailedTransfer mw_pathSwitchRequestSetupFailedTransfer( + template (present) Cause p_cause := ?, + template PathSwitchRequestSetupFailedTransfer.iE_Extensions p_iE_Extensions := * + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_pathSwitchRequestSetupFailedTransfer + + template (present) PathSwitchRequestTransfer mw_pathSwitchRequestTransfer( + template (present) UPTransportLayerInformation p_dL_NGU_UP_TNLInformation := ?, + template (present) QosFlowAcceptedList p_qosFlowAcceptedList := ?, + template DL_NGU_TNLInformationReused p_dL_NGU_TNLInformationReused := *, + template UserPlaneSecurityInformation p_userPlaneSecurityInformation := *, + template PathSwitchRequestTransfer.iE_Extensions p_iE_Extensions := * + ) := { + dL_NGU_UP_TNLInformation := p_dL_NGU_UP_TNLInformation, + dL_NGU_TNLInformationReused := p_dL_NGU_TNLInformationReused, + userPlaneSecurityInformation := p_userPlaneSecurityInformation, + qosFlowAcceptedList := p_qosFlowAcceptedList, + iE_Extensions := p_iE_Extensions + } // End of template mw_pathSwitchRequestTransfer + + template (present) PathSwitchRequestTransfer.iE_Extensions mw_pathSwitchRequestTransferr_id_AdditionalDLQosFlowPerTNLInformation( + template (present) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList := ? + ) := { + { + id := id_AdditionalDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template mw_pathSwitchRequestTransferr_id_AdditionalDLQosFlowPerTNLInformation + + template (present) PathSwitchRequestTransfer.iE_Extensions mw_pathSwitchRequestTransferr_id_RedundantDL_NGU_UP_TNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_RedundantDL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_pathSwitchRequestTransferr_id_RedundantDL_NGU_UP_TNLInformation + + template (present) PathSwitchRequestTransfer.iE_Extensions mw_pathSwitchRequestTransferr_id_RedundantDL_NGU_TNLInformationReused( + template (present) DL_NGU_TNLInformationReused p_dL_NGU_TNLInformationReused := ? + ) := { + { + id := id_RedundantDL_NGU_TNLInformationReused, + criticality := ignore, + extensionValue := { DL_NGU_TNLInformationReused := p_dL_NGU_TNLInformationReused } + } + } // End of template mw_pathSwitchRequestTransferr_id_RedundantDL_NGU_TNLInformationReused + + template (present) PathSwitchRequestTransfer.iE_Extensions mw_pathSwitchRequestTransferr_id_AdditionalRedundantDLQosFlowPerTNLInformation( + template (present) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList := ? + ) := { + { + id := id_AdditionalRedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template mw_pathSwitchRequestTransferr_id_AdditionalRedundantDLQosFlowPerTNLInformation + + template (present) PathSwitchRequestTransfer.iE_Extensions mw_pathSwitchRequestTransferr_id_UsedRSNInformation( + template (present) RedundantPDUSessionInformation p_redundantPDUSessionInformation := ? + ) := { + { + id := id_UsedRSNInformation, + criticality := ignore, + extensionValue := { RedundantPDUSessionInformation := p_redundantPDUSessionInformation } + } + } // End of template mw_pathSwitchRequestTransferr_id_UsedRSNInformation + + template (present) PathSwitchRequestTransfer.iE_Extensions mw_pathSwitchRequestTransferr_id_GlobalRANNodeID( + template (present) GlobalRANNodeID p_globalRANNodeID := ? + ) := { + { + id := id_GlobalRANNodeID, + criticality := ignore, + extensionValue := { GlobalRANNodeID := p_globalRANNodeID } + } + } // End of template mw_pathSwitchRequestTransferr_id_GlobalRANNodeID + + template (present) PathSwitchRequestTransfer.iE_Extensions mw_pathSwitchRequestTransfer_id_MBS_SupportIndicator( + template (present) MBS_SupportIndicator p_mBS_SupportIndicator := ? + ) := { + { + id := id_MBS_SupportIndicator, + criticality := ignore, + extensionValue := { MBS_SupportIndicator := p_mBS_SupportIndicator } + } + } // End of template mw_pathSwitchRequestTransfer_id_MBS_SupportIndicator + + template (present) PathSwitchRequestUnsuccessfulTransfer mw_pathSwitchRequestUnsuccessfulTransfer( + template (present) Cause p_cause := ?, + template PathSwitchRequestUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := * + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_pathSwitchRequestUnsuccessfulTransfer + + template (present) PC5QoSParameters mw_pC5QoSParameters( + template (present) PC5QoSFlowList p_pc5QoSFlowList := ?, + template BitRate p_pc5LinkAggregateBitRates := *, + template PC5QoSParameters.iE_Extensions p_iE_Extensions := * + ) := { + pc5QoSFlowList := p_pc5QoSFlowList, + pc5LinkAggregateBitRates := p_pc5LinkAggregateBitRates, + iE_Extensions := p_iE_Extensions + } // End of template mw_pC5QoSParameters + + template (present) PC5QoSFlowItem mw_pC5QoSFlowItem( + template (present) FiveQI p_pQI := ?, + template PC5FlowBitRates p_pc5FlowBitRates := *, + template Range p_range := *, + template PC5QoSFlowItem.iE_Extensions p_iE_Extensions := * + ) := { + pQI := p_pQI, + pc5FlowBitRates := p_pc5FlowBitRates, + range := p_range, + iE_Extensions := p_iE_Extensions + } // End of template mw_pC5QoSFlowItem + + template (present) PC5FlowBitRates mw_pC5FlowBitRates( + template (present) BitRate p_guaranteedFlowBitRate := ?, + template (present) BitRate p_maximumFlowBitRate := ?, + template PC5FlowBitRates.iE_Extensions p_iE_Extensions := * + ) := { + guaranteedFlowBitRate := p_guaranteedFlowBitRate, + maximumFlowBitRate := p_maximumFlowBitRate, + iE_Extensions := p_iE_Extensions + } // End of template mw_pC5FlowBitRates + + template (present) PrivacyIndicator mw_privacyIndicator(template (present) PrivacyIndicator p_value := ?) := p_value; + + template (present) PDUSessionAggregateMaximumBitRate mw_pDUSessionAggregateMaximumBitRate( + template (present) BitRate p_pDUSessionAggregateMaximumBitRateDL := ?, + template (present) BitRate p_pDUSessionAggregateMaximumBitRateUL := ?, + template PDUSessionAggregateMaximumBitRate.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionAggregateMaximumBitRateDL := p_pDUSessionAggregateMaximumBitRateDL, + pDUSessionAggregateMaximumBitRateUL := p_pDUSessionAggregateMaximumBitRateUL, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionAggregateMaximumBitRate + + template (present) PDUSessionResourceAdmittedItem mw_pDUSessionResourceAdmittedItem( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceAdmittedItem.handoverRequestAcknowledgeTransfer p_handoverRequestAcknowledgeTransfer := ?, + template PDUSessionResourceAdmittedItem.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + handoverRequestAcknowledgeTransfer := p_handoverRequestAcknowledgeTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceAdmittedItem + + template (present) PDUSessionResourceFailedToModifyItemModCfm mw_pDUSessionResourceFailedToModifyItemModCfm( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceFailedToModifyItemModCfm.pDUSessionResourceModifyIndicationUnsuccessfulTransfer p_pDUSessionResourceModifyIndicationUnsuccessfulTransfer := ?, + template PDUSessionResourceFailedToModifyItemModCfm.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceModifyIndicationUnsuccessfulTransfer := p_pDUSessionResourceModifyIndicationUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceFailedToModifyItemModCfm + + template (present) PDUSessionResourceFailedToModifyItemModRes mw_pDUSessionResourceFailedToModifyItemModRes( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceFailedToModifyItemModRes.pDUSessionResourceModifyUnsuccessfulTransfer p_pDUSessionResourceModifyUnsuccessfulTransfer := ?, + template PDUSessionResourceFailedToModifyItemModRes.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceModifyUnsuccessfulTransfer := p_pDUSessionResourceModifyUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceFailedToModifyItemModRes + + template (present) PDUSessionResourceFailedToResumeItemRESReq mw_pDUSessionResourceFailedToResumeItemRESReq( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) Cause p_cause := ?, + template PDUSessionResourceFailedToResumeItemRESReq.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceFailedToResumeItemRESReq + + template (present) PDUSessionResourceFailedToResumeItemRESRes mw_pDUSessionResourceFailedToResumeItemRESRes( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) Cause p_cause := ?, + template PDUSessionResourceFailedToResumeItemRESRes.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceFailedToResumeItemRESRes + + template (present) PDUSessionResourceFailedToSetupItemCxtFail mw_pDUSessionResourceFailedToSetupItemCxtFail( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceFailedToSetupItemCxtFail.pDUSessionResourceSetupUnsuccessfulTransfer p_pDUSessionResourceSetupUnsuccessfulTransfer := ?, + template PDUSessionResourceFailedToSetupItemCxtFail.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceSetupUnsuccessfulTransfer := p_pDUSessionResourceSetupUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceFailedToSetupItemCxtFail + + template (present) PDUSessionResourceFailedToSetupItemCxtRes mw_pDUSessionResourceFailedToSetupItemCxtRes( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceFailedToSetupItemCxtRes.pDUSessionResourceSetupUnsuccessfulTransfer p_pDUSessionResourceSetupUnsuccessfulTransfer := ?, + template PDUSessionResourceFailedToSetupItemCxtRes.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceSetupUnsuccessfulTransfer := p_pDUSessionResourceSetupUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceFailedToSetupItemCxtRes + + template (present) PDUSessionResourceFailedToSetupItemHOAck mw_pDUSessionResourceFailedToSetupItemHOAck( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceFailedToSetupItemHOAck.handoverResourceAllocationUnsuccessfulTransfer p_handoverResourceAllocationUnsuccessfulTransfer := ?, + template PDUSessionResourceFailedToSetupItemHOAck.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + handoverResourceAllocationUnsuccessfulTransfer := p_handoverResourceAllocationUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceFailedToSetupItemHOAck + + template (present) PDUSessionResourceFailedToSetupItemPSReq mw_pDUSessionResourceFailedToSetupItemPSReq( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceFailedToSetupItemPSReq.pathSwitchRequestSetupFailedTransfer p_pathSwitchRequestSetupFailedTransfer := ?, + template PDUSessionResourceFailedToSetupItemPSReq.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pathSwitchRequestSetupFailedTransfer := p_pathSwitchRequestSetupFailedTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceFailedToSetupItemPSReq + + template (present) PDUSessionResourceFailedToSetupItemSURes mw_pDUSessionResourceFailedToSetupItemSURes( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceFailedToSetupItemSURes.pDUSessionResourceSetupUnsuccessfulTransfer p_pDUSessionResourceSetupUnsuccessfulTransfer := ?, + template PDUSessionResourceFailedToSetupItemSURes.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceSetupUnsuccessfulTransfer := p_pDUSessionResourceSetupUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceFailedToSetupItemSURes + + template (present) PDUSessionResourceHandoverItem mw_pDUSessionResourceHandoverItem( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceHandoverItem.handoverCommandTransfer p_handoverCommandTransfer := ?, + template PDUSessionResourceHandoverItem.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + handoverCommandTransfer := p_handoverCommandTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceHandoverItem + + template (present) PDUSessionResourceInformationItem mw_pDUSessionResourceInformationItem( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) QosFlowInformationList p_qosFlowInformationList := ?, + template DRBsToQosFlowsMappingList p_dRBsToQosFlowsMappingList := *, + template PDUSessionResourceInformationItem.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + qosFlowInformationList := p_qosFlowInformationList, + dRBsToQosFlowsMappingList := p_dRBsToQosFlowsMappingList, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceInformationItem + + template (present) PDUSessionResourceItemCxtRelCpl mw_pDUSessionResourceItemCxtRelCpl( + template (present) PDUSessionID p_pDUSessionID := ?, + template PDUSessionResourceItemCxtRelCpl.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceItemCxtRelCpl + + template (present) PDUSessionResourceItemCxtRelCpl.iE_Extensions mw_pDUSessionResourceItemCxtRelCpl_id_PDUSessionResourceReleaseResponseTransfer( + template (present) PDUSessionResourceReleaseResponseTransfer_OCTET_STRING p_pDUSessionResourceReleaseResponseTransfer_OCTET_STRING := ? + ) := { + { + id := id_PDUSessionResourceReleaseResponseTransfer, + criticality := ignore, + extensionValue := { PDUSessionResourceReleaseResponseTransfer_OCTET_STRING := p_pDUSessionResourceReleaseResponseTransfer_OCTET_STRING } + } + } // End of template mw_pDUSessionResourceItemCxtRelCpl_id_PDUSessionResourceReleaseResponseTransfer + + template (present) PDUSessionResourceItemCxtRelReq mw_pDUSessionResourceItemCxtRelReq( + template (present) PDUSessionID p_pDUSessionID := ?, + template PDUSessionResourceItemCxtRelReq.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceItemCxtRelReq + + template (present) PDUSessionResourceItemHORqd mw_pDUSessionResourceItemHORqd( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceItemHORqd.handoverRequiredTransfer p_handoverRequiredTransfer := ?, + template PDUSessionResourceItemHORqd.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + handoverRequiredTransfer := p_handoverRequiredTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceItemHORqd + + template (present) PDUSessionResourceModifyConfirmTransfer mw_pDUSessionResourceModifyConfirmTransfer( + template (present) QosFlowModifyConfirmList p_qosFlowModifyConfirmList := ?, + template (present) UPTransportLayerInformation p_uLNGU_UP_TNLInformation := ?, + template UPTransportLayerInformationPairList p_additionalNG_UUPTNLInformation := *, + template QosFlowListWithCause p_qosFlowFailedToModifyList := *, + template PDUSessionResourceModifyConfirmTransfer.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowModifyConfirmList := p_qosFlowModifyConfirmList, + uLNGU_UP_TNLInformation := p_uLNGU_UP_TNLInformation, + additionalNG_UUPTNLInformation := p_additionalNG_UUPTNLInformation, + qosFlowFailedToModifyList := p_qosFlowFailedToModifyList, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceModifyConfirmTransfer + + template (present) PDUSessionResourceModifyConfirmTransfer.iE_Extensions mw_pDUSessionResourceModifyConfirmTransfer_id_RedundantUL_NGU_UP_TNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_RedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_pDUSessionResourceModifyConfirmTransferr_id_RedundantUL_NGU_UP_TNLInformation + + template (present) PDUSessionResourceModifyConfirmTransfer.iE_Extensions mw_pDUSessionResourceModifyConfirmTransfer_id_AdditionalRedundantNGU_UP_TNLInformation( + template (present) UPTransportLayerInformationPairList p_uPTransportLayerInformationPairList := ? + ) := { + { + id := id_AdditionalRedundantNGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformationPairList := p_uPTransportLayerInformationPairList } + } + } // End of template mw_pDUSessionResourceModifyConfirmTransferr_id_AdditionalRedundantNGU_UP_TNLInformation + + template (present) PDUSessionResourceModifyIndicationUnsuccessfulTransfer mw_pDUSessionResourceModifyIndicationUnsuccessfulTransfer( + template (present) Cause p_cause := ?, + template PDUSessionResourceModifyIndicationUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := * + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceModifyIndicationUnsuccessfulTransfer + + template (present) PDUSessionResourceModifyRequestTransfer mw_pDUSessionResourceModifyRequestTransfer( + template PDUSessionResourceModifyRequestTransfer.protocolIEs p_protocolIEs := ? + ) := { + protocolIEs := p_protocolIEs + } // End of template mw_pDUSessionResourceModifyRequestTransfer + + template (present) PDUSessionResourceModifyRequestTransfer.protocolIEs mw_pDUSessionResourceModifyRequestTransfer_options( + template (present) UL_NGU_UP_TNLModifyList p_uL_NGU_UP_TNLModifyList := ?, + template (present) QosFlowAddOrModifyRequestList p_qosFlowAddOrModifyRequestList := ? + ) := { + { + id := id_UL_NGU_UP_TNLModifyList, + criticality := reject, + value_ := { UL_NGU_UP_TNLModifyList := p_uL_NGU_UP_TNLModifyList } + }, + { + id := id_QosFlowAddOrModifyRequestList, + criticality := reject, + value_ := { QosFlowAddOrModifyRequestList := p_qosFlowAddOrModifyRequestList } + } + } // End of template mw_pDUSessionResourceModifyRequestTransfer_options + + template PDUSessionResourceModifyResponseTransfer mw_pDUSessionResourceModifyResponseTransfer( + template UPTransportLayerInformation p_dL_NGU_UP_TNLInformation := *, + template UPTransportLayerInformation p_uL_NGU_UP_TNLInformation := *, + template QosFlowAddOrModifyResponseList p_qosFlowAddOrModifyResponseList := *, + template QosFlowPerTNLInformationList p_additionalDLQosFlowPerTNLInformation := *, + template QosFlowListWithCause p_qosFlowFailedToAddOrModifyList := *, + template PDUSessionResourceModifyResponseTransfer.iE_Extensions p_iE_Extensions := * + ) := { + dL_NGU_UP_TNLInformation := p_dL_NGU_UP_TNLInformation, + uL_NGU_UP_TNLInformation := p_uL_NGU_UP_TNLInformation, + qosFlowAddOrModifyResponseList := p_qosFlowAddOrModifyResponseList, + additionalDLQosFlowPerTNLInformation := p_additionalDLQosFlowPerTNLInformation, + qosFlowFailedToAddOrModifyList := p_qosFlowFailedToAddOrModifyList, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceModifyResponseTransfer + + template (present) PDUSessionResourceModifyResponseTransfer.iE_Extensions mw_pDUSessionResourceModifyResponseTransfer_id_AdditionalNGU_UP_TNLInformation( + template (present) UPTransportLayerInformationPairList p_uPTransportLayerInformationPairList := ? + ) := { + { + id := id_AdditionalNGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformationPairList := p_uPTransportLayerInformationPairList } + } + } // End of template mw_pDUSessionResourceModifyResponseTransfer_id_AdditionalNGU_UP_TNLInformation + + template (present) PDUSessionResourceModifyResponseTransfer.iE_Extensions mw_pDUSessionResourceModifyResponseTransfer_id_RedundantDL_NGU_UP_TNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_RedundantDL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_pDUSessionResourceModifyResponseTransfer_id_RedundantDL_NGU_UP_TNLInformation + + template (present) PDUSessionResourceModifyResponseTransfer.iE_Extensions mw_pDUSessionResourceModifyResponseTransfer_id_RedundantUL_NGU_UP_TNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_RedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_pDUSessionResourceModifyResponseTransfer_id_RedundantUL_NGU_UP_TNLInformation + + template (present) PDUSessionResourceModifyResponseTransfer.iE_Extensions mw_pDUSessionResourceModifyResponseTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation( + template (present) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList := ? + ) := { + { + id := id_AdditionalRedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template mw_pDUSessionResourceModifyResponseTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation + + template (present) PDUSessionResourceModifyResponseTransfer.iE_Extensions mw_pDUSessionResourceModifyResponseTransfer_id_AdditionalRedundantNGU_UP_TNLInformation( + template (present) UPTransportLayerInformationPairList p_uPTransportLayerInformationPairList := ? + ) := { + { + id := id_AdditionalRedundantNGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformationPairList := p_uPTransportLayerInformationPairList } + } + } // End of template mw_pDUSessionResourceModifyResponseTransfer_id_AdditionalRedundantNGU_UP_TNLInformation + + template (present) PDUSessionResourceModifyResponseTransfer.iE_Extensions mw_pDUSessionResourceModifyResponseTransfer_id_SecondaryRATUsageInformation( + template (present) SecondaryRATUsageInformation p_secondaryRATUsageInformation := ? + ) := { + { + id := id_SecondaryRATUsageInformation, + criticality := ignore, + extensionValue := { SecondaryRATUsageInformation := p_secondaryRATUsageInformation } + } + } // End of template mw_pDUSessionResourceModifyResponseTransfer_id_SecondaryRATUsageInformation + + template (present) PDUSessionResourceModifyResponseTransfer.iE_Extensions mw_pDUSessionResourceModifyResponseTransfer_id_MBS_SupportIndicator( + template (present) MBS_SupportIndicator p_mBS_SupportIndicator := ? + ) := { + { + id := id_MBS_SupportIndicator, + criticality := ignore, + extensionValue := { MBS_SupportIndicator := p_mBS_SupportIndicator } + } + } // End of template mw_pDUSessionResourceModifyResponseTransfer_id_MBS_SupportIndicator + + template (present) PDUSessionResourceModifyResponseTransfer.iE_Extensions mw_pDUSessionResourceModifyResponseTransfer_id_MBSSessionSetuporModifyResponseList( + template (present) MBSSessionSetupResponseList p_mBSSessionSetupResponseList := ? + ) := { + { + id := id_MBSSessionSetuporModifyResponseList, + criticality := ignore, + extensionValue := { MBSSessionSetupResponseList := p_mBSSessionSetupResponseList } + } + } // End of template mw_pDUSessionResourceModifyResponseTransfer_id_MBSSessionSetuporModifyResponseList + + template (present) PDUSessionResourceModifyResponseTransfer.iE_Extensions mw_pDUSessionResourceModifyResponseTransfer_id_MBSSessionFailedtoSetuporModifyList( + template (present) MBSSessionFailedtoSetupList p_mBSSessionFailedtoSetupList := ? + ) := { + { + id := id_MBSSessionFailedtoSetuporModifyList, + criticality := ignore, + extensionValue := { MBSSessionFailedtoSetupList := p_mBSSessionFailedtoSetupList } + } + } // End of template mw_pDUSessionResourceModifyResponseTransfer_id_MBSSessionFailedtoSetuporModifyList + + template (present) PDUSessionResourceModifyIndicationTransfer mw_pDUSessionResourceModifyIndicationTransfer( + template (present) QosFlowPerTNLInformation p_dLQosFlowPerTNLInformation := ?, + template QosFlowPerTNLInformationList p_additionalDLQosFlowPerTNLInformation := *, + template PDUSessionResourceModifyIndicationTransfer.iE_Extensions p_iE_Extensions := * + ) := { + dLQosFlowPerTNLInformation := p_dLQosFlowPerTNLInformation, + additionalDLQosFlowPerTNLInformation := p_additionalDLQosFlowPerTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceModifyIndicationTransfer + + template (present) PDUSessionResourceModifyIndicationTransfer.iE_Extensions mw_pDUSessionResourceModifyIndicationTransfer_id_SecondaryRATUsageInformation( + template (present) SecondaryRATUsageInformation p_secondaryRATUsageInformation := ? + ) := { + { + id := id_SecondaryRATUsageInformation, + criticality := ignore, + extensionValue := { SecondaryRATUsageInformation := p_secondaryRATUsageInformation } + } + } // End of template mw_pDUSessionResourceModifyIndicationTransfer_id_SecondaryRATUsageInformation + + template (present) PDUSessionResourceModifyIndicationTransfer.iE_Extensions mw_pDUSessionResourceModifyIndicationTransfer_id_SecurityResult( + template (present) SecurityResult p_securityResult := ? + ) := { + { + id := id_SecurityResult, + criticality := ignore, + extensionValue := { SecurityResult := p_securityResult } + } + } // End of template mw_pDUSessionResourceModifyIndicationTransfer_id_SecurityResult + + template (present) PDUSessionResourceModifyIndicationTransfer.iE_Extensions mw_pDUSessionResourceModifyIndicationTransfer_id_RedundantDLQosFlowPerTNLInformation( + template (present) QosFlowPerTNLInformation p_qosFlowPerTNLInformation := ? + ) := { + { + id := id_RedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformation := p_qosFlowPerTNLInformation } + } + } // End of template mw_pDUSessionResourceModifyIndicationTransfer_id_RedundantDLQosFlowPerTNLInformation + + template (present) PDUSessionResourceModifyIndicationTransfer.iE_Extensions mw_pDUSessionResourceModifyIndicationTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation( + template (present) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList := ? + ) := { + { + id := id_AdditionalRedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template mw_pDUSessionResourceModifyIndicationTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation + + template (present) PDUSessionResourceModifyIndicationTransfer.iE_Extensions mw_pDUSessionResourceModifyIndicationTransfer_id_GlobalRANNodeID( + template (present) GlobalRANNodeID p_globalRANNodeID := ? + ) := { + { + id := id_GlobalRANNodeID, + criticality := ignore, + extensionValue := { GlobalRANNodeID := p_globalRANNodeID } + } + } // End of template mw_pDUSessionResourceModifyIndicationTransfer_id_GlobalRANNodeID + + template (present) PDUSessionResourceModifyItemModCfm mw_pDUSessionResourceModifyItemModCfm( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceModifyItemModCfm.pDUSessionResourceModifyConfirmTransfer p_pDUSessionResourceModifyConfirmTransfer := ?, + template PDUSessionResourceModifyItemModCfm.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceModifyConfirmTransfer := p_pDUSessionResourceModifyConfirmTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceModifyItemModCfm + + template (present) PDUSessionResourceModifyItemModInd mw_pDUSessionResourceModifyItemModInd( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceModifyItemModInd.pDUSessionResourceModifyIndicationTransfer p_pDUSessionResourceModifyIndicationTransfer := ?, + template PDUSessionResourceModifyItemModInd.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceModifyIndicationTransfer := p_pDUSessionResourceModifyIndicationTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceModifyItemModInd + + template (present) PDUSessionResourceModifyItemModReq mw_pDUSessionResourceModifyItemModReq( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceModifyItemModReq.pDUSessionResourceModifyRequestTransfer p_pDUSessionResourceModifyRequestTransfer := ?, + template NAS_PDU p_nAS_PDU := *, + template PDUSessionResourceModifyItemModReq.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + nAS_PDU := p_nAS_PDU, + pDUSessionResourceModifyRequestTransfer := p_pDUSessionResourceModifyRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceModifyItemModReq + + template (present) PDUSessionResourceModifyItemModReq.iE_Extensions mw_pDUSessionResourceModifyItemModReq_id_S_NSSAI( + template (present) S_NSSAI p_s_nSSAI := ? + ) := { + { + id := id_S_NSSAI, + criticality := reject, + extensionValue := { S_NSSAI := p_s_nSSAI } + } + } // End of template mw_pDUSessionResourceModifyItemModReq_id_S_NSSAI + + template (present) PDUSessionResourceModifyItemModReq.iE_Extensions mw_pDUSessionResourceModifyItemModReq_id_PduSessionExpectedUEActivityBehaviour( + template (present) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour := ? + ) := { + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template mw_pDUSessionResourceModifyItemModReq_id_PduSessionExpectedUEActivityBehaviour + + template (present) PDUSessionResourceModifyItemModReq.iE_Extensions mw_pDUSessionResourceModifyItemModReq_full( + template (present) S_NSSAI p_s_nSSAI := ?, + template (present) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour := ? + ) := { + { + id := id_S_NSSAI, + criticality := reject, + extensionValue := { S_NSSAI := p_s_nSSAI } + }, + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template mw_pDUSessionResourceModifyItemModReq_full + + template (present) PDUSessionResourceModifyItemModRes mw_pDUSessionResourceModifyItemModRes( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceModifyItemModRes.pDUSessionResourceModifyResponseTransfer p_pDUSessionResourceModifyResponseTransfer := ?, + template PDUSessionResourceModifyItemModRes.iE_Extensions p_iE_Extensions := * + ) := { + + pDUSessionID := p_pDUSessionID, + pDUSessionResourceModifyResponseTransfer := p_pDUSessionResourceModifyResponseTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceModifyItemModRes + + template (present) PDUSessionResourceModifyUnsuccessfulTransfer mw_pDUSessionResourceModifyUnsuccessfulTransfer( + template (present) Cause p_cause := ?, + template CriticalityDiagnostics p_criticalityDiagnostics := *, + template PDUSessionResourceModifyUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := * + ) := { + cause := p_cause, + criticalityDiagnostics := p_criticalityDiagnostics, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceModifyUnsuccessfulTransfer + + template (present) PDUSessionResourceNotifyItem mw_pDUSessionResourceNotifyItem( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceNotifyItem.pDUSessionResourceNotifyTransfer p_pDUSessionResourceNotifyTransfer, + template PDUSessionResourceNotifyItem.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceNotifyTransfer := p_pDUSessionResourceNotifyTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceNotifyItem + + template (present) PDUSessionResourceNotifyReleasedTransfer mw_pDUSessionResourceNotifyReleasedTransfer( + template (present) Cause p_cause := ?, + template PDUSessionResourceNotifyReleasedTransfer.iE_Extensions p_iE_Extensions := * + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceNotifyReleasedTransfer + + template (present) PDUSessionResourceNotifyReleasedTransfer.iE_Extensions mw_pDUSessionResourceNotifyReleasedTransfer_id_SecondaryRATUsageInformation( + template (present) SecondaryRATUsageInformation p_secondaryRATUsageInformation := ? + ) := { + { + id := id_SecondaryRATUsageInformation, + criticality := ignore, + extensionValue := { SecondaryRATUsageInformation := p_secondaryRATUsageInformation } + } + } // End of template mw_pDUSessionResourceNotifyReleasedTransfer_id_SecondaryRATUsageInformation + + template PDUSessionResourceNotifyTransfer mw_pDUSessionResourceNotifyTransfer( + template QosFlowNotifyList p_qosFlowNotifyList := *, + template QosFlowListWithCause p_qosFlowReleasedList := *, + template PDUSessionResourceNotifyTransfer.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowNotifyList := p_qosFlowNotifyList, + qosFlowReleasedList := p_qosFlowReleasedList, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceNotifyTransfer + + template (present) PDUSessionResourceNotifyTransfer.iE_Extensions mw_pDUSessionResourceNotifyTransfer_id_SecondaryRATUsageInformation( + template (present) SecondaryRATUsageInformation p_secondaryRATUsageInformation := ? + ) := { + { + id := id_SecondaryRATUsageInformation, + criticality := ignore, + extensionValue := { SecondaryRATUsageInformation := p_secondaryRATUsageInformation } + } + } // End of template mw_pDUSessionResourceNotifyReleasedTransfer_id_SecondaryRATUsageInformation + + template (present) PDUSessionResourceNotifyTransfer.iE_Extensions mw_pDUSessionResourceNotifyTransfer_id_QosFlowFeedbackList( + template (present) QosFlowFeedbackList p_qosFlowFeedbackList := ? + ) := { + { + id := id_QosFlowFeedbackList, + criticality := ignore, + extensionValue := { QosFlowFeedbackList := p_qosFlowFeedbackList } + } + } // End of template mw_pDUSessionResourceNotifyReleasedTransfer_id_QosFlowFeedbackList + + template (present) PDUSessionResourceReleaseCommandTransfer mw_pDUSessionResourceReleaseCommandTransfer( + template (present) Cause p_cause := ?, + template PDUSessionResourceReleaseCommandTransfer.iE_Extensions p_iE_Extensions := * + ) := { + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceReleaseCommandTransfer + + template (present) PDUSessionResourceReleasedItemNot mw_pDUSessionResourceReleasedItemNot( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceReleasedItemNot.pDUSessionResourceNotifyReleasedTransfer p_pDUSessionResourceNotifyReleasedTransfer := ?, + template PDUSessionResourceReleasedItemNot.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceNotifyReleasedTransfer := p_pDUSessionResourceNotifyReleasedTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceReleasedItemNot + + template (present) PDUSessionResourceReleasedItemPSAck mw_pDUSessionResourceReleasedItemPSAck( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceReleasedItemPSAck.pathSwitchRequestUnsuccessfulTransfer p_pathSwitchRequestUnsuccessfulTransfer := ?, + template PDUSessionResourceReleasedItemPSAck.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pathSwitchRequestUnsuccessfulTransfer := p_pathSwitchRequestUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceReleasedItemPSAck + + template (present) PDUSessionResourceReleasedItemPSFail mw_pDUSessionResourceReleasedItemPSFail( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceReleasedItemPSFail.pathSwitchRequestUnsuccessfulTransfer p_pathSwitchRequestUnsuccessfulTransfer := ?, + template PDUSessionResourceReleasedItemPSFail.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pathSwitchRequestUnsuccessfulTransfer := p_pathSwitchRequestUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceReleasedItemPSFail + + template (present) PDUSessionResourceReleasedItemRelRes mw_pDUSessionResourceReleasedItemRelRes( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceReleasedItemRelRes.pDUSessionResourceReleaseResponseTransfer p_pDUSessionResourceReleaseResponseTransfer := ?, + template PDUSessionResourceReleasedItemRelRes.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceReleaseResponseTransfer := p_pDUSessionResourceReleaseResponseTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceReleasedItemRelRes + + template PDUSessionResourceReleaseResponseTransfer mw_pDUSessionResourceReleaseResponseTransfer( + template PDUSessionResourceReleaseResponseTransfer.iE_Extensions p_iE_Extensions := * + ) := { + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceReleaseResponseTransfer + + template (present) PDUSessionResourceNotifyTransfer.iE_Extensions mw_pDUSessionResourceReleaseResponseTransfer_id_SecondaryRATUsageInformation( + template (present) SecondaryRATUsageInformation p_secondaryRATUsageInformation := ? + ) := { + { + id := id_SecondaryRATUsageInformation, + criticality := ignore, + extensionValue := { SecondaryRATUsageInformation := p_secondaryRATUsageInformation } + } + } // End of template mw_pDUSessionResourceReleaseResponseTransfer_id_SecondaryRATUsageInformation + + template (present) PDUSessionResourceResumeItemRESReq mw_pDUSessionResourceResumeItemRESReq( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceResumeItemRESReq.uEContextResumeRequestTransfer p_uEContextResumeRequestTransfer := ?, + template PDUSessionResourceResumeItemRESReq.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + uEContextResumeRequestTransfer := p_uEContextResumeRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceResumeItemRESReq + + template (present) PDUSessionResourceResumeItemRESRes mw_pDUSessionResourceResumeItemRESRes( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceResumeItemRESRes.uEContextResumeResponseTransfer p_uEContextResumeResponseTransfer := ?, + template PDUSessionResourceResumeItemRESRes.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + uEContextResumeResponseTransfer := p_uEContextResumeResponseTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceResumeItemRESRes + + template (present) PDUSessionResourceSecondaryRATUsageItem mw_pPDUSessionResourceSecondaryRATUsageItem( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceSecondaryRATUsageItem.secondaryRATDataUsageReportTransfer p_secondaryRATDataUsageReportTransfer := ?, + template PDUSessionResourceSecondaryRATUsageItem.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + secondaryRATDataUsageReportTransfer := p_secondaryRATDataUsageReportTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pPDUSessionResourceSecondaryRATUsageItem + + template (present) PDUSessionResourceSetupItemCxtReq mw_pDUSessionResourceSetupItemCxtReq( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) S_NSSAI p_s_NSSAI := ?, + template (present) PDUSessionResourceSetupItemCxtReq.pDUSessionResourceSetupRequestTransfer p_pDUSessionResourceSetupRequestTransfer := ?, + template NAS_PDU p_nAS_PDU := *, + template PDUSessionResourceSetupItemCxtReq.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + nAS_PDU := p_nAS_PDU, + s_NSSAI := p_s_NSSAI, + pDUSessionResourceSetupRequestTransfer := p_pDUSessionResourceSetupRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceSetupItemCxtReq + + template (present) PDUSessionResourceSetupItemCxtReq.iE_Extensions mw_pDUSessionResourceSetupItemCxtReq_id_PduSessionExpectedUEActivityBehaviour( + template (present) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour := ? + ) := { + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template mw_pDUSessionResourceSetupItemCxtReq_id_PduSessionExpectedUEActivityBehaviour + + template (present) PDUSessionResourceSetupItemCxtRes mw_pDUSessionResourceSetupItemCxtRes( + template (present) PDUSessionID p_pDUSessionID, + template (present) PDUSessionResourceSetupItemCxtRes.pDUSessionResourceSetupResponseTransfer p_pDUSessionResourceSetupResponseTransfer := ?, + template PDUSessionResourceSetupItemCxtRes.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceSetupResponseTransfer := p_pDUSessionResourceSetupResponseTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceSetupItemCxtRes + + template (present) PDUSessionResourceSetupItemHOReq mw_pDUSessionResourceSetupItemHOReq( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) S_NSSAI p_s_NSSAI := ?, + template (present) PDUSessionResourceSetupItemHOReq.handoverRequestTransfer p_handoverRequestTransfer := ?, + template PDUSessionResourceSetupItemHOReq.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + s_NSSAI := p_s_NSSAI, + handoverRequestTransfer := p_handoverRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceSetupItemHOReq + + template (present) PDUSessionResourceSetupItemHOReq.iE_Extensions mw_pDUSessionResourceSetupItemHOReq_id_PduSessionExpectedUEActivityBehaviour( + template (present) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour := ? + ) := { + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template mw_pDUSessionResourceSetupItemCxtReq_id_PduSessionExpectedUEActivityBehaviour + + template (present) PDUSessionResourceSetupItemSUReq mw_pDUSessionResourceSetupItemSUReq( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) S_NSSAI p_s_NSSAI := ?, + template (present) PDUSessionResourceSetupItemSUReq.pDUSessionResourceSetupRequestTransfer p_pDUSessionResourceSetupRequestTransfer := ?, + template NAS_PDU p_pDUSessionNAS_PDU := *, + template PDUSessionResourceSetupItemSUReq.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionNAS_PDU := p_pDUSessionNAS_PDU, + s_NSSAI := p_s_NSSAI, + pDUSessionResourceSetupRequestTransfer := p_pDUSessionResourceSetupRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceSetupItemSUReq + + template (present) PDUSessionResourceSetupItemSUReq.iE_Extensions mw_pDUSessionResourceSetupItemSUReq_id_PduSessionExpectedUEActivityBehaviour( + template (present) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour := ? + ) := { + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template mw_pDUSessionResourceSetupItemSUReq_id_PduSessionExpectedUEActivityBehaviour + + template (present) PDUSessionResourceSetupItemSURes mw_pDUSessionResourceSetupItemSURes( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceSetupItemSURes.pDUSessionResourceSetupResponseTransfer p_pDUSessionResourceSetupResponseTransfer := ?, + template PDUSessionResourceSetupItemSURes.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceSetupResponseTransfer := p_pDUSessionResourceSetupResponseTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceSetupItemSURes + + template (present) PDUSessionResourceSetupRequestTransfer mw_pDUSessionResourceSetupRequestTransfer( + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs p_protocolIEs := ? + ) := { + protocolIEs := p_protocolIEs + } // End of template mw_pDUSessionResourceSetupRequestTransfer + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_mandatories( + template (present) PDUSessionType p_pDUSessionType := ?, + template (present) QosFlowSetupRequestList p_qosFlowSetupRequestList := ?, + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_PDUSessionType, + criticality := reject, + value_ := { PDUSessionType := p_pDUSessionType } + }, + { + id := id_QosFlowSetupRequestList, + criticality := reject, + value_ := { QosFlowSetupRequestList := p_qosFlowSetupRequestList } + }, + { + id := id_UL_NGU_UP_TNLInformation, + criticality := reject, + value_ := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_mandatories + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_handover( + template (present) PDUSessionType p_pDUSessionType := ?, + template (present) QosFlowSetupRequestList p_qosFlowSetupRequestList := ?, + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ?, + template (present) DataForwardingNotPossible p_dataForwardingNotPossible := ?, + template (present) SecurityIndication p_securityIndication := ? + ) := { + { + id := id_PDUSessionType, + criticality := reject, + value_ := { PDUSessionType := p_pDUSessionType } + }, + { + id := id_QosFlowSetupRequestList, + criticality := reject, + value_ := { QosFlowSetupRequestList := p_qosFlowSetupRequestList } + }, + { + id := id_UL_NGU_UP_TNLInformation, + criticality := reject, + value_ := { UPTransportLayerInformation := p_uPTransportLayerInformation } + }, + { + id := id_DataForwardingNotPossible, + criticality := reject, + value_ := { DataForwardingNotPossible := p_dataForwardingNotPossible } + }, + { + id := id_SecurityIndication, + criticality := reject, + value_ := { SecurityIndication := p_securityIndication } + } + + } // End of template mw_pDUSessionResourceSetupRequestTransfer_optionals + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_PDUSessionAggregateMaximumBitRate( + template (present) PDUSessionAggregateMaximumBitRate p_pDUSessionAggregateMaximumBitRate := ? + ) := { + { + id := id_PDUSessionAggregateMaximumBitRate, + criticality := reject, + value_ := { PDUSessionAggregateMaximumBitRate := p_pDUSessionAggregateMaximumBitRate } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_PDUSessionAggregateMaximumBitRate + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_UL_NGU_UP_TNLInformation( + template (present) UPTransportLayerInformationList p_uPTransportLayerInformationList := ? + ) := { + { + id := id_UL_NGU_UP_TNLInformation, + criticality := reject, + value_ := { UPTransportLayerInformationList := p_uPTransportLayerInformationList } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_UL_NGU_UP_TNLInformation + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_DataForwardingNotPossible( + template (present) DataForwardingNotPossible p_dataForwardingNotPossible := ? + ) := { + { + id := id_DataForwardingNotPossible, + criticality := reject, + value_ := { DataForwardingNotPossible := p_dataForwardingNotPossible } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_DataForwardingNotPossible + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_PDUSessionType( + template (present) PDUSessionType p_pDUSessionType := ? + ) := { + { + id := id_PDUSessionType, + criticality := reject, + value_ := { PDUSessionType := p_pDUSessionType } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_PDUSessionType + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_SecurityIndication( + template (present) SecurityIndication p_securityIndication := ? + ) := { + { + id := id_SecurityIndication, + criticality := reject, + value_ := { SecurityIndication := p_securityIndication } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_SecurityIndication + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_NetworkInstance( + template (present) NetworkInstance p_networkInstance := ? + ) := { + { + id := id_NetworkInstance, + criticality := reject, + value_ := { NetworkInstance := p_networkInstance } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_NetworkInstance + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_QosFlowSetupRequestList( + template (present) QosFlowSetupRequestList p_qosFlowSetupRequestList := ? + ) := { + { + id := id_QosFlowSetupRequestList, + criticality := reject, + value_ := { QosFlowSetupRequestList := p_qosFlowSetupRequestList } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_QosFlowSetupRequestList + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_CommonNetworkInstance( + template (present) CommonNetworkInstance p_commonNetworkInstance := ? + ) := { + { + id := id_CommonNetworkInstance, + criticality := ignore, + value_ := { CommonNetworkInstance := p_commonNetworkInstance } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_CommonNetworkInstance + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_DirectForwardingPathAvailability( + template (present) DirectForwardingPathAvailability p_directForwardingPathAvailability := ? + ) := { + { + id := id_DirectForwardingPathAvailability, + criticality := ignore, + value_ := { DirectForwardingPathAvailability := p_directForwardingPathAvailability } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_DirectForwardingPathAvailability + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_RedundantUL_NGU_UP_TNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_RedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + value_ := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_RedundantUL_NGU_UP_TNLInformation + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_AdditionalRedundantUL_NGU_UP_TNLInformation( + template (present) UPTransportLayerInformationList p_uPTransportLayerInformationList := ? + ) := { + { + id := id_AdditionalRedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + value_ := { UPTransportLayerInformationList := p_uPTransportLayerInformationList } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_AdditionalRedundantUL_NGU_UP_TNLInformation + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_RedundantCommonNetworkInstancen( + template (present) CommonNetworkInstance p_commonNetworkInstance := ? + ) := { + { + id := id_RedundantCommonNetworkInstance, + criticality := ignore, + value_ := { CommonNetworkInstance := p_commonNetworkInstance } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_RedundantCommonNetworkInstance + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_RedundantPDUSessionInformation( + template (present) RedundantPDUSessionInformation p_redundantPDUSessionInformation := ? + ) := { + { + id := id_RedundantPDUSessionInformation, + criticality := ignore, + value_ := { RedundantPDUSessionInformation := p_redundantPDUSessionInformation } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_RedundantPDUSessionInformation + + template (present) PDUSessionResourceSetupRequestTransfer.protocolIEs mw_pDUSessionResourceSetupRequestTransfer_id_MBSSessionSetupRequestList( + template (present) MBSSessionSetupRequestList p_mBSSessionSetupRequestList := ? + ) := { + { + id := id_MBSSessionSetupRequestList, + criticality := ignore, + value_ := { MBSSessionSetupRequestList := p_mBSSessionSetupRequestList } + } + } // End of template mw_pDUSessionResourceSetupRequestTransfer_id_MBSSessionSetupRequestList + + template (present) PDUSessionResourceSetupResponseTransfer mw_pDUSessionResourceSetupResponseTransfer( + template (present) QosFlowPerTNLInformation p_dLQosFlowPerTNLInformation := ?, + template QosFlowPerTNLInformationList p_additionalDLQosFlowPerTNLInformation := *, + template SecurityResult p_securityResult := *, + template QosFlowListWithCause p_qosFlowFailedToSetupList := *, + template PDUSessionResourceSetupResponseTransfer.iE_Extensions p_iE_Extensions := * + ) := { + dLQosFlowPerTNLInformation := p_dLQosFlowPerTNLInformation, + additionalDLQosFlowPerTNLInformation := p_additionalDLQosFlowPerTNLInformation, + securityResult := p_securityResult, + qosFlowFailedToSetupList := p_qosFlowFailedToSetupList, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceSetupResponseTransfer + + template (present) PDUSessionResourceSetupResponseTransfer.iE_Extensions mw_pDUSessionResourceSetupResponseTransfer_id_RedundantDLQosFlowPerTNLInformation( + template (present) QosFlowPerTNLInformation p_qosFlowPerTNLInformation := ? + ) := { + { + id := id_RedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformation := p_qosFlowPerTNLInformation } + } + } // End of template mw_pDUSessionResourceSetupResponseTransfer_id_RedundantDLQosFlowPerTNLInformation + + template (present) PDUSessionResourceSetupResponseTransfer.iE_Extensions mw_pDUSessionResourceSetupResponseTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation( + template (present) QosFlowPerTNLInformationList p_qosFlowPerTNLInformationList := ? + ) := { + { + id := id_AdditionalRedundantDLQosFlowPerTNLInformation, + criticality := ignore, + extensionValue := { QosFlowPerTNLInformationList := p_qosFlowPerTNLInformationList } + } + } // End of template mw_pDUSessionResourceSetupResponseTransfer_id_AdditionalRedundantDLQosFlowPerTNLInformation + + template (present) PDUSessionResourceSetupResponseTransfer.iE_Extensions mw_pDUSessionResourceSetupResponseTransfer_id_UsedRSNInformation( + template (present) RedundantPDUSessionInformation p_redundantPDUSessionInformation := ? + ) := { + { + id := id_UsedRSNInformation, + criticality := ignore, + extensionValue := { RedundantPDUSessionInformation := p_redundantPDUSessionInformation } + } + } // End of template mw_pDUSessionResourceSetupResponseTransfer_id_UsedRSNInformation + + template (present) PDUSessionResourceSetupResponseTransfer.iE_Extensions mw_pDUSessionResourceSetupResponseTransfer_id_GlobalRANNodeID( + template (present) GlobalRANNodeID p_globalRANNodeID := ? + ) := { + { + id := id_GlobalRANNodeID, + criticality := ignore, + extensionValue := { GlobalRANNodeID := p_globalRANNodeID } + } + } // End of template mw_pDUSessionResourceSetupResponseTransfer_id_GlobalRANNodeID + + template (present) PDUSessionResourceSetupResponseTransfer.iE_Extensions mw_pDUSessionResourceSetupResponseTransfer_id_MBS_SupportIndicator( + template (present) MBS_SupportIndicator p_mBS_SupportIndicator := ? + ) := { + { + id := id_MBS_SupportIndicator, + criticality := ignore, + extensionValue := { MBS_SupportIndicator := p_mBS_SupportIndicator } + } + } // End of template mw_pDUSessionResourceSetupResponseTransfer_id_MBS_SupportIndicator + + template (present) PDUSessionResourceSetupResponseTransfer.iE_Extensions mw_pDUSessionResourceSetupResponseTransfer_id_MBSSessionSetupResponseList( + template (present) MBSSessionSetupResponseList p_mBSSessionSetupResponseList := ? + ) := { + { + id := id_MBSSessionSetupResponseList, + criticality := ignore, + extensionValue := { MBSSessionSetupResponseList := p_mBSSessionSetupResponseList } + } + } // End of template mw_pDUSessionResourceSetupResponseTransfer_id_MBSSessionSetupResponseList + + template (present) PDUSessionResourceSetupResponseTransfer.iE_Extensions mw_pDUSessionResourceSetupResponseTransfer_id_MBSSessionFailedtoSetupList( + template (present) MBSSessionFailedtoSetupList p_mBSSessionFailedtoSetupList := ? + ) := { + { + id := id_MBSSessionFailedtoSetupList, + criticality := ignore, + extensionValue := { MBSSessionFailedtoSetupList := p_mBSSessionFailedtoSetupList } + } + } // End of template mw_pDUSessionResourceSetupResponseTransfer_id_MBSSessionFailedtoSetupList + + template (present) PDUSessionResourceSetupUnsuccessfulTransfer mw_pDUSessionResourceSetupUnsuccessfulTransfer( + template (present) Cause p_cause := ?, + template CriticalityDiagnostics p_criticalityDiagnostics := *, + template PDUSessionResourceSetupUnsuccessfulTransfer.iE_Extensions p_iE_Extensions := * + ) := { + cause := p_cause, + criticalityDiagnostics := p_criticalityDiagnostics, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceSetupUnsuccessfulTransfer + + template (present) PDUSessionResourceSuspendItemSUSReq mw_pDUSessionResourceSuspendItemSUSReq( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceSuspendItemSUSReq.uEContextSuspendRequestTransfer p_uEContextSuspendRequestTransfer := ?, + template PDUSessionResourceSuspendItemSUSReq.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + uEContextSuspendRequestTransfer := p_uEContextSuspendRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceSuspendItemSUSReq + + template (present) PDUSessionResourceSwitchedItem mw_pDUSessionResourceSwitchedItem( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceSwitchedItem.pathSwitchRequestAcknowledgeTransfer p_pathSwitchRequestAcknowledgeTransfer := ?, + template PDUSessionResourceSwitchedItem.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pathSwitchRequestAcknowledgeTransfer := p_pathSwitchRequestAcknowledgeTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceSwitchedItem + + template (present) PDUSessionResourceSwitchedItem.iE_Extensions mw_pDUSessionResourceSwitchedItemw_id_PduSessionExpectedUEActivityBehaviour( + template (present) ExpectedUEActivityBehaviour p_expectedUEActivityBehaviour := ? + ) := { + { + id := id_PduSessionExpectedUEActivityBehaviour, + criticality := ignore, + extensionValue := { ExpectedUEActivityBehaviour := p_expectedUEActivityBehaviour } + } + } // End of template mw_pDUSessionResourceSwitchedItemw_id_PduSessionExpectedUEActivityBehaviour + + template (present) PDUSessionResourceToBeSwitchedDLItem mw_pDUSessionResourceToBeSwitchedDLItem( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceToBeSwitchedDLItem.pathSwitchRequestTransfer p_pathSwitchRequestTransfer := ?, + template PDUSessionResourceToBeSwitchedDLItem.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pathSwitchRequestTransfer := p_pathSwitchRequestTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceToBeSwitchedDLItem + + template (present) PDUSessionResourceToReleaseItemHOCmd mw_pDUSessionResourceToReleaseItemHOCmd( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceToReleaseItemHOCmd.handoverPreparationUnsuccessfulTransfer p_handoverPreparationUnsuccessfulTransfer := ?, + template PDUSessionResourceToReleaseItemHOCmd.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + handoverPreparationUnsuccessfulTransfer := p_handoverPreparationUnsuccessfulTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceToReleaseItemHOCmd + + template (present) PDUSessionResourceToReleaseItemRelCmd mw_pDUSessionResourceToReleaseItemRelCmd( + template (present) PDUSessionID p_pDUSessionID := ?, + template (present) PDUSessionResourceToReleaseItemRelCmd.pDUSessionResourceReleaseCommandTransfer p_pDUSessionResourceReleaseCommandTransfer := ?, + template PDUSessionResourceToReleaseItemRelCmd.iE_Extensions p_iE_Extensions := * + ) := { + pDUSessionID := p_pDUSessionID, + pDUSessionResourceReleaseCommandTransfer := p_pDUSessionResourceReleaseCommandTransfer, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionResourceToReleaseItemRelCmd + + template (present) PDUSessionType mw_pDUSessionType(template (present) PDUSessionType p_value := ipv4) := p_value; + + template (present) PDUSessionUsageReport mw_pDUSessionUsageReport( + template (present) PDUSessionUsageReport.rATType p_rATType := ?, + template (present) VolumeTimedReportList p_pDUSessionTimedReportList := ?, + template PDUSessionUsageReport.iE_Extensions p_iE_Extensions := * + ) := { + rATType := p_rATType, + pDUSessionTimedReportList := p_pDUSessionTimedReportList, + iE_Extensions := p_iE_Extensions + } // End of template mw_pDUSessionUsageReport + + template (present) PEIPSassistanceInformation mw_pEIPSassistanceInformation( + template (present)CNsubgroupID p_cNsubgroupID := ?, + template PEIPSassistanceInformation.iE_Extensions p_iE_Extensions := * + ) := { + cNsubgroupID := p_cNsubgroupID, + iE_Extensions := p_iE_Extensions + } // End of template mw_pEIPSassistanceInformation + + template (present) PLMNAreaBasedQMC mw_pLMNAreaBasedQMC( + template (present) PLMNListforQMC p_plmnListforQMC := ?, + template PLMNAreaBasedQMC.iE_Extensions p_iE_Extensions := * + ) := { + plmnListforQMC := p_plmnListforQMC, + iE_Extensions := p_iE_Extensions + } // End of template mw_pLMNAreaBasedQMC + + template (present) PLMNSupportItem mw_pLMNSupportItem( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) SliceSupportList p_sliceSupportList := ?, + template PLMNSupportItem.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + sliceSupportList := p_sliceSupportList, + iE_Extensions := p_iE_Extensions + } // End of template mw_pLMNSupportItem + + template (present) PLMNSupportItem.iE_Extensions mw_pLMNSupportItemw_id_NPN_Support( + template (present) NPN_Support p_nPN_Support := ? + ) := { + { + id := id_NPN_Support, + criticality := reject, + extensionValue := { NPN_Support := p_nPN_Support } + } + } // End of template mw_pLMNSupportItemw_id_NPN_Support + + template (present) PLMNSupportItem.iE_Extensions mw_pLMNSupportItemw_id_ExtendedSliceSupportList( + template (present) ExtendedSliceSupportList p_extendedSliceSupportList := ? + ) := { + { + id := id_ExtendedSliceSupportList, + criticality := reject, + extensionValue := { ExtendedSliceSupportList := p_extendedSliceSupportList } + } + } // End of template mw_pLMNSupportItemw_id_ExtendedSliceSupportList + + template (present) PLMNSupportItem.iE_Extensions mw_pLMNSupportItemw_id_OnboardingSupport( + template (present) OnboardingSupport p_onboardingSupport := ? + ) := { + { + id := id_OnboardingSupport, + criticality := ignore, + extensionValue := { OnboardingSupport := p_onboardingSupport } + } + } // End of template mw_pLMNSupportItemw_id_OnboardingSupport + + template (present) PNI_NPN_MobilityInformation mw_pNI_NPN_MobilityInformation( + template (present) Allowed_PNI_NPN_List p_allowed_PNI_NPI_List := ?, + template PNI_NPN_MobilityInformation.iE_Extensions p_iE_Extensions := * + ) := { + allowed_PNI_NPI_List := p_allowed_PNI_NPI_List, + iE_Extensions := p_iE_Extensions + } // End of template mw_pNI_NPN_MobilityInformation + + template (present) Pre_emptionCapability mw_pre_emptionCapability(template (present) Pre_emptionCapability p_value := ?) := p_value; + + template (present) Pre_emptionVulnerability mw_pre_emptionVulnerability(template (present) Pre_emptionVulnerability p_value := ?) := p_value; + + template (present) PWSFailedCellIDList mw_pWSFailedCellIDList_nR_CGI_PWSFailedList( + template (present) NR_CGIList p_nR_CGI_PWSFailedList := ? + ) := { + nR_CGI_PWSFailedList := p_nR_CGI_PWSFailedList + } // End of template mw_pWSFailedCellIDList_nR_CGI_PWSFailedList + + template (present) PWSFailedCellIDList mw_pWSFailedCellIDList_eUTRA_CGI_PWSFailedList( + template (present) EUTRA_CGIList p_eUTRA_CGI_PWSFailedList := ? + ) := { + eUTRA_CGI_PWSFailedList := p_eUTRA_CGI_PWSFailedList + } // End of template mw_pWSFailedCellIDList_eUTRA_CGI_PWSFailedList + + template (present) PWSFailedCellIDList mw_pWSFailedCellIDList_choice_Extensions( + template (present) PWSFailedCellIDList.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_pWSFailedCellIDList_choice_Extensions + + template (present) QMCConfigInfo mw_qMCConfigInfo( + template (present) UEAppLayerMeasInfoList p_uEAppLayerMeasInfoList := ?, + template QMCConfigInfo.iE_Extensions p_iE_Extensions := * + ) := { + uEAppLayerMeasInfoList := p_uEAppLayerMeasInfoList, + iE_Extensions := p_iE_Extensions + } // End of template mw_qMCConfigInfo + + template (present) QMCDeactivation mw_qMCDeactivation( + template (present) QoEReferenceList p_qoEReferenceList := ?, + template QMCDeactivation.iE_Extensions p_iE_Extensions := * + ) := { + qoEReferenceList := p_qoEReferenceList, + iE_Extensions := p_iE_Extensions + } // End of template mw_qMCDeactivation + + template (present) QosCharacteristics mw_qosCharacteristics_nonDynamic5QI( + template (present) NonDynamic5QIDescriptor p_nonDynamic5QI := ? + ) := { + nonDynamic5QI := p_nonDynamic5QI + } // End of template mw_qosCharacteristics_nonDynamic5QI + + template (present) QosCharacteristics mw_qosCharacteristics_dynamic5QI( + template (present) Dynamic5QIDescriptor p_dynamic5QI := ? + ) := { + dynamic5QI := p_dynamic5QI + } // End of template mw_qosCharacteristics_dynamic5QI + + template (present) QosCharacteristics mw_qosCharacteristics_choice_Extensions( + template (present) QosCharacteristics.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_qosCharacteristics_choice_Extensions + + template (present) QosFlowAcceptedItem mw_qosFlowAcceptedItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template QosFlowAcceptedItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template + + template (present) QosFlowAcceptedItem.iE_Extensions mw_pLMNSupportItemw_id_CurrentQoSParaSetIndex( + template (present) AlternativeQoSParaSetIndex p_alternativeQoSParaSetIndex := ? + ) := { + { + id := id_CurrentQoSParaSetIndex, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetIndex := p_alternativeQoSParaSetIndex } + } + } // End of template mw_pLMNSupportItemw_id_ExtendedSliceSupportList + + template (present) QosFlowAddOrModifyRequestItem mw_qosFlowAddOrModifyRequestItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template QosFlowLevelQosParameters p_qosFlowLevelQosParameters := *, + template E_RAB_ID p_e_RAB_ID := *, + template QosFlowAddOrModifyRequestItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + qosFlowLevelQosParameters := p_qosFlowLevelQosParameters, + e_RAB_ID := p_e_RAB_ID, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowAddOrModifyRequestItem + + template (present) QosFlowAddOrModifyRequestItem.iE_Extensions mw_qosFlowAddOrModifyRequestItemw_id_TSCTrafficCharacteristics( + template (present) TSCTrafficCharacteristics p_tSCTrafficCharacteristics := ? + ) := { + { + id := id_TSCTrafficCharacteristics, + criticality := ignore, + extensionValue := { TSCTrafficCharacteristics := p_tSCTrafficCharacteristics } + } + } // End of template mw_qosFlowAddOrModifyRequestItemw_id_TSCTrafficCharacteristics + + template (present) QosFlowAddOrModifyRequestItem.iE_Extensions mw_qosFlowAddOrModifyRequestItemw_id_RedundantQosFlowIndicator( + template (present) RedundantQosFlowIndicator p_redundantQosFlowIndicator := ? + ) := { + { + id := id_RedundantQosFlowIndicator, + criticality := ignore, + extensionValue := { RedundantQosFlowIndicator := p_redundantQosFlowIndicator } + } + } // End of template mw_qosFlowAddOrModifyRequestItemw_id_RedundantQosFlowIndicator + + template (present) QosFlowAddOrModifyRequestItem.iE_Extensions mw_qosFlowAddOrModifyRequestItemw_full( + template (present) TSCTrafficCharacteristics p_tSCTrafficCharacteristics := ?, + template (present) RedundantQosFlowIndicator p_redundantQosFlowIndicator := ? + ) := { + { + id := id_TSCTrafficCharacteristics, + criticality := ignore, + extensionValue := { TSCTrafficCharacteristics := p_tSCTrafficCharacteristics } + }, + { + id := id_RedundantQosFlowIndicator, + criticality := ignore, + extensionValue := { RedundantQosFlowIndicator := p_redundantQosFlowIndicator } + } + } // End of template mw_qosFlowAddOrModifyRequestItemw_full + + template (present) QosFlowAddOrModifyResponseItem mw_qosFlowAddOrModifyResponseItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template QosFlowAddOrModifyResponseItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowAddOrModifyResponseItem + + template (present) QosFlowAddOrModifyResponseItem.iE_Extensions mw_qosFlowAddOrModifyResponseItemw_id_CurrentQoSParaSetIndex( + template (present) AlternativeQoSParaSetIndex p_alternativeQoSParaSetIndex := ? + ) := { + { + id := id_CurrentQoSParaSetIndex, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetIndex := p_alternativeQoSParaSetIndex } + } + } // End of template mw_qosFlowAddOrModifyResponseItemw_id_CurrentQoSParaSetIndex + + template (present) QosFlowFeedbackItem mw_qosFlowFeedbackItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template UpdateFeedback p_updateFeedback := *, + template ExtendedPacketDelayBudget p_cNpacketDelayBudgetDL := *, + template ExtendedPacketDelayBudget p_cNpacketDelayBudgetUL := *, + template QosFlowFeedbackItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + updateFeedback := p_updateFeedback, + cNpacketDelayBudgetDL := p_cNpacketDelayBudgetDL, + cNpacketDelayBudgetUL := p_cNpacketDelayBudgetUL, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowFeedbackItem + + template (present) QosFlowInformationItem mw_qosFlowInformationItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template DLForwarding p_dLForwarding := *, + template QosFlowInformationItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + dLForwarding := p_dLForwarding, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowInformationItem + + template (present) QosFlowInformationItem.iE_Extensions mw_qosFlowInformationItemw_id_ULForwarding( + template (present) ULForwarding p_uLForwarding := ? + ) := { + { + id := id_ULForwarding, + criticality := ignore, + extensionValue := { ULForwarding := p_uLForwarding } + } + } // End of template mw_qosFlowInformationItemw_id_ULForwarding + + template (present) QosFlowInformationItem.iE_Extensions mw_qosFlowInformationItemw_id_SourceTNLAddrInfo( + template (present) TransportLayerAddress p_transportLayerAddress := ? + ) := { + { + id := id_SourceTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress } + } + } // End of template mw_qosFlowInformationItemw_id_SourceTNLAddrInfo + + template (present) QosFlowInformationItem.iE_Extensions mw_qosFlowInformationItemw_id_SourceNodeTNLAddrInfo( + template (present) TransportLayerAddress p_transportLayerAddress := ? + ) := { + { + id := id_SourceNodeTNLAddrInfo, + criticality := ignore, + extensionValue := { TransportLayerAddress := p_transportLayerAddress } + } + } // End of template mw_qosFlowInformationItemw_id_SourceNodeTNLAddrInfo + + template (present) QosFlowLevelQosParameters mw_qosFlowLevelQosParameters( + template (present) QosCharacteristics p_qosCharacteristics := ?, + template (present) AllocationAndRetentionPriority p_allocationAndRetentionPriority := ?, + template GBR_QosInformation p_gBR_QosInformation := *, + template ReflectiveQosAttribute p_reflectiveQosAttribute := *, + template AdditionalQosFlowInformation p_additionalQosFlowInformation := *, + template QosFlowLevelQosParameters.iE_Extensions p_iE_Extensions := * + ) := { + qosCharacteristics := p_qosCharacteristics, + allocationAndRetentionPriority := p_allocationAndRetentionPriority, + gBR_QosInformation := p_gBR_QosInformation, + reflectiveQosAttribute := p_reflectiveQosAttribute, + additionalQosFlowInformation := p_additionalQosFlowInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowLevelQosParameters + + template (present) QosFlowLevelQosParameters.iE_Extensions mw_qosFlowLevelQosParameters_id_QosMonitoringRequest( + template (present) QosMonitoringRequest p_qosMonitoringRequest := ? + ) := { + { + id := id_QosMonitoringRequest, + criticality := ignore, + extensionValue := { QosMonitoringRequest := p_qosMonitoringRequest } + } + } // End of template mw_qosFlowLevelQosParameters_id_QosMonitoringRequest + + template (present) QosFlowLevelQosParameters.iE_Extensions mw_qosFlowLevelQosParameters_id_QosMonitoringReportingFrequency( + template (present) QosMonitoringReportingFrequency p_qosMonitoringReportingFrequency := ? + ) := { + { + id := id_QosMonitoringReportingFrequency, + criticality := ignore, + extensionValue := { QosMonitoringReportingFrequency := p_qosMonitoringReportingFrequency } + } + } // End of template mw_qosFlowLevelQosParameters_id_QosMonitoringReportingFrequency + + template (present) QosFlowLevelQosParameters.iE_Extensions mw_qosFlowLevelQosParameters_full( + template (present) QosMonitoringRequest p_qosMonitoringRequest := ?, + template (present) QosMonitoringReportingFrequency p_qosMonitoringReportingFrequency := ? + ) := { + { + id := id_QosMonitoringRequest, + criticality := ignore, + extensionValue := { QosMonitoringRequest := p_qosMonitoringRequest } + }, + { + id := id_QosMonitoringReportingFrequency, + criticality := ignore, + extensionValue := { QosMonitoringReportingFrequency := p_qosMonitoringReportingFrequency } + } + } // End of template mw_qosFlowLevelQosParameters_full + + template (present) QosMonitoringRequest mw_qosMonitoringRequest(template (present) QosMonitoringRequest p_value := ?) := p_value; + + template (present) QosFlowWithCauseItem mw_qosFlowWithCauseItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template (present) Cause p_cause := ?, + template QosFlowWithCauseItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowWithCauseItem + + template (present) QosFlowModifyConfirmItem mw_qosFlowModifyConfirmItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template QosFlowModifyConfirmItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowModifyConfirmItem + + template (present) QosFlowNotifyItem mw_qosFlowNotifyItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template (present) NotificationCause p_notificationCause := ?, + template QosFlowNotifyItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + notificationCause := p_notificationCause, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowNotifyItem + + template (present) QosFlowNotifyItem.iE_Extensions mw_qosFlowNotifyItemw_id_CurrentQoSParaSetIndex( + template (present) AlternativeQoSParaSetNotifyIndex p_alternativeQoSParaSetNotifyIndex := ? + ) := { + { + id := id_CurrentQoSParaSetIndex, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetNotifyIndex := p_alternativeQoSParaSetNotifyIndex } + } + } // End of template mw_qosFlowNotifyItemw_id_CurrentQoSParaSetIndex + + template (present) QosFlowParametersItem mw_qosFlowParametersItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template AlternativeQoSParaSetList p_alternativeQoSParaSetList := *, + template QosFlowParametersItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + alternativeQoSParaSetList := p_alternativeQoSParaSetList, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowParametersItem + + template (present) QosFlowParametersItem.iE_Extensions mw_qosFlowParametersItemw_id_CNPacketDelayBudgetDL( + template (present) ExtendedPacketDelayBudget p_extendedPacketDelayBudget := ? + ) := { + { + id := id_CNPacketDelayBudgetDL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template mw_qosFlowParametersItemw_id_CNPacketDelayBudgetDL + + template (present) QosFlowParametersItem.iE_Extensions mw_qosFlowParametersItemw_id_CNPacketDelayBudgetUL( + template (present) ExtendedPacketDelayBudget p_extendedPacketDelayBudget := ? + ) := { + { + id := id_CNPacketDelayBudgetUL, + criticality := ignore, + extensionValue := { ExtendedPacketDelayBudget := p_extendedPacketDelayBudget } + } + } // End of template mw_qosFlowParametersItemw_id_CNPacketDelayBudgetUL + + template (present) QosFlowParametersItem.iE_Extensions mw_qosFlowParametersItemw_id_BurstArrivalTimeDownlink( + template (present) BurstArrivalTime p_burstArrivalTime := ? + ) := { + { + id := id_BurstArrivalTimeDownlink, + criticality := ignore, + extensionValue := { BurstArrivalTime := p_burstArrivalTime } + } + } // End of template mw_qosFlowParametersItemw_id_BurstArrivalTimeDownlink + + template (present) QosFlowPerTNLInformation mw_qosFlowPerTNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ?, + template (present) AssociatedQosFlowList p_associatedQosFlowList := ?, + template QosFlowPerTNLInformation.iE_Extensions p_iE_Extensions := * + ) := { + uPTransportLayerInformation := p_uPTransportLayerInformation, + associatedQosFlowList := p_associatedQosFlowList, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowPerTNLInformation + + template (present) QosFlowPerTNLInformationItem mw_qosFlowPerTNLInformationItem( + template (present) QosFlowPerTNLInformation p_qosFlowPerTNLInformation := ?, + template QosFlowPerTNLInformationItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowPerTNLInformation := p_qosFlowPerTNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowPerTNLInformationItem + + template (present) QosFlowSetupRequestItem mw_qosFlowSetupRequestItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template (present) QosFlowLevelQosParameters p_qosFlowLevelQosParameters := ?, + template E_RAB_ID p_e_RAB_ID := *, + template QosFlowSetupRequestItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + qosFlowLevelQosParameters := p_qosFlowLevelQosParameters, + e_RAB_ID := p_e_RAB_ID, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowSetupRequestItem + + template (present) QosFlowSetupRequestItem.iE_Extensions mw_qosFlowSetupRequestItemw_id_TSCTrafficCharacteristics( + template (present) TSCTrafficCharacteristics p_tSCTrafficCharacteristics := ? + ) := { + { + id := id_TSCTrafficCharacteristics, + criticality := ignore, + extensionValue := { TSCTrafficCharacteristics := p_tSCTrafficCharacteristics } + } + } // End of template mw_qosFlowSetupRequestItemw_id_TSCTrafficCharacteristics + + template (present) QosFlowSetupRequestItem.iE_Extensions mw_qosFlowSetupRequestItemw_id_RedundantQosFlowIndicator( + template (present) RedundantQosFlowIndicator p_redundantQosFlowIndicator := ? + ) := { + { + id := id_RedundantQosFlowIndicator, + criticality := ignore, + extensionValue := { RedundantQosFlowIndicator := p_redundantQosFlowIndicator } + } + } // End of template mw_qosFlowSetupRequestItemw_id_RedundantQosFlowIndicator + + template (present) QosFlowSetupRequestItem.iE_Extensions mw_qosFlowSetupRequestItemw_full( + template (present) TSCTrafficCharacteristics p_tSCTrafficCharacteristics := ?, + template (present) RedundantQosFlowIndicator p_redundantQosFlowIndicator := ? + ) := { + { + id := id_TSCTrafficCharacteristics, + criticality := ignore, + extensionValue := { TSCTrafficCharacteristics := p_tSCTrafficCharacteristics } + }, + { + id := id_RedundantQosFlowIndicator, + criticality := ignore, + extensionValue := { RedundantQosFlowIndicator := p_redundantQosFlowIndicator } + } + } // End of template mw_qosFlowSetupRequestItemw_full + + template (present) QosFlowItemWithDataForwarding mw_qosFlowItemWithDataForwarding( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template DataForwardingAccepted p_dataForwardingAccepted := *, + template QosFlowItemWithDataForwarding.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + dataForwardingAccepted := p_dataForwardingAccepted, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowItemWithDataForwarding + + template (present) QosFlowItemWithDataForwarding.iE_Extensions mw_qosFlowItemWithDataForwarding_id_CurrentQoSParaSetIndex( + template (present) AlternativeQoSParaSetIndex p_alternativeQoSParaSetIndex := ? + ) := { + { + id := id_CurrentQoSParaSetIndex, + criticality := ignore, + extensionValue := { AlternativeQoSParaSetIndex := p_alternativeQoSParaSetIndex } + } + } // End of template mw_qosFlowItemWithDataForwarding_id_CurrentQoSParaSetIndex + + template (present) QosFlowToBeForwardedItem mw_qosFlowToBeForwardedItem( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template QosFlowToBeForwardedItem.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + iE_Extensions := p_iE_Extensions + } // End of template mw_qosFlowToBeForwardedItem + + template (present) QoSFlowsUsageReport_Item mw_qoSFlowsUsageReport_Item( + template (present) QosFlowIdentifier p_qosFlowIdentifier := ?, + template (present) QoSFlowsUsageReport_Item.rATType p_rATType := ?, + template (present) VolumeTimedReportList p_qoSFlowsTimedReportList := ?, + template QoSFlowsUsageReport_Item.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowIdentifier := p_qosFlowIdentifier, + rATType := p_rATType, + qoSFlowsTimedReportList := p_qoSFlowsTimedReportList, + iE_Extensions := p_iE_Extensions + } // End of template mw_qoSFlowsUsageReport_Item + + + template (present) Range mw_range(template (present) Range p_value := ?) := p_value; + + template (present) RANStatusTransfer_TransparentContainer mw_rANStatusTransfer_TransparentContainer( + template (present) DRBsSubjectToStatusTransferList p_dRBsSubjectToStatusTransferList := ?, + template RANStatusTransfer_TransparentContainer.iE_Extensions p_iE_Extensions := * + ) := { + dRBsSubjectToStatusTransferList := p_dRBsSubjectToStatusTransferList, + iE_Extensions := p_iE_Extensions + } // End of template mw_rANStatusTransfer_TransparentContainer + + template (present) RAT_Information mw_rAT_Information(template (present) RAT_Information p_value := ?) := p_value; + + template (present) RATRestrictions_Item mw_rATRestrictions_Item( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) RATRestrictionInformation p_rATRestrictionInformation := ?, + template RATRestrictions_Item.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + rATRestrictionInformation := p_rATRestrictionInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_rATRestrictions_Item + + template (present) RATRestrictions_Item.iE_Extensions mw_rATRestrictions_Item_id_ExtendedRATRestrictionInformation( + template (present) ExtendedRATRestrictionInformation p_extendedRATRestrictionInformation := ? + ) := { + { + id := id_ExtendedRATRestrictionInformation, + criticality := ignore, + extensionValue := { ExtendedRATRestrictionInformation := p_extendedRATRestrictionInformation } + } + } // End of template mw_rATRestrictions_Item_id_ExtendedRATRestrictionInformation + + template (present) RecommendedCellsForPaging mw_recommendedCellsForPaging( + template (present) RecommendedCellList p_recommendedCellList := ?, + template RecommendedCellsForPaging.iE_Extensions p_iE_Extensions := * + ) := { + recommendedCellList := p_recommendedCellList, + iE_Extensions := p_iE_Extensions + } // End of template mw_recommendedCellsForPaging + + template (present) RecommendedCellItem mw_recommendedCellItem( + template (present) NGRAN_CGI p_nGRAN_CGI := ?, + template RecommendedCellItem.timeStayedInCell p_timeStayedInCell := *, + template RecommendedCellItem.iE_Extensions p_iE_Extensions := * + ) := { + nGRAN_CGI := p_nGRAN_CGI, + timeStayedInCell := p_timeStayedInCell, + iE_Extensions := p_iE_Extensions + } // End of template mw_recommendedCellItem + + template (present) RecommendedRANNodesForPaging mw_recommendedRANNodesForPaging( + template (present) RecommendedRANNodeList p_recommendedRANNodeList := ?, + template RecommendedRANNodesForPaging.iE_Extensions p_iE_Extensions := * + ) := { + recommendedRANNodeList := p_recommendedRANNodeList, + iE_Extensions := p_iE_Extensions + } // End of template mw_recommendedRANNodesForPaging + + template (present) RecommendedRANNodeItem mw_recommendedRANNodeItem( + template (present) AMFPagingTarget p_aMFPagingTarget := ?, + template RecommendedRANNodeItem.iE_Extensions p_iE_Extensions := * + ) := { + aMFPagingTarget := p_aMFPagingTarget, + iE_Extensions := p_iE_Extensions + } // End of template mw_recommendedRANNodeItem + + template (present) RedCapIndication mw_redCapIndication(template (present) RedCapIndication p_value := redcap) := p_value; + + template (present) RedirectionVoiceFallback mw_redirectionVoiceFallback(template (present) RedirectionVoiceFallback p_value := ?) := p_value; + + template (present) RedundantPDUSessionInformation mw_redundantPDUSessionInformation( + template (present) RSN p_rSN := ?, + template RedundantPDUSessionInformation.iE_Extensions p_iE_Extensions := * + ) := { + rSN := p_rSN, + iE_Extensions := p_iE_Extensions + } // End of template mw_redundantPDUSessionInformation + + template (present) RedundantPDUSessionInformation.iE_Extensions mw_redundantPDUSessionInformation_id_PDUSessionPairID( + template (present) PDUSessionPairID p_pDUSessionPairID := ? + ) := { + { + id := id_PDUSessionPairID, + criticality := ignore, + extensionValue := { PDUSessionPairID := p_pDUSessionPairID } + } + } // End of template m_redundantPDUSessionInformation_id_PDUSessionPairID + + template (present) RedundantQosFlowIndicator mw_RedundantQosFlowIndicator(template (present) RedundantQosFlowIndicator p_value := ?) := p_value; + + template (present) ReflectiveQosAttribute mw_reflectiveQosAttribute(template (present) ReflectiveQosAttribute p_value := ?) := p_value; + + template (present) ReportArea mw_reportArea(template (present) ReportArea p_value := ?) := p_value; + + template (present) ResetAll mw_resetAll(template (present) ResetAll p_value := ?) := p_value; + + template (present) ReportAmountMDT mw_reportAmountMDT(template (present) ReportAmountMDT p_value := ?) := p_value; + + template (present) ReportIntervalMDT mw_reportIntervalMDT(template (present) ReportIntervalMDT p_value := ?) := p_value; + + template (present) ExtendedReportIntervalMDT mw_extendedReportIntervalMDT(template (present) ExtendedReportIntervalMDT p_value := ?) := p_value; + + template (present) ResetType mw_resetType_nG_Interface( + template (present) ResetAll p_nG_Interface := ? + ) := { + nG_Interface := p_nG_Interface + } // End of template mw_resetType_nG_Interface + + template (present) ResetType mw_resetType_partOfNG_Interface( + template (present) UE_associatedLogicalNG_connectionList p_partOfNG_Interface := ? + ) := { + partOfNG_Interface := p_partOfNG_Interface + } // End of template mw_resetType_partOfNG_Interface + + template (present) ResetType mw_resetType_choice_Extensions( + template (present) ResetType.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_resetType_choice_Extensions + + template (present) RRCEstablishmentCause mw_rRCEstablishmentCause(template (present) RRCEstablishmentCause p_value := ?) := p_value; + + template (present) RRCInactiveTransitionReportRequest mw_rRCInactiveTransitionReportRequest(template (present) RRCInactiveTransitionReportRequest p_value := ?) := p_value; + + template (present) RRCState mw_rRCState(template (present) RRCState p_value := ?) := p_value; + + template (present) RSN mw_rSN(template (present) RSN p_value := ?) := p_value; + + template (present) RIMInformationTransfer mw_rIMInformationTransfer( + template (present) TargetRANNodeID_RIM p_targetRANNodeID_RIM := ?, + template (present) SourceRANNodeID p_sourceRANNodeID := ?, + template (present) RIMInformation p_rIMInformation := ?, + template RIMInformationTransfer.iE_Extensions p_iE_Extensions := * + ) := { + targetRANNodeID_RIM := p_targetRANNodeID_RIM, + sourceRANNodeID := p_sourceRANNodeID, + rIMInformation := p_rIMInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_rIMInformationTransfer + + template (present) RIMInformation mw_rIMInformation( + template (present) GNBSetID p_targetgNBSetID := ?, + template (present) RIMInformation.rIM_RSDetection p_rIM_RSDetection := ?, + template RIMInformation.iE_Extensions p_iE_Extensions := * + ) := { + targetgNBSetID := p_targetgNBSetID, + rIM_RSDetection := p_rIM_RSDetection, + iE_Extensions := p_iE_Extensions + } // End of template mw_rIMInformation + + template ScheduledCommunicationTime mw_scheduledCommunicationTime( + template ScheduledCommunicationTime.dayofWeek p_dayofWeek := *, + template ScheduledCommunicationTime.timeofDayStart p_timeofDayStart := *, + template ScheduledCommunicationTime.timeofDayEnd p_timeofDayEnd := *, + template ScheduledCommunicationTime.iE_Extensions p_iE_Extensions := * + ) := { + dayofWeek := p_dayofWeek, + timeofDayStart := p_timeofDayStart, + timeofDayEnd := p_timeofDayEnd, + iE_Extensions := p_iE_Extensions + } // End of template mw_scheduledCommunicationTime + + template SecondaryRATUsageInformation mw_secondaryRATUsageInformation( + template PDUSessionUsageReport p_pDUSessionUsageReport := *, + template QoSFlowsUsageReportList p_qosFlowsUsageReportList := *, + template SecondaryRATUsageInformation.iE_Extension p_iE_Extensions := * + ) := { + pDUSessionUsageReport := p_pDUSessionUsageReport, + qosFlowsUsageReportList := p_qosFlowsUsageReportList, + iE_Extension := p_iE_Extensions + } // End of template mw_secondaryRATUsageInformation + + template SecondaryRATDataUsageReportTransfer mw_secondaryRATDataUsageReportTransfer( + template SecondaryRATUsageInformation p_secondaryRATUsageInformation := *, + template SecondaryRATDataUsageReportTransfer.iE_Extensions p_iE_Extensions := * + ) := { + secondaryRATUsageInformation := p_secondaryRATUsageInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_secondaryRATDataUsageReportTransfer + + template (present) SecurityContext mw_securityContext( + template (present) NextHopChainingCount p_nextHopChainingCount := ?, + template (present) SecurityKey p_nextHopNH := ?, + template SecurityContext.iE_Extensions p_iE_Extensions := * + ) := { + nextHopChainingCount := p_nextHopChainingCount, + nextHopNH := p_nextHopNH, + iE_Extensions := p_iE_Extensions + } // End of template mw_securityContext + + template (present) SecurityIndication mw_securityIndication( + template (present) IntegrityProtectionIndication p_integrityProtectionIndication := ?, + template (present) ConfidentialityProtectionIndication p_confidentialityProtectionIndication := ?, + template MaximumIntegrityProtectedDataRate p_maximumIntegrityProtectedDataRate_UL := *, + template SecurityIndication.iE_Extensions p_iE_Extensions := * + ) := { + integrityProtectionIndication := p_integrityProtectionIndication, + confidentialityProtectionIndication := p_confidentialityProtectionIndication, + maximumIntegrityProtectedDataRate_UL := p_maximumIntegrityProtectedDataRate_UL, + // The above IE shall be present if integrity protection is required or preferred + iE_Extensions := p_iE_Extensions + } // End of template mw_securityIndication + + template (present) SecurityIndication.iE_Extensions mw_securityIndication_id_MaximumIntegrityProtectedDataRate_DL( + template (present) MaximumIntegrityProtectedDataRate p_maximumIntegrityProtectedDataRate := ? + ) := { + { + id := id_MaximumIntegrityProtectedDataRate_DL, + criticality := ignore, + extensionValue := { MaximumIntegrityProtectedDataRate := p_maximumIntegrityProtectedDataRate } + } + } // End of template mw_securityIndication_id_MaximumIntegrityProtectedDataRate_DL + + template (present) SecurityResult mw_securityResult( + template (present) IntegrityProtectionResult p_integrityProtectionResult := ?, + template (present) ConfidentialityProtectionResult p_confidentialityProtectionResult := ?, + template SecurityResult.iE_Extensions p_iE_Extensions := * + ) := { + integrityProtectionResult := p_integrityProtectionResult, + confidentialityProtectionResult := p_confidentialityProtectionResult, + iE_Extensions := p_iE_Extensions + } // End of template mw_securityResult + + template (present) SensorMeasurementConfiguration mw_sensorMeasurementConfiguration( + template (present) SensorMeasConfig p_sensorMeasConfig := ?, + template SensorMeasConfigNameList p_sensorMeasConfigNameList := *, + template SensorMeasurementConfiguration.iE_Extensions p_iE_Extensions := * + ) := { + sensorMeasConfig := p_sensorMeasConfig, + sensorMeasConfigNameList := p_sensorMeasConfigNameList, + iE_Extensions := p_iE_Extensions + } // End of template mw_sensorMeasurementConfiguration + + template (present) SensorMeasConfigNameItem mw_sensorMeasConfigNameItem( + template (present) SensorNameConfig p_sensorNameConfig := ?, + template SensorMeasConfigNameItem.iE_Extensions p_iE_Extensions := * + ) := { + sensorNameConfig := p_sensorNameConfig, + iE_Extensions := p_iE_Extensions + } // End of template mw_sensorMeasConfigNameItem + + template (present) SensorMeasConfig mw_sensorMeasConfig(template (present) SensorMeasConfig p_value := setup) := p_value; + + template (present) SensorNameConfig mw_sensorNameConfig_uncompensatedBarometricConfig( + template (present) SensorNameConfig.uncompensatedBarometricConfig p_uncompensatedBarometricConfig := true_ + ) := { + uncompensatedBarometricConfig := p_uncompensatedBarometricConfig + } // End of template mw_sensorNameConfig_uncompensatedBarometricConfig + + template (present) SensorNameConfig mw_sensorNameConfig_ueSpeedConfig( + template (present) SensorNameConfig.ueSpeedConfig p_ueSpeedConfig := true_ + ) := { + ueSpeedConfig := p_ueSpeedConfig + } // End of template mw_sensorNameConfig_ueSpeedConfig + + template (present) SensorNameConfig mw_sensorNameConfig_ueOrientationConfig( + template (present) SensorNameConfig.ueOrientationConfig p_ueOrientationConfig := true_ + ) := { + ueOrientationConfig := p_ueOrientationConfig + } // End of template mw_sensorNameConfig_ueOrientationConfig + + template (present) SensorNameConfig mw_sensorNameConfig_choice_Extensions( + template (present) SensorNameConfig.choice_Extensions p_choice_Extensions + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_sensorNameConfig_choice_Extensions + + template (present) ServedGUAMIItem mw_servedGUAMIItem( + template (present) GUAMI p_gUAMI := ?, + template AMFName p_backupAMFName := *, + template ServedGUAMIItem.iE_Extensions p_iE_Extensions := * + ) := { + gUAMI := p_gUAMI, + backupAMFName := p_backupAMFName, + iE_Extensions := p_iE_Extensions + } // End of template mw_servedGUAMIItem + + template (present) ServedGUAMIItem.iE_Extensions mw_servedGUAMIItemw_id_GUAMIType( + template (present) GUAMIType p_gUAMIType := ? + ) := { + { + id := id_GUAMIType, + criticality := ignore, + extensionValue := { GUAMIType := p_gUAMIType } + } + } // End of template mw_servedGUAMIItemw_id_GUAMIType + + template (present) ServiceAreaInformation_Item mw_serviceAreaInformation_Item( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template AllowedTACs p_allowedTACs := *, + template NotAllowedTACs p_notAllowedTACs := *, + template ServiceAreaInformation_Item.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + allowedTACs := p_allowedTACs, + notAllowedTACs := p_notAllowedTACs, + iE_Extensions := p_iE_Extensions + } // End of template mw_serviceAreaInformation_Item + + template (present) ServiceType mw_serviceType(template (present) ServiceType p_value := streaming) := p_value; + + template (present) SharedNGU_MulticastTNLInformation mw_sharedNGU_MulticastTNLInformation( + template (present) TransportLayerAddress p_iP_MulticastAddress := ?, + template (present) TransportLayerAddress p_iP_SourceAddress := ?, + template (present) GTP_TEID p_gTP_TEID := ?, + template SharedNGU_MulticastTNLInformation.iE_Extensions p_iE_Extensions := * + ) := { + iP_MulticastAddress := p_iP_MulticastAddress, + iP_SourceAddress := p_iP_SourceAddress, + gTP_TEID := p_gTP_TEID, + iE_Extensions := p_iE_Extensions + } // End of template mw_sharedNGU_MulticastTNLInformation + + template (present) SliceOverloadItem mw_sliceOverloadItem( + template (present) S_NSSAI p_s_NSSAI := ?, + template SliceOverloadItem.iE_Extensions p_iE_Extensions := * + ) := { + s_NSSAI := p_s_NSSAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_sliceOverloadItem + + template (present) SliceSupportItem mw_sliceSupportItem( + template (present) S_NSSAI p_s_NSSAI := ?, + template SliceSupportItem.iE_Extensions p_iE_Extensions := * + ) := { + s_NSSAI := p_s_NSSAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_sliceSupportItem + + template (present) SliceSupportQMC_Item mw_sliceSupportQMC_Item( + template (present) S_NSSAI p_s_NSSAI := ?, + template SliceSupportQMC_Item.iE_Extensions p_iE_Extensions := * + ) := { + s_NSSAI := p_s_NSSAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_sliceSupportQMC_Item + + template (present) SNPN_MobilityInformation mw_sNPN_MobilityInformation( + template (present) NID p_serving_NID := ?, + template SNPN_MobilityInformation.iE_Extensions p_iE_Extensions := * + ) := { + serving_NID := p_serving_NID, + iE_Extensions := p_iE_Extensions + } // End of template mw_sNPN_MobilityInformation + + template (present) S_NSSAI mw_s_NSSAI( + template (present) SST p_sST := ?, + template SD p_sD := *, + template S_NSSAI.iE_Extensions p_iE_Extensions := * + ) := { + sST := p_sST, + sD := p_sD, + iE_Extensions := p_iE_Extensions + } // End of template mw_s_NSSAI + + template (present) SONConfigurationTransfer mw_sONConfigurationTransfer( + template (present) TargetRANNodeID_SON p_targetRANNodeID_SON := ?, + template (present) SourceRANNodeID p_sourceRANNodeID := ?, + template (present) SONInformation p_sONInformation := ?, + template XnTNLConfigurationInfo p_xnTNLConfigurationInfo := *, + template SONConfigurationTransfer.iE_Extensions p_iE_Extensions := * + ) := { + targetRANNodeID_SON := p_targetRANNodeID_SON, + sourceRANNodeID := p_sourceRANNodeID, + sONInformation := p_sONInformation, + xnTNLConfigurationInfo := p_xnTNLConfigurationInfo, + // The above IE shall be present if the SON Information IE contains the SON Information Request IE set to “Xn TNL Configuration Info” + iE_Extensions := p_iE_Extensions + } // End of template mw_sONConfigurationTransfer + + template (present) SONInformation mw_sONInformation_sONInformationRequest( + template (present) SONInformationRequest p_sONInformationRequest := ? + ) := { + sONInformationRequest := p_sONInformationRequest + } // End of template mw_sONInformation_sONInformationRequest + + template (present) SONInformation mw_sONInformation_sONInformationReply( + template (present) SONInformationReply p_sONInformationReply := ? + ) := { + sONInformationReply := p_sONInformationReply + } // End of template mw_sONInformation_sONInformationReply + + template (present) SONInformation mw_sONInformation_choice_Extensions( + template (present) SONInformation.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_sONInformation_choice_Extensions + + template (present) SONInformation.choice_Extensions mw_sONInformatio_id_SONInformationReport( + template (present) SONInformationReport p_sONInformationReport := ? + ) := { + id := id_SONInformationReport, + criticality := ignore, + value_ := { SONInformationReport := p_sONInformationReport } + } // End of template mw_sONInformatio_id_SONInformationReport + + template SONInformationReply mw_sONInformationReply( + template XnTNLConfigurationInfo p_xnTNLConfigurationInfo := *, + template SONInformationReply.iE_Extensions p_iE_Extensions := * + ) := { + xnTNLConfigurationInfo := p_xnTNLConfigurationInfo, + iE_Extensions := p_iE_Extensions + } // End of template mw_sONInformationReply + + template (present) SONInformationReport mw_sONInformationReport_failureIndicationInformation( + template (present) FailureIndication p_failureIndicationInformation := ? + ) := { + failureIndicationInformation := p_failureIndicationInformation + } // End of template mw_sONInformationReport_failureIndicationInformation + + template (present) SONInformationReport mw_sONInformationReport_hOReportInformation( + template (present) HOReport p_hOReportInformation := ? + ) := { + hOReportInformation := p_hOReportInformation + } // End of template mw_sONInformationReport_hOReportInformation + + template (present) SONInformationReport mw_sONInformationReport_choice_Extensions( + template (present) SONInformationReport.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_sONInformationReport_choice_Extensions + + template (present) SONInformationReport.choice_Extensions mw_sONInformationReport_id_SONInformationReport( + template (present) SuccessfulHandoverReportList p_successfulHandoverReportList := ? + ) := { + id := id_SONInformationReport, + criticality := ignore, + value_ := { SuccessfulHandoverReportList := p_successfulHandoverReportList } + } // End of template mw_sONInformationReport_id_SONInformationReport + + template (present) SuccessfulHandoverReport_Item mw_successfulHandoverReport_Item( + template (present) octetstring p_successfulHOReportContainer := ?, + template SuccessfulHandoverReport_Item.iE_Extensions p_iE_Extensions := * + ) := { + successfulHOReportContainer := p_successfulHOReportContainer, + iE_Extensions := p_iE_Extensions + } // End of template mw_successfulHandoverReport_Item + + template (present) SONInformationRequest mw_sONInformationRequest(template (present) SONInformationRequest p_value := ?) := p_value; + + template (present) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer( + template (present) NGRAN_CGI p_targetCell_ID := ?, + template (present) RRCContainer p_rRCContainer := ?, + template (present) UEHistoryInformation p_uEHistoryInformation := ?, + template PDUSessionResourceInformationList p_pDUSessionResourceInformationList := *, + template E_RABInformationList p_e_RABInformationList := *, + template IndexToRFSP p_indexToRFSP := *, + template SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions p_iE_Extensions := * + ):= { + rRCContainer := p_rRCContainer, + pDUSessionResourceInformationList := p_pDUSessionResourceInformationList, + e_RABInformationList := p_e_RABInformationList, + targetCell_ID := p_targetCell_ID, + indexToRFSP := p_indexToRFSP, + uEHistoryInformation := p_uEHistoryInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer + + template (present) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_SgNB_UE_X2AP_ID( + template (present) SgNB_UE_X2AP_ID p_sgNB_UE_X2AP_ID := ? + ) := { + { + id := id_SgNB_UE_X2AP_ID, + criticality := ignore, + extensionValue := { SgNB_UE_X2AP_ID := p_sgNB_UE_X2AP_ID } + } + } // End of template mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_SgNB_UE_X2AP_ID + + template (present) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_UEHistoryInformationFromTheUE( + template (present) UEHistoryInformationFromTheUE p_uEHistoryInformationFromTheUE := ? + ) := { + { + id := id_UEHistoryInformationFromTheUE, + criticality := ignore, + extensionValue := { UEHistoryInformationFromTheUE := p_uEHistoryInformationFromTheUE } + } + } // End of template mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_UEHistoryInformationFromTheUE + + template (present) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_SourceNodeID( + template (present) SourceNodeID p_sourceNodeID := ? + ) := { + { + id := id_SourceNodeID, + criticality := ignore, + extensionValue := { SourceNodeID := p_sourceNodeID } + } + } // End of template mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_SourceNodeID + + template (present) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_UEContextReferenceAtSource( + template (present) RAN_UE_NGAP_ID p_rAN_UE_NGAP_ID := ? + ) := { + { + id := id_UEContextReferenceAtSource, + criticality := ignore, + extensionValue := { RAN_UE_NGAP_ID := p_rAN_UE_NGAP_ID } + } + } // End of template mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_UEContextReferenceAtSource + + template (present) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_MBS_ActiveSessionInformation_SourcetoTargetList( + template (present) MBS_ActiveSessionInformation_SourcetoTargetList p_mBS_ActiveSessionInformation_SourcetoTargetListD := ? + ) := { + { + id := id_MBS_ActiveSessionInformation_SourcetoTargetList, + criticality := ignore, + extensionValue := { MBS_ActiveSessionInformation_SourcetoTargetList := p_mBS_ActiveSessionInformation_SourcetoTargetListD } + } + } // End of template mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_MBS_ActiveSessionInformation_SourcetoTargetList + + template (present) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_QMCConfigInfo( + template (present) QMCConfigInfo p_qMCConfigInfo := ? + ) := { + { + id := id_QMCConfigInfo, + criticality := ignore, + extensionValue := { QMCConfigInfo := p_qMCConfigInfo } + } + } // End of template mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_QMCConfigInfo + + template (present) SourceNGRANNode_ToTargetNGRANNode_TransparentContainer.iE_Extensions mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_NGAPIESupportInformationRequestList( + template (present) NGAPIESupportInformationRequestList p_nGAPIESupportInformationRequestList := ? + ) := { + { + id := id_NGAPIESupportInformationRequestList, + criticality := ignore, + extensionValue := { NGAPIESupportInformationRequestList := p_nGAPIESupportInformationRequestList } + } + } // End of template mw_sourceNGRANNode_ToTargetNGRANNode_TransparentContainer_id_NGAPIESupportInformationRequestList + + template (present) SourceNodeID mw_sourceNodeID_sourceengNB_ID( + template (present) GlobalGNB_ID p_sourceengNB_ID := ? + ) := { + sourceengNB_ID := p_sourceengNB_ID + } // End of template mw_sourceNodeID_sourceengNB_ID + + template (present) SourceNodeID mw_sourceNodeID_choice_Extensions( + template (present) SourceNodeID.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_sourceNodeID_choice_Extensions + + template (present) SourceOfUEActivityBehaviourInformation mw_sourceOfUEActivityBehaviourInformation(template (present) SourceOfUEActivityBehaviourInformation p_value := ?) := p_value; + + template (present) SourceRANNodeID mw_sourceRANNodeID( + template (present) GlobalRANNodeID p_globalRANNodeID := ?, + template (present) TAI p_selectedTAI := ?, + template SourceRANNodeID.iE_Extensions p_iE_Extensions := * + ) := { + globalRANNodeID := p_globalRANNodeID, + selectedTAI := p_selectedTAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_sourceRANNodeID + + // This IE includes a transparent container from the source RAN node to the target RAN node. + // The octets of the OCTET STRING are encoded according to the specifications of the target system. + + template SourceToTarget_AMFInformationReroute mw_sourceToTarget_AMFInformationReroute( + template ConfiguredNSSAI p_configuredNSSAI := *, + template RejectedNSSAIinPLMN p_rejectedNSSAIinPLMN := *, + template RejectedNSSAIinTA p_rejectedNSSAIinTA := *, + template SourceToTarget_AMFInformationReroute.iE_Extensions p_iE_Extensions := * + ) := { + configuredNSSAI := p_configuredNSSAI, + rejectedNSSAIinPLMN := p_rejectedNSSAIinPLMN, + rejectedNSSAIinTA := p_rejectedNSSAIinTA, + iE_Extensions := p_iE_Extensions + } // End of template mw_sourceToTarget_AMFInformationReroute + + // This IE includes information from the source Core node to the target Core node for reroute information provide by NSSF. + // The octets of the OCTET STRING are encoded according to the specifications of the Core network. + + template (present) SRVCCOperationPossible mw_sRVCCOperationPossible(template (present) SRVCCOperationPossible p_value := ?) := p_value; + + template (present) SupportedTAItem mw_supportedTAItem( + template (present) TAC p_tAC := ?, + template (present) BroadcastPLMNList p_broadcastPLMNList := ?, + template SupportedTAItem.iE_Extensions p_iE_Extensions := * + ) := { + tAC := p_tAC, + broadcastPLMNList := p_broadcastPLMNList, + iE_Extensions := p_iE_Extensions + } // End of template mw_supportedTAItem + + template (present) SupportedTAItem.iE_Extensions mw_supportedTAItemw_id_ConfiguredTACIndication( + template (present) ConfiguredTACIndication p_configuredTACIndication := ? + ) := { + { + id := id_ConfiguredTACIndication, + criticality := ignore, + extensionValue := { ConfiguredTACIndication := p_configuredTACIndication } + } + } // End of template mw_supportedTAItemw_id_ConfiguredTACIndication + + template (present) SupportedTAItem.iE_Extensions mw_supportedTAItemw_id_RAT_Information( + template (present) RAT_Information p_rAT_Information := ? + ) := { + { + id := id_RAT_Information, + criticality := reject, + extensionValue := { RAT_Information := p_rAT_Information } + } + } // End of template mw_supportedTAItemw_id_RAT_Information + + template (present) SupportedTAItem.iE_Extensions mw_supportedTAItemw_full( + template (present) ConfiguredTACIndication p_configuredTACIndication := ?, + template (present) RAT_Information p_rAT_Information := ? + ) := { + { + id := id_ConfiguredTACIndication, + criticality := ignore, + extensionValue := { ConfiguredTACIndication := p_configuredTACIndication } + }, + { + id := id_RAT_Information, + criticality := reject, + extensionValue := { RAT_Information := p_rAT_Information } + } + } // End of template mw_supportedTAItemw_full + + template (present) SuspendIndicator mw_suspendIndicator(template (present) SuspendIndicator p_value := true_) := p_value; + + template (present) Suspend_Request_Indication mw_suspend_Request_Indication(template (present) Suspend_Request_Indication p_value := suspend_requested) := p_value; + + template (present) Suspend_Response_Indication mw_suspend_Response_Indication(template (present) Suspend_Response_Indication p_value := suspend_indicated) := p_value; + + template (present) TAI mw_tAI( + template (present) PLMNIdentity p_pLMNIdentity := ?, + template (present) TAC p_tAC := ?, + template TAI.iE_Extensions p_iE_Extensions := * + ) := { + pLMNIdentity := p_pLMNIdentity, + tAC := p_tAC, + iE_Extensions := p_iE_Extensions + } // End of template mw_tAI + + template (present) TAIBroadcastEUTRA_Item mw_tAIBroadcastEUTRA_Item( + template (present) TAI p_tAI := ?, + template (present) CompletedCellsInTAI_EUTRA p_completedCellsInTAI_EUTRA := ?, + template TAIBroadcastEUTRA_Item.iE_Extensions p_iE_Extensions := * + ) := { + tAI := p_tAI, + completedCellsInTAI_EUTRA := p_completedCellsInTAI_EUTRA, + iE_Extensions := p_iE_Extensions + } // End of template mw_tAIBroadcastEUTRA_Item + + template (present) TAIBroadcastNR_Item mw_tAIBroadcastNR_Item( + template (present) TAI p_tAI := ?, + template (present) CompletedCellsInTAI_NR p_completedCellsInTAI_NR := ?, + template TAIBroadcastNR_Item.iE_Extensions p_iE_Extensions := * + ) := { + tAI := p_tAI, + completedCellsInTAI_NR := p_completedCellsInTAI_NR, + iE_Extensions := p_iE_Extensions + } // End of template mw_tAIBroadcastNR_Item + + template (present) TAICancelledEUTRA_Item mw_tAICancelledEUTRA_Item( + template (present) TAI p_tAI := ?, + template (present) CancelledCellsInTAI_EUTRA p_cancelledCellsInTAI_EUTRA := ?, + template TAICancelledEUTRA_Item.iE_Extensions p_iE_Extensions := * + ) := { + tAI := p_tAI, + cancelledCellsInTAI_EUTRA := p_cancelledCellsInTAI_EUTRA, + iE_Extensions := p_iE_Extensions + } // End of template mw_tAICancelledEUTRA_Item + + template (present) TAICancelledNR_Item mw_tAICancelledNR_Item( + template (present) TAI p_tAI := ?, + template (present) CancelledCellsInTAI_NR p_cancelledCellsInTAI_NR := ?, + template TAICancelledNR_Item.iE_Extensions p_iE_Extensions := * + ) := { + tAI := p_tAI, + cancelledCellsInTAI_NR := p_cancelledCellsInTAI_NR, + iE_Extensions := p_iE_Extensions + } // End of template mw_tAICancelledNR_Item + + template (present) TAIListForInactiveItem mw_tAIListForInactiveItem( + template (present) TAI p_tAI := ?, + template TAIListForInactiveItem.iE_Extensions p_iE_Extensions := * + ) := { + tAI := p_tAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_tAIListForInactiveItem + + template (present) TAIListForPagingItem mw_tAIListForPagingItem( + template (present) TAI p_tAI := ?, + template TAIListForPagingItem.iE_Extensions p_iE_Extensions := * + ) := { + tAI := p_tAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_tAIListForPagingItem + + template (present) TAINSAGSupportItem mw_tAINSAGSupportItem( + template (present) NSAG_ID p_nSAG_ID := ?, + template (present) ExtendedSliceSupportList p_nSAGSliceSupportList := ?, + template TAINSAGSupportItem.iE_Extensions p_iE_Extensions := * + ) := { + nSAG_ID := p_nSAG_ID, + nSAGSliceSupportList := p_nSAGSliceSupportList, + iE_Extensions := p_iE_Extensions + } // End of template mw_tAINSAGSupportItem + + template (present) TargeteNB_ID mw_targeteNB_ID( + template (present) GlobalNgENB_ID p_globalENB_ID := ?, + template (present) EPS_TAI p_selected_EPS_TAI := ?, + template TargeteNB_ID.iE_Extensions p_iE_Extensions := * + ) := { + globalENB_ID := p_globalENB_ID, + selected_EPS_TAI := p_selected_EPS_TAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_targeteNB_ID + + template (present) TargetHomeENB_ID mw_targetHomeENB_ID( + template (present) PLMNIdentity p_pLMNidentity := ?, + template (present) TargetHomeENB_ID.homeENB_ID p_homeENB_ID := ?, + template (present) EPS_TAI p_selected_EPS_TAI := ?, + template TargetHomeENB_ID.iE_Extensions p_iE_Extensions := * + ) := { + pLMNidentity := p_pLMNidentity, + homeENB_ID := p_homeENB_ID, + selected_EPS_TAI := p_selected_EPS_TAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_targetHomeENB_ID + + template (present) TargetID mw_targetID_targetRANNodeID( + template (present) TargetRANNodeID p_targetRANNodeID := ? + ) := { + targetRANNodeID := p_targetRANNodeID + } // End of template mw_targetID_targetRANNodeID + + template (present) TargetID mw_targetID_targeteNB_ID( + template (present) TargeteNB_ID p_targeteNB_ID := ? + ) := { + targeteNB_ID := p_targeteNB_ID + } // End of template mw_targetID_targeteNB_ID + + template (present) TargetID mw_targetID_choice_Extensions( + template (present) TargetID.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_targetID_choice_Extensions + + template (present) TargetID.choice_Extensions mw_targetID_id_TargetRNC_ID( + template (present) TargetRNC_ID p_targetRNC_ID := ? + ) := { + id := id_TargetRNC_ID, + criticality := reject, + value_ := { TargetRNC_ID := p_targetRNC_ID } + } // End of template mw_sONInformationReport_id_SONInformationReport + + template (present) TargetID.choice_Extensions mw_targetID_id_TargetHomeENB_ID( + template (present) TargetHomeENB_ID p_targetHomeENB_ID := ? + ) := { + id := id_TargetHomeENB_ID, + criticality := reject, + value_ := { TargetHomeENB_ID := p_targetHomeENB_ID } + } // End of template mw_sONInformationReport_id_TargetHomeENB_ID + + template (present) TargetNGRANNode_ToSourceNGRANNode_TransparentContainer mw_targetNGRANNode_ToSourceNGRANNode_TransparentContainer( + template (present) RRCContainer p_rRCContainer := ?, + template TargetNGRANNode_ToSourceNGRANNode_TransparentContainer.iE_Extensions p_iE_Extensions := * + ) := { + rRCContainer := p_rRCContainer, + iE_Extensions := p_iE_Extensions + } // End of template mw_targetNGRANNode_ToSourceNGRANNode_TransparentContainer + + template (present) TargetNGRANNode_ToSourceNGRANNode_TransparentContainer.iE_Extensions mw_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_DAPSResponseInfoList( + template (present) DAPSResponseInfoList p_dAPSResponseInfoList := ? + ) := { + { + id := id_ConfiguredTACIndication, + criticality := ignore, + extensionValue := { DAPSResponseInfoList := p_dAPSResponseInfoList } + } + } // End of template mw_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_DAPSResponseInfoList + + template (present) TargetNGRANNode_ToSourceNGRANNode_TransparentContainer.iE_Extensions mw_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_DirectForwardingPathAvailability( + template (present) DirectForwardingPathAvailability p_directForwardingPathAvailability := ? + ) := { + { + id := id_DirectForwardingPathAvailability, + criticality := ignore, + extensionValue := { DirectForwardingPathAvailability := p_directForwardingPathAvailability } + } + } // End of template mw_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_DirectForwardingPathAvailability + + template (present) TargetNGRANNode_ToSourceNGRANNode_TransparentContainer.iE_Extensions mw_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_MBS_ActiveSessionInformation_TargettoSourceList( + template (present) MBS_ActiveSessionInformation_TargettoSourceList p_mBS_ActiveSessionInformation_TargettoSourceList := ? + ) := { + { + id := id_MBS_ActiveSessionInformation_TargettoSourceList, + criticality := ignore, + extensionValue := { MBS_ActiveSessionInformation_TargettoSourceList := p_mBS_ActiveSessionInformation_TargettoSourceList } + } + } // End of template mw_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_MBS_ActiveSessionInformation_TargettoSourceList + + template (present) TargetNGRANNode_ToSourceNGRANNode_TransparentContainer.iE_Extensions mw_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_NGAPIESupportInformationResponseList( + template (present) NGAPIESupportInformationResponseList p_nGAPIESupportInformationResponseList := ? + ) := { + { + id := id_NGAPIESupportInformationResponseList, + criticality := ignore, + extensionValue := { NGAPIESupportInformationResponseList := p_nGAPIESupportInformationResponseList } + } + } // End of template mw_targetNGRANNode_ToSourceNGRANNode_TransparentContainer_id_NGAPIESupportInformationResponseList + + template TargetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer mw_targetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer( + template Cell_CAGInformation p_cell_CAGInformation := *, + template TargetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer.iE_Extensions p_iE_Extensions := * + ) := { + cell_CAGInformation := p_cell_CAGInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_targetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer + + template (present) TargetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer.iE_Extensions mw_targetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer_id_NGAPIESupportInformationResponseList( + template (present) NGAPIESupportInformationResponseList p_nGAPIESupportInformationResponseList := ? + ) := { + { + id := id_NGAPIESupportInformationResponseList, + criticality := ignore, + extensionValue := { NGAPIESupportInformationResponseList := p_nGAPIESupportInformationResponseList } + } + } // End of template mw_targetNGRANNode_ToSourceNGRANNode_FailureTransparentContainer_id_NGAPIESupportInformationResponseList + + template (present) TargetNSSAI_Item mw_targetNSSAI_Item( + template (present) S_NSSAI p_s_NSSAI := ?, + template TargetNSSAI_Item.iE_Extensions p_iE_Extensions := * + ) := { + s_NSSAI := p_s_NSSAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_targetNSSAI_Item + + template (present) TargetNSSAIInformation mw_targetNSSAIInformation( + template (present) TargetNSSAI p_targetNSSAI := ?, + template (present) IndexToRFSP p_indexToRFSP := ?, + template TargetNSSAIInformation.iE_Extensions p_iE_Extensions := * + ) := { + targetNSSAI := p_targetNSSAI, + indexToRFSP := p_indexToRFSP, + iE_Extensions := p_iE_Extensions + } // End of template mw_targetNSSAIInformation + + template (present) TargetRANNodeID mw_targetRANNodeID( + template (present) GlobalRANNodeID p_globalRANNodeID := ?, + template (present) TAI p_selectedTAI := ?, + template TargetRANNodeID.iE_Extensions p_iE_Extensions := * + ) := { + globalRANNodeID := p_globalRANNodeID, + selectedTAI := p_selectedTAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_targetRANNodeID + + template (present) TargetRANNodeID_RIM mw_targetRANNodeID_RIM( + template (present) GlobalRANNodeID p_globalRANNodeID := ?, + template (present) TAI p_selectedTAI := ?, + template TargetRANNodeID_RIM.iE_Extensions p_iE_Extensions := * + ) := { + globalRANNodeID := p_globalRANNodeID, + selectedTAI := p_selectedTAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_targetRANNodeID_RIM + + template (present) TargetRANNodeID_SON mw_targetRANNodeID_SON( + template (present) GlobalRANNodeID p_globalRANNodeID := ?, + template (present) TAI p_selectedTAI := ?, + template TargetRANNodeID_SON.iE_Extensions p_iE_Extensions := * + ) := { + globalRANNodeID := p_globalRANNodeID, + selectedTAI := p_selectedTAI, + iE_Extensions := p_iE_Extensions + } // End of template mw_targetRANNodeID_SON + + template (present) TargetRANNodeID_SON.iE_Extensions mw_targetRANNodeID_SON_id_NR_CGI( + template (present) NR_CGI p_nR_CGI := ? + ) := { + { + id := id_NR_CGI, + criticality := ignore, + extensionValue := { NR_CGI := p_nR_CGI } + } + } // End of template mw_targetRANNodeID_SON_id_NR_CGI + + template (present) TargetRNC_ID mw_targetRNC_ID( + template (present) LAI p_lAI := ?, + template (present) RNC_ID p_rNC_ID := ?, + template ExtendedRNC_ID p_extendedRNC_ID := *, + template TargetRNC_ID.iE_Extensions p_iE_Extensions := * + ) := { + lAI := p_lAI, + rNC_ID := p_rNC_ID, + extendedRNC_ID := p_extendedRNC_ID, + iE_Extensions := p_iE_Extensions + } // End of template mw_targetRNC_ID + + template (present) TimerApproachForGUAMIRemoval mw_timerApproachForGUAMIRemoval(template (present) TimerApproachForGUAMIRemoval p_value := ?) := p_value; + + template (present) TimeSyncAssistanceInfo mw_timeSyncAssistanceInfo( + template (present) TimeSyncAssistanceInfo.timeDistributionIndication p_timeDistributionIndication := enabled, + template TimeSyncAssistanceInfo.uUTimeSyncErrorBudget p_uUTimeSyncErrorBudget := *, + template TimeSyncAssistanceInfo.iE_Extensions p_iE_Extensions := * + ) := { + timeDistributionIndication := p_timeDistributionIndication, + uUTimeSyncErrorBudget := p_uUTimeSyncErrorBudget, + // The above IE shall be present if the Time Distribution Indication IE is set to the value “enabled” + iE_Extensions := p_iE_Extensions + } // End of template mw_timeSyncAssistanceInfo + + template (present) TimeToWait mw_timeToWait(template (present) TimeToWait p_value := ?) := p_value; + + template (present) TNGF_ID mw_tNGF_ID_tNGF_ID( + template (present) TNGF_ID.tNGF_ID p_tNGF_ID := ? + ) := { + tNGF_ID := p_tNGF_ID + } // End of template mw_tNGF_ID_tNGF_ID + + template (present) TNGF_ID mw_tNGF_ID_choice_Extensions( + template (present) TNGF_ID.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_tNGF_ID_choice_Extensions + + template (present) TNLAssociationItem mw_tNLAssociationItem( + template (present) CPTransportLayerInformation p_tNLAssociationAddress := ?, + template (present) Cause p_cause := ?, + template TNLAssociationItem.iE_Extensions p_iE_Extensions := * + ) := { + tNLAssociationAddress := p_tNLAssociationAddress, + cause := p_cause, + iE_Extensions := p_iE_Extensions + } // End of template mw_tNLAssociationItem + + template (present) TNLAssociationUsage mw_TNLAssociationUsage(template (present) TNLAssociationUsage p_value := ?) := p_value; + + template (present) TooearlyIntersystemHO mw_tooearlyIntersystemHO( + template (present) EUTRA_CGI p_sourcecellID := ?, + template (present) NGRAN_CGI p_failurecellID := ?, + template UERLFReportContainer p_uERLFReportContainer := *, + template TooearlyIntersystemHO.iE_Extensions p_iE_Extensions := * + ) := { + sourcecellID := p_sourcecellID, + failurecellID := p_failurecellID, + uERLFReportContainer := p_uERLFReportContainer, + iE_Extensions := p_iE_Extensions + } // End of template mw_tooearlyIntersystemHO + + template (present) TraceActivation mw_traceActivation( + template (present) NGRANTraceID p_nGRANTraceID := ?, + template (present) InterfacesToTrace p_interfacesToTrace := ?, + template (present) TraceDepth p_traceDepth := ?, + template (present) TransportLayerAddress p_traceCollectionEntityIPAddress := ?, + template TraceActivation.iE_Extensions p_iE_Extensions := * + ) := { + nGRANTraceID := p_nGRANTraceID, + interfacesToTrace := p_interfacesToTrace, + traceDepth := p_traceDepth, + traceCollectionEntityIPAddress := p_traceCollectionEntityIPAddress, + iE_Extensions := p_iE_Extensions + } // End of template mw_traceActivation + + template (present) TraceActivation.iE_Extensions mw_traceActivation_id_MDTConfiguration( + template (present) MDT_Configuration p_mDT_Configuration := ? + ) := { + { + id := id_MDTConfiguration, + criticality := ignore, + extensionValue := { MDT_Configuration := p_mDT_Configuration } + } + } // End of template mw_traceActivation_id_MDTConfiguration + + template (present) TraceActivation.iE_Extensions mw_traceActivation_id_TraceCollectionEntityURI( + template (present) URI_address p_uRI_address := ? + ) := { + { + id := id_TraceCollectionEntityURI, + criticality := ignore, + extensionValue := { URI_address := p_uRI_address } + } + } // End of template mw_traceActivation_id_TraceCollectionEntityURI + + template (present) TraceActivation.iE_Extensions mw_traceActivation_full( + template (present) MDT_Configuration p_mDT_Configuration := ?, + template (present) URI_address p_uRI_address := ? + ) := { + { + id := id_MDTConfiguration, + criticality := ignore, + extensionValue := { MDT_Configuration := p_mDT_Configuration } + },{ + id := id_TraceCollectionEntityURI, + criticality := ignore, + extensionValue := { URI_address := p_uRI_address } + } + } // End of template mw_traceActivation_full + + template (present) TraceDepth mw_traceDepth(template (present) TraceDepth p_value := ?) := p_value; + + template (present) TypeOfError mw_typeOfError(template (present) TypeOfError p_value := ?) := p_value; + + template (present) TAIBasedMDT mw_tAIBasedMDT( + template (present) TAIListforMDT p_tAIListforMDT := ?, + template TAIBasedMDT.iE_Extensions p_iE_Extensions := * + ) := { + tAIListforMDT := p_tAIListforMDT, + iE_Extensions := p_iE_Extensions + } // End of template mw_tAIBasedMDT + + template (present) TAIBasedQMC mw_tAIBasedQMC( + template (present) TAIListforQMC p_tAIListforQMC := ?, + template TAIBasedQMC.iE_Extensions p_iE_Extensions := * + ) := { + tAIListforQMC := p_tAIListforQMC, + iE_Extensions := p_iE_Extensions + } // End of template mw_tAIBasedQMC + + template (present) TABasedQMC mw_tABasedQMC( + template (present) TAListforQMC p_tAListforQMC := ?, + template TABasedQMC.iE_Extensions p_iE_Extensions := * + ) := { + tAListforQMC := p_tAListforQMC, + iE_Extensions := p_iE_Extensions + } // End of template mw_tABasedQMC + + template (present) TABasedMDT mw_tABasedMDT( + template (present) TAListforMDT p_tAListforMDT := ?, + template TABasedMDT.iE_Extensions p_iE_Extensions := * + ) := { + tAListforMDT := p_tAListforMDT, + iE_Extensions := p_iE_Extensions + } // End of template mw_tABasedMDT + + template (present) TimeToTrigger mw_timeToTrigger(template (present) TimeToTrigger p_value := ?) := p_value; + + template (present) TWIF_ID mw_tWIF_ID_tWIF_ID( + template (present) TWIF_ID.tWIF_ID p_tWIF_ID := ? + ) := { + tWIF_ID := p_tWIF_ID + } // End of template mw_tWIF_ID_tWIF_ID + + template (present) TWIF_ID mw_tWIF_ID_choice_Extensions( + template (present) TWIF_ID.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_tWIF_ID_choice_Extensions + + template (present) TSCAssistanceInformation mw_tSCAssistanceInformation( + template (present) Periodicity p_periodicity := ?, + template BurstArrivalTime p_burstArrivalTime := *, + template TSCAssistanceInformation.iE_Extensions p_iE_Extensions := * + ) := { + periodicity := p_periodicity, + burstArrivalTime := p_burstArrivalTime, + iE_Extensions := p_iE_Extensions + } // End of template mw_tSCAssistanceInformation + + template (present) TSCAssistanceInformation.iE_Extensions mw_tSCAssistanceInformation_id_SurvivalTime( + template (present) SurvivalTime p_survivalTime := ? + ) := { + { + id := id_SurvivalTime, + criticality := ignore, + extensionValue := { SurvivalTime := p_survivalTime } + } + } // End of template mw_tSCAssistanceInformation_id_SurvivalTime + + template TSCTrafficCharacteristics mw_tSCTrafficCharacteristics( + template TSCAssistanceInformation p_tSCAssistanceInformationDL := *, + template TSCAssistanceInformation p_tSCAssistanceInformationUL := *, + template TSCTrafficCharacteristics.iE_Extensions p_iE_Extensions := * + ) := { + tSCAssistanceInformationDL := p_tSCAssistanceInformationDL, + tSCAssistanceInformationUL := p_tSCAssistanceInformationUL, + iE_Extensions := p_iE_Extensions + } // End of template mw_tSCTrafficCharacteristics + + template (present) UEAggregateMaximumBitRate mw_uEAggregateMaximumBitRate( + template (present) BitRate p_uEAggregateMaximumBitRateDL := ?, + template (present) BitRate p_uEAggregateMaximumBitRateUL := ?, + template UEAggregateMaximumBitRate.iE_Extensions p_iE_Extensions := * + ) := { + uEAggregateMaximumBitRateDL := p_uEAggregateMaximumBitRateDL, + uEAggregateMaximumBitRateUL := p_uEAggregateMaximumBitRateUL, + iE_Extensions := p_iE_Extensions + } // End of template mw_uEAggregateMaximumBitRate + + template (present) UEAppLayerMeasInfoItem mw_uEAppLayerMeasInfoItem( + template (present) UEAppLayerMeasConfigInfo p_uEAppLayerMeasConfigInfo := ?, + template UEAppLayerMeasInfoItem.iE_Extensions p_iE_Extensions := * + ) := { + uEAppLayerMeasConfigInfo := p_uEAppLayerMeasConfigInfo, + iE_Extensions := p_iE_Extensions + } // End of template mw_uEAppLayerMeasInfoItem + + template (present) UEAppLayerMeasConfigInfo mw_uEAppLayerMeasConfigInfo( + template (present) QoEReference p_qoEReference := ?, + template (present) TransportLayerAddress p_measCollEntityIPAddress := ?, + template ServiceType p_serviceType, + template AreaScopeOfQMC p_areaScopeOfQMC := *, + template UEAppLayerMeasConfigInfo.qoEMeasurementStatus p_qoEMeasurementStatus := *, + template UEAppLayerMeasConfigInfo.containerForAppLayerMeasConfig p_containerForAppLayerMeasConfig := *, + template UEAppLayerMeasConfigInfo.measConfigAppLayerID p_measConfigAppLayerID := *, + template SliceSupportListQMC p_sliceSupportListQMC := *, + template MDT_AlignmentInfo p_mDT_AlignmentInfo := *, + template AvailableRANVisibleQoEMetrics p_availableRANVisibleQoEMetrics := *, + template UEAppLayerMeasConfigInfo.iE_Extensions p_iE_Extensions := * + ) := { + qoEReference := p_qoEReference, + serviceType := p_serviceType, + areaScopeOfQMC := p_areaScopeOfQMC, + measCollEntityIPAddress := p_measCollEntityIPAddress, + qoEMeasurementStatus := p_qoEMeasurementStatus, + containerForAppLayerMeasConfig := p_containerForAppLayerMeasConfig, + measConfigAppLayerID := p_measConfigAppLayerID, + sliceSupportListQMC := p_sliceSupportListQMC, + mDT_AlignmentInfo := p_mDT_AlignmentInfo, + availableRANVisibleQoEMetrics := p_availableRANVisibleQoEMetrics, + iE_Extensions := p_iE_Extensions + } // End of template mw_uEAppLayerMeasConfigInfo + + template UE_associatedLogicalNG_connectionItem mw_uE_associatedLogicalNG_connectionItem( + template AMF_UE_NGAP_ID p_aMF_UE_NGAP_ID := *, + template RAN_UE_NGAP_ID p_rAN_UE_NGAP_ID := *, + template UE_associatedLogicalNG_connectionItem.iE_Extensions p_iE_Extensions := * + ) := { + aMF_UE_NGAP_ID := p_aMF_UE_NGAP_ID, + rAN_UE_NGAP_ID := p_rAN_UE_NGAP_ID, + iE_Extensions := p_iE_Extensions + } // End of template mw_uE_associatedLogicalNG_connectionItem + + template (present) UECapabilityInfoRequest mw_uECapabilityInfoRequest(template (present) UECapabilityInfoRequest p_value := requested) := p_value; + + template (present) UEContextRequest mw_uEContextRequest(template (present) UEContextRequest p_value := requested) := p_value; + + template UEContextResumeRequestTransfer mw_uEContextResumeRequestTransfer( + template QosFlowListWithCause p_qosFlowFailedToResumeList := *, + template UEContextResumeRequestTransfer.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowFailedToResumeList := p_qosFlowFailedToResumeList, + iE_Extensions := p_iE_Extensions + } // End of template mw_uEContextResumeRequestTransfer + + template UEContextResumeResponseTransfer mw_uEContextResumeResponseTransfer( + template QosFlowListWithCause p_qosFlowFailedToResumeList := *, + template UEContextResumeResponseTransfer.iE_Extensions p_iE_Extensions := * + ) := { + qosFlowFailedToResumeList := p_qosFlowFailedToResumeList, + iE_Extensions := p_iE_Extensions + } // End of template mw_uEContextResumeResponseTransfer + + template UEContextSuspendRequestTransfer mw_uEContextSuspendRequestTransfer( + template SuspendIndicator p_suspendIndicator := *, + template UEContextSuspendRequestTransfer.iE_Extensions p_iE_Extensions := * + ) := { + suspendIndicator := p_suspendIndicator, + iE_Extensions := p_iE_Extensions + } // End of template mw_uEContextSuspendRequestTransfer + + template UE_DifferentiationInfo mw_uE_DifferentiationInfo( + template UE_DifferentiationInfo.periodicCommunicationIndicator p_periodicCommunicationIndicator := *, + template UE_DifferentiationInfo.periodicTime p_periodicTime := *, + template UE_DifferentiationInfo.scheduledCommunicationTime p_scheduledCommunicationTime := *, + template UE_DifferentiationInfo.stationaryIndication p_stationaryIndication := *, + template UE_DifferentiationInfo.trafficProfile p_trafficProfile := *, + template UE_DifferentiationInfo.batteryIndication p_batteryIndication := *, + template UE_DifferentiationInfo.iE_Extensions p_iE_Extensions := * + ) := { + periodicCommunicationIndicator := p_periodicCommunicationIndicator, + periodicTime := p_periodicTime, + scheduledCommunicationTime := p_scheduledCommunicationTime, + stationaryIndication := p_stationaryIndication, + trafficProfile := p_trafficProfile, + batteryIndication := p_batteryIndication, + iE_Extensions := p_iE_Extensions + } // End of template mw_uE_DifferentiationInfo + + template (present) UEHistoryInformationFromTheUE mw_uEHistoryInformationFromTheUE_nR( + template (present) NRMobilityHistoryReport p_nR := ? + ) := { + nR := p_nR + } // End of template mw_uEHistoryInformationFromTheUE_nR + + template (present) UEHistoryInformationFromTheUE mw_uEHistoryInformationFromTheUE_choice_Extensions( + template (present) UEHistoryInformationFromTheUE.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_uEHistoryInformationFromTheUE_choice_Extensions + + template (present) UEIdentityIndexValue mw_uEIdentityIndexValue_indexLength10( + template (present) UEIdentityIndexValue.indexLength10 p_indexLength10 := ? + ) := { + indexLength10 := p_indexLength10 + } // End of template mw_uEIdentityIndexValue_indexLength10 + + template (present) UEIdentityIndexValue mw_uEIdentityIndexValue_choice_Extensions( + template (present) UEIdentityIndexValue.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_uEIdentityIndexValue_choice_Extensions + + template (present) UE_NGAP_IDs mw_uE_NGAP_IDs_uE_NGAP_ID_pair( + template (present) UE_NGAP_ID_pair p_uE_NGAP_ID_pair := ? + ) := { + uE_NGAP_ID_pair := p_uE_NGAP_ID_pair + } // End of template mw_uE_NGAP_IDs_uE_NGAP_ID_pair + + template (present) UE_NGAP_IDs mw_uE_NGAP_IDs_aMF_UE_NGAP_ID( + template (present) AMF_UE_NGAP_ID p_aMF_UE_NGAP_ID := ? + ) := { + aMF_UE_NGAP_ID := p_aMF_UE_NGAP_ID + } // End of template mw_uE_NGAP_IDs_aMF_UE_NGAP_ID + + template (present) UE_NGAP_IDs mw_uE_NGAP_IDs_choice_Extensions( + template (present) UE_NGAP_IDs.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_uE_NGAP_IDs_choice_Extensions + + template (present) UE_NGAP_ID_pair mw_uE_NGAP_ID_pair( + template (present) AMF_UE_NGAP_ID p_aMF_UE_NGAP_ID := ?, + template (present) RAN_UE_NGAP_ID p_rAN_UE_NGAP_ID := ?, + template UE_NGAP_ID_pair.iE_Extensions p_iE_Extensions := * + ) := { + aMF_UE_NGAP_ID := p_aMF_UE_NGAP_ID, + rAN_UE_NGAP_ID := p_rAN_UE_NGAP_ID, + iE_Extensions := p_iE_Extensions + } // End of template mw_uE_NGAP_ID_pair + + template (present) UEPagingIdentity mw_uEPagingIdentity_fiveG_S_TMSI( + template (present) FiveG_S_TMSI p_fiveG_S_TMSI := ? + ) := { + fiveG_S_TMSI := p_fiveG_S_TMSI + } // End of template mw_uEPagingIdentity_fiveG_S_TMSI + + template (present) UEPagingIdentity mw_uEPagingIdentity_choice_Extensions( + template (present) UEPagingIdentity.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_uEPagingIdentity_choice_Extensions + + template (present) UEPresence mw_uEPresence(template (present) UEPresence p_value := in_) := p_value; + + template (present) UEPresenceInAreaOfInterestItem mw_uEPresenceInAreaOfInterestItem( + template (present) LocationReportingReferenceID p_locationReportingReferenceID := ?, + template (present) UEPresence p_uEPresence := ?, + template UEPresenceInAreaOfInterestItem.iE_Extensions p_iE_Extensions := * + ) := { + locationReportingReferenceID := p_locationReportingReferenceID, + uEPresence := p_uEPresence, + iE_Extensions := p_iE_Extensions + } // End of template mw_uEPresenceInAreaOfInterestItem + + template UERadioCapabilityForPaging mw_uERadioCapabilityForPaging( + template UERadioCapabilityForPagingOfNR p_uERadioCapabilityForPagingOfNR := *, + template UERadioCapabilityForPagingOfEUTRA p_uERadioCapabilityForPagingOfEUTRA := *, + template UERadioCapabilityForPaging.iE_Extensions p_iE_Extensions := * + ) := { + uERadioCapabilityForPagingOfNR := p_uERadioCapabilityForPagingOfNR, + uERadioCapabilityForPagingOfEUTRA := p_uERadioCapabilityForPagingOfEUTRA, + iE_Extensions := p_iE_Extensions + } // End of template mw_uERadioCapabilityForPaging + + template (present) UERadioCapabilityForPaging.iE_Extensions mw_uERadioCapabilityForPaging_id_UERadioCapabilityForPagingOfNB_IoT( + template (present) UERadioCapabilityForPagingOfNB_IoT p_uERadioCapabilityForPagingOfNB_IoT := ? + ) := { + { + id := id_UERadioCapabilityForPagingOfNB_IoT, + criticality := ignore, + extensionValue := { UERadioCapabilityForPagingOfNB_IoT := p_uERadioCapabilityForPagingOfNB_IoT } + } + } // End of template mw_uERadioCapabilityForPaging_id_UERadioCapabilityForPagingOfNB_IoT + + template (present) UERetentionInformation mw_uERetentionInformation(template (present) UERetentionInformation p_value := ues_retained):= p_value; + + template (present) UERLFReportContainer mw_uERLFReportContainer_nR( + template (present) NRUERLFReportContainer p_nR := ? + ) := { + nR := p_nR + } // End of template mw_uERLFReportContainer_nR + + template (present) UERLFReportContainer mw_uERLFReportContainer_lTE( + template (present) LTEUERLFReportContainer p_lTE := ? + ) := { + lTE := p_lTE + } // End of template mw_uERLFReportContainer_lTE + + template (present) UERLFReportContainer mw_uERLFReportContainer_choice_Extensions( + template (present) UERLFReportContainer.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_uERLFReportContainer_choice_Extensions + + template (present) UESecurityCapabilities mw_uESecurityCapabilities( + template (present) NRencryptionAlgorithms p_nRencryptionAlgorithms := ?, + template (present) NRintegrityProtectionAlgorithms p_nRintegrityProtectionAlgorithms := ?, + template (present) EUTRAencryptionAlgorithms p_eUTRAencryptionAlgorithms := ?, + template (present) EUTRAintegrityProtectionAlgorithms p_eUTRAintegrityProtectionAlgorithms := ?, + template UESecurityCapabilities.iE_Extensions p_iE_Extensions := * + ) := { + nRencryptionAlgorithms := p_nRencryptionAlgorithms, + nRintegrityProtectionAlgorithms := p_nRintegrityProtectionAlgorithms, + eUTRAencryptionAlgorithms := p_eUTRAencryptionAlgorithms, + eUTRAintegrityProtectionAlgorithms := p_eUTRAintegrityProtectionAlgorithms, + iE_Extensions := p_iE_Extensions + } // End of template mw_uESecurityCapabilities + + template (present) UESliceMaximumBitRateItem mw_uESliceMaximumBitRateItem( + template (present) S_NSSAI p_s_NSSAI := ?, + template (present) BitRate p_uESliceMaximumBitRateDL := ?, + template (present) BitRate p_uESliceMaximumBitRateUL := ?, + template UESliceMaximumBitRateItem.iE_Extensions p_iE_Extensions := * + ) := { + s_NSSAI := p_s_NSSAI, + uESliceMaximumBitRateDL := p_uESliceMaximumBitRateDL, + uESliceMaximumBitRateUL := p_uESliceMaximumBitRateUL, + iE_Extensions := p_iE_Extensions + } // End of template mw_uESliceMaximumBitRateItem + + template (present) UE_UP_CIoT_Support mw_uE_UP_CIoT_Support(template (present) UE_UP_CIoT_Support p_value := supported) := p_value; + + template (present) UL_CP_SecurityInformation mw_UL_CP_SecurityInformation( + template (present) UL_NAS_MAC p_ul_NAS_MAC := ?, + template (present) UL_NAS_Count p_ul_NAS_Count := ?, + template UL_CP_SecurityInformation.iE_Extensions p_iE_Extensions := * + ) := { + ul_NAS_MAC := p_ul_NAS_MAC, + ul_NAS_Count := p_ul_NAS_Count, + iE_Extensions := p_iE_Extensions + } // End of template + + template (present) UL_NGU_UP_TNLModifyItem mw_uL_NGU_UP_TNLModifyItem( + template (present) UPTransportLayerInformation p_uL_NGU_UP_TNLInformation := ?, + template (present) UPTransportLayerInformation p_dL_NGU_UP_TNLInformation := ?, + template UL_NGU_UP_TNLModifyItem.iE_Extensions p_iE_Extensions := * + ) := { + uL_NGU_UP_TNLInformation := p_uL_NGU_UP_TNLInformation, + dL_NGU_UP_TNLInformation := p_dL_NGU_UP_TNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_uL_NGU_UP_TNLModifyItem + + template (present) UL_NGU_UP_TNLModifyItem.iE_Extensions mw_uL_NGU_UP_TNLModifyItemw_id_RedundantUL_NGU_UP_TNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_RedundantUL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_uL_NGU_UP_TNLModifyItemw_id_RedundantUL_NGU_UP_TNLInformation + + template (present) UL_NGU_UP_TNLModifyItem.iE_Extensions mw_uL_NGU_UP_TNLModifyItemw_id_RedundantDL_NGU_UP_TNLInformation( + template (present) UPTransportLayerInformation p_uPTransportLayerInformation := ? + ) := { + { + id := id_RedundantDL_NGU_UP_TNLInformation, + criticality := ignore, + extensionValue := { UPTransportLayerInformation := p_uPTransportLayerInformation } + } + } // End of template mw_uL_NGU_UP_TNLModifyItemw_id_RedundantDL_NGU_UP_TNLInformation + + template (present) UnavailableGUAMIItem mw_unavailableGUAMIItem( + template (present) GUAMI p_gUAMI := ?, + template TimerApproachForGUAMIRemoval p_timerApproachForGUAMIRemoval := *, + template AMFName p_backupAMFName := *, + template UnavailableGUAMIItem.iE_Extensions p_iE_Extensions := * + ) := { + gUAMI := p_gUAMI, + timerApproachForGUAMIRemoval := p_timerApproachForGUAMIRemoval, + backupAMFName := p_backupAMFName, + iE_Extensions := p_iE_Extensions + } // End of template mw_unavailableGUAMIItem + + template (present) ULForwarding mw_uLForwarding(template (present) ULForwarding p_value := ul_forwarding_proposed) := p_value; + + template (present) UPTransportLayerInformation mw_uPTransportLayerInformation_gTPTunnel( + template (present) GTPTunnel p_gTPTunnel := ? + ) := { + gTPTunnel := p_gTPTunnel + } // End of template mw_uPTransportLayerInformation_gTPTunnel + + template (present) UPTransportLayerInformation mw_uPTransportLayerInformation_choice_Extensions( + template (present) UPTransportLayerInformation.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_uPTransportLayerInformation_choice_Extensions + + template (present) UPTransportLayerInformationItem mw_uPTransportLayerInformationItem( + template (present) UPTransportLayerInformation p_nGU_UP_TNLInformation := ?, + template UPTransportLayerInformationItem.iE_Extensions p_iE_Extensions := * + ) := { + nGU_UP_TNLInformation := p_nGU_UP_TNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_uPTransportLayerInformationItem + + template (present) UPTransportLayerInformationItem.iE_Extensions mw_uPTransportLayerInformationItemw_id_CommonNetworkInstance( + template (present) CommonNetworkInstance p_commonNetworkInstance := ? + ) := { + { + id := id_CommonNetworkInstance, + criticality := ignore, + extensionValue := { CommonNetworkInstance := p_commonNetworkInstance } + } + } // End of template mw_uPTransportLayerInformationItemw_id_CommonNetworkInstance + + template (present) UPTransportLayerInformationPairItem mw_uPTransportLayerInformationPairItem( + template (present) UPTransportLayerInformation p_uL_NGU_UP_TNLInformation := ?, + template (present) UPTransportLayerInformation p_dL_NGU_UP_TNLInformation := ?, + template UPTransportLayerInformationPairItem.iE_Extensions p_iE_Extensions := * + ) := { + uL_NGU_UP_TNLInformation := p_uL_NGU_UP_TNLInformation, + dL_NGU_UP_TNLInformation := p_dL_NGU_UP_TNLInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_uPTransportLayerInformationPairItem + + template (present) UserLocationInformation mw_uPTransportLayerInformation_userLocationInformationEUTRA( + template (present) UserLocationInformationEUTRA p_userLocationInformationEUTRA := ? + ) := { + userLocationInformationEUTRA := p_userLocationInformationEUTRA + } // End of template mw_uPTransportLayerInformation_userLocationInformationEUTRA + + template (present) UserLocationInformation mw_uPTransportLayerInformation_userLocationInformationNR( + template (present) UserLocationInformationNR p_userLocationInformationNR := ? + ) := { + userLocationInformationNR := p_userLocationInformationNR + } // End of template mw_uPTransportLayerInformation_userLocationInformationNR + + template (present) UserLocationInformation mw_uPTransportLayerInformation_userLocationInformationN3IWF( + template (present) UserLocationInformationN3IWF p_userLocationInformationN3IWF := ? + ) := { + userLocationInformationN3IWF := p_userLocationInformationN3IWF + } // End of template mw_uPTransportLayerInformation_userLocationInformationN3IWF + + template (present) UserLocationInformation mw_userLocationInformation_choice_Extensions( + template (present) UserLocationInformation.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_userLocationInformation_choice_Extensions + + template (present) UserLocationInformation.choice_Extensions mw_userLocationInformation_id_UserLocationInformationTNGF( + template (present) UserLocationInformationTNGF p_userLocationInformationTNGF := ? + ) := { + id := id_UserLocationInformationTNGF, + criticality := ignore, + value_ := { UserLocationInformationTNGF := p_userLocationInformationTNGF } + } // End of template mw_userLocationInformation_id_UserLocationInformationTNGF + + template (present) UserLocationInformation.choice_Extensions mw_userLocationInformation_id_UserLocationInformationTWIF( + template (present) UserLocationInformationTWIF p_userLocationInformationTWIF := ? + ) := { + id := id_UserLocationInformationTWIF, + criticality := ignore, + value_ := { UserLocationInformationTWIF := p_userLocationInformationTWIF } + } // End of template mw_userLocationInformation_id_UserLocationInformationTWIF + + template (present) UserLocationInformation.choice_Extensions mw_userLocationInformation_id_UserLocationInformationW_AGF( + template (present) UserLocationInformationW_AGF p_userLocationInformationW_AGF := ? + ) := { + id := id_UserLocationInformationW_AGF, + criticality := ignore, + value_ := { UserLocationInformationW_AGF := p_userLocationInformationW_AGF } + } // End of template mw_userLocationInformation_id_UserLocationInformationW_AGF + + template (present) UserLocationInformationEUTRA mw_userLocationInformationEUTRA( + template (present) EUTRA_CGI p_eUTRA_CGI := ?, + template (present) TAI p_tAI := ?, + template TimeStamp p_timeStamp := *, + template UserLocationInformationEUTRA.iE_Extensions p_iE_Extensions := * + ) := { + eUTRA_CGI := p_eUTRA_CGI, + tAI := p_tAI, + timeStamp := p_timeStamp, + iE_Extensions := p_iE_Extensions + } // End of template mw_userLocationInformationEUTRA + + template (present) UserLocationInformationEUTRA.iE_Extensions mw_userLocationInformationEUTRA_id_PSCellInformation( + template (present) NGRAN_CGI p_nGRAN_CGI := ? + ) := { + { + id := id_PSCellInformation, + criticality := ignore, + extensionValue := { NGRAN_CGI := p_nGRAN_CGI } + } + } // End of template mw_userLocationInformationEUTRA_id_PSCellInformation + + template (present) UserLocationInformationN3IWF mw_userLocationInformationN3IWF( + template (present) TransportLayerAddress p_iPAddress := ?, + template (present) PortNumber p_portNumber := ?, + template UserLocationInformationN3IWF.iE_Extensions p_iE_Extensions := * + ) := { + iPAddress := p_iPAddress, + portNumber := p_portNumber, + iE_Extensions := p_iE_Extensions + } // End of template mw_userLocationInformationN3IWF + + template (present) UserLocationInformationN3IWF.iE_Extensions mw_userLocationInformationN3IWF_id_TAI( + template (present) TAI p_tAI := ? + ) := { + { + id := id_TAI, + criticality := ignore, + extensionValue := { TAI := p_tAI } + } + } // End of template mw_userLocationInformationN3IWF_id_TAI + + template (present) UserLocationInformationTNGF mw_userLocationInformationTNGF( + template (present) TNAP_ID p_tNAP_ID := ?, + template (present) TransportLayerAddress p_iPAddress := ?, + template (present) PortNumber p_portNumber := ?, + template UserLocationInformationTNGF.iE_Extensions p_iE_Extensions := * + ) := { + tNAP_ID := p_tNAP_ID, + iPAddress := p_iPAddress, + portNumber := p_portNumber, + iE_Extensions := p_iE_Extensions + } // End of template mw_userLocationInformationTNGF + + template (present) UserLocationInformationTNGF.iE_Extensions mw_userLocationInformationTNGF_id_TAI( + template (present) TAI p_tAI := ? + ) := { + { + id := id_TAI, + criticality := ignore, + extensionValue := { TAI := p_tAI } + } + } // End of template mw_userLocationInformationTNGF_id_TAI + + template (present) UserLocationInformationTWIF mw_userLocationInformationTWIF( + template (present) TWAP_ID p_tWAP_ID := ?, + template (present) TransportLayerAddress p_iPAddress := ?, + template (present) PortNumber p_portNumber := ?, + template UserLocationInformationTWIF.iE_Extensions p_iE_Extensions := * + ) := { + tWAP_ID := p_tWAP_ID, + iPAddress := p_iPAddress, + portNumber := p_portNumber, + iE_Extensions := p_iE_Extensions + } // End of template mw_userLocationInformationTWIF + + template (present) UserLocationInformationTWIF.iE_Extensions mw_userLocationInformationTWIF_id_TAI( + template (present) TAI p_tAI := ? + ) := { + { + id := id_TAI, + criticality := ignore, + extensionValue := { TAI := p_tAI } + } + } // End of template mw_userLocationInformationTWIF_id_TAI + + template (present) UserLocationInformationW_AGF mw_userLocationInformationW_AGF_globalLine_ID( + template (present) GlobalLine_ID p_globalLine_ID := ? + ) := { + globalLine_ID := p_globalLine_ID + } // End of template mw_userLocationInformationW_AGF_globalLine_ID + + template (present) UserLocationInformationW_AGF mw_userLocationInformationW_AGF_hFCNode_ID( + template (present) HFCNode_ID p_hFCNode_ID := ? + ) := { + hFCNode_ID := p_hFCNode_ID + } // End of template mw_userLocationInformationW_AGF_hFCNode_ID + + template (present) UserLocationInformationW_AGF mw_userLocationInformationW_AGF_choice_Extensions( + template (present) UserLocationInformationW_AGF.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_userLocationInformationW_AGF_choice_Extensions + + template (present) UserLocationInformationW_AGF.choice_Extensions mw_userLocationInformationW_AGF_id_GlobalCable_ID( + template (present) GlobalCable_ID p_globalCable_ID := ? + ) := { + id := id_GlobalCable_ID, + criticality := ignore, + value_ := { GlobalCable_ID := p_globalCable_ID } + } // End of template mw_userLocationInformationW_AGF_id_GlobalCable_ID + + template (present) UserLocationInformationW_AGF.choice_Extensions mw_userLocationInformationW_AGF_id_HFCNode_ID_new( + template (present) HFCNode_ID_new p_hFCNode_ID_new := ? + ) := { + id := id_HFCNode_ID_new, + criticality := ignore, + value_ := { HFCNode_ID_new := p_hFCNode_ID_new } + } // End of template mw_userLocationInformationW_AGF_id_HFCNode_ID_new + + template (present) UserLocationInformationW_AGF.choice_Extensions mw_userLocationInformationW_AGF_id_GlobalCable_ID_new( + template (present) GlobalCable_ID_new p_globalCable_ID_new := ? + ) := { + id := id_GlobalCable_ID_new, + criticality := ignore, + value_ := { GlobalCable_ID_new := p_globalCable_ID_new } + } // End of template mw_userLocationInformationW_AGF_id_GlobalCable_ID_new + + template (present) UserLocationInformationNR mw_userLocationInformationNR( + template (present) NR_CGI p_nR_CGI := ?, + template (present) TAI p_tAI := ?, + template TimeStamp p_timeStamp := *, + template UserLocationInformationNR.iE_Extensions p_iE_Extensions := * + ) := { + nR_CGI := p_nR_CGI, + tAI := p_tAI, + timeStamp := p_timeStamp, + iE_Extensions := p_iE_Extensions + } // End of template mw_userLocationInformationNR + + template (present) UserLocationInformationNR.iE_Extensions mw_userLocationInformationNR_id_PSCellInformation( + template (present) NGRAN_CGI p_nGRAN_CGI := ? + ) := { + { + id := id_PSCellInformation, + criticality := ignore, + extensionValue := { NGRAN_CGI := p_nGRAN_CGI } + } + } // End of template mw_userLocationInformationNR_id_PSCellInformation + + template (present) UserLocationInformationNR.iE_Extensions mw_userLocationInformationNR_id_NID( + template (present) NID p_nID := ? + ) := { + { + id := id_NID, + criticality := reject, + extensionValue := { NID := p_nID } + } + } // End of template mw_userLocationInformationNR_id_NID + + template (present) UserLocationInformationNR.iE_Extensions mw_userLocationInformationNR_id_NRNTNTAIInformation( + template (present) NRNTNTAIInformation p_nRNTNTAIInformation := ? + ) := { + { + id := id_NRNTNTAIInformation, + criticality := ignore, + extensionValue := { NRNTNTAIInformation := p_nRNTNTAIInformation } + } + } // End of template mw_userLocationInformationNR_id_NRNTNTAIInformation + + template (present) UserPlaneSecurityInformation mw_userPlaneSecurityInformation( + template (present) SecurityResult p_securityResult := ?, + template (present) SecurityIndication p_securityIndication := ?, + template UserPlaneSecurityInformation.iE_Extensions p_iE_Extensions := * + ) := { + securityResult := p_securityResult, + securityIndication := p_securityIndication, + iE_Extensions := p_iE_Extensions + } // End of template mw_userPlaneSecurityInformation + + template (present) VolumeTimedReport_Item mw_volumeTimedReport_Item( + template (present) VolumeTimedReport_Item.startTimeStamp p_startTimeStamp := ?, + template (present) VolumeTimedReport_Item.endTimeStamp p_endTimeStamp := ?, + template (present) VolumeTimedReport_Item.usageCountUL p_usageCountUL := ?, + template (present) VolumeTimedReport_Item.usageCountDL p_usageCountDL := ?, + template VolumeTimedReport_Item.iE_Extensions p_iE_Extensions := * + ) := { + startTimeStamp := p_startTimeStamp, + endTimeStamp := p_endTimeStamp, + usageCountUL := p_usageCountUL, + usageCountDL := p_usageCountDL, + iE_Extensions := p_iE_Extensions + } // End of template mw_volumeTimedReport_Item + + template (present) W_AGF_ID mw_w_AGF_ID_w_AGF_ID( + template (present) W_AGF_ID.w_AGF_ID p_w_AGF_ID := ? + ) := { + w_AGF_ID := p_w_AGF_ID + } // End of template mw_w_AGF_ID_w_AGF_ID + + template (present) W_AGF_ID mw_w_AGF_ID_choice_Extensions( + template (present) W_AGF_ID.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_w_AGF_ID_choice_Extensions + + template (present) WarningAreaList mw_warningAreaList_eUTRA_CGIListForWarning( + template (present) EUTRA_CGIListForWarning p_eUTRA_CGIListForWarning := ? + ) := { + eUTRA_CGIListForWarning := p_eUTRA_CGIListForWarning + } // End of template mw_warningAreaList_eUTRA_CGIListForWarning + + template (present) WarningAreaList mw_warningAreaList_nR_CGIListForWarning( + template (present) NR_CGIListForWarning p_nR_CGIListForWarning := ? + ) := { + nR_CGIListForWarning := p_nR_CGIListForWarning + } // End of template mw_warningAreaList_nR_CGIListForWarning + + template (present) WarningAreaList mw_warningAreaList_tAIListForWarning( + template (present) TAIListForWarning p_tAIListForWarning := ? + ) := { + tAIListForWarning := p_tAIListForWarning + } // End of template mw_warningAreaList_tAIListForWarning + + template (present) WarningAreaList mw_warningAreaList_emergencyAreaIDList( + template (present) EmergencyAreaIDList p_emergencyAreaIDList := ? + ) := { + emergencyAreaIDList := p_emergencyAreaIDList + } // End of template mw_warningAreaList_emergencyAreaIDList + + template (present) WarningAreaList mw_warningAreaList_choice_Extensions( + template (present) WarningAreaList.choice_Extensions p_choice_Extensions := ? + ) := { + choice_Extensions := p_choice_Extensions + } // End of template mw_warningAreaList_choice_Extensions + + template (present) WLANMeasurementConfiguration mw_wLANMeasurementConfiguration( + template (present) WLANMeasConfig p_wlanMeasConfig := ?, + template WLANMeasConfigNameList p_wlanMeasConfigNameList := *, + template WLANMeasurementConfiguration.wlan_rssi p_wlan_rssi := *, + template WLANMeasurementConfiguration.wlan_rtt p_wlan_rtt := *, + template WLANMeasurementConfiguration.iE_Extensions p_iE_Extensions := * + ) := { + wlanMeasConfig := p_wlanMeasConfig, + wlanMeasConfigNameList := p_wlanMeasConfigNameList, + wlan_rssi := p_wlan_rssi, + wlan_rtt := p_wlan_rtt, + iE_Extensions := p_iE_Extensions + } // End of template mw_wLANMeasurementConfiguration + + template (present) WLANMeasConfigNameItem mw_wLANMeasConfigNameItem( + template (present) WLANName p_wLANName := ?, + template WLANMeasConfigNameItem.iE_Extensions p_iE_Extensions := * + ) := { + wLANName := p_wLANName, + iE_Extensions := p_iE_Extensions + } // End of template mw_wLANMeasConfigNameItem + + template (present) WLANMeasConfig mw_wLANMeasConfig(template (present) WLANMeasConfig p_value := ?) := p_value; + + template (present) WUS_Assistance_Information mw_wUS_Assistance_Information( + template (present) PagingProbabilityInformation p_pagingProbabilityInformation := ?, + template WUS_Assistance_Information.iE_Extensions p_iE_Extensions := * + ) := { + pagingProbabilityInformation := p_pagingProbabilityInformation, + iE_Extensions := p_iE_Extensions + } // End of template mw_wUS_Assistance_Information + + template (present) XnExtTLA_Item mw_xnExtTLA_Item( + template TransportLayerAddress p_iPsecTLA := *, + template XnGTP_TLAs p_gTP_TLAs := *, + template XnExtTLA_Item.iE_Extensions p_iE_Extensions := * + ) := { + iPsecTLA := p_iPsecTLA, + gTP_TLAs := p_gTP_TLAs, + iE_Extensions := p_iE_Extensions + } // End of template mw_xnExtTLA_Item + + template (present) XnExtTLA_Item.iE_Extensions mw_xnExtTLA_Item_id_SCTP_TLAs( + template (present) SCTP_TLAs p_sCTP_TLAs := ? + ) := { + { + id := id_SCTP_TLAs, + criticality := ignore, + extensionValue := { SCTP_TLAs := p_sCTP_TLAs } + } + } // End of template mw_xnExtTLA_Item_id_SCTP_TLAs + + template (present) XnTNLConfigurationInfo mw_xnTNLConfigurationInfo( + template (present) XnTLAs p_xnTransportLayerAddresses := ?, + template XnExtTLAs p_xnExtendedTransportLayerAddresses := *, + template XnTNLConfigurationInfo.iE_Extensions p_iE_Extensions := * + ) := { + xnTransportLayerAddresses := p_xnTransportLayerAddresses, + xnExtendedTransportLayerAddresses := p_xnExtendedTransportLayerAddresses, + iE_Extensions := p_iE_Extensions + } // End of template mw_xnTNLConfigurationInfo + + template (present) PLMN_List mw_PLMN_List( + template (present) IEI8_Type p_iei := '4A'O, + template (present) Type4Length_Type p_iel := ?, + template (present) NAS_PlmnIdList_Type p_plmnList + ) := { + iei := p_iei, + iel := p_iel, + plmnList := p_plmnList + } // End of template mw_PLMN_List + + } // End of group receive + + } // End of group Information_elements + + } // End of group g_NGAP + + group Functions_For_Templates{ + } // End of group functionsForTemplates + +} // End of module LibNGAP_Templates diff --git a/ttcn/LibNGAP/lib/LibNGAP_TypesAndValues.ttcn b/ttcn/LibNGAP/lib/LibNGAP_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..c137387b7faba2f999c63b025f2924ed2313c3ee --- /dev/null +++ b/ttcn/LibNGAP/lib/LibNGAP_TypesAndValues.ttcn @@ -0,0 +1,21 @@ +/** + * @author ETSI / TTF033 + * @version $URL$ + * $Id$ + * @desc This module provides TypesAndValues for NGAP protocol. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI TS 138 413 / 3GPP TS 38.413 version 16.12 Release 16 + */ +module LibNGAP_TypesAndValues { + + // LibNGAP + import from NGAP_IEs language "ASN.1:2002" all; + import from NGAP_PDU_Contents language "ASN.1:2002" all; + import from NGAP_PDU_Descriptions language "ASN.1:2002" all; + +} with { + encode "LibNGAP_codec" +} // End of module LibNGAP_TypesAndValues diff --git a/ttcn/LibNGAP/lib/asn1/Makefile.am.asn1convert b/ttcn/LibNGAP/lib/asn1/Makefile.am.asn1convert new file mode 100644 index 0000000000000000000000000000000000000000..849c1296ceb0a1e8a0a9a862cce9db038ec5d5c3 --- /dev/null +++ b/ttcn/LibNGAP/lib/asn1/Makefile.am.asn1convert @@ -0,0 +1,14 @@ +include Makefile.am.libasncodec + +bin_PROGRAMS += asn1convert +asn1convert_CFLAGS = $(ASN_MODULE_CFLAGS) +asn1convert_CPPFLAGS = -I$(top_srcdir)/-DASN_PDU_COLLECTION +asn1convert_LDADD = libasncodec.la +asn1convert_SOURCES = \ + converter-example.c\ + pdu_collection.c +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c NGAP_CommonDataTypes.asn + diff --git a/ttcn/LibNGAP/lib/asn1/NGAP_CommonDataTypes.asn b/ttcn/LibNGAP/lib/asn1/NGAP_CommonDataTypes.asn new file mode 100644 index 0000000000000000000000000000000000000000..e739dd039bd39622993392cb4649e0429deaa76e --- /dev/null +++ b/ttcn/LibNGAP/lib/asn1/NGAP_CommonDataTypes.asn @@ -0,0 +1,34 @@ +-- 3GPP TS 38.413 V17.5.0 (2023-06) +-- 9.4.6 Common Definitions +-- ************************************************************** +-- +-- Common definitions +-- +-- ************************************************************** + +NGAP-CommonDataTypes { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-Access (22) modules (3) ngap (1) version1 (1) ngap-CommonDataTypes (3) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +Criticality ::= ENUMERATED { reject, ignore, notify } + +Presence ::= ENUMERATED { optional, conditional, mandatory } + +PrivateIE-ID ::= CHOICE { + local INTEGER (0..65535), + global OBJECT IDENTIFIER +} + +ProcedureCode ::= INTEGER (0..255) + +ProtocolExtensionID ::= INTEGER (0..65535) + +ProtocolIE-ID ::= INTEGER (0..65535) + +TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome } + +END diff --git a/ttcn/LibNGAP/lib/asn1/NGAP_Constants.asn b/ttcn/LibNGAP/lib/asn1/NGAP_Constants.asn new file mode 100644 index 0000000000000000000000000000000000000000..70f31a86126b3c3aa4501d1e92959b2905a68449 --- /dev/null +++ b/ttcn/LibNGAP/lib/asn1/NGAP_Constants.asn @@ -0,0 +1,591 @@ +-- 3GPP TS 38.413 V17.5.0 (2023-06) +-- 9.4.7 Constant Definitions +-- ************************************************************** +-- +-- Constant definitions +-- +-- ************************************************************** + +NGAP-Constants { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-Access (22) modules (3) ngap (1) version1 (1) ngap-Constants (4) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + + ProcedureCode, + ProtocolIE-ID +FROM NGAP-CommonDataTypes; + + +-- ************************************************************** +-- +-- Elementary Procedures +-- +-- ************************************************************** + +id-AMFConfigurationUpdate ProcedureCode ::= 0 +id-AMFStatusIndication ProcedureCode ::= 1 +id-CellTrafficTrace ProcedureCode ::= 2 +id-DeactivateTrace ProcedureCode ::= 3 +id-DownlinkNASTransport ProcedureCode ::= 4 +id-DownlinkNonUEAssociatedNRPPaTransport ProcedureCode ::= 5 +id-DownlinkRANConfigurationTransfer ProcedureCode ::= 6 +id-DownlinkRANStatusTransfer ProcedureCode ::= 7 +id-DownlinkUEAssociatedNRPPaTransport ProcedureCode ::= 8 +id-ErrorIndication ProcedureCode ::= 9 +id-HandoverCancel ProcedureCode ::= 10 +id-HandoverNotification ProcedureCode ::= 11 +id-HandoverPreparation ProcedureCode ::= 12 +id-HandoverResourceAllocation ProcedureCode ::= 13 +id-InitialContextSetup ProcedureCode ::= 14 +id-InitialUEMessage ProcedureCode ::= 15 +id-LocationReportingControl ProcedureCode ::= 16 +id-LocationReportingFailureIndication ProcedureCode ::= 17 +id-LocationReport ProcedureCode ::= 18 +id-NASNonDeliveryIndication ProcedureCode ::= 19 +id-NGReset ProcedureCode ::= 20 +id-NGSetup ProcedureCode ::= 21 +id-OverloadStart ProcedureCode ::= 22 +id-OverloadStop ProcedureCode ::= 23 +id-Paging ProcedureCode ::= 24 +id-PathSwitchRequest ProcedureCode ::= 25 +id-PDUSessionResourceModify ProcedureCode ::= 26 +id-PDUSessionResourceModifyIndication ProcedureCode ::= 27 +id-PDUSessionResourceRelease ProcedureCode ::= 28 +id-PDUSessionResourceSetup ProcedureCode ::= 29 +id-PDUSessionResourceNotify ProcedureCode ::= 30 +id-PrivateMessage ProcedureCode ::= 31 +id-PWSCancel ProcedureCode ::= 32 +id-PWSFailureIndication ProcedureCode ::= 33 +id-PWSRestartIndication ProcedureCode ::= 34 +id-RANConfigurationUpdate ProcedureCode ::= 35 +id-RerouteNASRequest ProcedureCode ::= 36 +id-RRCInactiveTransitionReport ProcedureCode ::= 37 +id-TraceFailureIndication ProcedureCode ::= 38 +id-TraceStart ProcedureCode ::= 39 +id-UEContextModification ProcedureCode ::= 40 +id-UEContextRelease ProcedureCode ::= 41 +id-UEContextReleaseRequest ProcedureCode ::= 42 +id-UERadioCapabilityCheck ProcedureCode ::= 43 +id-UERadioCapabilityInfoIndication ProcedureCode ::= 44 +id-UETNLABindingRelease ProcedureCode ::= 45 +id-UplinkNASTransport ProcedureCode ::= 46 +id-UplinkNonUEAssociatedNRPPaTransport ProcedureCode ::= 47 +id-UplinkRANConfigurationTransfer ProcedureCode ::= 48 +id-UplinkRANStatusTransfer ProcedureCode ::= 49 +id-UplinkUEAssociatedNRPPaTransport ProcedureCode ::= 50 +id-WriteReplaceWarning ProcedureCode ::= 51 +id-SecondaryRATDataUsageReport ProcedureCode ::= 52 +id-UplinkRIMInformationTransfer ProcedureCode ::= 53 +id-DownlinkRIMInformationTransfer ProcedureCode ::= 54 +id-RetrieveUEInformation ProcedureCode ::= 55 +id-UEInformationTransfer ProcedureCode ::= 56 +id-RANCPRelocationIndication ProcedureCode ::= 57 +id-UEContextResume ProcedureCode ::= 58 +id-UEContextSuspend ProcedureCode ::= 59 +id-UERadioCapabilityIDMapping ProcedureCode ::= 60 +id-HandoverSuccess ProcedureCode ::= 61 +id-UplinkRANEarlyStatusTransfer ProcedureCode ::= 62 +id-DownlinkRANEarlyStatusTransfer ProcedureCode ::= 63 +id-AMFCPRelocationIndication ProcedureCode ::= 64 +id-ConnectionEstablishmentIndication ProcedureCode ::= 65 +id-BroadcastSessionModification ProcedureCode ::= 66 +id-BroadcastSessionRelease ProcedureCode ::= 67 +id-BroadcastSessionSetup ProcedureCode ::= 68 +id-DistributionSetup ProcedureCode ::= 69 +id-DistributionRelease ProcedureCode ::= 70 +id-MulticastSessionActivation ProcedureCode ::= 71 +id-MulticastSessionDeactivation ProcedureCode ::= 72 +id-MulticastSessionUpdate ProcedureCode ::= 73 +id-MulticastGroupPaging ProcedureCode ::= 74 +id-BroadcastSessionReleaseRequired ProcedureCode ::= 75 + +-- ************************************************************** +-- +-- Extension constants +-- +-- ************************************************************** + +maxPrivateIEs INTEGER ::= 65535 +maxProtocolExtensions INTEGER ::= 65535 +maxProtocolIEs INTEGER ::= 65535 + +-- ************************************************************** +-- +-- Lists +-- +-- ************************************************************** + + maxnoofAllowedAreas INTEGER ::= 16 + maxnoofAllowedCAGsperPLMN INTEGER ::= 256 + maxnoofAllowedS-NSSAIs INTEGER ::= 8 + maxnoofBluetoothName INTEGER ::= 4 + maxnoofBPLMNs INTEGER ::= 12 + maxnoofCAGSperCell INTEGER ::= 64 + maxnoofCellIDforMDT INTEGER ::= 32 + maxnoofCellIDforWarning INTEGER ::= 65535 + maxnoofCellinAoI INTEGER ::= 256 + maxnoofCellinEAI INTEGER ::= 65535 + maxnoofCellinTAI INTEGER ::= 65535 + maxnoofCellsforMBS INTEGER ::= 8192 + maxnoofCellsingNB INTEGER ::= 16384 + maxnoofCellsinngeNB INTEGER ::= 256 + maxnoofCellsinNGRANNode INTEGER ::= 16384 + maxnoofCellsinUEHistoryInfo INTEGER ::= 16 + maxnoofCellsUEMovingTrajectory INTEGER ::= 16 + maxnoofDRBs INTEGER ::= 32 + maxnoofEmergencyAreaID INTEGER ::= 65535 + maxnoofEAIforRestart INTEGER ::= 256 + maxnoofEPLMNs INTEGER ::= 15 + maxnoofEPLMNsPlusOne INTEGER ::= 16 + maxnoofE-RABs INTEGER ::= 256 + maxnoofErrors INTEGER ::= 256 + maxnoofExtSliceItems INTEGER ::= 65535 + maxnoofForbTACs INTEGER ::= 4096 + maxnoofFreqforMDT INTEGER ::= 8 + maxnoofMBSAreaSessionIDs INTEGER ::= 256 + maxnoofMBSFSAs INTEGER ::= 64 + maxnoofMBSQoSFlows INTEGER ::= 64 + maxnoofMBSSessions INTEGER ::= 32 + maxnoofMBSSessionsofUE INTEGER ::= 256 + maxnoofMBSServiceAreaInformation INTEGER ::= 256 + maxnoofMDTPLMNs INTEGER ::= 16 + maxnoofMRBs INTEGER ::= 32 + maxnoofMultiConnectivity INTEGER ::= 4 + maxnoofMultiConnectivityMinusOne INTEGER ::= 3 + maxnoofNeighPCIforMDT INTEGER ::= 32 + maxnoofNGAPIESupportInfo INTEGER ::= 32 + maxnoofNGConnectionsToReset INTEGER ::= 65536 + maxnoofNRCellBands INTEGER ::= 32 + maxnoofNSAGs INTEGER ::= 256 + maxnoofPagingAreas INTEGER ::= 64 + maxnoofPC5QoSFlows INTEGER ::= 2048 + maxnoofPDUSessions INTEGER ::= 256 + maxnoofPLMNs INTEGER ::= 12 + maxnoofPSCellsPerPrimaryCellinUEHistoryInfo INTEGER ::= 8 + maxnoofQosFlows INTEGER ::= 64 + maxnoofQosParaSets INTEGER ::= 8 + maxnoofRANNodeinAoI INTEGER ::= 64 + maxnoofRecommendedCells INTEGER ::= 16 + maxnoofRecommendedRANNodes INTEGER ::= 16 + maxnoofAoI INTEGER ::= 64 + maxnoofReportedCells INTEGER ::= 256 + maxnoofSensorName INTEGER ::= 3 + maxnoofServedGUAMIs INTEGER ::= 256 + maxnoofSliceItems INTEGER ::= 1024 + maxnoofSuccessfulHOReports INTEGER ::= 64 + maxnoofTACs INTEGER ::= 256 + maxnoofTACsinNTN INTEGER ::= 12 + maxnoofTAforMDT INTEGER ::= 8 + maxnoofTAIforInactive INTEGER ::= 16 + maxnoofTAIforMBS INTEGER ::= 1024 + maxnoofTAIforPaging INTEGER ::= 16 + maxnoofTAIforRestart INTEGER ::= 2048 + maxnoofTAIforWarning INTEGER ::= 65535 + maxnoofTAIinAoI INTEGER ::= 16 + maxnoofTimePeriods INTEGER ::= 2 + maxnoofTNLAssociations INTEGER ::= 32 + maxnoofUEsforPaging INTEGER ::= 4096 + maxnoofWLANName INTEGER ::= 4 + maxnoofXnExtTLAs INTEGER ::= 16 + maxnoofXnGTP-TLAs INTEGER ::= 16 + maxnoofXnTLAs INTEGER ::= 2 + maxnoofCandidateCells INTEGER ::= 32 + maxnoofTargetS-NSSAIs INTEGER ::= 8 + maxNRARFCN INTEGER ::= 3279165 + maxnoofCellIDforQMC INTEGER ::= 32 + maxnoofPLMNforQMC INTEGER ::= 16 + maxnoofUEAppLayerMeas INTEGER ::= 16 + maxnoofSNSSAIforQMC INTEGER ::= 16 + maxnoofTAforQMC INTEGER ::= 8 + maxnoofThresholdsForExcessPacketDelay INTEGER ::= 255 + +-- ************************************************************** +-- +-- IEs +-- +-- ************************************************************** + + id-AllowedNSSAI ProtocolIE-ID ::= 0 + id-AMFName ProtocolIE-ID ::= 1 + id-AMFOverloadResponse ProtocolIE-ID ::= 2 + id-AMFSetID ProtocolIE-ID ::= 3 + id-AMF-TNLAssociationFailedToSetupList ProtocolIE-ID ::= 4 + id-AMF-TNLAssociationSetupList ProtocolIE-ID ::= 5 + id-AMF-TNLAssociationToAddList ProtocolIE-ID ::= 6 + id-AMF-TNLAssociationToRemoveList ProtocolIE-ID ::= 7 + id-AMF-TNLAssociationToUpdateList ProtocolIE-ID ::= 8 + id-AMFTrafficLoadReductionIndication ProtocolIE-ID ::= 9 + id-AMF-UE-NGAP-ID ProtocolIE-ID ::= 10 + id-AssistanceDataForPaging ProtocolIE-ID ::= 11 + id-BroadcastCancelledAreaList ProtocolIE-ID ::= 12 + id-BroadcastCompletedAreaList ProtocolIE-ID ::= 13 + id-CancelAllWarningMessages ProtocolIE-ID ::= 14 + id-Cause ProtocolIE-ID ::= 15 + id-CellIDListForRestart ProtocolIE-ID ::= 16 + id-ConcurrentWarningMessageInd ProtocolIE-ID ::= 17 + id-CoreNetworkAssistanceInformationForInactive ProtocolIE-ID ::= 18 + id-CriticalityDiagnostics ProtocolIE-ID ::= 19 + id-DataCodingScheme ProtocolIE-ID ::= 20 + id-DefaultPagingDRX ProtocolIE-ID ::= 21 + id-DirectForwardingPathAvailability ProtocolIE-ID ::= 22 + id-EmergencyAreaIDListForRestart ProtocolIE-ID ::= 23 + id-EmergencyFallbackIndicator ProtocolIE-ID ::= 24 + id-EUTRA-CGI ProtocolIE-ID ::= 25 + id-FiveG-S-TMSI ProtocolIE-ID ::= 26 + id-GlobalRANNodeID ProtocolIE-ID ::= 27 + id-GUAMI ProtocolIE-ID ::= 28 + id-HandoverType ProtocolIE-ID ::= 29 + id-IMSVoiceSupportIndicator ProtocolIE-ID ::= 30 + id-IndexToRFSP ProtocolIE-ID ::= 31 + id-InfoOnRecommendedCellsAndRANNodesForPaging ProtocolIE-ID ::= 32 + id-LocationReportingRequestType ProtocolIE-ID ::= 33 + id-MaskedIMEISV ProtocolIE-ID ::= 34 + id-MessageIdentifier ProtocolIE-ID ::= 35 + id-MobilityRestrictionList ProtocolIE-ID ::= 36 + id-NASC ProtocolIE-ID ::= 37 + id-NAS-PDU ProtocolIE-ID ::= 38 + id-NASSecurityParametersFromNGRAN ProtocolIE-ID ::= 39 + id-NewAMF-UE-NGAP-ID ProtocolIE-ID ::= 40 + id-NewSecurityContextInd ProtocolIE-ID ::= 41 + id-NGAP-Message ProtocolIE-ID ::= 42 + id-NGRAN-CGI ProtocolIE-ID ::= 43 + id-NGRANTraceID ProtocolIE-ID ::= 44 + id-NR-CGI ProtocolIE-ID ::= 45 + id-NRPPa-PDU ProtocolIE-ID ::= 46 + id-NumberOfBroadcastsRequested ProtocolIE-ID ::= 47 + id-OldAMF ProtocolIE-ID ::= 48 + id-OverloadStartNSSAIList ProtocolIE-ID ::= 49 + id-PagingDRX ProtocolIE-ID ::= 50 + id-PagingOrigin ProtocolIE-ID ::= 51 + id-PagingPriority ProtocolIE-ID ::= 52 + id-PDUSessionResourceAdmittedList ProtocolIE-ID ::= 53 + id-PDUSessionResourceFailedToModifyListModRes ProtocolIE-ID ::= 54 + id-PDUSessionResourceFailedToSetupListCxtRes ProtocolIE-ID ::= 55 + id-PDUSessionResourceFailedToSetupListHOAck ProtocolIE-ID ::= 56 + id-PDUSessionResourceFailedToSetupListPSReq ProtocolIE-ID ::= 57 + id-PDUSessionResourceFailedToSetupListSURes ProtocolIE-ID ::= 58 + id-PDUSessionResourceHandoverList ProtocolIE-ID ::= 59 + id-PDUSessionResourceListCxtRelCpl ProtocolIE-ID ::= 60 + id-PDUSessionResourceListHORqd ProtocolIE-ID ::= 61 + id-PDUSessionResourceModifyListModCfm ProtocolIE-ID ::= 62 + id-PDUSessionResourceModifyListModInd ProtocolIE-ID ::= 63 + id-PDUSessionResourceModifyListModReq ProtocolIE-ID ::= 64 + id-PDUSessionResourceModifyListModRes ProtocolIE-ID ::= 65 + id-PDUSessionResourceNotifyList ProtocolIE-ID ::= 66 + id-PDUSessionResourceReleasedListNot ProtocolIE-ID ::= 67 + id-PDUSessionResourceReleasedListPSAck ProtocolIE-ID ::= 68 + id-PDUSessionResourceReleasedListPSFail ProtocolIE-ID ::= 69 + id-PDUSessionResourceReleasedListRelRes ProtocolIE-ID ::= 70 + id-PDUSessionResourceSetupListCxtReq ProtocolIE-ID ::= 71 + id-PDUSessionResourceSetupListCxtRes ProtocolIE-ID ::= 72 + id-PDUSessionResourceSetupListHOReq ProtocolIE-ID ::= 73 + id-PDUSessionResourceSetupListSUReq ProtocolIE-ID ::= 74 + id-PDUSessionResourceSetupListSURes ProtocolIE-ID ::= 75 + id-PDUSessionResourceToBeSwitchedDLList ProtocolIE-ID ::= 76 + id-PDUSessionResourceSwitchedList ProtocolIE-ID ::= 77 + id-PDUSessionResourceToReleaseListHOCmd ProtocolIE-ID ::= 78 + id-PDUSessionResourceToReleaseListRelCmd ProtocolIE-ID ::= 79 + id-PLMNSupportList ProtocolIE-ID ::= 80 + id-PWSFailedCellIDList ProtocolIE-ID ::= 81 + id-RANNodeName ProtocolIE-ID ::= 82 + id-RANPagingPriority ProtocolIE-ID ::= 83 + id-RANStatusTransfer-TransparentContainer ProtocolIE-ID ::= 84 + id-RAN-UE-NGAP-ID ProtocolIE-ID ::= 85 + id-RelativeAMFCapacity ProtocolIE-ID ::= 86 + id-RepetitionPeriod ProtocolIE-ID ::= 87 + id-ResetType ProtocolIE-ID ::= 88 + id-RoutingID ProtocolIE-ID ::= 89 + id-RRCEstablishmentCause ProtocolIE-ID ::= 90 + id-RRCInactiveTransitionReportRequest ProtocolIE-ID ::= 91 + id-RRCState ProtocolIE-ID ::= 92 + id-SecurityContext ProtocolIE-ID ::= 93 + id-SecurityKey ProtocolIE-ID ::= 94 + id-SerialNumber ProtocolIE-ID ::= 95 + id-ServedGUAMIList ProtocolIE-ID ::= 96 + id-SliceSupportList ProtocolIE-ID ::= 97 + id-SONConfigurationTransferDL ProtocolIE-ID ::= 98 + id-SONConfigurationTransferUL ProtocolIE-ID ::= 99 + id-SourceAMF-UE-NGAP-ID ProtocolIE-ID ::= 100 + id-SourceToTarget-TransparentContainer ProtocolIE-ID ::= 101 + id-SupportedTAList ProtocolIE-ID ::= 102 + id-TAIListForPaging ProtocolIE-ID ::= 103 + id-TAIListForRestart ProtocolIE-ID ::= 104 + id-TargetID ProtocolIE-ID ::= 105 + id-TargetToSource-TransparentContainer ProtocolIE-ID ::= 106 + id-TimeToWait ProtocolIE-ID ::= 107 + id-TraceActivation ProtocolIE-ID ::= 108 + id-TraceCollectionEntityIPAddress ProtocolIE-ID ::= 109 + id-UEAggregateMaximumBitRate ProtocolIE-ID ::= 110 + id-UE-associatedLogicalNG-connectionList ProtocolIE-ID ::= 111 + id-UEContextRequest ProtocolIE-ID ::= 112 + --WS extension + id-Unknown-113 ProtocolIE-ID ::= 113 + id-UE-NGAP-IDs ProtocolIE-ID ::= 114 + id-UEPagingIdentity ProtocolIE-ID ::= 115 + id-UEPresenceInAreaOfInterestList ProtocolIE-ID ::= 116 + id-UERadioCapability ProtocolIE-ID ::= 117 + id-UERadioCapabilityForPaging ProtocolIE-ID ::= 118 + id-UESecurityCapabilities ProtocolIE-ID ::= 119 + id-UnavailableGUAMIList ProtocolIE-ID ::= 120 + id-UserLocationInformation ProtocolIE-ID ::= 121 + id-WarningAreaList ProtocolIE-ID ::= 122 + id-WarningMessageContents ProtocolIE-ID ::= 123 + id-WarningSecurityInfo ProtocolIE-ID ::= 124 + id-WarningType ProtocolIE-ID ::= 125 + id-AdditionalUL-NGU-UP-TNLInformation ProtocolIE-ID ::= 126 + id-DataForwardingNotPossible ProtocolIE-ID ::= 127 + id-DL-NGU-UP-TNLInformation ProtocolIE-ID ::= 128 + id-NetworkInstance ProtocolIE-ID ::= 129 + id-PDUSessionAggregateMaximumBitRate ProtocolIE-ID ::= 130 + id-PDUSessionResourceFailedToModifyListModCfm ProtocolIE-ID ::= 131 + id-PDUSessionResourceFailedToSetupListCxtFail ProtocolIE-ID ::= 132 + id-PDUSessionResourceListCxtRelReq ProtocolIE-ID ::= 133 + id-PDUSessionType ProtocolIE-ID ::= 134 + id-QosFlowAddOrModifyRequestList ProtocolIE-ID ::= 135 + id-QosFlowSetupRequestList ProtocolIE-ID ::= 136 + id-QosFlowToReleaseList ProtocolIE-ID ::= 137 + id-SecurityIndication ProtocolIE-ID ::= 138 + id-UL-NGU-UP-TNLInformation ProtocolIE-ID ::= 139 + id-UL-NGU-UP-TNLModifyList ProtocolIE-ID ::= 140 + id-WarningAreaCoordinates ProtocolIE-ID ::= 141 + id-PDUSessionResourceSecondaryRATUsageList ProtocolIE-ID ::= 142 + id-HandoverFlag ProtocolIE-ID ::= 143 + id-SecondaryRATUsageInformation ProtocolIE-ID ::= 144 + id-PDUSessionResourceReleaseResponseTransfer ProtocolIE-ID ::= 145 + id-RedirectionVoiceFallback ProtocolIE-ID ::= 146 + id-UERetentionInformation ProtocolIE-ID ::= 147 + id-S-NSSAI ProtocolIE-ID ::= 148 + id-PSCellInformation ProtocolIE-ID ::= 149 + id-LastEUTRAN-PLMNIdentity ProtocolIE-ID ::= 150 + id-MaximumIntegrityProtectedDataRate-DL ProtocolIE-ID ::= 151 + id-AdditionalDLForwardingUPTNLInformation ProtocolIE-ID ::= 152 + id-AdditionalDLUPTNLInformationForHOList ProtocolIE-ID ::= 153 + id-AdditionalNGU-UP-TNLInformation ProtocolIE-ID ::= 154 + id-AdditionalDLQosFlowPerTNLInformation ProtocolIE-ID ::= 155 + id-SecurityResult ProtocolIE-ID ::= 156 + id-ENDC-SONConfigurationTransferDL ProtocolIE-ID ::= 157 + id-ENDC-SONConfigurationTransferUL ProtocolIE-ID ::= 158 + id-OldAssociatedQosFlowList-ULendmarkerexpected ProtocolIE-ID ::= 159 + id-CNTypeRestrictionsForEquivalent ProtocolIE-ID ::= 160 + id-CNTypeRestrictionsForServing ProtocolIE-ID ::= 161 + id-NewGUAMI ProtocolIE-ID ::= 162 + id-ULForwarding ProtocolIE-ID ::= 163 + id-ULForwardingUP-TNLInformation ProtocolIE-ID ::= 164 + id-CNAssistedRANTuning ProtocolIE-ID ::= 165 + id-CommonNetworkInstance ProtocolIE-ID ::= 166 + id-NGRAN-TNLAssociationToRemoveList ProtocolIE-ID ::= 167 + id-TNLAssociationTransportLayerAddressNGRAN ProtocolIE-ID ::= 168 + id-EndpointIPAddressAndPort ProtocolIE-ID ::= 169 + id-LocationReportingAdditionalInfo ProtocolIE-ID ::= 170 + id-SourceToTarget-AMFInformationReroute ProtocolIE-ID ::= 171 + id-AdditionalULForwardingUPTNLInformation ProtocolIE-ID ::= 172 + id-SCTP-TLAs ProtocolIE-ID ::= 173 + id-SelectedPLMNIdentity ProtocolIE-ID ::= 174 + id-RIMInformationTransfer ProtocolIE-ID ::= 175 + id-GUAMIType ProtocolIE-ID ::= 176 + id-SRVCCOperationPossible ProtocolIE-ID ::= 177 + id-TargetRNC-ID ProtocolIE-ID ::= 178 + id-RAT-Information ProtocolIE-ID ::= 179 + id-ExtendedRATRestrictionInformation ProtocolIE-ID ::= 180 + id-QosMonitoringRequest ProtocolIE-ID ::= 181 + id-SgNB-UE-X2AP-ID ProtocolIE-ID ::= 182 + id-AdditionalRedundantDL-NGU-UP-TNLInformation ProtocolIE-ID ::= 183 + id-AdditionalRedundantDLQosFlowPerTNLInformation ProtocolIE-ID ::= 184 + id-AdditionalRedundantNGU-UP-TNLInformation ProtocolIE-ID ::= 185 + id-AdditionalRedundantUL-NGU-UP-TNLInformation ProtocolIE-ID ::= 186 + id-CNPacketDelayBudgetDL ProtocolIE-ID ::= 187 + id-CNPacketDelayBudgetUL ProtocolIE-ID ::= 188 + id-ExtendedPacketDelayBudget ProtocolIE-ID ::= 189 + id-RedundantCommonNetworkInstance ProtocolIE-ID ::= 190 + id-RedundantDL-NGU-TNLInformationReused ProtocolIE-ID ::= 191 + id-RedundantDL-NGU-UP-TNLInformation ProtocolIE-ID ::= 192 + id-RedundantDLQosFlowPerTNLInformation ProtocolIE-ID ::= 193 + id-RedundantQosFlowIndicator ProtocolIE-ID ::= 194 + id-RedundantUL-NGU-UP-TNLInformation ProtocolIE-ID ::= 195 + id-TSCTrafficCharacteristics ProtocolIE-ID ::= 196 + id-RedundantPDUSessionInformation ProtocolIE-ID ::= 197 + id-UsedRSNInformation ProtocolIE-ID ::= 198 + id-IAB-Authorized ProtocolIE-ID ::= 199 + id-IAB-Supported ProtocolIE-ID ::= 200 + id-IABNodeIndication ProtocolIE-ID ::= 201 + id-NB-IoT-PagingDRX ProtocolIE-ID ::= 202 + id-NB-IoT-Paging-eDRXInfo ProtocolIE-ID ::= 203 + id-NB-IoT-DefaultPagingDRX ProtocolIE-ID ::= 204 + id-Enhanced-CoverageRestriction ProtocolIE-ID ::= 205 + id-Extended-ConnectedTime ProtocolIE-ID ::= 206 + id-PagingAssisDataforCEcapabUE ProtocolIE-ID ::= 207 + id-WUS-Assistance-Information ProtocolIE-ID ::= 208 + id-UE-DifferentiationInfo ProtocolIE-ID ::= 209 + id-NB-IoT-UEPriority ProtocolIE-ID ::= 210 + id-UL-CP-SecurityInformation ProtocolIE-ID ::= 211 + id-DL-CP-SecurityInformation ProtocolIE-ID ::= 212 + id-TAI ProtocolIE-ID ::= 213 + id-UERadioCapabilityForPagingOfNB-IoT ProtocolIE-ID ::= 214 + id-LTEV2XServicesAuthorized ProtocolIE-ID ::= 215 + id-NRV2XServicesAuthorized ProtocolIE-ID ::= 216 + id-LTEUESidelinkAggregateMaximumBitrate ProtocolIE-ID ::= 217 + id-NRUESidelinkAggregateMaximumBitrate ProtocolIE-ID ::= 218 + id-PC5QoSParameters ProtocolIE-ID ::= 219 + id-AlternativeQoSParaSetList ProtocolIE-ID ::= 220 + id-CurrentQoSParaSetIndex ProtocolIE-ID ::= 221 + id-CEmodeBrestricted ProtocolIE-ID ::= 222 + id-EUTRA-PagingeDRXInformation ProtocolIE-ID ::= 223 + id-CEmodeBSupport-Indicator ProtocolIE-ID ::= 224 + id-LTEM-Indication ProtocolIE-ID ::= 225 + id-EndIndication ProtocolIE-ID ::= 226 + id-EDT-Session ProtocolIE-ID ::= 227 + id-UECapabilityInfoRequest ProtocolIE-ID ::= 228 + id-PDUSessionResourceFailedToResumeListRESReq ProtocolIE-ID ::= 229 + id-PDUSessionResourceFailedToResumeListRESRes ProtocolIE-ID ::= 230 + id-PDUSessionResourceSuspendListSUSReq ProtocolIE-ID ::= 231 + id-PDUSessionResourceResumeListRESReq ProtocolIE-ID ::= 232 + id-PDUSessionResourceResumeListRESRes ProtocolIE-ID ::= 233 + id-UE-UP-CIoT-Support ProtocolIE-ID ::= 234 + id-Suspend-Request-Indication ProtocolIE-ID ::= 235 + id-Suspend-Response-Indication ProtocolIE-ID ::= 236 + id-RRC-Resume-Cause ProtocolIE-ID ::= 237 + id-RGLevelWirelineAccessCharacteristics ProtocolIE-ID ::= 238 + id-W-AGFIdentityInformation ProtocolIE-ID ::= 239 + id-GlobalTNGF-ID ProtocolIE-ID ::= 240 + id-GlobalTWIF-ID ProtocolIE-ID ::= 241 + id-GlobalW-AGF-ID ProtocolIE-ID ::= 242 + id-UserLocationInformationW-AGF ProtocolIE-ID ::= 243 + id-UserLocationInformationTNGF ProtocolIE-ID ::= 244 + id-AuthenticatedIndication ProtocolIE-ID ::= 245 + id-TNGFIdentityInformation ProtocolIE-ID ::= 246 + id-TWIFIdentityInformation ProtocolIE-ID ::= 247 + id-UserLocationInformationTWIF ProtocolIE-ID ::= 248 + id-DataForwardingResponseERABList ProtocolIE-ID ::= 249 + id-IntersystemSONConfigurationTransferDL ProtocolIE-ID ::= 250 + id-IntersystemSONConfigurationTransferUL ProtocolIE-ID ::= 251 + id-SONInformationReport ProtocolIE-ID ::= 252 + id-UEHistoryInformationFromTheUE ProtocolIE-ID ::= 253 + id-ManagementBasedMDTPLMNList ProtocolIE-ID ::= 254 + id-MDTConfiguration ProtocolIE-ID ::= 255 + id-PrivacyIndicator ProtocolIE-ID ::= 256 + id-TraceCollectionEntityURI ProtocolIE-ID ::= 257 + id-NPN-Support ProtocolIE-ID ::= 258 + id-NPN-AccessInformation ProtocolIE-ID ::= 259 + id-NPN-PagingAssistanceInformation ProtocolIE-ID ::= 260 + id-NPN-MobilityInformation ProtocolIE-ID ::= 261 + id-TargettoSource-Failure-TransparentContainer ProtocolIE-ID ::= 262 + id-NID ProtocolIE-ID ::= 263 + id-UERadioCapabilityID ProtocolIE-ID ::= 264 + id-UERadioCapability-EUTRA-Format ProtocolIE-ID ::= 265 + id-DAPSRequestInfo ProtocolIE-ID ::= 266 + id-DAPSResponseInfoList ProtocolIE-ID ::= 267 + id-EarlyStatusTransfer-TransparentContainer ProtocolIE-ID ::= 268 + id-NotifySourceNGRANNode ProtocolIE-ID ::= 269 + id-ExtendedSliceSupportList ProtocolIE-ID ::= 270 + id-ExtendedTAISliceSupportList ProtocolIE-ID ::= 271 + id-ConfiguredTACIndication ProtocolIE-ID ::= 272 + id-Extended-RANNodeName ProtocolIE-ID ::= 273 + id-Extended-AMFName ProtocolIE-ID ::= 274 + id-GlobalCable-ID ProtocolIE-ID ::= 275 + id-QosMonitoringReportingFrequency ProtocolIE-ID ::= 276 + id-QosFlowParametersList ProtocolIE-ID ::= 277 + id-QosFlowFeedbackList ProtocolIE-ID ::= 278 + id-BurstArrivalTimeDownlink ProtocolIE-ID ::= 279 + id-ExtendedUEIdentityIndexValue ProtocolIE-ID ::= 280 + id-PduSessionExpectedUEActivityBehaviour ProtocolIE-ID ::= 281 + id-MicoAllPLMN ProtocolIE-ID ::= 282 + id-QosFlowFailedToSetupList ProtocolIE-ID ::= 283 + id-SourceTNLAddrInfo ProtocolIE-ID ::= 284 + id-ExtendedReportIntervalMDT ProtocolIE-ID ::= 285 + id-SourceNodeID ProtocolIE-ID ::= 286 + id-NRNTNTAIInformation ProtocolIE-ID ::= 287 + id-UEContextReferenceAtSource ProtocolIE-ID ::= 288 + id-LastVisitedPSCellList ProtocolIE-ID ::= 289 + id-IntersystemSONInformationRequest ProtocolIE-ID ::= 290 + id-IntersystemSONInformationReply ProtocolIE-ID ::= 291 + id-EnergySavingIndication ProtocolIE-ID ::= 292 + id-IntersystemResourceStatusUpdate ProtocolIE-ID ::= 293 + id-SuccessfulHandoverReportList ProtocolIE-ID ::= 294 + id-MBS-AreaSessionID ProtocolIE-ID ::= 295 + id-MBS-QoSFlowsToBeSetupList ProtocolIE-ID ::= 296 + id-MBS-QoSFlowsToBeSetupModList ProtocolIE-ID ::= 297 + id-MBS-ServiceArea ProtocolIE-ID ::= 298 + id-MBS-SessionID ProtocolIE-ID ::= 299 + id-MBS-DistributionReleaseRequestTransfer ProtocolIE-ID ::= 300 + id-MBS-DistributionSetupRequestTransfer ProtocolIE-ID ::= 301 + id-MBS-DistributionSetupResponseTransfer ProtocolIE-ID ::= 302 + id-MBS-DistributionSetupUnsuccessfulTransfer ProtocolIE-ID ::= 303 + id-MulticastSessionActivationRequestTransfer ProtocolIE-ID ::= 304 + id-MulticastSessionDeactivationRequestTransfer ProtocolIE-ID ::= 305 + id-MulticastSessionUpdateRequestTransfer ProtocolIE-ID ::= 306 + id-MulticastGroupPagingAreaList ProtocolIE-ID ::= 307 + --WS extension + id-Unknown-308 ProtocolIE-ID ::= 308 + id-MBS-SupportIndicator ProtocolIE-ID ::= 309 + id-MBSSessionFailedtoSetupList ProtocolIE-ID ::= 310 + id-MBSSessionFailedtoSetuporModifyList ProtocolIE-ID ::= 311 + id-MBSSessionSetupResponseList ProtocolIE-ID ::= 312 + id-MBSSessionSetuporModifyResponseList ProtocolIE-ID ::= 313 + id-MBSSessionSetupFailureTransfer ProtocolIE-ID ::= 314 + id-MBSSessionSetupRequestTransfer ProtocolIE-ID ::= 315 + id-MBSSessionSetupResponseTransfer ProtocolIE-ID ::= 316 + id-MBSSessionToReleaseList ProtocolIE-ID ::= 317 + id-MBSSessionSetupRequestList ProtocolIE-ID ::= 318 + id-MBSSessionSetuporModifyRequestList ProtocolIE-ID ::= 319 + --WS extension + id-Unknown-320 ProtocolIE-ID ::= 320 + id-Unknown-321 ProtocolIE-ID ::= 321 + id-Unknown-322 ProtocolIE-ID ::= 322 + id-MBS-ActiveSessionInformation-SourcetoTargetList ProtocolIE-ID ::= 323 + id-MBS-ActiveSessionInformation-TargettoSourceList ProtocolIE-ID ::= 324 + id-OnboardingSupport ProtocolIE-ID ::= 325 + id-TimeSyncAssistanceInfo ProtocolIE-ID ::= 326 + id-SurvivalTime ProtocolIE-ID ::= 327 + id-QMCConfigInfo ProtocolIE-ID ::= 328 + id-QMCDeactivation ProtocolIE-ID ::= 329 + --WS extension + id-Unknown-330 ProtocolIE-ID ::= 330 + id-PDUSessionPairID ProtocolIE-ID ::= 331 + id-NR-PagingeDRXInformation ProtocolIE-ID ::= 332 + id-RedCapIndication ProtocolIE-ID ::= 333 + id-TargetNSSAIInformation ProtocolIE-ID ::= 334 + id-UESliceMaximumBitRateList ProtocolIE-ID ::= 335 + id-M4ReportAmount ProtocolIE-ID ::= 336 + id-M5ReportAmount ProtocolIE-ID ::= 337 + id-M6ReportAmount ProtocolIE-ID ::= 338 + id-M7ReportAmount ProtocolIE-ID ::= 339 + id-IncludeBeamMeasurementsIndication ProtocolIE-ID ::= 340 + id-ExcessPacketDelayThresholdConfiguration ProtocolIE-ID ::= 341 + id-PagingCause ProtocolIE-ID ::= 342 + id-PagingCauseIndicationForVoiceService ProtocolIE-ID ::= 343 + id-PEIPSassistanceInformation ProtocolIE-ID ::= 344 + id-FiveG-ProSeAuthorized ProtocolIE-ID ::= 345 + id-FiveG-ProSeUEPC5AggregateMaximumBitRate ProtocolIE-ID ::= 346 + id-FiveG-ProSePC5QoSParameters ProtocolIE-ID ::= 347 + id-MBSSessionModificationFailureTransfer ProtocolIE-ID ::= 348 + id-MBSSessionModificationRequestTransfer ProtocolIE-ID ::= 349 + id-MBSSessionModificationResponseTransfer ProtocolIE-ID ::= 350 + id-MBS-QoSFlowToReleaseList ProtocolIE-ID ::= 351 + id-MBS-SessionTNLInfo5GC ProtocolIE-ID ::= 352 + id-TAINSAGSupportList ProtocolIE-ID ::= 353 + id-SourceNodeTNLAddrInfo ProtocolIE-ID ::= 354 + id-NGAPIESupportInformationRequestList ProtocolIE-ID ::= 355 + id-NGAPIESupportInformationResponseList ProtocolIE-ID ::= 356 + id-MBS-SessionFSAIDList ProtocolIE-ID ::= 357 + id-MBSSessionReleaseResponseTransfer ProtocolIE-ID ::= 358 + id-ManagementBasedMDTPLMNModificationList ProtocolIE-ID ::= 359 + id-EarlyMeasurement ProtocolIE-ID ::= 360 + id-BeamMeasurementsReportConfiguration ProtocolIE-ID ::= 361 + id-HFCNode-ID-new ProtocolIE-ID ::= 362 + id-GlobalCable-ID-new ProtocolIE-ID ::= 363 + id-TargetHomeENB-ID ProtocolIE-ID ::= 364 + id-HashedUEIdentityIndexValue ProtocolIE-ID ::= 365 + + +END diff --git a/ttcn/LibNGAP/lib/asn1/NGAP_Containers.asn b/ttcn/LibNGAP/lib/asn1/NGAP_Containers.asn new file mode 100644 index 0000000000000000000000000000000000000000..fdf612bef26f2985ea78f3dea1d1cbe6f72686ef --- /dev/null +++ b/ttcn/LibNGAP/lib/asn1/NGAP_Containers.asn @@ -0,0 +1,200 @@ +-- 3GPP TS 38.413 V17.5.0 (2023-06) +-- 9.4.8 Container Definitions +-- ************************************************************** +-- +-- Container definitions +-- +-- ************************************************************** + +NGAP-Containers { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-Access (22) modules (3) ngap (1) version1 (1) ngap-Containers (5) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + + Criticality, + Presence, + PrivateIE-ID, + ProtocolExtensionID, + ProtocolIE-ID +FROM NGAP-CommonDataTypes + + maxPrivateIEs, + maxProtocolExtensions, + maxProtocolIEs +FROM NGAP-Constants; + +-- ************************************************************** +-- +-- Class Definition for Protocol IEs +-- +-- ************************************************************** + +NGAP-PROTOCOL-IES ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Protocol IEs +-- +-- ************************************************************** + +NGAP-PROTOCOL-IES-PAIR ::= CLASS { + &id ProtocolIE-ID UNIQUE, + &firstCriticality Criticality, + &FirstValue, + &secondCriticality Criticality, + &SecondValue, + &presence Presence +} +WITH SYNTAX { + ID &id + FIRST CRITICALITY &firstCriticality + FIRST TYPE &FirstValue + SECOND CRITICALITY &secondCriticality + SECOND TYPE &SecondValue + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Protocol Extensions +-- +-- ************************************************************** + +NGAP-PROTOCOL-EXTENSION ::= CLASS { + &id ProtocolExtensionID UNIQUE, + &criticality Criticality, + &Extension, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + EXTENSION &Extension + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Class Definition for Private IEs +-- +-- ************************************************************** + +NGAP-PRIVATE-IES ::= CLASS { + &id PrivateIE-ID, + &criticality Criticality, + &Value, + &presence Presence +} +WITH SYNTAX { + ID &id + CRITICALITY &criticality + TYPE &Value + PRESENCE &presence +} + +-- ************************************************************** +-- +-- Container for Protocol IEs +-- +-- ************************************************************** + +ProtocolIE-Container {NGAP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-SingleContainer {NGAP-PROTOCOL-IES : IEsSetParam} ::= + ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-Field {NGAP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { + id NGAP-PROTOCOL-IES.&id ({IEsSetParam}), + criticality NGAP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), + value NGAP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Protocol IE Pairs +-- +-- ************************************************************** + +ProtocolIE-ContainerPair {NGAP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (0..maxProtocolIEs)) OF + ProtocolIE-FieldPair {{IEsSetParam}} + +ProtocolIE-FieldPair {NGAP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { + id NGAP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), + firstCriticality NGAP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), + firstValue NGAP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), + secondCriticality NGAP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), + secondValue NGAP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container Lists for Protocol IE Containers +-- +-- ************************************************************** + +ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, NGAP-PROTOCOL-IES : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-SingleContainer {{IEsSetParam}} + +ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, NGAP-PROTOCOL-IES-PAIR : IEsSetParam} ::= + SEQUENCE (SIZE (lowerBound..upperBound)) OF + ProtocolIE-ContainerPair {{IEsSetParam}} + +-- ************************************************************** +-- +-- Container for Protocol Extensions +-- +-- ************************************************************** + +ProtocolExtensionContainer {NGAP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= + SEQUENCE (SIZE (1..maxProtocolExtensions)) OF + ProtocolExtensionField {{ExtensionSetParam}} + +ProtocolExtensionField {NGAP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { + id NGAP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), + criticality NGAP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), + extensionValue NGAP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Private IEs +-- +-- ************************************************************** + +PrivateIE-Container {NGAP-PRIVATE-IES : IEsSetParam } ::= + SEQUENCE (SIZE (1..maxPrivateIEs)) OF + PrivateIE-Field {{IEsSetParam}} + +PrivateIE-Field {NGAP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { + id NGAP-PRIVATE-IES.&id ({IEsSetParam}), + criticality NGAP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), + value NGAP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) +} + +END diff --git a/ttcn/LibNGAP/lib/asn1/NGAP_IEs.asn b/ttcn/LibNGAP/lib/asn1/NGAP_IEs.asn new file mode 100644 index 0000000000000000000000000000000000000000..d0af009244238da73210ba0290d82fa1150c71b7 --- /dev/null +++ b/ttcn/LibNGAP/lib/asn1/NGAP_IEs.asn @@ -0,0 +1,6990 @@ +-- 3GPP TS 38.413 V17.5.0 (2023-06) +-- 9.4.5 Information Element Definitions +-- ************************************************************** +-- +-- Information Element Definitions +-- +-- ************************************************************** + +NGAP-IEs { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-Access (22) modules (3) ngap (1) version1 (1) ngap-IEs (2) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + + id-AdditionalDLForwardingUPTNLInformation, + id-AdditionalULForwardingUPTNLInformation, + id-AdditionalDLQosFlowPerTNLInformation, + id-AdditionalDLUPTNLInformationForHOList, + id-AdditionalNGU-UP-TNLInformation, + id-AdditionalRedundantDL-NGU-UP-TNLInformation, + id-AdditionalRedundantDLQosFlowPerTNLInformation, + id-AdditionalRedundantNGU-UP-TNLInformation, + id-AdditionalRedundantUL-NGU-UP-TNLInformation, + id-AdditionalUL-NGU-UP-TNLInformation, + id-AlternativeQoSParaSetList, + id-BurstArrivalTimeDownlink, + id-Cause, + id-CNPacketDelayBudgetDL, + id-CNPacketDelayBudgetUL, + id-CNTypeRestrictionsForEquivalent, + id-CNTypeRestrictionsForServing, + id-CommonNetworkInstance, + id-ConfiguredTACIndication, + id-CurrentQoSParaSetIndex, + id-DAPSRequestInfo, + id-DAPSResponseInfoList, + id-DataForwardingNotPossible, + id-DataForwardingResponseERABList, + id-DirectForwardingPathAvailability, + id-DL-NGU-UP-TNLInformation, + id-EndpointIPAddressAndPort, + id-EnergySavingIndication, + id-ExtendedPacketDelayBudget, + id-ExtendedRATRestrictionInformation, + id-ExtendedReportIntervalMDT, + id-ExtendedSliceSupportList, + id-ExtendedTAISliceSupportList, + id-ExtendedUEIdentityIndexValue, + id-EUTRA-PagingeDRXInformation, + id-GlobalCable-ID, + id-GlobalRANNodeID, + id-GlobalTNGF-ID, + id-GlobalTWIF-ID, + id-GlobalW-AGF-ID, + id-GUAMIType, +id-HashedUEIdentityIndexValue, + id-IncludeBeamMeasurementsIndication, + id-IntersystemSONInformationRequest, + id-IntersystemSONInformationReply, + id-IntersystemResourceStatusUpdate, + id-LastEUTRAN-PLMNIdentity, + id-LastVisitedPSCellList, + id-LocationReportingAdditionalInfo, + id-M4ReportAmount, + id-M5ReportAmount, + id-M6ReportAmount, + id-ExcessPacketDelayThresholdConfiguration, + id-M7ReportAmount, + id-MaximumIntegrityProtectedDataRate-DL, + id-MBS-AreaSessionID, + id-MBS-QoSFlowsToBeSetupList, + id-MBS-QoSFlowsToBeSetupModList, + id-MBS-QoSFlowToReleaseList, + id-MBS-ServiceArea, + id-MBS-SessionFSAIDList, + id-MBS-SessionID, + id-MBS-ActiveSessionInformation-SourcetoTargetList, + id-MBS-ActiveSessionInformation-TargettoSourceList, + id-MBS-SessionTNLInfo5GC, + id-MBS-SupportIndicator, + id-MBSSessionFailedtoSetupList, + id-MBSSessionFailedtoSetuporModifyList, + id-MBSSessionSetupResponseList, + id-MBSSessionSetuporModifyResponseList, + id-MBSSessionToReleaseList, + id-MBSSessionSetupRequestList, + id-MBSSessionSetuporModifyRequestList, + id-MDTConfiguration, + id-MicoAllPLMN, + id-NetworkInstance, + id-NGAPIESupportInformationRequestList, + id-NGAPIESupportInformationResponseList, + id-NID, + id-NR-CGI, + id-NRNTNTAIInformation, + id-NPN-MobilityInformation, + id-NPN-PagingAssistanceInformation, + id-NPN-Support, + id-NR-PagingeDRXInformation, + id-OldAssociatedQosFlowList-ULendmarkerexpected, + id-OnboardingSupport, + id-PagingAssisDataforCEcapabUE, + id-PagingCauseIndicationForVoiceService, + id-PDUSessionAggregateMaximumBitRate, + id-PduSessionExpectedUEActivityBehaviour, + id-PDUSessionPairID, + id-PDUSessionResourceFailedToSetupListCxtFail, + id-PDUSessionResourceReleaseResponseTransfer, + id-PDUSessionType, + id-PEIPSassistanceInformation, + id-PSCellInformation, + id-QMCConfigInfo, + id-QosFlowAddOrModifyRequestList, + id-QosFlowFailedToSetupList, + id-QosFlowFeedbackList, + id-QosFlowParametersList, + id-QosFlowSetupRequestList, + id-QosFlowToReleaseList, + id-QosMonitoringRequest, + id-QosMonitoringReportingFrequency, + id-SuccessfulHandoverReportList, + id-UEContextReferenceAtSource, + id-RAT-Information, + id-RedundantCommonNetworkInstance, + id-RedundantDL-NGU-TNLInformationReused, + id-RedundantDL-NGU-UP-TNLInformation, + id-RedundantDLQosFlowPerTNLInformation, + id-RedundantPDUSessionInformation, + id-RedundantQosFlowIndicator, + id-RedundantUL-NGU-UP-TNLInformation, + id-SCTP-TLAs, + id-SecondaryRATUsageInformation, + id-SecurityIndication, + id-SecurityResult, + id-SgNB-UE-X2AP-ID, + id-S-NSSAI, + id-SONInformationReport, + id-SourceNodeID, + id-SourceNodeTNLAddrInfo, + id-SourceTNLAddrInfo, + id-SurvivalTime, + id-TNLAssociationTransportLayerAddressNGRAN, + id-TAINSAGSupportList, + id-TargetHomeENB-ID, + id-TargetRNC-ID, + id-TraceCollectionEntityURI, + id-TSCTrafficCharacteristics, + id-UEHistoryInformationFromTheUE, + id-UERadioCapabilityForPaging, + id-UERadioCapabilityForPagingOfNB-IoT, + id-UL-NGU-UP-TNLInformation, + id-UL-NGU-UP-TNLModifyList, + id-ULForwarding, + id-ULForwardingUP-TNLInformation, + id-UsedRSNInformation, + id-UserLocationInformationTNGF, + id-UserLocationInformationTWIF, + id-UserLocationInformationW-AGF, + id-EarlyMeasurement, + id-BeamMeasurementsReportConfiguration, + id-TAI, + id-HFCNode-ID-new, + id-GlobalCable-ID-new, + maxnoofAllowedAreas, + maxnoofAllowedCAGsperPLMN, + maxnoofAllowedS-NSSAIs, + maxnoofBluetoothName, + maxnoofBPLMNs, + maxnoofCAGSperCell, + maxnoofCandidateCells, + maxnoofCellIDforMDT, + maxnoofCellIDforQMC, + maxnoofCellIDforWarning, + maxnoofCellinAoI, + maxnoofCellinEAI, + maxnoofCellsforMBS, + maxnoofCellsingNB, + maxnoofCellsinngeNB, + maxnoofCellsinNGRANNode, + maxnoofCellinTAI, + maxnoofCellsinUEHistoryInfo, + maxnoofCellsUEMovingTrajectory, + maxnoofDRBs, + maxnoofEmergencyAreaID, + maxnoofEAIforRestart, + maxnoofEPLMNs, + maxnoofEPLMNsPlusOne, + maxnoofE-RABs, + maxnoofErrors, + maxnoofExtSliceItems, + maxnoofForbTACs, + maxnoofFreqforMDT, + maxnoofMBSFSAs, + maxnoofMBSQoSFlows, + maxnoofMBSServiceAreaInformation, + maxnoofMBSAreaSessionIDs, + maxnoofMBSSessions, + maxnoofMBSSessionsofUE, + maxnoofMDTPLMNs, + maxnoofMRBs, + maxnoofMultiConnectivity, + maxnoofMultiConnectivityMinusOne, + maxnoofNeighPCIforMDT, + maxnoofNGAPIESupportInfo, + maxnoofNGConnectionsToReset, + maxNRARFCN, + maxnoofNRCellBands, + maxnoofNSAGs, + maxnoofPagingAreas, + maxnoofPC5QoSFlows, + maxnoofPDUSessions, + maxnoofPLMNs, + maxnoofPLMNforQMC, + maxnoofQosFlows, + maxnoofQosParaSets, + maxnoofRANNodeinAoI, + maxnoofRecommendedCells, + maxnoofRecommendedRANNodes, + maxnoofAoI, + maxnoofPSCellsPerPrimaryCellinUEHistoryInfo, + maxnoofReportedCells, + maxnoofSensorName, + maxnoofServedGUAMIs, + maxnoofSliceItems, + maxnoofSNSSAIforQMC, + maxnoofSuccessfulHOReports, + maxnoofTACs, + maxnoofTACsinNTN, + maxnoofTAforMDT, + maxnoofTAforQMC, + maxnoofTAIforInactive, + maxnoofTAIforMBS, + maxnoofTAIforPaging, + maxnoofTAIforRestart, + maxnoofTAIforWarning, + maxnoofTAIinAoI, + maxnoofTargetS-NSSAIs, + maxnoofTimePeriods, + maxnoofTNLAssociations, + maxnoofUEAppLayerMeas, + maxnoofUEsforPaging, + maxnoofWLANName, + maxnoofXnExtTLAs, + maxnoofXnGTP-TLAs, + maxnoofXnTLAs, + maxnoofThresholdsForExcessPacketDelay + +FROM NGAP-Constants + + Criticality, + ProcedureCode, + ProtocolIE-ID, + TriggeringMessage +FROM NGAP-CommonDataTypes + + ProtocolExtensionContainer{}, + ProtocolIE-Container{}, + NGAP-PROTOCOL-EXTENSION, + ProtocolIE-SingleContainer{}, + NGAP-PROTOCOL-IES +FROM NGAP-Containers; + +-- A + +AdditionalDLUPTNLInformationForHOList ::= SEQUENCE (SIZE(1..maxnoofMultiConnectivityMinusOne)) OF AdditionalDLUPTNLInformationForHOItem + +AdditionalDLUPTNLInformationForHOItem ::= SEQUENCE { + additionalDL-NGU-UP-TNLInformation UPTransportLayerInformation, + additionalQosFlowSetupResponseList QosFlowListWithDataForwarding, + additionalDLForwardingUPTNLInformation UPTransportLayerInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { AdditionalDLUPTNLInformationForHOItem-ExtIEs} } OPTIONAL, + ... +} + +AdditionalDLUPTNLInformationForHOItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalRedundantDL-NGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional }, + ... +} + +AdditionalQosFlowInformation ::= ENUMERATED { + more-likely, + ... +} + +AllocationAndRetentionPriority ::= SEQUENCE { + priorityLevelARP PriorityLevelARP, + pre-emptionCapability Pre-emptionCapability, + pre-emptionVulnerability Pre-emptionVulnerability, + iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL, + ... +} + +AllocationAndRetentionPriority-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +Allowed-CAG-List-per-PLMN ::= SEQUENCE (SIZE(1..maxnoofAllowedCAGsperPLMN)) OF CAG-ID + +AllowedNSSAI ::= SEQUENCE (SIZE(1..maxnoofAllowedS-NSSAIs)) OF AllowedNSSAI-Item + +AllowedNSSAI-Item ::= SEQUENCE { + s-NSSAI S-NSSAI, + iE-Extensions ProtocolExtensionContainer { {AllowedNSSAI-Item-ExtIEs} } OPTIONAL, + ... +} + +AllowedNSSAI-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +Allowed-PNI-NPN-List ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF Allowed-PNI-NPN-Item + +Allowed-PNI-NPN-Item ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + pNI-NPN-restricted ENUMERATED {restricted, not-restricted, ...}, + allowed-CAG-List-per-PLMN Allowed-CAG-List-per-PLMN, + iE-Extensions ProtocolExtensionContainer { {Allowed-PNI-NPN-Item-ExtIEs} } OPTIONAL, + ... +} + +Allowed-PNI-NPN-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AllowedTACs ::= SEQUENCE (SIZE(1..maxnoofAllowedAreas)) OF TAC + +AlternativeQoSParaSetIndex ::= INTEGER (1..8, ...) + +AlternativeQoSParaSetNotifyIndex ::= INTEGER (0..8, ...) + +AlternativeQoSParaSetList ::= SEQUENCE (SIZE(1..maxnoofQosParaSets)) OF AlternativeQoSParaSetItem + +AlternativeQoSParaSetItem ::= SEQUENCE { + alternativeQoSParaSetIndex AlternativeQoSParaSetIndex, + guaranteedFlowBitRateDL BitRate OPTIONAL, + guaranteedFlowBitRateUL BitRate OPTIONAL, + packetDelayBudget PacketDelayBudget OPTIONAL, + packetErrorRate PacketErrorRate OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {AlternativeQoSParaSetItem-ExtIEs} } OPTIONAL, + ... +} + +AlternativeQoSParaSetItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AMFName ::= PrintableString (SIZE(1..150, ...)) + +AMFNameVisibleString ::= VisibleString (SIZE(1..150, ...)) + +AMFNameUTF8String ::= UTF8String (SIZE(1..150, ...)) + +AMFPagingTarget ::= CHOICE { + globalRANNodeID GlobalRANNodeID, + tAI TAI, + choice-Extensions ProtocolIE-SingleContainer { {AMFPagingTarget-ExtIEs} } +} + +AMFPagingTarget-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +AMFPointer ::= BIT STRING (SIZE(6)) + +AMFRegionID ::= BIT STRING (SIZE(8)) + +AMFSetID ::= BIT STRING (SIZE(10)) + +AMF-TNLAssociationSetupList ::= SEQUENCE (SIZE(1..maxnoofTNLAssociations)) OF AMF-TNLAssociationSetupItem + +AMF-TNLAssociationSetupItem ::= SEQUENCE { + aMF-TNLAssociationAddress CPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { {AMF-TNLAssociationSetupItem-ExtIEs} } OPTIONAL, + ... +} + +AMF-TNLAssociationSetupItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AMF-TNLAssociationToAddList ::= SEQUENCE (SIZE(1..maxnoofTNLAssociations)) OF AMF-TNLAssociationToAddItem + +AMF-TNLAssociationToAddItem ::= SEQUENCE { + aMF-TNLAssociationAddress CPTransportLayerInformation, + tNLAssociationUsage TNLAssociationUsage OPTIONAL, + tNLAddressWeightFactor TNLAddressWeightFactor, + iE-Extensions ProtocolExtensionContainer { {AMF-TNLAssociationToAddItem-ExtIEs} } OPTIONAL, + ... +} + +AMF-TNLAssociationToAddItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AMF-TNLAssociationToRemoveList ::= SEQUENCE (SIZE(1..maxnoofTNLAssociations)) OF AMF-TNLAssociationToRemoveItem + +AMF-TNLAssociationToRemoveItem ::= SEQUENCE { + aMF-TNLAssociationAddress CPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { {AMF-TNLAssociationToRemoveItem-ExtIEs} } OPTIONAL, + ... +} + +AMF-TNLAssociationToRemoveItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + {ID id-TNLAssociationTransportLayerAddressNGRAN CRITICALITY reject EXTENSION CPTransportLayerInformation PRESENCE optional}, + ... +} + +AMF-TNLAssociationToUpdateList ::= SEQUENCE (SIZE(1..maxnoofTNLAssociations)) OF AMF-TNLAssociationToUpdateItem + +AMF-TNLAssociationToUpdateItem ::= SEQUENCE { + aMF-TNLAssociationAddress CPTransportLayerInformation, + tNLAssociationUsage TNLAssociationUsage OPTIONAL, + tNLAddressWeightFactor TNLAddressWeightFactor OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {AMF-TNLAssociationToUpdateItem-ExtIEs} } OPTIONAL, + ... +} + +AMF-TNLAssociationToUpdateItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AMF-UE-NGAP-ID ::= INTEGER (0..1099511627775) + +AreaOfInterest ::= SEQUENCE { + areaOfInterestTAIList AreaOfInterestTAIList OPTIONAL, + areaOfInterestCellList AreaOfInterestCellList OPTIONAL, + areaOfInterestRANNodeList AreaOfInterestRANNodeList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {AreaOfInterest-ExtIEs} } OPTIONAL, + ... +} + +AreaOfInterest-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AreaOfInterestCellList ::= SEQUENCE (SIZE(1..maxnoofCellinAoI)) OF AreaOfInterestCellItem + +AreaOfInterestCellItem ::= SEQUENCE { + nGRAN-CGI NGRAN-CGI, + iE-Extensions ProtocolExtensionContainer { {AreaOfInterestCellItem-ExtIEs} } OPTIONAL, + ... +} + +AreaOfInterestCellItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AreaOfInterestList ::= SEQUENCE (SIZE(1..maxnoofAoI)) OF AreaOfInterestItem + +AreaOfInterestItem ::= SEQUENCE { + areaOfInterest AreaOfInterest, + locationReportingReferenceID LocationReportingReferenceID, + iE-Extensions ProtocolExtensionContainer { {AreaOfInterestItem-ExtIEs} } OPTIONAL, + ... +} + +AreaOfInterestItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AreaOfInterestRANNodeList ::= SEQUENCE (SIZE(1..maxnoofRANNodeinAoI)) OF AreaOfInterestRANNodeItem + +AreaOfInterestRANNodeItem ::= SEQUENCE { + globalRANNodeID GlobalRANNodeID, + iE-Extensions ProtocolExtensionContainer { {AreaOfInterestRANNodeItem-ExtIEs} } OPTIONAL, + ... +} + +AreaOfInterestRANNodeItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AreaOfInterestTAIList ::= SEQUENCE (SIZE(1..maxnoofTAIinAoI)) OF AreaOfInterestTAIItem + +AreaOfInterestTAIItem ::= SEQUENCE { + tAI TAI, + iE-Extensions ProtocolExtensionContainer { {AreaOfInterestTAIItem-ExtIEs} } OPTIONAL, + ... +} + +AreaOfInterestTAIItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AssistanceDataForPaging ::= SEQUENCE { + assistanceDataForRecommendedCells AssistanceDataForRecommendedCells OPTIONAL, + pagingAttemptInformation PagingAttemptInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {AssistanceDataForPaging-ExtIEs} } OPTIONAL, + ... +} + +AssistanceDataForPaging-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-NPN-PagingAssistanceInformation CRITICALITY ignore EXTENSION NPN-PagingAssistanceInformation PRESENCE optional }| + { ID id-PagingAssisDataforCEcapabUE CRITICALITY ignore EXTENSION PagingAssisDataforCEcapabUE PRESENCE optional }, + ... +} + +AssistanceDataForRecommendedCells ::= SEQUENCE { + recommendedCellsForPaging RecommendedCellsForPaging, + iE-Extensions ProtocolExtensionContainer { {AssistanceDataForRecommendedCells-ExtIEs} } OPTIONAL, + ... +} + +AssistanceDataForRecommendedCells-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AssociatedMBSQosFlowSetupRequestList ::= SEQUENCE (SIZE(1..maxnoofMBSQoSFlows)) OF AssociatedMBSQosFlowSetupRequestItem + +AssociatedMBSQosFlowSetupRequestItem ::= SEQUENCE { + mBS-QosFlowIdentifier QosFlowIdentifier, + associatedUnicastQosFlowIdentifier QosFlowIdentifier, + iE-Extensions ProtocolExtensionContainer { { AssociatedMBSQosFlowSetupRequestItem-ExtIEs} } OPTIONAL, + ... +} + +AssociatedMBSQosFlowSetupRequestItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AssociatedMBSQosFlowSetuporModifyRequestList ::= SEQUENCE (SIZE(1..maxnoofMBSQoSFlows)) OF AssociatedMBSQosFlowSetuporModifyRequestItem + +AssociatedMBSQosFlowSetuporModifyRequestItem ::= SEQUENCE { + mBS-QosFlowIdentifier QosFlowIdentifier, + associatedUnicastQosFlowIdentifier QosFlowIdentifier, + iE-Extensions ProtocolExtensionContainer { { AssociatedMBSQosFlowSetuporModifyRequestItem-ExtIEs} } OPTIONAL, + ... +} + +AssociatedMBSQosFlowSetuporModifyRequestItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AssociatedQosFlowList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF AssociatedQosFlowItem + +AssociatedQosFlowItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + qosFlowMappingIndication ENUMERATED {ul, dl, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {AssociatedQosFlowItem-ExtIEs} } OPTIONAL, + ... +} + +AssociatedQosFlowItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-CurrentQoSParaSetIndex CRITICALITY ignore EXTENSION AlternativeQoSParaSetIndex PRESENCE optional }, + ... +} + +AuthenticatedIndication ::= ENUMERATED {true, ...} + +AveragingWindow ::= INTEGER (0..4095, ...) + +AreaScopeOfMDT-NR ::= CHOICE { + cellBased CellBasedMDT-NR, + tABased TABasedMDT, + pLMNWide NULL, + tAIBased TAIBasedMDT, + choice-Extensions ProtocolIE-SingleContainer { {AreaScopeOfMDT-NR-ExtIEs} } +} + +AreaScopeOfMDT-NR-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +AreaScopeOfMDT-EUTRA ::= CHOICE { + cellBased CellBasedMDT-EUTRA, + tABased TABasedMDT, + pLMNWide NULL, + tAIBased TAIBasedMDT, + choice-Extensions ProtocolIE-SingleContainer { {AreaScopeOfMDT-EUTRA-ExtIEs} } +} + +AreaScopeOfMDT-EUTRA-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +AreaScopeOfNeighCellsList ::= SEQUENCE (SIZE(1..maxnoofFreqforMDT)) OF AreaScopeOfNeighCellsItem +AreaScopeOfNeighCellsItem ::= SEQUENCE { + nrFrequencyInfo NRFrequencyInfo, + pciListForMDT PCIListForMDT OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { AreaScopeOfNeighCellsItem-ExtIEs} } OPTIONAL, + ... +} + +AreaScopeOfNeighCellsItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +AreaScopeOfQMC ::= CHOICE { + cellBased CellBasedQMC, + tABased TABasedQMC, + tAIBased TAIBasedQMC, + pLMNAreaBased PLMNAreaBasedQMC, + choice-Extensions ProtocolIE-SingleContainer { { AreaScopeOfQMC-ExtIEs} } +} + +AreaScopeOfQMC-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +AvailableRANVisibleQoEMetrics ::= SEQUENCE { + applicationLayerBufferLevelList ENUMERATED {true, ...} OPTIONAL, + playoutDelayForMediaStartup ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { AvailableRANVisibleQoEMetrics-ExtIEs} } OPTIONAL, + ... +} + +AvailableRANVisibleQoEMetrics-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- B + +BeamMeasurementsReportConfiguration ::= SEQUENCE { + beamMeasurementsReportQuantity BeamMeasurementsReportQuantity OPTIONAL, + maxNrofRS-IndexesToReport MaxNrofRS-IndexesToReport OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BeamMeasurementsReportConfiguration-ExtIEs} } OPTIONAL, + ... +} + +BeamMeasurementsReportConfiguration-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +BeamMeasurementsReportQuantity ::= SEQUENCE { + rSRP ENUMERATED {true, ...}, + rSRQ ENUMERATED {true, ...}, + sINR ENUMERATED {true, ...}, + iE-Extensions ProtocolExtensionContainer { { BeamMeasurementsReportQuantity-ExtIEs} } OPTIONAL, + ... +} + +BeamMeasurementsReportQuantity-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +BitRate ::= INTEGER (0..4000000000000, ...) + +BroadcastCancelledAreaList ::= CHOICE { + cellIDCancelledEUTRA CellIDCancelledEUTRA, + tAICancelledEUTRA TAICancelledEUTRA, + emergencyAreaIDCancelledEUTRA EmergencyAreaIDCancelledEUTRA, + cellIDCancelledNR CellIDCancelledNR, + tAICancelledNR TAICancelledNR, + emergencyAreaIDCancelledNR EmergencyAreaIDCancelledNR, + choice-Extensions ProtocolIE-SingleContainer { {BroadcastCancelledAreaList-ExtIEs} } +} + +BroadcastCancelledAreaList-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +BroadcastCompletedAreaList ::= CHOICE { + cellIDBroadcastEUTRA CellIDBroadcastEUTRA, + tAIBroadcastEUTRA TAIBroadcastEUTRA, + emergencyAreaIDBroadcastEUTRA EmergencyAreaIDBroadcastEUTRA, + cellIDBroadcastNR CellIDBroadcastNR, + tAIBroadcastNR TAIBroadcastNR, + emergencyAreaIDBroadcastNR EmergencyAreaIDBroadcastNR, + choice-Extensions ProtocolIE-SingleContainer { {BroadcastCompletedAreaList-ExtIEs} } +} + +BroadcastCompletedAreaList-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +BroadcastPLMNList ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF BroadcastPLMNItem + +BroadcastPLMNItem ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + tAISliceSupportList SliceSupportList, + iE-Extensions ProtocolExtensionContainer { {BroadcastPLMNItem-ExtIEs} } OPTIONAL, + ... +} + +BroadcastPLMNItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + {ID id-NPN-Support CRITICALITY reject EXTENSION NPN-Support PRESENCE optional}| + {ID id-ExtendedTAISliceSupportList CRITICALITY reject EXTENSION ExtendedSliceSupportList PRESENCE optional}| + {ID id-TAINSAGSupportList CRITICALITY ignore EXTENSION TAINSAGSupportList PRESENCE optional}, + ... +} + +BluetoothMeasurementConfiguration ::= SEQUENCE { + bluetoothMeasConfig BluetoothMeasConfig, + bluetoothMeasConfigNameList BluetoothMeasConfigNameList OPTIONAL, + bt-rssi ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { BluetoothMeasurementConfiguration-ExtIEs } } OPTIONAL, + ... +} + +BluetoothMeasurementConfiguration-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +BluetoothMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofBluetoothName)) OF BluetoothMeasConfigNameItem + +BluetoothMeasConfigNameItem ::= SEQUENCE { + bluetoothName BluetoothName, + iE-Extensions ProtocolExtensionContainer { { BluetoothMeasConfigNameItem-ExtIEs } } OPTIONAL, + ... +} + +BluetoothMeasConfigNameItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +BluetoothMeasConfig::= ENUMERATED {setup,...} + +BluetoothName ::= OCTET STRING (SIZE (1..248)) + +BurstArrivalTime ::= OCTET STRING + +-- C + +CAG-ID ::= BIT STRING (SIZE(32)) + +CancelAllWarningMessages ::= ENUMERATED { + true, + ... +} + +CancelledCellsInEAI-EUTRA ::= SEQUENCE (SIZE(1..maxnoofCellinEAI)) OF CancelledCellsInEAI-EUTRA-Item + +CancelledCellsInEAI-EUTRA-Item ::= SEQUENCE { + eUTRA-CGI EUTRA-CGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { {CancelledCellsInEAI-EUTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +CancelledCellsInEAI-EUTRA-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CancelledCellsInEAI-NR ::= SEQUENCE (SIZE(1..maxnoofCellinEAI)) OF CancelledCellsInEAI-NR-Item + +CancelledCellsInEAI-NR-Item ::= SEQUENCE { + nR-CGI NR-CGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { {CancelledCellsInEAI-NR-Item-ExtIEs} } OPTIONAL, + ... +} + +CancelledCellsInEAI-NR-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CancelledCellsInTAI-EUTRA ::= SEQUENCE (SIZE(1..maxnoofCellinTAI)) OF CancelledCellsInTAI-EUTRA-Item + +CancelledCellsInTAI-EUTRA-Item ::= SEQUENCE { + eUTRA-CGI EUTRA-CGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { {CancelledCellsInTAI-EUTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +CancelledCellsInTAI-EUTRA-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CancelledCellsInTAI-NR ::= SEQUENCE (SIZE(1..maxnoofCellinTAI)) OF CancelledCellsInTAI-NR-Item + +CancelledCellsInTAI-NR-Item ::= SEQUENCE{ + nR-CGI NR-CGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { {CancelledCellsInTAI-NR-Item-ExtIEs} } OPTIONAL, + ... +} + +CancelledCellsInTAI-NR-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CandidateCellList ::= SEQUENCE (SIZE(1.. maxnoofCandidateCells)) OF CandidateCellItem + +CandidateCellItem ::= SEQUENCE{ + candidateCell CandidateCell, + iE-Extensions ProtocolExtensionContainer { {CandidateCellItem-ExtIEs} } OPTIONAL, + ... +} + +CandidateCellItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CandidateCell::= CHOICE { + candidateCGI CandidateCellID, + candidatePCI CandidatePCI, + choice-Extensions ProtocolIE-SingleContainer { { CandidateCell-ExtIEs} } +} + +CandidateCell-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + + +CandidateCellID::= SEQUENCE { + candidateCellID NR-CGI, + iE-Extensions ProtocolExtensionContainer { { CandidateCellID-ExtIEs} } OPTIONAL, + ... +} + +CandidateCellID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CandidatePCI::= SEQUENCE { + candidatePCI INTEGER (0..1007, ...), + candidateNRARFCN INTEGER (0..maxNRARFCN), + iE-Extensions ProtocolExtensionContainer { { CandidatePCI-ExtIEs} } OPTIONAL, + ... +} + +CandidatePCI-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +Cause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + nas CauseNas, + protocol CauseProtocol, + misc CauseMisc, + choice-Extensions ProtocolIE-SingleContainer { {Cause-ExtIEs} } +} + +Cause-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +CauseMisc ::= ENUMERATED { + control-processing-overload, + not-enough-user-plane-processing-resources, + hardware-failure, + om-intervention, + unknown-PLMN-or-SNPN, + unspecified, + ... +} + +CauseNas ::= ENUMERATED { + normal-release, + authentication-failure, + deregister, + unspecified, + ..., + uE-not-in-PLMN-serving-area +} + +CauseProtocol ::= ENUMERATED { + transfer-syntax-error, + abstract-syntax-error-reject, + abstract-syntax-error-ignore-and-notify, + message-not-compatible-with-receiver-state, + semantic-error, + abstract-syntax-error-falsely-constructed-message, + unspecified, + ... +} + +CauseRadioNetwork ::= ENUMERATED { + unspecified, + txnrelocoverall-expiry, + successful-handover, + release-due-to-ngran-generated-reason, + release-due-to-5gc-generated-reason, + handover-cancelled, + partial-handover, + ho-failure-in-target-5GC-ngran-node-or-target-system, + ho-target-not-allowed, + tngrelocoverall-expiry, + tngrelocprep-expiry, + cell-not-available, + unknown-targetID, + no-radio-resources-available-in-target-cell, + unknown-local-UE-NGAP-ID, + inconsistent-remote-UE-NGAP-ID, + handover-desirable-for-radio-reason, + time-critical-handover, + resource-optimisation-handover, + reduce-load-in-serving-cell, + user-inactivity, + radio-connection-with-ue-lost, + radio-resources-not-available, + invalid-qos-combination, + failure-in-radio-interface-procedure, + interaction-with-other-procedure, + unknown-PDU-session-ID, + unkown-qos-flow-ID, + multiple-PDU-session-ID-instances, + multiple-qos-flow-ID-instances, + encryption-and-or-integrity-protection-algorithms-not-supported, + ng-intra-system-handover-triggered, + ng-inter-system-handover-triggered, + xn-handover-triggered, + not-supported-5QI-value, + ue-context-transfer, + ims-voice-eps-fallback-or-rat-fallback-triggered, + up-integrity-protection-not-possible, + up-confidentiality-protection-not-possible, + slice-not-supported, + ue-in-rrc-inactive-state-not-reachable, + redirection, + resources-not-available-for-the-slice, + ue-max-integrity-protected-data-rate-reason, + release-due-to-cn-detected-mobility, + ..., + n26-interface-not-available, + release-due-to-pre-emption, + multiple-location-reporting-reference-ID-instances, + rsn-not-available-for-the-up, + npn-access-denied, + cag-only-access-denied, + insufficient-ue-capabilities, + redcap-ue-not-supported, + unknown-MBS-Session-ID, + indicated-MBS-session-area-information-not-served-by-the-gNB, + inconsistent-slice-info-for-the-session, + misaligned-association-for-multicast-unicast +} + +CauseTransport ::= ENUMERATED { + transport-resource-unavailable, + unspecified, + ... +} + +Cell-CAGInformation ::= SEQUENCE { + nGRAN-CGI NGRAN-CGI, + cellCAGList CellCAGList, + iE-Extensions ProtocolExtensionContainer { {Cell-CAGInformation-ExtIEs} } OPTIONAL, + ... +} + +Cell-CAGInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +CellCAGList ::= SEQUENCE (SIZE(1..maxnoofCAGSperCell)) OF CAG-ID + +CellIDBroadcastEUTRA ::= SEQUENCE (SIZE(1..maxnoofCellIDforWarning)) OF CellIDBroadcastEUTRA-Item + +CellIDBroadcastEUTRA-Item ::= SEQUENCE { + eUTRA-CGI EUTRA-CGI, + iE-Extensions ProtocolExtensionContainer { {CellIDBroadcastEUTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +CellIDBroadcastEUTRA-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CellIDBroadcastNR ::= SEQUENCE (SIZE(1..maxnoofCellIDforWarning)) OF CellIDBroadcastNR-Item + +CellIDBroadcastNR-Item ::= SEQUENCE { + nR-CGI NR-CGI, + iE-Extensions ProtocolExtensionContainer { {CellIDBroadcastNR-Item-ExtIEs} } OPTIONAL, + ... +} + +CellIDBroadcastNR-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CellIDCancelledEUTRA ::= SEQUENCE (SIZE(1..maxnoofCellIDforWarning)) OF CellIDCancelledEUTRA-Item + +CellIDCancelledEUTRA-Item ::= SEQUENCE { + eUTRA-CGI EUTRA-CGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { {CellIDCancelledEUTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +CellIDCancelledEUTRA-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CellIDCancelledNR ::= SEQUENCE (SIZE(1..maxnoofCellIDforWarning)) OF CellIDCancelledNR-Item + +CellIDCancelledNR-Item ::= SEQUENCE { + nR-CGI NR-CGI, + numberOfBroadcasts NumberOfBroadcasts, + iE-Extensions ProtocolExtensionContainer { {CellIDCancelledNR-Item-ExtIEs} } OPTIONAL, + ... +} + +CellIDCancelledNR-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CellIDListForRestart ::= CHOICE { + eUTRA-CGIListforRestart EUTRA-CGIList, + nR-CGIListforRestart NR-CGIList, + choice-Extensions ProtocolIE-SingleContainer { {CellIDListForRestart-ExtIEs} } +} + +CellIDListForRestart-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +CellSize ::= ENUMERATED {verysmall, small, medium, large, ...} + + +CellType ::= SEQUENCE { + cellSize CellSize, + iE-Extensions ProtocolExtensionContainer { {CellType-ExtIEs} } OPTIONAL, + ... +} + +CellType-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CEmodeBSupport-Indicator ::= ENUMERATED {supported,...} + + +CEmodeBrestricted ::= ENUMERATED { + restricted, + not-restricted, + ... +} + +CNAssistedRANTuning ::= SEQUENCE { + expectedUEBehaviour ExpectedUEBehaviour OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CNAssistedRANTuning-ExtIEs} } OPTIONAL, + ... +} + +CNAssistedRANTuning-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CNsubgroupID ::= INTEGER (0..7, ...) + +CNTypeRestrictionsForEquivalent ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF CNTypeRestrictionsForEquivalentItem + +CNTypeRestrictionsForEquivalentItem ::= SEQUENCE { + plmnIdentity PLMNIdentity, + cn-Type ENUMERATED {epc-forbidden, fiveGC-forbidden, ...}, + iE-Extensions ProtocolExtensionContainer { {CNTypeRestrictionsForEquivalentItem-ExtIEs} } OPTIONAL, + ... +} + +CNTypeRestrictionsForEquivalentItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::={ + ... +} + +CNTypeRestrictionsForServing ::= ENUMERATED { + epc-forbidden, + ... +} + +CommonNetworkInstance ::= OCTET STRING + +CompletedCellsInEAI-EUTRA ::= SEQUENCE (SIZE(1..maxnoofCellinEAI)) OF CompletedCellsInEAI-EUTRA-Item + +CompletedCellsInEAI-EUTRA-Item ::= SEQUENCE { + eUTRA-CGI EUTRA-CGI, + iE-Extensions ProtocolExtensionContainer { {CompletedCellsInEAI-EUTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +CompletedCellsInEAI-EUTRA-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CompletedCellsInEAI-NR ::= SEQUENCE (SIZE(1..maxnoofCellinEAI)) OF CompletedCellsInEAI-NR-Item + +CompletedCellsInEAI-NR-Item ::= SEQUENCE { + nR-CGI NR-CGI, + iE-Extensions ProtocolExtensionContainer { {CompletedCellsInEAI-NR-Item-ExtIEs} } OPTIONAL, + ... +} + +CompletedCellsInEAI-NR-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CompletedCellsInTAI-EUTRA ::= SEQUENCE (SIZE(1..maxnoofCellinTAI)) OF CompletedCellsInTAI-EUTRA-Item + +CompletedCellsInTAI-EUTRA-Item ::= SEQUENCE{ + eUTRA-CGI EUTRA-CGI, + iE-Extensions ProtocolExtensionContainer { {CompletedCellsInTAI-EUTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +CompletedCellsInTAI-EUTRA-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CompletedCellsInTAI-NR ::= SEQUENCE (SIZE(1..maxnoofCellinTAI)) OF CompletedCellsInTAI-NR-Item + +CompletedCellsInTAI-NR-Item ::= SEQUENCE{ + nR-CGI NR-CGI, + iE-Extensions ProtocolExtensionContainer { {CompletedCellsInTAI-NR-Item-ExtIEs} } OPTIONAL, + ... +} + +CompletedCellsInTAI-NR-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ConcurrentWarningMessageInd ::= ENUMERATED { + true, + ... +} + +ConfidentialityProtectionIndication ::= ENUMERATED { + required, + preferred, + not-needed, + ... +} + +ConfidentialityProtectionResult ::= ENUMERATED { + performed, + not-performed, + ... +} + +ConfiguredTACIndication ::= ENUMERATED { + true, + ... +} + +CoreNetworkAssistanceInformationForInactive ::= SEQUENCE { + uEIdentityIndexValue UEIdentityIndexValue, + uESpecificDRX PagingDRX OPTIONAL, + periodicRegistrationUpdateTimer PeriodicRegistrationUpdateTimer, + mICOModeIndication MICOModeIndication OPTIONAL, + tAIListForInactive TAIListForInactive, + expectedUEBehaviour ExpectedUEBehaviour OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CoreNetworkAssistanceInformationForInactive-ExtIEs} } OPTIONAL, + ... +} + +CoreNetworkAssistanceInformationForInactive-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-EUTRA-PagingeDRXInformation CRITICALITY ignore EXTENSION EUTRA-PagingeDRXInformation PRESENCE optional }| + { ID id-ExtendedUEIdentityIndexValue CRITICALITY ignore EXTENSION ExtendedUEIdentityIndexValue PRESENCE optional }| + { ID id-UERadioCapabilityForPaging CRITICALITY ignore EXTENSION UERadioCapabilityForPaging PRESENCE optional }| + { ID id-MicoAllPLMN CRITICALITY ignore EXTENSION MicoAllPLMN PRESENCE optional }| + { ID id-NR-PagingeDRXInformation CRITICALITY ignore EXTENSION NR-PagingeDRXInformation PRESENCE optional }| + { ID id-PagingCauseIndicationForVoiceService CRITICALITY ignore EXTENSION PagingCauseIndicationForVoiceService PRESENCE optional }| + { ID id-PEIPSassistanceInformation CRITICALITY ignore EXTENSION PEIPSassistanceInformation PRESENCE optional }| + { ID id-HashedUEIdentityIndexValue CRITICALITY ignore EXTENSION HashedUEIdentityIndexValue PRESENCE optional }, + ... +} + +COUNTValueForPDCP-SN12 ::= SEQUENCE { + pDCP-SN12 INTEGER (0..4095), + hFN-PDCP-SN12 INTEGER (0..1048575), + iE-Extensions ProtocolExtensionContainer { {COUNTValueForPDCP-SN12-ExtIEs} } OPTIONAL, + ... +} + +COUNTValueForPDCP-SN12-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +COUNTValueForPDCP-SN18 ::= SEQUENCE { + pDCP-SN18 INTEGER (0..262143), + hFN-PDCP-SN18 INTEGER (0..16383), + iE-Extensions ProtocolExtensionContainer { {COUNTValueForPDCP-SN18-ExtIEs} } OPTIONAL, + ... +} + +COUNTValueForPDCP-SN18-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CoverageEnhancementLevel ::= OCTET STRING + +CPTransportLayerInformation ::= CHOICE { + endpointIPAddress TransportLayerAddress, + choice-Extensions ProtocolIE-SingleContainer { {CPTransportLayerInformation-ExtIEs} } +} + +CPTransportLayerInformation-ExtIEs NGAP-PROTOCOL-IES ::= { + { ID id-EndpointIPAddressAndPort CRITICALITY reject TYPE EndpointIPAddressAndPort PRESENCE mandatory }, + ... +} + +CriticalityDiagnostics ::= SEQUENCE { + procedureCode ProcedureCode OPTIONAL, + triggeringMessage TriggeringMessage OPTIONAL, + procedureCriticality Criticality OPTIONAL, + iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer {{CriticalityDiagnostics-ExtIEs}} OPTIONAL, + ... +} + +CriticalityDiagnostics-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE(1..maxnoofErrors)) OF CriticalityDiagnostics-IE-Item + +CriticalityDiagnostics-IE-Item ::= SEQUENCE { + iECriticality Criticality, + iE-ID ProtocolIE-ID, + typeOfError TypeOfError, + iE-Extensions ProtocolExtensionContainer {{CriticalityDiagnostics-IE-Item-ExtIEs}} OPTIONAL, + ... +} + +CriticalityDiagnostics-IE-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CellBasedMDT-NR::= SEQUENCE { + cellIdListforMDT CellIdListforMDT-NR, + iE-Extensions ProtocolExtensionContainer { {CellBasedMDT-NR-ExtIEs} } OPTIONAL, + ... +} + +CellBasedMDT-NR-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CellIdListforMDT-NR ::= SEQUENCE (SIZE(1..maxnoofCellIDforMDT)) OF NR-CGI + + +CellBasedMDT-EUTRA::= SEQUENCE { + cellIdListforMDT CellIdListforMDT-EUTRA, + iE-Extensions ProtocolExtensionContainer { {CellBasedMDT-EUTRA-ExtIEs} } OPTIONAL, + ... +} + +CellBasedMDT-EUTRA-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CellBasedQMC ::= SEQUENCE { + cellIdListforQMC CellIdListforQMC, + iE-Extensions ProtocolExtensionContainer { {CellBasedQMC-ExtIEs} } OPTIONAL, + ... +} + +CellBasedQMC-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CellIdListforQMC ::= SEQUENCE (SIZE(1..maxnoofCellIDforQMC)) OF NGRAN-CGI + +CellIdListforMDT-EUTRA ::= SEQUENCE (SIZE(1..maxnoofCellIDforMDT)) OF EUTRA-CGI + + +-- D + +DataCodingScheme ::= BIT STRING (SIZE(8)) + +DataForwardingAccepted ::= ENUMERATED { + data-forwarding-accepted, + ... +} + +DataForwardingNotPossible ::= ENUMERATED { + data-forwarding-not-possible, + ... +} + +DataForwardingResponseDRBList ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DataForwardingResponseDRBItem + +DataForwardingResponseDRBItem ::= SEQUENCE { + dRB-ID DRB-ID, + dLForwardingUP-TNLInformation UPTransportLayerInformation OPTIONAL, + uLForwardingUP-TNLInformation UPTransportLayerInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer {{DataForwardingResponseDRBItem-ExtIEs}} OPTIONAL, + ... +} + +DataForwardingResponseDRBItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +DAPSRequestInfo ::= SEQUENCE { + dAPSIndicator ENUMERATED {daps-ho-required, ...}, + iE-Extensions ProtocolExtensionContainer { {DAPSRequestInfo-ExtIEs} } OPTIONAL, + ... +} + +DAPSRequestInfo-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +DAPSResponseInfoList ::= SEQUENCE (SIZE(1.. maxnoofDRBs)) OF DAPSResponseInfoItem + +DAPSResponseInfoItem ::= SEQUENCE { + dRB-ID DRB-ID, + dAPSResponseInfo DAPSResponseInfo, + iE-Extension ProtocolExtensionContainer { {DAPSResponseInfoItem-ExtIEs} } OPTIONAL, + ... +} + +DAPSResponseInfoItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +DAPSResponseInfo ::= SEQUENCE { + dapsresponseindicator ENUMERATED {daps-ho-accepted, daps-ho-not-accepted, ...}, + iE-Extensions ProtocolExtensionContainer { { DAPSResponseInfo-ExtIEs} } OPTIONAL, + ... +} + +DAPSResponseInfo-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +DataForwardingResponseERABList ::= SEQUENCE (SIZE(1..maxnoofE-RABs)) OF DataForwardingResponseERABListItem + +DataForwardingResponseERABListItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dLForwardingUP-TNLInformation UPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { {DataForwardingResponseERABListItem-ExtIEs} } OPTIONAL, + ... +} + +DataForwardingResponseERABListItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +DelayCritical ::= ENUMERATED { + delay-critical, + non-delay-critical, + ... +} + +DL-CP-SecurityInformation ::= SEQUENCE { + dl-NAS-MAC DL-NAS-MAC, + iE-Extensions ProtocolExtensionContainer { { DL-CP-SecurityInformation-ExtIEs} } OPTIONAL, + ... +} + +DL-CP-SecurityInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +DL-NAS-MAC ::= BIT STRING (SIZE (16)) + +DLForwarding ::= ENUMERATED { + dl-forwarding-proposed, + ... +} + +DL-NGU-TNLInformationReused ::= ENUMERATED { + true, + ... +} + +DirectForwardingPathAvailability ::= ENUMERATED { + direct-path-available, + ... +} + +DRB-ID ::= INTEGER (1..32, ...) + +DRBsSubjectToStatusTransferList ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DRBsSubjectToStatusTransferItem + +DRBsSubjectToStatusTransferItem ::= SEQUENCE { + dRB-ID DRB-ID, + dRBStatusUL DRBStatusUL, + dRBStatusDL DRBStatusDL, + iE-Extension ProtocolExtensionContainer { {DRBsSubjectToStatusTransferItem-ExtIEs} } OPTIONAL, + ... +} + +DRBsSubjectToStatusTransferItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-OldAssociatedQosFlowList-ULendmarkerexpected CRITICALITY ignore EXTENSION AssociatedQosFlowList PRESENCE optional }, + ... +} + +DRBStatusDL ::= CHOICE { + dRBStatusDL12 DRBStatusDL12, + dRBStatusDL18 DRBStatusDL18, + choice-Extensions ProtocolIE-SingleContainer { {DRBStatusDL-ExtIEs} } +} + +DRBStatusDL-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +DRBStatusDL12 ::= SEQUENCE { + dL-COUNTValue COUNTValueForPDCP-SN12, + iE-Extension ProtocolExtensionContainer { {DRBStatusDL12-ExtIEs} } OPTIONAL, + ... +} + +DRBStatusDL12-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBStatusDL18 ::= SEQUENCE { + dL-COUNTValue COUNTValueForPDCP-SN18, + iE-Extension ProtocolExtensionContainer { {DRBStatusDL18-ExtIEs} } OPTIONAL, + ... +} + +DRBStatusDL18-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBStatusUL ::= CHOICE { + dRBStatusUL12 DRBStatusUL12, + dRBStatusUL18 DRBStatusUL18, + choice-Extensions ProtocolIE-SingleContainer { {DRBStatusUL-ExtIEs} } +} + +DRBStatusUL-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +DRBStatusUL12 ::= SEQUENCE { + uL-COUNTValue COUNTValueForPDCP-SN12, + receiveStatusOfUL-PDCP-SDUs BIT STRING (SIZE(1..2048)) OPTIONAL, + iE-Extension ProtocolExtensionContainer { {DRBStatusUL12-ExtIEs} } OPTIONAL, + ... +} + +DRBStatusUL12-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBStatusUL18 ::= SEQUENCE { + uL-COUNTValue COUNTValueForPDCP-SN18, + receiveStatusOfUL-PDCP-SDUs BIT STRING (SIZE(1..131072)) OPTIONAL, + iE-Extension ProtocolExtensionContainer { {DRBStatusUL18-ExtIEs} } OPTIONAL, + ... +} + +DRBStatusUL18-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBsToQosFlowsMappingList ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF DRBsToQosFlowsMappingItem + +DRBsToQosFlowsMappingItem ::= SEQUENCE { + dRB-ID DRB-ID, + associatedQosFlowList AssociatedQosFlowList, + iE-Extensions ProtocolExtensionContainer { {DRBsToQosFlowsMappingItem-ExtIEs} } OPTIONAL, + ... +} + +DRBsToQosFlowsMappingItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-DAPSRequestInfo CRITICALITY ignore EXTENSION DAPSRequestInfo PRESENCE optional }, + ... +} + +Dynamic5QIDescriptor ::= SEQUENCE { + priorityLevelQos PriorityLevelQos, + packetDelayBudget PacketDelayBudget, + packetErrorRate PacketErrorRate, + fiveQI FiveQI OPTIONAL, + delayCritical DelayCritical OPTIONAL, +-- The above IE shall be present in case of GBR QoS flow + averagingWindow AveragingWindow OPTIONAL, +-- The above IE shall be present in case of GBR QoS flow + maximumDataBurstVolume MaximumDataBurstVolume OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {Dynamic5QIDescriptor-ExtIEs} } OPTIONAL, + ... +} + +Dynamic5QIDescriptor-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-ExtendedPacketDelayBudget CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }| + { ID id-CNPacketDelayBudgetDL CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }| + { ID id-CNPacketDelayBudgetUL CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }, + ... +} + +-- E + +EarlyMeasurement ::= ENUMERATED {true, ...} + +EarlyStatusTransfer-TransparentContainer ::= SEQUENCE { + procedureStage ProcedureStageChoice, + iE-Extensions ProtocolExtensionContainer { {EarlyStatusTransfer-TransparentContainer-ExtIEs} } OPTIONAL, + ... +} + +EarlyStatusTransfer-TransparentContainer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ProcedureStageChoice ::= CHOICE { + first-dl-count FirstDLCount, + choice-Extensions ProtocolIE-SingleContainer { {ProcedureStageChoice-ExtIEs} } +} + +ProcedureStageChoice-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +FirstDLCount ::= SEQUENCE { + dRBsSubjectToEarlyStatusTransfer DRBsSubjectToEarlyStatusTransfer-List, + iE-Extension ProtocolExtensionContainer { {FirstDLCount-ExtIEs} } OPTIONAL, + ... +} + +FirstDLCount-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +DRBsSubjectToEarlyStatusTransfer-List ::= SEQUENCE (SIZE (1.. maxnoofDRBs)) OF DRBsSubjectToEarlyStatusTransfer-Item + +DRBsSubjectToEarlyStatusTransfer-Item ::= SEQUENCE { + dRB-ID DRB-ID, + firstDLCOUNT DRBStatusDL, + iE-Extension ProtocolExtensionContainer { { DRBsSubjectToEarlyStatusTransfer-Item-ExtIEs} } OPTIONAL, + ... +} + +DRBsSubjectToEarlyStatusTransfer-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +EDT-Session ::= ENUMERATED { + true, + ... +} + +EmergencyAreaID ::= OCTET STRING (SIZE(3)) + +EmergencyAreaIDBroadcastEUTRA ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaIDBroadcastEUTRA-Item + +EmergencyAreaIDBroadcastEUTRA-Item ::= SEQUENCE { + emergencyAreaID EmergencyAreaID, + completedCellsInEAI-EUTRA CompletedCellsInEAI-EUTRA, + iE-Extensions ProtocolExtensionContainer { {EmergencyAreaIDBroadcastEUTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +EmergencyAreaIDBroadcastEUTRA-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +EmergencyAreaIDBroadcastNR ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaIDBroadcastNR-Item + +EmergencyAreaIDBroadcastNR-Item ::= SEQUENCE { + emergencyAreaID EmergencyAreaID, + completedCellsInEAI-NR CompletedCellsInEAI-NR, + iE-Extensions ProtocolExtensionContainer { {EmergencyAreaIDBroadcastNR-Item-ExtIEs} } OPTIONAL, + ... +} + +EmergencyAreaIDBroadcastNR-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +EmergencyAreaIDCancelledEUTRA ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaIDCancelledEUTRA-Item + +EmergencyAreaIDCancelledEUTRA-Item ::= SEQUENCE { + emergencyAreaID EmergencyAreaID, + cancelledCellsInEAI-EUTRA CancelledCellsInEAI-EUTRA, + iE-Extensions ProtocolExtensionContainer { {EmergencyAreaIDCancelledEUTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +EmergencyAreaIDCancelledEUTRA-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +EmergencyAreaIDCancelledNR ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaIDCancelledNR-Item + +EmergencyAreaIDCancelledNR-Item ::= SEQUENCE { + emergencyAreaID EmergencyAreaID, + cancelledCellsInEAI-NR CancelledCellsInEAI-NR, + iE-Extensions ProtocolExtensionContainer { {EmergencyAreaIDCancelledNR-Item-ExtIEs} } OPTIONAL, + ... +} + +EmergencyAreaIDCancelledNR-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +EmergencyAreaIDList ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaID + +EmergencyAreaIDListForRestart ::= SEQUENCE (SIZE(1..maxnoofEAIforRestart)) OF EmergencyAreaID + +EmergencyFallbackIndicator ::= SEQUENCE { + emergencyFallbackRequestIndicator EmergencyFallbackRequestIndicator, + emergencyServiceTargetCN EmergencyServiceTargetCN OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {EmergencyFallbackIndicator-ExtIEs} } OPTIONAL, + ... +} + +EmergencyFallbackIndicator-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +EmergencyFallbackRequestIndicator ::= ENUMERATED { + emergency-fallback-requested, + ... +} + +EmergencyServiceTargetCN ::= ENUMERATED { + fiveGC, + epc, + ... +} + +ENB-ID ::= CHOICE { + macroENB-ID BIT STRING (SIZE(20)), + homeENB-ID BIT STRING (SIZE(28)), + short-macroENB-ID BIT STRING (SIZE(18)), + long-macroENB-ID BIT STRING (SIZE(21)), + choice-Extensions ProtocolIE-SingleContainer { { ENB-ID-ExtIEs} } +} + +ENB-ID-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + + +Enhanced-CoverageRestriction ::= ENUMERATED {restricted, ... } + + +Extended-ConnectedTime ::= INTEGER (0..255) + +EN-DCSONConfigurationTransfer ::= OCTET STRING + +EndpointIPAddressAndPort ::=SEQUENCE { + endpointIPAddress TransportLayerAddress, + portNumber PortNumber, + iE-Extensions ProtocolExtensionContainer { { EndpointIPAddressAndPort-ExtIEs} } OPTIONAL +} + +EndIndication ::= ENUMERATED { + no-further-data, + further-data-exists, + ... +} + +EndpointIPAddressAndPort-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +EquivalentPLMNs ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMNIdentity + +EPS-TAC ::= OCTET STRING (SIZE(2)) + +EPS-TAI ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + ePS-TAC EPS-TAC, + iE-Extensions ProtocolExtensionContainer { {EPS-TAI-ExtIEs} } OPTIONAL, + ... +} + +EPS-TAI-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +E-RAB-ID ::= INTEGER (0..15, ...) + +E-RABInformationList ::= SEQUENCE (SIZE(1..maxnoofE-RABs)) OF E-RABInformationItem + +E-RABInformationItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + dLForwarding DLForwarding OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RABInformationItem-ExtIEs} } OPTIONAL, + ... +} + +E-RABInformationItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + {ID id-SourceTNLAddrInfo CRITICALITY ignore EXTENSION TransportLayerAddress PRESENCE optional}| + {ID id-SourceNodeTNLAddrInfo CRITICALITY ignore EXTENSION TransportLayerAddress PRESENCE optional}, + ... +} + +EUTRACellIdentity ::= BIT STRING (SIZE(28)) + +EUTRA-CGI ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + eUTRACellIdentity EUTRACellIdentity, + iE-Extensions ProtocolExtensionContainer { {EUTRA-CGI-ExtIEs} } OPTIONAL, + ... +} + +EUTRA-CGI-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +EUTRA-CGIList ::= SEQUENCE (SIZE(1..maxnoofCellsinngeNB)) OF EUTRA-CGI + +EUTRA-CGIListForWarning ::= SEQUENCE (SIZE(1..maxnoofCellIDforWarning)) OF EUTRA-CGI + +EUTRA-PagingeDRXInformation ::= SEQUENCE { + eUTRA-paging-eDRX-Cycle EUTRA-Paging-eDRX-Cycle, + eUTRA-paging-Time-Window EUTRA-Paging-Time-Window OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {EUTRA-PagingeDRXInformation-ExtIEs} } OPTIONAL, + ... +} + +EUTRA-PagingeDRXInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +EUTRA-Paging-eDRX-Cycle ::= ENUMERATED { + hfhalf, hf1, hf2, hf4, hf6, + hf8, hf10, hf12, hf14, hf16, + hf32, hf64, hf128, hf256, + ... +} + +EUTRA-Paging-Time-Window ::= ENUMERATED { + s1, s2, s3, s4, s5, + s6, s7, s8, s9, s10, + s11, s12, s13, s14, s15, s16, + ... +} + +EUTRAencryptionAlgorithms ::= BIT STRING (SIZE(16, ...)) + +EUTRAintegrityProtectionAlgorithms ::= BIT STRING (SIZE(16, ...)) + +EventType ::= ENUMERATED { + direct, + change-of-serve-cell, + ue-presence-in-area-of-interest, + stop-change-of-serve-cell, + stop-ue-presence-in-area-of-interest, + cancel-location-reporting-for-the-ue, + ... +} + +ExcessPacketDelayThresholdConfiguration ::= SEQUENCE (SIZE(1..maxnoofThresholdsForExcessPacketDelay)) OF ExcessPacketDelayThresholdItem + +ExcessPacketDelayThresholdItem ::= SEQUENCE { + fiveQi FiveQI, + excessPacketDelayThresholdValue ExcessPacketDelayThresholdValue, + iE-Extensions ProtocolExtensionContainer { { ExcessPacketDelayThresholdItem-ExtIEs} } OPTIONAL, + ... +} + +ExcessPacketDelayThresholdItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ExcessPacketDelayThresholdValue ::= ENUMERATED { +ms0dot25, ms0dot5, ms1, ms2, ms4, ms5, ms10, ms20, ms30, ms40, ms50, ms60, ms70, ms80, ms90, ms100, ms150, ms300, ms500, + ... +} + +ExpectedActivityPeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181, ...) + +ExpectedHOInterval ::= ENUMERATED { + sec15, sec30, sec60, sec90, sec120, sec180, long-time, + ... +} + +ExpectedIdlePeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181, ...) + +ExpectedUEActivityBehaviour ::= SEQUENCE { + expectedActivityPeriod ExpectedActivityPeriod OPTIONAL, + expectedIdlePeriod ExpectedIdlePeriod OPTIONAL, + sourceOfUEActivityBehaviourInformation SourceOfUEActivityBehaviourInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEActivityBehaviour-ExtIEs} } OPTIONAL, + ... +} + +ExpectedUEActivityBehaviour-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ExpectedUEBehaviour ::= SEQUENCE { + expectedUEActivityBehaviour ExpectedUEActivityBehaviour OPTIONAL, + expectedHOInterval ExpectedHOInterval OPTIONAL, + expectedUEMobility ExpectedUEMobility OPTIONAL, + expectedUEMovingTrajectory ExpectedUEMovingTrajectory OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEBehaviour-ExtIEs} } OPTIONAL, + ... +} + +ExpectedUEBehaviour-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ExpectedUEMobility ::= ENUMERATED { + stationary, + mobile, + ... +} + +ExpectedUEMovingTrajectory ::= SEQUENCE (SIZE(1..maxnoofCellsUEMovingTrajectory)) OF ExpectedUEMovingTrajectoryItem + +ExpectedUEMovingTrajectoryItem ::= SEQUENCE { + nGRAN-CGI NGRAN-CGI, + timeStayedInCell INTEGER (0..4095) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEMovingTrajectoryItem-ExtIEs} } OPTIONAL, + ... +} + +ExpectedUEMovingTrajectoryItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +Extended-AMFName ::= SEQUENCE { + aMFNameVisibleString AMFNameVisibleString OPTIONAL, + aMFNameUTF8String AMFNameUTF8String OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Extended-AMFName-ExtIEs } } OPTIONAL, + ... +} + +Extended-AMFName-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ExtendedPacketDelayBudget ::= INTEGER (1..65535, ..., 65536..109999) + + +Extended-RANNodeName ::= SEQUENCE { + rANNodeNameVisibleString RANNodeNameVisibleString OPTIONAL, + rANNodeNameUTF8String RANNodeNameUTF8String OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Extended-RANNodeName-ExtIEs } } OPTIONAL, ... +} + +Extended-RANNodeName-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ExtendedRATRestrictionInformation ::= SEQUENCE { + primaryRATRestriction BIT STRING (SIZE(8, ...)), + secondaryRATRestriction BIT STRING (SIZE(8, ...)), + iE-Extensions ProtocolExtensionContainer { {ExtendedRATRestrictionInformation-ExtIEs} } OPTIONAL, + ... +} + +ExtendedRATRestrictionInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ExtendedRNC-ID ::= INTEGER (4096..65535) + +ExtendedSliceSupportList ::= SEQUENCE (SIZE(1..maxnoofExtSliceItems)) OF SliceSupportItem + +ExtendedUEIdentityIndexValue ::= BIT STRING (SIZE(16)) + +EventTrigger::= CHOICE { + outOfCoverage ENUMERATED {true, ...}, + eventL1LoggedMDTConfig EventL1LoggedMDTConfig, + choice-Extensions ProtocolIE-SingleContainer { { EventTrigger-ExtIEs} } +} + +EventTrigger-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +EventL1LoggedMDTConfig ::= SEQUENCE { + l1Threshold MeasurementThresholdL1LoggedMDT, + hysteresis Hysteresis, + timeToTrigger TimeToTrigger, + iE-Extensions ProtocolExtensionContainer { { EventL1LoggedMDTConfig-ExtIEs} } OPTIONAL, + ... +} + +EventL1LoggedMDTConfig-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MeasurementThresholdL1LoggedMDT ::= CHOICE { + threshold-RSRP Threshold-RSRP, + threshold-RSRQ Threshold-RSRQ, + choice-Extensions ProtocolIE-SingleContainer { { MeasurementThresholdL1LoggedMDT-ExtIEs} } +} + +MeasurementThresholdL1LoggedMDT-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +-- F + +FailureIndication ::= SEQUENCE { + uERLFReportContainer UERLFReportContainer, + iE-Extensions ProtocolExtensionContainer { { FailureIndication-ExtIEs} } OPTIONAL, + ... +} + +FailureIndication-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +FiveG-ProSeAuthorized ::= SEQUENCE { + fiveGProSeDirectDiscovery FiveGProSeDirectDiscovery OPTIONAL, + fiveGProSeDirectCommunication FiveGProSeDirectCommunication OPTIONAL, + fiveGProSeLayer2UEtoNetworkRelay FiveGProSeLayer2UEtoNetworkRelay OPTIONAL, + fiveGProSeLayer3UEtoNetworkRelay FiveGProSeLayer3UEtoNetworkRelay OPTIONAL, + fiveGProSeLayer2RemoteUE FiveGProSeLayer2RemoteUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {FiveG-ProSeAuthorized-ExtIEs} } OPTIONAL, + ... +} + +FiveG-ProSeAuthorized-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +FiveGProSeDirectDiscovery ::= ENUMERATED { + authorized, + not-authorized, + ... +} + +FiveGProSeDirectCommunication ::= ENUMERATED { + authorized, + not-authorized, + ... +} + +FiveGProSeLayer2UEtoNetworkRelay ::= ENUMERATED { + authorized, + not-authorized, + ... +} + +FiveGProSeLayer3UEtoNetworkRelay ::= ENUMERATED { + authorized, + not-authorized, + ... +} + +FiveGProSeLayer2RemoteUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} + + + +FiveG-ProSePC5QoSParameters ::= SEQUENCE { + fiveGProSepc5QoSFlowList FiveGProSePC5QoSFlowList, + fiveGProSepc5LinkAggregateBitRates BitRate OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { FiveG-ProSePC5QoSParameters-ExtIEs} } OPTIONAL, + ... +} + +FiveG-ProSePC5QoSParameters-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +FiveGProSePC5QoSFlowList ::= SEQUENCE (SIZE(1..maxnoofPC5QoSFlows)) OF FiveGProSePC5QoSFlowItem + +FiveGProSePC5QoSFlowItem ::= SEQUENCE { + fiveGproSepQI FiveQI, + fiveGproSepc5FlowBitRates FiveGProSePC5FlowBitRates OPTIONAL, + fiveGproSerange Range OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { FiveGProSePC5QoSFlowItem-ExtIEs} } OPTIONAL, + ... +} + +FiveGProSePC5QoSFlowItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +FiveGProSePC5FlowBitRates ::= SEQUENCE { + fiveGproSeguaranteedFlowBitRate BitRate, + fiveGproSemaximumFlowBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { { FiveGProSePC5FlowBitRates-ExtIEs} } OPTIONAL, + ... +} + +FiveGProSePC5FlowBitRates-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +FiveG-S-TMSI ::= SEQUENCE { + aMFSetID AMFSetID, + aMFPointer AMFPointer, + fiveG-TMSI FiveG-TMSI, + iE-Extensions ProtocolExtensionContainer { {FiveG-S-TMSI-ExtIEs} } OPTIONAL, + ... +} + +FiveG-S-TMSI-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +FiveG-TMSI ::= OCTET STRING (SIZE(4)) + +FiveQI ::= INTEGER (0..255, ...) + +ForbiddenAreaInformation ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ForbiddenAreaInformation-Item + +ForbiddenAreaInformation-Item ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + forbiddenTACs ForbiddenTACs, + iE-Extensions ProtocolExtensionContainer { {ForbiddenAreaInformation-Item-ExtIEs} } OPTIONAL, + ... +} + +ForbiddenAreaInformation-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ForbiddenTACs ::= SEQUENCE (SIZE(1..maxnoofForbTACs)) OF TAC + +FromEUTRANtoNGRAN ::= SEQUENCE { + sourceeNBID IntersystemSONeNBID, + targetNGRANnodeID IntersystemSONNGRANnodeID, + iE-Extensions ProtocolExtensionContainer { { FromEUTRANtoNGRAN-ExtIEs} } OPTIONAL +} + +FromEUTRANtoNGRAN-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +FromNGRANtoEUTRAN ::= SEQUENCE { + sourceNGRANnodeID IntersystemSONNGRANnodeID, + targeteNBID IntersystemSONeNBID, + iE-Extensions ProtocolExtensionContainer { { FromNGRANtoEUTRAN-ExtIEs} } OPTIONAL +} + +FromNGRANtoEUTRAN-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- G + +GBR-QosInformation ::= SEQUENCE { + maximumFlowBitRateDL BitRate, + maximumFlowBitRateUL BitRate, + guaranteedFlowBitRateDL BitRate, + guaranteedFlowBitRateUL BitRate, + notificationControl NotificationControl OPTIONAL, + maximumPacketLossRateDL PacketLossRate OPTIONAL, + maximumPacketLossRateUL PacketLossRate OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {GBR-QosInformation-ExtIEs} } OPTIONAL, + ... +} + +GBR-QosInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-AlternativeQoSParaSetList CRITICALITY ignore EXTENSION AlternativeQoSParaSetList PRESENCE optional }, + ... +} + +GlobalCable-ID ::= OCTET STRING + +GlobalCable-ID-new ::= SEQUENCE { + globalCable-ID GlobalCable-ID, + tAI TAI, + iE-Extensions ProtocolExtensionContainer { { GlobalCable-ID-new-ExtIEs} } OPTIONAL, + ... +} + +GlobalCable-ID-new-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +GlobalENB-ID ::= SEQUENCE { + pLMNidentity PLMNIdentity, + eNB-ID ENB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalENB-ID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +GlobalGNB-ID ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + gNB-ID GNB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalGNB-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalGNB-ID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +GlobalN3IWF-ID ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + n3IWF-ID N3IWF-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalN3IWF-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalN3IWF-ID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +GlobalLine-ID ::= SEQUENCE { + globalLineIdentity GlobalLineIdentity, + lineType LineType OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {GlobalLine-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalLine-ID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-TAI CRITICALITY ignore EXTENSION TAI PRESENCE optional }, + ... +} + +GlobalLineIdentity ::= OCTET STRING + +GlobalNgENB-ID ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + ngENB-ID NgENB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalNgENB-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalNgENB-ID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +GlobalRANNodeID ::= CHOICE { + globalGNB-ID GlobalGNB-ID, + globalNgENB-ID GlobalNgENB-ID, + globalN3IWF-ID GlobalN3IWF-ID, + choice-Extensions ProtocolIE-SingleContainer { {GlobalRANNodeID-ExtIEs} } +} + +GlobalRANNodeID-ExtIEs NGAP-PROTOCOL-IES ::= { + { ID id-GlobalTNGF-ID CRITICALITY reject TYPE GlobalTNGF-ID PRESENCE mandatory }| + { ID id-GlobalTWIF-ID CRITICALITY reject TYPE GlobalTWIF-ID PRESENCE mandatory }| + { ID id-GlobalW-AGF-ID CRITICALITY reject TYPE GlobalW-AGF-ID PRESENCE mandatory }, + ... +} + +GlobalTNGF-ID ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + tNGF-ID TNGF-ID, + iE-Extensions ProtocolExtensionContainer { { GlobalTNGF-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalTNGF-ID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +GlobalTWIF-ID ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + tWIF-ID TWIF-ID, + iE-Extensions ProtocolExtensionContainer { { GlobalTWIF-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalTWIF-ID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +GlobalW-AGF-ID ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + w-AGF-ID W-AGF-ID, + iE-Extensions ProtocolExtensionContainer { { GlobalW-AGF-ID-ExtIEs} } OPTIONAL, + ... +} + +GlobalW-AGF-ID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +GNB-ID ::= CHOICE { + gNB-ID BIT STRING (SIZE(22..32)), + choice-Extensions ProtocolIE-SingleContainer { {GNB-ID-ExtIEs} } +} + +GNB-ID-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +GTP-TEID ::= OCTET STRING (SIZE(4)) + +GTPTunnel ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + gTP-TEID GTP-TEID, + iE-Extensions ProtocolExtensionContainer { {GTPTunnel-ExtIEs} } OPTIONAL, + ... +} + +GTPTunnel-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +GUAMI ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + aMFRegionID AMFRegionID, + aMFSetID AMFSetID, + aMFPointer AMFPointer, + iE-Extensions ProtocolExtensionContainer { {GUAMI-ExtIEs} } OPTIONAL, + ... +} + +GUAMI-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +GUAMIType ::= ENUMERATED {native, mapped, ...} + +-- H + +HandoverCommandTransfer ::= SEQUENCE { + dLForwardingUP-TNLInformation UPTransportLayerInformation OPTIONAL, + qosFlowToBeForwardedList QosFlowToBeForwardedList OPTIONAL, + dataForwardingResponseDRBList DataForwardingResponseDRBList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {HandoverCommandTransfer-ExtIEs} } OPTIONAL, + ... +} + +HandoverCommandTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalDLForwardingUPTNLInformation CRITICALITY ignore EXTENSION QosFlowPerTNLInformationList PRESENCE optional }| + { ID id-ULForwardingUP-TNLInformation CRITICALITY reject EXTENSION UPTransportLayerInformation PRESENCE optional }| + { ID id-AdditionalULForwardingUPTNLInformation CRITICALITY reject EXTENSION UPTransportLayerInformationList PRESENCE optional }| + { ID id-DataForwardingResponseERABList CRITICALITY ignore EXTENSION DataForwardingResponseERABList PRESENCE optional }| + { ID id-QosFlowFailedToSetupList CRITICALITY ignore EXTENSION QosFlowListWithCause PRESENCE optional }, + ... +} + +HandoverFlag ::= ENUMERATED { + handover-preparation, + ... +} + +HandoverPreparationUnsuccessfulTransfer ::= SEQUENCE { + cause Cause, + iE-Extensions ProtocolExtensionContainer { {HandoverPreparationUnsuccessfulTransfer-ExtIEs} } OPTIONAL, + ... +} + +HandoverPreparationUnsuccessfulTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +HandoverRequestAcknowledgeTransfer ::= SEQUENCE { + dL-NGU-UP-TNLInformation UPTransportLayerInformation, + dLForwardingUP-TNLInformation UPTransportLayerInformation OPTIONAL, + securityResult SecurityResult OPTIONAL, + qosFlowSetupResponseList QosFlowListWithDataForwarding, + qosFlowFailedToSetupList QosFlowListWithCause OPTIONAL, + dataForwardingResponseDRBList DataForwardingResponseDRBList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {HandoverRequestAcknowledgeTransfer-ExtIEs} } OPTIONAL, + ... +} + +HandoverRequestAcknowledgeTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalDLUPTNLInformationForHOList CRITICALITY ignore EXTENSION AdditionalDLUPTNLInformationForHOList PRESENCE optional }| + { ID id-ULForwardingUP-TNLInformation CRITICALITY reject EXTENSION UPTransportLayerInformation PRESENCE optional }| + { ID id-AdditionalULForwardingUPTNLInformation CRITICALITY reject EXTENSION UPTransportLayerInformationList PRESENCE optional }| + { ID id-DataForwardingResponseERABList CRITICALITY ignore EXTENSION DataForwardingResponseERABList PRESENCE optional }| + { ID id-RedundantDL-NGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional }| + { ID id-UsedRSNInformation CRITICALITY ignore EXTENSION RedundantPDUSessionInformation PRESENCE optional }| + { ID id-GlobalRANNodeID CRITICALITY ignore EXTENSION GlobalRANNodeID PRESENCE optional }| + { ID id-MBS-SupportIndicator CRITICALITY ignore EXTENSION MBS-SupportIndicator PRESENCE optional }, + ... +} + +HandoverRequiredTransfer ::= SEQUENCE { + directForwardingPathAvailability DirectForwardingPathAvailability OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {HandoverRequiredTransfer-ExtIEs} } OPTIONAL, + ... +} + +HandoverRequiredTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +HandoverResourceAllocationUnsuccessfulTransfer ::= SEQUENCE { + cause Cause, + criticalityDiagnostics CriticalityDiagnostics OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {HandoverResourceAllocationUnsuccessfulTransfer-ExtIEs} } OPTIONAL, + ... +} + +HandoverResourceAllocationUnsuccessfulTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +HandoverType ::= ENUMERATED { + intra5gs, + fivegs-to-eps, + eps-to-5gs, + ..., + fivegs-to-utran +} + +HashedUEIdentityIndexValue ::= BIT STRING (SIZE(13, ...)) + + +HFCNode-ID ::= OCTET STRING + +HFCNode-ID-new ::= SEQUENCE { + hFCNode-ID HFCNode-ID, + tAI TAI, + iE-Extensions ProtocolExtensionContainer { { HFCNode-ID-new-ExtIEs} } OPTIONAL, + ... +} + +HFCNode-ID-new-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +HOReport::= SEQUENCE { + handoverReportType ENUMERATED {ho-too-early, ho-to-wrong-cell, intersystem-ping-pong, ...}, + handoverCause Cause, + sourcecellCGI NGRAN-CGI, + targetcellCGI NGRAN-CGI, + reestablishmentcellCGI NGRAN-CGI OPTIONAL, + -- The above IE shall be present if the Handover Report Type IE is set to the value "HO to wrong cell" -- + sourcecellC-RNTI BIT STRING (SIZE(16)) OPTIONAL, + targetcellinE-UTRAN EUTRA-CGI OPTIONAL, + -- The above IE shall be present if the Handover Report Type IE is set to the value "Inter System ping-pong" -- + mobilityInformation MobilityInformation OPTIONAL, + uERLFReportContainer UERLFReportContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { HOReport-ExtIEs} } OPTIONAL, + ... +} + +HOReport-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +Hysteresis ::= INTEGER (0..30) + +-- I + +IAB-Authorized ::= ENUMERATED { + authorized, + not-authorized, + ... +} + +IAB-Supported ::= ENUMERATED { + true, + ... +} + +IABNodeIndication ::= ENUMERATED { + true, + ... +} + +IMSVoiceSupportIndicator ::= ENUMERATED { + supported, + not-supported, + ... +} + +IndexToRFSP ::= INTEGER (1..256, ...) + +InfoOnRecommendedCellsAndRANNodesForPaging ::= SEQUENCE { + recommendedCellsForPaging RecommendedCellsForPaging, + recommendRANNodesForPaging RecommendedRANNodesForPaging, + iE-Extensions ProtocolExtensionContainer { {InfoOnRecommendedCellsAndRANNodesForPaging-ExtIEs} } OPTIONAL, + ... +} + +InfoOnRecommendedCellsAndRANNodesForPaging-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +IntegrityProtectionIndication ::= ENUMERATED { + required, + preferred, + not-needed, + ... +} + +IntegrityProtectionResult ::= ENUMERATED { + performed, + not-performed, + ... +} + +IntendedNumberOfPagingAttempts ::= INTEGER (1..16, ...) + +InterfacesToTrace ::= BIT STRING (SIZE(8)) + +ImmediateMDTNr ::= SEQUENCE { + measurementsToActivate MeasurementsToActivate, + m1Configuration M1Configuration OPTIONAL, +-- The above IE shall be present if the Measurements to Activate IE has the first bit set to “1” + m4Configuration M4Configuration OPTIONAL, +-- The above IE shall be present if the Measurements to Activate IE has the third bit set to “1” + m5Configuration M5Configuration OPTIONAL, +-- The above IE shall be present if the Measurements to Activate IE has the fourth bit set to “1” + m6Configuration M6Configuration OPTIONAL, +-- The above IE shall be present if the Measurements to Activate IE has the fifth bit set to “1” + m7Configuration M7Configuration OPTIONAL, +-- The above IE shall be present if the Measurements to Activate IE has the sixth bit set to “1” + bluetoothMeasurementConfiguration BluetoothMeasurementConfiguration OPTIONAL, + wLANMeasurementConfiguration WLANMeasurementConfiguration OPTIONAL, + mDT-Location-Info MDT-Location-Info OPTIONAL, + sensorMeasurementConfiguration SensorMeasurementConfiguration OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { ImmediateMDTNr-ExtIEs} } OPTIONAL, + ... +} + +ImmediateMDTNr-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +InterSystemFailureIndication ::= SEQUENCE { + uERLFReportContainer UERLFReportContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { InterSystemFailureIndication-ExtIEs} } OPTIONAL, + ... +} + +InterSystemFailureIndication-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +IntersystemSONConfigurationTransfer ::= SEQUENCE { + transferType IntersystemSONTransferType, + intersystemSONInformation IntersystemSONInformation, + iE-Extensions ProtocolExtensionContainer { { IntersystemSONConfigurationTransfer-ExtIEs} } OPTIONAL, + ... +} + +IntersystemSONConfigurationTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +IntersystemSONTransferType ::= CHOICE { + fromEUTRANtoNGRAN FromEUTRANtoNGRAN, + fromNGRANtoEUTRAN FromNGRANtoEUTRAN, + choice-Extensions ProtocolIE-SingleContainer { { IntersystemSONTransferType-ExtIEs} } +} +IntersystemSONTransferType-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +IntersystemSONeNBID ::= SEQUENCE { + globaleNBID GlobalENB-ID, + selectedEPSTAI EPS-TAI, + iE-Extensions ProtocolExtensionContainer { { IntersystemSONeNBID-ExtIEs} } OPTIONAL, + ... +} + +IntersystemSONeNBID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +IntersystemSONNGRANnodeID ::= SEQUENCE { + globalRANNodeID GlobalRANNodeID, + selectedTAI TAI, + iE-Extensions ProtocolExtensionContainer { { IntersystemSONNGRANnodeID-ExtIEs} } OPTIONAL, + ... +} + +IntersystemSONNGRANnodeID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +IntersystemSONInformation ::= CHOICE { + intersystemSONInformationReport IntersystemSONInformationReport, + choice-Extensions ProtocolIE-SingleContainer { { IntersystemSONInformation-ExtIEs} } +} + +IntersystemSONInformation-ExtIEs NGAP-PROTOCOL-IES ::= { + { ID id-IntersystemSONInformationRequest CRITICALITY ignore TYPE IntersystemSONInformationRequest PRESENCE mandatory }| + { ID id-IntersystemSONInformationReply CRITICALITY ignore TYPE IntersystemSONInformationReply PRESENCE mandatory }, + ... +} + +-- -------------------------------------------------------------------- +-- INTER SYSTEM SON INFORMATION REQUEST +-- -------------------------------------------------------------------- + +IntersystemSONInformationRequest ::= CHOICE { + nGRAN-CellActivation IntersystemCellActivationRequest, + resourceStatus IntersystemResourceStatusRequest, + choice-Extensions ProtocolIE-SingleContainer { { IntersystemSONInformationRequest-ExtIEs} } +} + +IntersystemSONInformationRequest-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +IntersystemCellActivationRequest ::= SEQUENCE { + activationID INTEGER (0..16384, ...), + cellsToActivateList CellsToActivateList, + iE-Extensions ProtocolExtensionContainer { { IntersystemCellActivationRequest-ExtIEs} } OPTIONAL, + ... +} + +IntersystemCellActivationRequest-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CellsToActivateList ::= SEQUENCE (SIZE(1..maxnoofCellsinNGRANNode)) OF NGRAN-CGI + + +-- -------------------------------------------------------------------- +-- Inter System Resource Status Request +-- -------------------------------------------------------------------- + +IntersystemResourceStatusRequest ::= SEQUENCE { + reportingSystem ReportingSystem, + reportCharacteristics ReportCharacteristics, + reportType ReportType, + iE-Extensions ProtocolExtensionContainer { { IntersystemResourceStatusRequest-ExtIEs} } OPTIONAL, + ... +} + +IntersystemResourceStatusRequest-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ReportingSystem ::= CHOICE { + eUTRAN EUTRAN-ReportingSystemIEs, + nGRAN NGRAN-ReportingSystemIEs, + noReporting NULL, + choice-Extensions ProtocolIE-SingleContainer { { ReportingSystem-ExtIEs}} +} + +ReportingSystem-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +EUTRAN-ReportingSystemIEs::= SEQUENCE { + eUTRAN-CellToReportList EUTRAN-CellToReportList, + iE-Extensions ProtocolExtensionContainer { {EUTRAN-ReportingSystemIEs-ExtIEs} } OPTIONAL, + ... +} + +EUTRAN-ReportingSystemIEs-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NGRAN-ReportingSystemIEs ::= SEQUENCE { + nGRAN-CellToReportList NGRAN-CellToReportList, + iE-Extensions ProtocolExtensionContainer { {NGRAN-ReportingSystemIEs-ExtIEs} } OPTIONAL, + ... +} + +NGRAN-ReportingSystemIEs-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +EUTRAN-CellToReportList ::= SEQUENCE (SIZE(1..maxnoofReportedCells)) OF EUTRAN-CellToReportItem + +EUTRAN-CellToReportItem::= SEQUENCE { + eCGI EUTRA-CGI, + iE-Extensions ProtocolExtensionContainer { {EUTRAN-CellToReportItem-ExtIEs} } OPTIONAL, + ... +} + +EUTRAN-CellToReportItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +NGRAN-CellToReportList ::= SEQUENCE (SIZE(1.. maxnoofReportedCells)) OF NGRAN-CellToReportItem + +NGRAN-CellToReportItem::= SEQUENCE { + nGRAN-CGI NGRAN-CGI, + iE-Extensions ProtocolExtensionContainer { {NGRAN-CellToReportItem-ExtIEs} } OPTIONAL, + ... +} + +NGRAN-CellToReportItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ReportCharacteristics ::= BIT STRING(SIZE(32)) + +ReportType ::= CHOICE { + eventBasedReporting EventBasedReportingIEs, + periodicReporting PeriodicReportingIEs, + choice-Extensions ProtocolIE-SingleContainer { { ReportType-ExtIEs}} +} + +ReportType-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +EventBasedReportingIEs ::= SEQUENCE { + intersystemResourceThresholdLow IntersystemResourceThreshold, + intersystemResourceThresholdHigh IntersystemResourceThreshold, + numberOfMeasurementReportingLevels NumberOfMeasurementReportingLevels, + iE-Extensions ProtocolExtensionContainer { {EventBasedReportingIEs-ExtIEs} } OPTIONAL, + ... +} +EventBasedReportingIEs-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +IntersystemResourceThreshold ::= INTEGER(0..100) + +NumberOfMeasurementReportingLevels ::= ENUMERATED {n2, n3, n4, n5, n10, ...} + +PeriodicReportingIEs ::= SEQUENCE { + reportingPeriodicity ReportingPeriodicity, + iE-Extensions ProtocolExtensionContainer { {PeriodicReportingIEs-ExtIEs} } OPTIONAL, + ... +} + +PeriodicReportingIEs-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ReportingPeriodicity ::= ENUMERATED { + stop, + single, + ms1000, + ms2000, + ms5000, + ms10000, + ... +} + + +-- -------------------------------------------------------------------- +-- INTER SYSTEM SON INFORMATION REPLY +-- -------------------------------------------------------------------- + +IntersystemSONInformationReply ::= CHOICE { + nGRAN-CellActivation IntersystemCellActivationReply, + resourceStatus IntersystemResourceStatusReply, + choice-Extensions ProtocolIE-SingleContainer { { IntersystemSONInformationReply-ExtIEs} } +} + +IntersystemSONInformationReply-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +IntersystemCellActivationReply ::= SEQUENCE { + activatedCellList ActivatedCellList, + activation-ID INTEGER(0..16384, ...), + iE-Extensions ProtocolExtensionContainer { { IntersystemCellActivationReply-ExtIEs} } OPTIONAL, + ... +} + +IntersystemCellActivationReply-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ActivatedCellList ::= SEQUENCE (SIZE(1..maxnoofCellsinNGRANNode)) OF NGRAN-CGI + + +-- -------------------------------------------------------------------- +-- Inter System Resource Status Reply +-- -------------------------------------------------------------------- + +IntersystemResourceStatusReply ::= SEQUENCE { + reportingsystem ReportingSystem, + iE-Extensions ProtocolExtensionContainer { { IntersystemResourceStatusReply-ExtIEs} } OPTIONAL, + ... +} + +IntersystemResourceStatusReply-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +-- -------------------------------------------------------------------- +-- INTER SYSTEM SON INFORMATION REPORT +-- -------------------------------------------------------------------- + +IntersystemSONInformationReport::= CHOICE { + hOReportInformation InterSystemHOReport, + failureIndicationInformation InterSystemFailureIndication, + choice-Extensions ProtocolIE-SingleContainer { { IntersystemSONInformationReport-ExtIEs} } +} + +IntersystemSONInformationReport-ExtIEs NGAP-PROTOCOL-IES ::= { + { ID id-EnergySavingIndication CRITICALITY ignore TYPE IntersystemCellStateIndication PRESENCE mandatory }| + { ID id-IntersystemResourceStatusUpdate CRITICALITY ignore TYPE IntersystemResourceStatusReport PRESENCE mandatory }, + ... +} + +IntersystemCellStateIndication ::= SEQUENCE { + notificationCellList NotificationCellList, + iE-Extensions ProtocolExtensionContainer { { IntersystemCellStateIndication-ExtIEs} } OPTIONAL, + ... +} + +IntersystemCellStateIndication-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NotificationCellList ::= SEQUENCE (SIZE(1.. maxnoofCellsinNGRANNode)) OF NotificationCell-Item + +NotificationCell-Item ::= SEQUENCE { + nGRAN-CGI NGRAN-CGI, + notifyFlag ENUMERATED {activated, deactivated, ...}, + iE-Extensions ProtocolExtensionContainer { { NotificationCell-Item-ExtIEs} } OPTIONAL, + ... +} + +NotificationCell-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- -------------------------------------------------------------------- +-- Inter System Resource Status Report +-- -------------------------------------------------------------------- + +IntersystemResourceStatusReport ::= SEQUENCE { + reportingSystem ResourceStatusReportingSystem, + iE-Extensions ProtocolExtensionContainer { { IntersystemResourceStatusReport-ExtIEs} } OPTIONAL, + ... +} + +IntersystemResourceStatusReport-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ResourceStatusReportingSystem ::= CHOICE { + eUTRAN-ReportingStatus EUTRAN-ReportingStatusIEs, + nGRAN-ReportingStatus NGRAN-ReportingStatusIEs, + choice-Extensions ProtocolIE-SingleContainer { { ResourceStatusReportingSystem-ExtIEs}} +} + +ResourceStatusReportingSystem-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +EUTRAN-ReportingStatusIEs::= SEQUENCE { + eUTRAN-CellReportList EUTRAN-CellReportList, + iE-Extensions ProtocolExtensionContainer { {EUTRAN-ReportingStatusIEs-ExtIEs} } OPTIONAL, + ... +} + +EUTRAN-ReportingStatusIEs-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +EUTRAN-CellReportList ::= SEQUENCE (SIZE(1..maxnoofReportedCells)) OF EUTRAN-CellReportItem + +EUTRAN-CellReportItem ::= SEQUENCE { + eCGI EUTRA-CGI, + eUTRAN-CompositeAvailableCapacityGroup EUTRAN-CompositeAvailableCapacityGroup, + eUTRAN-NumberOfActiveUEs EUTRAN-NumberOfActiveUEs OPTIONAL, + eUTRAN-NoofRRCConnections NGRAN-NoofRRCConnections OPTIONAL, + eUTRAN-RadioResourceStatus EUTRAN-RadioResourceStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {EUTRAN-CellReportItem-ExtIEs} } OPTIONAL, + ... +} + +EUTRAN-CellReportItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +EUTRAN-CompositeAvailableCapacityGroup ::= SEQUENCE { + dL-CompositeAvailableCapacity CompositeAvailableCapacity, + uL-CompositeAvailableCapacity CompositeAvailableCapacity, + iE-Extensions ProtocolExtensionContainer { { EUTRAN-CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL, + ... +} + +EUTRAN-CompositeAvailableCapacityGroup-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +CompositeAvailableCapacity ::= SEQUENCE { + cellCapacityClassValue INTEGER (1..100, ...) OPTIONAL, + capacityValue INTEGER (0..100), + iE-Extensions ProtocolExtensionContainer { {CompositeAvailableCapacity-ExtIEs} } OPTIONAL, + ... +} + +CompositeAvailableCapacity-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +EUTRAN-NumberOfActiveUEs ::= INTEGER (0..16777215, ...) + +EUTRAN-RadioResourceStatus ::= SEQUENCE { + dL-GBR-PRB-usage INTEGER (0..100), + uL-GBR-PRB-usage INTEGER (0..100), + dL-non-GBR-PRB-usage INTEGER (0..100), + uL-non-GBR-PRB-usage INTEGER (0..100), + dL-Total-PRB-usage INTEGER (0..100), + uL-Total-PRB-usage INTEGER (0..100), + dL-scheduling-PDCCH-CCE-usage INTEGER (0..100) OPTIONAL, + uL-scheduling-PDCCH-CCE-usage INTEGER (0..100) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {EUTRAN-RadioResourceStatus-ExtIEs} } OPTIONAL, + ... +} + +EUTRAN-RadioResourceStatus-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NGRAN-ReportingStatusIEs ::= SEQUENCE { + nGRAN-CellReportList NGRAN-CellReportList, + iE-Extensions ProtocolExtensionContainer { {NGRAN-ReportingStatusIEs-ExtIEs} } OPTIONAL, + ... +} + +NGRAN-ReportingStatusIEs-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NGRAN-CellReportList ::= SEQUENCE (SIZE(1..maxnoofReportedCells)) OF NGRAN-CellReportItem + +NGRAN-CellReportItem ::= SEQUENCE { + nGRAN-CGI NGRAN-CGI, + nGRAN-CompositeAvailableCapacityGroup EUTRAN-CompositeAvailableCapacityGroup, + nGRAN-NumberOfActiveUEs NGRAN-NumberOfActiveUEs OPTIONAL, + nGRAN-NoofRRCConnections NGRAN-NoofRRCConnections OPTIONAL, + nGRAN-RadioResourceStatus NGRAN-RadioResourceStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NGRAN-CellReportItem-ExtIEs} } OPTIONAL, + ... +} + +NGRAN-CellReportItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +NGRAN-NumberOfActiveUEs ::= INTEGER (0..16777215, ...) + +NGRAN-NoofRRCConnections ::= INTEGER (1..65536, ...) + +NGRAN-RadioResourceStatus ::= SEQUENCE { + dL-GBR-PRB-usage-for-MIMO INTEGER (0..100), + uL-GBR-PRB-usage-for-MIMO INTEGER (0..100), + dL-non-GBR-PRB-usage-for-MIMO INTEGER (0..100), + uL-non-GBR-PRB-usage-for-MIMO INTEGER (0..100), + dL-Total-PRB-usage-for-MIMO INTEGER (0..100), + uL-Total-PRB-usage-for-MIMO INTEGER (0..100), + iE-Extensions ProtocolExtensionContainer { { NGRAN-RadioResourceStatus-ExtIEs} } OPTIONAL, + ... +} + +NGRAN-RadioResourceStatus-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +InterSystemHOReport ::= SEQUENCE { + handoverReportType InterSystemHandoverReportType, + iE-Extensions ProtocolExtensionContainer { { InterSystemHOReport-ExtIEs} } OPTIONAL, + ... +} + +InterSystemHOReport-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +InterSystemHandoverReportType ::= CHOICE { + tooearlyIntersystemHO TooearlyIntersystemHO, + intersystemUnnecessaryHO IntersystemUnnecessaryHO, + choice-Extensions ProtocolIE-SingleContainer { { InterSystemHandoverReportType-ExtIEs} } +} + +InterSystemHandoverReportType-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +IntersystemUnnecessaryHO ::= SEQUENCE { + sourcecellID NGRAN-CGI, + targetcellID EUTRA-CGI, + earlyIRATHO ENUMERATED {true, false, ...}, + candidateCellList CandidateCellList, + iE-Extensions ProtocolExtensionContainer { { IntersystemUnnecessaryHO-ExtIEs} } OPTIONAL, + ... +} + +IntersystemUnnecessaryHO-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- J +-- K +-- L + +LAC ::= OCTET STRING (SIZE (2)) + +LAI ::= SEQUENCE { + pLMNidentity PLMNIdentity, + lAC LAC, + iE-Extensions ProtocolExtensionContainer { {LAI-ExtIEs} } OPTIONAL, + ... +} + +LAI-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +LastVisitedCellInformation ::= CHOICE { + nGRANCell LastVisitedNGRANCellInformation, + eUTRANCell LastVisitedEUTRANCellInformation, + uTRANCell LastVisitedUTRANCellInformation, + gERANCell LastVisitedGERANCellInformation, + choice-Extensions ProtocolIE-SingleContainer { {LastVisitedCellInformation-ExtIEs} } +} + +LastVisitedCellInformation-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +LastVisitedCellItem ::= SEQUENCE { + lastVisitedCellInformation LastVisitedCellInformation, + iE-Extensions ProtocolExtensionContainer { {LastVisitedCellItem-ExtIEs} } OPTIONAL, + ... +} + +LastVisitedCellItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +LastVisitedEUTRANCellInformation ::= OCTET STRING + +LastVisitedGERANCellInformation ::= OCTET STRING + +LastVisitedNGRANCellInformation::= SEQUENCE { + globalCellID NGRAN-CGI, + cellType CellType, + timeUEStayedInCell TimeUEStayedInCell, + timeUEStayedInCellEnhancedGranularity TimeUEStayedInCellEnhancedGranularity OPTIONAL, + hOCauseValue Cause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {LastVisitedNGRANCellInformation-ExtIEs} } OPTIONAL, + ... +} + +LastVisitedNGRANCellInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-LastVisitedPSCellList CRITICALITY ignore EXTENSION LastVisitedPSCellList PRESENCE optional }, + ... +} + +LastVisitedPSCellList ::= SEQUENCE (SIZE(1..maxnoofPSCellsPerPrimaryCellinUEHistoryInfo)) OF LastVisitedPSCellInformation + +LastVisitedPSCellInformation ::= SEQUENCE { + pSCellID NGRAN-CGI OPTIONAL, + timeStay INTEGER (0..40950), + iE-Extensions ProtocolExtensionContainer { {LastVisitedPSCellInformation-ExtIEs} } OPTIONAL, + ... +} + +LastVisitedPSCellInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +LastVisitedUTRANCellInformation ::= OCTET STRING + +LineType ::= ENUMERATED { + dsl, + pon, + ... +} + + +LocationReportingAdditionalInfo ::= ENUMERATED { + includePSCell, + ... +} + +LocationReportingReferenceID ::= INTEGER (1..64, ...) + +LocationReportingRequestType ::= SEQUENCE { + eventType EventType, + reportArea ReportArea, + areaOfInterestList AreaOfInterestList OPTIONAL, + locationReportingReferenceIDToBeCancelled LocationReportingReferenceID OPTIONAL, +-- The above IE shall be present if the event type is set to “stop reporting UE presence in the area of interest” + iE-Extensions ProtocolExtensionContainer { {LocationReportingRequestType-ExtIEs} } OPTIONAL, + ... +} + +LocationReportingRequestType-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-LocationReportingAdditionalInfo CRITICALITY ignore EXTENSION LocationReportingAdditionalInfo PRESENCE optional }, + ... +} + +LoggedMDTNr ::= SEQUENCE { + loggingInterval LoggingInterval, + loggingDuration LoggingDuration, + loggedMDTTrigger LoggedMDTTrigger, + bluetoothMeasurementConfiguration BluetoothMeasurementConfiguration OPTIONAL, + wLANMeasurementConfiguration WLANMeasurementConfiguration OPTIONAL, + sensorMeasurementConfiguration SensorMeasurementConfiguration OPTIONAL, + areaScopeOfNeighCellsList AreaScopeOfNeighCellsList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {LoggedMDTNr-ExtIEs} } OPTIONAL, + ... +} + +LoggedMDTNr-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-EarlyMeasurement CRITICALITY ignore EXTENSION EarlyMeasurement PRESENCE optional }, + ... +} + +LoggingInterval ::= ENUMERATED { + ms320, ms640, ms1280, ms2560, ms5120, ms10240, ms20480, ms30720, ms40960, ms61440, + infinity, + ... +} + +LoggingDuration ::= ENUMERATED {m10, m20, m40, m60, m90, m120, ...} + +Links-to-log ::= ENUMERATED { + uplink, + downlink, + both-uplink-and-downlink, + ... +} + +LoggedMDTTrigger ::= CHOICE{ + periodical NULL, + eventTrigger EventTrigger, + choice-Extensions ProtocolIE-SingleContainer { {LoggedMDTTrigger-ExtIEs} } +} + +LoggedMDTTrigger-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +LTEM-Indication ::= ENUMERATED {lte-m,...} + +LTEUERLFReportContainer ::= OCTET STRING + +LTEV2XServicesAuthorized ::= SEQUENCE { + vehicleUE VehicleUE OPTIONAL, + pedestrianUE PedestrianUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {LTEV2XServicesAuthorized-ExtIEs} } OPTIONAL, + ... +} + +LTEV2XServicesAuthorized-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +LTEUESidelinkAggregateMaximumBitrate ::= SEQUENCE { + uESidelinkAggregateMaximumBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { {LTEUE-Sidelink-Aggregate-MaximumBitrates-ExtIEs} } OPTIONAL, + ... +} + +LTEUE-Sidelink-Aggregate-MaximumBitrates-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- M + +MaskedIMEISV ::= BIT STRING (SIZE(64)) + +MaximumDataBurstVolume ::= INTEGER (0..4095, ..., 4096.. 2000000) + +MessageIdentifier ::= BIT STRING (SIZE(16)) + +MaximumIntegrityProtectedDataRate ::= ENUMERATED { + bitrate64kbs, + maximum-UE-rate, + ... +} + + +MBS-AreaSessionID ::= INTEGER (0..65535, ...) + +MBS-DataForwardingResponseMRBList ::= SEQUENCE (SIZE(1..maxnoofMRBs)) OF MBS-DataForwardingResponseMRBItem + +MBS-DataForwardingResponseMRBItem ::= SEQUENCE { + mRB-ID MRB-ID, + dL-Forwarding-UPTNLInformation UPTransportLayerInformation, + mRB-ProgressInformation MRB-ProgressInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MBS-DataForwardingResponseMRBItem-ExtIEs} } OPTIONAL, + ... +} + +MBS-DataForwardingResponseMRBItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-MappingandDataForwardingRequestList ::= SEQUENCE (SIZE(1..maxnoofMRBs)) OF MBS-MappingandDataForwardingRequestItem + +MBS-MappingandDataForwardingRequestItem ::= SEQUENCE { + mRB-ID MRB-ID, + mBS-QoSFlowList MBS-QoSFlowList, + mRB-ProgressInformation MRB-ProgressInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MBS-MappingandDataForwardingRequestItem-ExtIEs} } OPTIONAL, + ... +} + +MBS-MappingandDataForwardingRequestItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-QoSFlowList ::= SEQUENCE (SIZE(1..maxnoofMBSQoSFlows)) OF QosFlowIdentifier + +MRB-ProgressInformation ::= CHOICE { + pDCP-SN-Length12 INTEGER (0..4095), + pDCP-SN-Length18 INTEGER (0..262143), + choice-Extensions ProtocolIE-SingleContainer { { MRB-ProgressInformation-ExtIEs} } +} + +MRB-ProgressInformation-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +MBS-QoSFlowsToBeSetupList ::= SEQUENCE (SIZE(1.. maxnoofMBSQoSFlows)) OF MBS-QoSFlowsToBeSetupItem + +MBS-QoSFlowsToBeSetupItem ::= SEQUENCE { + mBSqosFlowIdentifier QosFlowIdentifier, + mBSqosFlowLevelQosParameters QosFlowLevelQosParameters, + iE-Extensions ProtocolExtensionContainer { {MBS-QoSFlowsToBeSetupItem-ExtIEs} } OPTIONAL, + ... +} + +MBS-QoSFlowsToBeSetupItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +MBS-ServiceArea ::= CHOICE { + locationindependent MBS-ServiceAreaInformation, + locationdependent MBS-ServiceAreaInformationList, + choice-Extensions ProtocolIE-SingleContainer { {MBS-ServiceArea-ExtIEs} } +} + +MBS-ServiceArea-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +MBS-ServiceAreaInformationList ::= SEQUENCE (SIZE(1..maxnoofMBSServiceAreaInformation)) OF MBS-ServiceAreaInformationItem + + +MBS-ServiceAreaInformationItem ::= SEQUENCE { + mBS-AreaSessionID MBS-AreaSessionID, + mBS-ServiceAreaInformation MBS-ServiceAreaInformation, + iE-Extensions ProtocolExtensionContainer { {MBS-ServiceAreaInformationItem-ExtIEs} } OPTIONAL, + ... +} + +MBS-ServiceAreaInformationItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-ServiceAreaInformation ::= SEQUENCE { + mBS-ServiceAreaCellList MBS-ServiceAreaCellList OPTIONAL, + mBS-ServiceAreaTAIList MBS-ServiceAreaTAIList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MBS-ServiceAreaInformation-ExtIEs} } OPTIONAL, + ... +} + +MBS-ServiceAreaInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-ServiceAreaCellList ::= SEQUENCE (SIZE(1.. maxnoofCellsforMBS)) OF NR-CGI + +MBS-ServiceAreaTAIList ::= SEQUENCE (SIZE(1.. maxnoofTAIforMBS)) OF TAI + +MBS-SessionID ::= SEQUENCE { + tMGI TMGI, + nID NID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MBS-SessionID-ExtIEs} } OPTIONAL, + ... +} + +MBS-SessionID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBSSessionFailedtoSetupList ::= SEQUENCE (SIZE(1.. maxnoofMBSSessions)) OF MBSSessionFailedtoSetupItem + +MBSSessionFailedtoSetupItem ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + mBS-AreaSessionID MBS-AreaSessionID OPTIONAL, + cause Cause, + iE-Extensions ProtocolExtensionContainer { { MBSSessionFailedtoSetupItem-ExtIEs} } OPTIONAL, + ... +} + +MBSSessionFailedtoSetupItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-ActiveSessionInformation-SourcetoTargetList ::= SEQUENCE (SIZE(1..maxnoofMBSSessionsofUE)) OF MBS-ActiveSessionInformation-SourcetoTargetItem + +MBS-ActiveSessionInformation-SourcetoTargetItem ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + mBS-AreaSessionID MBS-AreaSessionID OPTIONAL, + mBS-ServiceArea MBS-ServiceArea OPTIONAL, + mBS-QoSFlowsToBeSetupList MBS-QoSFlowsToBeSetupList, + mBS-MappingandDataForwardingRequestList MBS-MappingandDataForwardingRequestList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MBS-ActiveSessionInformation-SourcetoTargetItem-ExtIEs} } OPTIONAL, + ... +} + +MBS-ActiveSessionInformation-SourcetoTargetItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-ActiveSessionInformation-TargettoSourceList ::= SEQUENCE (SIZE(1..maxnoofMBSSessionsofUE)) OF MBS-ActiveSessionInformation-TargettoSourceItem + +MBS-ActiveSessionInformation-TargettoSourceItem ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + mBS-DataForwardingResponseMRBList MBS-DataForwardingResponseMRBList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MBS-ActiveSessionInformation-TargettoSourceItem-ExtIEs} } OPTIONAL, + ... +} + +MBS-ActiveSessionInformation-TargettoSourceItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBSSessionSetupOrModFailureTransfer ::= SEQUENCE { + cause Cause, + criticalityDiagnostics CriticalityDiagnostics OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MBSSessionSetupOrModFailureTransfer-ExtIEs} } OPTIONAL, + ... +} + +MBSSessionSetupOrModFailureTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBSSessionSetupResponseList ::= SEQUENCE (SIZE(1.. maxnoofMBSSessions)) OF MBSSessionSetupResponseItem + +MBSSessionSetupResponseItem ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + mBS-AreaSessionID MBS-AreaSessionID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MBSSessionSetupResponseItem-ExtIEs} } OPTIONAL, + ... +} + +MBSSessionSetupResponseItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBSSessionSetupOrModRequestTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MBSSessionSetupOrModRequestTransferIEs} }, + ... +} + +MBSSessionSetupOrModRequestTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionTNLInfo5GC CRITICALITY reject TYPE MBS-SessionTNLInfo5GC PRESENCE optional }| + { ID id-MBS-QoSFlowsToBeSetupModList CRITICALITY reject TYPE MBS-QoSFlowsToBeSetupList PRESENCE mandatory }| + { ID id-MBS-SessionFSAIDList CRITICALITY ignore TYPE MBS-SessionFSAIDList PRESENCE optional }, + ... +} + +MBS-SessionFSAIDList ::= SEQUENCE (SIZE(1.. maxnoofMBSFSAs)) OF MBS-SessionFSAID + +MBS-SessionFSAID ::= OCTET STRING (SIZE(3)) + +MBSSessionReleaseResponseTransfer ::= SEQUENCE { + mBS-SessionTNLInfoNGRAN MBS-SessionTNLInfoNGRAN OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MBSSessionReleaseResponseTransfer-ExtIEs} } OPTIONAL, + ... +} + +MBSSessionReleaseResponseTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBSSessionSetupOrModResponseTransfer ::= SEQUENCE { + mBS-SessionTNLInfoNGRAN MBS-SessionTNLInfoNGRAN OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MBSSessionSetupOrModResponseTransfer-ExtIEs} } OPTIONAL, + ... +} + +MBSSessionSetupOrModResponseTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-SupportIndicator ::= ENUMERATED { + true, + ... +} + +MBS-SessionTNLInfo5GC ::= CHOICE { + locationindependent SharedNGU-MulticastTNLInformation, + locationdependent MBS-SessionTNLInfo5GCList, + choice-Extensions ProtocolIE-SingleContainer { {MBS-SessionTNLInfo5GC-ExtIEs} } +} + +MBS-SessionTNLInfo5GC-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +MBS-SessionTNLInfo5GCList ::= SEQUENCE (SIZE(1..maxnoofMBSServiceAreaInformation)) OF MBS-SessionTNLInfo5GCItem + +MBS-SessionTNLInfo5GCItem ::= SEQUENCE { + mBS-AreaSessionID MBS-AreaSessionID, + sharedNGU-MulticastTNLInformation SharedNGU-MulticastTNLInformation, + iE-Extensions ProtocolExtensionContainer { {MBS-SessionTNLInfo5GCItem-ExtIEs} } OPTIONAL, + ... +} + +MBS-SessionTNLInfo5GCItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-SessionTNLInfoNGRAN ::= CHOICE { + locationindependent UPTransportLayerInformation, + locationdependent MBS-SessionTNLInfoNGRANList, + choice-Extensions ProtocolIE-SingleContainer { {MBS-SessionTNLInfoNGRAN-ExtIEs} } +} + +MBS-SessionTNLInfoNGRAN-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +MBS-SessionTNLInfoNGRANList ::= SEQUENCE (SIZE(1..maxnoofMBSServiceAreaInformation)) OF MBS-SessionTNLInfoNGRANItem + +MBS-SessionTNLInfoNGRANItem ::= SEQUENCE { + mBS-AreaSessionID MBS-AreaSessionID, + sharedNGU-UnicastTNLInformation UPTransportLayerInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MBS-SessionTNLInfoNGRANItem-ExtIEs} } OPTIONAL, + ... +} + +MBS-SessionTNLInfoNGRANItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-DistributionReleaseRequestTransfer ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + mBS-AreaSessionID MBS-AreaSessionID OPTIONAL, + sharedNGU-UnicastTNLInformation UPTransportLayerInformation OPTIONAL, + cause Cause, + iE-Extensions ProtocolExtensionContainer { { MBS-DistributionReleaseRequesTransfer-ExtIEs} } OPTIONAL, + ... +} + +MBS-DistributionReleaseRequesTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-DistributionSetupRequestTransfer ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + mBS-AreaSessionID MBS-AreaSessionID OPTIONAL, + sharedNGU-UnicastTNLInformation UPTransportLayerInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MBS-DistributionSetupRequestTransfer-ExtIEs} } OPTIONAL, + ... +} + +MBS-DistributionSetupRequestTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-DistributionSetupResponseTransfer ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + mBS-AreaSessionID MBS-AreaSessionID OPTIONAL, + sharedNGU-MulticastTNLInformation MBS-SessionTNLInfo5GCItem OPTIONAL, + mBS-QoSFlowsToBeSetupList MBS-QoSFlowsToBeSetupList, + mBSSessionStatus MBSSessionStatus, + mBS-ServiceArea MBS-ServiceArea OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MBS-DistributionSetupResponseTransfer-ExtIEs} } OPTIONAL, + ... +} + +MBS-DistributionSetupResponseTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +MBS-DistributionSetupUnsuccessfulTransfer ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + mBS-AreaSessionID MBS-AreaSessionID OPTIONAL, + cause Cause, + criticalityDiagnostics CriticalityDiagnostics OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MBS-DistributionSetupUnsuccessfulTransfer-ExtIEs} } OPTIONAL, + ... +} + +MBS-DistributionSetupUnsuccessfulTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBSSessionSetupRequestList ::= SEQUENCE (SIZE(1..maxnoofMBSSessions)) OF MBSSessionSetupRequestItem + +MBSSessionSetupRequestItem ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + mBS-AreaSessionID MBS-AreaSessionID OPTIONAL, + associatedMBSQosFlowSetupRequestList AssociatedMBSQosFlowSetupRequestList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MBSSessionSetupRequestItem-ExtIEs} } OPTIONAL, + ... +} + +MBSSessionSetupRequestItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBSSessionSetuporModifyRequestList ::= SEQUENCE (SIZE(1..maxnoofMBSSessions)) OF MBSSessionSetuporModifyRequestItem + +MBSSessionSetuporModifyRequestItem ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + mBS-AreaSessionID MBS-AreaSessionID OPTIONAL, + associatedMBSQosFlowSetuporModifyRequestList AssociatedMBSQosFlowSetuporModifyRequestList OPTIONAL, + mBS-QosFlowToReleaseList QosFlowListWithCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer {{MBSSessionSetuporModifyRequestItem-ExtIEs}} OPTIONAL, + ... +} + +MBSSessionSetuporModifyRequestItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +MBSSessionToReleaseList ::= SEQUENCE (SIZE(1..maxnoofMBSSessions)) OF MBSSessionToReleaseItem + +MBSSessionToReleaseItem ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { { MBSSessionToReleaseItem-ExtIEs} } OPTIONAL, + ... +} + +MBSSessionToReleaseItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBSSessionStatus ::= ENUMERATED { + activated, + deactivated, + ... +} + +MicoAllPLMN ::= ENUMERATED { + true, + ... +} + + +MICOModeIndication ::= ENUMERATED { + true, + ... +} + +MobilityInformation ::= BIT STRING (SIZE(16)) + +MobilityRestrictionList ::= SEQUENCE { + servingPLMN PLMNIdentity, + equivalentPLMNs EquivalentPLMNs OPTIONAL, + rATRestrictions RATRestrictions OPTIONAL, + forbiddenAreaInformation ForbiddenAreaInformation OPTIONAL, + serviceAreaInformation ServiceAreaInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MobilityRestrictionList-ExtIEs} } OPTIONAL, + ... +} + +MobilityRestrictionList-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-LastEUTRAN-PLMNIdentity CRITICALITY ignore EXTENSION PLMNIdentity PRESENCE optional }| + { ID id-CNTypeRestrictionsForServing CRITICALITY ignore EXTENSION CNTypeRestrictionsForServing PRESENCE optional }| + { ID id-CNTypeRestrictionsForEquivalent CRITICALITY ignore EXTENSION CNTypeRestrictionsForEquivalent PRESENCE optional }| + { ID id-NPN-MobilityInformation CRITICALITY reject EXTENSION NPN-MobilityInformation PRESENCE optional }, + ... +} + +MDT-AlignmentInfo ::= CHOICE { + s-basedMDT NGRANTraceID, + choice-Extensions ProtocolIE-SingleContainer { { MDT-AlignmentInfo-ExtIEs} } +} + +MDT-AlignmentInfo-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMNIdentity + +MDTPLMNModificationList ::= SEQUENCE (SIZE(0..maxnoofMDTPLMNs)) OF PLMNIdentity + +MDT-Configuration ::= SEQUENCE { + mdt-Config-NR MDT-Configuration-NR OPTIONAL, + mdt-Config-EUTRA MDT-Configuration-EUTRA OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MDT-Configuration-ExtIEs} } OPTIONAL, + ... +} + +MDT-Configuration-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MDT-Configuration-NR ::= SEQUENCE { + mdt-Activation MDT-Activation, + areaScopeOfMDT AreaScopeOfMDT-NR, + mDTModeNr MDTModeNr, + signallingBasedMDTPLMNList MDTPLMNList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MDT-Configuration-NR-ExtIEs} } OPTIONAL, + ... +} + +MDT-Configuration-NR-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MDT-Configuration-EUTRA ::= SEQUENCE { + mdt-Activation MDT-Activation, + areaScopeOfMDT AreaScopeOfMDT-EUTRA, + mDTMode MDTModeEutra, + signallingBasedMDTPLMNList MDTPLMNList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MDT-Configuration-EUTRA-ExtIEs} } OPTIONAL, + ... +} + +MDT-Configuration-EUTRA-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MDT-Activation ::= ENUMERATED { + immediate-MDT-only, + logged-MDT-only, + immediate-MDT-and-Trace, + ... +} + +MDTModeNr ::= CHOICE { + immediateMDTNr ImmediateMDTNr, + loggedMDTNr LoggedMDTNr, + choice-Extensions ProtocolIE-SingleContainer { {MDTModeNr-ExtIEs} } +} + +MDTModeNr-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +MDTModeEutra ::= OCTET STRING + +MeasurementsToActivate ::= BIT STRING(SIZE(8)) + +MRB-ID ::= INTEGER (1..512, ...) + +MulticastSessionActivationRequestTransfer ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + iE-Extensions ProtocolExtensionContainer { { MulticastSessionActivationRequestTransfer-ExtIEs} } OPTIONAL, + ... +} + +MulticastSessionActivationRequestTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MulticastSessionDeactivationRequestTransfer ::= SEQUENCE { + mBS-SessionID MBS-SessionID, + iE-Extensions ProtocolExtensionContainer { { MulticastSessionDeactivationRequestTransfer-ExtIEs} } OPTIONAL, + ... +} + +MulticastSessionDeactivationRequestTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MulticastSessionUpdateRequestTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MulticastSessionUpdateRequestTransferIEs} }, + ... +} + +MulticastSessionUpdateRequestTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-MBS-ServiceArea CRITICALITY reject TYPE MBS-ServiceArea PRESENCE optional }| + { ID id-MBS-QoSFlowsToBeSetupModList CRITICALITY reject TYPE MBS-QoSFlowsToBeSetupList PRESENCE optional }| + { ID id-MBS-QoSFlowToReleaseList CRITICALITY reject TYPE QosFlowListWithCause PRESENCE optional }| + { ID id-MBS-SessionTNLInfo5GC CRITICALITY reject TYPE MBS-SessionTNLInfo5GC PRESENCE optional }, + ... +} + + +MulticastGroupPagingAreaList ::= SEQUENCE (SIZE(1..maxnoofPagingAreas)) OF MulticastGroupPagingAreaItem + +MulticastGroupPagingAreaItem ::= SEQUENCE { + multicastGroupPagingArea MulticastGroupPagingArea, + uE-PagingList UE-PagingList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { MulticastGroupPagingAreaItem-ExtIEs} } OPTIONAL, + ... +} + +MulticastGroupPagingAreaItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MBS-AreaTAIList ::= SEQUENCE (SIZE(1..maxnoofTAIforPaging)) OF TAI + +MulticastGroupPagingArea ::= SEQUENCE { + mBS-AreaTAIList MBS-AreaTAIList, + iE-Extensions ProtocolExtensionContainer { { MulticastGroupPagingArea-ExtIEs} } OPTIONAL, + ... +} + +MulticastGroupPagingArea-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +UE-PagingList ::= SEQUENCE (SIZE(1..maxnoofUEsforPaging)) OF UE-PagingItem + +UE-PagingItem ::= SEQUENCE { + uEIdentityIndexValue UEIdentityIndexValue, + pagingDRX PagingDRX OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { UE-PagingItem-ExtIEs} } OPTIONAL, + ... +} + +UE-PagingItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +M1Configuration ::= SEQUENCE { + m1reportingTrigger M1ReportingTrigger, + m1thresholdEventA2 M1ThresholdEventA2 OPTIONAL, +-- The above IE shall be present if the M1 Reporting Trigger IE is set to “A2event-triggered” or “A2event-triggered periodic” + m1periodicReporting M1PeriodicReporting OPTIONAL, +-- The above IE shall be present if the M1 Reporting Trigger IE is set to “periodic” or “A2event-triggered periodic” + iE-Extensions ProtocolExtensionContainer { { M1Configuration-ExtIEs} } OPTIONAL, + ... +} + +M1Configuration-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-IncludeBeamMeasurementsIndication CRITICALITY ignore EXTENSION IncludeBeamMeasurementsIndication PRESENCE optional }| + { ID id-BeamMeasurementsReportConfiguration CRITICALITY ignore EXTENSION BeamMeasurementsReportConfiguration PRESENCE conditional }, +-- The above IE shall be present if the IncludeBeamMeasurementsIndication IE is set to “true” + ... +} + +IncludeBeamMeasurementsIndication ::= ENUMERATED { + true, + ... +} + +MaxNrofRS-IndexesToReport ::= INTEGER (1..64, ...) + +M1ReportingTrigger ::= ENUMERATED { + periodic, + a2eventtriggered, + a2eventtriggered-periodic, + ... +} + +M1ThresholdEventA2 ::= SEQUENCE { + m1ThresholdType M1ThresholdType, + iE-Extensions ProtocolExtensionContainer { { M1ThresholdEventA2-ExtIEs} } OPTIONAL, + ... +} + +M1ThresholdEventA2-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +M1ThresholdType ::= CHOICE { + threshold-RSRP Threshold-RSRP, + threshold-RSRQ Threshold-RSRQ, + threshold-SINR Threshold-SINR, + choice-Extensions ProtocolIE-SingleContainer { {M1ThresholdType-ExtIEs} } +} + +M1ThresholdType-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +M1PeriodicReporting ::= SEQUENCE { + reportInterval ReportIntervalMDT, + reportAmount ReportAmountMDT, + iE-Extensions ProtocolExtensionContainer { { M1PeriodicReporting-ExtIEs} } OPTIONAL, + ... +} + +M1PeriodicReporting-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + {ID id-ExtendedReportIntervalMDT CRITICALITY ignore EXTENSION ExtendedReportIntervalMDT PRESENCE optional}, + ... +} + +M4Configuration ::= SEQUENCE { + m4period M4period, + m4-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { { M4Configuration-ExtIEs} } OPTIONAL, + ... +} + +M4Configuration-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-M4ReportAmount CRITICALITY ignore EXTENSION M4ReportAmountMDT PRESENCE optional }, + ... +} + +M4ReportAmountMDT ::= ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity, ...} + +M4period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } + +M5Configuration ::= SEQUENCE { + m5period M5period, + m5-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { { M5Configuration-ExtIEs} } OPTIONAL, + ... +} + +M5Configuration-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-M5ReportAmount CRITICALITY ignore EXTENSION M5ReportAmountMDT PRESENCE optional }, + ... +} + +M5ReportAmountMDT ::= ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity, ...} + + +M5period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } + +M6Configuration ::= SEQUENCE { + m6report-Interval M6report-Interval, + m6-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { { M6Configuration-ExtIEs} } OPTIONAL, + ... +} + +M6Configuration-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-M6ReportAmount CRITICALITY ignore EXTENSION M6ReportAmountMDT PRESENCE optional }| + { ID id-ExcessPacketDelayThresholdConfiguration CRITICALITY ignore EXTENSION ExcessPacketDelayThresholdConfiguration PRESENCE optional }, + ... +} + + +M6ReportAmountMDT ::= ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity, ...} + +M6report-Interval ::= ENUMERATED { + ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, ms20480, ms40960, min1, min6, min12, min30, + ... +} + + +M7Configuration ::= SEQUENCE { + m7period M7period, + m7-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { { M7Configuration-ExtIEs} } OPTIONAL, + ... +} + +M7Configuration-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-M7ReportAmount CRITICALITY ignore EXTENSION M7ReportAmountMDT PRESENCE optional }, + ... +} + +M7ReportAmountMDT ::= ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity, ...} + +M7period ::= INTEGER(1..60, ...) + +MDT-Location-Info ::= SEQUENCE { + mDT-Location-Information MDT-Location-Information, + iE-Extensions ProtocolExtensionContainer { { MDT-Location-Info-ExtIEs} } OPTIONAL, + ... +} + +MDT-Location-Info-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +MDT-Location-Information::= BIT STRING (SIZE (8)) + +-- N + +N3IWF-ID ::= CHOICE { + n3IWF-ID BIT STRING (SIZE(16)), + choice-Extensions ProtocolIE-SingleContainer { {N3IWF-ID-ExtIEs} } +} + +N3IWF-ID-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +NAS-PDU ::= OCTET STRING + +NASSecurityParametersFromNGRAN ::= OCTET STRING + +NB-IoT-DefaultPagingDRX ::= ENUMERATED { + rf128, rf256, rf512, rf1024, + ... +} + +NB-IoT-PagingDRX ::= ENUMERATED { + rf32, rf64, rf128, rf256, rf512, rf1024, + ... +} + +NB-IoT-Paging-eDRXCycle ::= ENUMERATED { + hf2, hf4, hf6, hf8, hf10, hf12, hf14, hf16, hf32, hf64, hf128, hf256, hf512, hf1024, + ... +} + +NB-IoT-Paging-TimeWindow ::= ENUMERATED { + s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, + ... +} + +NB-IoT-Paging-eDRXInfo ::= SEQUENCE { + nB-IoT-Paging-eDRXCycle NB-IoT-Paging-eDRXCycle, + nB-IoT-Paging-TimeWindow NB-IoT-Paging-TimeWindow OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { NB-IoT-Paging-eDRXInfo-ExtIEs} } OPTIONAL, + ... +} + +NB-IoT-Paging-eDRXInfo-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NB-IoT-UEPriority ::= INTEGER (0..255, ...) + +NetworkInstance ::= INTEGER (1..256, ...) + +NewSecurityContextInd ::= ENUMERATED { + true, + ... +} + +NextHopChainingCount ::= INTEGER (0..7) + +NextPagingAreaScope ::= ENUMERATED { + same, + changed, + ... +} + +NGAPIESupportInformationRequestList ::= SEQUENCE (SIZE(1.. maxnoofNGAPIESupportInfo)) OF NGAPIESupportInformationRequestItem + +NGAPIESupportInformationRequestItem ::= SEQUENCE { + ngap-ProtocolIE-Id ProtocolIE-ID, + iE-Extensions ProtocolExtensionContainer { { NGAPIESupportInformationRequestItem-ExtIEs} } OPTIONAL, + ... +} + +NGAPIESupportInformationRequestItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NGAPIESupportInformationResponseList ::= SEQUENCE (SIZE(1.. maxnoofNGAPIESupportInfo)) OF NGAPIESupportInformationResponseItem + +NGAPIESupportInformationResponseItem ::= SEQUENCE { + ngap-ProtocolIE-Id ProtocolIE-ID, + ngap-ProtocolIESupportInfo ENUMERATED {supported, not-supported, ...}, + ngap-ProtocolIEPresenceInfo ENUMERATED {present, not-present, ...}, + iE-Extensions ProtocolExtensionContainer { { NGAPIESupportInformationResponseItem-ExtIEs} } OPTIONAL, + ... +} + +NGAPIESupportInformationResponseItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NgENB-ID ::= CHOICE { + macroNgENB-ID BIT STRING (SIZE(20)), + shortMacroNgENB-ID BIT STRING (SIZE(18)), + longMacroNgENB-ID BIT STRING (SIZE(21)), + choice-Extensions ProtocolIE-SingleContainer { {NgENB-ID-ExtIEs} } +} + +NgENB-ID-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +NotifySourceNGRANNode ::= ENUMERATED { + notifySource, + ... +} + +NGRAN-CGI ::= CHOICE { + nR-CGI NR-CGI, + eUTRA-CGI EUTRA-CGI, + choice-Extensions ProtocolIE-SingleContainer { {NGRAN-CGI-ExtIEs} } +} + +NGRAN-CGI-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +NGRAN-TNLAssociationToRemoveList ::= SEQUENCE (SIZE(1..maxnoofTNLAssociations)) OF NGRAN-TNLAssociationToRemoveItem + +NGRAN-TNLAssociationToRemoveItem::= SEQUENCE { + tNLAssociationTransportLayerAddress CPTransportLayerInformation, + tNLAssociationTransportLayerAddressAMF CPTransportLayerInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { NGRAN-TNLAssociationToRemoveItem-ExtIEs} } OPTIONAL +} + +NGRAN-TNLAssociationToRemoveItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NGRANTraceID ::= OCTET STRING (SIZE(8)) + +NID ::= BIT STRING (SIZE(44)) + +NonDynamic5QIDescriptor ::= SEQUENCE { + fiveQI FiveQI, + priorityLevelQos PriorityLevelQos OPTIONAL, + averagingWindow AveragingWindow OPTIONAL, + maximumDataBurstVolume MaximumDataBurstVolume OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NonDynamic5QIDescriptor-ExtIEs} } OPTIONAL, + ... +} + +NonDynamic5QIDescriptor-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-CNPacketDelayBudgetDL CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }| + { ID id-CNPacketDelayBudgetUL CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }, + ... +} + +NotAllowedTACs ::= SEQUENCE (SIZE(1..maxnoofAllowedAreas)) OF TAC + +NotificationCause ::= ENUMERATED { + fulfilled, + not-fulfilled, + ... +} + +NotificationControl ::= ENUMERATED { + notification-requested, + ... +} + +NPN-AccessInformation ::= CHOICE { + pNI-NPN-Access-Information CellCAGList, + choice-Extensions ProtocolIE-SingleContainer { {NPN-AccessInformation-ExtIEs} } +} + +NPN-AccessInformation-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +NPN-MobilityInformation ::= CHOICE { + sNPN-MobilityInformation SNPN-MobilityInformation, + pNI-NPN-MobilityInformation PNI-NPN-MobilityInformation, + choice-Extensions ProtocolIE-SingleContainer { {NPN-MobilityInformation-ExtIEs} } +} + +NPN-MobilityInformation-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + + +NPN-PagingAssistanceInformation ::= CHOICE { + pNI-NPN-PagingAssistance Allowed-PNI-NPN-List, + choice-Extensions ProtocolIE-SingleContainer { {NPN-PagingAssistanceInformation-ExtIEs} } +} + +NPN-PagingAssistanceInformation-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +NPN-Support ::= CHOICE { + sNPN NID, + choice-Extensions ProtocolIE-SingleContainer { {NPN-Support-ExtIEs} } +} + +NPN-Support-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +NRCellIdentity ::= BIT STRING (SIZE(36)) + +NR-CGI ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + nRCellIdentity NRCellIdentity, + iE-Extensions ProtocolExtensionContainer { {NR-CGI-ExtIEs} } OPTIONAL, + ... +} + +NR-CGI-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NR-CGIList ::= SEQUENCE (SIZE(1..maxnoofCellsingNB)) OF NR-CGI + +NR-CGIListForWarning ::= SEQUENCE (SIZE(1..maxnoofCellIDforWarning)) OF NR-CGI + +NR-PagingeDRXInformation ::= SEQUENCE { + nR-paging-eDRX-Cycle NR-Paging-eDRX-Cycle, + nR-paging-Time-Window NR-Paging-Time-Window OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NR-PagingeDRXInformation-ExtIEs} } OPTIONAL, + ... +} + +NR-PagingeDRXInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NR-Paging-eDRX-Cycle ::= ENUMERATED { + hfquarter, hfhalf, hf1, hf2, hf4, hf8, hf16, + hf32, hf64, hf128, hf256, hf512, hf1024, + ... +} + +NR-Paging-Time-Window ::= ENUMERATED { + s1, s2, s3, s4, s5, + s6, s7, s8, s9, s10, + s11, s12, s13, s14, s15, s16, + ..., + s17, s18, s19, s20, s21, s22, s23, s24, + s25, s26, s27, s28, s29, s30, s31, s32 +} + +NRencryptionAlgorithms ::= BIT STRING (SIZE(16, ...)) + +NRintegrityProtectionAlgorithms ::= BIT STRING (SIZE(16, ...)) + +NRMobilityHistoryReport ::= OCTET STRING + +NRPPa-PDU ::= OCTET STRING + +NRUERLFReportContainer ::= OCTET STRING + +NRNTNTAIInformation ::= SEQUENCE { + servingPLMN PLMNIdentity, + tACListInNRNTN TACListInNRNTN, + uELocationDerivedTACInNRNTN TAC OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { NRNTNTAIInformation-ExtIEs} } OPTIONAL, + ... +} + +NRNTNTAIInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +NumberOfBroadcasts ::= INTEGER (0..65535) + +NumberOfBroadcastsRequested ::= INTEGER (0..65535) + +NRARFCN ::= INTEGER (0.. maxNRARFCN) + +NRFrequencyBand ::= INTEGER (1..1024, ...) + +NRFrequencyBand-List ::= SEQUENCE (SIZE(1..maxnoofNRCellBands)) OF NRFrequencyBandItem + +NRFrequencyBandItem ::= SEQUENCE { + nr-frequency-band NRFrequencyBand, + iE-Extension ProtocolExtensionContainer { {NRFrequencyBandItem-ExtIEs} } OPTIONAL, + ... +} + +NRFrequencyBandItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NRFrequencyInfo ::= SEQUENCE { + nrARFCN NRARFCN, + frequencyBand-List NRFrequencyBand-List, + iE-Extension ProtocolExtensionContainer { {NRFrequencyInfo-ExtIEs} } OPTIONAL, + ... +} + +NRFrequencyInfo-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NR-PCI ::= INTEGER (0..1007, ...) + +NRV2XServicesAuthorized ::= SEQUENCE { + vehicleUE VehicleUE OPTIONAL, + pedestrianUE PedestrianUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRV2XServicesAuthorized-ExtIEs} } OPTIONAL, + ... +} + +NRV2XServicesAuthorized-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +VehicleUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} + +PedestrianUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} + +NRUESidelinkAggregateMaximumBitrate ::= SEQUENCE { + uESidelinkAggregateMaximumBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { {NRUESidelinkAggregateMaximumBitrate-ExtIEs} } OPTIONAL, + ... +} + +NRUESidelinkAggregateMaximumBitrate-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +NSAG-ID ::= INTEGER (0..255, ...) + +-- O + +OnboardingSupport ::= ENUMERATED { + true, + ... +} + +OverloadAction ::= ENUMERATED { + reject-non-emergency-mo-dt, + reject-rrc-cr-signalling, + permit-emergency-sessions-and-mobile-terminated-services-only, + permit-high-priority-sessions-and-mobile-terminated-services-only, + ... +} + +OverloadResponse ::= CHOICE { + overloadAction OverloadAction, + choice-Extensions ProtocolIE-SingleContainer { {OverloadResponse-ExtIEs} } +} + +OverloadResponse-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +OverloadStartNSSAIList ::= SEQUENCE (SIZE (1..maxnoofSliceItems)) OF OverloadStartNSSAIItem + +OverloadStartNSSAIItem ::= SEQUENCE { + sliceOverloadList SliceOverloadList, + sliceOverloadResponse OverloadResponse OPTIONAL, + sliceTrafficLoadReductionIndication TrafficLoadReductionIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {OverloadStartNSSAIItem-ExtIEs} } OPTIONAL, + ... +} + +OverloadStartNSSAIItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- P + +PacketDelayBudget ::= INTEGER (0..1023, ...) + +PacketErrorRate ::= SEQUENCE { + pERScalar INTEGER (0..9, ...), + pERExponent INTEGER (0..9, ...), + iE-Extensions ProtocolExtensionContainer { {PacketErrorRate-ExtIEs} } OPTIONAL, + ... +} + +PacketErrorRate-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PacketLossRate ::= INTEGER (0..1000, ...) + +PagingAssisDataforCEcapabUE ::= SEQUENCE { + eUTRA-CGI EUTRA-CGI, + coverageEnhancementLevel CoverageEnhancementLevel, + iE-Extensions ProtocolExtensionContainer { { PagingAssisDataforCEcapabUE-ExtIEs} } OPTIONAL, + ... +} + +PagingAssisDataforCEcapabUE-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PagingAttemptInformation ::= SEQUENCE { + pagingAttemptCount PagingAttemptCount, + intendedNumberOfPagingAttempts IntendedNumberOfPagingAttempts, + nextPagingAreaScope NextPagingAreaScope OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PagingAttemptInformation-ExtIEs} } OPTIONAL, + ... +} + +PagingAttemptInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PagingAttemptCount ::= INTEGER (1..16, ...) + +PagingCause ::= ENUMERATED { + voice, + ... +} + +PagingCauseIndicationForVoiceService ::= ENUMERATED { + supported, + ... +} + +PagingDRX ::= ENUMERATED { + v32, + v64, + v128, + v256, + ... +} + +PagingOrigin ::= ENUMERATED { + non-3gpp, + ... +} + +PagingPriority ::= ENUMERATED { + priolevel1, + priolevel2, + priolevel3, + priolevel4, + priolevel5, + priolevel6, + priolevel7, + priolevel8, + ... +} + +PagingProbabilityInformation ::= ENUMERATED { + p00, p05, p10, p15, p20, p25, p30, p35, p40, p45, p50, p55, p60, p65, p70, p75, p80, p85, p90, p95, p100, + ... +} + +PathSwitchRequestAcknowledgeTransfer ::= SEQUENCE { + uL-NGU-UP-TNLInformation UPTransportLayerInformation OPTIONAL, + securityIndication SecurityIndication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PathSwitchRequestAcknowledgeTransfer-ExtIEs} } OPTIONAL, + ... +} + +PathSwitchRequestAcknowledgeTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalNGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformationPairList PRESENCE optional }| + { ID id-RedundantUL-NGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional }| + { ID id-AdditionalRedundantNGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformationPairList PRESENCE optional }| + { ID id-QosFlowParametersList CRITICALITY ignore EXTENSION QosFlowParametersList PRESENCE optional }, + ... +} + +PathSwitchRequestSetupFailedTransfer ::= SEQUENCE { + cause Cause, + iE-Extensions ProtocolExtensionContainer { {PathSwitchRequestSetupFailedTransfer-ExtIEs} } OPTIONAL, + ... +} + +PathSwitchRequestSetupFailedTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PathSwitchRequestTransfer ::= SEQUENCE { + dL-NGU-UP-TNLInformation UPTransportLayerInformation, + dL-NGU-TNLInformationReused DL-NGU-TNLInformationReused OPTIONAL, + userPlaneSecurityInformation UserPlaneSecurityInformation OPTIONAL, + qosFlowAcceptedList QosFlowAcceptedList, + iE-Extensions ProtocolExtensionContainer { {PathSwitchRequestTransfer-ExtIEs} } OPTIONAL, + ... +} + +PathSwitchRequestTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalDLQosFlowPerTNLInformation CRITICALITY ignore EXTENSION QosFlowPerTNLInformationList PRESENCE optional }| + { ID id-RedundantDL-NGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional }| + { ID id-RedundantDL-NGU-TNLInformationReused CRITICALITY ignore EXTENSION DL-NGU-TNLInformationReused PRESENCE optional }| + { ID id-AdditionalRedundantDLQosFlowPerTNLInformation CRITICALITY ignore EXTENSION QosFlowPerTNLInformationList PRESENCE optional }| + { ID id-UsedRSNInformation CRITICALITY ignore EXTENSION RedundantPDUSessionInformation PRESENCE optional }| + { ID id-GlobalRANNodeID CRITICALITY ignore EXTENSION GlobalRANNodeID PRESENCE optional }| + { ID id-MBS-SupportIndicator CRITICALITY ignore EXTENSION MBS-SupportIndicator PRESENCE optional }, + ... +} + +PathSwitchRequestUnsuccessfulTransfer ::= SEQUENCE { + cause Cause, + iE-Extensions ProtocolExtensionContainer { {PathSwitchRequestUnsuccessfulTransfer-ExtIEs} } OPTIONAL, + ... +} + +PathSwitchRequestUnsuccessfulTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PC5QoSParameters ::= SEQUENCE { + pc5QoSFlowList PC5QoSFlowList, + pc5LinkAggregateBitRates BitRate OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PC5QoSParameters-ExtIEs} } OPTIONAL, + ... +} + +PC5QoSParameters-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PC5QoSFlowList ::= SEQUENCE (SIZE(1..maxnoofPC5QoSFlows)) OF PC5QoSFlowItem + +PC5QoSFlowItem::= SEQUENCE { + pQI FiveQI, + pc5FlowBitRates PC5FlowBitRates OPTIONAL, + range Range OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { PC5QoSFlowItem-ExtIEs} } OPTIONAL, + ... +} + +PC5QoSFlowItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PC5FlowBitRates ::= SEQUENCE { + guaranteedFlowBitRate BitRate, + maximumFlowBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { { PC5FlowBitRates-ExtIEs} } OPTIONAL, + ... +} + +PC5FlowBitRates-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +PCIListForMDT ::= SEQUENCE (SIZE(1.. maxnoofNeighPCIforMDT)) OF NR-PCI + +PrivacyIndicator ::= ENUMERATED { + immediate-MDT, + logged-MDT, + ... +} + +PDUSessionAggregateMaximumBitRate ::= SEQUENCE { + pDUSessionAggregateMaximumBitRateDL BitRate, + pDUSessionAggregateMaximumBitRateUL BitRate, + iE-Extensions ProtocolExtensionContainer { {PDUSessionAggregateMaximumBitRate-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionAggregateMaximumBitRate-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionID ::= INTEGER (0..255) + +PDUSessionPairID ::= INTEGER (0..255, ...) + +PDUSessionResourceAdmittedList ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceAdmittedItem + +PDUSessionResourceAdmittedItem ::= SEQUENCE { + pDUSessionID PDUSessionID, + handoverRequestAcknowledgeTransfer OCTET STRING (CONTAINING HandoverRequestAcknowledgeTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceAdmittedItem-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceAdmittedItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceFailedToModifyListModCfm ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceFailedToModifyItemModCfm + +PDUSessionResourceFailedToModifyItemModCfm ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceModifyIndicationUnsuccessfulTransfer OCTET STRING (CONTAINING PDUSessionResourceModifyIndicationUnsuccessfulTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceFailedToModifyItemModCfm-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceFailedToModifyItemModCfm-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceFailedToModifyListModRes ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceFailedToModifyItemModRes + +PDUSessionResourceFailedToModifyItemModRes ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceModifyUnsuccessfulTransfer OCTET STRING (CONTAINING PDUSessionResourceModifyUnsuccessfulTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceFailedToModifyItemModRes-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceFailedToModifyItemModRes-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceFailedToResumeListRESReq ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceFailedToResumeItemRESReq + +PDUSessionResourceFailedToResumeItemRESReq ::= SEQUENCE { + pDUSessionID PDUSessionID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceFailedToResumeItemRESReq-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceFailedToResumeItemRESReq-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +PDUSessionResourceFailedToResumeListRESRes ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceFailedToResumeItemRESRes + +PDUSessionResourceFailedToResumeItemRESRes ::= SEQUENCE { + pDUSessionID PDUSessionID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceFailedToResumeItemRESRes-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceFailedToResumeItemRESRes-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceFailedToSetupListCxtFail ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceFailedToSetupItemCxtFail + +PDUSessionResourceFailedToSetupItemCxtFail ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceSetupUnsuccessfulTransfer OCTET STRING (CONTAINING PDUSessionResourceSetupUnsuccessfulTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceFailedToSetupItemCxtFail-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceFailedToSetupItemCxtFail-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceFailedToSetupListCxtRes ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceFailedToSetupItemCxtRes + +PDUSessionResourceFailedToSetupItemCxtRes ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceSetupUnsuccessfulTransfer OCTET STRING (CONTAINING PDUSessionResourceSetupUnsuccessfulTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceFailedToSetupItemCxtRes-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceFailedToSetupItemCxtRes-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceFailedToSetupListHOAck ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceFailedToSetupItemHOAck + +PDUSessionResourceFailedToSetupItemHOAck ::= SEQUENCE { + pDUSessionID PDUSessionID, + handoverResourceAllocationUnsuccessfulTransfer OCTET STRING (CONTAINING HandoverResourceAllocationUnsuccessfulTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceFailedToSetupItemHOAck-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceFailedToSetupItemHOAck-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceFailedToSetupListPSReq ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceFailedToSetupItemPSReq + +PDUSessionResourceFailedToSetupItemPSReq ::= SEQUENCE { + pDUSessionID PDUSessionID, + pathSwitchRequestSetupFailedTransfer OCTET STRING (CONTAINING PathSwitchRequestSetupFailedTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceFailedToSetupItemPSReq-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceFailedToSetupItemPSReq-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceFailedToSetupListSURes ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceFailedToSetupItemSURes + +PDUSessionResourceFailedToSetupItemSURes ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceSetupUnsuccessfulTransfer OCTET STRING (CONTAINING PDUSessionResourceSetupUnsuccessfulTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceFailedToSetupItemSURes-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceFailedToSetupItemSURes-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceHandoverList ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceHandoverItem + +PDUSessionResourceHandoverItem ::= SEQUENCE { + pDUSessionID PDUSessionID, + handoverCommandTransfer OCTET STRING (CONTAINING HandoverCommandTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceHandoverItem-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceHandoverItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceInformationList ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceInformationItem + +PDUSessionResourceInformationItem ::= SEQUENCE { + pDUSessionID PDUSessionID, + qosFlowInformationList QosFlowInformationList, + dRBsToQosFlowsMappingList DRBsToQosFlowsMappingList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceInformationItem-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceInformationItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceListCxtRelCpl ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceItemCxtRelCpl + +PDUSessionResourceItemCxtRelCpl ::= SEQUENCE { + pDUSessionID PDUSessionID, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceItemCxtRelCpl-ExtIEs} } OPTIONAL, + ... +} + +-- WS modification: define a dedicated type +PDUSessionResourceReleaseResponseTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING PDUSessionResourceReleaseResponseTransfer) + +PDUSessionResourceItemCxtRelCpl-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { +-- WS modification: define a dedicated type +-- { ID id-PDUSessionResourceReleaseResponseTransfer CRITICALITY ignore EXTENSION OCTET STRING (CONTAINING PDUSessionResourceReleaseResponseTransfer) PRESENCE optional }, + { ID id-PDUSessionResourceReleaseResponseTransfer CRITICALITY ignore EXTENSION PDUSessionResourceReleaseResponseTransfer-OCTET-STRING PRESENCE optional }, + ... +} + +PDUSessionResourceListCxtRelReq ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceItemCxtRelReq + +PDUSessionResourceItemCxtRelReq ::= SEQUENCE { + pDUSessionID PDUSessionID, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceItemCxtRelReq-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceItemCxtRelReq-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceListHORqd ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceItemHORqd + +PDUSessionResourceItemHORqd ::= SEQUENCE { + pDUSessionID PDUSessionID, + handoverRequiredTransfer OCTET STRING (CONTAINING HandoverRequiredTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceItemHORqd-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceItemHORqd-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceModifyConfirmTransfer ::= SEQUENCE { + qosFlowModifyConfirmList QosFlowModifyConfirmList, + uLNGU-UP-TNLInformation UPTransportLayerInformation, + additionalNG-UUPTNLInformation UPTransportLayerInformationPairList OPTIONAL, + qosFlowFailedToModifyList QosFlowListWithCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModifyConfirmTransfer-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModifyConfirmTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-RedundantUL-NGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional }| + { ID id-AdditionalRedundantNGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformationPairList PRESENCE optional }, + ... +} + +PDUSessionResourceModifyIndicationUnsuccessfulTransfer ::= SEQUENCE { + cause Cause, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModifyIndicationUnsuccessfulTransfer-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModifyIndicationUnsuccessfulTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceModifyRequestTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PDUSessionResourceModifyRequestTransferIEs} }, + ... +} + +PDUSessionResourceModifyRequestTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-PDUSessionAggregateMaximumBitRate CRITICALITY reject TYPE PDUSessionAggregateMaximumBitRate PRESENCE optional }| + { ID id-UL-NGU-UP-TNLModifyList CRITICALITY reject TYPE UL-NGU-UP-TNLModifyList PRESENCE optional }| + { ID id-NetworkInstance CRITICALITY reject TYPE NetworkInstance PRESENCE optional }| + { ID id-QosFlowAddOrModifyRequestList CRITICALITY reject TYPE QosFlowAddOrModifyRequestList PRESENCE optional }| + { ID id-QosFlowToReleaseList CRITICALITY reject TYPE QosFlowListWithCause PRESENCE optional }| + { ID id-AdditionalUL-NGU-UP-TNLInformation CRITICALITY reject TYPE UPTransportLayerInformationList PRESENCE optional }| + { ID id-CommonNetworkInstance CRITICALITY ignore TYPE CommonNetworkInstance PRESENCE optional }| + { ID id-AdditionalRedundantUL-NGU-UP-TNLInformation CRITICALITY ignore TYPE UPTransportLayerInformationList PRESENCE optional }| + { ID id-RedundantCommonNetworkInstance CRITICALITY ignore TYPE CommonNetworkInstance PRESENCE optional }| + { ID id-RedundantUL-NGU-UP-TNLInformation CRITICALITY ignore TYPE UPTransportLayerInformation PRESENCE optional }| + { ID id-SecurityIndication CRITICALITY ignore TYPE SecurityIndication PRESENCE optional }| + { ID id-MBSSessionSetuporModifyRequestList CRITICALITY ignore TYPE MBSSessionSetuporModifyRequestList PRESENCE optional }| + { ID id-MBSSessionToReleaseList CRITICALITY ignore TYPE MBSSessionToReleaseList PRESENCE optional }, + ... +} + +PDUSessionResourceModifyResponseTransfer ::= SEQUENCE { + dL-NGU-UP-TNLInformation UPTransportLayerInformation OPTIONAL, + uL-NGU-UP-TNLInformation UPTransportLayerInformation OPTIONAL, + qosFlowAddOrModifyResponseList QosFlowAddOrModifyResponseList OPTIONAL, + additionalDLQosFlowPerTNLInformation QosFlowPerTNLInformationList OPTIONAL, + qosFlowFailedToAddOrModifyList QosFlowListWithCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModifyResponseTransfer-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModifyResponseTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalNGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformationPairList PRESENCE optional }| + { ID id-RedundantDL-NGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional }| + { ID id-RedundantUL-NGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional }| + { ID id-AdditionalRedundantDLQosFlowPerTNLInformation CRITICALITY ignore EXTENSION QosFlowPerTNLInformationList PRESENCE optional }| + { ID id-AdditionalRedundantNGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformationPairList PRESENCE optional }| + { ID id-SecondaryRATUsageInformation CRITICALITY ignore EXTENSION SecondaryRATUsageInformation PRESENCE optional }| + { ID id-MBS-SupportIndicator CRITICALITY ignore EXTENSION MBS-SupportIndicator PRESENCE optional }| + { ID id-MBSSessionSetuporModifyResponseList CRITICALITY ignore EXTENSION MBSSessionSetupResponseList PRESENCE optional }| + { ID id-MBSSessionFailedtoSetuporModifyList CRITICALITY ignore EXTENSION MBSSessionFailedtoSetupList PRESENCE optional }, + ... +} + +PDUSessionResourceModifyIndicationTransfer ::= SEQUENCE { + dLQosFlowPerTNLInformation QosFlowPerTNLInformation, + additionalDLQosFlowPerTNLInformation QosFlowPerTNLInformationList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModifyIndicationTransfer-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModifyIndicationTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-SecondaryRATUsageInformation CRITICALITY ignore EXTENSION SecondaryRATUsageInformation PRESENCE optional }| + { ID id-SecurityResult CRITICALITY ignore EXTENSION SecurityResult PRESENCE optional }| + { ID id-RedundantDLQosFlowPerTNLInformation CRITICALITY ignore EXTENSION QosFlowPerTNLInformation PRESENCE optional }| + { ID id-AdditionalRedundantDLQosFlowPerTNLInformation CRITICALITY ignore EXTENSION QosFlowPerTNLInformationList PRESENCE optional }| + { ID id-GlobalRANNodeID CRITICALITY ignore EXTENSION GlobalRANNodeID PRESENCE optional }, + ... +} + +PDUSessionResourceModifyListModCfm ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceModifyItemModCfm + +PDUSessionResourceModifyItemModCfm ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceModifyConfirmTransfer OCTET STRING (CONTAINING PDUSessionResourceModifyConfirmTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModifyItemModCfm-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModifyItemModCfm-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceModifyListModInd ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceModifyItemModInd + +PDUSessionResourceModifyItemModInd ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceModifyIndicationTransfer OCTET STRING (CONTAINING PDUSessionResourceModifyIndicationTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModifyItemModInd-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModifyItemModInd-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceModifyListModReq ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceModifyItemModReq + +PDUSessionResourceModifyItemModReq ::= SEQUENCE { + pDUSessionID PDUSessionID, + nAS-PDU NAS-PDU OPTIONAL, + pDUSessionResourceModifyRequestTransfer OCTET STRING (CONTAINING PDUSessionResourceModifyRequestTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModifyItemModReq-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModifyItemModReq-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-S-NSSAI CRITICALITY reject EXTENSION S-NSSAI PRESENCE optional }| + { ID id-PduSessionExpectedUEActivityBehaviour CRITICALITY ignore EXTENSION ExpectedUEActivityBehaviour PRESENCE optional }, + ... +} + +PDUSessionResourceModifyListModRes ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceModifyItemModRes + +PDUSessionResourceModifyItemModRes ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceModifyResponseTransfer OCTET STRING (CONTAINING PDUSessionResourceModifyResponseTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModifyItemModRes-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModifyItemModRes-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceModifyUnsuccessfulTransfer ::= SEQUENCE { + cause Cause, + criticalityDiagnostics CriticalityDiagnostics OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceModifyUnsuccessfulTransfer-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceModifyUnsuccessfulTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceNotifyList ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceNotifyItem + +PDUSessionResourceNotifyItem ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceNotifyTransfer OCTET STRING (CONTAINING PDUSessionResourceNotifyTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceNotifyItem-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceNotifyItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceNotifyReleasedTransfer ::= SEQUENCE { + cause Cause, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceNotifyReleasedTransfer-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceNotifyReleasedTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-SecondaryRATUsageInformation CRITICALITY ignore EXTENSION SecondaryRATUsageInformation PRESENCE optional }, + ... +} + +PDUSessionResourceNotifyTransfer ::= SEQUENCE { + qosFlowNotifyList QosFlowNotifyList OPTIONAL, + qosFlowReleasedList QosFlowListWithCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceNotifyTransfer-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceNotifyTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-SecondaryRATUsageInformation CRITICALITY ignore EXTENSION SecondaryRATUsageInformation PRESENCE optional }| + { ID id-QosFlowFeedbackList CRITICALITY ignore EXTENSION QosFlowFeedbackList PRESENCE optional }, + ... +} + +PDUSessionResourceReleaseCommandTransfer ::= SEQUENCE { + cause Cause, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceReleaseCommandTransfer-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceReleaseCommandTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceReleasedListNot ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceReleasedItemNot + +PDUSessionResourceReleasedItemNot ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceNotifyReleasedTransfer OCTET STRING (CONTAINING PDUSessionResourceNotifyReleasedTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceReleasedItemNot-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceReleasedItemNot-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceReleasedListPSAck ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceReleasedItemPSAck + +PDUSessionResourceReleasedItemPSAck ::= SEQUENCE { + pDUSessionID PDUSessionID, + pathSwitchRequestUnsuccessfulTransfer OCTET STRING (CONTAINING PathSwitchRequestUnsuccessfulTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceReleasedItemPSAck-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceReleasedItemPSAck-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceReleasedListPSFail ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceReleasedItemPSFail + +PDUSessionResourceReleasedItemPSFail ::= SEQUENCE { + pDUSessionID PDUSessionID, + pathSwitchRequestUnsuccessfulTransfer OCTET STRING (CONTAINING PathSwitchRequestUnsuccessfulTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceReleasedItemPSFail-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceReleasedItemPSFail-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceReleasedListRelRes ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceReleasedItemRelRes + +PDUSessionResourceReleasedItemRelRes ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceReleaseResponseTransfer OCTET STRING (CONTAINING PDUSessionResourceReleaseResponseTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceReleasedItemRelRes-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceReleasedItemRelRes-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceReleaseResponseTransfer ::= SEQUENCE { + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceReleaseResponseTransfer-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceReleaseResponseTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-SecondaryRATUsageInformation CRITICALITY ignore EXTENSION SecondaryRATUsageInformation PRESENCE optional }, + ... +} + +PDUSessionResourceResumeListRESReq ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceResumeItemRESReq + +PDUSessionResourceResumeItemRESReq ::= SEQUENCE { + pDUSessionID PDUSessionID, + uEContextResumeRequestTransfer OCTET STRING (CONTAINING UEContextResumeRequestTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceResumeItemRESReq-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceResumeItemRESReq-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceResumeListRESRes ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceResumeItemRESRes + +PDUSessionResourceResumeItemRESRes ::= SEQUENCE { + pDUSessionID PDUSessionID, + uEContextResumeResponseTransfer OCTET STRING (CONTAINING UEContextResumeResponseTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceResumeItemRESRes-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceResumeItemRESRes-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceSecondaryRATUsageList ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceSecondaryRATUsageItem + +PDUSessionResourceSecondaryRATUsageItem ::= SEQUENCE { + pDUSessionID PDUSessionID, + secondaryRATDataUsageReportTransfer OCTET STRING (CONTAINING SecondaryRATDataUsageReportTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSecondaryRATUsageItem-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSecondaryRATUsageItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceSetupListCxtReq ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceSetupItemCxtReq + +PDUSessionResourceSetupItemCxtReq ::= SEQUENCE { + pDUSessionID PDUSessionID, + nAS-PDU NAS-PDU OPTIONAL, + s-NSSAI S-NSSAI, + pDUSessionResourceSetupRequestTransfer OCTET STRING (CONTAINING PDUSessionResourceSetupRequestTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSetupItemCxtReq-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSetupItemCxtReq-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-PduSessionExpectedUEActivityBehaviour CRITICALITY ignore EXTENSION ExpectedUEActivityBehaviour PRESENCE optional }, + ... +} + +PDUSessionResourceSetupListCxtRes ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceSetupItemCxtRes + +PDUSessionResourceSetupItemCxtRes ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceSetupResponseTransfer OCTET STRING (CONTAINING PDUSessionResourceSetupResponseTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSetupItemCxtRes-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSetupItemCxtRes-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceSetupListHOReq ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceSetupItemHOReq + +PDUSessionResourceSetupItemHOReq ::= SEQUENCE { + pDUSessionID PDUSessionID, + s-NSSAI S-NSSAI, + handoverRequestTransfer OCTET STRING (CONTAINING PDUSessionResourceSetupRequestTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSetupItemHOReq-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSetupItemHOReq-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-PduSessionExpectedUEActivityBehaviour CRITICALITY ignore EXTENSION ExpectedUEActivityBehaviour PRESENCE optional }, + ... +} + +PDUSessionResourceSetupListSUReq ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceSetupItemSUReq + +PDUSessionResourceSetupItemSUReq ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionNAS-PDU NAS-PDU OPTIONAL, + s-NSSAI S-NSSAI, + pDUSessionResourceSetupRequestTransfer OCTET STRING (CONTAINING PDUSessionResourceSetupRequestTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSetupItemSUReq-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSetupItemSUReq-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-PduSessionExpectedUEActivityBehaviour CRITICALITY ignore EXTENSION ExpectedUEActivityBehaviour PRESENCE optional }, + ... +} + +PDUSessionResourceSetupListSURes ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceSetupItemSURes + +PDUSessionResourceSetupItemSURes ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceSetupResponseTransfer OCTET STRING (CONTAINING PDUSessionResourceSetupResponseTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSetupItemSURes-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSetupItemSURes-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceSetupRequestTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PDUSessionResourceSetupRequestTransferIEs} }, + ... +} + +PDUSessionResourceSetupRequestTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-PDUSessionAggregateMaximumBitRate CRITICALITY reject TYPE PDUSessionAggregateMaximumBitRate PRESENCE optional }| + { ID id-UL-NGU-UP-TNLInformation CRITICALITY reject TYPE UPTransportLayerInformation PRESENCE mandatory }| + { ID id-AdditionalUL-NGU-UP-TNLInformation CRITICALITY reject TYPE UPTransportLayerInformationList PRESENCE optional }| + { ID id-DataForwardingNotPossible CRITICALITY reject TYPE DataForwardingNotPossible PRESENCE optional }| + { ID id-PDUSessionType CRITICALITY reject TYPE PDUSessionType PRESENCE mandatory }| + { ID id-SecurityIndication CRITICALITY reject TYPE SecurityIndication PRESENCE optional }| + { ID id-NetworkInstance CRITICALITY reject TYPE NetworkInstance PRESENCE optional }| + { ID id-QosFlowSetupRequestList CRITICALITY reject TYPE QosFlowSetupRequestList PRESENCE mandatory }| + { ID id-CommonNetworkInstance CRITICALITY ignore TYPE CommonNetworkInstance PRESENCE optional }| + { ID id-DirectForwardingPathAvailability CRITICALITY ignore TYPE DirectForwardingPathAvailability PRESENCE optional }| + { ID id-RedundantUL-NGU-UP-TNLInformation CRITICALITY ignore TYPE UPTransportLayerInformation PRESENCE optional }| + { ID id-AdditionalRedundantUL-NGU-UP-TNLInformation CRITICALITY ignore TYPE UPTransportLayerInformationList PRESENCE optional }| + { ID id-RedundantCommonNetworkInstance CRITICALITY ignore TYPE CommonNetworkInstance PRESENCE optional }| + { ID id-RedundantPDUSessionInformation CRITICALITY ignore TYPE RedundantPDUSessionInformation PRESENCE optional }| + { ID id-MBSSessionSetupRequestList CRITICALITY ignore TYPE MBSSessionSetupRequestList PRESENCE optional }, + ... +} + +PDUSessionResourceSetupResponseTransfer ::= SEQUENCE { + dLQosFlowPerTNLInformation QosFlowPerTNLInformation, + additionalDLQosFlowPerTNLInformation QosFlowPerTNLInformationList OPTIONAL, + securityResult SecurityResult OPTIONAL, + qosFlowFailedToSetupList QosFlowListWithCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSetupResponseTransfer-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSetupResponseTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-RedundantDLQosFlowPerTNLInformation CRITICALITY ignore EXTENSION QosFlowPerTNLInformation PRESENCE optional }| + { ID id-AdditionalRedundantDLQosFlowPerTNLInformation CRITICALITY ignore EXTENSION QosFlowPerTNLInformationList PRESENCE optional }| + { ID id-UsedRSNInformation CRITICALITY ignore EXTENSION RedundantPDUSessionInformation PRESENCE optional }| + { ID id-GlobalRANNodeID CRITICALITY ignore EXTENSION GlobalRANNodeID PRESENCE optional }| + { ID id-MBS-SupportIndicator CRITICALITY ignore EXTENSION MBS-SupportIndicator PRESENCE optional }| + { ID id-MBSSessionSetupResponseList CRITICALITY ignore EXTENSION MBSSessionSetupResponseList PRESENCE optional }| + { ID id-MBSSessionFailedtoSetupList CRITICALITY ignore EXTENSION MBSSessionFailedtoSetupList PRESENCE optional }, + ... +} + +PDUSessionResourceSetupUnsuccessfulTransfer ::= SEQUENCE { + cause Cause, + criticalityDiagnostics CriticalityDiagnostics OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSetupUnsuccessfulTransfer-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSetupUnsuccessfulTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceSuspendListSUSReq ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceSuspendItemSUSReq + +PDUSessionResourceSuspendItemSUSReq ::= SEQUENCE { + pDUSessionID PDUSessionID, + uEContextSuspendRequestTransfer OCTET STRING (CONTAINING UEContextSuspendRequestTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceSuspendItemSUSReq-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSuspendItemSUSReq-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceSwitchedList ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceSwitchedItem + +PDUSessionResourceSwitchedItem ::= SEQUENCE { + pDUSessionID PDUSessionID, + pathSwitchRequestAcknowledgeTransfer OCTET STRING (CONTAINING PathSwitchRequestAcknowledgeTransfer), + iE-Extensions ProtocolExtensionContainer { { PDUSessionResourceSwitchedItem-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceSwitchedItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-PduSessionExpectedUEActivityBehaviour CRITICALITY ignore EXTENSION ExpectedUEActivityBehaviour PRESENCE optional }, + ... +} + +PDUSessionResourceToBeSwitchedDLList ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceToBeSwitchedDLItem + +PDUSessionResourceToBeSwitchedDLItem ::= SEQUENCE { + pDUSessionID PDUSessionID, + pathSwitchRequestTransfer OCTET STRING (CONTAINING PathSwitchRequestTransfer), + iE-Extensions ProtocolExtensionContainer { { PDUSessionResourceToBeSwitchedDLItem-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceToBeSwitchedDLItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceToReleaseListHOCmd ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceToReleaseItemHOCmd + +PDUSessionResourceToReleaseItemHOCmd ::= SEQUENCE { + pDUSessionID PDUSessionID, + handoverPreparationUnsuccessfulTransfer OCTET STRING (CONTAINING HandoverPreparationUnsuccessfulTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceToReleaseItemHOCmd-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceToReleaseItemHOCmd-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PDUSessionResourceToReleaseListRelCmd ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionResourceToReleaseItemRelCmd + +PDUSessionResourceToReleaseItemRelCmd ::= SEQUENCE { + pDUSessionID PDUSessionID, + pDUSessionResourceReleaseCommandTransfer OCTET STRING (CONTAINING PDUSessionResourceReleaseCommandTransfer), + iE-Extensions ProtocolExtensionContainer { {PDUSessionResourceToReleaseItemRelCmd-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionResourceToReleaseItemRelCmd-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} +PDUSessionType ::= ENUMERATED { + ipv4, + ipv6, + ipv4v6, + ethernet, + unstructured, + ... +} + +PDUSessionUsageReport ::= SEQUENCE { + rATType ENUMERATED {nr, eutra, ..., nr-unlicensed, e-utra-unlicensed}, + pDUSessionTimedReportList VolumeTimedReportList, + iE-Extensions ProtocolExtensionContainer { {PDUSessionUsageReport-ExtIEs} } OPTIONAL, + ... +} + +PDUSessionUsageReport-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PEIPSassistanceInformation ::= SEQUENCE { + cNsubgroupID CNsubgroupID, + iE-Extensions ProtocolExtensionContainer { {PEIPSassistanceInformation-ExtIEs} } OPTIONAL, + ... +} + +PEIPSassistanceInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +Periodicity ::= INTEGER (0..640000, ...) + +PeriodicRegistrationUpdateTimer ::= BIT STRING (SIZE(8)) + +PLMNIdentity ::= OCTET STRING (SIZE(3)) + +PLMNAreaBasedQMC ::= SEQUENCE { + plmnListforQMC PLMNListforQMC, + iE-Extensions ProtocolExtensionContainer { {PLMNAreaBasedQMC-ExtIEs} } OPTIONAL, + ... +} + +PLMNAreaBasedQMC-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PLMNListforQMC ::= SEQUENCE (SIZE(1..maxnoofPLMNforQMC)) OF PLMNIdentity + +PLMNSupportList ::= SEQUENCE (SIZE(1..maxnoofPLMNs)) OF PLMNSupportItem + +PLMNSupportItem ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + sliceSupportList SliceSupportList, + iE-Extensions ProtocolExtensionContainer { {PLMNSupportItem-ExtIEs} } OPTIONAL, + ... +} + +PLMNSupportItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-NPN-Support CRITICALITY reject EXTENSION NPN-Support PRESENCE optional }| + { ID id-ExtendedSliceSupportList CRITICALITY reject EXTENSION ExtendedSliceSupportList PRESENCE optional }| + { ID id-OnboardingSupport CRITICALITY ignore EXTENSION OnboardingSupport PRESENCE optional }, + ... +} + +PNI-NPN-MobilityInformation ::= SEQUENCE { + allowed-PNI-NPI-List Allowed-PNI-NPN-List, + iE-Extensions ProtocolExtensionContainer { {PNI-NPN-MobilityInformation-ExtIEs} } OPTIONAL, + ... +} + +PNI-NPN-MobilityInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +PortNumber ::= OCTET STRING (SIZE(2)) + +Pre-emptionCapability ::= ENUMERATED { + shall-not-trigger-pre-emption, + may-trigger-pre-emption, + ... +} + +Pre-emptionVulnerability ::= ENUMERATED { + not-pre-emptable, + pre-emptable, + ... +} + +PriorityLevelARP ::= INTEGER (1..15) + +PriorityLevelQos ::= INTEGER (1..127, ...) + +PWSFailedCellIDList ::= CHOICE { + eUTRA-CGI-PWSFailedList EUTRA-CGIList, + nR-CGI-PWSFailedList NR-CGIList, + choice-Extensions ProtocolIE-SingleContainer { {PWSFailedCellIDList-ExtIEs} } +} + +PWSFailedCellIDList-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +-- Q + +QMCConfigInfo ::= SEQUENCE { + uEAppLayerMeasInfoList UEAppLayerMeasInfoList, + iE-Extensions ProtocolExtensionContainer { { QMCConfigInfo-ExtIEs} } OPTIONAL, + ... +} + +QMCConfigInfo-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +QMCDeactivation ::= SEQUENCE { + qoEReferenceList QoEReferenceList, + iE-Extensions ProtocolExtensionContainer { { QMCDeactivation-ExtIEs} } OPTIONAL, + ... +} + +QMCDeactivation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +QoEReferenceList ::= SEQUENCE (SIZE(1..maxnoofUEAppLayerMeas)) OF QoEReference + +QoEReference ::= OCTET STRING (SIZE(6)) + +QosCharacteristics ::= CHOICE { + nonDynamic5QI NonDynamic5QIDescriptor, + dynamic5QI Dynamic5QIDescriptor, + choice-Extensions ProtocolIE-SingleContainer { {QosCharacteristics-ExtIEs} } +} + +QosCharacteristics-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +QosFlowAcceptedList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowAcceptedItem + +QosFlowAcceptedItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + iE-Extensions ProtocolExtensionContainer { {QosFlowAcceptedItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowAcceptedItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-CurrentQoSParaSetIndex CRITICALITY ignore EXTENSION AlternativeQoSParaSetIndex PRESENCE optional }, + ... +} + +QosFlowAddOrModifyRequestList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowAddOrModifyRequestItem + +QosFlowAddOrModifyRequestItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + qosFlowLevelQosParameters QosFlowLevelQosParameters OPTIONAL, + e-RAB-ID E-RAB-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QosFlowAddOrModifyRequestItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowAddOrModifyRequestItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + {ID id-TSCTrafficCharacteristics CRITICALITY ignore EXTENSION TSCTrafficCharacteristics PRESENCE optional }| + {ID id-RedundantQosFlowIndicator CRITICALITY ignore EXTENSION RedundantQosFlowIndicator PRESENCE optional }, + ... +} + +QosFlowAddOrModifyResponseList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowAddOrModifyResponseItem + +QosFlowAddOrModifyResponseItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + iE-Extensions ProtocolExtensionContainer { {QosFlowAddOrModifyResponseItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowAddOrModifyResponseItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-CurrentQoSParaSetIndex CRITICALITY ignore EXTENSION AlternativeQoSParaSetIndex PRESENCE optional }, + ... +} + +QosFlowFeedbackList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowFeedbackItem + +QosFlowFeedbackItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + updateFeedback UpdateFeedback OPTIONAL, + cNpacketDelayBudgetDL ExtendedPacketDelayBudget OPTIONAL, + cNpacketDelayBudgetUL ExtendedPacketDelayBudget OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QosFlowFeedbackItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowFeedbackItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +QosFlowIdentifier ::= INTEGER (0..63, ...) + +QosFlowInformationList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowInformationItem + +QosFlowInformationItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + dLForwarding DLForwarding OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QosFlowInformationItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowInformationItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + {ID id-ULForwarding CRITICALITY ignore EXTENSION ULForwarding PRESENCE optional}| + {ID id-SourceTNLAddrInfo CRITICALITY ignore EXTENSION TransportLayerAddress PRESENCE optional}| + {ID id-SourceNodeTNLAddrInfo CRITICALITY ignore EXTENSION TransportLayerAddress PRESENCE optional}, + ... +} + +QosFlowLevelQosParameters ::= SEQUENCE { + qosCharacteristics QosCharacteristics, + allocationAndRetentionPriority AllocationAndRetentionPriority, + gBR-QosInformation GBR-QosInformation OPTIONAL, + reflectiveQosAttribute ReflectiveQosAttribute OPTIONAL, + additionalQosFlowInformation AdditionalQosFlowInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QosFlowLevelQosParameters-ExtIEs} } OPTIONAL, + ... +} + +QosFlowLevelQosParameters-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + {ID id-QosMonitoringRequest CRITICALITY ignore EXTENSION QosMonitoringRequest PRESENCE optional}| + {ID id-QosMonitoringReportingFrequency CRITICALITY ignore EXTENSION QosMonitoringReportingFrequency PRESENCE optional}, + ... +} + + +QosMonitoringRequest ::= ENUMERATED {ul, dl, both, ..., stop} + +QosMonitoringReportingFrequency ::= INTEGER (1..1800, ...) + +QoSFlowList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowIdentifier + +QosFlowListWithCause ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowWithCauseItem + +QosFlowWithCauseItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {QosFlowWithCauseItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowWithCauseItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +QosFlowModifyConfirmList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowModifyConfirmItem + +QosFlowModifyConfirmItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + iE-Extensions ProtocolExtensionContainer { {QosFlowModifyConfirmItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowModifyConfirmItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +QosFlowNotifyList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowNotifyItem + +QosFlowNotifyItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + notificationCause NotificationCause, + iE-Extensions ProtocolExtensionContainer { {QosFlowNotifyItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowNotifyItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-CurrentQoSParaSetIndex CRITICALITY ignore EXTENSION AlternativeQoSParaSetNotifyIndex PRESENCE optional }, + ... +} +QosFlowParametersList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowParametersItem + +QosFlowParametersItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + alternativeQoSParaSetList AlternativeQoSParaSetList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QosFlowParametersItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowParametersItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-CNPacketDelayBudgetDL CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }| + { ID id-CNPacketDelayBudgetUL CRITICALITY ignore EXTENSION ExtendedPacketDelayBudget PRESENCE optional }| + { ID id-BurstArrivalTimeDownlink CRITICALITY ignore EXTENSION BurstArrivalTime PRESENCE optional }, + ... +} + +QosFlowPerTNLInformation ::= SEQUENCE { + uPTransportLayerInformation UPTransportLayerInformation, + associatedQosFlowList AssociatedQosFlowList, + iE-Extensions ProtocolExtensionContainer { { QosFlowPerTNLInformation-ExtIEs} } OPTIONAL, + ... +} + +QosFlowPerTNLInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +QosFlowPerTNLInformationList ::= SEQUENCE (SIZE(1..maxnoofMultiConnectivityMinusOne)) OF QosFlowPerTNLInformationItem + +QosFlowPerTNLInformationItem ::= SEQUENCE { + qosFlowPerTNLInformation QosFlowPerTNLInformation, + iE-Extensions ProtocolExtensionContainer { { QosFlowPerTNLInformationItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowPerTNLInformationItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +QosFlowSetupRequestList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowSetupRequestItem + +QosFlowSetupRequestItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + qosFlowLevelQosParameters QosFlowLevelQosParameters, + e-RAB-ID E-RAB-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QosFlowSetupRequestItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowSetupRequestItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + {ID id-TSCTrafficCharacteristics CRITICALITY ignore EXTENSION TSCTrafficCharacteristics PRESENCE optional }| + {ID id-RedundantQosFlowIndicator CRITICALITY ignore EXTENSION RedundantQosFlowIndicator PRESENCE optional }, + ... +} + +QosFlowListWithDataForwarding ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowItemWithDataForwarding + +QosFlowItemWithDataForwarding ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + dataForwardingAccepted DataForwardingAccepted OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {QosFlowItemWithDataForwarding-ExtIEs} } OPTIONAL, + ... +} + +QosFlowItemWithDataForwarding-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-CurrentQoSParaSetIndex CRITICALITY ignore EXTENSION AlternativeQoSParaSetIndex PRESENCE optional }, + ... +} + +QosFlowToBeForwardedList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QosFlowToBeForwardedItem + +QosFlowToBeForwardedItem ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + iE-Extensions ProtocolExtensionContainer { {QosFlowToBeForwardedItem-ExtIEs} } OPTIONAL, + ... +} + +QosFlowToBeForwardedItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +QoSFlowsUsageReportList ::= SEQUENCE (SIZE(1..maxnoofQosFlows)) OF QoSFlowsUsageReport-Item + +QoSFlowsUsageReport-Item ::= SEQUENCE { + qosFlowIdentifier QosFlowIdentifier, + rATType ENUMERATED {nr, eutra, ..., nr-unlicensed, e-utra-unlicensed}, + qoSFlowsTimedReportList VolumeTimedReportList, + iE-Extensions ProtocolExtensionContainer { {QoSFlowsUsageReport-Item-ExtIEs} } OPTIONAL, + ... +} + +QoSFlowsUsageReport-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- R + +Range ::= ENUMERATED {m50, m80, m180, m200, m350, m400, m500, m700, m1000, ...} + +RANNodeName ::= PrintableString (SIZE(1..150, ...)) + +RANNodeNameVisibleString ::= VisibleString (SIZE(1..150, ...)) + +RANNodeNameUTF8String ::= UTF8String (SIZE(1..150, ...)) + +RANPagingPriority ::= INTEGER (1..256) + +RANStatusTransfer-TransparentContainer ::= SEQUENCE { + dRBsSubjectToStatusTransferList DRBsSubjectToStatusTransferList, + iE-Extensions ProtocolExtensionContainer { {RANStatusTransfer-TransparentContainer-ExtIEs} } OPTIONAL, + ... +} + +RANStatusTransfer-TransparentContainer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +RAN-UE-NGAP-ID ::= INTEGER (0..4294967295) + +RAT-Information ::= ENUMERATED { + unlicensed, + nb-IoT, + ..., + nR-LEO, + nR-MEO, + nR-GEO, + nR-OTHERSAT +} + +RATRestrictions ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF RATRestrictions-Item + +RATRestrictions-Item ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + rATRestrictionInformation RATRestrictionInformation, + iE-Extensions ProtocolExtensionContainer { {RATRestrictions-Item-ExtIEs} } OPTIONAL, + ... +} + +RATRestrictions-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-ExtendedRATRestrictionInformation CRITICALITY ignore EXTENSION ExtendedRATRestrictionInformation PRESENCE optional }, + ... +} + +RATRestrictionInformation ::= BIT STRING (SIZE(8, ...)) + +RecommendedCellsForPaging ::= SEQUENCE { + recommendedCellList RecommendedCellList, + iE-Extensions ProtocolExtensionContainer { {RecommendedCellsForPaging-ExtIEs} } OPTIONAL, + ... +} + +RecommendedCellsForPaging-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +RecommendedCellList ::= SEQUENCE (SIZE(1..maxnoofRecommendedCells)) OF RecommendedCellItem + +RecommendedCellItem ::= SEQUENCE { + nGRAN-CGI NGRAN-CGI, + timeStayedInCell INTEGER (0..4095) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {RecommendedCellItem-ExtIEs} } OPTIONAL, + ... +} + +RecommendedCellItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +RecommendedRANNodesForPaging ::= SEQUENCE { + recommendedRANNodeList RecommendedRANNodeList, + iE-Extensions ProtocolExtensionContainer { {RecommendedRANNodesForPaging-ExtIEs} } OPTIONAL, + ... +} + +RecommendedRANNodesForPaging-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +RecommendedRANNodeList::= SEQUENCE (SIZE(1..maxnoofRecommendedRANNodes)) OF RecommendedRANNodeItem + +RecommendedRANNodeItem ::= SEQUENCE { + aMFPagingTarget AMFPagingTarget, + iE-Extensions ProtocolExtensionContainer { {RecommendedRANNodeItem-ExtIEs} } OPTIONAL, + ... +} + +RecommendedRANNodeItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +RedCapIndication ::= ENUMERATED { + redcap, + ... +} + +RedirectionVoiceFallback ::= ENUMERATED { + possible, + not-possible, + ... +} + +RedundantPDUSessionInformation ::= SEQUENCE { + rSN RSN, + iE-Extensions ProtocolExtensionContainer { {RedundantPDUSessionInformation-ExtIEs} } OPTIONAL, + ... +} + +RedundantPDUSessionInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-PDUSessionPairID CRITICALITY ignore EXTENSION PDUSessionPairID PRESENCE optional }, + ... +} + +RedundantQosFlowIndicator ::= ENUMERATED {true, false} + +ReflectiveQosAttribute ::= ENUMERATED { + subject-to, + ... +} + +RelativeAMFCapacity ::= INTEGER (0..255) + +ReportArea ::= ENUMERATED { + cell, + ... +} + +RepetitionPeriod ::= INTEGER (0..131071) + +ResetAll ::= ENUMERATED { + reset-all, + ... +} + +ReportAmountMDT ::= ENUMERATED { + r1, r2, r4, r8, r16, r32, r64, rinfinity +} + +ReportIntervalMDT ::= ENUMERATED { + ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60 +} + +ExtendedReportIntervalMDT ::= ENUMERATED { + ms20480, ms40960, ... +} + +ResetType ::= CHOICE { + nG-Interface ResetAll, + partOfNG-Interface UE-associatedLogicalNG-connectionList, + choice-Extensions ProtocolIE-SingleContainer { {ResetType-ExtIEs} } +} + +ResetType-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +RGLevelWirelineAccessCharacteristics ::= OCTET STRING + +RNC-ID ::= INTEGER (0..4095) + +RoutingID ::= OCTET STRING + +RRCContainer ::= OCTET STRING + +RRCEstablishmentCause ::= ENUMERATED { + emergency, + highPriorityAccess, + mt-Access, + mo-Signalling, + mo-Data, + mo-VoiceCall, + mo-VideoCall, + mo-SMS, + mps-PriorityAccess, + mcs-PriorityAccess, + ..., + notAvailable, + mo-ExceptionData +} + +RRCInactiveTransitionReportRequest ::= ENUMERATED { + subsequent-state-transition-report, + single-rrc-connected-state-report, + cancel-report, + ... +} + +RRCState ::= ENUMERATED { + inactive, + connected, + ... +} + +RSN ::= ENUMERATED {v1, v2, ...} + +RIMInformationTransfer ::= SEQUENCE { + targetRANNodeID-RIM TargetRANNodeID-RIM, + sourceRANNodeID SourceRANNodeID, + rIMInformation RIMInformation, + iE-Extensions ProtocolExtensionContainer { {RIMInformationTransfer-ExtIEs} } OPTIONAL, + ... +} + +RIMInformationTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +RIMInformation ::= SEQUENCE { + targetgNBSetID GNBSetID, + rIM-RSDetection ENUMERATED {rs-detected, rs-disappeared, ...}, + iE-Extensions ProtocolExtensionContainer { {RIMInformation-ExtIEs} } OPTIONAL, + ... +} + +RIMInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +GNBSetID ::= BIT STRING (SIZE(22)) + +-- S + +ScheduledCommunicationTime ::= SEQUENCE { + dayofWeek BIT STRING (SIZE(7)) OPTIONAL, + timeofDayStart INTEGER (0..86399, ...) OPTIONAL, + timeofDayEnd INTEGER (0..86399, ...) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { ScheduledCommunicationTime-ExtIEs}} OPTIONAL, + ... +} + +ScheduledCommunicationTime-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SCTP-TLAs ::= SEQUENCE (SIZE(1..maxnoofXnTLAs)) OF TransportLayerAddress + +SD ::= OCTET STRING (SIZE(3)) + +SecondaryRATUsageInformation ::= SEQUENCE { + pDUSessionUsageReport PDUSessionUsageReport OPTIONAL, + qosFlowsUsageReportList QoSFlowsUsageReportList OPTIONAL, + iE-Extension ProtocolExtensionContainer { {SecondaryRATUsageInformation-ExtIEs} } OPTIONAL, + ... +} + +SecondaryRATUsageInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SecondaryRATDataUsageReportTransfer ::= SEQUENCE { + secondaryRATUsageInformation SecondaryRATUsageInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SecondaryRATDataUsageReportTransfer-ExtIEs} } OPTIONAL, + ... +} + +SecondaryRATDataUsageReportTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SecurityContext ::= SEQUENCE { + nextHopChainingCount NextHopChainingCount, + nextHopNH SecurityKey, + iE-Extensions ProtocolExtensionContainer { {SecurityContext-ExtIEs} } OPTIONAL, + ... +} + +SecurityContext-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SecurityIndication ::= SEQUENCE { + integrityProtectionIndication IntegrityProtectionIndication, + confidentialityProtectionIndication ConfidentialityProtectionIndication, + maximumIntegrityProtectedDataRate-UL MaximumIntegrityProtectedDataRate OPTIONAL, +-- The above IE shall be present if integrity protection is required or preferred + iE-Extensions ProtocolExtensionContainer { {SecurityIndication-ExtIEs} } OPTIONAL, + ... +} + +SecurityIndication-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-MaximumIntegrityProtectedDataRate-DL CRITICALITY ignore EXTENSION MaximumIntegrityProtectedDataRate PRESENCE optional }, + ... +} + +SecurityKey ::= BIT STRING (SIZE(256)) + +SecurityResult ::= SEQUENCE { + integrityProtectionResult IntegrityProtectionResult, + confidentialityProtectionResult ConfidentialityProtectionResult, + iE-Extensions ProtocolExtensionContainer { {SecurityResult-ExtIEs} } OPTIONAL, + ... +} + +SecurityResult-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SensorMeasurementConfiguration ::= SEQUENCE { + sensorMeasConfig SensorMeasConfig, + sensorMeasConfigNameList SensorMeasConfigNameList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SensorMeasurementConfiguration-ExtIEs} } OPTIONAL, + ... +} + +SensorMeasurementConfiguration-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SensorMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofSensorName)) OF SensorMeasConfigNameItem + +SensorMeasConfigNameItem ::= SEQUENCE { + sensorNameConfig SensorNameConfig, + iE-Extensions ProtocolExtensionContainer { { SensorMeasConfigNameItem-ExtIEs } } OPTIONAL, + ... +} + +SensorMeasConfigNameItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SensorMeasConfig::= ENUMERATED {setup,...} + +SensorNameConfig ::= CHOICE { + uncompensatedBarometricConfig ENUMERATED {true, ...}, + ueSpeedConfig ENUMERATED {true, ...}, + ueOrientationConfig ENUMERATED {true, ...}, + choice-Extensions ProtocolIE-SingleContainer { {SensorNameConfig-ExtIEs} } +} + +SensorNameConfig-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +SerialNumber ::= BIT STRING (SIZE(16)) + +ServedGUAMIList ::= SEQUENCE (SIZE(1..maxnoofServedGUAMIs)) OF ServedGUAMIItem + +ServedGUAMIItem ::= SEQUENCE { + gUAMI GUAMI, + backupAMFName AMFName OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedGUAMIItem-ExtIEs} } OPTIONAL, + ... +} + +ServedGUAMIItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + {ID id-GUAMIType CRITICALITY ignore EXTENSION GUAMIType PRESENCE optional }, + ... +} + +ServiceAreaInformation ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ServiceAreaInformation-Item + +ServiceAreaInformation-Item ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + allowedTACs AllowedTACs OPTIONAL, + notAllowedTACs NotAllowedTACs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServiceAreaInformation-Item-ExtIEs} } OPTIONAL, + ... +} + +ServiceAreaInformation-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ServiceType ::= ENUMERATED {streaming, mTSI, vR, ...} + +SgNB-UE-X2AP-ID ::= INTEGER (0..4294967295) + +SharedNGU-MulticastTNLInformation ::= SEQUENCE { + iP-MulticastAddress TransportLayerAddress, + iP-SourceAddress TransportLayerAddress, + gTP-TEID GTP-TEID, + iE-Extensions ProtocolExtensionContainer { {SharedNGU-MulticastTNLInformation-ExtIEs} } OPTIONAL, + ... +} + +SharedNGU-MulticastTNLInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SliceOverloadList ::= SEQUENCE (SIZE(1..maxnoofSliceItems)) OF SliceOverloadItem + +SliceOverloadItem ::= SEQUENCE { + s-NSSAI S-NSSAI, + iE-Extensions ProtocolExtensionContainer { {SliceOverloadItem-ExtIEs} } OPTIONAL, + ... +} + +SliceOverloadItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SliceSupportList ::= SEQUENCE (SIZE(1..maxnoofSliceItems)) OF SliceSupportItem + +SliceSupportItem ::= SEQUENCE { + s-NSSAI S-NSSAI, + iE-Extensions ProtocolExtensionContainer { {SliceSupportItem-ExtIEs} } OPTIONAL, + ... +} + +SliceSupportItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SliceSupportListQMC ::= SEQUENCE (SIZE(1..maxnoofSNSSAIforQMC)) OF SliceSupportQMC-Item + +SliceSupportQMC-Item ::= SEQUENCE { + s-NSSAI S-NSSAI, + iE-Extensions ProtocolExtensionContainer { {SliceSupportQMC-Item-ExtIEs} } OPTIONAL, + ... +} + +SliceSupportQMC-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SNPN-MobilityInformation ::= SEQUENCE { + serving-NID NID, + iE-Extensions ProtocolExtensionContainer { {SNPN-MobilityInformation-ExtIEs} } OPTIONAL, + ... +} + +SNPN-MobilityInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +S-NSSAI ::= SEQUENCE { + sST SST, + sD SD OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { S-NSSAI-ExtIEs} } OPTIONAL, + ... +} + +S-NSSAI-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SONConfigurationTransfer ::= SEQUENCE { + targetRANNodeID-SON TargetRANNodeID-SON, + sourceRANNodeID SourceRANNodeID, + sONInformation SONInformation, + xnTNLConfigurationInfo XnTNLConfigurationInfo OPTIONAL, +-- The above IE shall be present if the SON Information IE contains the SON Information Request IE set to “Xn TNL Configuration Info” + iE-Extensions ProtocolExtensionContainer { {SONConfigurationTransfer-ExtIEs} } OPTIONAL, + ... +} + +SONConfigurationTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SONInformation ::= CHOICE { + sONInformationRequest SONInformationRequest, + sONInformationReply SONInformationReply, + choice-Extensions ProtocolIE-SingleContainer { {SONInformation-ExtIEs} } +} + +SONInformation-ExtIEs NGAP-PROTOCOL-IES ::= { + { ID id-SONInformationReport CRITICALITY ignore TYPE SONInformationReport PRESENCE mandatory }, + ... +} + +SONInformationReply ::= SEQUENCE { + xnTNLConfigurationInfo XnTNLConfigurationInfo OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SONInformationReply-ExtIEs} } OPTIONAL, + ... +} + +SONInformationReply-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SONInformationReport::= CHOICE { + failureIndicationInformation FailureIndication, + hOReportInformation HOReport, + choice-Extensions ProtocolIE-SingleContainer { { SONInformationReport-ExtIEs} } +} + +SONInformationReport-ExtIEs NGAP-PROTOCOL-IES ::= { + { ID id-SuccessfulHandoverReportList CRITICALITY ignore TYPE SuccessfulHandoverReportList PRESENCE mandatory }, + ... +} + +-- -------------------------------------------------------------------- +-- SON Information Report +-- -------------------------------------------------------------------- + +SuccessfulHandoverReportList ::= SEQUENCE (SIZE(1..maxnoofSuccessfulHOReports)) OF SuccessfulHandoverReport-Item + +SuccessfulHandoverReport-Item ::= SEQUENCE { + successfulHOReportContainer OCTET STRING, + iE-Extensions ProtocolExtensionContainer { { SuccessfulHandoverReport-Item-ExtIEs} } OPTIONAL, + ... +} + +SuccessfulHandoverReport-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SONInformationRequest ::= ENUMERATED { + xn-TNL-configuration-info, + ... +} + +SourceNGRANNode-ToTargetNGRANNode-TransparentContainer ::= SEQUENCE { + rRCContainer RRCContainer, + pDUSessionResourceInformationList PDUSessionResourceInformationList OPTIONAL, + e-RABInformationList E-RABInformationList OPTIONAL, + targetCell-ID NGRAN-CGI, + indexToRFSP IndexToRFSP OPTIONAL, + uEHistoryInformation UEHistoryInformation, + iE-Extensions ProtocolExtensionContainer { {SourceNGRANNode-ToTargetNGRANNode-TransparentContainer-ExtIEs} } OPTIONAL, + ... +} + +SourceNGRANNode-ToTargetNGRANNode-TransparentContainer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore EXTENSION SgNB-UE-X2AP-ID PRESENCE optional }| + { ID id-UEHistoryInformationFromTheUE CRITICALITY ignore EXTENSION UEHistoryInformationFromTheUE PRESENCE optional }| + { ID id-SourceNodeID CRITICALITY ignore EXTENSION SourceNodeID PRESENCE optional }| + { ID id-UEContextReferenceAtSource CRITICALITY ignore EXTENSION RAN-UE-NGAP-ID PRESENCE optional }| + { ID id-MBS-ActiveSessionInformation-SourcetoTargetList CRITICALITY ignore EXTENSION MBS-ActiveSessionInformation-SourcetoTargetList PRESENCE optional }| + { ID id-QMCConfigInfo CRITICALITY ignore EXTENSION QMCConfigInfo PRESENCE optional }| + { ID id-NGAPIESupportInformationRequestList CRITICALITY ignore EXTENSION NGAPIESupportInformationRequestList PRESENCE optional }, + ... +} + +SourceNodeID ::= CHOICE { + sourceengNB-ID GlobalGNB-ID, + choice-Extensions ProtocolIE-SingleContainer { { SourceNodeID-ExtIEs} } +} + +SourceNodeID-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +SourceOfUEActivityBehaviourInformation ::= ENUMERATED { + subscription-information, + statistics, + ... +} + +SourceRANNodeID ::= SEQUENCE { + globalRANNodeID GlobalRANNodeID, + selectedTAI TAI, + iE-Extensions ProtocolExtensionContainer { {SourceRANNodeID-ExtIEs} } OPTIONAL, + ... +} + +SourceRANNodeID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +SourceToTarget-TransparentContainer ::= OCTET STRING +-- This IE includes a transparent container from the source RAN node to the target RAN node. +-- The octets of the OCTET STRING are encoded according to the specifications of the target system. + +SourceToTarget-AMFInformationReroute ::= SEQUENCE { + configuredNSSAI ConfiguredNSSAI OPTIONAL, + rejectedNSSAIinPLMN RejectedNSSAIinPLMN OPTIONAL, + rejectedNSSAIinTA RejectedNSSAIinTA OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SourceToTarget-AMFInformationReroute-ExtIEs} } OPTIONAL, + ... +} + +SourceToTarget-AMFInformationReroute-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- This IE includes information from the source Core node to the target Core node for reroute information provide by NSSF. +-- The octets of the OCTET STRING are encoded according to the specifications of the Core network. + +SRVCCOperationPossible ::= ENUMERATED { + possible, + notPossible, + ... +} + +ConfiguredNSSAI ::= OCTET STRING (SIZE(128)) + +RejectedNSSAIinPLMN ::= OCTET STRING (SIZE(32)) + +RejectedNSSAIinTA ::= OCTET STRING (SIZE(32)) + +SST ::= OCTET STRING (SIZE(1)) + +SupportedTAList ::= SEQUENCE (SIZE(1..maxnoofTACs)) OF SupportedTAItem + +SupportedTAItem ::= SEQUENCE { + tAC TAC, + broadcastPLMNList BroadcastPLMNList, + iE-Extensions ProtocolExtensionContainer { {SupportedTAItem-ExtIEs} } OPTIONAL, + ... +} + +SupportedTAItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + {ID id-ConfiguredTACIndication CRITICALITY ignore EXTENSION ConfiguredTACIndication PRESENCE optional }| + {ID id-RAT-Information CRITICALITY reject EXTENSION RAT-Information PRESENCE optional }, + ... +} + +SuspendIndicator ::= ENUMERATED { + true, + ... +} + +Suspend-Request-Indication ::= ENUMERATED { + suspend-requested, + ... +} + +Suspend-Response-Indication ::= ENUMERATED { + suspend-indicated, + ... +} + +SurvivalTime ::= INTEGER (0..1920000, ...) + + +-- T + +TAC ::= OCTET STRING (SIZE(3)) + +TACListInNRNTN ::= SEQUENCE (SIZE(1..maxnoofTACsinNTN)) OF TAC + +TAI ::= SEQUENCE { + pLMNIdentity PLMNIdentity, + tAC TAC, + iE-Extensions ProtocolExtensionContainer { {TAI-ExtIEs} } OPTIONAL, + ... +} + +TAI-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAIBroadcastEUTRA ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAIBroadcastEUTRA-Item + +TAIBroadcastEUTRA-Item ::= SEQUENCE { + tAI TAI, + completedCellsInTAI-EUTRA CompletedCellsInTAI-EUTRA, + iE-Extensions ProtocolExtensionContainer { {TAIBroadcastEUTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +TAIBroadcastEUTRA-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAIBroadcastNR ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAIBroadcastNR-Item + +TAIBroadcastNR-Item ::= SEQUENCE { + tAI TAI, + completedCellsInTAI-NR CompletedCellsInTAI-NR, + iE-Extensions ProtocolExtensionContainer { {TAIBroadcastNR-Item-ExtIEs} } OPTIONAL, + ... +} + +TAIBroadcastNR-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAICancelledEUTRA ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAICancelledEUTRA-Item + +TAICancelledEUTRA-Item ::= SEQUENCE { + tAI TAI, + cancelledCellsInTAI-EUTRA CancelledCellsInTAI-EUTRA, + iE-Extensions ProtocolExtensionContainer { {TAICancelledEUTRA-Item-ExtIEs} } OPTIONAL, + ... +} + +TAICancelledEUTRA-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAICancelledNR ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAICancelledNR-Item + +TAICancelledNR-Item ::= SEQUENCE { + tAI TAI, + cancelledCellsInTAI-NR CancelledCellsInTAI-NR, + iE-Extensions ProtocolExtensionContainer { {TAICancelledNR-Item-ExtIEs} } OPTIONAL, + ... +} + +TAICancelledNR-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAIListForInactive ::= SEQUENCE (SIZE(1..maxnoofTAIforInactive)) OF TAIListForInactiveItem + +TAIListForInactiveItem ::= SEQUENCE { + tAI TAI, + iE-Extensions ProtocolExtensionContainer { {TAIListForInactiveItem-ExtIEs} } OPTIONAL, + ... +} + +TAIListForInactiveItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAIListForPaging ::= SEQUENCE (SIZE(1..maxnoofTAIforPaging)) OF TAIListForPagingItem + +TAIListForPagingItem ::= SEQUENCE { + tAI TAI, + iE-Extensions ProtocolExtensionContainer { {TAIListForPagingItem-ExtIEs} } OPTIONAL, + ... +} + +TAIListForPagingItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAIListForRestart ::= SEQUENCE (SIZE(1..maxnoofTAIforRestart)) OF TAI + +TAIListForWarning ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAI + +TAINSAGSupportList ::= SEQUENCE (SIZE(1..maxnoofNSAGs)) OF TAINSAGSupportItem + +TAINSAGSupportItem ::= SEQUENCE { + nSAG-ID NSAG-ID, + nSAGSliceSupportList ExtendedSliceSupportList, + iE-Extensions ProtocolExtensionContainer { {TAINSAGSupportItem-ExtIEs} } OPTIONAL, + ... +} + +TAINSAGSupportItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TargeteNB-ID ::= SEQUENCE { + globalENB-ID GlobalNgENB-ID, + selected-EPS-TAI EPS-TAI, + iE-Extensions ProtocolExtensionContainer { {TargeteNB-ID-ExtIEs} } OPTIONAL, + ... +} + +TargeteNB-ID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TargetHomeENB-ID ::= SEQUENCE { + pLMNidentity PLMNIdentity, + homeENB-ID BIT STRING (SIZE(28)), + selected-EPS-TAI EPS-TAI, + iE-Extensions ProtocolExtensionContainer { {TargetHomeENB-ID-ExtIEs} } OPTIONAL, + ... +} + +TargetHomeENB-ID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TargetID ::= CHOICE { + targetRANNodeID TargetRANNodeID, + targeteNB-ID TargeteNB-ID, + choice-Extensions ProtocolIE-SingleContainer { {TargetID-ExtIEs} } +} + +TargetID-ExtIEs NGAP-PROTOCOL-IES ::= { + {ID id-TargetRNC-ID CRITICALITY reject TYPE TargetRNC-ID PRESENCE mandatory }| + {ID id-TargetHomeENB-ID CRITICALITY reject TYPE TargetHomeENB-ID PRESENCE mandatory }, + ... +} + +TargetNGRANNode-ToSourceNGRANNode-TransparentContainer ::= SEQUENCE { + rRCContainer RRCContainer, + iE-Extensions ProtocolExtensionContainer { {TargetNGRANNode-ToSourceNGRANNode-TransparentContainer-ExtIEs} } OPTIONAL, + ... +} + +TargetNGRANNode-ToSourceNGRANNode-TransparentContainer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-DAPSResponseInfoList CRITICALITY ignore EXTENSION DAPSResponseInfoList PRESENCE optional }| + { ID id-DirectForwardingPathAvailability CRITICALITY ignore EXTENSION DirectForwardingPathAvailability PRESENCE optional }| + { ID id-MBS-ActiveSessionInformation-TargettoSourceList CRITICALITY ignore EXTENSION MBS-ActiveSessionInformation-TargettoSourceList PRESENCE optional }| + { ID id-NGAPIESupportInformationResponseList CRITICALITY ignore EXTENSION NGAPIESupportInformationResponseList PRESENCE optional }, + ... +} + +TargetNGRANNode-ToSourceNGRANNode-FailureTransparentContainer ::= SEQUENCE { + cell-CAGInformation Cell-CAGInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {TargetNGRANNode-ToSourceNGRANNode-FailureTransparentContainer-ExtIEs} } OPTIONAL, + ... +} + +TargetNGRANNode-ToSourceNGRANNode-FailureTransparentContainer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-NGAPIESupportInformationResponseList CRITICALITY ignore EXTENSION NGAPIESupportInformationResponseList PRESENCE optional }, + ... +} + +TargetNSSAI ::= SEQUENCE (SIZE(1..maxnoofTargetS-NSSAIs)) OF TargetNSSAI-Item + +TargetNSSAI-Item ::= SEQUENCE { + s-NSSAI S-NSSAI, + iE-Extensions ProtocolExtensionContainer { {TargetNSSAI-Item-ExtIEs} } OPTIONAL, + ... +} + +TargetNSSAI-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TargetNSSAIInformation ::= SEQUENCE { + targetNSSAI TargetNSSAI, + indexToRFSP IndexToRFSP, + iE-Extensions ProtocolExtensionContainer { {TargetNSSAIInformation-Item-ExtIEs} } OPTIONAL, + ... +} + +TargetNSSAIInformation-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TargetRANNodeID ::= SEQUENCE { + globalRANNodeID GlobalRANNodeID, + selectedTAI TAI, + iE-Extensions ProtocolExtensionContainer { {TargetRANNodeID-ExtIEs} } OPTIONAL, + ... +} + +TargetRANNodeID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TargetRANNodeID-RIM ::= SEQUENCE { + globalRANNodeID GlobalRANNodeID, + selectedTAI TAI, + iE-Extensions ProtocolExtensionContainer { {TargetRANNodeID-RIM-ExtIEs} } OPTIONAL, + ... +} + +TargetRANNodeID-RIM-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TargetRANNodeID-SON ::= SEQUENCE { + globalRANNodeID GlobalRANNodeID, + selectedTAI TAI, + iE-Extensions ProtocolExtensionContainer { {TargetRANNodeID-SON-ExtIEs} } OPTIONAL, + ... +} + +TargetRANNodeID-SON-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + {ID id-NR-CGI CRITICALITY ignore EXTENSION NR-CGI PRESENCE optional }, + ... +} + +TargetRNC-ID ::= SEQUENCE { + lAI LAI, + rNC-ID RNC-ID, + extendedRNC-ID ExtendedRNC-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {TargetRNC-ID-ExtIEs} } OPTIONAL, + ... +} + +TargetRNC-ID-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TargetToSource-TransparentContainer ::= OCTET STRING +-- This IE includes a transparent container from the target RAN node to the source RAN node. +-- The octets of the OCTET STRING are encoded according to the specifications of the target system. + +TargettoSource-Failure-TransparentContainer ::= OCTET STRING +-- This IE includes a transparent container from the target RAN node to the source RAN node. +-- The octets of the OCTET STRING are encoded according to the specifications of the target system (if applicable). + +TimerApproachForGUAMIRemoval ::= ENUMERATED { + apply-timer, + ... +} + +TimeStamp ::= OCTET STRING (SIZE(4)) + +TimeSyncAssistanceInfo ::= SEQUENCE { + timeDistributionIndication ENUMERATED {enabled, disabled, ...}, + uUTimeSyncErrorBudget INTEGER (1..1000000, ...) OPTIONAL, + -- The above IE shall be present if the Time Distribution Indication IE is set to the value “enabled” + iE-Extensions ProtocolExtensionContainer { {TimeSyncAssistanceInfo-ExtIEs} } OPTIONAL, + ... +} + +TimeSyncAssistanceInfo-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...} + +TimeUEStayedInCell ::= INTEGER (0..4095) + +TimeUEStayedInCellEnhancedGranularity ::= INTEGER (0..40950) + +TMGI ::= OCTET STRING (SIZE(6)) + +TNAP-ID ::= OCTET STRING + +TNGF-ID ::= CHOICE { + tNGF-ID BIT STRING (SIZE(32, ...)), + choice-Extensions ProtocolIE-SingleContainer { {TNGF-ID-ExtIEs} } +} + +TNGF-ID-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +TNLAddressWeightFactor ::= INTEGER (0..255) + +TNLAssociationList ::= SEQUENCE (SIZE(1..maxnoofTNLAssociations)) OF TNLAssociationItem + +TNLAssociationItem ::= SEQUENCE { + tNLAssociationAddress CPTransportLayerInformation, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {TNLAssociationItem-ExtIEs} } OPTIONAL, + ... +} + +TNLAssociationItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TNLAssociationUsage ::= ENUMERATED { + ue, + non-ue, + both, + ... +} + +TooearlyIntersystemHO::= SEQUENCE { + sourcecellID EUTRA-CGI, + failurecellID NGRAN-CGI, + uERLFReportContainer UERLFReportContainer OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { TooearlyIntersystemHO-ExtIEs} } OPTIONAL, + ... +} + +TooearlyIntersystemHO-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TraceActivation ::= SEQUENCE { + nGRANTraceID NGRANTraceID, + interfacesToTrace InterfacesToTrace, +traceDepth TraceDepth, +traceCollectionEntityIPAddress TransportLayerAddress, + iE-Extensions ProtocolExtensionContainer { {TraceActivation-ExtIEs} } OPTIONAL, + ... +} + +TraceActivation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-MDTConfiguration CRITICALITY ignore EXTENSION MDT-Configuration PRESENCE optional }| + { ID id-TraceCollectionEntityURI CRITICALITY ignore EXTENSION URI-address PRESENCE optional }, + ... +} + +TraceDepth ::= ENUMERATED { + minimum, + medium, + maximum, + minimumWithoutVendorSpecificExtension, + mediumWithoutVendorSpecificExtension, + maximumWithoutVendorSpecificExtension, + ... +} + +TrafficLoadReductionIndication ::= INTEGER (1..99) + +TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) + +TypeOfError ::= ENUMERATED { + not-understood, + missing, + ... +} + +TAIBasedMDT ::= SEQUENCE { + tAIListforMDT TAIListforMDT, + iE-Extensions ProtocolExtensionContainer { {TAIBasedMDT-ExtIEs} } OPTIONAL, + ... +} + +TAIBasedMDT-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAIListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAI + +TAIBasedQMC ::= SEQUENCE { + tAIListforQMC TAIListforQMC, + iE-Extensions ProtocolExtensionContainer { {TAIBasedQMC-ExtIEs} } OPTIONAL, + ... +} + +TAIBasedQMC-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAIListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAI + +TABasedQMC ::= SEQUENCE { + tAListforQMC TAListforQMC, + iE-Extensions ProtocolExtensionContainer { {TABasedQMC-ExtIEs} } OPTIONAL, + ... +} + +TABasedQMC-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAC + + +TABasedMDT ::= SEQUENCE { + tAListforMDT TAListforMDT, + iE-Extensions ProtocolExtensionContainer { {TABasedMDT-ExtIEs} } OPTIONAL, + ... +} + +TABasedMDT-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +TAListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAC + +Threshold-RSRP ::= INTEGER(0..127) + +Threshold-RSRQ ::= INTEGER(0..127) + +Threshold-SINR ::= INTEGER(0..127) + +TimeToTrigger ::= ENUMERATED {ms0, ms40, ms64, ms80, ms100, ms128, ms160, ms256, ms320, ms480, ms512, ms640, ms1024, ms1280, ms2560, ms5120} + + +TWAP-ID ::= OCTET STRING + +TWIF-ID ::= CHOICE { + tWIF-ID BIT STRING (SIZE(32, ...)), + choice-Extensions ProtocolIE-SingleContainer { {TWIF-ID-ExtIEs} } +} + +TWIF-ID-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +TSCAssistanceInformation ::= SEQUENCE { + periodicity Periodicity, + burstArrivalTime BurstArrivalTime OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {TSCAssistanceInformation-ExtIEs} } OPTIONAL, + ... +} + +TSCAssistanceInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-SurvivalTime CRITICALITY ignore EXTENSION SurvivalTime PRESENCE optional}, + ... +} + +TSCTrafficCharacteristics ::= SEQUENCE { + tSCAssistanceInformationDL TSCAssistanceInformation OPTIONAL, + tSCAssistanceInformationUL TSCAssistanceInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {TSCTrafficCharacteristics-ExtIEs} } OPTIONAL, + ... +} + +TSCTrafficCharacteristics-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- U + +UEAggregateMaximumBitRate ::= SEQUENCE { + uEAggregateMaximumBitRateDL BitRate, + uEAggregateMaximumBitRateUL BitRate, + iE-Extensions ProtocolExtensionContainer { {UEAggregateMaximumBitRate-ExtIEs} } OPTIONAL, + ... +} + +UEAggregateMaximumBitRate-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +UEAppLayerMeasInfoList ::= SEQUENCE (SIZE(1..maxnoofUEAppLayerMeas)) OF UEAppLayerMeasInfoItem + +UEAppLayerMeasInfoItem ::= SEQUENCE { + uEAppLayerMeasConfigInfo UEAppLayerMeasConfigInfo, + iE-Extensions ProtocolExtensionContainer { { UEAppLayerMeasInfoItem-ExtIEs} } OPTIONAL, + ... +} + +UEAppLayerMeasInfoItem-ExtIEs NGAP-PROTOCOL-EXTENSION::= { + ... +} + +UEAppLayerMeasConfigInfo ::= SEQUENCE { + qoEReference QoEReference, + serviceType ServiceType, + areaScopeOfQMC AreaScopeOfQMC OPTIONAL, + measCollEntityIPAddress TransportLayerAddress, + qoEMeasurementStatus ENUMERATED {ongoing,...} OPTIONAL, + containerForAppLayerMeasConfig OCTET STRING (SIZE(1..8000)) OPTIONAL, + measConfigAppLayerID INTEGER (0..15, ...) OPTIONAL, + sliceSupportListQMC SliceSupportListQMC OPTIONAL, + mDT-AlignmentInfo MDT-AlignmentInfo OPTIONAL, + availableRANVisibleQoEMetrics AvailableRANVisibleQoEMetrics OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { UEAppLayerMeasConfigInfo-ExtIEs} } OPTIONAL, + ... +} + +UEAppLayerMeasConfigInfo-ExtIEs NGAP-PROTOCOL-EXTENSION::= { + ... +} + +UE-associatedLogicalNG-connectionList ::= SEQUENCE (SIZE(1..maxnoofNGConnectionsToReset)) OF UE-associatedLogicalNG-connectionItem + +UE-associatedLogicalNG-connectionItem ::= SEQUENCE { + aMF-UE-NGAP-ID AMF-UE-NGAP-ID OPTIONAL, + rAN-UE-NGAP-ID RAN-UE-NGAP-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UE-associatedLogicalNG-connectionItem-ExtIEs} } OPTIONAL, + ... +} + +UE-associatedLogicalNG-connectionItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +UECapabilityInfoRequest ::= ENUMERATED { + requested, + ... +} + +UEContextRequest ::= ENUMERATED {requested, ...} + + +UEContextResumeRequestTransfer ::= SEQUENCE { + qosFlowFailedToResumeList QosFlowListWithCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UEContextResumeRequestTransfer-ExtIEs} } OPTIONAL, + ... +} + +UEContextResumeRequestTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +UEContextResumeResponseTransfer ::= SEQUENCE { + qosFlowFailedToResumeList QosFlowListWithCause OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UEContextResumeResponseTransfer-ExtIEs} } OPTIONAL, + ... +} + +UEContextResumeResponseTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +UEContextSuspendRequestTransfer ::= SEQUENCE { + suspendIndicator SuspendIndicator OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UEContextSuspendRequestTransfer-ExtIEs} } OPTIONAL, + ... +} + +UEContextSuspendRequestTransfer-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +UE-DifferentiationInfo ::= SEQUENCE { + periodicCommunicationIndicator ENUMERATED {periodically, ondemand, ... } OPTIONAL, + periodicTime INTEGER (1..3600, ...) OPTIONAL, + scheduledCommunicationTime ScheduledCommunicationTime OPTIONAL, + stationaryIndication ENUMERATED {stationary, mobile, ...} OPTIONAL, + trafficProfile ENUMERATED {single-packet, dual-packets, multiple-packets, ...} OPTIONAL, + batteryIndication ENUMERATED {battery-powered, battery-powered-not-rechargeable-or-replaceable, not-battery-powered, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { UE-DifferentiationInfo-ExtIEs} } OPTIONAL, + ... +} + +UE-DifferentiationInfo-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +UEHistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCellsinUEHistoryInfo)) OF LastVisitedCellItem + +UEHistoryInformationFromTheUE ::= CHOICE { + nR NRMobilityHistoryReport, + choice-Extensions ProtocolIE-SingleContainer { {UEHistoryInformationFromTheUE-ExtIEs} } +} + +UEHistoryInformationFromTheUE-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +UEIdentityIndexValue ::= CHOICE { + indexLength10 BIT STRING (SIZE(10)), + choice-Extensions ProtocolIE-SingleContainer { {UEIdentityIndexValue-ExtIEs} } +} + +UEIdentityIndexValue-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +UE-NGAP-IDs ::= CHOICE { + uE-NGAP-ID-pair UE-NGAP-ID-pair, + aMF-UE-NGAP-ID AMF-UE-NGAP-ID, + choice-Extensions ProtocolIE-SingleContainer { {UE-NGAP-IDs-ExtIEs} } +} + +UE-NGAP-IDs-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +UE-NGAP-ID-pair ::= SEQUENCE{ + aMF-UE-NGAP-ID AMF-UE-NGAP-ID, + rAN-UE-NGAP-ID RAN-UE-NGAP-ID, + iE-Extensions ProtocolExtensionContainer { {UE-NGAP-ID-pair-ExtIEs} } OPTIONAL, + ... +} + +UE-NGAP-ID-pair-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +UEPagingIdentity ::= CHOICE { + fiveG-S-TMSI FiveG-S-TMSI, + choice-Extensions ProtocolIE-SingleContainer { {UEPagingIdentity-ExtIEs} } + } + +UEPagingIdentity-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +UEPresence ::= ENUMERATED {in, out, unknown, ...} + +UEPresenceInAreaOfInterestList ::= SEQUENCE (SIZE(1..maxnoofAoI)) OF UEPresenceInAreaOfInterestItem + +UEPresenceInAreaOfInterestItem ::= SEQUENCE { + locationReportingReferenceID LocationReportingReferenceID, + uEPresence UEPresence, + iE-Extensions ProtocolExtensionContainer { {UEPresenceInAreaOfInterestItem-ExtIEs} } OPTIONAL, + ... +} + +UEPresenceInAreaOfInterestItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +UERadioCapability ::= OCTET STRING + +UERadioCapabilityForPaging ::= SEQUENCE { + uERadioCapabilityForPagingOfNR UERadioCapabilityForPagingOfNR OPTIONAL, + uERadioCapabilityForPagingOfEUTRA UERadioCapabilityForPagingOfEUTRA OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UERadioCapabilityForPaging-ExtIEs} } OPTIONAL, + ... +} + +UERadioCapabilityForPaging-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-UERadioCapabilityForPagingOfNB-IoT CRITICALITY ignore EXTENSION UERadioCapabilityForPagingOfNB-IoT PRESENCE optional }, + ... +} + +UERadioCapabilityForPagingOfNB-IoT ::= OCTET STRING + +UERadioCapabilityForPagingOfNR ::= OCTET STRING + +UERadioCapabilityForPagingOfEUTRA ::= OCTET STRING + +UERadioCapabilityID ::= OCTET STRING + +UERetentionInformation ::= ENUMERATED { + ues-retained, + ... +} + +UERLFReportContainer ::= CHOICE { + nR NRUERLFReportContainer, + lTE LTEUERLFReportContainer, + choice-Extensions ProtocolIE-SingleContainer { {UERLFReportContainer-ExtIEs} } +} + +UERLFReportContainer-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +UESecurityCapabilities ::= SEQUENCE { + nRencryptionAlgorithms NRencryptionAlgorithms, + nRintegrityProtectionAlgorithms NRintegrityProtectionAlgorithms, + eUTRAencryptionAlgorithms EUTRAencryptionAlgorithms, + eUTRAintegrityProtectionAlgorithms EUTRAintegrityProtectionAlgorithms, + iE-Extensions ProtocolExtensionContainer { {UESecurityCapabilities-ExtIEs} } OPTIONAL, + ... +} + +UESecurityCapabilities-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +UESliceMaximumBitRateList ::= SEQUENCE (SIZE(1..maxnoofAllowedS-NSSAIs)) OF UESliceMaximumBitRateItem + +UESliceMaximumBitRateItem ::= SEQUENCE { + s-NSSAI S-NSSAI, + uESliceMaximumBitRateDL BitRate, + uESliceMaximumBitRateUL BitRate, + iE-Extensions ProtocolExtensionContainer { { UESliceMaximumBitRateItem-ExtIEs} } OPTIONAL, + ... +} + +UESliceMaximumBitRateItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + + +UE-UP-CIoT-Support ::= ENUMERATED {supported, ...} + +UL-CP-SecurityInformation ::= SEQUENCE { + ul-NAS-MAC UL-NAS-MAC, + ul-NAS-Count UL-NAS-Count, + iE-Extensions ProtocolExtensionContainer { { UL-CP-SecurityInformation-ExtIEs} } OPTIONAL, + ... +} + +UL-CP-SecurityInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +UL-NAS-MAC ::= BIT STRING (SIZE (16)) + +UL-NAS-Count ::= BIT STRING (SIZE (5)) + +UL-NGU-UP-TNLModifyList ::= SEQUENCE (SIZE(1..maxnoofMultiConnectivity)) OF UL-NGU-UP-TNLModifyItem + +UL-NGU-UP-TNLModifyItem ::= SEQUENCE { + uL-NGU-UP-TNLInformation UPTransportLayerInformation, + dL-NGU-UP-TNLInformation UPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { {UL-NGU-UP-TNLModifyItem-ExtIEs} } OPTIONAL, + ... +} + +UL-NGU-UP-TNLModifyItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-RedundantUL-NGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional }| + { ID id-RedundantDL-NGU-UP-TNLInformation CRITICALITY ignore EXTENSION UPTransportLayerInformation PRESENCE optional }, + ... +} + +UnavailableGUAMIList ::= SEQUENCE (SIZE(1..maxnoofServedGUAMIs)) OF UnavailableGUAMIItem + +UnavailableGUAMIItem ::= SEQUENCE { + gUAMI GUAMI, + timerApproachForGUAMIRemoval TimerApproachForGUAMIRemoval OPTIONAL, + backupAMFName AMFName OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UnavailableGUAMIItem-ExtIEs} } OPTIONAL, + ... +} + +UnavailableGUAMIItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +ULForwarding ::= ENUMERATED { + ul-forwarding-proposed, + ... +} + +UpdateFeedback ::= BIT STRING (SIZE(8, ...)) + +UPTransportLayerInformation ::= CHOICE { + gTPTunnel GTPTunnel, + choice-Extensions ProtocolIE-SingleContainer { {UPTransportLayerInformation-ExtIEs} } +} + +UPTransportLayerInformation-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +UPTransportLayerInformationList ::= SEQUENCE (SIZE(1..maxnoofMultiConnectivityMinusOne)) OF UPTransportLayerInformationItem + +UPTransportLayerInformationItem ::= SEQUENCE { + nGU-UP-TNLInformation UPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { {UPTransportLayerInformationItem-ExtIEs} } OPTIONAL, + ... +} + +UPTransportLayerInformationItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-CommonNetworkInstance CRITICALITY ignore EXTENSION CommonNetworkInstance PRESENCE optional }, + ... +} + + +UPTransportLayerInformationPairList ::= SEQUENCE (SIZE(1..maxnoofMultiConnectivityMinusOne)) OF UPTransportLayerInformationPairItem + +UPTransportLayerInformationPairItem ::= SEQUENCE { + uL-NGU-UP-TNLInformation UPTransportLayerInformation, + dL-NGU-UP-TNLInformation UPTransportLayerInformation, + iE-Extensions ProtocolExtensionContainer { {UPTransportLayerInformationPairItem-ExtIEs} } OPTIONAL, + ... +} + +UPTransportLayerInformationPairItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +URI-address ::= VisibleString + +UserLocationInformation ::= CHOICE { + userLocationInformationEUTRA UserLocationInformationEUTRA, + userLocationInformationNR UserLocationInformationNR, + userLocationInformationN3IWF UserLocationInformationN3IWF, + choice-Extensions ProtocolIE-SingleContainer { {UserLocationInformation-ExtIEs} } +} + +UserLocationInformation-ExtIEs NGAP-PROTOCOL-IES ::= { + { ID id-UserLocationInformationTNGF CRITICALITY ignore TYPE UserLocationInformationTNGF PRESENCE mandatory }| + { ID id-UserLocationInformationTWIF CRITICALITY ignore TYPE UserLocationInformationTWIF PRESENCE mandatory }| + { ID id-UserLocationInformationW-AGF CRITICALITY ignore TYPE UserLocationInformationW-AGF PRESENCE mandatory }, + ... +} + +UserLocationInformationEUTRA ::= SEQUENCE { + eUTRA-CGI EUTRA-CGI, + tAI TAI, + timeStamp TimeStamp OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UserLocationInformationEUTRA-ExtIEs} } OPTIONAL, + ... +} + +UserLocationInformationEUTRA-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-PSCellInformation CRITICALITY ignore EXTENSION NGRAN-CGI PRESENCE optional}, + ... +} + +UserLocationInformationN3IWF ::= SEQUENCE { + iPAddress TransportLayerAddress, + portNumber PortNumber, + iE-Extensions ProtocolExtensionContainer { {UserLocationInformationN3IWF-ExtIEs} } OPTIONAL, + ... +} + +UserLocationInformationN3IWF-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-TAI CRITICALITY ignore EXTENSION TAI PRESENCE optional }, + ... +} + +UserLocationInformationTNGF ::= SEQUENCE { + tNAP-ID TNAP-ID, + iPAddress TransportLayerAddress, + portNumber PortNumber OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UserLocationInformationTNGF-ExtIEs} } OPTIONAL, + ... +} + +UserLocationInformationTNGF-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-TAI CRITICALITY ignore EXTENSION TAI PRESENCE optional }, + ... +} + +UserLocationInformationTWIF ::= SEQUENCE { + tWAP-ID TWAP-ID, + iPAddress TransportLayerAddress, + portNumber PortNumber OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UserLocationInformationTWIF-ExtIEs} } OPTIONAL, + ... +} + +UserLocationInformationTWIF-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-TAI CRITICALITY ignore EXTENSION TAI PRESENCE optional }, + ... +} + +UserLocationInformationW-AGF ::= CHOICE { + globalLine-ID GlobalLine-ID, + hFCNode-ID HFCNode-ID, + choice-Extensions ProtocolIE-SingleContainer { { UserLocationInformationW-AGF-ExtIEs} } +} + +UserLocationInformationW-AGF-ExtIEs NGAP-PROTOCOL-IES ::= { + { ID id-GlobalCable-ID CRITICALITY ignore TYPE GlobalCable-ID PRESENCE mandatory }| + { ID id-HFCNode-ID-new CRITICALITY ignore TYPE HFCNode-ID-new PRESENCE mandatory }| + { ID id-GlobalCable-ID-new CRITICALITY ignore TYPE GlobalCable-ID-new PRESENCE mandatory }, + ... +} + +UserLocationInformationNR ::= SEQUENCE { + nR-CGI NR-CGI, + tAI TAI, + timeStamp TimeStamp OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UserLocationInformationNR-ExtIEs} } OPTIONAL, + ... +} + +UserLocationInformationNR-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-PSCellInformation CRITICALITY ignore EXTENSION NGRAN-CGI PRESENCE optional }| + { ID id-NID CRITICALITY reject EXTENSION NID PRESENCE optional }| + { ID id-NRNTNTAIInformation CRITICALITY ignore EXTENSION NRNTNTAIInformation PRESENCE optional }, + ... +} + +UserPlaneSecurityInformation ::= SEQUENCE { + securityResult SecurityResult, + securityIndication SecurityIndication, + iE-Extensions ProtocolExtensionContainer { {UserPlaneSecurityInformation-ExtIEs} } OPTIONAL, + ... +} + +UserPlaneSecurityInformation-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- V + +VolumeTimedReportList ::= SEQUENCE (SIZE(1..maxnoofTimePeriods)) OF VolumeTimedReport-Item + +VolumeTimedReport-Item ::= SEQUENCE { + startTimeStamp OCTET STRING (SIZE(4)), + endTimeStamp OCTET STRING (SIZE(4)), + usageCountUL INTEGER (0..18446744073709551615), + usageCountDL INTEGER (0..18446744073709551615), + iE-Extensions ProtocolExtensionContainer { {VolumeTimedReport-Item-ExtIEs} } OPTIONAL, + ... +} + +VolumeTimedReport-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- W + +W-AGF-ID ::= CHOICE { + w-AGF-ID BIT STRING (SIZE(16, ...)), + choice-Extensions ProtocolIE-SingleContainer { {W-AGF-ID-ExtIEs} } +} + +W-AGF-ID-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +WarningAreaCoordinates ::= OCTET STRING (SIZE(1..1024)) + +WarningAreaList ::= CHOICE { + eUTRA-CGIListForWarning EUTRA-CGIListForWarning, + nR-CGIListForWarning NR-CGIListForWarning, + tAIListForWarning TAIListForWarning, + emergencyAreaIDList EmergencyAreaIDList, + choice-Extensions ProtocolIE-SingleContainer { {WarningAreaList-ExtIEs} } +} + +WarningAreaList-ExtIEs NGAP-PROTOCOL-IES ::= { + ... +} + +WarningMessageContents ::= OCTET STRING (SIZE(1..9600)) + +WarningSecurityInfo ::= OCTET STRING (SIZE(50)) + +WarningType ::= OCTET STRING (SIZE(2)) + +WLANMeasurementConfiguration ::= SEQUENCE { + wlanMeasConfig WLANMeasConfig, + wlanMeasConfigNameList WLANMeasConfigNameList OPTIONAL, + wlan-rssi ENUMERATED {true, ...} OPTIONAL, + wlan-rtt ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { WLANMeasurementConfiguration-ExtIEs } } OPTIONAL, + ... +} + +WLANMeasurementConfiguration-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +WLANMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofWLANName)) OF WLANMeasConfigNameItem + +WLANMeasConfigNameItem ::= SEQUENCE { + wLANName WLANName, + iE-Extensions ProtocolExtensionContainer { { WLANMeasConfigNameItem-ExtIEs } } OPTIONAL, + ... +} + +WLANMeasConfigNameItem-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +WLANMeasConfig::= ENUMERATED {setup,...} + +WLANName ::= OCTET STRING (SIZE (1..32)) + +WUS-Assistance-Information ::= SEQUENCE { + pagingProbabilityInformation PagingProbabilityInformation, + iE-Extensions ProtocolExtensionContainer { { WUS-Assistance-Information-ExtIEs } } OPTIONAL, + ... +} + +WUS-Assistance-Information-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- X + +XnExtTLAs ::= SEQUENCE (SIZE(1..maxnoofXnExtTLAs)) OF XnExtTLA-Item + +XnExtTLA-Item ::= SEQUENCE { + iPsecTLA TransportLayerAddress OPTIONAL, + gTP-TLAs XnGTP-TLAs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {XnExtTLA-Item-ExtIEs} } OPTIONAL, + ... +} + +XnExtTLA-Item-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + { ID id-SCTP-TLAs CRITICALITY ignore EXTENSION SCTP-TLAs PRESENCE optional }, + ... +} + +XnGTP-TLAs ::= SEQUENCE (SIZE(1..maxnoofXnGTP-TLAs)) OF TransportLayerAddress + +XnTLAs ::= SEQUENCE (SIZE(1..maxnoofXnTLAs)) OF TransportLayerAddress + +XnTNLConfigurationInfo ::= SEQUENCE { + xnTransportLayerAddresses XnTLAs, + xnExtendedTransportLayerAddresses XnExtTLAs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {XnTNLConfigurationInfo-ExtIEs} } OPTIONAL, + ... +} + +XnTNLConfigurationInfo-ExtIEs NGAP-PROTOCOL-EXTENSION ::= { + ... +} + +-- Y +-- Z + +END diff --git a/ttcn/LibNGAP/lib/asn1/NGAP_PDU_Contents.asn b/ttcn/LibNGAP/lib/asn1/NGAP_PDU_Contents.asn new file mode 100644 index 0000000000000000000000000000000000000000..453c92393b9463b5fb3734120b0878e3f67de594 --- /dev/null +++ b/ttcn/LibNGAP/lib/asn1/NGAP_PDU_Contents.asn @@ -0,0 +1,3388 @@ +-- 3GPP TS 38.413 V17.5.0 (2023-06) +-- 9.4.4 PDU Definitions +-- ************************************************************** +-- +-- PDU definitions for NGAP. +-- +-- ************************************************************** + +NGAP-PDU-Contents { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-Access (22) modules (3) ngap (1) version1 (1) ngap-PDU-Contents (1) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + + AllowedNSSAI, + AMFName, + AMFSetID, + AMF-TNLAssociationSetupList, + AMF-TNLAssociationToAddList, + AMF-TNLAssociationToRemoveList, + AMF-TNLAssociationToUpdateList, + AMF-UE-NGAP-ID, + AssistanceDataForPaging, + AuthenticatedIndication, + BroadcastCancelledAreaList, + BroadcastCompletedAreaList, + CancelAllWarningMessages, + Cause, + CellIDListForRestart, + CEmodeBrestricted, + CEmodeBSupport-Indicator, + CNAssistedRANTuning, + ConcurrentWarningMessageInd, + CoreNetworkAssistanceInformationForInactive, + CPTransportLayerInformation, + CriticalityDiagnostics, + DataCodingScheme, + DL-CP-SecurityInformation, + DirectForwardingPathAvailability, + EarlyStatusTransfer-TransparentContainer, + EDT-Session, + EmergencyAreaIDListForRestart, + EmergencyFallbackIndicator, + EN-DCSONConfigurationTransfer, + EndIndication, + Enhanced-CoverageRestriction, + EUTRA-CGI, + EUTRA-PagingeDRXInformation, + Extended-AMFName, + Extended-ConnectedTime, + Extended-RANNodeName, + FiveG-ProSeAuthorized, + FiveG-ProSePC5QoSParameters, + FiveG-S-TMSI, + GlobalRANNodeID, + GUAMI, + HandoverFlag, + HandoverType, + IAB-Authorized, + IAB-Supported, + IABNodeIndication, + IMSVoiceSupportIndicator, + IndexToRFSP, + InfoOnRecommendedCellsAndRANNodesForPaging, + IntersystemSONConfigurationTransfer, + LAI, + LTEM-Indication, + LocationReportingRequestType, + LTEUESidelinkAggregateMaximumBitrate, + LTEV2XServicesAuthorized, + MaskedIMEISV, + MBS-AreaSessionID, + MBS-ServiceArea, + MBS-SessionID, + MBS-DistributionReleaseRequestTransfer, + MBS-DistributionSetupRequestTransfer, + MBS-DistributionSetupResponseTransfer, + MBS-DistributionSetupUnsuccessfulTransfer, + MBSSessionReleaseResponseTransfer, + MBSSessionSetupOrModFailureTransfer, + MBSSessionSetupOrModRequestTransfer, + MBSSessionSetupOrModResponseTransfer, + MessageIdentifier, + MDTPLMNList, + MDTPLMNModificationList, + MobilityRestrictionList, + MulticastSessionActivationRequestTransfer, + MulticastSessionDeactivationRequestTransfer, + MulticastSessionUpdateRequestTransfer, + MulticastGroupPagingAreaList, + NAS-PDU, + NASSecurityParametersFromNGRAN, + NB-IoT-DefaultPagingDRX, + NB-IoT-PagingDRX, + NB-IoT-Paging-eDRXInfo, + NB-IoT-UEPriority, + NewSecurityContextInd, + NGRAN-CGI, + NGRAN-TNLAssociationToRemoveList, + NGRANTraceID, + NotifySourceNGRANNode, + NPN-AccessInformation, + NR-CGI, + NR-PagingeDRXInformation, + NRPPa-PDU, + NumberOfBroadcastsRequested, + NRUESidelinkAggregateMaximumBitrate, + NRV2XServicesAuthorized, + OverloadResponse, + OverloadStartNSSAIList, + PagingAssisDataforCEcapabUE, + PagingCause, + PagingDRX, + PagingOrigin, + PagingPriority, + PDUSessionAggregateMaximumBitRate, + PDUSessionResourceAdmittedList, + PDUSessionResourceFailedToModifyListModCfm, + PDUSessionResourceFailedToModifyListModRes, + PDUSessionResourceFailedToResumeListRESReq, + PDUSessionResourceFailedToResumeListRESRes, + PDUSessionResourceFailedToSetupListCxtFail, + PDUSessionResourceFailedToSetupListCxtRes, + PDUSessionResourceFailedToSetupListHOAck, + PDUSessionResourceFailedToSetupListPSReq, + PDUSessionResourceFailedToSetupListSURes, + PDUSessionResourceHandoverList, + PDUSessionResourceListCxtRelCpl, + PDUSessionResourceListCxtRelReq, + PDUSessionResourceListHORqd, + PDUSessionResourceModifyListModCfm, + PDUSessionResourceModifyListModInd, + PDUSessionResourceModifyListModReq, + PDUSessionResourceModifyListModRes, + PDUSessionResourceNotifyList, + PDUSessionResourceReleasedListNot, + PDUSessionResourceReleasedListPSAck, + PDUSessionResourceReleasedListPSFail, + PDUSessionResourceReleasedListRelRes, + PDUSessionResourceResumeListRESReq, + PDUSessionResourceResumeListRESRes, + PDUSessionResourceSecondaryRATUsageList, + PDUSessionResourceSetupListCxtReq, + PDUSessionResourceSetupListCxtRes, + PDUSessionResourceSetupListHOReq, + PDUSessionResourceSetupListSUReq, + PDUSessionResourceSetupListSURes, + PDUSessionResourceSuspendListSUSReq, + PDUSessionResourceSwitchedList, + PDUSessionResourceToBeSwitchedDLList, + PDUSessionResourceToReleaseListHOCmd, + PDUSessionResourceToReleaseListRelCmd, + PEIPSassistanceInformation, + PLMNIdentity, + PLMNSupportList, + PrivacyIndicator, + PWSFailedCellIDList, + PC5QoSParameters, + QMCConfigInfo, + QMCDeactivation, + RANNodeName, + RANPagingPriority, + RANStatusTransfer-TransparentContainer, + RAN-UE-NGAP-ID, + RedCapIndication, + RedirectionVoiceFallback, + RelativeAMFCapacity, + RepetitionPeriod, + ResetType, + RGLevelWirelineAccessCharacteristics, + RoutingID, + RRCEstablishmentCause, + RRCInactiveTransitionReportRequest, + RRCState, + SecurityContext, + SecurityKey, + SerialNumber, + ServedGUAMIList, + SliceSupportList, + S-NSSAI, + SONConfigurationTransfer, + SourceToTarget-TransparentContainer, + SourceToTarget-AMFInformationReroute, + SRVCCOperationPossible, + SupportedTAList, + Suspend-Request-Indication, + Suspend-Response-Indication, + TAI, + TAIListForPaging, + TAIListForRestart, + TargetID, + TargetNSSAIInformation, + TargetToSource-TransparentContainer, + TargettoSource-Failure-TransparentContainer, + TimeSyncAssistanceInfo, + TimeToWait, + TNLAssociationList, + TraceActivation, + TrafficLoadReductionIndication, + TransportLayerAddress, + UEAggregateMaximumBitRate, + UE-associatedLogicalNG-connectionList, + UECapabilityInfoRequest, + UEContextRequest, + UE-DifferentiationInfo, + UE-NGAP-IDs, + UEPagingIdentity, + UEPresenceInAreaOfInterestList, + UERadioCapability, + UERadioCapabilityForPaging, + UERadioCapabilityID, + UERetentionInformation, + UESecurityCapabilities, + UESliceMaximumBitRateList, + UE-UP-CIoT-Support, + UL-CP-SecurityInformation, + UnavailableGUAMIList, + URI-address, + UserLocationInformation, + WarningAreaCoordinates, + WarningAreaList, + WarningMessageContents, + WarningSecurityInfo, + WarningType, + WUS-Assistance-Information, + RIMInformationTransfer + +FROM NGAP-IEs + + PrivateIE-Container{}, + ProtocolExtensionContainer{}, + ProtocolIE-Container{}, + ProtocolIE-ContainerList{}, + ProtocolIE-ContainerPair{}, + ProtocolIE-SingleContainer{}, + NGAP-PRIVATE-IES, + NGAP-PROTOCOL-EXTENSION, + NGAP-PROTOCOL-IES, + NGAP-PROTOCOL-IES-PAIR +FROM NGAP-Containers + + id-AllowedNSSAI, + id-AMFName, + id-AMFOverloadResponse, + id-AMFSetID, + id-AMF-TNLAssociationFailedToSetupList, + id-AMF-TNLAssociationSetupList, + id-AMF-TNLAssociationToAddList, + id-AMF-TNLAssociationToRemoveList, + id-AMF-TNLAssociationToUpdateList, + id-AMFTrafficLoadReductionIndication, + id-AMF-UE-NGAP-ID, + id-AssistanceDataForPaging, + id-AuthenticatedIndication, + id-BroadcastCancelledAreaList, + id-BroadcastCompletedAreaList, + id-CancelAllWarningMessages, + id-Cause, + id-CellIDListForRestart, + id-CEmodeBrestricted, + id-CEmodeBSupport-Indicator, + id-CNAssistedRANTuning, + id-ConcurrentWarningMessageInd, + id-CoreNetworkAssistanceInformationForInactive, + id-CriticalityDiagnostics, + id-DataCodingScheme, + id-DefaultPagingDRX, + id-DirectForwardingPathAvailability, + id-DL-CP-SecurityInformation, + id-EarlyStatusTransfer-TransparentContainer, + id-EDT-Session, + id-EmergencyAreaIDListForRestart, + id-EmergencyFallbackIndicator, + id-ENDC-SONConfigurationTransferDL, + id-ENDC-SONConfigurationTransferUL, + id-EndIndication, + id-Enhanced-CoverageRestriction, + id-EUTRA-CGI, + id-EUTRA-PagingeDRXInformation, + id-Extended-AMFName, + id-Extended-ConnectedTime, + id-Extended-RANNodeName, + id-FiveG-ProSeAuthorized, + id-FiveG-ProSeUEPC5AggregateMaximumBitRate, + id-FiveG-ProSePC5QoSParameters, + id-FiveG-S-TMSI, + id-GlobalRANNodeID, + id-GUAMI, + id-HandoverFlag, + id-HandoverType, + id-IAB-Authorized, + id-IAB-Supported, + id-IABNodeIndication, + id-IMSVoiceSupportIndicator, + id-IndexToRFSP, + id-InfoOnRecommendedCellsAndRANNodesForPaging, + id-IntersystemSONConfigurationTransferDL, + id-IntersystemSONConfigurationTransferUL, + id-LocationReportingRequestType, + id-LTEM-Indication, + id-LTEV2XServicesAuthorized, + id-LTEUESidelinkAggregateMaximumBitrate, + id-ManagementBasedMDTPLMNList, + id-ManagementBasedMDTPLMNModificationList, + id-MaskedIMEISV, + id-MBS-AreaSessionID, + id-MBS-ServiceArea, + id-MBS-SessionID, + id-MBS-DistributionReleaseRequestTransfer, + id-MBS-DistributionSetupRequestTransfer, + id-MBS-DistributionSetupResponseTransfer, + id-MBS-DistributionSetupUnsuccessfulTransfer, + id-MBSSessionModificationFailureTransfer, + id-MBSSessionModificationRequestTransfer, + id-MBSSessionModificationResponseTransfer, + id-MBSSessionReleaseResponseTransfer, + id-MBSSessionSetupFailureTransfer, + id-MBSSessionSetupRequestTransfer, + id-MBSSessionSetupResponseTransfer, + id-MessageIdentifier, + id-MobilityRestrictionList, + id-MulticastSessionActivationRequestTransfer, + id-MulticastSessionDeactivationRequestTransfer, + id-MulticastSessionUpdateRequestTransfer, + id-MulticastGroupPagingAreaList, + id-NAS-PDU, + id-NASC, + id-NASSecurityParametersFromNGRAN, + id-NB-IoT-DefaultPagingDRX, + id-NB-IoT-PagingDRX, + id-NB-IoT-Paging-eDRXInfo, + id-NB-IoT-UEPriority, + id-NewAMF-UE-NGAP-ID, + id-NewGUAMI, + id-NewSecurityContextInd, + id-NGAP-Message, + id-NGRAN-CGI, + id-NGRAN-TNLAssociationToRemoveList, + id-NGRANTraceID, + id-NotifySourceNGRANNode, + id-NPN-AccessInformation, + id-NR-PagingeDRXInformation, + id-NRPPa-PDU, + id-NRV2XServicesAuthorized, + id-NRUESidelinkAggregateMaximumBitrate, + id-NumberOfBroadcastsRequested, + id-OldAMF, + id-OverloadStartNSSAIList, + id-PagingAssisDataforCEcapabUE, + id-PagingCause, + id-PagingDRX, + id-PagingOrigin, + id-PagingPriority, + id-PDUSessionResourceAdmittedList, + id-PDUSessionResourceFailedToModifyListModCfm, + id-PDUSessionResourceFailedToModifyListModRes, + id-PDUSessionResourceFailedToResumeListRESReq, + id-PDUSessionResourceFailedToResumeListRESRes, + id-PDUSessionResourceFailedToSetupListCxtFail, + id-PDUSessionResourceFailedToSetupListCxtRes, + id-PDUSessionResourceFailedToSetupListHOAck, + id-PDUSessionResourceFailedToSetupListPSReq, + id-PDUSessionResourceFailedToSetupListSURes, + id-PDUSessionResourceHandoverList, + id-PDUSessionResourceListCxtRelCpl, + id-PDUSessionResourceListCxtRelReq, + id-PDUSessionResourceListHORqd, + id-PDUSessionResourceModifyListModCfm, + id-PDUSessionResourceModifyListModInd, + id-PDUSessionResourceModifyListModReq, + id-PDUSessionResourceModifyListModRes, + id-PDUSessionResourceNotifyList, + id-PDUSessionResourceReleasedListNot, + id-PDUSessionResourceReleasedListPSAck, + id-PDUSessionResourceReleasedListPSFail, + id-PDUSessionResourceReleasedListRelRes, + id-PDUSessionResourceResumeListRESReq, + id-PDUSessionResourceResumeListRESRes, + id-PDUSessionResourceSecondaryRATUsageList, + id-PDUSessionResourceSetupListCxtReq, + id-PDUSessionResourceSetupListCxtRes, + id-PDUSessionResourceSetupListHOReq, + id-PDUSessionResourceSetupListSUReq, + id-PDUSessionResourceSetupListSURes, + id-PDUSessionResourceSuspendListSUSReq, + id-PDUSessionResourceSwitchedList, + id-PDUSessionResourceToBeSwitchedDLList, + id-PDUSessionResourceToReleaseListHOCmd, + id-PDUSessionResourceToReleaseListRelCmd, + id-PEIPSassistanceInformation, + id-PLMNSupportList, + id-PrivacyIndicator, + id-PWSFailedCellIDList, + id-PC5QoSParameters, + id-QMCConfigInfo, + id-QMCDeactivation, + id-RANNodeName, + id-RANPagingPriority, + id-RANStatusTransfer-TransparentContainer, + id-RAN-UE-NGAP-ID, + id-RedCapIndication, + id-RedirectionVoiceFallback, + id-RelativeAMFCapacity, + id-RepetitionPeriod, + id-ResetType, + id-RGLevelWirelineAccessCharacteristics, + id-RoutingID, + id-RRCEstablishmentCause, + id-RRCInactiveTransitionReportRequest, + id-RRC-Resume-Cause, + id-RRCState, + id-SecurityContext, + id-SecurityKey, + id-SelectedPLMNIdentity, + id-SerialNumber, + id-ServedGUAMIList, + id-SliceSupportList, + id-S-NSSAI, + id-SONConfigurationTransferDL, + id-SONConfigurationTransferUL, + id-SourceAMF-UE-NGAP-ID, + id-SourceToTarget-TransparentContainer, + id-SourceToTarget-AMFInformationReroute, + id-SRVCCOperationPossible, + id-SupportedTAList, + id-Suspend-Request-Indication, + id-Suspend-Response-Indication, + id-TAI, + id-TAIListForPaging, + id-TAIListForRestart, + id-TargetID, + id-TargetNSSAIInformation, + id-TargetToSource-TransparentContainer, + id-TargettoSource-Failure-TransparentContainer, + id-TimeSyncAssistanceInfo, + id-TimeToWait, + id-TNGFIdentityInformation, + id-TraceActivation, + id-TraceCollectionEntityIPAddress, + id-TraceCollectionEntityURI, + id-TWIFIdentityInformation, + id-UEAggregateMaximumBitRate, + id-UE-associatedLogicalNG-connectionList, + id-UECapabilityInfoRequest, + id-UEContextRequest, + id-UE-DifferentiationInfo, + id-UE-NGAP-IDs, + id-UEPagingIdentity, + id-UEPresenceInAreaOfInterestList, + id-UERadioCapability, + id-UERadioCapabilityForPaging, + id-UERadioCapabilityID, + id-UERadioCapability-EUTRA-Format, + id-UERetentionInformation, + id-UESecurityCapabilities, + id-UESliceMaximumBitRateList, + id-UE-UP-CIoT-Support, + id-UL-CP-SecurityInformation, + id-UnavailableGUAMIList, + id-UserLocationInformation, + id-W-AGFIdentityInformation, + id-WarningAreaCoordinates, + id-WarningAreaList, + id-WarningMessageContents, + id-WarningSecurityInfo, + id-WarningType, + id-WUS-Assistance-Information, + id-RIMInformationTransfer + +FROM NGAP-Constants; + +-- ************************************************************** +-- +-- PDU SESSION MANAGEMENT ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PDU Session Resource Setup Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PDU SESSION RESOURCE SETUP REQUEST +-- +-- ************************************************************** + +PDUSessionResourceSetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PDUSessionResourceSetupRequestIEs} }, + ... +} + +PDUSessionResourceSetupRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RANPagingPriority CRITICALITY ignore TYPE RANPagingPriority PRESENCE optional }| + { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE optional }| + { ID id-PDUSessionResourceSetupListSUReq CRITICALITY reject TYPE PDUSessionResourceSetupListSUReq PRESENCE mandatory }| + { ID id-UEAggregateMaximumBitRate CRITICALITY ignore TYPE UEAggregateMaximumBitRate PRESENCE optional }| + { ID id-UESliceMaximumBitRateList CRITICALITY ignore TYPE UESliceMaximumBitRateList PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PDU SESSION RESOURCE SETUP RESPONSE +-- +-- ************************************************************** + +PDUSessionResourceSetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PDUSessionResourceSetupResponseIEs} }, + ... +} + +PDUSessionResourceSetupResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceSetupListSURes CRITICALITY ignore TYPE PDUSessionResourceSetupListSURes PRESENCE optional }| + { ID id-PDUSessionResourceFailedToSetupListSURes CRITICALITY ignore TYPE PDUSessionResourceFailedToSetupListSURes PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Release Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PDU SESSION RESOURCE RELEASE COMMAND +-- +-- ************************************************************** + +PDUSessionResourceReleaseCommand ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PDUSessionResourceReleaseCommandIEs} }, + ... +} + +PDUSessionResourceReleaseCommandIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RANPagingPriority CRITICALITY ignore TYPE RANPagingPriority PRESENCE optional }| + { ID id-NAS-PDU CRITICALITY ignore TYPE NAS-PDU PRESENCE optional }| + { ID id-PDUSessionResourceToReleaseListRelCmd CRITICALITY reject TYPE PDUSessionResourceToReleaseListRelCmd PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- PDU SESSION RESOURCE RELEASE RESPONSE +-- +-- ************************************************************** + +PDUSessionResourceReleaseResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PDUSessionResourceReleaseResponseIEs} }, + ... +} + +PDUSessionResourceReleaseResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceReleasedListRelRes CRITICALITY ignore TYPE PDUSessionResourceReleasedListRelRes PRESENCE mandatory }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PDU Session Resource Modify Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PDU SESSION RESOURCE MODIFY REQUEST +-- +-- ************************************************************** + +PDUSessionResourceModifyRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PDUSessionResourceModifyRequestIEs} }, + ... +} + +PDUSessionResourceModifyRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RANPagingPriority CRITICALITY ignore TYPE RANPagingPriority PRESENCE optional }| + { ID id-PDUSessionResourceModifyListModReq CRITICALITY reject TYPE PDUSessionResourceModifyListModReq PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- PDU SESSION RESOURCE MODIFY RESPONSE +-- +-- ************************************************************** + +PDUSessionResourceModifyResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PDUSessionResourceModifyResponseIEs} }, + ... +} + +PDUSessionResourceModifyResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceModifyListModRes CRITICALITY ignore TYPE PDUSessionResourceModifyListModRes PRESENCE optional }| + { ID id-PDUSessionResourceFailedToModifyListModRes CRITICALITY ignore TYPE PDUSessionResourceFailedToModifyListModRes PRESENCE optional }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Notify Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PDU SESSION RESOURCE NOTIFY +-- +-- ************************************************************** + +PDUSessionResourceNotify ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PDUSessionResourceNotifyIEs} }, + ... +} + +PDUSessionResourceNotifyIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceNotifyList CRITICALITY reject TYPE PDUSessionResourceNotifyList PRESENCE optional }| + { ID id-PDUSessionResourceReleasedListNot CRITICALITY ignore TYPE PDUSessionResourceReleasedListNot PRESENCE optional }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- PDU Session Resource Modify Indication Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PDU SESSION RESOURCE MODIFY INDICATION +-- +-- ************************************************************** + +PDUSessionResourceModifyIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PDUSessionResourceModifyIndicationIEs} }, + ... +} + +PDUSessionResourceModifyIndicationIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceModifyListModInd CRITICALITY reject TYPE PDUSessionResourceModifyListModInd PRESENCE mandatory }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PDU SESSION RESOURCE MODIFY CONFIRM +-- +-- ************************************************************** + +PDUSessionResourceModifyConfirm ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PDUSessionResourceModifyConfirmIEs} }, + ... +} + +PDUSessionResourceModifyConfirmIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceModifyListModCfm CRITICALITY ignore TYPE PDUSessionResourceModifyListModCfm PRESENCE optional }| + { ID id-PDUSessionResourceFailedToModifyListModCfm CRITICALITY ignore TYPE PDUSessionResourceFailedToModifyListModCfm PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT MANAGEMENT ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Initial Context Setup Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- INITIAL CONTEXT SETUP REQUEST +-- +-- ************************************************************** + +InitialContextSetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {InitialContextSetupRequestIEs} }, + ... +} + +InitialContextSetupRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-OldAMF CRITICALITY reject TYPE AMFName PRESENCE optional }| + { ID id-UEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE conditional }| + { ID id-CoreNetworkAssistanceInformationForInactive CRITICALITY ignore TYPE CoreNetworkAssistanceInformationForInactive PRESENCE optional }| + { ID id-GUAMI CRITICALITY reject TYPE GUAMI PRESENCE mandatory }| + { ID id-PDUSessionResourceSetupListCxtReq CRITICALITY reject TYPE PDUSessionResourceSetupListCxtReq PRESENCE optional }| + { ID id-AllowedNSSAI CRITICALITY reject TYPE AllowedNSSAI PRESENCE mandatory }| + { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE mandatory }| + { ID id-SecurityKey CRITICALITY reject TYPE SecurityKey PRESENCE mandatory }| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional }| + { ID id-MobilityRestrictionList CRITICALITY ignore TYPE MobilityRestrictionList PRESENCE optional }| + { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional }| + { ID id-IndexToRFSP CRITICALITY ignore TYPE IndexToRFSP PRESENCE optional }| + { ID id-MaskedIMEISV CRITICALITY ignore TYPE MaskedIMEISV PRESENCE optional }| + { ID id-NAS-PDU CRITICALITY ignore TYPE NAS-PDU PRESENCE optional }| + { ID id-EmergencyFallbackIndicator CRITICALITY reject TYPE EmergencyFallbackIndicator PRESENCE optional }| + { ID id-RRCInactiveTransitionReportRequest CRITICALITY ignore TYPE RRCInactiveTransitionReportRequest PRESENCE optional }| + { ID id-UERadioCapabilityForPaging CRITICALITY ignore TYPE UERadioCapabilityForPaging PRESENCE optional }| + { ID id-RedirectionVoiceFallback CRITICALITY ignore TYPE RedirectionVoiceFallback PRESENCE optional }| + { ID id-LocationReportingRequestType CRITICALITY ignore TYPE LocationReportingRequestType PRESENCE optional }| + { ID id-CNAssistedRANTuning CRITICALITY ignore TYPE CNAssistedRANTuning PRESENCE optional }| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional }| + { ID id-IAB-Authorized CRITICALITY ignore TYPE IAB-Authorized PRESENCE optional }| + { ID id-Enhanced-CoverageRestriction CRITICALITY ignore TYPE Enhanced-CoverageRestriction PRESENCE optional }| + { ID id-Extended-ConnectedTime CRITICALITY ignore TYPE Extended-ConnectedTime PRESENCE optional }| + { ID id-UE-DifferentiationInfo CRITICALITY ignore TYPE UE-DifferentiationInfo PRESENCE optional }| +{ ID id-NRV2XServicesAuthorized CRITICALITY ignore TYPE NRV2XServicesAuthorized PRESENCE optional }| +{ ID id-LTEV2XServicesAuthorized CRITICALITY ignore TYPE LTEV2XServicesAuthorized PRESENCE optional }| +{ ID id-NRUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE NRUESidelinkAggregateMaximumBitrate PRESENCE optional }| +{ ID id-LTEUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE LTEUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-PC5QoSParameters CRITICALITY ignore TYPE PC5QoSParameters PRESENCE optional }| + { ID id-CEmodeBrestricted CRITICALITY ignore TYPE CEmodeBrestricted PRESENCE optional }| + { ID id-UE-UP-CIoT-Support CRITICALITY ignore TYPE UE-UP-CIoT-Support PRESENCE optional }| + { ID id-RGLevelWirelineAccessCharacteristics CRITICALITY ignore TYPE RGLevelWirelineAccessCharacteristics PRESENCE optional }| + { ID id-ManagementBasedMDTPLMNList CRITICALITY ignore TYPE MDTPLMNList PRESENCE optional }| + { ID id-UERadioCapabilityID CRITICALITY reject TYPE UERadioCapabilityID PRESENCE optional }| + { ID id-TimeSyncAssistanceInfo CRITICALITY ignore TYPE TimeSyncAssistanceInfo PRESENCE optional }| + { ID id-QMCConfigInfo CRITICALITY ignore TYPE QMCConfigInfo PRESENCE optional }| + { ID id-TargetNSSAIInformation CRITICALITY ignore TYPE TargetNSSAIInformation PRESENCE optional }| + { ID id-UESliceMaximumBitRateList CRITICALITY ignore TYPE UESliceMaximumBitRateList PRESENCE optional }| + { ID id-FiveG-ProSeAuthorized CRITICALITY ignore TYPE FiveG-ProSeAuthorized PRESENCE optional }| + { ID id-FiveG-ProSeUEPC5AggregateMaximumBitRate CRITICALITY ignore TYPE NRUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-FiveG-ProSePC5QoSParameters CRITICALITY ignore TYPE FiveG-ProSePC5QoSParameters PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- INITIAL CONTEXT SETUP RESPONSE +-- +-- ************************************************************** + +InitialContextSetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {InitialContextSetupResponseIEs} }, + ... +} + +InitialContextSetupResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceSetupListCxtRes CRITICALITY ignore TYPE PDUSessionResourceSetupListCxtRes PRESENCE optional }| + { ID id-PDUSessionResourceFailedToSetupListCxtRes CRITICALITY ignore TYPE PDUSessionResourceFailedToSetupListCxtRes PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- INITIAL CONTEXT SETUP FAILURE +-- +-- ************************************************************** + +InitialContextSetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {InitialContextSetupFailureIEs} }, + ... +} + +InitialContextSetupFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceFailedToSetupListCxtFail CRITICALITY ignore TYPE PDUSessionResourceFailedToSetupListCxtFail PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE Context Release Request Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE CONTEXT RELEASE REQUEST +-- +-- ************************************************************** + +UEContextReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UEContextReleaseRequest-IEs} }, + ... +} + +UEContextReleaseRequest-IEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceListCxtRelReq CRITICALITY reject TYPE PDUSessionResourceListCxtRelReq PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- UE Context Release Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE CONTEXT RELEASE COMMAND +-- +-- ************************************************************** + +UEContextReleaseCommand ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UEContextReleaseCommand-IEs} }, + ... +} + +UEContextReleaseCommand-IEs NGAP-PROTOCOL-IES ::= { + { ID id-UE-NGAP-IDs CRITICALITY reject TYPE UE-NGAP-IDs PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT RELEASE COMPLETE +-- +-- ************************************************************** + +UEContextReleaseComplete ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UEContextReleaseComplete-IEs} }, + ... +} + +UEContextReleaseComplete-IEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }| + { ID id-InfoOnRecommendedCellsAndRANNodesForPaging CRITICALITY ignore TYPE InfoOnRecommendedCellsAndRANNodesForPaging PRESENCE optional }| + { ID id-PDUSessionResourceListCxtRelCpl CRITICALITY reject TYPE PDUSessionResourceListCxtRelCpl PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-PagingAssisDataforCEcapabUE CRITICALITY ignore TYPE PagingAssisDataforCEcapabUE PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE Context Resume Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE CONTEXT RESUME REQUEST +-- +-- ************************************************************** + +UEContextResumeRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UEContextResumeRequestIEs} }, + ... +} + +UEContextResumeRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RRC-Resume-Cause CRITICALITY ignore TYPE RRCEstablishmentCause PRESENCE mandatory }| + { ID id-PDUSessionResourceResumeListRESReq CRITICALITY reject TYPE PDUSessionResourceResumeListRESReq PRESENCE optional }| + { ID id-PDUSessionResourceFailedToResumeListRESReq CRITICALITY reject TYPE PDUSessionResourceFailedToResumeListRESReq PRESENCE optional }| + { ID id-Suspend-Request-Indication CRITICALITY ignore TYPE Suspend-Request-Indication PRESENCE optional }| + { ID id-InfoOnRecommendedCellsAndRANNodesForPaging CRITICALITY ignore TYPE InfoOnRecommendedCellsAndRANNodesForPaging PRESENCE optional }| + { ID id-PagingAssisDataforCEcapabUE CRITICALITY ignore TYPE PagingAssisDataforCEcapabUE PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT RESUME RESPONSE +-- +-- ************************************************************** + +UEContextResumeResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UEContextResumeResponseIEs} }, + ... +} + +UEContextResumeResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceResumeListRESRes CRITICALITY reject TYPE PDUSessionResourceResumeListRESRes PRESENCE optional }| + { ID id-PDUSessionResourceFailedToResumeListRESRes CRITICALITY reject TYPE PDUSessionResourceFailedToResumeListRESRes PRESENCE optional }| + { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE optional }| + { ID id-Suspend-Response-Indication CRITICALITY ignore TYPE Suspend-Response-Indication PRESENCE optional }| + { ID id-Extended-ConnectedTime CRITICALITY ignore TYPE Extended-ConnectedTime PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT RESUME FAILURE +-- +-- ************************************************************** + +UEContextResumeFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextResumeFailureIEs} }, + ... +} + +UEContextResumeFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- UE Context Suspend Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE CONTEXT SUSPEND REQUEST +-- +-- ************************************************************** + +UEContextSuspendRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UEContextSuspendRequestIEs} }, + ... +} + +UEContextSuspendRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-InfoOnRecommendedCellsAndRANNodesForPaging CRITICALITY ignore TYPE InfoOnRecommendedCellsAndRANNodesForPaging PRESENCE optional }| + { ID id-PagingAssisDataforCEcapabUE CRITICALITY ignore TYPE PagingAssisDataforCEcapabUE PRESENCE optional }| + { ID id-PDUSessionResourceSuspendListSUSReq CRITICALITY reject TYPE PDUSessionResourceSuspendListSUSReq PRESENCE optional }, ... +} + +-- ************************************************************** +-- +-- UE CONTEXT SUSPEND RESPONSE +-- +-- ************************************************************** + +UEContextSuspendResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UEContextSuspendResponseIEs} }, + ... +} + +UEContextSuspendResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT SUSPEND FAILURE +-- +-- ************************************************************** + +UEContextSuspendFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEContextSuspendFailureIEs} }, + ... +} + +UEContextSuspendFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE Context Modification Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE CONTEXT MODIFICATION REQUEST +-- +-- ************************************************************** + +UEContextModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UEContextModificationRequestIEs} }, + ... +} + +UEContextModificationRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RANPagingPriority CRITICALITY ignore TYPE RANPagingPriority PRESENCE optional }| + { ID id-SecurityKey CRITICALITY reject TYPE SecurityKey PRESENCE optional }| + { ID id-IndexToRFSP CRITICALITY ignore TYPE IndexToRFSP PRESENCE optional }| + { ID id-UEAggregateMaximumBitRate CRITICALITY ignore TYPE UEAggregateMaximumBitRate PRESENCE optional }| + { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE optional }| + { ID id-CoreNetworkAssistanceInformationForInactive CRITICALITY ignore TYPE CoreNetworkAssistanceInformationForInactive PRESENCE optional }| + { ID id-EmergencyFallbackIndicator CRITICALITY reject TYPE EmergencyFallbackIndicator PRESENCE optional }| + { ID id-NewAMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE optional }| + { ID id-RRCInactiveTransitionReportRequest CRITICALITY ignore TYPE RRCInactiveTransitionReportRequest PRESENCE optional }| + { ID id-NewGUAMI CRITICALITY reject TYPE GUAMI PRESENCE optional }| + { ID id-CNAssistedRANTuning CRITICALITY ignore TYPE CNAssistedRANTuning PRESENCE optional }| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional }| + { ID id-IAB-Authorized CRITICALITY ignore TYPE IAB-Authorized PRESENCE optional }| + { ID id-NRV2XServicesAuthorized CRITICALITY ignore TYPE NRV2XServicesAuthorized PRESENCE optional }| + { ID id-LTEV2XServicesAuthorized CRITICALITY ignore TYPE LTEV2XServicesAuthorized PRESENCE optional }| + { ID id-NRUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE NRUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-LTEUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE LTEUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-PC5QoSParameters CRITICALITY ignore TYPE PC5QoSParameters PRESENCE optional }| + { ID id-UERadioCapabilityID CRITICALITY reject TYPE UERadioCapabilityID PRESENCE optional }| + { ID id-RGLevelWirelineAccessCharacteristics CRITICALITY ignore TYPE RGLevelWirelineAccessCharacteristics PRESENCE optional }| + { ID id-TimeSyncAssistanceInfo CRITICALITY ignore TYPE TimeSyncAssistanceInfo PRESENCE optional }| + { ID id-QMCConfigInfo CRITICALITY ignore TYPE QMCConfigInfo PRESENCE optional }| + { ID id-QMCDeactivation CRITICALITY ignore TYPE QMCDeactivation PRESENCE optional }| + { ID id-UESliceMaximumBitRateList CRITICALITY ignore TYPE UESliceMaximumBitRateList PRESENCE optional }| + { ID id-ManagementBasedMDTPLMNModificationList CRITICALITY ignore TYPE MDTPLMNModificationList PRESENCE optional }| + { ID id-FiveG-ProSeAuthorized CRITICALITY ignore TYPE FiveG-ProSeAuthorized PRESENCE optional }| + { ID id-FiveG-ProSeUEPC5AggregateMaximumBitRate CRITICALITY ignore TYPE NRUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-FiveG-ProSePC5QoSParameters CRITICALITY ignore TYPE FiveG-ProSePC5QoSParameters PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT MODIFICATION RESPONSE +-- +-- ************************************************************** + +UEContextModificationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UEContextModificationResponseIEs} }, + ... +} + +UEContextModificationResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RRCState CRITICALITY ignore TYPE RRCState PRESENCE optional }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE CONTEXT MODIFICATION FAILURE +-- +-- ************************************************************** + +UEContextModificationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UEContextModificationFailureIEs} }, + ... +} + +UEContextModificationFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RRC INACTIVE TRANSITION REPORT +-- +-- ************************************************************** + +RRCInactiveTransitionReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {RRCInactiveTransitionReportIEs} }, + ... +} + +RRCInactiveTransitionReportIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RRCState CRITICALITY ignore TYPE RRCState PRESENCE mandatory }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- Retrieve UE Information +-- +-- ************************************************************** + +RetrieveUEInformation ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { RetrieveUEInformationIEs} }, + ... +} + +RetrieveUEInformationIEs NGAP-PROTOCOL-IES ::= { + { ID id-FiveG-S-TMSI CRITICALITY reject TYPE FiveG-S-TMSI PRESENCE mandatory }, + ... + +} + +-- ************************************************************** + +-- UE Information Transfer +-- +-- ************************************************************** + +UEInformationTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { UEInformationTransferIEs} }, + ... +} + +UEInformationTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-FiveG-S-TMSI CRITICALITY reject TYPE FiveG-S-TMSI PRESENCE mandatory }| + { ID id-NB-IoT-UEPriority CRITICALITY ignore TYPE NB-IoT-UEPriority PRESENCE optional }| + { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional }| + { ID id-S-NSSAI CRITICALITY ignore TYPE S-NSSAI PRESENCE optional }| + { ID id-AllowedNSSAI CRITICALITY ignore TYPE AllowedNSSAI PRESENCE optional }| + { ID id-UE-DifferentiationInfo CRITICALITY ignore TYPE UE-DifferentiationInfo PRESENCE optional }| + { ID id-MaskedIMEISV CRITICALITY ignore TYPE MaskedIMEISV PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RAN CP Relocation Indication +-- +-- ************************************************************** + +RANCPRelocationIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { RANCPRelocationIndicationIEs} }, + ... +} + +RANCPRelocationIndicationIEs NGAP-PROTOCOL-IES ::= { + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-FiveG-S-TMSI CRITICALITY reject TYPE FiveG-S-TMSI PRESENCE mandatory }| + { ID id-EUTRA-CGI CRITICALITY ignore TYPE EUTRA-CGI PRESENCE mandatory }| + { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory }| + { ID id-UL-CP-SecurityInformation CRITICALITY reject TYPE UL-CP-SecurityInformation PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- UE MOBILITY MANAGEMENT ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Handover Preparation Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- HANDOVER REQUIRED +-- +-- ************************************************************** + +HandoverRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {HandoverRequiredIEs} }, + ... +} + +HandoverRequiredIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-TargetID CRITICALITY reject TYPE TargetID PRESENCE mandatory }| + { ID id-DirectForwardingPathAvailability CRITICALITY ignore TYPE DirectForwardingPathAvailability PRESENCE optional }| + { ID id-PDUSessionResourceListHORqd CRITICALITY reject TYPE PDUSessionResourceListHORqd PRESENCE mandatory }| + { ID id-SourceToTarget-TransparentContainer CRITICALITY reject TYPE SourceToTarget-TransparentContainer PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- HANDOVER COMMAND +-- +-- ************************************************************** + +HandoverCommand ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {HandoverCommandIEs} }, + ... +} + +HandoverCommandIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory }| + { ID id-NASSecurityParametersFromNGRAN CRITICALITY reject TYPE NASSecurityParametersFromNGRAN PRESENCE conditional }| + -- This IE shall be present if HandoverType IE is set to value "5GStoEPPS" or “5GStoUTRAN” -- + { ID id-PDUSessionResourceHandoverList CRITICALITY ignore TYPE PDUSessionResourceHandoverList PRESENCE optional }| + { ID id-PDUSessionResourceToReleaseListHOCmd CRITICALITY ignore TYPE PDUSessionResourceToReleaseListHOCmd PRESENCE optional }| + { ID id-TargetToSource-TransparentContainer CRITICALITY reject TYPE TargetToSource-TransparentContainer PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- HANDOVER PREPARATION FAILURE +-- +-- ************************************************************** + +HandoverPreparationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {HandoverPreparationFailureIEs} }, + ... +} + +HandoverPreparationFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-TargettoSource-Failure-TransparentContainer CRITICALITY ignore TYPE TargettoSource-Failure-TransparentContainer PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Handover Resource Allocation Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- HANDOVER REQUEST +-- +-- ************************************************************** + +HandoverRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {HandoverRequestIEs} }, + ... +} + +HandoverRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-UEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory }| + { ID id-CoreNetworkAssistanceInformationForInactive CRITICALITY ignore TYPE CoreNetworkAssistanceInformationForInactive PRESENCE optional }| + { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE mandatory }| + { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE mandatory }| + { ID id-NewSecurityContextInd CRITICALITY reject TYPE NewSecurityContextInd PRESENCE optional }| + { ID id-NASC CRITICALITY reject TYPE NAS-PDU PRESENCE optional }| + { ID id-PDUSessionResourceSetupListHOReq CRITICALITY reject TYPE PDUSessionResourceSetupListHOReq PRESENCE mandatory }| + { ID id-AllowedNSSAI CRITICALITY reject TYPE AllowedNSSAI PRESENCE mandatory }| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional }| + { ID id-MaskedIMEISV CRITICALITY ignore TYPE MaskedIMEISV PRESENCE optional }| + { ID id-SourceToTarget-TransparentContainer CRITICALITY reject TYPE SourceToTarget-TransparentContainer PRESENCE mandatory }| + { ID id-MobilityRestrictionList CRITICALITY ignore TYPE MobilityRestrictionList PRESENCE optional }| + { ID id-LocationReportingRequestType CRITICALITY ignore TYPE LocationReportingRequestType PRESENCE optional }| + { ID id-RRCInactiveTransitionReportRequest CRITICALITY ignore TYPE RRCInactiveTransitionReportRequest PRESENCE optional }| + { ID id-GUAMI CRITICALITY reject TYPE GUAMI PRESENCE mandatory }| + { ID id-RedirectionVoiceFallback CRITICALITY ignore TYPE RedirectionVoiceFallback PRESENCE optional }| + { ID id-CNAssistedRANTuning CRITICALITY ignore TYPE CNAssistedRANTuning PRESENCE optional }| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional }| + { ID id-IAB-Authorized CRITICALITY reject TYPE IAB-Authorized PRESENCE optional }| + { ID id-Enhanced-CoverageRestriction CRITICALITY ignore TYPE Enhanced-CoverageRestriction PRESENCE optional }| + { ID id-UE-DifferentiationInfo CRITICALITY ignore TYPE UE-DifferentiationInfo PRESENCE optional }| + { ID id-NRV2XServicesAuthorized CRITICALITY ignore TYPE NRV2XServicesAuthorized PRESENCE optional }| + { ID id-LTEV2XServicesAuthorized CRITICALITY ignore TYPE LTEV2XServicesAuthorized PRESENCE optional }| + { ID id-NRUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE NRUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-LTEUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE LTEUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-PC5QoSParameters CRITICALITY ignore TYPE PC5QoSParameters PRESENCE optional }| + { ID id-CEmodeBrestricted CRITICALITY ignore TYPE CEmodeBrestricted PRESENCE optional }| + { ID id-UE-UP-CIoT-Support CRITICALITY ignore TYPE UE-UP-CIoT-Support PRESENCE optional }| + { ID id-ManagementBasedMDTPLMNList CRITICALITY ignore TYPE MDTPLMNList PRESENCE optional }| + { ID id-UERadioCapabilityID CRITICALITY reject TYPE UERadioCapabilityID PRESENCE optional }| + { ID id-Extended-ConnectedTime CRITICALITY ignore TYPE Extended-ConnectedTime PRESENCE optional }| + { ID id-TimeSyncAssistanceInfo CRITICALITY ignore TYPE TimeSyncAssistanceInfo PRESENCE optional }| + { ID id-UESliceMaximumBitRateList CRITICALITY ignore TYPE UESliceMaximumBitRateList PRESENCE optional }| + { ID id-FiveG-ProSeAuthorized CRITICALITY ignore TYPE FiveG-ProSeAuthorized PRESENCE optional }| + { ID id-FiveG-ProSeUEPC5AggregateMaximumBitRate CRITICALITY ignore TYPE NRUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-FiveG-ProSePC5QoSParameters CRITICALITY ignore TYPE FiveG-ProSePC5QoSParameters PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- HANDOVER REQUEST ACKNOWLEDGE +-- +-- ************************************************************** + +HandoverRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {HandoverRequestAcknowledgeIEs} }, + ... +} + +HandoverRequestAcknowledgeIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceAdmittedList CRITICALITY ignore TYPE PDUSessionResourceAdmittedList PRESENCE mandatory }| + { ID id-PDUSessionResourceFailedToSetupListHOAck CRITICALITY ignore TYPE PDUSessionResourceFailedToSetupListHOAck PRESENCE optional }| + { ID id-TargetToSource-TransparentContainer CRITICALITY reject TYPE TargetToSource-TransparentContainer PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-NPN-AccessInformation CRITICALITY reject TYPE NPN-AccessInformation PRESENCE optional }| + { ID id-RedCapIndication CRITICALITY ignore TYPE RedCapIndication PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- HANDOVER FAILURE +-- +-- ************************************************************** + +HandoverFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { HandoverFailureIEs} }, + ... +} + +HandoverFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-TargettoSource-Failure-TransparentContainer CRITICALITY ignore TYPE TargettoSource-Failure-TransparentContainer PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Handover Notification Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- HANDOVER NOTIFY +-- +-- ************************************************************** + +HandoverNotify ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { HandoverNotifyIEs} }, + ... +} + +HandoverNotifyIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE mandatory }| + { ID id-NotifySourceNGRANNode CRITICALITY ignore TYPE NotifySourceNGRANNode PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Path Switch Request Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PATH SWITCH REQUEST +-- +-- ************************************************************** + +PathSwitchRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PathSwitchRequestIEs} }, + ... +} + +PathSwitchRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-SourceAMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE mandatory }| + { ID id-UESecurityCapabilities CRITICALITY ignore TYPE UESecurityCapabilities PRESENCE mandatory }| + { ID id-PDUSessionResourceToBeSwitchedDLList CRITICALITY reject TYPE PDUSessionResourceToBeSwitchedDLList PRESENCE mandatory }| + { ID id-PDUSessionResourceFailedToSetupListPSReq CRITICALITY ignore TYPE PDUSessionResourceFailedToSetupListPSReq PRESENCE optional }| + { ID id-RRC-Resume-Cause CRITICALITY ignore TYPE RRCEstablishmentCause PRESENCE optional }| + { ID id-RedCapIndication CRITICALITY ignore TYPE RedCapIndication PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- PATH SWITCH REQUEST ACKNOWLEDGE +-- +-- ************************************************************** + +PathSwitchRequestAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PathSwitchRequestAcknowledgeIEs} }, + ... +} + +PathSwitchRequestAcknowledgeIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE optional }| + { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE mandatory }| + { ID id-NewSecurityContextInd CRITICALITY reject TYPE NewSecurityContextInd PRESENCE optional }| + { ID id-PDUSessionResourceSwitchedList CRITICALITY ignore TYPE PDUSessionResourceSwitchedList PRESENCE mandatory }| + { ID id-PDUSessionResourceReleasedListPSAck CRITICALITY ignore TYPE PDUSessionResourceReleasedListPSAck PRESENCE optional }| + { ID id-AllowedNSSAI CRITICALITY reject TYPE AllowedNSSAI PRESENCE mandatory }| + { ID id-CoreNetworkAssistanceInformationForInactive CRITICALITY ignore TYPE CoreNetworkAssistanceInformationForInactive PRESENCE optional }| + { ID id-RRCInactiveTransitionReportRequest CRITICALITY ignore TYPE RRCInactiveTransitionReportRequest PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-RedirectionVoiceFallback CRITICALITY ignore TYPE RedirectionVoiceFallback PRESENCE optional }| + { ID id-CNAssistedRANTuning CRITICALITY ignore TYPE CNAssistedRANTuning PRESENCE optional }| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional }| + { ID id-Enhanced-CoverageRestriction CRITICALITY ignore TYPE Enhanced-CoverageRestriction PRESENCE optional }| + { ID id-Extended-ConnectedTime CRITICALITY ignore TYPE Extended-ConnectedTime PRESENCE optional }| + { ID id-UE-DifferentiationInfo CRITICALITY ignore TYPE UE-DifferentiationInfo PRESENCE optional }| + { ID id-NRV2XServicesAuthorized CRITICALITY ignore TYPE NRV2XServicesAuthorized PRESENCE optional }| + { ID id-LTEV2XServicesAuthorized CRITICALITY ignore TYPE LTEV2XServicesAuthorized PRESENCE optional }| + { ID id-NRUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE NRUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-LTEUESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE LTEUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-PC5QoSParameters CRITICALITY ignore TYPE PC5QoSParameters PRESENCE optional }| + { ID id-CEmodeBrestricted CRITICALITY ignore TYPE CEmodeBrestricted PRESENCE optional }| + { ID id-UE-UP-CIoT-Support CRITICALITY ignore TYPE UE-UP-CIoT-Support PRESENCE optional }| + { ID id-UERadioCapabilityID CRITICALITY reject TYPE UERadioCapabilityID PRESENCE optional }| + { ID id-ManagementBasedMDTPLMNList CRITICALITY ignore TYPE MDTPLMNList PRESENCE optional }| + { ID id-TimeSyncAssistanceInfo CRITICALITY ignore TYPE TimeSyncAssistanceInfo PRESENCE optional }| + { ID id-FiveG-ProSeAuthorized CRITICALITY ignore TYPE FiveG-ProSeAuthorized PRESENCE optional }| + { ID id-FiveG-ProSeUEPC5AggregateMaximumBitRate CRITICALITY ignore TYPE NRUESidelinkAggregateMaximumBitrate PRESENCE optional }| + { ID id-FiveG-ProSePC5QoSParameters CRITICALITY ignore TYPE FiveG-ProSePC5QoSParameters PRESENCE optional }| + { ID id-ManagementBasedMDTPLMNModificationList CRITICALITY ignore TYPE MDTPLMNModificationList PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- PATH SWITCH REQUEST FAILURE +-- +-- ************************************************************** + +PathSwitchRequestFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { PathSwitchRequestFailureIEs} }, + ... +} + +PathSwitchRequestFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceReleasedListPSFail CRITICALITY ignore TYPE PDUSessionResourceReleasedListPSFail PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Handover Cancellation Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- HANDOVER CANCEL +-- +-- ************************************************************** + +HandoverCancel ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { HandoverCancelIEs} }, + ... +} + +HandoverCancelIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- HANDOVER CANCEL ACKNOWLEDGE +-- +-- ************************************************************** + +HandoverCancelAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { HandoverCancelAcknowledgeIEs} }, + ... +} + +HandoverCancelAcknowledgeIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- HANDOVER SUCCESS ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- HANDOVER SUCCESS +-- +-- ************************************************************** + +HandoverSuccess ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { HandoverSuccessIEs} }, + ... +} + +HandoverSuccessIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- UPLINK RAN EARLY STATUS TRANSFER ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Uplink RAN Early Status Transfer +-- +-- ************************************************************** + +UplinkRANEarlyStatusTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UplinkRANEarlyStatusTransferIEs} }, + ... +} + +UplinkRANEarlyStatusTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory}| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory}| + { ID id-EarlyStatusTransfer-TransparentContainer CRITICALITY reject TYPE EarlyStatusTransfer-TransparentContainer PRESENCE mandatory}, + ... +} + +-- ************************************************************** +-- +-- DOWNLINK RAN EARLY STATUS TRANSFER ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Downlink RAN Early Status Transfer +-- +-- ************************************************************** + +DownlinkRANEarlyStatusTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DownlinkRANEarlyStatusTransferIEs} }, + ... +} + +DownlinkRANEarlyStatusTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory}| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory}| + { ID id-EarlyStatusTransfer-TransparentContainer CRITICALITY reject TYPE EarlyStatusTransfer-TransparentContainer PRESENCE mandatory}, + ... +} + + +-- ************************************************************** +-- +-- Uplink RAN Status Transfer Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UPLINK RAN STATUS TRANSFER +-- +-- ************************************************************** + +UplinkRANStatusTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UplinkRANStatusTransferIEs} }, + ... +} + +UplinkRANStatusTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RANStatusTransfer-TransparentContainer CRITICALITY reject TYPE RANStatusTransfer-TransparentContainer PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- Downlink RAN Status Transfer Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- DOWNLINK RAN STATUS TRANSFER +-- +-- ************************************************************** + +DownlinkRANStatusTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DownlinkRANStatusTransferIEs} }, + ... +} + +DownlinkRANStatusTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RANStatusTransfer-TransparentContainer CRITICALITY reject TYPE RANStatusTransfer-TransparentContainer PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- PAGING ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PAGING +-- +-- ************************************************************** + +Paging ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PagingIEs} }, + ... +} + +PagingIEs NGAP-PROTOCOL-IES ::= { + { ID id-UEPagingIdentity CRITICALITY ignore TYPE UEPagingIdentity PRESENCE mandatory }| + { ID id-PagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE optional }| + { ID id-TAIListForPaging CRITICALITY ignore TYPE TAIListForPaging PRESENCE mandatory }| + { ID id-PagingPriority CRITICALITY ignore TYPE PagingPriority PRESENCE optional }| + { ID id-UERadioCapabilityForPaging CRITICALITY ignore TYPE UERadioCapabilityForPaging PRESENCE optional }| + { ID id-PagingOrigin CRITICALITY ignore TYPE PagingOrigin PRESENCE optional }| + { ID id-AssistanceDataForPaging CRITICALITY ignore TYPE AssistanceDataForPaging PRESENCE optional }| + { ID id-NB-IoT-Paging-eDRXInfo CRITICALITY ignore TYPE NB-IoT-Paging-eDRXInfo PRESENCE optional }| + { ID id-NB-IoT-PagingDRX CRITICALITY ignore TYPE NB-IoT-PagingDRX PRESENCE optional }| + { ID id-Enhanced-CoverageRestriction CRITICALITY ignore TYPE Enhanced-CoverageRestriction PRESENCE optional }| + { ID id-WUS-Assistance-Information CRITICALITY ignore TYPE WUS-Assistance-Information PRESENCE optional }| + { ID id-EUTRA-PagingeDRXInformation CRITICALITY ignore TYPE EUTRA-PagingeDRXInformation PRESENCE optional }| + { ID id-CEmodeBrestricted CRITICALITY ignore TYPE CEmodeBrestricted PRESENCE optional }| + { ID id-NR-PagingeDRXInformation CRITICALITY ignore TYPE NR-PagingeDRXInformation PRESENCE optional }| + { ID id-PagingCause CRITICALITY ignore TYPE PagingCause PRESENCE optional }| + { ID id-PEIPSassistanceInformation CRITICALITY ignore TYPE PEIPSassistanceInformation PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- NAS TRANSPORT ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- INITIAL UE MESSAGE +-- +-- ************************************************************** + +InitialUEMessage ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {InitialUEMessage-IEs} }, + ... +} + +InitialUEMessage-IEs NGAP-PROTOCOL-IES ::= { + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory }| + { ID id-UserLocationInformation CRITICALITY reject TYPE UserLocationInformation PRESENCE mandatory }| + { ID id-RRCEstablishmentCause CRITICALITY ignore TYPE RRCEstablishmentCause PRESENCE mandatory }| + { ID id-FiveG-S-TMSI CRITICALITY reject TYPE FiveG-S-TMSI PRESENCE optional }| + { ID id-AMFSetID CRITICALITY ignore TYPE AMFSetID PRESENCE optional }| + { ID id-UEContextRequest CRITICALITY ignore TYPE UEContextRequest PRESENCE optional }| + { ID id-AllowedNSSAI CRITICALITY reject TYPE AllowedNSSAI PRESENCE optional }| + { ID id-SourceToTarget-AMFInformationReroute CRITICALITY ignore TYPE SourceToTarget-AMFInformationReroute PRESENCE optional }| + { ID id-SelectedPLMNIdentity CRITICALITY ignore TYPE PLMNIdentity PRESENCE optional }| + { ID id-IABNodeIndication CRITICALITY reject TYPE IABNodeIndication PRESENCE optional }| + { ID id-CEmodeBSupport-Indicator CRITICALITY reject TYPE CEmodeBSupport-Indicator PRESENCE optional }| + { ID id-LTEM-Indication CRITICALITY ignore TYPE LTEM-Indication PRESENCE optional }| + { ID id-EDT-Session CRITICALITY ignore TYPE EDT-Session PRESENCE optional }| + { ID id-AuthenticatedIndication CRITICALITY ignore TYPE AuthenticatedIndication PRESENCE optional }| + { ID id-NPN-AccessInformation CRITICALITY reject TYPE NPN-AccessInformation PRESENCE optional }| + { ID id-RedCapIndication CRITICALITY ignore TYPE RedCapIndication PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- DOWNLINK NAS TRANSPORT +-- +-- ************************************************************** + +DownlinkNASTransport ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DownlinkNASTransport-IEs} }, + ... +} + +DownlinkNASTransport-IEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-OldAMF CRITICALITY reject TYPE AMFName PRESENCE optional }| + { ID id-RANPagingPriority CRITICALITY ignore TYPE RANPagingPriority PRESENCE optional }| + { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory }| + { ID id-MobilityRestrictionList CRITICALITY ignore TYPE MobilityRestrictionList PRESENCE optional }| + { ID id-IndexToRFSP CRITICALITY ignore TYPE IndexToRFSP PRESENCE optional }| + { ID id-UEAggregateMaximumBitRate CRITICALITY ignore TYPE UEAggregateMaximumBitRate PRESENCE optional }| + { ID id-AllowedNSSAI CRITICALITY reject TYPE AllowedNSSAI PRESENCE optional }| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional }| + { ID id-Enhanced-CoverageRestriction CRITICALITY ignore TYPE Enhanced-CoverageRestriction PRESENCE optional }| + { ID id-Extended-ConnectedTime CRITICALITY ignore TYPE Extended-ConnectedTime PRESENCE optional }| + { ID id-UE-DifferentiationInfo CRITICALITY ignore TYPE UE-DifferentiationInfo PRESENCE optional }| + { ID id-CEmodeBrestricted CRITICALITY ignore TYPE CEmodeBrestricted PRESENCE optional }| + { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional }| + { ID id-UECapabilityInfoRequest CRITICALITY ignore TYPE UECapabilityInfoRequest PRESENCE optional }| + { ID id-EndIndication CRITICALITY ignore TYPE EndIndication PRESENCE optional }| + { ID id-UERadioCapabilityID CRITICALITY reject TYPE UERadioCapabilityID PRESENCE optional }| + { ID id-TargetNSSAIInformation CRITICALITY ignore TYPE TargetNSSAIInformation PRESENCE optional }| + { ID id-MaskedIMEISV CRITICALITY ignore TYPE MaskedIMEISV PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UPLINK NAS TRANSPORT +-- +-- ************************************************************** + +UplinkNASTransport ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UplinkNASTransport-IEs} }, + ... +} + +-- WS modification, add a definition for messages +W-AGFIdentityInformation ::= OCTET STRING +TNGFIdentityInformation ::= OCTET STRING +TWIFIdentityInformation ::= OCTET STRING + +UplinkNASTransport-IEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE mandatory }| +-- WS modification, add a definition for messages +-- { ID id-W-AGFIdentityInformation CRITICALITY reject TYPE OCTET STRING PRESENCE optional }| + { ID id-W-AGFIdentityInformation CRITICALITY reject TYPE W-AGFIdentityInformation PRESENCE optional }| +-- { ID id-TNGFIdentityInformation CRITICALITY reject TYPE OCTET STRING PRESENCE optional }| + { ID id-TNGFIdentityInformation CRITICALITY reject TYPE TNGFIdentityInformation PRESENCE optional }| +-- { ID id-TWIFIdentityInformation CRITICALITY reject TYPE OCTET STRING PRESENCE optional }, + { ID id-TWIFIdentityInformation CRITICALITY reject TYPE TWIFIdentityInformation PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- NAS NON DELIVERY INDICATION +-- +-- ************************************************************** + +NASNonDeliveryIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {NASNonDeliveryIndication-IEs} }, + ... +} + +NASNonDeliveryIndication-IEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-NAS-PDU CRITICALITY ignore TYPE NAS-PDU PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- REROUTE NAS REQUEST +-- +-- ************************************************************** + +RerouteNASRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {RerouteNASRequest-IEs} }, + ... +} + +-- WS modification, add a definition for NGAP Message +NGAP-Message ::= OCTET STRING + +RerouteNASRequest-IEs NGAP-PROTOCOL-IES ::= { + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE optional }| +-- WS modification, add a definition for NGAP Message +-- { ID id-NGAP-Message CRITICALITY reject TYPE OCTET STRING PRESENCE mandatory }| + { ID id-NGAP-Message CRITICALITY reject TYPE NGAP-Message PRESENCE mandatory }| + { ID id-AMFSetID CRITICALITY reject TYPE AMFSetID PRESENCE mandatory }| + { ID id-AllowedNSSAI CRITICALITY reject TYPE AllowedNSSAI PRESENCE optional }| + { ID id-SourceToTarget-AMFInformationReroute CRITICALITY ignore TYPE SourceToTarget-AMFInformationReroute PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- INTERFACE MANAGEMENT ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- NG Setup Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- NG SETUP REQUEST +-- +-- ************************************************************** + +NGSetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {NGSetupRequestIEs} }, + ... +} + +NGSetupRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-GlobalRANNodeID CRITICALITY reject TYPE GlobalRANNodeID PRESENCE mandatory }| + { ID id-RANNodeName CRITICALITY ignore TYPE RANNodeName PRESENCE optional }| + { ID id-SupportedTAList CRITICALITY reject TYPE SupportedTAList PRESENCE mandatory }| + { ID id-DefaultPagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE mandatory }| + { ID id-UERetentionInformation CRITICALITY ignore TYPE UERetentionInformation PRESENCE optional }| + { ID id-NB-IoT-DefaultPagingDRX CRITICALITY ignore TYPE NB-IoT-DefaultPagingDRX PRESENCE optional }| + { ID id-Extended-RANNodeName CRITICALITY ignore TYPE Extended-RANNodeName PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- NG SETUP RESPONSE +-- +-- ************************************************************** + +NGSetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {NGSetupResponseIEs} }, + ... +} + +NGSetupResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMFName CRITICALITY reject TYPE AMFName PRESENCE mandatory }| + { ID id-ServedGUAMIList CRITICALITY reject TYPE ServedGUAMIList PRESENCE mandatory }| + { ID id-RelativeAMFCapacity CRITICALITY ignore TYPE RelativeAMFCapacity PRESENCE mandatory }| + { ID id-PLMNSupportList CRITICALITY reject TYPE PLMNSupportList PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-UERetentionInformation CRITICALITY ignore TYPE UERetentionInformation PRESENCE optional }| + { ID id-IAB-Supported CRITICALITY ignore TYPE IAB-Supported PRESENCE optional }| + { ID id-Extended-AMFName CRITICALITY ignore TYPE Extended-AMFName PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- NG SETUP FAILURE +-- +-- ************************************************************** + +NGSetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {NGSetupFailureIEs} }, + ... +} + +NGSetupFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RAN Configuration Update Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- RAN CONFIGURATION UPDATE +-- +-- ************************************************************** + +RANConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {RANConfigurationUpdateIEs} }, + ... +} + +RANConfigurationUpdateIEs NGAP-PROTOCOL-IES ::= { + { ID id-RANNodeName CRITICALITY ignore TYPE RANNodeName PRESENCE optional }| + { ID id-SupportedTAList CRITICALITY reject TYPE SupportedTAList PRESENCE optional }| + { ID id-DefaultPagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE optional }| + { ID id-GlobalRANNodeID CRITICALITY ignore TYPE GlobalRANNodeID PRESENCE optional }| + { ID id-NGRAN-TNLAssociationToRemoveList CRITICALITY reject TYPE NGRAN-TNLAssociationToRemoveList PRESENCE optional }| + { ID id-NB-IoT-DefaultPagingDRX CRITICALITY ignore TYPE NB-IoT-DefaultPagingDRX PRESENCE optional }| + { ID id-Extended-RANNodeName CRITICALITY ignore TYPE Extended-RANNodeName PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RAN CONFIGURATION UPDATE ACKNOWLEDGE +-- +-- ************************************************************** + +RANConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {RANConfigurationUpdateAcknowledgeIEs} }, + ... +} + +RANConfigurationUpdateAcknowledgeIEs NGAP-PROTOCOL-IES ::= { + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RAN CONFIGURATION UPDATE FAILURE +-- +-- ************************************************************** + +RANConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {RANConfigurationUpdateFailureIEs} }, + ... +} + +RANConfigurationUpdateFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, +... +} + +-- ************************************************************** +-- +-- AMF Configuration Update Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- AMF CONFIGURATION UPDATE +-- +-- ************************************************************** + +AMFConfigurationUpdate ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {AMFConfigurationUpdateIEs} }, + ... +} + +AMFConfigurationUpdateIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMFName CRITICALITY reject TYPE AMFName PRESENCE optional }| + { ID id-ServedGUAMIList CRITICALITY reject TYPE ServedGUAMIList PRESENCE optional }| + { ID id-RelativeAMFCapacity CRITICALITY ignore TYPE RelativeAMFCapacity PRESENCE optional }| + { ID id-PLMNSupportList CRITICALITY reject TYPE PLMNSupportList PRESENCE optional }| + { ID id-AMF-TNLAssociationToAddList CRITICALITY ignore TYPE AMF-TNLAssociationToAddList PRESENCE optional }| + { ID id-AMF-TNLAssociationToRemoveList CRITICALITY ignore TYPE AMF-TNLAssociationToRemoveList PRESENCE optional }| + { ID id-AMF-TNLAssociationToUpdateList CRITICALITY ignore TYPE AMF-TNLAssociationToUpdateList PRESENCE optional }| + { ID id-Extended-AMFName CRITICALITY ignore TYPE Extended-AMFName PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- AMF CONFIGURATION UPDATE ACKNOWLEDGE +-- +-- ************************************************************** + +AMFConfigurationUpdateAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {AMFConfigurationUpdateAcknowledgeIEs} }, + ... +} + +AMFConfigurationUpdateAcknowledgeIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-TNLAssociationSetupList CRITICALITY ignore TYPE AMF-TNLAssociationSetupList PRESENCE optional }| + { ID id-AMF-TNLAssociationFailedToSetupList CRITICALITY ignore TYPE TNLAssociationList PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- AMF CONFIGURATION UPDATE FAILURE +-- +-- ************************************************************** + +AMFConfigurationUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {AMFConfigurationUpdateFailureIEs} }, + ... +} + +AMFConfigurationUpdateFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- AMF Status Indication Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- AMF STATUS INDICATION +-- +-- ************************************************************** + +AMFStatusIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {AMFStatusIndicationIEs} }, + ... +} + +AMFStatusIndicationIEs NGAP-PROTOCOL-IES ::= { + { ID id-UnavailableGUAMIList CRITICALITY reject TYPE UnavailableGUAMIList PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- NG Reset Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- NG RESET +-- +-- ************************************************************** + +NGReset ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {NGResetIEs} }, + ... +} + +NGResetIEs NGAP-PROTOCOL-IES ::= { + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-ResetType CRITICALITY reject TYPE ResetType PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- NG RESET ACKNOWLEDGE +-- +-- ************************************************************** + +NGResetAcknowledge ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {NGResetAcknowledgeIEs} }, + ... +} + +NGResetAcknowledgeIEs NGAP-PROTOCOL-IES ::= { + { ID id-UE-associatedLogicalNG-connectionList CRITICALITY ignore TYPE UE-associatedLogicalNG-connectionList PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Error Indication Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- ERROR INDICATION +-- +-- ************************************************************** + +ErrorIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {ErrorIndicationIEs} }, + ... +} + +ErrorIndicationIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE optional }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| + { ID id-FiveG-S-TMSI CRITICALITY ignore TYPE FiveG-S-TMSI PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- OVERLOAD START +-- +-- ************************************************************** + +OverloadStart ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {OverloadStartIEs} }, + ... +} + +OverloadStartIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMFOverloadResponse CRITICALITY reject TYPE OverloadResponse PRESENCE optional }| + { ID id-AMFTrafficLoadReductionIndication CRITICALITY ignore TYPE TrafficLoadReductionIndication PRESENCE optional }| + { ID id-OverloadStartNSSAIList CRITICALITY ignore TYPE OverloadStartNSSAIList PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- OVERLOAD STOP +-- +-- ************************************************************** + +OverloadStop ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {OverloadStopIEs} }, + ... +} + +OverloadStopIEs NGAP-PROTOCOL-IES ::= { + ... +} + +-- ************************************************************** +-- +-- CONFIGURATION TRANSFER ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UPLINK RAN CONFIGURATION TRANSFER +-- +-- ************************************************************** + +UplinkRANConfigurationTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UplinkRANConfigurationTransferIEs} }, + ... +} + +UplinkRANConfigurationTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-SONConfigurationTransferUL CRITICALITY ignore TYPE SONConfigurationTransfer PRESENCE optional }| + { ID id-ENDC-SONConfigurationTransferUL CRITICALITY ignore TYPE EN-DCSONConfigurationTransfer PRESENCE optional }| + { ID id-IntersystemSONConfigurationTransferUL CRITICALITY ignore TYPE IntersystemSONConfigurationTransfer PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- DOWNLINK RAN CONFIGURATION TRANSFER +-- +-- ************************************************************** + +DownlinkRANConfigurationTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DownlinkRANConfigurationTransferIEs} }, + ... +} + +DownlinkRANConfigurationTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-SONConfigurationTransferDL CRITICALITY ignore TYPE SONConfigurationTransfer PRESENCE optional }| + { ID id-ENDC-SONConfigurationTransferDL CRITICALITY ignore TYPE EN-DCSONConfigurationTransfer PRESENCE optional }| + { ID id-IntersystemSONConfigurationTransferDL CRITICALITY ignore TYPE IntersystemSONConfigurationTransfer PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- WARNING MESSAGE TRANSMISSION ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Write-Replace Warning Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- WRITE-REPLACE WARNING REQUEST +-- +-- ************************************************************** + +WriteReplaceWarningRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {WriteReplaceWarningRequestIEs} }, + ... +} + +WriteReplaceWarningRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| + { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| + { ID id-WarningAreaList CRITICALITY ignore TYPE WarningAreaList PRESENCE optional }| + { ID id-RepetitionPeriod CRITICALITY reject TYPE RepetitionPeriod PRESENCE mandatory }| + { ID id-NumberOfBroadcastsRequested CRITICALITY reject TYPE NumberOfBroadcastsRequested PRESENCE mandatory }| + { ID id-WarningType CRITICALITY ignore TYPE WarningType PRESENCE optional }| + { ID id-WarningSecurityInfo CRITICALITY ignore TYPE WarningSecurityInfo PRESENCE optional }| + { ID id-DataCodingScheme CRITICALITY ignore TYPE DataCodingScheme PRESENCE optional }| + { ID id-WarningMessageContents CRITICALITY ignore TYPE WarningMessageContents PRESENCE optional }| + { ID id-ConcurrentWarningMessageInd CRITICALITY reject TYPE ConcurrentWarningMessageInd PRESENCE optional }| + { ID id-WarningAreaCoordinates CRITICALITY ignore TYPE WarningAreaCoordinates PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- WRITE-REPLACE WARNING RESPONSE +-- +-- ************************************************************** + +WriteReplaceWarningResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {WriteReplaceWarningResponseIEs} }, + ... +} + +WriteReplaceWarningResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| + { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| + { ID id-BroadcastCompletedAreaList CRITICALITY ignore TYPE BroadcastCompletedAreaList PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PWS Cancel Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PWS CANCEL REQUEST +-- +-- ************************************************************** + +PWSCancelRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PWSCancelRequestIEs} }, + ... +} + +PWSCancelRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| + { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| + { ID id-WarningAreaList CRITICALITY ignore TYPE WarningAreaList PRESENCE optional }| + { ID id-CancelAllWarningMessages CRITICALITY reject TYPE CancelAllWarningMessages PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PWS CANCEL RESPONSE +-- +-- ************************************************************** + +PWSCancelResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PWSCancelResponseIEs} }, + ... +} + +PWSCancelResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| + { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| + { ID id-BroadcastCancelledAreaList CRITICALITY ignore TYPE BroadcastCancelledAreaList PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PWS Restart Indication Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PWS RESTART INDICATION +-- +-- ************************************************************** + +PWSRestartIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PWSRestartIndicationIEs} }, + ... +} + +PWSRestartIndicationIEs NGAP-PROTOCOL-IES ::= { + { ID id-CellIDListForRestart CRITICALITY reject TYPE CellIDListForRestart PRESENCE mandatory }| + { ID id-GlobalRANNodeID CRITICALITY reject TYPE GlobalRANNodeID PRESENCE mandatory }| + { ID id-TAIListForRestart CRITICALITY reject TYPE TAIListForRestart PRESENCE mandatory }| + { ID id-EmergencyAreaIDListForRestart CRITICALITY reject TYPE EmergencyAreaIDListForRestart PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PWS Failure Indication Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PWS FAILURE INDICATION +-- +-- ************************************************************** + +PWSFailureIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {PWSFailureIndicationIEs} }, + ... +} + +PWSFailureIndicationIEs NGAP-PROTOCOL-IES ::= { + { ID id-PWSFailedCellIDList CRITICALITY reject TYPE PWSFailedCellIDList PRESENCE mandatory }| + { ID id-GlobalRANNodeID CRITICALITY reject TYPE GlobalRANNodeID PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- NRPPA TRANSPORT ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- DOWNLINK UE ASSOCIATED NRPPA TRANSPORT +-- +-- ************************************************************** + +DownlinkUEAssociatedNRPPaTransport ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DownlinkUEAssociatedNRPPaTransportIEs} }, + ... +} + +DownlinkUEAssociatedNRPPaTransportIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RoutingID CRITICALITY reject TYPE RoutingID PRESENCE mandatory }| + { ID id-NRPPa-PDU CRITICALITY reject TYPE NRPPa-PDU PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- UPLINK UE ASSOCIATED NRPPA TRANSPORT +-- +-- ************************************************************** + +UplinkUEAssociatedNRPPaTransport ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UplinkUEAssociatedNRPPaTransportIEs} }, + ... +} + +UplinkUEAssociatedNRPPaTransportIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RoutingID CRITICALITY reject TYPE RoutingID PRESENCE mandatory }| + { ID id-NRPPa-PDU CRITICALITY reject TYPE NRPPa-PDU PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- DOWNLINK NON UE ASSOCIATED NRPPA TRANSPORT +-- +-- ************************************************************** + +DownlinkNonUEAssociatedNRPPaTransport ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DownlinkNonUEAssociatedNRPPaTransportIEs} }, + ... +} + +DownlinkNonUEAssociatedNRPPaTransportIEs NGAP-PROTOCOL-IES ::= { + { ID id-RoutingID CRITICALITY reject TYPE RoutingID PRESENCE mandatory }| + { ID id-NRPPa-PDU CRITICALITY reject TYPE NRPPa-PDU PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- UPLINK NON UE ASSOCIATED NRPPA TRANSPORT +-- +-- ************************************************************** + +UplinkNonUEAssociatedNRPPaTransport ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UplinkNonUEAssociatedNRPPaTransportIEs} }, + ... +} + +UplinkNonUEAssociatedNRPPaTransportIEs NGAP-PROTOCOL-IES ::= { + { ID id-RoutingID CRITICALITY reject TYPE RoutingID PRESENCE mandatory }| + { ID id-NRPPa-PDU CRITICALITY reject TYPE NRPPa-PDU PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- TRACE ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- TRACE START +-- +-- ************************************************************** + +TraceStart ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {TraceStartIEs} }, + ... +} + +TraceStartIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- TRACE FAILURE INDICATION +-- +-- ************************************************************** + +TraceFailureIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {TraceFailureIndicationIEs} }, + ... +} + +TraceFailureIndicationIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-NGRANTraceID CRITICALITY ignore TYPE NGRANTraceID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- DEACTIVATE TRACE +-- +-- ************************************************************** + +DeactivateTrace ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DeactivateTraceIEs} }, + ... +} + +DeactivateTraceIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-NGRANTraceID CRITICALITY ignore TYPE NGRANTraceID PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- CELL TRAFFIC TRACE +-- +-- ************************************************************** + +CellTrafficTrace ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {CellTrafficTraceIEs} }, + ... +} + +CellTrafficTraceIEs NGAP-PROTOCOL-IES ::= { + {ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + {ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + {ID id-NGRANTraceID CRITICALITY ignore TYPE NGRANTraceID PRESENCE mandatory }| + {ID id-NGRAN-CGI CRITICALITY ignore TYPE NGRAN-CGI PRESENCE mandatory }| + {ID id-TraceCollectionEntityIPAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE mandatory }| + {ID id-PrivacyIndicator CRITICALITY ignore TYPE PrivacyIndicator PRESENCE optional }| + {ID id-TraceCollectionEntityURI CRITICALITY ignore TYPE URI-address PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- LOCATION REPORTING ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- LOCATION REPORTING CONTROL +-- +-- ************************************************************** + +LocationReportingControl ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {LocationReportingControlIEs} }, + ... +} + +LocationReportingControlIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-LocationReportingRequestType CRITICALITY ignore TYPE LocationReportingRequestType PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- LOCATION REPORTING FAILURE INDICATION +-- +-- ************************************************************** + +LocationReportingFailureIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {LocationReportingFailureIndicationIEs} }, + ... +} + +LocationReportingFailureIndicationIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- LOCATION REPORT +-- +-- ************************************************************** + +LocationReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {LocationReportIEs} }, + ... +} + +LocationReportIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE mandatory }| + { ID id-UEPresenceInAreaOfInterestList CRITICALITY ignore TYPE UEPresenceInAreaOfInterestList PRESENCE optional }| + { ID id-LocationReportingRequestType CRITICALITY ignore TYPE LocationReportingRequestType PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- UE TNLA BINDING ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE TNLA BINDING RELEASE REQUEST +-- +-- ************************************************************** + +UETNLABindingReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UETNLABindingReleaseRequestIEs} }, + ... +} + +UETNLABindingReleaseRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- UE RADIO CAPABILITY MANAGEMENT ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE RADIO CAPABILITY INFO INDICATION +-- +-- ************************************************************** + +UERadioCapabilityInfoIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UERadioCapabilityInfoIndicationIEs} }, + ... +} + +UERadioCapabilityInfoIndicationIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE mandatory }| + { ID id-UERadioCapabilityForPaging CRITICALITY ignore TYPE UERadioCapabilityForPaging PRESENCE optional }| + { ID id-UERadioCapability-EUTRA-Format CRITICALITY ignore TYPE UERadioCapability PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE Radio Capability Check Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE RADIO CAPABILITY CHECK REQUEST +-- +-- ************************************************************** + +UERadioCapabilityCheckRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UERadioCapabilityCheckRequestIEs} }, + ... +} + +UERadioCapabilityCheckRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional }| + { ID id-UERadioCapabilityID CRITICALITY reject TYPE UERadioCapabilityID PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- UE RADIO CAPABILITY CHECK RESPONSE +-- +-- ************************************************************** + +UERadioCapabilityCheckResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UERadioCapabilityCheckResponseIEs} }, + ... +} + +UERadioCapabilityCheckResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-IMSVoiceSupportIndicator CRITICALITY reject TYPE IMSVoiceSupportIndicator PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- PRIVATE MESSAGE ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- PRIVATE MESSAGE +-- +-- ************************************************************** + +PrivateMessage ::= SEQUENCE { + privateIEs PrivateIE-Container { { PrivateMessageIEs } }, + ... +} + +PrivateMessageIEs NGAP-PRIVATE-IES ::= { + ... +} + + +-- ************************************************************** +-- +-- DATA USAGE REPORTING ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- SECONDARY RAT DATA USAGE REPORT +-- +-- ************************************************************** + +SecondaryRATDataUsageReport ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {SecondaryRATDataUsageReportIEs} }, + ... +} + +SecondaryRATDataUsageReportIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY ignore TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY ignore TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-PDUSessionResourceSecondaryRATUsageList CRITICALITY ignore TYPE PDUSessionResourceSecondaryRATUsageList PRESENCE mandatory }| + { ID id-HandoverFlag CRITICALITY ignore TYPE HandoverFlag PRESENCE optional }| + { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- RIM INFORMATION TRANSFER ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UPLINK RIM INFORMATION TRANSFER +-- +-- ************************************************************** + +UplinkRIMInformationTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UplinkRIMInformationTransferIEs} }, + ... +} + +UplinkRIMInformationTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-RIMInformationTransfer CRITICALITY ignore TYPE RIMInformationTransfer PRESENCE optional }, + ... +} +-- ************************************************************** +-- +-- DOWNLINK RIM INFORMATION TRANSFER +-- +-- ************************************************************** + +DownlinkRIMInformationTransfer ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DownlinkRIMInformationTransferIEs} }, + ... +} + +DownlinkRIMInformationTransferIEs NGAP-PROTOCOL-IES ::= { + { ID id-RIMInformationTransfer CRITICALITY ignore TYPE RIMInformationTransfer PRESENCE optional }, + + ... +} + +-- ************************************************************** +-- +-- Connection Establishment Indication +-- +-- ************************************************************** + +ConnectionEstablishmentIndication::= SEQUENCE { + protocolIEs ProtocolIE-Container { {ConnectionEstablishmentIndicationIEs} }, + ... +} + +ConnectionEstablishmentIndicationIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional }| + { ID id-EndIndication CRITICALITY ignore TYPE EndIndication PRESENCE optional }| + { ID id-S-NSSAI CRITICALITY ignore TYPE S-NSSAI PRESENCE optional }| + { ID id-AllowedNSSAI CRITICALITY ignore TYPE AllowedNSSAI PRESENCE optional }| + { ID id-UE-DifferentiationInfo CRITICALITY ignore TYPE UE-DifferentiationInfo PRESENCE optional }| + { ID id-DL-CP-SecurityInformation CRITICALITY ignore TYPE DL-CP-SecurityInformation PRESENCE optional }| + { ID id-NB-IoT-UEPriority CRITICALITY ignore TYPE NB-IoT-UEPriority PRESENCE optional }| + { ID id-Enhanced-CoverageRestriction CRITICALITY ignore TYPE Enhanced-CoverageRestriction PRESENCE optional }| + { ID id-CEmodeBrestricted CRITICALITY ignore TYPE CEmodeBrestricted PRESENCE optional }| + { ID id-UERadioCapabilityID CRITICALITY reject TYPE UERadioCapabilityID PRESENCE optional }| + { ID id-MaskedIMEISV CRITICALITY ignore TYPE MaskedIMEISV PRESENCE optional }| + { ID id-OldAMF CRITICALITY reject TYPE AMFName PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- UE RADIO CAPABILITY ID MAPPING ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- UE RADIO CAPABILITY ID MAPPING REQUEST +-- +-- ************************************************************** + +UERadioCapabilityIDMappingRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UERadioCapabilityIDMappingRequestIEs} }, + ... +} + +UERadioCapabilityIDMappingRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-UERadioCapabilityID CRITICALITY reject TYPE UERadioCapabilityID PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- UE RADIO CAPABILITY ID MAPPING RESPONSE +-- +-- ************************************************************** + +UERadioCapabilityIDMappingResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {UERadioCapabilityIDMappingResponseIEs} }, + ... +} + +UERadioCapabilityIDMappingResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-UERadioCapabilityID CRITICALITY reject TYPE UERadioCapabilityID PRESENCE mandatory }| + { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- AMF CP Relocation Indication +-- +-- ************************************************************** + +AMFCPRelocationIndication ::= SEQUENCE { + protocolIEs ProtocolIE-Container { { AMFCPRelocationIndicationIEs} }, + ... +} + +AMFCPRelocationIndicationIEs NGAP-PROTOCOL-IES ::= { + { ID id-AMF-UE-NGAP-ID CRITICALITY reject TYPE AMF-UE-NGAP-ID PRESENCE mandatory }| + { ID id-RAN-UE-NGAP-ID CRITICALITY reject TYPE RAN-UE-NGAP-ID PRESENCE mandatory }| + { ID id-S-NSSAI CRITICALITY ignore TYPE S-NSSAI PRESENCE optional }| + { ID id-AllowedNSSAI CRITICALITY ignore TYPE AllowedNSSAI PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- MBS SESSION MANAGEMENT ELEMENTARY PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Broadcast Session Setup Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- BROADCAST SESSION SETUP REQUEST +-- +-- ************************************************************** + +BroadcastSessionSetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {BroadcastSessionSetupRequestIEs} }, + ... +} +-- WS modification: define a dedicated type +MBSSessionSetupOrModRequestTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING MBSSessionSetupOrModRequestTransfer) + +BroadcastSessionSetupRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-S-NSSAI CRITICALITY reject TYPE S-NSSAI PRESENCE mandatory }| + { ID id-MBS-ServiceArea CRITICALITY reject TYPE MBS-ServiceArea PRESENCE mandatory }| +-- WS modification: define a dedicated type +-- { ID id-MBSSessionSetupRequestTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MBSSessionSetupOrModRequestTransfer) PRESENCE mandatory }, + { ID id-MBSSessionSetupRequestTransfer CRITICALITY reject TYPE MBSSessionSetupOrModRequestTransfer-OCTET-STRING PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- BROADCAST SESSION SETUP RESPONSE +-- +-- ************************************************************** + +BroadcastSessionSetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {BroadcastSessionSetupResponseIEs} }, + ... +} + +-- WS modification: define a dedicated type +MBSSessionSetupOrModResponseTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING MBSSessionSetupOrModResponseTransfer) + +BroadcastSessionSetupResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| +-- WS modification: define a dedicated type +-- { ID id-MBSSessionSetupResponseTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MBSSessionSetupOrModResponseTransfer) PRESENCE optional }| + { ID id-MBSSessionSetupResponseTransfer CRITICALITY reject TYPE MBSSessionSetupOrModResponseTransfer-OCTET-STRING PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- BROADCAST SESSION SETUP FAILURE +-- +-- ************************************************************** + +BroadcastSessionSetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {BroadcastSessionSetupFailureIEs} }, + ... +} + +-- WS modification: define a dedicated type +MBSSessionSetupOrModFailureTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING MBSSessionSetupOrModFailureTransfer) + +BroadcastSessionSetupFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| +-- WS modification: define a dedicated type +-- { ID id-MBSSessionSetupFailureTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MBSSessionSetupOrModFailureTransfer ) PRESENCE optional }| + { ID id-MBSSessionSetupFailureTransfer CRITICALITY reject TYPE MBSSessionSetupOrModFailureTransfer-OCTET-STRING PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Broadcast Session Modification Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- BROADCAST SESSION MODIFICATION REQUEST +-- +-- ************************************************************** + +BroadcastSessionModificationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {BroadcastSessionModificationRequestIEs} }, + ... +} + +BroadcastSessionModificationRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-MBS-ServiceArea CRITICALITY reject TYPE MBS-ServiceArea PRESENCE optional }| +-- WS modification: define a dedicated type +-- { ID id-MBSSessionModificationRequestTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MBSSessionSetupOrModRequestTransfer) PRESENCE optional }, + { ID id-MBSSessionModificationRequestTransfer CRITICALITY reject TYPE MBSSessionSetupOrModRequestTransfer-OCTET-STRING PRESENCE optional }, ... +} + +-- ************************************************************** +-- +-- BROADCAST SESSION MODIFICATION RESPONSE +-- +-- ************************************************************** + +BroadcastSessionModificationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {BroadcastSessionModificationResponseIEs} }, + ... +} + +BroadcastSessionModificationResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| +-- WS modification: define a dedicated type +-- { ID id-MBSSessionModificationResponseTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MBSSessionSetupOrModResponseTransfer) PRESENCE optional }| + { ID id-MBSSessionModificationResponseTransfer CRITICALITY reject TYPE MBSSessionSetupOrModResponseTransfer-OCTET-STRING PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- BROADCAST SESSION MODIFICATION FAILURE +-- +-- ************************************************************** + +BroadcastSessionModificationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {BroadcastSessionModificationFailureIEs} }, + ... +} + +BroadcastSessionModificationFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| +-- WS modification: define a dedicated type +-- { ID id-MBSSessionModificationFailureTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MBSSessionSetupOrModFailureTransfer) PRESENCE optional }| + { ID id-MBSSessionModificationFailureTransfer CRITICALITY reject TYPE MBSSessionSetupOrModFailureTransfer-OCTET-STRING PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Broadcast Session Release Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- BROADCAST SESSION RELEASE REQUEST +-- +-- ************************************************************** + +BroadcastSessionReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {BroadcastSessionReleaseRequestIEs} }, + ... +} + +BroadcastSessionReleaseRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- Broadcast Session Release Required Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- BROADCAST SESSION RELEASE REQUIRED +-- +-- ************************************************************** + +BroadcastSessionReleaseRequired ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {BroadcastSessionReleaseRequiredIEs} }, + ... +} + +BroadcastSessionReleaseRequiredIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- BROADCAST SESSION RELEASE RESPONSE +-- +-- ************************************************************** + +BroadcastSessionReleaseResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {BroadcastSessionReleaseResponseIEs} }, + ... +} + +-- WS modification: defien a dedicated type +MBSSessionReleaseResponseTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING MBSSessionReleaseResponseTransfer) + +BroadcastSessionReleaseResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| +-- WS modification: define a dedicated type +-- { ID id-MBSSessionReleaseResponseTransfer CRITICALITY ignore TYPE OCTET STRING (CONTAINING MBSSessionReleaseResponseTransfer) PRESENCE optional }| + { ID id-MBSSessionReleaseResponseTransfer CRITICALITY ignore TYPE MBSSessionReleaseResponseTransfer-OCTET-STRING PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + + +-- ************************************************************** +-- +-- Distribution Setup Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- DISTRIBUTION SETUP REQUEST +-- +-- ************************************************************** + +DistributionSetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DistributionSetupRequestIEs} }, + ... +} + +-- WS modification: define a dedicated type +MBS-DistributionSetupRequestTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING MBS-DistributionSetupRequestTransfer) + +DistributionSetupRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-MBS-AreaSessionID CRITICALITY reject TYPE MBS-AreaSessionID PRESENCE optional }| +-- WS modification: define a dedicated type +-- { ID id-MBS-DistributionSetupRequestTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MBS-DistributionSetupRequestTransfer) PRESENCE mandatory }, + { ID id-MBS-DistributionSetupRequestTransfer CRITICALITY reject TYPE MBS-DistributionSetupRequestTransfer-OCTET-STRING PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- DISTRIBUTION SETUP RESPONSE +-- +-- ************************************************************** + +DistributionSetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DistributionSetupResponseIEs} }, + ... +} + +-- WS modification: define a dedicated type +MBS-DistributionSetupResponseTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING MBS-DistributionSetupResponseTransfer) + +DistributionSetupResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-MBS-AreaSessionID CRITICALITY reject TYPE MBS-AreaSessionID PRESENCE optional }| +-- WS modification: define a dedicated type +-- { ID id-MBS-DistributionSetupResponseTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MBS-DistributionSetupResponseTransfer) PRESENCE mandatory }| + { ID id-MBS-DistributionSetupResponseTransfer CRITICALITY reject TYPE MBS-DistributionSetupResponseTransfer-OCTET-STRING PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- DISTRIBUTION SETUP FAILURE +-- +-- ************************************************************** + +DistributionSetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DistributionSetupFailureIEs} }, + ... +} + +-- WS modification: define a dedicated type +MBS-DistributionSetupUnsuccessfulTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING MBS-DistributionSetupUnsuccessfulTransfer) + +DistributionSetupFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-MBS-AreaSessionID CRITICALITY reject TYPE MBS-AreaSessionID PRESENCE optional }| +-- WS modification: define a dedicated type +-- { ID id-MBS-DistributionSetupUnsuccessfulTransfer CRITICALITY ignore TYPE OCTET STRING (CONTAINING MBS-DistributionSetupUnsuccessfulTransfer) PRESENCE mandatory }| + { ID id-MBS-DistributionSetupUnsuccessfulTransfer CRITICALITY ignore TYPE MBS-DistributionSetupUnsuccessfulTransfer-OCTET-STRING PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Distribution Release Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- DISTRIBUTION RELEASE REQUEST +-- +-- ************************************************************** + +DistributionReleaseRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DistributionReleaseRequestIEs} }, + ... +} + +-- WS modification: define a dedicated type +MBS-DistributionReleaseRequestTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING MBS-DistributionReleaseRequestTransfer) + +DistributionReleaseRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-MBS-AreaSessionID CRITICALITY reject TYPE MBS-AreaSessionID PRESENCE optional }| +-- WS modification: define a dedicated type +-- { ID id-MBS-DistributionReleaseRequestTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MBS-DistributionReleaseRequestTransfer) PRESENCE mandatory }| + { ID id-MBS-DistributionReleaseRequestTransfer CRITICALITY reject TYPE MBS-DistributionReleaseRequestTransfer-OCTET-STRING PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- DISTRIBUTION RELEASE RESPONSE +-- +-- ************************************************************** + +DistributionReleaseResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {DistributionReleaseResponseIEs} }, + ... +} + +DistributionReleaseResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-MBS-AreaSessionID CRITICALITY reject TYPE MBS-AreaSessionID PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Multicast Session Activation Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- MULTICAST SESSION ACTIVATION REQUEST +-- +-- ************************************************************** + +MulticastSessionActivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MulticastSessionActivationRequestIEs} }, + ... +} + +-- WS modification: define a dedicated type +MulticastSessionActivationRequestTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING MulticastSessionActivationRequestTransfer) + +MulticastSessionActivationRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| +-- WS modification: define a dedicated type +-- { ID id-MulticastSessionActivationRequestTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MulticastSessionActivationRequestTransfer) PRESENCE mandatory }, + { ID id-MulticastSessionActivationRequestTransfer CRITICALITY reject TYPE MulticastSessionActivationRequestTransfer-OCTET-STRING PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- MULTICAST SESSION ACTIVATION RESPONSE +-- +-- ************************************************************** + +MulticastSessionActivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MulticastSessionActivationResponseIEs} }, + ... +} + +MulticastSessionActivationResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- MULTICAST SESSION ACTIVATION FAILURE +-- +-- ************************************************************** + +MulticastSessionActivationFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MulticastSessionActivationFailureIEs} }, + ... +} + +MulticastSessionActivationFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Multicast Session Deactivation Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- MULTICAST SESSION DEACTIVATION REQUEST +-- +-- ************************************************************** + +MulticastSessionDeactivationRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MulticastSessionDeactivationRequestIEs} }, + ... +} + +-- WS modification: define a dedicated type +MulticastSessionDeactivationRequestTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING MulticastSessionDeactivationRequestTransfer) + +MulticastSessionDeactivationRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| +-- WS modification: define a dedicated type +-- { ID id-MulticastSessionDeactivationRequestTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MulticastSessionDeactivationRequestTransfer) PRESENCE mandatory }, + { ID id-MulticastSessionDeactivationRequestTransfer CRITICALITY reject TYPE MulticastSessionDeactivationRequestTransfer-OCTET-STRING PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- MULTICAST SESSION DEACTIVATION RESPONSE +-- +-- ************************************************************** + +MulticastSessionDeactivationResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MulticastSessionDeactivationResponseIEs} }, + ... +} + +MulticastSessionDeactivationResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- Multicast Session Update Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- MULTICAST SESSION UPDATE REQUEST +-- +-- ************************************************************** + +MulticastSessionUpdateRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MulticastSessionUpdateRequestIEs} }, + ... +} + +-- WS modification: define a dedicated type +MulticastSessionUpdateRequestTransfer-OCTET-STRING ::= OCTET STRING (CONTAINING MulticastSessionUpdateRequestTransfer) + +MulticastSessionUpdateRequestIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-MBS-AreaSessionID CRITICALITY reject TYPE MBS-AreaSessionID PRESENCE optional }| +-- WS modification: define a dedicated type +-- { ID id-MulticastSessionUpdateRequestTransfer CRITICALITY reject TYPE OCTET STRING (CONTAINING MulticastSessionUpdateRequestTransfer) PRESENCE mandatory }, + { ID id-MulticastSessionUpdateRequestTransfer CRITICALITY reject TYPE MulticastSessionUpdateRequestTransfer-OCTET-STRING PRESENCE mandatory }, + ... +} + +-- ************************************************************** +-- +-- MULTICAST SESSION UPDATE RESPONSE +-- +-- ************************************************************** + +MulticastSessionUpdateResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MulticastSessionUpdateResponseIEs} }, + ... +} + +MulticastSessionUpdateResponseIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-MBS-AreaSessionID CRITICALITY reject TYPE MBS-AreaSessionID PRESENCE optional }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- MULTICAST SESSION UPDATE FAILURE +-- +-- ************************************************************** + +MulticastSessionUpdateFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MulticastSessionUpdateFailureIEs} }, + ... +} + +MulticastSessionUpdateFailureIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY reject TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-MBS-AreaSessionID CRITICALITY reject TYPE MBS-AreaSessionID PRESENCE optional }| + { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, + ... +} + +-- ************************************************************** +-- +-- MULTICAST GROUP PAGING ELEMENTARY PROCEDURE +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- MULTICAST GROUP PAGING +-- +-- ************************************************************** + +MulticastGroupPaging ::= SEQUENCE { + protocolIEs ProtocolIE-Container { {MulticastGroupPagingIEs} }, + ... +} + +MulticastGroupPagingIEs NGAP-PROTOCOL-IES ::= { + { ID id-MBS-SessionID CRITICALITY ignore TYPE MBS-SessionID PRESENCE mandatory }| + { ID id-MBS-ServiceArea CRITICALITY ignore TYPE MBS-ServiceArea PRESENCE optional }| + { ID id-MulticastGroupPagingAreaList CRITICALITY ignore TYPE MulticastGroupPagingAreaList PRESENCE mandatory }, + ... +} + + +END diff --git a/ttcn/LibNGAP/lib/asn1/NGAP_PDU_Descriptions.asn b/ttcn/LibNGAP/lib/asn1/NGAP_PDU_Descriptions.asn new file mode 100644 index 0000000000000000000000000000000000000000..dcf4704811dad867b97dde12640f59a19355c34b --- /dev/null +++ b/ttcn/LibNGAP/lib/asn1/NGAP_PDU_Descriptions.asn @@ -0,0 +1,888 @@ +-- 3GPP TS 38.413 V17.5.0 (2023-06) +-- 9.4.3 Elementary Procedure Definitions +-- ************************************************************** +-- +-- Elementary Procedure definitions +-- +-- ************************************************************** + +NGAP-PDU-Descriptions { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +ngran-Access (22) modules (3) ngap (1) version1 (1) ngap-PDU-Descriptions (0)} + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + + Criticality, + ProcedureCode +FROM NGAP-CommonDataTypes + + AMFConfigurationUpdate, + AMFConfigurationUpdateAcknowledge, + AMFConfigurationUpdateFailure, + AMFCPRelocationIndication, + AMFStatusIndication, + BroadcastSessionModificationFailure, + BroadcastSessionModificationRequest, + BroadcastSessionModificationResponse, + BroadcastSessionReleaseRequest, + BroadcastSessionReleaseRequired, + BroadcastSessionReleaseResponse, + BroadcastSessionSetupFailure, + BroadcastSessionSetupRequest, + BroadcastSessionSetupResponse, + CellTrafficTrace, + ConnectionEstablishmentIndication, + DeactivateTrace, + DistributionReleaseRequest, + DistributionReleaseResponse, + DistributionSetupFailure, + DistributionSetupRequest, + DistributionSetupResponse, + DownlinkNASTransport, + DownlinkNonUEAssociatedNRPPaTransport, + DownlinkRANConfigurationTransfer, + DownlinkRANEarlyStatusTransfer, + DownlinkRANStatusTransfer, + DownlinkUEAssociatedNRPPaTransport, + ErrorIndication, + HandoverCancel, + HandoverCancelAcknowledge, + HandoverCommand, + HandoverFailure, + HandoverNotify, + HandoverPreparationFailure, + HandoverRequest, + HandoverRequestAcknowledge, + HandoverRequired, + HandoverSuccess, + InitialContextSetupFailure, + InitialContextSetupRequest, + InitialContextSetupResponse, + InitialUEMessage, + LocationReport, + LocationReportingControl, + LocationReportingFailureIndication, + MulticastSessionActivationFailure, + MulticastSessionActivationRequest, + MulticastSessionActivationResponse, + MulticastSessionDeactivationRequest, + MulticastSessionDeactivationResponse, + MulticastSessionUpdateFailure, + MulticastSessionUpdateRequest, + MulticastSessionUpdateResponse, + MulticastGroupPaging, + NASNonDeliveryIndication, + NGReset, + NGResetAcknowledge, + NGSetupFailure, + NGSetupRequest, + NGSetupResponse, + OverloadStart, + OverloadStop, + Paging, + PathSwitchRequest, + PathSwitchRequestAcknowledge, + PathSwitchRequestFailure, + PDUSessionResourceModifyConfirm, + PDUSessionResourceModifyIndication, + PDUSessionResourceModifyRequest, + PDUSessionResourceModifyResponse, + PDUSessionResourceNotify, + PDUSessionResourceReleaseCommand, + PDUSessionResourceReleaseResponse, + PDUSessionResourceSetupRequest, + PDUSessionResourceSetupResponse, + PrivateMessage, + PWSCancelRequest, + PWSCancelResponse, + PWSFailureIndication, + PWSRestartIndication, + RANConfigurationUpdate, + RANConfigurationUpdateAcknowledge, + RANConfigurationUpdateFailure, + RANCPRelocationIndication, + RerouteNASRequest, + RetrieveUEInformation, + RRCInactiveTransitionReport, + SecondaryRATDataUsageReport, + TraceFailureIndication, + TraceStart, + UEContextModificationFailure, + UEContextModificationRequest, + UEContextModificationResponse, + UEContextReleaseCommand, + UEContextReleaseComplete, + UEContextReleaseRequest, + UEContextResumeRequest, + UEContextResumeResponse, + UEContextResumeFailure, + UEContextSuspendRequest, + UEContextSuspendResponse, + UEContextSuspendFailure, + UEInformationTransfer, + UERadioCapabilityCheckRequest, + UERadioCapabilityCheckResponse, + UERadioCapabilityIDMappingRequest, + UERadioCapabilityIDMappingResponse, + UERadioCapabilityInfoIndication, + UETNLABindingReleaseRequest, + UplinkNASTransport, + UplinkNonUEAssociatedNRPPaTransport, + UplinkRANConfigurationTransfer, + UplinkRANEarlyStatusTransfer, + UplinkRANStatusTransfer, + UplinkUEAssociatedNRPPaTransport, + WriteReplaceWarningRequest, + WriteReplaceWarningResponse, + UplinkRIMInformationTransfer, + DownlinkRIMInformationTransfer + +FROM NGAP-PDU-Contents + + id-AMFConfigurationUpdate, + id-AMFCPRelocationIndication, + id-AMFStatusIndication, + id-BroadcastSessionModification, + id-BroadcastSessionRelease, + id-BroadcastSessionReleaseRequired, + id-BroadcastSessionSetup, + id-CellTrafficTrace, + id-ConnectionEstablishmentIndication, + id-DeactivateTrace, + id-DistributionSetup, + id-DistributionRelease, + id-DownlinkNASTransport, + id-DownlinkNonUEAssociatedNRPPaTransport, + id-DownlinkRANConfigurationTransfer, + id-DownlinkRANEarlyStatusTransfer, + id-DownlinkRANStatusTransfer, + id-DownlinkUEAssociatedNRPPaTransport, + id-ErrorIndication, + id-HandoverCancel, + id-HandoverNotification, + id-HandoverPreparation, + id-HandoverResourceAllocation, + id-HandoverSuccess, + id-InitialContextSetup, + id-InitialUEMessage, + id-LocationReport, + id-LocationReportingControl, + id-LocationReportingFailureIndication, + id-MulticastSessionActivation, + id-MulticastSessionDeactivation, + id-MulticastSessionUpdate, + id-MulticastGroupPaging, + id-NASNonDeliveryIndication, + id-NGReset, + id-NGSetup, + id-OverloadStart, + id-OverloadStop, + id-Paging, + id-PathSwitchRequest, + id-PDUSessionResourceModify, + id-PDUSessionResourceModifyIndication, + id-PDUSessionResourceNotify, + id-PDUSessionResourceRelease, + id-PDUSessionResourceSetup, + id-PrivateMessage, + id-PWSCancel, + id-PWSFailureIndication, + id-PWSRestartIndication, + id-RANConfigurationUpdate, + id-RANCPRelocationIndication, + id-RerouteNASRequest, + id-RetrieveUEInformation, + id-RRCInactiveTransitionReport, + id-SecondaryRATDataUsageReport, + id-TraceFailureIndication, + id-TraceStart, + id-UEContextModification, + id-UEContextRelease, + id-UEContextReleaseRequest, + id-UEContextResume, + id-UEContextSuspend, + id-UEInformationTransfer, + id-UERadioCapabilityCheck, + id-UERadioCapabilityIDMapping, + id-UERadioCapabilityInfoIndication, + id-UETNLABindingRelease, + id-UplinkNASTransport, + id-UplinkNonUEAssociatedNRPPaTransport, + id-UplinkRANConfigurationTransfer, + id-UplinkRANEarlyStatusTransfer, + id-UplinkRANStatusTransfer, + id-UplinkUEAssociatedNRPPaTransport, + id-WriteReplaceWarning, + id-UplinkRIMInformationTransfer, + id-DownlinkRIMInformationTransfer + +FROM NGAP-Constants; + +-- ************************************************************** +-- +-- Interface Elementary Procedure Class +-- +-- ************************************************************** + +NGAP-ELEMENTARY-PROCEDURE ::= CLASS { + &InitiatingMessage , + &SuccessfulOutcome OPTIONAL, + &UnsuccessfulOutcome OPTIONAL, + &procedureCode ProcedureCode UNIQUE, + &criticality Criticality DEFAULT ignore +} + +WITH SYNTAX { + INITIATING MESSAGE &InitiatingMessage + [SUCCESSFUL OUTCOME &SuccessfulOutcome] + [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] + PROCEDURE CODE &procedureCode + [CRITICALITY &criticality] +} + +-- ************************************************************** +-- +-- Interface PDU Definition +-- +-- ************************************************************** + +NGAP-PDU ::= CHOICE { + initiatingMessage InitiatingMessage, + successfulOutcome SuccessfulOutcome, + unsuccessfulOutcome UnsuccessfulOutcome, + ... +} + +InitiatingMessage ::= SEQUENCE { + procedureCode NGAP-ELEMENTARY-PROCEDURE.&procedureCode ({NGAP-ELEMENTARY-PROCEDURES}), + criticality NGAP-ELEMENTARY-PROCEDURE.&criticality ({NGAP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value NGAP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({NGAP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +SuccessfulOutcome ::= SEQUENCE { + procedureCode NGAP-ELEMENTARY-PROCEDURE.&procedureCode ({NGAP-ELEMENTARY-PROCEDURES}), + criticality NGAP-ELEMENTARY-PROCEDURE.&criticality ({NGAP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value NGAP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({NGAP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +UnsuccessfulOutcome ::= SEQUENCE { + procedureCode NGAP-ELEMENTARY-PROCEDURE.&procedureCode ({NGAP-ELEMENTARY-PROCEDURES}), + criticality NGAP-ELEMENTARY-PROCEDURE.&criticality ({NGAP-ELEMENTARY-PROCEDURES}{@procedureCode}), + value NGAP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({NGAP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +-- ************************************************************** +-- +-- Interface Elementary Procedure List +-- +-- ************************************************************** + +NGAP-ELEMENTARY-PROCEDURES NGAP-ELEMENTARY-PROCEDURE ::= { + NGAP-ELEMENTARY-PROCEDURES-CLASS-1 | + NGAP-ELEMENTARY-PROCEDURES-CLASS-2, + ... +} + +NGAP-ELEMENTARY-PROCEDURES-CLASS-1 NGAP-ELEMENTARY-PROCEDURE ::= { + aMFConfigurationUpdate | + broadcastSessionModification | + broadcastSessionRelease | + broadcastSessionSetup | + distributionSetup | + distributionRelease | + handoverCancel | + handoverPreparation | + handoverResourceAllocation | + initialContextSetup | + multicastSessionActivation | + multicastSessionDeactivation | + multicastSessionUpdate | + nGReset | + nGSetup | + pathSwitchRequest | + pDUSessionResourceModify | + pDUSessionResourceModifyIndication | + pDUSessionResourceRelease | + pDUSessionResourceSetup | + pWSCancel | + rANConfigurationUpdate | + uEContextModification | + uEContextRelease | + uEContextResume | + uEContextSuspend | + uERadioCapabilityCheck | + uERadioCapabilityIDMapping | + writeReplaceWarning, + ... +} + +NGAP-ELEMENTARY-PROCEDURES-CLASS-2 NGAP-ELEMENTARY-PROCEDURE ::= { + aMFCPRelocationIndication | + aMFStatusIndication | + broadcastSessionReleaseRequired | + cellTrafficTrace | + connectionEstablishmentIndication | + deactivateTrace | + downlinkNASTransport | + downlinkNonUEAssociatedNRPPaTransport | + downlinkRANConfigurationTransfer | + downlinkRANEarlyStatusTransfer | + downlinkRANStatusTransfer | + downlinkRIMInformationTransfer | + downlinkUEAssociatedNRPPaTransport | + errorIndication | + handoverNotification | + handoverSuccess | + initialUEMessage | + locationReport | + locationReportingControl | + locationReportingFailureIndication | + multicastGroupPaging | + nASNonDeliveryIndication | + overloadStart | + overloadStop | + paging | + pDUSessionResourceNotify | + privateMessage | + pWSFailureIndication | + pWSRestartIndication | + rANCPRelocationIndication | + rerouteNASRequest | + retrieveUEInformation | + rRCInactiveTransitionReport | + secondaryRATDataUsageReport | + traceFailureIndication | + traceStart | + uEContextReleaseRequest | + uEInformationTransfer | + uERadioCapabilityInfoIndication | + uETNLABindingRelease | + uplinkNASTransport | + uplinkNonUEAssociatedNRPPaTransport | + uplinkRANConfigurationTransfer | + uplinkRANEarlyStatusTransfer | + uplinkRANStatusTransfer | + uplinkRIMInformationTransfer | + uplinkUEAssociatedNRPPaTransport, + ... + +} + +-- ************************************************************** +-- +-- Interface Elementary Procedures +-- +-- ************************************************************** + +aMFConfigurationUpdate NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE AMFConfigurationUpdate + SUCCESSFUL OUTCOME AMFConfigurationUpdateAcknowledge + UNSUCCESSFUL OUTCOME AMFConfigurationUpdateFailure + PROCEDURE CODE id-AMFConfigurationUpdate + CRITICALITY reject +} + +aMFCPRelocationIndication NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE AMFCPRelocationIndication + PROCEDURE CODE id-AMFCPRelocationIndication + CRITICALITY reject +} + +aMFStatusIndication NGAP-ELEMENTARY-PROCEDURE ::={ + INITIATING MESSAGE AMFStatusIndication + PROCEDURE CODE id-AMFStatusIndication + CRITICALITY ignore +} + +broadcastSessionModification NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE BroadcastSessionModificationRequest + SUCCESSFUL OUTCOME BroadcastSessionModificationResponse + UNSUCCESSFUL OUTCOME BroadcastSessionModificationFailure + PROCEDURE CODE id-BroadcastSessionModification + CRITICALITY reject +} + +broadcastSessionRelease NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE BroadcastSessionReleaseRequest + SUCCESSFUL OUTCOME BroadcastSessionReleaseResponse + PROCEDURE CODE id-BroadcastSessionRelease + CRITICALITY reject +} + +broadcastSessionReleaseRequired NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE BroadcastSessionReleaseRequired + PROCEDURE CODE id-BroadcastSessionReleaseRequired + CRITICALITY reject +} + +broadcastSessionSetup NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE BroadcastSessionSetupRequest + SUCCESSFUL OUTCOME BroadcastSessionSetupResponse + UNSUCCESSFUL OUTCOME BroadcastSessionSetupFailure + PROCEDURE CODE id-BroadcastSessionSetup + CRITICALITY reject +} + +cellTrafficTrace NGAP-ELEMENTARY-PROCEDURE ::={ + INITIATING MESSAGE CellTrafficTrace + PROCEDURE CODE id-CellTrafficTrace + CRITICALITY ignore +} + +connectionEstablishmentIndication NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ConnectionEstablishmentIndication + PROCEDURE CODE id-ConnectionEstablishmentIndication + CRITICALITY reject +} + +deactivateTrace NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DeactivateTrace + PROCEDURE CODE id-DeactivateTrace + CRITICALITY ignore +} + +distributionSetup NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DistributionSetupRequest + SUCCESSFUL OUTCOME DistributionSetupResponse + UNSUCCESSFUL OUTCOME DistributionSetupFailure + PROCEDURE CODE id-DistributionSetup + CRITICALITY reject +} + +distributionRelease NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DistributionReleaseRequest + SUCCESSFUL OUTCOME DistributionReleaseResponse + PROCEDURE CODE id-DistributionRelease + CRITICALITY reject +} + +downlinkNASTransport NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DownlinkNASTransport + PROCEDURE CODE id-DownlinkNASTransport + CRITICALITY ignore +} + +downlinkNonUEAssociatedNRPPaTransport NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DownlinkNonUEAssociatedNRPPaTransport + PROCEDURE CODE id-DownlinkNonUEAssociatedNRPPaTransport + CRITICALITY ignore +} + +downlinkRANConfigurationTransfer NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DownlinkRANConfigurationTransfer + PROCEDURE CODE id-DownlinkRANConfigurationTransfer + CRITICALITY ignore +} + +downlinkRANEarlyStatusTransfer NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DownlinkRANEarlyStatusTransfer + PROCEDURE CODE id-DownlinkRANEarlyStatusTransfer + CRITICALITY ignore +} + +downlinkRANStatusTransfer NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DownlinkRANStatusTransfer + PROCEDURE CODE id-DownlinkRANStatusTransfer + CRITICALITY ignore +} + +downlinkUEAssociatedNRPPaTransport NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DownlinkUEAssociatedNRPPaTransport + PROCEDURE CODE id-DownlinkUEAssociatedNRPPaTransport + CRITICALITY ignore +} + +errorIndication NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE ErrorIndication + PROCEDURE CODE id-ErrorIndication + CRITICALITY ignore +} + +handoverCancel NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE HandoverCancel + SUCCESSFUL OUTCOME HandoverCancelAcknowledge + PROCEDURE CODE id-HandoverCancel + CRITICALITY reject +} + +handoverNotification NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE HandoverNotify + PROCEDURE CODE id-HandoverNotification + CRITICALITY ignore +} + +handoverPreparation NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE HandoverRequired + SUCCESSFUL OUTCOME HandoverCommand + UNSUCCESSFUL OUTCOME HandoverPreparationFailure + PROCEDURE CODE id-HandoverPreparation + CRITICALITY reject +} + +handoverResourceAllocation NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE HandoverRequest + SUCCESSFUL OUTCOME HandoverRequestAcknowledge + UNSUCCESSFUL OUTCOME HandoverFailure + PROCEDURE CODE id-HandoverResourceAllocation + CRITICALITY reject +} + +handoverSuccess NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE HandoverSuccess + PROCEDURE CODE id-HandoverSuccess + CRITICALITY ignore +} + +initialContextSetup NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE InitialContextSetupRequest + SUCCESSFUL OUTCOME InitialContextSetupResponse + UNSUCCESSFUL OUTCOME InitialContextSetupFailure + PROCEDURE CODE id-InitialContextSetup + CRITICALITY reject +} + +initialUEMessage NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE InitialUEMessage + PROCEDURE CODE id-InitialUEMessage + CRITICALITY ignore +} + +locationReport NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE LocationReport + PROCEDURE CODE id-LocationReport + CRITICALITY ignore +} + +locationReportingControl NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE LocationReportingControl + PROCEDURE CODE id-LocationReportingControl + CRITICALITY ignore +} + +locationReportingFailureIndication NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE LocationReportingFailureIndication + PROCEDURE CODE id-LocationReportingFailureIndication + CRITICALITY ignore +} + +multicastSessionActivation NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE MulticastSessionActivationRequest + SUCCESSFUL OUTCOME MulticastSessionActivationResponse + UNSUCCESSFUL OUTCOME MulticastSessionActivationFailure + PROCEDURE CODE id-MulticastSessionActivation + CRITICALITY reject +} + +multicastSessionDeactivation NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE MulticastSessionDeactivationRequest + SUCCESSFUL OUTCOME MulticastSessionDeactivationResponse + PROCEDURE CODE id-MulticastSessionDeactivation + CRITICALITY reject +} + +multicastSessionUpdate NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE MulticastSessionUpdateRequest + SUCCESSFUL OUTCOME MulticastSessionUpdateResponse + UNSUCCESSFUL OUTCOME MulticastSessionUpdateFailure + PROCEDURE CODE id-MulticastSessionUpdate + CRITICALITY reject +} + +multicastGroupPaging NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE MulticastGroupPaging + PROCEDURE CODE id-MulticastGroupPaging + CRITICALITY ignore +} + +nASNonDeliveryIndication NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE NASNonDeliveryIndication + PROCEDURE CODE id-NASNonDeliveryIndication + CRITICALITY ignore +} + +nGReset NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE NGReset + SUCCESSFUL OUTCOME NGResetAcknowledge + PROCEDURE CODE id-NGReset + CRITICALITY reject +} + +nGSetup NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE NGSetupRequest + SUCCESSFUL OUTCOME NGSetupResponse + UNSUCCESSFUL OUTCOME NGSetupFailure + PROCEDURE CODE id-NGSetup + CRITICALITY reject +} + +overloadStart NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE OverloadStart + PROCEDURE CODE id-OverloadStart + CRITICALITY ignore +} + +overloadStop NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE OverloadStop + PROCEDURE CODE id-OverloadStop + CRITICALITY reject +} + +paging NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE Paging + PROCEDURE CODE id-Paging + CRITICALITY ignore +} + +pathSwitchRequest NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PathSwitchRequest + SUCCESSFUL OUTCOME PathSwitchRequestAcknowledge + UNSUCCESSFUL OUTCOME PathSwitchRequestFailure + PROCEDURE CODE id-PathSwitchRequest + CRITICALITY reject +} + +pDUSessionResourceModify NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PDUSessionResourceModifyRequest + SUCCESSFUL OUTCOME PDUSessionResourceModifyResponse + PROCEDURE CODE id-PDUSessionResourceModify + CRITICALITY reject +} + +pDUSessionResourceModifyIndication NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PDUSessionResourceModifyIndication + SUCCESSFUL OUTCOME PDUSessionResourceModifyConfirm + PROCEDURE CODE id-PDUSessionResourceModifyIndication + CRITICALITY reject +} + +pDUSessionResourceNotify NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PDUSessionResourceNotify + PROCEDURE CODE id-PDUSessionResourceNotify + CRITICALITY ignore +} + +pDUSessionResourceRelease NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PDUSessionResourceReleaseCommand + SUCCESSFUL OUTCOME PDUSessionResourceReleaseResponse + PROCEDURE CODE id-PDUSessionResourceRelease + CRITICALITY reject +} + +pDUSessionResourceSetup NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PDUSessionResourceSetupRequest + SUCCESSFUL OUTCOME PDUSessionResourceSetupResponse + PROCEDURE CODE id-PDUSessionResourceSetup + CRITICALITY reject +} + +privateMessage NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PrivateMessage + PROCEDURE CODE id-PrivateMessage + CRITICALITY ignore +} + +pWSCancel NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PWSCancelRequest + SUCCESSFUL OUTCOME PWSCancelResponse + PROCEDURE CODE id-PWSCancel + CRITICALITY reject +} + +pWSFailureIndication NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PWSFailureIndication + PROCEDURE CODE id-PWSFailureIndication + CRITICALITY ignore +} + +pWSRestartIndication NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE PWSRestartIndication + PROCEDURE CODE id-PWSRestartIndication + CRITICALITY ignore +} + +rANConfigurationUpdate NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE RANConfigurationUpdate + SUCCESSFUL OUTCOME RANConfigurationUpdateAcknowledge + UNSUCCESSFUL OUTCOME RANConfigurationUpdateFailure + PROCEDURE CODE id-RANConfigurationUpdate + CRITICALITY reject +} + +rANCPRelocationIndication NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE RANCPRelocationIndication + PROCEDURE CODE id-RANCPRelocationIndication + CRITICALITY reject +} + +rerouteNASRequest NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE RerouteNASRequest + PROCEDURE CODE id-RerouteNASRequest + CRITICALITY reject +} + + +retrieveUEInformation NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE RetrieveUEInformation + PROCEDURE CODE id-RetrieveUEInformation + CRITICALITY reject +} + +rRCInactiveTransitionReport NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE RRCInactiveTransitionReport + PROCEDURE CODE id-RRCInactiveTransitionReport + CRITICALITY ignore +} + +secondaryRATDataUsageReport NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE SecondaryRATDataUsageReport + PROCEDURE CODE id-SecondaryRATDataUsageReport + CRITICALITY ignore +} + +traceFailureIndication NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE TraceFailureIndication + PROCEDURE CODE id-TraceFailureIndication + CRITICALITY ignore +} + +traceStart NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE TraceStart + PROCEDURE CODE id-TraceStart + CRITICALITY ignore +} + +uEContextModification NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEContextModificationRequest + SUCCESSFUL OUTCOME UEContextModificationResponse + UNSUCCESSFUL OUTCOME UEContextModificationFailure + PROCEDURE CODE id-UEContextModification + CRITICALITY reject +} + +uEContextRelease NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEContextReleaseCommand + SUCCESSFUL OUTCOME UEContextReleaseComplete + PROCEDURE CODE id-UEContextRelease + CRITICALITY reject +} + +uEContextReleaseRequest NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEContextReleaseRequest + PROCEDURE CODE id-UEContextReleaseRequest + CRITICALITY ignore +} + +uEContextResume NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEContextResumeRequest + SUCCESSFUL OUTCOME UEContextResumeResponse + UNSUCCESSFUL OUTCOME UEContextResumeFailure + PROCEDURE CODE id-UEContextResume + CRITICALITY reject +} + +uEContextSuspend NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEContextSuspendRequest + SUCCESSFUL OUTCOME UEContextSuspendResponse + UNSUCCESSFUL OUTCOME UEContextSuspendFailure + PROCEDURE CODE id-UEContextSuspend + CRITICALITY reject +} + +uEInformationTransfer NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UEInformationTransfer + PROCEDURE CODE id-UEInformationTransfer + CRITICALITY reject +} + +uERadioCapabilityCheck NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UERadioCapabilityCheckRequest + SUCCESSFUL OUTCOME UERadioCapabilityCheckResponse + PROCEDURE CODE id-UERadioCapabilityCheck + CRITICALITY reject +} + +uERadioCapabilityIDMapping NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UERadioCapabilityIDMappingRequest + SUCCESSFUL OUTCOME UERadioCapabilityIDMappingResponse + PROCEDURE CODE id-UERadioCapabilityIDMapping + CRITICALITY reject +} + +uERadioCapabilityInfoIndication NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UERadioCapabilityInfoIndication + PROCEDURE CODE id-UERadioCapabilityInfoIndication + CRITICALITY ignore +} + +uETNLABindingRelease NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UETNLABindingReleaseRequest + PROCEDURE CODE id-UETNLABindingRelease + CRITICALITY ignore +} + +uplinkNASTransport NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UplinkNASTransport + PROCEDURE CODE id-UplinkNASTransport + CRITICALITY ignore +} + +uplinkNonUEAssociatedNRPPaTransport NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UplinkNonUEAssociatedNRPPaTransport + PROCEDURE CODE id-UplinkNonUEAssociatedNRPPaTransport + CRITICALITY ignore +} + +uplinkRANConfigurationTransfer NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UplinkRANConfigurationTransfer + PROCEDURE CODE id-UplinkRANConfigurationTransfer + CRITICALITY ignore +} + +uplinkRANEarlyStatusTransfer NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UplinkRANEarlyStatusTransfer + PROCEDURE CODE id-UplinkRANEarlyStatusTransfer + CRITICALITY reject +} + +uplinkRANStatusTransfer NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UplinkRANStatusTransfer + PROCEDURE CODE id-UplinkRANStatusTransfer + CRITICALITY ignore +} + +uplinkUEAssociatedNRPPaTransport NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UplinkUEAssociatedNRPPaTransport + PROCEDURE CODE id-UplinkUEAssociatedNRPPaTransport + CRITICALITY ignore +} + +writeReplaceWarning NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE WriteReplaceWarningRequest + SUCCESSFUL OUTCOME WriteReplaceWarningResponse + PROCEDURE CODE id-WriteReplaceWarning + CRITICALITY reject +} + +uplinkRIMInformationTransfer NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE UplinkRIMInformationTransfer + PROCEDURE CODE id-UplinkRIMInformationTransfer + CRITICALITY ignore +} + +downlinkRIMInformationTransfer NGAP-ELEMENTARY-PROCEDURE ::= { + INITIATING MESSAGE DownlinkRIMInformationTransfer + PROCEDURE CODE id-DownlinkRIMInformationTransfer + CRITICALITY ignore +} + +END diff --git a/ttcn/LibNGAP/lib/asn1/converter-example.mk b/ttcn/LibNGAP/lib/asn1/converter-example.mk new file mode 100644 index 0000000000000000000000000000000000000000..15c6946f25e5ff9635eea25e855a23d5e5907d0f --- /dev/null +++ b/ttcn/LibNGAP/lib/asn1/converter-example.mk @@ -0,0 +1,33 @@ +include Makefile.am.libasncodec + +LIBS += -lm +CFLAGS += $(ASN_MODULE_CFLAGS) -DASN_PDU_COLLECTION -I. +ASN_LIBRARY ?= libasncodec.a +ASN_PROGRAM ?= converter-example +ASN_PROGRAM_SRCS ?= \ + converter-example.c\ + pdu_collection.c + +all: $(ASN_PROGRAM) + +$(ASN_PROGRAM): $(ASN_LIBRARY) $(ASN_PROGRAM_SRCS:.c=.o) + $(CC) $(CFLAGS) $(CPPFLAGS) -o $(ASN_PROGRAM) $(ASN_PROGRAM_SRCS:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS) + +$(ASN_LIBRARY): $(ASN_MODULE_SRCS:.c=.o) + $(AR) rcs $@ $(ASN_MODULE_SRCS:.c=.o) + +.SUFFIXES: +.SUFFIXES: .c .o + +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< + +clean: + rm -f $(ASN_PROGRAM) $(ASN_LIBRARY) + rm -f $(ASN_MODULE_SRCS:.c=.o) $(ASN_PROGRAM_SRCS:.c=.o) + +regen: regenerate-from-asn1-source + +regenerate-from-asn1-source: + asn1c NGAP_CommonDataTypes.asn + diff --git a/ttcn/LibNGAP/lib/asn1/module.mk b/ttcn/LibNGAP/lib/asn1/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..047fef3bcccfa69dfe551cc1171d26b4ce4e9537 --- /dev/null +++ b/ttcn/LibNGAP/lib/asn1/module.mk @@ -0,0 +1,2 @@ +sources := NGAP_CommonDataTypes.asn NGAP_Constants.asn NGAP_Containers.asn NGAP_IEs.asn NGAP_PDU_Contents.asn NGAP_PDU_Descriptions.asn + diff --git a/ttcn/LibNGAP/lib_system/LibNGAP_Interface.ttcn b/ttcn/LibNGAP/lib_system/LibNGAP_Interface.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..7a46039f50cd13bf6d75556d8641f7d203acb7dd --- /dev/null +++ b/ttcn/LibNGAP/lib_system/LibNGAP_Interface.ttcn @@ -0,0 +1,77 @@ +/** + * @author ETSI / STF + * @version $URL:$ + * $Id:$ + * @desc This module provides the types used by the test component for NGAP tests. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI TS / 3GPP TS + */ +module LibNGAP_Interface { + + // LibCommon + import from LibCommon_Sync all; + import from LibCommon_Time all; + + // LibNGAP + import from NGAP_IEs language "ASN.1:1997" all; + import from NGAP_PDU_Descriptions language "ASN.1:1997" all; + import from LibNGAP_Pixits all; + + group portDefinitions { + + /** + * @desc NGAP protocol port + */ + type port NGAPPort message { + inout NGAP_PDU + } // End of type NGAPPort + + } // End of group portDefinitions + + group interfacePorts { + type component NGAPComponent extends SelfSyncComp { + // Port + port NGAPPort N2_gNBaMF_P; + + // Global variables + + var boolean vc_serverStop:=false; + + // test adapter params + var charstring vc_ETS_address := ""; //defined in init + var charstring vc_ETS_address2 := ""; //defined in init + var integer vc_ETS_port := 3868; //defined in init + var integer vc_ETS_port2 := 3869; //defined in init + var charstring vc_SUT_address := ""; //defined in init + var integer vc_SUT_port := 3868; //defined in init + + + var NGAP_PDU vc_sendNGAP_PDU ; + var NGAP_PDU vc_recvNGAP_PDU ; + var NGAP_PDU vc_recvNGAP_PDUDefault ; //global variable defined to save Dimeter message received within default altstep + + // Init of values at component started + // Note: generation of following MME and ENB UE IDs can be done randomly in init + //var AMF_UE_NGAP_ID vc_AMF_UE_ID := 10; + //var GNB_UE_NGAP_ID vc_gNB_UE_ID := 11; + + // General timers + timer tc_wait := PX_NGAP_TWAIT; + timer tc_noac := PX_TNOAC; + timer tc_delay := 0.3; // delay next Request + // FSCOM: TTCN-3 timer are in seconds (ETSI ES 201 873-1 V4.16.1 (2024-10) Clause 12 Declaring timers) + + // Variables for storing default references + var default vc_default_ngap; + var default vc_def_catchSyncStop_ngap; + + } // End of type component NGAPComponent + + + } // End of group interfacePorts + +} // End of module LibNGAP_Interface + diff --git a/ttcn/LibNGAP/lib_system/LibNGAP_Steps.ttcn b/ttcn/LibNGAP/lib_system/LibNGAP_Steps.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..e85d9c51a23b9daa987ad92edf93b6e6eb7a683a --- /dev/null +++ b/ttcn/LibNGAP/lib_system/LibNGAP_Steps.ttcn @@ -0,0 +1,388 @@ +/** + * @author ETSI / + * @version $URL$ + * $Id$ + * @desc This module provides functions used in NGAP. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI TS / 3GPP TS + */ +module LibNGAP_Steps { + + // LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl all; + import from LibCommon_BasicTypesAndValues all; + + // LibNGAP + import from NGAP_CommonDataTypes language "ASN.1:1997" all; + import from NGAP_PDU_Descriptions language "ASN.1:1997" all; + import from NGAP_IEs language "ASN.1:1997" all; + + import from LibNGAP_TypesAndValues all; + import from LibNGAP_Interface all; + import from LibNGAP_Pixits all; + import from LibNGAP_Templates all; + + /** + * @desc Common functions description + */ + group commonFunctions { + + } // End of group commonFunctions + + /** + * @desc Receive functions description + */ + group receivePDU { + + /** + * @desc This is a test step that assign common NGAP + * @param p_PDU Extract the message payload from the NGAP PDU + */ + function f_NGAPPDU_Get( + inout NGAP_PDU p_PDU + ) runs on NGAPComponent { + + vc_recvNGAP_PDU := p_PDU; + + if (ischosen(p_PDU.initiatingMessage)) { + // Nothing to do + } + if (ischosen(p_PDU.successfulOutcome)) { + // Nothing to do + } + if (ischosen(p_PDU.unsuccessfulOutcome)) { + // Nothing to do + } + } // End of function f_NGAPPDU_Get + + /** + * @desc Receive NGAP PDU from protocol port + * @param p_PDU template of the message to be received + */ + function f_recv_NGAP_PDU( + in template NGAP_PDU p_PDU + ) runs on NGAPComponent { + var NGAP_PDU v_PDU; + + log(">>> f_recv_NGAP_PDU", p_PDU); + tc_wait.start; + alt { + [] N2_gNBaMF_P.receive(p_PDU) -> value v_PDU { + log("f_recv_NGAP_PDU: Got it", v_PDU); + tc_wait.stop; + f_NGAPPDU_Get(v_PDU) + } + [] tc_wait.timeout { + setverdict(inconc,"*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***"); + //Stop the component in case of timeout + all timer.stop; + f_componentStop(); + } + } + + } // End of function f_recv_NGAP_PDU + + /** + * @desc Receive NGAP PDU with InitiatingMessage payload from protocol port + * @param p_initiatingMessage Receive template for InitiatingMessage message + */ + function f_recv_NGAP_initiatingMessage( + template (present) InitiatingMessage p_initiatingMessage := ? + ) runs on NGAPComponent { + f_recv_NGAP_PDU( { initiatingMessage := p_initiatingMessage }) + } // End of function f_recv_NGAP_initiatingMessage + + /** + * @desc Receive NGAP PDU with SuccessfulOutcome payload from protocol port + * @param p_successfulOutcome Receive template for SuccessfulOutcome message + */ + function f_recv_NGAP_successfulOutcome( + template (present) SuccessfulOutcome p_successfulOutcome := ? + ) runs on NGAPComponent { + f_recv_NGAP_PDU( {successfulOutcome := p_successfulOutcome}) + } // End of f_recv_NGAP_successfulOutcome + + /** + * @desc Receive NGAP PDU with UnsuccessfulOutcome payload from protocol port + * @param p_unsuccessfulOutcome Receive template for UnsuccessfulOutcome message + */ + function f_recv_NGAP_unsuccessfulOutcome( + template (present) UnsuccessfulOutcome p_unsuccessfulOutcome := ? + ) runs on NGAPComponent { + f_recv_NGAP_PDU( {unsuccessfulOutcome := p_unsuccessfulOutcome}) + } // End of function f_recv_NGAP_unsuccessfulOutcome + + + } // End of group receivePDU + + /** + * @desc Send functions description + */ + group sendPDU { + + /** + * @desc This is a test step that assign common NGAP + * @param p_PDU The NGAP protocol message to set up + */ + function f_NGAPPDU_Set( + inout template (value) NGAP_PDU p_PDU + ) runs on NGAPComponent { + + if (ischosen(p_PDU.initiatingMessage)) { + vc_sendNGAP_PDU:=valueof(p_PDU); + } + if (ischosen(p_PDU.successfulOutcome)) { + vc_sendNGAP_PDU:=valueof(p_PDU); + } + if (ischosen(p_PDU.unsuccessfulOutcome)) { + vc_sendNGAP_PDU:=valueof(p_PDU); + } + + } // End of function f_NGAPPDU_Set + + /** + * @desc Send NGAP PDU to protocol port + * @param p_PDU template value message to be send + */ + function f_send_NGAP_PDU( + in template (value) NGAP_PDU p_PDU + ) runs on NGAPComponent { + log(">>> f_send_NGAP_PDU: ", p_PDU) + f_NGAPPDU_Set(p_PDU); + log("f_send_NGAP_PDU: vc_sendNGAP_PDU: ", vc_sendNGAP_PDU) + N2_gNBaMF_P.send(p_PDU); + } // End of function f_send_NGAPPDU + + /** + * @desc Send NGAP PDU with InitiatingMessage payload from protocol port + * @param p_initiatingMessage Send value template for InitiatingMessage message + */ + function f_send_NGAP_initiatingMessage( + in template (value) InitiatingMessage p_initiatingMessage, + in template (value) Criticality p_criticality := reject + ) runs on NGAPComponent { + f_send_NGAP_PDU( {initiatingMessage := p_initiatingMessage}) + } // End of function f_send_NGAP_initiatingMessage + + /** + * @desc Send NGAP PDU with SuccessfulOutcome payload from protocol port + * @param p_successfulOutcome Send value template for SuccessfulOutcome message + */ + function f_send_NGAP_successfulOutcome( + in template (value) SuccessfulOutcome p_successfulOutcome + ) runs on NGAPComponent { + f_send_NGAP_PDU( {successfulOutcome := p_successfulOutcome}) + } // End of function f_send_NGAP_successfulOutcome + + /** + * @desc Send NGAP PDU with UnsuccessfulOutcome payload from protocol port + * @param p_unsuccessfulOutcome Send value template for UnsuccessfulOutcome message + */ + function f_send_NGAP_unsuccessfulOutcome( + in template (value) UnsuccessfulOutcome p_unsuccessfulOutcome + ) runs on NGAPComponent { + f_send_NGAP_PDU( {unsuccessfulOutcome := p_unsuccessfulOutcome}) + } // End of function f_send_NGAP_unsuccessfulOutcome + + } // End of group sendPDU + + /** + * @desc Setup full procedure functions + * @see ETSI TS + */ + group fullProcedures { + } // End of group fullProcedures + + group externalFunctions { + } // End of group externalFunctions + + group preambles { + + group preamble_NGAP{ + + /** + * @desc + * @verdict + */ + function f_preambleNGAP_MME() + runs on NGAPComponent { + // Nothing to do + } // End of function f_preambleNGAP_MME + + /** + * @desc + * @verdict + */ + function f_preambleNGAP_eNB() + runs on NGAPComponent { + // Nothing to do + } // End of function f_preambleNGAP_eNB + + } // End of group preamble_NGAP + + } // End of group preambles + + group postambles { + + group postamble_NGAP{ + + /** + * @desc + * @verdict + */ + function f_postambleNGAP_gNB() + runs on NGAPComponent { + // Nothing to do + } // End of function f_postambleNGAP_gNB + + /** + * @desc + * @verdict + */ + function f_postambleNGAP_AMF() + runs on NGAPComponent { + // Nothing to do + } // End of function f_postambleNGAP_AMF + + } // End of group postamble_NGAP + + } // End of group postambles + + /** + * @desc Global 'altstep' statements description + */ + group globalSteps { + + /** + * @desc This is a test step that init NGAP component + */ + function f_NGAP_Init_Component() + runs on NGAPComponent { + // Nothing to do + } // End of function f_NGAP_Init_Component + + /** + * @desc Component termination + */ + function f_NGAP_terminate_component() + runs on NGAPComponent { + + log("component terminated - forced!"); + deactivate; + stop; + } // End of function f_NGAP_terminate_component + + /** + * @desc Component termination + */ + function f_componentStop() + runs on NGAPComponent { + + syncPort.send(m_syncClientStop); + N2_gNBaMF_P.clear; + stop; + } // End of function f_componentStop + + /** + * @desc Original copied from older LibCommon_VerdictControl + */ + function f_getVerdict() // FIXME Are you sure we really need it??? + return FncRetCode { + + var FncRetCode v_ret := e_error; + if (getverdict == pass or getverdict == none) { + v_ret := e_success; + } + return v_ret; + } // End of function + + } // End of group globalSteps + + /** + * @desc Default 'altstep' statements description + */ + group defaultsTestStep { + + /** + * @desc + * @verdict + */ + altstep a_defaultNGAP() + runs on NGAPComponent { + [] any timer.timeout { + all timer.stop; + if (vc_serverStop==false) { + f_selfOrClientSyncAndVerdict("error", e_timeout); + } + else { + stop; + } + } + [] N2_gNBaMF_P.receive (NGAP_PDU:{initiatingMessage := ?}) -> value vc_recvNGAP_PDUDefault { + repeat; + } + [] N2_gNBaMF_P.receive (NGAP_PDU:{successfulOutcome := ?}) -> value vc_recvNGAP_PDUDefault { + repeat; + } + [] N2_gNBaMF_P.receive (NGAP_PDU:{unsuccessfulOutcome := ?}) -> value vc_recvNGAP_PDUDefault { + repeat; + } + [] N2_gNBaMF_P.receive (NGAP_PDU:?) -> value vc_recvNGAP_PDUDefault { + if (vc_serverStop==false) { + f_selfOrClientSyncAndVerdict("error", e_error); + } + else { + stop; + } + } + [] N2_gNBaMF_P.receive { + if (vc_serverStop==false) { + f_selfOrClientSyncAndVerdict("error", e_error); + } + else { + stop; + } + } + [] a_shutdown() { + // Process temination on error + log("*** a_defaultNGAP() : Process temination on error ***"); + // Terminate component execution + stop; + } + } // End of altstep a_defaultNGAP + + altstep a_defaultNGAP_MME() + runs on NGAPComponent { + [] any timer.timeout { + all timer.stop; + if (vc_serverStop==false) { + f_selfOrClientSyncAndVerdict("error", e_timeout); + } + else { + stop; + } + } + // Note: possible unscollicited messages should be filtered + } // End of altstep a_defaultNGAP_MME + + altstep a_defaultNGAP_eNB() + runs on NGAPComponent { + [] any timer.timeout { + all timer.stop; + if (vc_serverStop==false) { + f_selfOrClientSyncAndVerdict("error", e_timeout); + } + else { + stop; + } + } + // Note: possible unscollicited messages should be filtered + } // End of altstep a_defaultNGAP_eNB + + } // End of group defaultsTestStep + +} // End of module LibNGAP_Steps diff --git a/ttcn/LibNGAP/module.mk b/ttcn/LibNGAP/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..cabcab4a41d313a264f362a08d55957dd2f53f2a --- /dev/null +++ b/ttcn/LibNGAP/module.mk @@ -0,0 +1,11 @@ +sources := \ + lib/LibNGAP_TypesAndValues.ttcn \ + lib/LibNGAP_Pixits.ttcn \ + lib/LibNGAP_Templates.ttcn \ + lib/LibNGAP_EncdecDeclarations.ttcn \ + + +modules := lib/asn1 + +# lib_system/LibNGAP_Interface.ttcn \ +# lib_system/LibNGAP_Steps.ttcn diff --git a/ttcn/LibSip b/ttcn/LibSip new file mode 160000 index 0000000000000000000000000000000000000000..44122c6589a3fa7f42825d2475511d08da499ff0 --- /dev/null +++ b/ttcn/LibSip @@ -0,0 +1 @@ +Subproject commit 44122c6589a3fa7f42825d2475511d08da499ff0 diff --git a/ttcn/LibUpperTester/LibUpperTester.ttcn b/ttcn/LibUpperTester/LibUpperTester.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..da13c12a16b6138dd3f104df6eeff5d96234268a --- /dev/null +++ b/ttcn/LibUpperTester/LibUpperTester.ttcn @@ -0,0 +1,60 @@ +/* + * @author STF 370 + * @version $Id$ + * @desc xxx + */ +module LibUpperTester { + import from LibCommon_VerdictControl all; + import from LibIot_TypesAndValues {type Status;} + + // TODO - move to common lib + /*type record Status { + FncRetCode code, charstring reason optional + }*/ +// TODO commented out due to problems with tools not accepting 'extends' from several components + /** + * @desc + * This component type is used to trigger, stimualte, configure etc any + * equipment related to the test, i.e., EUTs or other, or the + * interconnecting network. To be used as PTC. + */ +// type component EquipmentUser { +// port EquipmentAccessPort eaPort; +// timer T_Equipment; +// } + + group equipmentOperationTypes { + + type record of charstring ParameterList; + + type charstring EquipmentCommand; + + type record EquipmentOperationReq { + EquipmentCommand cmd, ParameterList params optional + } + + type record EquipmentOperationRsp { + Status status + } + } + with{ + encode "LibUpperTesterCodec" + } + + group equipmentOperationTemplates { + + template EquipmentOperationReq m_EQ_Request(in EquipmentCommand p_cmd, ParameterList p_params) := { + cmd := p_cmd, + params := p_params + } + + template EquipmentOperationRsp mw_EO_Response(in template FncRetCode p_code) := { + status := { + code := p_code, + reason := * + } + } + } + + +} \ No newline at end of file diff --git a/ttcn/LibUpperTester/module.mk b/ttcn/LibUpperTester/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..15c373323b546cd6ad01e05333deb6ea14614414 --- /dev/null +++ b/ttcn/LibUpperTester/module.mk @@ -0,0 +1 @@ +sources := LibUpperTester.ttcn \ No newline at end of file diff --git a/ttcn/Lib_NG_NAS/NG_NAS_BaseTemplates.ttcn b/ttcn/Lib_NG_NAS/NG_NAS_BaseTemplates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..c09f7d24507556c2c2a3ae71ee33cb429d59b3cd --- /dev/null +++ b/ttcn/Lib_NG_NAS/NG_NAS_BaseTemplates.ttcn @@ -0,0 +1,3 @@ +module NG_NAS_BaseTemplates{ + +} diff --git a/ttcn/Lib_NG_NAS/NG_NAS_EncdecDeclarations b/ttcn/Lib_NG_NAS/NG_NAS_EncdecDeclarations new file mode 100644 index 0000000000000000000000000000000000000000..7f65093940e261c773bbd481df1fe094e041262c --- /dev/null +++ b/ttcn/Lib_NG_NAS/NG_NAS_EncdecDeclarations @@ -0,0 +1,50 @@ +module NG_NAS_EncdecDeclarations { + + import from NG_NAS_MsgContainers all; + import from NG_NAS_TypeDefs all; + import from EAP_TypeDefs all; + + + external function fx_enc_NG_NAS_UL_Message_Type (NG_NAS_UL_Message_Type p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_NG_NAS_UL_Message_Type (inout bitstring pdu, out NG_NAS_UL_Message_Type p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + + + external function fx_enc_NG_NAS_DL_Message_Type (NG_NAS_DL_Message_Type p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_NG_NAS_DL_Message_Type (inout bitstring pdu, out NG_NAS_DL_Message_Type p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + //external function fx_dec_NG_NAS_DL_Message_Type (in octetstring pdu) return NG_NAS_DL_Message_Type + //with {extension "prototype(convert) decode(RAW)"} + + external function fx_enc_NG_SECURITY_PROTECTED_NAS_MESSAGE(NG_SECURITY_PROTECTED_NAS_MESSAGE p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_NG_SECURITY_PROTECTED_NAS_MESSAGE(in octetstring pdu) return NG_SECURITY_PROTECTED_NAS_MESSAGE + //with {extension "prototype(sliding) decode(NAS Types)"} + + external function fx_enc_IntraN1TransparentContainer (IntraN1TransparentContainer p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_IntraN1TransparentContainer (inout bitstring pdu, out IntraN1TransparentContainer p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + + + external function fx_enc_CIoTSmallDataContainer (CIoTSmallDataContainer p) return bitstring + //with {extension "prototype(convert) encode(NAS Types)"} + + external function fx_dec_CIoTSmallDataContainer (inout bitstring pdu, out CIoTSmallDataContainer p) return integer + //with {extension "prototype(sliding) decode(NAS Types)"} + + + + external function fx_enc_EAP_Message_Type (EAP_Message_Type p) return bitstring + with {extension "prototype(convert) encode(EAP Types)"} + + external function fx_dec_EAP_Message_Type (inout bitstring pdu, out EAP_Message_Type p) return integer + with {extension "prototype(sliding) decode(EAP Types)"} + +} // End of module module NG_NAS_EncdecDeclarations diff --git a/ttcn/Lib_NG_NAS/lib/Lib_NG_NAS_CommonFunctions.ttcn b/ttcn/Lib_NG_NAS/lib/Lib_NG_NAS_CommonFunctions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..5ec1a319c7e62177ea5c0d2b89a22c699c96716a --- /dev/null +++ b/ttcn/Lib_NG_NAS/lib/Lib_NG_NAS_CommonFunctions.ttcn @@ -0,0 +1,311 @@ +module Lib_NG_NAS_CommonFunctions { + + // Lib_NG_NAS + import from Lib_NG_NAS_Templates all; + import from Lib_NG_NAS_Pixits all; + + // NG_NAS + import from NG_NAS_TypeDefs all; + + // Lib3GPP + import from CommonDefs all; + import from NG_NAS_MsgContainers all; + import from NAS_CommonTypeDefs all; + import from NAS_CommonTemplates all; + import from NG_NAS_Common all; + import from NAS_AuthenticationCommon all; + import from NG_NAS_SecurityFunctions all; + + // Lib_NGAP + import from NGAP_IEs language "ASN.1:2002" all; + import from NGAP_Constants language "ASN.1:2002" all; + import from NGAP_PDU_Descriptions language "ASN.1:2002" all; + import from LibNGAP_Pixits all; + import from LibNGAP_Templates all; + + function f_decode_5G_NAS_DL_Message( + in NAS_PDU p_nas_pdu, + out NG_NAS_DL_Message_Type p_NG_NAS_DL_Message_Type + ) return boolean { + log(">>> f_decode_5G_NAS_DL_Message: ", p_nas_pdu); + + var bitstring v_bs := oct2bit(p_nas_pdu); + var NG_NAS_DL_Message_Type v_message; + if (decvalue(v_bs, v_message) != 0) { + log("f_decode_5G_NAS_DL_Message: decvalue failure"); + return false; + } + log("f_decode_5G_NAS_DL_Message: v_message: ", v_message); + if (ischosen(v_message.security_Protected_Nas_Message)) { + if (v_message.security_Protected_Nas_Message.securityHeaderType == '0100'B) { + // TODO Cyphered message + log("f_decode_5G_NAS_DL_Message: TODO Cyphered message"); + setverdict(inconc); + return false; + } else { + v_bs := oct2bit(v_message.security_Protected_Nas_Message.plainNASMessage); + if (decvalue(v_bs, v_message) != 0) { + log("f_decode_5G_NAS_DL_Message: decvalue failure"); + return false; + } + log("f_decode_5G_NAS_DL_Message: v_message: ", v_message); + if (not(match(v_message, p_NG_NAS_DL_Message_Type))) { + log(match(v_message, p_NG_NAS_DL_Message_Type)); + return false; + } + } + } + log("f_decode_5G_NAS_DL_Message: matching"); + + return true; + } // End of function f_decode_5G_NAS_DL_Message + + function f_Check_5GAKA_NAS_DL_Message( + in NAS_PDU p_nas_pdu, // TODO FSCOM Check if using vc_recvNgNasDl_Msg is more efficient + in template NG_NAS_DL_Message_Type p_NG_NAS_DL_Message_Type, + out NG_NAS_DL_Message_Type p_message + ) return boolean { + log(">>> f_Check_5GAKA_NAS_DL_Message: ", p_nas_pdu); + + var bitstring v_bs := oct2bit(p_nas_pdu); + var NG_NAS_DL_Message_Type v_message; + if (decvalue(v_bs, v_message) != 0) { + log("f_Check_5GAKA_NAS_DL_Message: decvalue failure"); + return false; + } + log("f_Check_5GAKA_NAS_DL_Message: v_message: ", v_message); + if (ischosen(v_message.security_Protected_Nas_Message)) { + if (v_message.security_Protected_Nas_Message.securityHeaderType == '0010'B) { + // TODO Cyphered message + // Decipher NAS container + // v_NonCleartextString := fx_NG_NasDeciphering(v_NonCleartextString, + // p_NasSecurityByRef.Ciphering.Algorithm, + // p_NasSecurityByRef.Ciphering.K_NAS, + // p_NasCount, + // p_NasSecurityByRef.BearerId); + //v_message.security_Protected_Nas_Message.plainNASMessage := v_NonCleartextString; + log("f_Check_5GAKA_NAS_DL_Message: TODO Cyphered message"); + setverdict(inconc); + return false; + } + // Message was decrypted properly + v_bs := oct2bit(v_message.security_Protected_Nas_Message.plainNASMessage); + if (decvalue(v_bs, v_message) != 0) { + log("f_Check_5GAKA_NAS_DL_Message: decvalue failure"); + return false; + } + log("f_Check_5GAKA_NAS_DL_Message: v_message: ", v_message); + } + if (not(match(v_message, p_NG_NAS_DL_Message_Type))) { + log(match(v_message, p_NG_NAS_DL_Message_Type)); + return false; + } + p_message := v_message; + log("f_Check_5GAKA_NAS_DL_Message: matching: p_message: ", p_message); + + return true; + } // End of function f_Check_5GAKA_NAS_DL_Message + + function f_Check_5GAKA_NAS_UL_Message( + in NAS_PDU p_nas_pdu, // TODO FSCOM Check if using vc_recvNgNasUl_Msg is more efficient + in template NG_NAS_UL_Message_Type p_NG_NAS_UL_Message_Type + ) return boolean { + log(">>> f_Check_5GAKA_NAS_UL_Message: ", p_nas_pdu); + + var bitstring v_bs := oct2bit(p_nas_pdu); + var NG_NAS_UL_Message_Type v_message; + if (decvalue(v_bs, v_message) != 0) { + log("f_Check_5GAKA_NAS_UL_Message: decvalue failure"); + return false; + } + log("f_Check_5GAKA_NAS_UL_Message: v_message: ", v_message); + if (ischosen(v_message.security_Protected_Nas_Message)) { + // TODO Decyphered message + log("f_Check_5GAKA_NAS_UL_Message: TODO Decyphered message"); + setverdict(inconc); + return false; + } else { + v_bs := oct2bit(v_message.security_Protected_Nas_Message.plainNASMessage); + if (decvalue(v_bs, v_message) != 0) { + log("f_Check_5GAKA_NAS_UL_Message: decvalue failure"); + return false; + } + log("f_Check_5GAKA_NAS_UL_Message: v_message: ", v_message); + if (not(match(v_message, p_NG_NAS_UL_Message_Type))) { + log(match(v_message, p_NG_NAS_UL_Message_Type)); + return false; + } + } + log("f_Check_5GAKA_NAS_UL_Message: matching"); + + return true; + } // End of function f_Check_5GAKA_NAS_UL_Message + + function f_Check_5GAKA_NAS_DL_Message_is_encrypted(in NAS_PDU p_nas_pdu) return boolean { + log(">>> f_Check_5GAKA_NAS_DL_Message_is_encrypted: ", p_nas_pdu); + + var bitstring v_bs := oct2bit(p_nas_pdu); + var NG_NAS_DL_Message_Type v_message; + if (decvalue(v_bs, v_message) != 0) { + log("f_Check_5GAKA_NAS_DL_Message_is_encrypted: decvalue failure"); + return false; + } + log("f_Check_5GAKA_NAS_DL_Message_is_encrypted: v_message: ", v_message); + if (not ischosen(v_message.security_Protected_Nas_Message)) { + return false + } + + return true; + } // End of function f_Check_5GAKA_NAS_DL_Message_is_encrypted + + function f_Check_5GAKA_NAS_UL_Message_is_encrypted(in NAS_PDU p_nas_pdu) return boolean { + log(">>> f_Check_5GAKA_NAS_UL_Message_is_encrypted: ", p_nas_pdu); + + var bitstring v_bs := oct2bit(p_nas_pdu); + var NG_NAS_UL_Message_Type v_message; + if (decvalue(v_bs, v_message) != 0) { + log("f_Check_5GAKA_NAS_UL_Message_is_encrypted: decvalue failure"); + return false; + } + log("f_Check_5GAKA_NAS_UL_Message_is_encrypted: v_message: ", v_message); + if (not ischosen(v_message.security_Protected_Nas_Message)) { + return false + } + + return true; + } // End of function f_Check_5GAKA_NAS_UL_Message_is_encrypted + + group fiveg_aka_security_network { // FIXME FSCOM To be re-organize later to create a security library + + /** + * @desc Compute RES and XRES values based on rAND & AUTN received in the NG_AUTHENTICATION_REQUEST + * @param [in] p_rand + * @param [in] p_autn + * @param [in] KeySeq + * @param [in,out] p_ng_nas_security_params_type Built security parameters + */ + function f_5g_aka_compute_res_xres( + in B128_Type p_rand, + in B128_Type p_autn, + in ABBA p_abba, + in NAS_PlmnId p_PLMN, + in hexstring p_NID, + inout NG_NAS_SecurityParams_Type p_ng_nas_security_params_type + ) return boolean { + log(">>> f_5g_aka_compute_res_xres: ", p_ng_nas_security_params_type); + + p_ng_nas_security_params_type := valueof(cs_NG_NAS_SecurityParamsInit); + log("f_5g_aka_compute_res_xres: KDF=", p_ng_nas_security_params_type.KDF); + p_ng_nas_security_params_type.ABBA := p_abba.abbaValue; + p_ng_nas_security_params_type.AuthParams.RandValue := p_rand; + p_ng_nas_security_params_type.AuthParams.AUTN := p_autn; + + log("f_5g_aka_compute_res_xres: PX_USIM_SECRET_KEY=", PX_USIM_SECRET_KEY); + + // Extract SQN from v_sqn_ak and XOR it with calculated MAC + var B48_Type v_sqn_ak := substr(p_autn, 0, 48); + var B16_Type v_amf := substr(p_autn, 48, 16); + var B64_Type v_mac := substr(p_autn, 64, 64); + log("f_5g_aka_compute_res_xres: v_sqn_ak=", v_sqn_ak); + log("f_5g_aka_compute_res_xres: v_amf=", v_amf); + log("f_5g_aka_compute_res_xres: v_mac=", v_mac); + + // Set OP + f_set_op(PX_USIM_OPERATOR_VARIANT_ALGORITHM_CONFIGURATION); + // Calculate RES, CK, IK and AK in one step + var B128_Type v_ck; + var B128_Type v_ik; + var B48_Type v_ak; + var B64_Type v_res; + if (f_f2345(PX_USIM_SECRET_KEY, p_rand, v_res, v_ck, v_ik, v_ak) == -1) { + return false; + } + p_ng_nas_security_params_type.AuthParams.CK := v_ck; + log("f_5g_aka_compute_res_xres: CK=", p_ng_nas_security_params_type.AuthParams.CK); + p_ng_nas_security_params_type.AuthParams.IK := v_ik; + log("f_5g_aka_compute_res_xres: IK=", p_ng_nas_security_params_type.AuthParams.IK); + p_ng_nas_security_params_type.Ks := p_ng_nas_security_params_type.AuthParams.CK & p_ng_nas_security_params_type.AuthParams.IK; + log("f_5g_aka_compute_res_xres: Ks=", p_ng_nas_security_params_type.Ks); + var B48_Type v_sqn := v_sqn_ak xor4b v_ak; + log("f_5g_aka_compute_res_xres: v_sqn=", v_sqn); + + // Verify that MAC was accepted + var B64_Type v_mac_p; + if (f_f1(PX_USIM_SECRET_KEY, p_rand, v_sqn, v_amf, v_mac_p) == -1) { + return false; + } + log("f_5g_aka_compute_res_xres: v_mac_p=", v_mac_p); + if (v_mac != v_mac_p) { + return false; + } + + // Compute XRES + p_ng_nas_security_params_type.AuthParams.XRES := f_NG_Authentication_A4(p_PLMN, + p_ng_nas_security_params_type.AuthParams, + p_ng_nas_security_params_type.KDF, + p_ng_nas_security_params_type.Ks, + p_NID); + p_ng_nas_security_params_type.AuthParams.XRESLength := lengthof(bit2oct(p_ng_nas_security_params_type.AuthParams.XRES)); + log("f_5g_aka_compute_res_xres: XRES=", p_ng_nas_security_params_type.AuthParams.XRES); + log("f_5g_aka_compute_res_xres: XRESLength=", p_ng_nas_security_params_type.AuthParams.XRESLength); + + // Generate KAUSF + p_ng_nas_security_params_type.KAUSF := f_NG_Authentication_A2(p_ng_nas_security_params_type.AuthParams, + p_ng_nas_security_params_type.KDF, + p_ng_nas_security_params_type.Ks, + p_PLMN, + p_NID); + log("f_5g_aka_compute_res_xres: KAUSF=", p_ng_nas_security_params_type.KAUSF); + + // Generate KSEAF + p_ng_nas_security_params_type.KSEAF := f_NG_Authentication_A6(p_PLMN, + p_ng_nas_security_params_type.KAUSF, + p_ng_nas_security_params_type.KDF, + p_NID + ); + log("f_5g_aka_compute_res_xres: KSEAF=", p_ng_nas_security_params_type.KSEAF); + + // TODO Generate KMAF + // p_ng_nas_security_params_type.KAMF := f_NG_Authentication_A7(p_Identity, + // p_ng_nas_security_params_type.KSEAF, + // p_ng_nas_security_params_type.ABBA, + // p_ng_nas_security_params_type.KDF + // ); + //log("f_5g_aka_compute_res_xres: KAMF=", p_ng_nas_security_params_type.KAMF); + + // TODO Generate KMAF + + + log("<<< f_5g_aka_compute_res_xres: ", p_ng_nas_security_params_type); + return true; + } // End of function f_5g_aka_compute_res_xres + + function f_set_op(in O16_Type p_op) { + fx_set_op(p_op); + } + + function f_f1(in B128_Type p_authK, in B128_Type p_rand, in B48_Type v_sqn, in B16_Type v_amf, out B64_Type v_mac_a) return integer { + return fx_f1(p_authK, p_rand, v_sqn, v_amf, v_mac_a); + } + + function f_f1star(in B128_Type p_authK, in B128_Type p_rand, in B48_Type v_sqn, in B16_Type v_amf, out B64_Type v_mac_s) return integer { + return fx_f1star(p_authK, p_rand, v_sqn, v_amf, v_mac_s); + } + + function f_f2345(in B128_Type p_authK, in B128_Type p_rand, out B64_Type v_res, out B128_Type v_ck, out B128_Type v_ik, out B48_Type v_ak) return integer { + return fx_f2345(p_authK, p_rand, v_res, v_ik, v_ck, v_ak); + } + + function f_f5star(in B128_Type p_authK, in B128_Type p_rand, out B48_Type p_ak) return integer { + return fx_f5star(p_authK, p_rand, p_ak); + } + + external function fx_set_op(in O16_Type p_op); + external function fx_f1(in B128_Type p_authK, in B128_Type p_rand, in B48_Type v_sqn, in B16_Type v_amf, out B64_Type v_mac_a) return integer; + external function fx_f1star(in B128_Type p_authK, in B128_Type p_rand, in B48_Type v_sqn, in B16_Type v_amf, out B64_Type v_mac_s) return integer; + external function fx_f2345(in B128_Type p_authK, in B128_Type p_rand, out B64_Type v_res, out B128_Type v_ck, out B128_Type v_ik, out B48_Type v_ak) return integer; + external function fx_f5star(in B128_Type p_authK, in B128_Type p_rand, out B48_Type p_ak) return integer; + + } // End of function fiveg_aka_security_network + +} // End of module Lib_NG_NAS_CommonFunctions \ No newline at end of file diff --git a/ttcn/Lib_NG_NAS/lib/Lib_NG_NAS_Pixits.ttcn b/ttcn/Lib_NG_NAS/lib/Lib_NG_NAS_Pixits.ttcn new file mode 100755 index 0000000000000000000000000000000000000000..59ccfc4eab4e1870b484a17bee26a2e9c1e36920 --- /dev/null +++ b/ttcn/Lib_NG_NAS/lib/Lib_NG_NAS_Pixits.ttcn @@ -0,0 +1,27 @@ +/** +* @author ETSI / TTF041 +* @version $URL$ +* $Id$ +* @desc This module provides PICS for NGAP tests. +* @copyright ETSI Copyright Notification +* No part may be reproduced except as authorized by written permission. +* The copyright and the foregoing restriction extend to reproduction in all media. +* All rights reserved. +* @see ETSI TS +*/ +module Lib_NG_NAS_Pixits { + + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + + modulepar B4_Type PX_SUPI_FORMAT := '0000'B; + + modulepar octetstring PX_SUPI_DIGITS := '00f110214300014444330302'O; + + modulepar O16_Type PX_USIM_OPERATOR_VARIANT_ALGORITHM_CONFIGURATION := '00000000000000000000000000000000'O; + + modulepar B128_Type PX_USIM_SECRET_KEY := oct2bit('00000000000000000000000000000000'O); + + modulepar NAS_PlmnId PX_PLMN := '000000'O; + +} // End of module Lib_NG_NAS_Pixits \ No newline at end of file diff --git a/ttcn/Lib_NG_NAS/lib/Lib_NG_NAS_Templates.ttcn b/ttcn/Lib_NG_NAS/lib/Lib_NG_NAS_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..ec5541b7e043084db351911c66b4f356bfa616a4 --- /dev/null +++ b/ttcn/Lib_NG_NAS/lib/Lib_NG_NAS_Templates.ttcn @@ -0,0 +1,2223 @@ +module Lib_NG_NAS_Templates { + + // Lib3GPP/Common + import from CommonDefs all; + import from NAS_CommonTypeDefs all; + + // Lib3GPP/NG_NAS + import from NG_NAS_TypeDefs all; + import from NG_NAS_MsgContainers all; + import from NG_NAS_Templates all; + import from NG_NAS_Common all; + + // Lib3GPP/NasEmulation + import from NAS_CommonTemplates all; + + template (omit) NG_NAS_DL_Message_Type m_NG_AUTHENTICATION_REQUEST( + in NAS_KsiValue p_KeySetId, + in template (value) ABBA p_ABBA, + in template (omit) RAND p_RAND := omit, + in template (omit) AUTN p_AUTN := omit, + in template (omit) EAP_Message p_EAP := omit + ) modifies cs_NG_AUTHENTICATION_REQUEST := { + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + authentication_Request := { + } + } // End of template m_NG_AUTHENTICATION_REQUEST + + template (present) NG_NAS_DL_Message_Type mw_NG_AUTHENTICATION_REQUEST( + template (present) NAS_KsiValue p_KeySetId := ?, + template (present) ABBA p_ABBA := ?, + template RAND p_RAND := *, + template AUTN p_AUTN := *, + template EAP_Message p_EAP := * + ) := { /* 24.501 cl. 8.2.1 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + authentication_Request := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationRequest, /* cl. 9.7 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + ngNasKeySetId := cr_NAS_KeySetIdentifier(p_KeySetId, tsc_NasKsi_NativeSecurityContext), /* cl. 9.11.3.32 M V 1/2 */ + abba := p_ABBA, /* cl. 9.11.3.10 M LV 3-n */ + rand := p_RAND, /* cl. 9.11.3.16 O TV 17 IEI=21 */ + autn := p_AUTN, /* cl. 9.11.3.15 O TLV 18 IEI=20 */ + eapMessage := p_EAP /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + } + } // End of template mw_NG_AUTHENTICATION_REQUEST + + template (omit) NG_NAS_UL_Message_Type m_NG_AUTHENTICATION_RESPONSE( + in template (value) AuthenticationResponseParameter p_Res, + in template (omit) EAP_Message p_EAP := omit + ) := { /* 24.501 cl. 8.2.2 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + authentication_Response := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationResponse, /* cl. 9.7 M V 1 */ + authResponseParam := p_Res, /* cl. 9.11.3.17 O TLV 18 IEI=2D */ + eapMessage := p_EAP /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + } + } // End of template m_NG_AUTHENTICATION_RESPONSE + + template (present) NG_NAS_UL_Message_Type mw_NG_AUTHENTICATION_RESPONSE( + template (present) AuthenticationResponseParameter p_Res := mw_AuthenticationResponseParameter(?), + template EAP_Message p_EAP := *) modifies cr_NG_AUTHENTICATION_RESPONSE := + { /* 24.501 cl. 8.2.2 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + authentication_Response := {} + } // End of template mw_NG_AUTHENTICATION_RESPONSE + + template (value) NG_NAS_DL_Message_Type m_NG_AUTHENTICATION_RESULT( + in NAS_KsiValue p_KeySetId, + in template (omit) EAP_Message p_EAP, + in template (omit) ABBA p_ABBA + ) modifies cs_NG_AUTHENTICATION_RESULT := { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.3 */ + authentication_Result := { + } + } // End of template m_NG_AUTHENTICATION_RESULT + + template (present) NG_NAS_DL_Message_Type mw_NG_AUTHENTICATION_RESULT( + template (present) NAS_KsiValue p_KeySetId := ?, + template EAP_Message p_EAP := *, + template ABBA p_ABBA := * + ) := { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.3 */ + authentication_Result := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationResult, /* cl. 9.7 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + ngNasKeySetId := cr_NAS_KeySetIdentifier(p_KeySetId, tsc_NasKsi_NativeSecurityContext), /* cl. 9.11.3.32 M V 1/2 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + abba := p_ABBA /* cl. 9.11.3.10 M LV 3-n */ + } + } // End of template mw_NG_AUTHENTICATION_RESULT + + template (omit) NG_NAS_UL_Message_Type m_NG_AUTHENTICATION_FAILURE( + in template (value) GMM_GSM_Cause p_Cause, + in template (omit) AuthenticationFailureParameter p_AuthFailParam := omit + ) := { /* 24.501 cl. 8.2.4 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + authentication_Failure := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationFailure, /* cl. 9.7 M V 1 */ + gmmCause := p_Cause, /* cl. 9.11.3.2 M V 1 */ + authFailureParam := p_AuthFailParam /* cl. 9.11.3.12 O TLV 16 IEI=30 */ + } + } // End of template m_NG_AUTHENTICATION_FAILURE + + template (present) NG_NAS_UL_Message_Type mw_NG_AUTHENTICATION_FAILURE( + template (present) GMM_GSM_Cause p_Cause := ?, + template AuthenticationFailureParameter p_AuthFailParam := * + ) modifies cr_NG_AUTHENTICATION_FAILURE := { /* 24.501 cl. 8.2.4 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + authentication_Failure := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationFailure, /* cl. 9.7 M V 1 */ + gmmCause := p_Cause, /* cl. 9.11.3.2 M V 1 */ + authFailureParam := p_AuthFailParam /* cl. 9.11.3.12 O TLV 16 IEI=30 */ + } + } // End of template mw_NG_AUTHENTICATION_FAILURE + + template (omit) NG_NAS_DL_Message_Type m_NG_AUTHENTICATION_REJECT( + in template (omit) EAP_Message p_EAP := omit + ) modifies cs_NG_AUTHENTICATION_REJECT := { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.5 */ + authentication_Reject := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationReject, /* cl. 9.7 M V 1 */ + eapMessage := p_EAP /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + } + } // End of template m_NG_AUTHENTICATION_REJECT + + template NG_NAS_DL_Message_Type mw_NG_AUTHENTICATION_REJECT( + template EAP_Message p_EAP := * + ) := { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.5 */ + authentication_Reject := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_AuthenticationReject, /* cl. 9.7 M V 1 */ + eapMessage := p_EAP /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + } + } // End of template mw_NG_AUTHENTICATION_REJECT + + template (omit) NG_NAS_UL_Message_Type m_NG_REGISTRATION_REQUEST( + in template (value) RegistrationType p_RegistrationType, + in template (value) NAS_KsiValue p_KeySetId, + in template (value) B1_Type p_Tsc, + in template (value) NG_MobileIdentity p_MobileId, + in template (omit) NAS_KeySetIdentifier p_NonCurrentKSI := omit, + in template (omit) NG_GMM_Cap p_GMM_Cap := omit, + in template (omit) NG_UE_SecurityCapability p_UESecurityCap := omit, + in template (omit) NSSAI p_ReqNSSAI := omit, + in template (omit) NG_TrackingAreaId p_TAI := omit, + in template (omit) UE_NetworkCap p_UE_NetworkCap := omit, + in template (omit) ULDataStatus p_ULDataStatus := omit, + in template (omit) PDU_SessionStatus p_PDU_SessionStatus := omit, + in template (omit) MICO_Ind p_MICO_Ind := omit, + in template (omit) UE_Status p_UE_Status := omit, + in template (omit) NG_MobileIdentity p_AddGUTI := omit, + in template (omit) AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus := omit, + in template (omit) UE_UsageSetting p_UE_UsageSetting := omit, + in template (omit) NG_DRXparameter p_DRXparam := omit, + in template (omit) EPS_MessageContainer p_EPSMsg := omit, + in template (omit) LADN_Ind p_LADN_Ind := omit, + in template (omit) PayloadContainerType p_ContainerType := omit, // @sic R5w190113 sic@ + in template (omit) PayloadContainer p_Payload := omit, + in template (omit) NetworkSlicingInd p_NetworkSlicingInd := omit, + in template (omit) NG_UpdateType p_NG_UpdateType := omit, + in template (omit) MS_Clsmk2 p_MS_Clsmk2 := omit, + in template (omit) CodecList p_SupportedCodecs := omit, + in template (omit) EPS_BearerContextStatus p_EPS_BearerContextStatus := omit, // @sic R5s190543 sic@ + in template (omit) NASMessageContainer p_Msg := omit, + in template (omit) ExtdDRXParams p_ExtdDRXParams := omit, + in template (omit) GPRS_Timer3 p_T3324 := omit, + in template (omit) UERadioCapId p_UERadioCapId := omit, + in template (omit) MappedNSSAI p_MappedNSSAI := omit, + in template (omit) AddInfoRequest p_AddInfoRequest := omit, + in template (omit) WUSAssistInfo p_WUSAssistInfo := omit, + in template (omit) N5GCInd p_N5GCInd := omit, + in template (omit) NB_N1ModeDRXParams p_NB_N1ModeDRXParams := omit, + in template (omit) UE_RequestType p_UeRequestType := omit, + in template (omit) NG_PagingRestriction p_PagingRestrict := omit, + in template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit, + in template (omit) NID p_NId := omit, + in template (omit) PLMN_IdIE p_MSPLMNwDisasterCondition := omit, + in template (omit) PEIPS_AssistInfo p_RequestedPEIPS_AssistInfo := omit, + in template (omit) GPRS_Timer3 p_T3512 := omit + ) := { /* 24.501 cl. 8.2.6 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + registration_Request := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_RegistrationRequest, /* cl. 9.7 M V 1 */ + ngNasKSI := cs_NAS_KeySetIdentifier_lv(valueof(p_KeySetId), valueof(p_Tsc)), /* cl. 9.11.3.32 M V 1/2 */ + registrationType := p_RegistrationType, /* cl. 9.11.3.7 M LV 2 */ + ngMobileId := p_MobileId, /* cl. 9.11.3.4 M LV 5-? */ + nonCurrentNativeKSI := p_NonCurrentKSI, /* cl. 9.11.3.32 O TV 1 IEI=C- */ + gmmCapability := p_GMM_Cap, /* cl. 9.11.3.1 O TLV 3-15 IEI=10 */ + ueSecurityCapability := p_UESecurityCap, /* cl. 9.11.3.54 O TLV 4-10 IEI=2E */ + requestedNSSAI := p_ReqNSSAI, /* cl. 9.11.3.37 O TLV 4-74 IEI=2F */ + lastVisitedRegisteredTai := p_TAI, /* cl. 9.11.3.8 O TV 7 IEI=52 */ + s1_UE_Capability := p_UE_NetworkCap, /* cl. 9.11.3.48 O LV 4-15 IEI=65 */ + ulDataStatus := p_ULDataStatus, /* cl. 9.11.3.57 O TLV 4-34 IEI=40 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.3.44 O TLV 4-34 IEI=50 */ + micoInd := p_MICO_Ind, /* cl. 9.11.3.31 O TLV 1 IEI=B */ + ueStatus := p_UE_Status, /* cl. 9.11.3.56 O TLV 3 IEI=2B */ + additionalGUTI := p_AddGUTI, /* cl. 9.11.3.4 O TLV 5-? IEI=2C */ + allowedPDUSessionStatus := p_AllowedPDU_SessionStatus, /* cl. 9.11.3.13 O TLV 4-34 IEI=25 */ + ueUsageSetting := p_UE_UsageSetting, /* cl. 9.11.3.55 O TLV 3 IEI=60 */ + reqDRXParams := p_DRXparam, /* cl. 9.11.3.22 O TLV ? IEI=51 */ + epsMessage := p_EPSMsg, /* cl. 9.11.3.24 O TLV-E ? IEI=7C */ + ladnInd := p_LADN_Ind, /* cl. 9.11.3.29 O TLV-E 3-811 IEI=7E */ + payloadContainerType := p_ContainerType, /* cl. 9.11.3.40 O TV 1 IEI=8 Mar 19 @sic R5w190113 sic@*/ + payload := p_Payload, /* cl. 9.11.3.39 O TLV-E 4-65538 IEI=7B */ + networkSlicingInd := p_NetworkSlicingInd, /* cl. 9.11.3.36 O TV 1 IEI=9 Dec18 */ + updateType := p_NG_UpdateType, /* cl. 9.11.3.9A O TLV 3 IEI=53 Dec18 */ + msClassmark2 := p_MS_Clsmk2, /* cl. 9.11.3.31C O TLV 5 IEI=41 Sep20 @sic R5s201387 Baseline Moving sic@ */ + supportedCodecs := p_SupportedCodecs, /* cl. 9.11.3.51A O TLV 5-n IEI=42 Sep20 @sic R5s201387 Baseline Moving sic@ */ + nasMsg := p_Msg, /* cl. 9.11.3.33 O TLV-E 4-n IEI=71 Dec18 */ + epsBearerContextStatus := p_EPS_BearerContextStatus, /* cl. 9.11.3.23A O TLV 4 IEI=60 Jun19 @sic R5s190543 sic@ */ + requestedExtdDRXParams := p_ExtdDRXParams, /* cl. 9.11.3.26A O TLV 3 IEI=6E Sep20 @sic R5s201387 Baseline Moving sic@ */ + t3324Value := p_T3324, /* cl. 9.11.2.5 O TLV 3 IEI=6A Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRadioCapabilityId := p_UERadioCapId, /* cl. 9.11.3.68 O TLV 3-n IEI=67 Sep20 @sic R5s201387 Baseline Moving sic@ */ + requestedMappedNSSAI := p_MappedNSSAI, /* cl. 9.11.3.31B O TLV 3-42 IEI=35 Sep20 @sic R5s201387 Baseline Moving sic@ */ + additionalInfoReq := p_AddInfoRequest, /* cl. 9.11.3.12A O TLV 3 IEI=48 Sep20 @sic R5s201387 Baseline Moving sic@ */ + requestedWUSAssistanceInfo := p_WUSAssistInfo, /* cl. 9.11.3.71 O TLV 3-n IEI=1A Sep20 @sic R5s201387 Baseline Moving sic@ */ + n5GCInd := p_N5GCInd, /* cl. 9.11.3.72 O T 1 IEI=A Sep20 @sic R5s201387 Baseline Moving sic@ */ + requestedNB_N1DRXParams := p_NB_N1ModeDRXParams, /* cl. 9.11.3.73 O TLV 3 IEI=30 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRequestType := p_UeRequestType, /* cl. 9.11.3.76 O TLV 3 IEI=29 Sep22 @sic R5s221179 Baseline Moving sic@ */ + pagingRestrict := p_PagingRestrict, /* cl. 9.11.3.77 O TLV 3-35 IEI=28 Sep22 @sic R5s221179 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA, /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + nId := p_NId, /* cl. 9.11.3.79 O TLV 8 IEI=32 Sep22 @sic R5s221179 Baseline Moving sic@ */ + msPLMNwDisasterCondition := p_MSPLMNwDisasterCondition, /* cl. 9.11.3.85 O TLV 5 IEI=16 Sep22 @sic R5s221179 Baseline Moving sic@ */ + requestedPEIPS_AssistInfo := p_RequestedPEIPS_AssistInfo, /* cl. 9.11.3.80 O TLV 3-n IEI=2A Sep22 @sic R5s221179 Baseline Moving sic@ */ + t3512Value := p_T3512 /* cl. 9.11.2.5 O TLV 3 IEI=3B Jun23 @sic R5s230533 sic@ */ + } + } // End of template m_NG_REGISTRATION_REQUEST + + template (present) NG_NAS_UL_Message_Type mw_NG_REGISTRATION_REQUEST( + template (present) RegistrationType p_RegistrationType := ?, + template (present) NAS_KsiValue p_KeySetId := ?, + template (present) B1_Type p_Tsc := ?, + template (present) NG_MobileIdentity p_MobileId := ?, + template NAS_KeySetIdentifier p_NonCurrentKSI := *, + template NG_GMM_Cap p_GMM_Cap := *, + template NG_UE_SecurityCapability p_UESecurityCap := *, + template NSSAI p_ReqNSSAI := *, + template NG_TrackingAreaId p_TAI := *, + template UE_NetworkCap p_UE_NetworkCap := *, + template ULDataStatus p_ULDataStatus := *, + template PDU_SessionStatus p_PDU_SessionStatus := *, + template MICO_Ind p_MICO_Ind := *, + template UE_Status p_UE_Status := *, + template NG_MobileIdentity p_AddGUTI := *, + template AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus := *, + template UE_UsageSetting p_UE_UsageSetting := *, + template NG_DRXparameter p_DRXparam := *, + template EPS_MessageContainer p_EPSMsg := *, + template LADN_Ind p_LADN_Ind := *, + template PayloadContainerType p_ContainerType := *, // @sic R5w190113 sic@ + template PayloadContainer p_Payload := *, + template NetworkSlicingInd p_NetworkSlicingInd := *, + template NG_UpdateType p_NG_UpdateType := *, + template MS_Clsmk2 p_MS_Clsmk2 := *, + template CodecList p_SupportedCodecs := *, + template EPS_BearerContextStatus p_EPS_BearerContextStatus := *, // @sic R5s190543 sic@ + template NASMessageContainer p_Msg := *, + template ExtdDRXParams p_ExtdDRXParams := *, + template GPRS_Timer3 p_T3324 := *, + template UERadioCapId p_UERadioCapId := *, + template MappedNSSAI p_MappedNSSAI := *, + template AddInfoRequest p_AddInfoRequest := *, + template WUSAssistInfo p_WUSAssistInfo := *, + template N5GCInd p_N5GCInd := *, + template NB_N1ModeDRXParams p_NB_N1ModeDRXParams := *, + template UE_RequestType p_UeRequestType := *, + template NG_PagingRestriction p_PagingRestrict := *, + template ServiceLvlAAContainer p_ServiceLvlAA := *, + template NID p_NId := *, + template PLMN_IdIE p_MSPLMNwDisasterCondition := *, + template PEIPS_AssistInfo p_RequestedPEIPS_AssistInfo := *, + template GPRS_Timer3 p_T3512 := * + ) modifies cr_NG_REGISTRATION_REQUEST := { /* 24.501 cl. 8.2.6 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + registration_Request := { + } + } // End of template mw_NG_REGISTRATION_REQUEST + + template (value) NG_UpdateType m_NG_Update( + in template (value) B1_Type p_NgRAN_RCU, + in template (value) B1_Type p_SmsRequested, + in template (value) B2_Type p_EPS_PNB_CIoT, + in template (value) B2_Type p_NG_PNB_CIoT + ) := { /* 24.501 cl. 9.11.3.9A; + @sic R5s201387 Baseline Moving sic@ */ + /* @status APPROVED (NR5GC) */ + iei := '53'O, + iel := '01'O, + spare := '00'B, + eps_PNB_CIoT := p_EPS_PNB_CIoT, + ng_PNB_CIoT := p_NG_PNB_CIoT, + ngRAN_RCU := p_NgRAN_RCU, + smsRequested := p_SmsRequested + } // End of template m_NG_Update + + template (present) NG_UpdateType mw_NG_Update( + template (present) B1_Type p_NgRAN_RCU := ?, + template (present) B1_Type p_SmsRequested := ?, + template (present) B2_Type p_EPS_PNB_CIoT := ?, + template (present) B2_Type p_NG_PNB_CIoT := ? + ) modifies cr_NG_Update := { /* 24.501 cl. 9.11.3.9A; + @sic R5s201387 Baseline Moving sic@ */ + /* @status APPROVED (NR5GC) */ + iei := '53'O, + iel := '01'O, + spare := '00'B, + eps_PNB_CIoT := p_EPS_PNB_CIoT, + ng_PNB_CIoT := p_NG_PNB_CIoT, + ngRAN_RCU := p_NgRAN_RCU, + smsRequested := p_SmsRequested + } // End of template mw_NG_Update + + template (value) NG_NAS_DL_Message_Type m_NG_REGISTRATION_ACCEPT( + in template (value) RegistrationResult p_RegistrationResult, + in template (omit) NG_MobileIdentity p_GUTI := omit, + in template (omit) PLMN_List p_EPLMNs := omit, + in template (omit) NG_TrackingAreaIdList p_TAIList := omit, + in template (omit) NSSAI p_AllowedNSSAI := omit, + in template (omit) RejectedNSSAI p_RejectedNSSAI := omit, + in template (omit) NSSAI p_ConfiguredNSSAI := omit, + in template (omit) NG_NetworkFeatureSupport p_NwkFeatureSupport := omit, + in template (omit) PDU_SessionStatus p_PDU_SessionStatus := omit, + in template (omit) PDU_SessionReactivationResult p_PDU_SessionReactResult := omit, + in template (omit) PDU_SessionReactivationError p_PDU_SessionReactError := omit, + in template (omit) LADN_Info p_LADN_Info := omit, + in template (omit) MICO_Ind p_MICO_Ind := omit, + in template (omit) NetworkSlicingInd p_NetworkSlicingInd := omit, + in template (omit) ServiceAreaIdList p_SAIList := omit, + in template (omit) GPRS_Timer3 p_T3512 := omit, + in template (omit) GPRS_Timer2 p_Non3GPPDereg := omit, + in template (omit) GPRS_Timer2 p_T3502 := omit, + in template (omit) EmergNumList p_EmergNumList := omit, + in template (omit) ExtdEmergNumList p_ExtdEmergNumList := omit, + in template (omit) SORTransparentContainer p_SOR := omit, + in template (omit) EAP_Message p_EAP := omit, + in template (omit) InclusionModeNSSAI p_InclusionModeNSSAI := omit, + in template (omit) OperatorAccessCatDefinitions p_AccessCatDefinition := omit, + in template (omit) NG_DRXparameter p_NG_DRXparameter := omit, + in template (omit) Non3GPP_NW_ProvidedPolicies p_Non3GPP_NW_ProvidedPolicies := omit, + in template (omit) EPS_BearerContextStatus p_EPS_BearerContextStatus := omit, + in template (omit) ExtdDRXParams p_NegotiatedExtdDRXParams := omit, + in template (omit) GPRS_Timer3 p_T3447 := omit, + in template (omit) GPRS_Timer3 p_T3448 := omit, + in template (omit) GPRS_Timer3 p_T3324 := omit, + in template (omit) UERadioCapId p_UERadioCapId := omit, + in template (omit) UERadioCapIdDeletion p_UERadioCapIdDeletion := omit, + in template (omit) NSSAI p_PendingNSSAI := omit, + in template (omit) NG_CipheringKeyData p_CipheringKeyData := omit, + in template (omit) CAGInfoList p_CAGInfoList := omit, + in template (omit) TruncatedS_TMSIConfig p_TruncatedS_TMSIConfig := omit, + in template (omit) WUSAssistInfo p_WUSAssistInfo := omit, + in template (omit) NB_N1ModeDRXParams p_NB_N1ModeDRXParams := omit, + in template (omit) ExtdRejectedNSSAI p_ExtdRejectedNSSAI := omit, + in template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit, + in template (omit) PEIPS_AssistInfo p_NegotiatedPEIPS_AssistInfo := omit, + in template (omit) NG_AddReqResult p_AddRequestResult := omit, + in template (omit) NSSRG_Info p_NssrgInfo := omit, + in template (omit) RegistrationWaitRange p_DisasterRoamingWaitRange := omit, + in template (omit) RegistrationWaitRange p_DisasterReturnWaitRange := omit, + in template (omit) DisasterPLMNList p_DisasterPLMNList := omit, + in template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming := omit, + in template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := omit, + in template (omit) ExtdCAGInfoList p_ExtdCAGInfoList := omit, + in template (omit) NSAG_Info p_NsagInfo := omit + ) modifies cs_NG_REGISTRATION_ACCEPT := { /* 24.501 cl. 8.2.7 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + registration_Accept := { + } + } // End of template m_NG_REGISTRATION_ACCEPT + + template (present) NG_NAS_DL_Message_Type mw_NG_REGISTRATION_ACCEPT( + template (present) RegistrationResult p_RegistrationResult := ?, + template NG_MobileIdentity p_GUTI := *, + template PLMN_List p_EPLMNs := *, + template NG_TrackingAreaIdList p_TAIList := *, + template NSSAI p_AllowedNSSAI := *, + template RejectedNSSAI p_RejectedNSSAI := *, + template NSSAI p_ConfiguredNSSAI := *, + template NG_NetworkFeatureSupport p_NwkFeatureSupport := *, + template PDU_SessionStatus p_PDU_SessionStatus := *, + template PDU_SessionReactivationResult p_PDU_SessionReactResult := *, + template PDU_SessionReactivationError p_PDU_SessionReactError := *, + template LADN_Info p_LADN_Info := *, + template MICO_Ind p_MICO_Ind := *, + template NetworkSlicingInd p_NetworkSlicingInd := *, + template ServiceAreaIdList p_SAIList := *, + template GPRS_Timer3 p_T3512 := *, + template GPRS_Timer2 p_Non3GPPDereg := *, + template GPRS_Timer2 p_T3502 := *, + template EmergNumList p_EmergNumList := *, + template ExtdEmergNumList p_ExtdEmergNumList := *, + template SORTransparentContainer p_SOR := *, + template EAP_Message p_EAP := *, + template InclusionModeNSSAI p_InclusionModeNSSAI := *, + template OperatorAccessCatDefinitions p_AccessCatDefinition := *, + template NG_DRXparameter p_NG_DRXparameter := *, + template Non3GPP_NW_ProvidedPolicies p_Non3GPP_NW_ProvidedPolicies := *, + template EPS_BearerContextStatus p_EPS_BearerContextStatus := *, + template ExtdDRXParams p_NegotiatedExtdDRXParams := *, + template GPRS_Timer3 p_T3447 := *, + template GPRS_Timer3 p_T3448 := *, + template GPRS_Timer3 p_T3324 := *, + template UERadioCapId p_UERadioCapId := *, + template UERadioCapIdDeletion p_UERadioCapIdDeletion := *, + template NSSAI p_PendingNSSAI := *, + template NG_CipheringKeyData p_CipheringKeyData := *, + template CAGInfoList p_CAGInfoList := *, + template TruncatedS_TMSIConfig p_TruncatedS_TMSIConfig := *, + template WUSAssistInfo p_WUSAssistInfo := *, + template NB_N1ModeDRXParams p_NB_N1ModeDRXParams := *, + template ExtdRejectedNSSAI p_ExtdRejectedNSSAI := *, + template ServiceLvlAAContainer p_ServiceLvlAA := *, + template PEIPS_AssistInfo p_NegotiatedPEIPS_AssistInfo := *, + template NG_AddReqResult p_AddRequestResult := *, + template NSSRG_Info p_NssrgInfo := *, + template RegistrationWaitRange p_DisasterRoamingWaitRange := *, + template RegistrationWaitRange p_DisasterReturnWaitRange := *, + template DisasterPLMNList p_DisasterPLMNList := *, + template NG_TrackingAreaIdList p_ForbidTAIList_Roaming := *, + template NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := *, + template ExtdCAGInfoList p_ExtdCAGInfoList := *, + template NSAG_Info p_NsagInfo := * + ) := { /* 24.501 cl. 8.2.7 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + registration_Accept := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_RegistrationAccept, /* cl. 9.7 M V 1 */ + registrationResult := p_RegistrationResult, /* cl. 9.11.3.6 M LV 2 */ + guti := p_GUTI, /* cl. 9.11.3.4 O TLV 13 IEI=2C */ + equivalentPlmns := p_EPLMNs, /* cl. 9.11.3.45 O TLV 5-47 IEI=4A */ + taiList := p_TAIList, /* cl. 9.11.3.9 O TLV 9-114 IEI=54 */ + allowedNSSAI := p_AllowedNSSAI, /* cl. 9.11.3.37 O TLV 4-74 IEI=70 */ + rejectedNSSAI := p_RejectedNSSAI, /* cl. 9.11.3.46 O TLV 4-42 IEI=0x11 */ + configuredNSSAI := p_ConfiguredNSSAI, /* cl. 9.11.3.37 O TLV 4-146 IEI=31 */ + ngs_NetworkFeatureSupport := p_NwkFeatureSupport, /* cl. 9.11.3.5 O TLV 3-5 IEI=21*/ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.3.44 O TLV 4-34 IEI=50 */ + pduSessionReactivationResult := p_PDU_SessionReactResult, /* cl. 9.11.3.42 O TLV 4-32 IEI=26 */ + pduSessionReactResultError := p_PDU_SessionReactError, /* cl. 9.11.3.43 O TLV-E 5-515 IEI=7E */ + ladnInfo := p_LADN_Info, /* cl. 9.11.3.30 O TLV-E 12-1707 IEI=79 */ + micoInd := p_MICO_Ind, /* cl. 9.11.3.31 O TV 1 IEI=B */ + networkSlicingInd := p_NetworkSlicingInd, /* cl. 9.11.3.36 O TV 1 IEI=9 */ + saiList := p_SAIList, /* cl. 9.11.3.49 O TLV 6-114 IEI=27 */ + t3512Value := p_T3512, /* cl. 9.11.2.5 O TLV 3 IEI=5E */ + non3GPPDeregisterValue := p_Non3GPPDereg, /* cl. 9.11.2.4 O TLV 3 IEI=5D */ + t3502Value := p_T3502, /* cl. 9.11.2.4 O TLV 3 IEI=16 */ + emergencyNumberList := p_EmergNumList, /* cl. 9.11.3.23 O TLV 5-50 IEI=34 */ + xtdEmergencyNumberList := p_ExtdEmergNumList, /* cl. 9.11.3.26 O TLV-E 6-65538 IEI=7A */ + sorTransparentContainer := p_SOR, /* cl. 9.11.3.51 O TLV-E 20-2048 IEI=7F */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78*/ + inclusionModeNSSAI := p_InclusionModeNSSAI, /* cl. 9.11.3.37A O TV 1 IEI=A */ + operatorAccessCatDefs := p_AccessCatDefinition, /* cl. 9.11.3.38 O TLV-E 4-n IEI=76 */ + negotiatedDRXParams := p_NG_DRXparameter, /* cl. 9.11.3.2A O TLV 3 IEI=51 */ + non3GPP_NW_ProvidedPolicies := p_Non3GPP_NW_ProvidedPolicies, /* cl. 9.11.3.58 O TV 1 IEI = ? Mar 19 @sic R5w190113 sic@ */ + epsBearerContextStatus := p_EPS_BearerContextStatus, /* cl. 9.11.3.23A O TLV 4 IEI=60 Jun19 @sic R5s190543 sic@ */ + negotiatedExtdDRXParams := p_NegotiatedExtdDRXParams, /* cl. 9.11.3.26A O TLV 3 IEI=6E Sep20 @sic R5s201387 Baseline Moving sic@ */ + t3447Value := p_T3447, /* cl. 9.11.2.5 O TLV 3 IEI=6C Sep20 @sic R5s201387 Baseline Moving sic@ */ + t3448Value := p_T3448, /* cl. 9.11.2.4 O TLV 3 IEI=6B Sep20 @sic R5s201387 Baseline Moving sic@ */ + t3324Value := p_T3324, /* cl. 9.11.2.5 O TLV 3 IEI=6A Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRadioCapabilityId := p_UERadioCapId, /* cl. 9.11.3.68 O TLV 3-n IEI=67 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRadioCapIdDeletionInd := p_UERadioCapIdDeletion, /* cl. 9.11.3.69 O TV 1 IEI=E Sep20 @sic R5s201387 Baseline Moving sic@ */ + pendingNSSAI := p_PendingNSSAI, /* cl. 9.11.3.37 O TLV 4-146 IEI=39 Sep20 @sic R5s201387 Baseline Moving sic@ */ + cipheringKeyData := p_CipheringKeyData, /* cl. 9.11.3.18C O TLV-E 34-n IEI=74 Sep20 @sic R5s201387 Baseline Moving sic@ */ + cagInfoList := p_CAGInfoList, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + truncatedS_TMSIConfig := p_TruncatedS_TMSIConfig, /* cl. 9.11.3.70 O TLV 3 IEI=1B Sep20 @sic R5s201387 Baseline Moving sic@ */ + negotiatedWUSAssistanceInfo := p_WUSAssistInfo, /* cl. 9.11.3.71 O TLV 3-n IEI=1C Sep20 @sic R5s201387 Baseline Moving sic@ */ + negotiatedNB_N1DRXParams := p_NB_N1ModeDRXParams, /* cl. 9.11.3.73 O TLV 3 IEI=29 Sep20 @sic R5s201387 Baseline Moving sic@ */ + extdRejectedNSSAI := p_ExtdRejectedNSSAI, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA, /* cl. 9.11.2.10 O TLV-E 6-n IEI=7B Sep22 @sic R5s221179 Baseline Moving sic@ */ + negotiatedPEIPS_AssistInfo := p_NegotiatedPEIPS_AssistInfo, /* cl. 9.11.3.80 O TLV 3-n IEI=33 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ngAddRequestResult := p_AddRequestResult, /* cl. 9.11.3.81 O TLV 3 IEI=34 Sep22 @sic R5s221179 Baseline Moving sic@ */ + nssrgInfo := p_NssrgInfo, /* cl. 9.11.3.82 O TLV-E 7-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterRoamingWaitRange := p_DisasterRoamingWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=14 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterReturnWaitRange := p_DisasterReturnWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterPLMNList := p_DisasterPLMNList, /* cl. 9.11.3.83 O TLV 2-n IEI=13 Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_Roaming := p_ForbidTAIList_Roaming, /* cl. 9.11.3.9 O TLV 9-114 IEI=1D Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_RegProvService := p_ForbidTAIList_RegProvService, /* cl. 9.11.3.9 O TLV 9-114 IEI=1E Sep22 @sic R5s221179 Baseline Moving sic@ */ + extdCAGInfoList := p_ExtdCAGInfoList, /* cl. 9.11.3.86 O TLV-E 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + nsagInfo := p_NsagInfo /* cl. 9.11.3.87 O TLV-E 10-n IEI=7C Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template mw_NG_REGISTRATION_ACCEPT + + template (value) NG_NAS_UL_Message_Type m_NG_REGISTRATION_COMPLETE( + in template (value) SORTransparentContainer p_SOR + ) := { /* 24.501 cl. 8.2.8 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + registration_Complete := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_RegistrationComplete, /* cl. 9.7 M V 1 */ + sorTransparentContainer := p_SOR /* cl. 9.11.3.49 O TLV-E 20-2048 IEI=7F */ + } + } // End of template m_NG_REGISTRATION_COMPLETE + + template (present) NG_NAS_UL_Message_Type mw_NG_REGISTRATION_COMPLETE( + template SORTransparentContainer p_SOR := ? + ) modifies cr_NG_REGISTRATION_COMPLETE := { /* 24.501 cl. 8.2.8 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + registration_Complete := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_RegistrationComplete, /* cl. 9.7 M V 1 */ + sorTransparentContainer := p_SOR /* cl. 9.11.3.49 O TLV-E 20-2048 IEI=7F */ + } + } // End of template mw_NG_REGISTRATION_COMPLETE + + template (value) NG_NAS_DL_Message_Type m_NG_REGISTRATION_REJECT( + in template (value) GMM_GSM_Cause p_Cause, + in template (omit) GPRS_Timer2 p_T3346 := omit, + in template (omit) GPRS_Timer2 p_T3502 := omit, + in template (omit) EAP_Message p_EAP := omit, + in template (omit) RejectedNSSAI p_RejectedNSSAI := omit, + in template (omit) CAGInfoList p_CAGInfoList := omit, + in template (omit) ExtdRejectedNSSAI p_ExtdRejectedNSSAI := omit, + in template (omit) RegistrationWaitRange p_DisasterReturnWaitRange := omit, + in template (omit) ExtdCAGInfoList p_ExtdCAGInfoList := omit, + in template (omit) GPRS_Timer3 p_LowerBoundTimerValue := omit, + in template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming := omit, + in template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := omit + ) modifies cs_NG_REGISTRATION_REJECT := { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + /* 24.501 cl. 8.2.9 */ + registration_Reject := { + } + } // End of template m_NG_REGISTRATION_REJECT + + template (present) NG_NAS_DL_Message_Type mw_NG_REGISTRATION_REJECT( + template (present) GMM_GSM_Cause p_Cause := ?, + template GPRS_Timer2 p_T3346 := *, + template GPRS_Timer2 p_T3502 := *, + template EAP_Message p_EAP := *, + template RejectedNSSAI p_RejectedNSSAI := *, + template CAGInfoList p_CAGInfoList := *, + template ExtdRejectedNSSAI p_ExtdRejectedNSSAI := *, + template RegistrationWaitRange p_DisasterReturnWaitRange := *, + template ExtdCAGInfoList p_ExtdCAGInfoList := *, + template GPRS_Timer3 p_LowerBoundTimerValue := *, + template NG_TrackingAreaIdList p_ForbidTAIList_Roaming := *, + template NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := * + ) := { /* @status APPROVED (NR5GC, NR5GC_IRAT) */ + /* 24.501 cl. 8.2.9 */ + registration_Reject := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_RegistrationReject, /* cl. 9.7 M V 1 */ + gmmCause := p_Cause, /* cl. 9.11.3.2 M V 1 */ + t3346 := p_T3346, /* cl. 9.11.2.4 O TLV 3 IEI=5F */ + t3502 := p_T3502, /* cl. 9.11.2.4 O TLV 3 IEI=16 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + rejectedNSSAI := p_RejectedNSSAI, /* cl. 9.11.3.46 O TLV 4-42 IEI=69 Sep20 @sic R5s201387 Baseline Moving sic@ */ + cagInfoList := p_CAGInfoList, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + extdRejectedNSSAI := p_ExtdRejectedNSSAI, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterReturnWaitRange := p_DisasterReturnWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + extdCAGInfoList := p_ExtdCAGInfoList, /* cl. 9.11.3.86 O TLV-E 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + lowerBoundTimerValue := p_LowerBoundTimerValue, /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_Roaming := p_ForbidTAIList_Roaming, /* cl. 9.11.3.9 O TLV 9-114 IEI=3B Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_RegProvService := p_ForbidTAIList_RegProvService /* cl. 9.11.3.9 O TLV 9-114 IEI=3C Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template mw_NG_REGISTRATION_REJECT + + template (value) NG_NAS_UL_Message_Type m_NG_DEREGISTRATION_REQUEST_MO( + in template (value) DeregisterType p_DeregisterType, + in template (value) NAS_KeySetIdentifier p_KSI, + in template (value) NG_MobileIdentity p_MobileId + ) := { /* 24.501 cl. 8.2.12 (UE originating deregister) */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + deregistration_RequestMO := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_DeregistrationRequest_MO, /* cl. 9.7 M V 1 */ + ngKSI := p_KSI, /* cl. 9.11.3.32 M V 1/2 */ + deregistrationType := p_DeregisterType, /* cl. 9.11.3.20 M V 1/2 */ + ngMobileId := p_MobileId /* cl. 9.11.3.4 M LV 5-? */ + } + } // End of template m_NG_DEREGISTRATION_REQUEST_MO + + template (present) NG_NAS_UL_Message_Type mw_NG_DEREGISTRATION_REQUEST_MO( + template (present) DeregisterType p_DeregisterType := ?, + template (present) NAS_KeySetIdentifier p_KSI := ?, + template (present) NG_MobileIdentity p_MobileId := ? + ) modifies cr_NG_DEREGISTRATION_REQUEST_MO := + { /* 24.501 cl. 8.2.12 (UE originating deregister) */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + deregistration_RequestMO := { + } + } // End of template mw_NG_DEREGISTRATION_REQUEST_MO + + template (value) NG_NAS_DL_Message_Type m_NG_DEREGISTRATION_ACCEPT_MO modifies cs_NG_DEREGISTRATION_ACCEPT := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.13/15 (DL) */ + deregistration_Accept := { + } + } // End of template m_NG_DEREGISTRATION_ACCEPT_MO + + template (present) NG_NAS_UL_Message_Type mw_NG_DEREGISTRATION_ACCEPT_MO modifies cr_NG_DEREGISTRATION_ACCEPT := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.2.13/15 (UL) */ + deregistration_Accept := { + } + } // End of template mw_NG_DEREGISTRATION_ACCEPT_MO + + template (omit) NG_NAS_DL_Message_Type m_NG_DEREGISTRATION_REQUEST_MT( + in template (value) DeregisterType p_Type, + in template (omit) GMM_GSM_Cause p_Cause := omit, + in template (omit) GPRS_Timer2 p_T3346 := omit, + in template (omit) RejectedNSSAI p_RejectedNSSAI := omit, + in template (omit) CAGInfoList p_CAGInfoList := omit, + in template (omit) ExtdRejectedNSSAI p_ExtdRejectedNSSAI := omit, + in template (omit) RegistrationWaitRange p_DisasterReturnWaitRange := omit, + in template (omit) ExtdCAGInfoList p_ExtdCAGInfoList := omit, + in template (omit) GPRS_Timer3 p_LowerBoundTimerValue := omit, + in template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming := omit, + in template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := omit + ) modifies cs_NG_DEREGISTRATION_REQUEST_MT := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.2.14 (UE terminated deregister) */ + deregistration_RequestMT := { + } + } // End of template m_NG_DEREGISTRATION_REQUEST_MT + + template (present) NG_NAS_DL_Message_Type mw_NG_DEREGISTRATION_REQUEST_MT( + template (present) DeregisterType p_Type := ?, + template GMM_GSM_Cause p_Cause := *, + template GPRS_Timer2 p_T3346 := *, + template RejectedNSSAI p_RejectedNSSAI := *, + template CAGInfoList p_CAGInfoList := *, + template ExtdRejectedNSSAI p_ExtdRejectedNSSAI := *, + template RegistrationWaitRange p_DisasterReturnWaitRange := *, + template ExtdCAGInfoList p_ExtdCAGInfoList := *, + template GPRS_Timer3 p_LowerBoundTimerValue := *, + template NG_TrackingAreaIdList p_ForbidTAIList_Roaming := *, + template NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := * + ) := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.2.14 (UE terminated deregister) */ + deregistration_RequestMT := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_DeregistrationRequest_MT, /* cl. 9.7 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + deregistrationType := p_Type, /* cl. 9.11.3.20 M V 1/2 */ + gmmCause := p_Cause, /* cl. 9.11.3.2 O TV 2 IEI=058 */ + t3346 := p_T3346, /* cl. 9.11.2.4 O TLV 3 IEI=5F */ + rejectedNSSAI := p_RejectedNSSAI, /* cl. 9.11.3.46 O TLV 4-42 IEI=69 Sep20 @sic R5s201387 Baseline Moving sic@ */ + cagInfoList := p_CAGInfoList, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + extdRejectedNSSAI := p_ExtdRejectedNSSAI, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterReturnWaitRange := p_DisasterReturnWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + extdCAGInfoList := p_ExtdCAGInfoList, /* cl. 9.11.3.86 O TLV-E 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + lowerBoundTimerValue := p_LowerBoundTimerValue, /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_Roaming := p_ForbidTAIList_Roaming, /* cl. 9.11.3.9 O TLV 9-114 IEI=3B Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_RegProvService := p_ForbidTAIList_RegProvService /* cl. 9.11.3.9 O TLV 9-114 IEI=3C Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template mw_NG_DEREGISTRATION_REQUEST_MT + + template (value) NG_NAS_DL_Message_Type m_NG_DEREGISTRATION_ACCEPT_MT modifies cs_NG_DEREGISTRATION_ACCEPT := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.13/15 (DL) */ + deregistration_Accept := { + } + } // End of template m_NG_DEREGISTRATION_ACCEPT_MT + + template (present) NG_NAS_UL_Message_Type mw_NG_DEREGISTRATION_ACCEPT_MT modifies cr_NG_DEREGISTRATION_ACCEPT := + { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.2.13/15 (UL) */ + deregistration_Accept := { + } + } // End of template mw_NG_DEREGISTRATION_ACCEPT_MT + + template (omit) NG_NAS_DL_Message_Type m_NG_SECURITY_MODE_COMMAND( + in template (value) NG_NAS_SecurityAlgorithms p_Algs, + in NAS_KsiValue p_KeySetId, + in NG_UE_SecurityCapability p_UECap, + in template (omit) IMEISV_Request p_IMEISV := omit, + in template (omit) NAS_SecurityAlgorithms p_EPSAlgs := omit, + in template (omit) AdditionalSecurityInfo p_AddInfo := omit, + in template (omit) EAP_Message p_EAP := omit, + in template (omit) ABBA p_ABBA := omit, + in template (omit) S1_UE_SecurityCapability p_ReplayedSecurityCap := omit + ) modifies cs_NG_SECURITY_MODE_COMMAND := { /* 24.501 cl. 8.2.25 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + security_Mode_Command := { + } + } // End of template m_NG_SECURITY_MODE_COMMAND + + template (present) NG_NAS_DL_Message_Type mw_NG_SECURITY_MODE_COMMAND( + template (present) NG_NAS_SecurityAlgorithms p_Algs := ?, + template (present) NAS_KsiValue p_KeySetId := ?, + template (present) NG_UE_SecurityCapability p_UECap := ?, + template IMEISV_Request p_IMEISV := *, + template NAS_SecurityAlgorithms p_EPSAlgs := *, + template AdditionalSecurityInfo p_AddInfo := *, + template EAP_Message p_EAP := *, + template ABBA p_ABBA := *, + template S1_UE_SecurityCapability p_ReplayedSecurityCap := * + ) := { /* 24.501 cl. 8.2.25 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + security_Mode_Command := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_SecurityModeCommand, /* cl. 9.7 M V 1 */ + nasSecurityAlgorithms := p_Algs, /* cl. 9.11.3.34 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + ngNasKSI := {iei := ?, tsc := ?, nasKeySetId := p_KeySetId}, // FIXME FSCOM To be enhanced + ueSecurityCapability := p_UECap, /* cl. 9.11.3.54 M LV 3-9 */ + imeisvRequest := p_IMEISV, /* cl. 9.11.3.28 O TV 1 IEI=E */ + epsSecurityAlgorithms := p_EPSAlgs, /* cl. 9.11.3.25 O TV 2 IEI=57 */ + add5GSecurityInfo := p_AddInfo, /* cl. 9.11.3.12 O TLV 3 IEI=36 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + abba := p_ABBA, /* cl. 9.11.3.10 O TLV 4-n IEI=38 Dec18 */ + replayedUESecurityCap := p_ReplayedSecurityCap /* cl. 9.11.3.48 O TLV 4-7 IEI=19 Dec18 */ + } + } // End of template mw_NG_SECURITY_MODE_COMMAND + + template (value) NG_NAS_UL_Message_Type m_NG_SECURITY_MODE_COMPLETE( + in template (value) NG_MobileIdentity p_IMEISV, + in template (value) ReplayedNASMessageContainer p_NASMsg, + in template (value) NG_MobileIdentity p_NonIMEISV_PEI + ) := { /* 24.501 cl. 8.2.26 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + security_Mode_Complete := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_SecurityModeComplete, /* cl. 9.7 M V 1 */ + imeisv := p_IMEISV, /* cl. 9.11.3.4 O TLV 11 IEI=2C */ + nasMsg := p_NASMsg, /* cl. 9.11.3.33 O TLV-E 3-n IEI=7D */ + nonIMEISV_PEI := p_NonIMEISV_PEI /* cl. 9.11.3.4 O TLV-E 7-n IEI=78 Sep20 @sic R5s201387 Baseline Moving sic@ */ + } + } // End of template m_NG_SECURITY_MODE_COMPLETE + + template (present) NG_NAS_UL_Message_Type mw_NG_SECURITY_MODE_COMPLETE( + template (present) NG_MobileIdentity p_IMEISV := ?, + template (present) ReplayedNASMessageContainer p_NASMsg := ?, + template (present) NG_MobileIdentity p_NonIMEISV_PEI := ? + ) modifies cr_NG_SECURITY_MODE_COMPLETE := { /* 24.501 cl. 8.2.26 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + security_Mode_Complete := { + } + } // End of template mw_NG_SECURITY_MODE_COMPLETE + + template (value) NG_NAS_UL_Message_Type m_NG_SECURITY_MODE_REJECT( + in template (value) GMM_GSM_Cause p_Cause + ) := { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.27 */ + security_Mode_Reject := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_SecurityModeReject, /* cl. 9.7 M V 1 */ + gmmCause := p_Cause /* cl. 9.11.3.2 M V 1 */ + } + } // End of template m_NG_SECURITY_MODE_REJECT + + template (present) NG_NAS_UL_Message_Type mw_NG_SECURITY_MODE_REJECT( + template (present) GMM_GSM_Cause p_Cause := ? + ) modifies cr_NG_SECURITY_MODE_REJECT := + { /* @status APPROVED (NR5GC) */ + /* 24.501 cl. 8.2.27 */ + security_Mode_Reject := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_SecurityModeReject, /* cl. 9.7 M V 1 */ + gmmCause := p_Cause /* cl. 9.11.3.2 M V 1 */ + } + } // End of template mw_NG_SECURITY_MODE_REJECT + + template (omit) NG_NAS_UL_Message_Type m_NG_PDU_SESSION_ESTABLISHMENT_REQUEST( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in template (value) ProcedureTransactionIdentifier p_PTI, + in template (omit) PDU_SessionType p_PDU_SessionType := omit, + in template (omit) SSC_Mode p_SSC_Mode := omit, + in template (omit) NG_UE_SM_Cap p_UECap := omit, + in template (omit) MaxNumPacketFilters p_MaxNumPacketFilters := omit, + in template (omit) IntegrityProtMaxDataRate p_IntegrityProtMaxDataRate := omit, + in template (omit) AlwaysOnPDUSessionReq p_AlwaysOnPDUSessionReq := omit, + in template (omit) SM_PDU_DN_RequestContainer p_PDUReq := omit, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit, + in template (omit) IPHeaderCompressionConfig p_IPHeaderCompConfig := omit, + in template (omit) DS_TT_EthernetPortMACAddr p_DS_TT_EthernetPortMACAddr := omit, + in template (omit) UE_DS_TT_ResidenceTime p_UE_DS_TT_ResidenceTime := omit, + in template (omit) PortManagementInfoContainer p_PortManagementInfoContainer := omit, + in template (omit) EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := omit, + in template (omit) PDU_Address p_SuggestedInterfaceId := omit, + in template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit, + in template (omit) RequestedMBSContainer p_RequestedMBS := omit, + in template (omit) PDUSessionPairId p_PduSessionPairId := omit, + in template (omit) RSN p_RSN := omit + ) := { /* 24.501 cl. 8.3.1 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + pdu_Session_Establishment_Request := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionEstablishmentRequest, /* cl. 9.7 M V 1 */ + integrityProtMaxDataRate := p_IntegrityProtMaxDataRate, /* cl. 9.11.4.7 M V 2 */ + pduSessionType := p_PDU_SessionType, /* cl. 9.11.4.11 O TV 1 IEI=9 */ + sscMode := p_SSC_Mode, /* cl. 9.11.4.16 O TV 1 IEI=A */ + smCapability := p_UECap, /* cl. 9.11.4.1 O TLV 3-15 IEI=28 */ + maxNumPacketFilters := p_MaxNumPacketFilters, /* cl. 9.11.4.6 O TV 3 IEI=55 */ + alwaysOnPDUSessionReq := p_AlwaysOnPDUSessionReq, /* cl. 9.11.4.4 O TV 1 IEI=B */ + smPDU_RequestContainer := p_PDUReq, /* cl. 9.11.4.15 O TLV ? ? */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + ipHeaderCompressionConfig := p_IPHeaderCompConfig, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ds_TT_EthernetPortMACAddr := p_DS_TT_EthernetPortMACAddr, /* cl. 9.11.4.25 O TLV 8 IEI=6E Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueDS_TT_ResidenceTime := p_UE_DS_TT_ResidenceTime, /* cl. 9.11.4.26 O TLV 10 IEI=6F Sep20 @sic R5s201387 Baseline Moving sic@ */ + portManagementInfoContainer := p_PortManagementInfoContainer, /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */ + ethernetHeaderCompressConfig := p_EthernetHeaderCompConfig, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + suggestedInterfaceId := p_SuggestedInterfaceId, /* cl. 9.11.4.10 O TLV 11 IEI=29 Sep20 @sic R5s201387 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA, /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + requestedMBS := p_RequestedMBS, /* cl. 9.11.4.30 O TLV-E 8-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + pduSessionPairId := p_PduSessionPairId, /* cl. 9.11.4.32 O TLV 3 IEI=34 Sep22 @sic R5s221179 Baseline Moving sic@ */ + rsn := p_RSN /* cl. 9.11.4.33 O TLV 3 IEI=35 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template m_NG_PDU_SESSION_ESTABLISHMENT_REQUEST + + template (present) NG_NAS_UL_Message_Type mw_NG_PDU_SESSION_ESTABLISHMENT_REQUEST( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template PDU_SessionType p_PDU_SessionType := ?, + template SSC_Mode p_SSC_Mode := *, + template NG_UE_SM_Cap p_UECap := *, + template MaxNumPacketFilters p_MaxNumPacketFilters := *, + template IntegrityProtMaxDataRate p_IntegrityProtMaxDataRate := *, + template AlwaysOnPDUSessionReq p_AlwaysOnPDUSessionReq := *, + template SM_PDU_DN_RequestContainer p_PDUReq := *, + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template IPHeaderCompressionConfig p_IPHeaderCompConfig := *, + template DS_TT_EthernetPortMACAddr p_DS_TT_EthernetPortMACAddr := *, + template UE_DS_TT_ResidenceTime p_UE_DS_TT_ResidenceTime := *, + template PortManagementInfoContainer p_PortManagementInfoContainer := *, + template EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := *, + template PDU_Address p_SuggestedInterfaceId := *, + template ServiceLvlAAContainer p_ServiceLvlAA := *, + template RequestedMBSContainer p_RequestedMBS := *, + template PDUSessionPairId p_PduSessionPairId := *, + template RSN p_RSN := * + ) modifies cr_NG_PDU_SESSION_ESTABLISHMENT_REQUEST := { /* 24.501 cl. 8.3.1 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + pdu_Session_Establishment_Request := { + } + } // End of template mw_NG_PDU_SESSION_ESTABLISHMENT_REQUEST + + template (value) NG_NAS_DL_Message_Type m_NG_PDU_SESSION_ESTABLISHMENT_ACCEPT( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in ProcedureTransactionIdentifier p_PTI, + in template (value) SSC_Mode p_SSC_Mode, + in template (value) PDU_SessionType p_PDU_SessionType, + in template (value) QoS_Rules p_QoS_Rules, + in template (value) Session_AMBR p_Session_AMBR, + in template (omit) GMM_GSM_Cause p_Cause := omit, + in template (omit) PDU_Address p_PDU_Address := omit, + in template (omit) GPRS_Timer p_RQTimer := omit, + in template (omit) S_NSSAI_Type p_S_NSSAI := omit, + in template (omit) AlwaysOnPDUSessionInd p_AlwaysOnPDUSessionInd := omit, + in template (omit) MappedEPSBearerContexts p_MappedEPSBearerContexts := omit, + in template (omit) EAP_Message p_EAP := omit, + in template (omit) QoSFlowDescr p_QoSFlowDescr := omit, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit, + in template (omit) DNN p_DNN := omit, + in template (omit) NGSM_NetworkFeatureSupport p_NGSM_NtwkFeatSupport := omit, + in template (omit) ServingPLMNRateControl p_ServingPLMNRateCtrl := omit, + in template (omit) ATSSSContainer p_ATSSSContainer := omit, + in template (omit) ControlPlaneInd p_ControlPlaneInd := omit, + in template (omit) IPHeaderCompressionConfig p_IPHeaderCompConfig := omit, + in template (omit) EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := omit, + in template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit, + in template (omit) ReceivedMBSContainer p_ReceivedMBS := omit + ) modifies cs_NG_PDU_SESSION_ESTABLISHMENT_ACCEPT := { /* 24.501 cl. 8.3.2 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + pdu_Session_Establishment_Accept := { + } + } // End of template m_NG_PDU_SESSION_ESTABLISHMENT_ACCEPT + + template (present) NG_NAS_DL_Message_Type mw_NG_PDU_SESSION_ESTABLISHMENT_ACCEPT( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template (present) SSC_Mode p_SSC_Mode := ?, + template (present) PDU_SessionType p_PDU_SessionType := ?, + template (present) QoS_Rules p_QoS_Rules := ?, + template (present) Session_AMBR p_Session_AMBR := ?, + template GMM_GSM_Cause p_Cause := *, + template PDU_Address p_PDU_Address := *, + template GPRS_Timer p_RQTimer := *, + template S_NSSAI_Type p_S_NSSAI := *, + template AlwaysOnPDUSessionInd p_AlwaysOnPDUSessionInd := *, + template MappedEPSBearerContexts p_MappedEPSBearerContexts := *, + template EAP_Message p_EAP := *, + template QoSFlowDescr p_QoSFlowDescr := *, + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template DNN p_DNN := *, + template NGSM_NetworkFeatureSupport p_NGSM_NtwkFeatSupport := *, + template ServingPLMNRateControl p_ServingPLMNRateCtrl := *, + template ATSSSContainer p_ATSSSContainer := *, + template ControlPlaneInd p_ControlPlaneInd := *, + template IPHeaderCompressionConfig p_IPHeaderCompConfig := *, + template EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := *, + template ServiceLvlAAContainer p_ServiceLvlAA := *, + template ReceivedMBSContainer p_ReceivedMBS := * + ) := { /* 24.501 cl. 8.3.2 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + pdu_Session_Establishment_Accept := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionEstablishmentAccept, /* cl. 9.7 M V 1 */ + sscMode := p_SSC_Mode, /* cl. 9.11.4.16 M V 1/2 */ + pduSessionType := p_PDU_SessionType, /* cl. 9.11.4.11 M V 1/2 */ + authorizedQoSRules := p_QoS_Rules, /* cl. 9.11.4.13 M LV-E 7-65538 */ + sessionAMBR := p_Session_AMBR, /* cl. 9.11.4.14 M LV ? */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + pduAddress := p_PDU_Address, /* cl. 9.11.4.10 O TLV 7-15 IEI=29 */ + rqTimerValue := p_RQTimer, /* cl. 9.11.2.3 O TLV 2 IEI=56 */ + s_NSSAI := p_S_NSSAI, /* cl. 9.11.2.6 O TLV 3-10 IEI=22 */ + alwaysOnPDUSessionInd := p_AlwaysOnPDUSessionInd, /* c. 9.11.4.3 O TV 1 IEI=8 */ + mappedEPSContexts := p_MappedEPSBearerContexts, /* cl. 9.11.4.9 O TLV-E 7-65538 IEI=7F */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + authorizedQoSFlowDescr := p_QoSFlowDescr, /* cl. 9.11.4.12 O TLV-E 6-65538 IEI=79 */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + dnn := p_DNN, /* cl. 9.11.2.1A O TLV 3-102 IEI=25 */ + ngs_NetworkFeatureSupport := p_NGSM_NtwkFeatSupport, /* cl. 9.11.4.18 O TLV 3-15 IEI=17 Sep20 @sic R5s201387 Baseline Moving sic@ */ + servingPLMNRateControl := p_ServingPLMNRateCtrl, /* cl. 9.11.4.20 O TLV 4 IEI=18 Sep20 @sic R5s201387 Baseline Moving sic@ */ + atsssContainer := p_ATSSSContainer, /* cl. 9.11.4.22 O TLV-E 3-65538 IEI=77 Sep20 @sic R5s201387 Baseline Moving sic@ */ + controlPlaneOnlyIndication := p_ControlPlaneInd, /* cl. 9.11.4.23 O TV 1 IEI=C Sep20 @sic R5s201387 Baseline Moving sic@ */ + ipHeaderCompressionConfig := p_IPHeaderCompConfig, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ethernetHeaderCompressConfig := p_EthernetHeaderCompConfig, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA, /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + receivedMBS := p_ReceivedMBS /* cl. 9.11.4.30 O TLV-E 8-65538 IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template mw_NG_PDU_SESSION_ESTABLISHMENT_ACCEPT + + template (omit) NG_NAS_DL_Message_Type m_NG_PDU_SESSION_ESTABLISHMENT_REJECT( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in template (value) ProcedureTransactionIdentifier p_PTI, + in template (value) GMM_GSM_Cause p_Cause, + in template (omit) GPRS_Timer3 p_BackOff := omit, + in template (omit) AllowedSSCMode p_SSC_Mode := omit, + in template (omit) EAP_Message p_EAP := omit, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit, + in template (omit) ReAttemptIndicator p_ReAttemptIndicator := omit, + in template (omit) NGSM_CongestionReattemptInd p_NGSM_CongestionReattemptInd := omit, // @sic R5s190543 sic@ + in template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit + ) modifies cs_NG_PDU_SESSION_ESTABLISHMENT_REJECT := { /* 24.501 cl. 8.3.3 */ + /* @status APPROVED (NR5GC) */ + pdu_Session_Establishment_Reject := { + } + } // End of template m_NG_PDU_SESSION_ESTABLISHMENT_REJECT + + template (present) NG_NAS_DL_Message_Type mw_NG_PDU_SESSION_ESTABLISHMENT_REJECT( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template (present) GMM_GSM_Cause p_Cause := ?, + template GPRS_Timer3 p_BackOff := *, + template AllowedSSCMode p_SSC_Mode := *, + template EAP_Message p_EAP := *, + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template ReAttemptIndicator p_ReAttemptIndicator := *, + template NGSM_CongestionReattemptInd p_NGSM_CongestionReattemptInd := *, // @sic R5s190543 sic@ + template ServiceLvlAAContainer p_ServiceLvlAA := * + ) := { /* 24.501 cl. 8.3.3 */ + /* @status APPROVED (NR5GC) */ + pdu_Session_Establishment_Reject := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionEstablishmentReject, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 M V 1 */ + backOffTimerValue := p_BackOff, /* cl. 9.11.2.5 O TLV 3 IEI=37 */ + allowedSSCMode := p_SSC_Mode, /* cl. 9.11.4.5 O TV 1 IEI=F */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + ngsmCongestionReattemptInd := p_NGSM_CongestionReattemptInd, /* cl. 9.11.4.2A O TLV 3 IEI=61 Jun19 @sic R5s201387, R5s210444 Baseline Moving sic@ */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + reattemptInd := p_ReAttemptIndicator, /* cl. 9.11.4.17 O TLV 3 IEI=1D Sep20 @sic R5s201387 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template m_NG_PDU_SESSION_ESTABLISHMENT_REJECT + + template (omit) NG_NAS_UL_Message_Type m_NG_PDU_SESSION_RELEASE_REQUEST( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in template (value) ProcedureTransactionIdentifier p_PTI, + in template (omit) GMM_GSM_Cause p_Cause := omit, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit + ) := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.3.12 */ + pdu_Session_Release_Request := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionReleaseRequest, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + } // End of template m_NG_PDU_SESSION_RELEASE_REQUEST + + template (present) NG_NAS_UL_Message_Type mw_NG_PDU_SESSION_RELEASE_REQUEST( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template GMM_GSM_Cause p_Cause := *, + template ExtdProtocolConfigOptions p_ExtdPCO := * + ) modifies cr_NG_PDU_SESSION_RELEASE_REQUEST := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.3.12 */ + pdu_Session_Release_Request := { + } + } // End of template mw_NG_PDU_SESSION_RELEASE_REQUEST + + template (omit) NG_NAS_DL_Message_Type m_NG_PDU_SESSION_RELEASE_REJECT( + in NG_PDU_SessionId p_PDU_SessionId, + in ProcedureTransactionIdentifier p_PTI, + in GMM_GSM_Cause p_Cause, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit + ) modifies cs_NG_PDU_SESSION_RELEASE_REJECT := { /* 24.501 cl. 8.3.13 */ + pdu_Session_Release_Reject := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionReleaseReject, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 M V 1 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + } // End of template m_NG_PDU_SESSION_RELEASE_REJECT + + template (present) NG_NAS_DL_Message_Type mw_NG_PDU_SESSION_RELEASE_REJECT( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template (present) GMM_GSM_Cause p_Cause := ?, + template ExtdProtocolConfigOptions p_ExtdPCO := * + ) := { /* 24.501 cl. 8.3.13 */ + pdu_Session_Release_Reject := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionReleaseReject, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 M V 1 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + } // End of template mw_NG_PDU_SESSION_RELEASE_REJECT + + template (omit) NG_NAS_DL_Message_Type m_NG_PDU_SESSION_RELEASE_COMMAND( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in ProcedureTransactionIdentifier p_PTI, + in template (value) GMM_GSM_Cause p_Cause, + in template (omit) GPRS_Timer3 p_BackOffTimer := omit, + in template (omit) EAP_Message p_EAP := omit, + in template (omit) NGSM_CongestionReattemptInd p_NGSM_CongestionReattemptInd := omit, // @sic R5s190543 sic@ + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit, + in template (omit) AccessType p_AccessType := omit, + in template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit + ) modifies cs_NG_PDU_SESSION_RELEASE_COMMAND := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.3.14 */ + pdu_Session_Release_Command := { + } + } // End of template m_NG_PDU_SESSION_RELEASE_COMMAND + + template (present) NG_NAS_DL_Message_Type mw_NG_PDU_SESSION_RELEASE_COMMAND( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template (present) GMM_GSM_Cause p_Cause := ?, + template GPRS_Timer3 p_BackOffTimer := *, + template EAP_Message p_EAP := *, + template NGSM_CongestionReattemptInd p_NGSM_CongestionReattemptInd := *, // @sic R5s190543 sic@ + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template AccessType p_AccessType := *, + template ServiceLvlAAContainer p_ServiceLvlAA := * + ) := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.3.14 */ + pdu_Session_Release_Command := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionReleaseCommand, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 M V 1 */ + backOffTimerValue := p_BackOffTimer, /* cl. 9.11.2.5 O TLV 3 IEI=37 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + ngsmCongestionReattemptInd := p_NGSM_CongestionReattemptInd, /* cl. 9.11.4.2A O TLV 3 IEI=61 Jun19 @sic R5s190543 sic@ */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + accessType := p_AccessType, /* cl. 9.11.2.1A O TV 1 IEI=D Sep20 @sic R5s201387 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template mw_NG_PDU_SESSION_RELEASE_COMMAND + + template (omit) NG_NAS_UL_Message_Type m_NG_PDU_SESSION_RELEASE_COMPLETE( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in template (value) ProcedureTransactionIdentifier p_PTI, + in template (omit) GMM_GSM_Cause p_Cause := omit, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit + ) := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.3.15 */ + pdu_Session_Release_Complete := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionReleaseComplete, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + } // End of template m_NG_PDU_SESSION_RELEASE_COMPLETE + + template (present) NG_NAS_UL_Message_Type mw_NG_PDU_SESSION_RELEASE_COMPLETE( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template GMM_GSM_Cause p_Cause := *, + template ExtdProtocolConfigOptions p_ExtdPCO := * + ) modifies cr_NG_PDU_SESSION_RELEASE_COMPLETE := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + /* 24.501 cl. 8.3.15 */ + pdu_Session_Release_Complete := { + } + } // End of template mw_NG_PDU_SESSION_RELEASE_COMPLETE + + template (value) NG_NAS_DL_Message_Type m_NG_IDENTITY_REQUEST( + in NAS_IdType p_IdType + ) modifies cs_NG_IDENTITY_REQUEST := { + identity_Request :={} + } // End of template m_NG_IDENTITY_REQUEST + + template (present) NG_NAS_DL_Message_Type mw_NG_IDENTITY_REQUEST( + template (present) NAS_IdType p_IdType := ? + ) := { + identity_Request :={ + protocolDiscriminator := tsc_EPD_GMM, + spareHalfOctet := tsc_SpareHalfOctet, + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_IdentityRequest, + spareHalfOctet2 := tsc_SpareHalfOctet, + identityType := mw_IdentityType(p_IdType) + } + } // End of template mw_NG_IDENTITY_REQUEST + + template (value) NG_NAS_UL_Message_Type m_NG_IDENTITY_RESPONSE( + in NG_MobileIdentity p_MobileId + ) := { + identity_Response :={ + protocolDiscriminator := tsc_EPD_GMM, + spareHalfOctet := tsc_SpareHalfOctet, + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_IdentityResponse, + ngMobileId := p_MobileId + } + } // End of template m_NG_IDENTITY_RESPONSE + + template (present) NG_NAS_UL_Message_Type mw_NG_IDENTITY_RESPONSE( + template (present) NG_MobileIdentity p_MobileId := ? + ) modifies cr_NG_IDENTITY_RESPONSE := { + identity_Response :={} + } // End of template mw_NG_IDENTITY_RESPONSE + + template (omit) NG_NAS_DL_Message_Type m_NG_CONFIGURATION_UPDATE_COMMAND( + in template (omit) ConfigUpdateInd p_ConfigUpdateInd := omit, + in template (omit) NG_MobileIdentity p_Guti := omit, + in template (omit) NG_TrackingAreaIdList p_TaiList := omit, + in template (omit) NSSAI p_AllowedNSSAI := omit, + in template (omit) ServiceAreaIdList p_SaiList := omit, + in template (omit) NetworkName p_FullNetworkName := omit, + in template (omit) NetworkName p_ShortNetworkName := omit, + in template (omit) TimeZone p_LocalTimeZone := omit, + in template (omit) TimeZoneAndTime p_LocalTimeZoneAndTime := omit, + in template (omit) DaylightSavingTime p_DaylightSavingTime := omit, + in template (omit) LADN_Info p_LadnInfo := omit, + in template (omit) MICO_Ind p_MicoInd := omit, + in template (omit) NetworkSlicingInd p_NetworkSlicingInd := omit, + in template (omit) NSSAI p_ConfiguredNSSAI := omit, + in template (omit) RejectedNSSAI p_RejectedNSSAI := omit, + in template (omit) OperatorAccessCatDefinitions p_OperatorAccessCatDefs := omit, + in template (omit) SMSInd p_SmsInd := omit, + in template (omit) GPRS_Timer3 p_T3447 := omit, + in template (omit) CAGInfoList p_CAGInfoList := omit, + in template (omit) UERadioCapId p_UERadioCapId := omit, + in template (omit) UERadioCapIdDeletion p_UERadioCapIdDeletion := omit, + in template (omit) RegistrationResult p_RegistrationResult := omit, + in template (omit) TruncatedS_TMSIConfig p_TruncatedS_TMSIConfig := omit, + in template (omit) AddConfigInfo p_AddConfigInfo := omit, + in template (omit) ExtdRejectedNSSAI p_ExtdRejectedNSSAI := omit, + in template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit, + in template (omit) NSSRG_Info p_NssrgInfo := omit, + in template (omit) RegistrationWaitRange p_DisasterRoamingWaitRange := omit, + in template (omit) RegistrationWaitRange p_DisasterReturnWaitRange := omit, + in template (omit) DisasterPLMNList p_DisasterPLMNList := omit, + in template (omit) ExtdCAGInfoList p_ExtdCAGInfoList := omit, + in template (omit) PEIPS_AssistInfo p_UpdatedPEIPS_AssistInfo := omit, + in template (omit) NSAG_Info p_NsagInfo := omit, + in template (omit) PriorityInd p_PriorityInd := omit + ) modifies cs_NG_CONFIGURATION_UPDATE_COMMAND := { + configuration_Update_Command := {} + } // End of template m_NG_CONFIGURATION_UPDATE_COMMAND + + template NG_NAS_DL_Message_Type mw_NG_CONFIGURATION_UPDATE_COMMAND( + template ConfigUpdateInd p_ConfigUpdateInd := *, + template NG_MobileIdentity p_Guti := *, + template NG_TrackingAreaIdList p_TaiList := *, + template NSSAI p_AllowedNSSAI := *, + template ServiceAreaIdList p_SaiList := *, + template NetworkName p_FullNetworkName := *, + template NetworkName p_ShortNetworkName := *, + template TimeZone p_LocalTimeZone := *, + template TimeZoneAndTime p_LocalTimeZoneAndTime := *, + template DaylightSavingTime p_DaylightSavingTime := *, + template LADN_Info p_LadnInfo := *, + template MICO_Ind p_MicoInd := *, + template NetworkSlicingInd p_NetworkSlicingInd := *, + template NSSAI p_ConfiguredNSSAI := *, + template RejectedNSSAI p_RejectedNSSAI := *, + template OperatorAccessCatDefinitions p_OperatorAccessCatDefs := *, + template SMSInd p_SmsInd := *, + template GPRS_Timer3 p_T3447 := *, + template CAGInfoList p_CAGInfoList := *, + template UERadioCapId p_UERadioCapId := *, + template UERadioCapIdDeletion p_UERadioCapIdDeletion := *, + template RegistrationResult p_RegistrationResult := *, + template TruncatedS_TMSIConfig p_TruncatedS_TMSIConfig := *, + template AddConfigInfo p_AddConfigInfo := *, + template ExtdRejectedNSSAI p_ExtdRejectedNSSAI := *, + template ServiceLvlAAContainer p_ServiceLvlAA := *, + template NSSRG_Info p_NssrgInfo := *, + template RegistrationWaitRange p_DisasterRoamingWaitRange := *, + template RegistrationWaitRange p_DisasterReturnWaitRange := *, + template DisasterPLMNList p_DisasterPLMNList := *, + template ExtdCAGInfoList p_ExtdCAGInfoList := *, + template PEIPS_AssistInfo p_UpdatedPEIPS_AssistInfo := *, + template NSAG_Info p_NsagInfo := *, + template PriorityInd p_PriorityInd := * + ) := { + configuration_Update_Command := { + protocolDiscriminator := tsc_EPD_GMM , /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, /* cl. 9.3 M V 1/2 */ + messageType := tsc_MT_NG_ConfigurationUpdateCommand, /* cl. 9.7 M V 1 */ + configUpdateInd := p_ConfigUpdateInd, /* cl. 9.11.3.18 M TV 1 IEI=D */ + guti := p_Guti, /* cl. 9.11.3.4 O TLV 13 IEI=77 Dec18 */ + taiList := p_TaiList, /* cl. 9.11.3.9 O TLV 9-114 IEI=54 */ + allowedNSSAI := p_AllowedNSSAI, /* cl. 9.11.3.37 O TLV 4-74 IEI=15 */ + saiList := p_SaiList, /* cl. 9.11.3.49 O TLV 6-114 IEI=27 */ + fullNetworkName := p_FullNetworkName, /* cl. 9.11.3.35 O TLV 3-? IEI=43 */ + shortNetworkName := p_ShortNetworkName, /* cl. 9.11.3.35 O TLV 3-? IEI=45 */ + localTimeZone := p_LocalTimeZone, /* cl. 9.11.3.52 O TV 2 IEI=46 */ + localTimeZoneAndTime := p_LocalTimeZoneAndTime, /* cl. 9.11.3.53 O TV 8 IEI=47 */ + daylightSavingTime := p_DaylightSavingTime, /* cl. 9.11.3.19 O TLV 3 IEI=49 */ + ladnInfo := p_LadnInfo, /* cl. 9.11.3.30 O TLV-E 3-1715 IEI=79 */ + micoInd := p_MicoInd, /* cl. 9.11.3.31 O TLV 1 IEI=B */ + networkSlicingInd := p_NetworkSlicingInd, /* cl. 9.11.3.36 O TV 1 IEI=9 */ + configuredNSSAI := p_ConfiguredNSSAI, /* cl. 9.11.3.37 O TLV 4-146 IEI=31 */ + rejectedNSSAI := p_RejectedNSSAI, /* cl. 9.11.3.46 O TLV 4-42 IEI=11 */ + operatorAccessCatDefs := p_OperatorAccessCatDefs, /* cl. 9.11.3.38 O TLV-E 4-n IEI=76 Dec18 */ + smsInd := p_SmsInd, /* cl. 9.10.3.50A O TV 1 IEI=F Dec18 */ + t3447Value := p_T3447, /* cl. 9.11.2.5 O TLV 3 IEI=6C Sep20 @sic R5s201387 Baseline Moving sic@ */ + cagInfoList := p_CAGInfoList, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRadioCapabilityId := p_UERadioCapId, /* cl. 9.11.3.68 O TLV 3-n IEI=67 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ueRadioCapIdDeletionInd := p_UERadioCapIdDeletion, /* cl. 9.11.3.69 O TV 1 IEI=E Sep20 @sic R5s201387 Baseline Moving sic@ */ + registrationResult := p_RegistrationResult, /* cl. 9.11.3.6 O TLV 3 IEI=44 Sep20 @sic R5s201387 Baseline Moving sic@ */ + truncatedS_TMSIConfig := p_TruncatedS_TMSIConfig, /* cl. 9.11.3.70 O TLV 3 IEI=1B Sep20 @sic R5s201387 Baseline Moving sic@ */ + addConfigInfo := p_AddConfigInfo, /* cl. 9.11.3.74 O TV 1 IEI=C Sep20 @sic R5s201387 Baseline Moving sic@ */ + extdRejectedNSSAI := p_ExtdRejectedNSSAI, /* cl. 9.11.3.75 O TLV 5-90 IEI=68 Sep22 @sic R5s221179 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA, /* cl. 9.11.2.10 O TLV-E 6-n IEI=7B Sep22 @sic R5s221179 Baseline Moving sic@ */ + nssrgInfo := p_NssrgInfo, /* cl. 9.11.3.82 O TLV-E 7-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterRoamingWaitRange := p_DisasterRoamingWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=14 Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterReturnWaitRange := p_DisasterReturnWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + disasterPLMNList := p_DisasterPLMNList, /* cl. 9.11.3.83 O TLV 2-n IEI=13 Sep22 @sic R5s221179 Baseline Moving sic@ */ + extdCAGInfoList := p_ExtdCAGInfoList, /* cl. 9.11.3.86 O TLV-E 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + updatedPEIPS_AssistInfo := p_UpdatedPEIPS_AssistInfo, /* cl. 9.11.3.80 O TLV 3-n IEI=33 Sep22 @sic R5s221179 Baseline Moving sic@ */ + nsagInfo := p_NsagInfo, /* cl. 9.11.3.87 O TLV-E 10-n IEI=7C Sep22 @sic R5s221179 Baseline Moving sic@ */ + priorityInd := p_PriorityInd /* cl. 9.11.3.91 O TV 1 IEI=E- Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template m_NG_CONFIGURATION_UPDATE_COMMAND + + template (value) NG_NAS_UL_Message_Type m_NG_CONFIGURATION_UPDATE_COMPLETE := { + configuration_Update_Complete := { + protocolDiscriminator := tsc_EPD_GMM , /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, /* cl. 9.3 M V 1/2 */ + messageType := tsc_MT_NG_ConfigurationUpdateComplete /* cl. 9.7 M V 1 */ + } + } // End of template m_NG_CONFIGURATION_UPDATE_COMPLETE + + template (present) NG_NAS_UL_Message_Type mw_NG_CONFIGURATION_UPDATE_COMPLETE modifies cr_NG_CONFIGURATION_UPDATE_COMPLETE := { + configuration_Update_Complete := { + protocolDiscriminator := tsc_EPD_GMM , /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, /* cl. 9.3 M V 1/2 */ + messageType := tsc_MT_NG_ConfigurationUpdateComplete /* cl. 9.7 M V 1 */ + } + } // End of template mw_NG_CONFIGURATION_UPDATE_COMPLETE + + template (omit) NG_NAS_UL_Message_Type m_NG_UL_NAS_TRANSPORT( + in template (value) PayloadContainerType p_PayloadContainerType, + in template (value) PayloadContainer p_PayloadContainer, + in template (omit) NG_PDU_SessionId p_PDU_SessionId := omit, + in template (omit) NG_PDU_SessionId p_OldPDU_SessionId := omit, + in template (omit) NG_Request_Type p_RequestType := omit, + in template (omit) S_NSSAI_Type p_S_NSSAI := omit, + in template (omit) DNN p_DNN := omit, + in template (omit) AdditionalInformation p_AdditionalInfo := omit, + in template (omit) MA_PDUSessionInfo p_MA_PDUSessionInfo := omit, + in template (omit) ReleaseAssistanceInd p_ReleaseAssistanceInd := omit + ) := { + ul_Nas_Transport := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_UL_NASTransport, /* cl. 9.7 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + payloadContainerType := p_PayloadContainerType, /* cl. 9.11.3.40 M V 1/2 */ + payload := p_PayloadContainer, /* cl. 9.11.3.39 M LV-E 3-65537 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.11.3.41 C TV 2 IEI=70 */ + oldPDUSessionId := p_OldPDU_SessionId, /* cl. 9.11.3.41 O TV 3 IEI=61 */ + requestType := p_RequestType, /* cl. 9.`0.3.47 O TV 1 IEI=8 */ + s_NSSAI := p_S_NSSAI, /* cl. 9.11.2.8 O TLV 3-10 IEI=22 */ + dnn := p_DNN, /* cl. 9.11.3.21 O TLV 3-102 IEI=25 */ + additionalInfo := p_AdditionalInfo, /* cl. 9.11.2.1 O TLV 3-n IEI=24 */ + maPDUSessionInfo := p_MA_PDUSessionInfo, /* cl. 9.11.3.31A O TV 1 IEI=A Sep20 @sic R5s201387 Baseline Moving sic@ */ + releaseAssistanceInd := p_ReleaseAssistanceInd /* cl. 9.11.3.46A O TV 1 IEI=F Sep20 @sic R5s201387 Baseline Moving sic@ */ + } + } // End of template m_NG_UL_NAS_TRANSPORT + + template (present) NG_NAS_UL_Message_Type mw_NG_UL_NAS_TRANSPORT( + template (present) PayloadContainerType p_PayloadContainerType := ?, + template NG_PDU_SessionId p_PDU_SessionId := *, + template NG_PDU_SessionId p_OldPDU_SessionId := *, + template NG_Request_Type p_RequestType := *, + template S_NSSAI_Type p_S_NSSAI := *, + template DNN p_DNN := *, + template AdditionalInformation p_AdditionalInfo := *, + template MA_PDUSessionInfo p_MA_PDUSessionInfo := *, + template ReleaseAssistanceInd p_ReleaseAssistanceInd := * + ) modifies cr_NG_UL_NAS_TRANSPORT := { + ul_Nas_Transport := {} + } // End of template mw_NG_UL_NAS_TRANSPORT + + template (omit) NG_NAS_DL_Message_Type m_NG_DL_NAS_TRANSPORT( + in template (value) PayloadContainerType p_PayloadContainerType, + in template (value) PayloadContainer p_Payload, + in template (omit) NG_PDU_SessionId p_PDU_SessionId := omit, + in template (omit) AdditionalInformation p_AdditionalInfo := omit, + in template (omit) GMM_GSM_Cause p_Cause := omit, + in template (omit) GPRS_Timer3 p_BackOff := omit, + in template (omit) GPRS_Timer3 p_LowerBoundTimerValue := omit + ) modifies cs_NG_DL_NAS_TRANSPORT := { + dl_Nas_Transport := {} + } // End of template m_NG_DL_NAS_TRANSPORT + + template (present) NG_NAS_DL_Message_Type mw_NG_DL_NAS_TRANSPORT( + template (present) PayloadContainerType p_PayloadContainerType := ?, + template (present) PayloadContainer p_Payload := ?, + template NG_PDU_SessionId p_PDU_SessionId := *, + template AdditionalInformation p_AdditionalInfo := *, + template GMM_GSM_Cause p_Cause := *, + template GPRS_Timer3 p_BackOff := *, + template GPRS_Timer3 p_LowerBoundTimerValue := * + ) := { + dl_Nas_Transport := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_DL_NASTransport, /* cl. 9.7 M V 1 */ + spareHalfOctet2 := tsc_SpareHalfOctet, /* cl. 9.5 M V 1/2 */ + payloadContainerType := p_PayloadContainerType, /* cl. 9.11.3.40 M V 1/2 */ + payload := p_Payload, /* cl. 9.11.3.39 M LV-E 3-65537 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.11.3.41 C TV 2 IEI=70 */ + additionalInfo := p_AdditionalInfo, /* cl. 9.11.2.1 O TLV 3-n IEI=24 */ + gmmCause := p_Cause, /* cl. 9.11.3.2 O TV 2 IEI=58 */ + backOffTimerValue := p_BackOff, /* cl. 9.11.2.5 O TLV 3 IEI=37 */ + lowerBoundTimerValue := p_LowerBoundTimerValue /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template mw_NG_DL_NAS_TRANSPORT + + template (omit) NG_NAS_UL_Message_Type m_NG_SERVICE_REQUEST( + in template (value) B4_Type p_ServiceType, + in template (value) NAS_KeySetIdentifier p_KSI, + in template (value) NG_MobileIdentity p_S_TMSI, + in template (omit) ULDataStatus p_ULDataStatus := omit, + in template (omit) PDU_SessionStatus p_PDU_SessionStatus := omit, + in template (omit) AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus := omit, + in template (omit) NASMessageContainer p_Msg := omit, + in template (omit) UE_RequestType p_UeRequestType := omit, + in template (omit) NG_PagingRestriction p_PagingRestrict + ) modifies cr_NG_SERVICE_REQUEST := { + service_Request := {} + } // End of template m_NG_SERVICE_REQUEST + + template (present) NG_NAS_UL_Message_Type mw_NG_SERVICE_REQUEST( + template (present) B4_Type p_ServiceType := ?, + template (present) NAS_KeySetIdentifier p_KSI := ?, + template (present) NG_MobileIdentity p_S_TMSI := ?, + template ULDataStatus p_ULDataStatus := *, + template PDU_SessionStatus p_PDU_SessionStatus := *, + template AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus := *, + template NASMessageContainer p_Msg := *, + template UE_RequestType p_UeRequestType := *, + template NG_PagingRestriction p_PagingRestrict := * + ) := { + service_Request := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_ServiceRequest, /* cl. 9.7 M V 1 */ + serviceType := p_ServiceType, /* cl. 9.11.3.50 M V 1/2 */ + ngKSI := p_KSI, /* cl. 9.11.3.32 M V 1/2 */ + s_TMSI := p_S_TMSI, /* cl. 9.11.3.4 M LV 6 */ + ulDataStatus := p_ULDataStatus, /* cl. 9.11.2.57 O TLV 4-34 IEI=40 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + allowedPDUSessionStatus := p_AllowedPDU_SessionStatus, /* cl. 9.11.3.13 O TLV 4-34 IEI=25 */ + nasMsg := p_Msg, /* cl. 9.11.3.33 O TLV-E 4-n IEI=71 Dec18 */ + ueRequestType := p_UeRequestType, /* cl. 9.11.3.76 O TLV 3 IEI=29 Sep22 @sic R5s221179 Baseline Moving sic@ */ + pagingRestrict := p_PagingRestrict /* cl. 9.11.3.77 O TLV 3-35 IEI=28 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template mw_NG_SERVICE_REQUEST + + template (omit) NG_NAS_DL_Message_Type m_NG_SERVICE_ACCEPT( + in template (omit) PDU_SessionStatus p_PDU_SessionStatus := omit, + in template (omit) PDU_SessionReactivationResult p_PDU_SessionReactivationResult := omit, + in template (omit) PDU_SessionReactivationError p_PDU_SessionReactivationError := omit, + in template (omit) EAP_Message p_EAP := omit, + in template (omit) GPRS_Timer2 p_T3448 := omit, + in template (omit) NG_AddReqResult p_AddRequestResult := omit, + in template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming := omit, + in template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := omit + ) modifies cs_NG_SERVICE_ACCEPT := { + service_Accept := {} + } // End of template m_NG_SERVICE_ACCEPT + + template NG_NAS_DL_Message_Type mw_NG_SERVICE_ACCEPT( + template PDU_SessionStatus p_PDU_SessionStatus := *, + template PDU_SessionReactivationResult p_PDU_SessionReactivationResult := *, + template PDU_SessionReactivationError p_PDU_SessionReactivationError := *, + template EAP_Message p_EAP := *, + template GPRS_Timer2 p_T3448 := *, + template NG_AddReqResult p_AddRequestResult := *, + template NG_TrackingAreaIdList p_ForbidTAIList_Roaming := *, + template NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := * + ) := { + service_Accept := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_ServiceAccept, /* cl. 9.7 M V 1 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + pduSessionReactivationResult := p_PDU_SessionReactivationResult, /* cl. 9.11.3.42 O TLV 4-32 IEI=26 */ + pduSessionReactResultError := p_PDU_SessionReactivationError, /* cl. 9.11.3.43 O TLV-E 5-515 IEI=7E */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78*/ + t3448 := p_T3448, /* cl. 9.11.2.4 O TLV 3 IEI=6B Sep20 @sic R5s201387 Baseline Moving sic@ */ + ngAddRequestResult := p_AddRequestResult, /* cl. 9.11.3.81 O TLV 3 IEI=34 Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_Roaming := p_ForbidTAIList_Roaming, /* cl. 9.11.3.9 O TLV 9-114 IEI=1D Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_RegProvService := p_ForbidTAIList_RegProvService /* cl. 9.11.3.9 O TLV 9-114 IEI=1E Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template mw_NG_SERVICE_ACCEPT + + template (omit) NG_NAS_DL_Message_Type m_NG_SERVICE_REJECT( + in template (value) GMM_GSM_Cause p_Cause, + in template (omit) PDU_SessionStatus p_PDU_SessionStatus := omit, + in template (omit) GPRS_Timer2 p_T3346 := omit, + in template (omit) EAP_Message p_EAP := omit, + in template (omit) GPRS_Timer2 p_T3448 := omit, + in template (omit) CAGInfoList p_CAGInfoList := omit, + in template (omit) RegistrationWaitRange p_DisasterReturnWaitRange := omit, + in template (omit) ExtdCAGInfoList p_ExtdCAGInfoList := omit, + in template (omit) GPRS_Timer3 p_LowerBoundTimerValue := omit, + in template (omit) NG_TrackingAreaIdList p_ForbidTAIList_Roaming := omit, + in template (omit) NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := omit + ) modifies cs_NG_SERVICE_REJECT := { + service_Reject := {} + } // End of template m_NG_SERVICE_REJECT + + template (present) NG_NAS_DL_Message_Type mw_NG_SERVICE_REJECT( + template (present) GMM_GSM_Cause p_Cause := ?, + template PDU_SessionStatus p_PDU_SessionStatus := *, + template GPRS_Timer2 p_T3346 := *, + template EAP_Message p_EAP := *, + template GPRS_Timer2 p_T3448 := *, + template CAGInfoList p_CAGInfoList := *, + template RegistrationWaitRange p_DisasterReturnWaitRange := *, + template ExtdCAGInfoList p_ExtdCAGInfoList := *, + template GPRS_Timer3 p_LowerBoundTimerValue := *, + template NG_TrackingAreaIdList p_ForbidTAIList_Roaming := *, + template NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := * + ) := { + service_Reject := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_ServiceReject, /* cl. 9.7 M V 1 */ + gmmCause := p_Cause, /* cl. 9.11.3.2 M V 1 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + t3346 := p_T3346, /* cl. 9.11.2.4 O TLV 3 IEI=5F */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + t3448 := p_T3448, /* cl. 9.11.2.4 O TLV 3 IEI=6B Sep20 @sic R5s201387 Baseline Moving sic@ */ + cagInfoList := p_CAGInfoList, /* cl. 9.11.3.18A O TLV-E 3-n IEI=75 Sep20 @sic R5s201387 Baseline Moving sic@ */ + disasterReturnWaitRange := p_DisasterReturnWaitRange, /* cl. 9.11.3.84 O TLV 4 IEI=2C Sep22 @sic R5s221179 Baseline Moving sic@ */ + extdCAGInfoList := p_ExtdCAGInfoList, /* cl. 9.11.3.86 O TLV-E 3-n IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + lowerBoundTimerValue := p_LowerBoundTimerValue, /* cl. 9.11.2.5 O TLV 3 IEI=3A Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_Roaming := p_ForbidTAIList_Roaming, /* cl. 9.11.3.9 O TLV 9-114 IEI=3B Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_RegProvService := p_ForbidTAIList_RegProvService /* cl. 9.11.3.9 O TLV 9-114 IEI=3C Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template mw_NG_SERVICE_REJECT + + template (omit) NG_NAS_UL_Message_Type m_NG_CP_SERVICE_REQUEST( + in template (value) NAS_KeySetIdentifier p_NAS_KeySetIdentifier, + in template (value) CP_ServiceType p_CP_ServiceType, + in template (omit) CIoTSmallDataRxdString p_CIoTSmallDataContainer := omit, + in template (omit) PayloadContainerType p_PayloadContainerType := omit, + in template (omit) PayloadContainer p_PayloadContainer := omit, + in template (omit) NG_PDU_SessionId p_NG_PDU_SessionId := omit, + in template (omit) PDU_SessionStatus p_PDU_SessionStatus := omit, + in template (omit) ReleaseAssistanceInd p_ReleaseAssistanceInd := omit, + in template (omit) ULDataStatus p_ULDataStatus := omit, + in template (omit) AdditionalInformation p_AdditionalInfo := omit, + in template (omit) AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus := omit, + in template (omit) NASMessageContainer p_NASMsg := omit, + in template (omit) UE_RequestType p_UeRequestType := omit, + in template (omit) NG_PagingRestriction p_PagingRestrict := omit + ) modifies cr_NG_CP_SERVICE_REQUEST := { + cp_Service_Request := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_CP_Service_Request, /* cl. 9.7 M V 1 */ + ngKSI := p_NAS_KeySetIdentifier, /* cl. 9.11.3.32 M V 1/2 */ + cpServiceType := p_CP_ServiceType, /* cl. 9.11.3.18D M V 1/2 */ + cIoTSmallDataContainer := p_CIoTSmallDataContainer, /* cl. 9.11.3.18B O TLV 4-257 IEI=6F */ + payloadContainerType := p_PayloadContainerType, /* cl. 9.11.3.40 O TV 1 IEI=8 */ + payload := p_PayloadContainer, /* cl. 9.11.3.39 O TLV-E 4-65538 IEI=7B */ + pduSessionId := p_NG_PDU_SessionId, /* cl. 9.11.3.41 C TV 2 IEI=12 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + releaseAssistanceInd := p_ReleaseAssistanceInd, /* cl. 9.11.3.46A O TV 1 IEI=F */ + ulDataStatus := p_ULDataStatus, /* cl. 9.11.2.57 O TLV 4-34 IEI=40 */ + nasMsg := p_NASMsg, /* cl. 9.11.3.33 O TLV-E 3-n IEI=71 */ + additionalInfo := p_AdditionalInfo, /* cl. 9.11.2.1 O TLV 3-n IEI=24 */ + allowedPDUSessionStatus := p_AllowedPDU_SessionStatus, /* cl. 9.11.3.13 O TLV 4-34 IEI=25 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ueRequestType := p_UeRequestType, /* cl. 9.11.3.76 O TLV 3 IEI=29 Sep22 @sic R5s221179 Baseline Moving sic@ */ + pagingRestrict := p_PagingRestrict /* cl. 9.11.3.77 O TLV 3-35 IEI=28 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template m_NG_CP_SERVICE_REQUEST + + template (present) NG_NAS_UL_Message_Type mw_NG_CP_SERVICE_REQUEST( + template (present) NAS_KeySetIdentifier p_NAS_KeySetIdentifier := ?, + template (present) CP_ServiceType p_CP_ServiceType := ?, + template CIoTSmallDataRxdString p_CIoTSmallDataContainer := *, + template PayloadContainerType p_PayloadContainerType := *, + template PayloadContainer p_PayloadContainer := *, + template NG_PDU_SessionId p_NG_PDU_SessionId := *, + template PDU_SessionStatus p_PDU_SessionStatus := *, + template ReleaseAssistanceInd p_ReleaseAssistanceInd := *, + template ULDataStatus p_ULDataStatus := *, + template AdditionalInformation p_AdditionalInfo := *, + template AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus := *, + template NASMessageContainer p_NASMsg := *, + template UE_RequestType p_UeRequestType := *, + template NG_PagingRestriction p_PagingRestrict := * + ) := { + cp_Service_Request := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_CP_Service_Request, /* cl. 9.7 M V 1 */ + ngKSI := p_NAS_KeySetIdentifier, /* cl. 9.11.3.32 M V 1/2 */ + cpServiceType := p_CP_ServiceType, /* cl. 9.11.3.18D M V 1/2 */ + cIoTSmallDataContainer := p_CIoTSmallDataContainer, /* cl. 9.11.3.18B O TLV 4-257 IEI=6F */ + payloadContainerType := p_PayloadContainerType, /* cl. 9.11.3.40 O TV 1 IEI=8 */ + payload := p_PayloadContainer, /* cl. 9.11.3.39 O TLV-E 4-65538 IEI=7B */ + pduSessionId := p_NG_PDU_SessionId, /* cl. 9.11.3.41 C TV 2 IEI=12 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + releaseAssistanceInd := p_ReleaseAssistanceInd, /* cl. 9.11.3.46A O TV 1 IEI=F */ + ulDataStatus := p_ULDataStatus, /* cl. 9.11.2.57 O TLV 4-34 IEI=40 */ + nasMsg := p_NASMsg, /* cl. 9.11.3.33 O TLV-E 3-n IEI=71 */ + additionalInfo := p_AdditionalInfo, /* cl. 9.11.2.1 O TLV 3-n IEI=24 */ + allowedPDUSessionStatus := p_AllowedPDU_SessionStatus, /* cl. 9.11.3.13 O TLV 4-34 IEI=25 Sep22 @sic R5s221179 Baseline Moving sic@ */ + ueRequestType := p_UeRequestType, /* cl. 9.11.3.76 O TLV 3 IEI=29 Sep22 @sic R5s221179 Baseline Moving sic@ */ + pagingRestrict := p_PagingRestrict /* cl. 9.11.3.77 O TLV 3-35 IEI=28 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template m_NG_CP_SERVICE_REQUEST + + template (omit) NG_NAS_DL_Message_Type m_NG_PDU_SESSION_AUTHENTICATION_COMMAND( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in ProcedureTransactionIdentifier p_PTI, + in template (value) EAP_Message p_EAP, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit + ) modifies cs_NG_PDU_SESSION_AUTHENTICATION_COMMAND := { + pdu_Session_Authentication_Command := {} + } // End of template m_NG_PDU_SESSION_AUTHENTICATION_COMMAND + + template (present) NG_NAS_DL_Message_Type mw_NG_PDU_SESSION_AUTHENTICATION_COMMAND( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template (present) EAP_Message p_EAP := ?, + template ExtdProtocolConfigOptions p_ExtdPCO := * + ) := { + pdu_Session_Authentication_Command := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionAuthenticationCommand, /* cl. 9.7 M V 1 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 M LV-E 6-1502 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + } // End of template mw_NG_PDU_SESSION_AUTHENTICATION_COMMAND + + template (omit) NG_NAS_UL_Message_Type m_NG_PDU_SESSION_AUTHENTICATION_COMPLETE( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in template (value) ProcedureTransactionIdentifier p_PTI, + in template (value) EAP_Message p_EAP, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO) := { + pdu_Session_Authentication_Complete := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionAuthenticationComplete, /* cl. 9.7 M V 1 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 M LV-E 6-1502 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + } // End of template m_NG_PDU_SESSION_AUTHENTICATION_COMPLETE + + template (present) NG_NAS_UL_Message_Type mw_NG_PDU_SESSION_AUTHENTICATION_COMPLETE( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template (present) EAP_Message p_EAP := ?, + template ExtdProtocolConfigOptions p_ExtdPCO := * + ) modifies cr_NG_PDU_SESSION_AUTHENTICATION_COMPLETE := { + pdu_Session_Authentication_Complete := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionAuthenticationComplete, /* cl. 9.7 M V 1 */ + eapMessage := p_EAP , /* cl. 9.11.2.2 M LV-E 6-1502 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + } // End of template mw_NG_PDU_SESSION_AUTHENTICATION_COMPLETE + + template (value) NG_NAS_DL_Message_Type m_NG_PDU_SESSION_AUTHENTICATION_RESULT( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in ProcedureTransactionIdentifier p_PTI, + in template (omit) EAP_Message p_EAP := omit, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit + ) modifies cs_NG_PDU_SESSION_AUTHENTICATION_RESULT := { + pdu_Session_Authentication_Result := {} + } // End of template m_NG_PDU_SESSION_AUTHENTICATION_RESULT + + template (present) NG_NAS_DL_Message_Type mw_NG_PDU_SESSION_AUTHENTICATION_RESULT( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template EAP_Message p_EAP := *, + template ExtdProtocolConfigOptions p_ExtdPCO := * + ) := { + pdu_Session_Authentication_Result := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionAuthenticationResult, /* cl. 9.7 M V 1 */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + } // End of template mw_NG_PDU_SESSION_AUTHENTICATION_RESULT + + template (omit) NG_NAS_UL_Message_Type m_NG_PDU_SESSION_MODIFICATION_REQUEST( + template (value) NG_PDU_SessionId p_PDU_SessionId, + template (value) ProcedureTransactionIdentifier p_PTI, + template (omit) NG_UE_SM_Cap p_NG_UE_SM_Cap := omit, + template (omit) GMM_GSM_Cause p_Cause := omit, + template (omit) MaxNumPacketFilters p_MaxNumPacketFilters := omit, + template (omit) AlwaysOnPDUSessionReq p_AlwaysOnPDUSessionReq := omit, + template (omit) IntegrityProtMaxDataRate p_IntegrityProtMaxDataRate := omit, + template (omit) QoS_Rules p_QoS_Rules := omit, + template (omit) QoSFlowDescr p_QoSFlowDescr := omit, + template (omit) MappedEPSBearerContexts p_MappedEPSBearerContexts := omit, + template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit, + template (omit) PortManagementInfoContainer p_PortManagementInfoContainer := omit, + template (omit) IPHeaderCompressionConfig p_IPHeaderCompConfig := omit, + template (omit) EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := omit, + template (omit) RequestedMBSContainer p_RequestedMBS := omit, + template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit + ) := { + pdu_Session_Modification_Request := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionModificationRequest, /* cl. 9.7 M V 1 */ + smCapability := p_NG_UE_SM_Cap, /* cl. 9.11.4.1 O TLV 3-15 IEI=28 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + maxNumPacketFilters := p_MaxNumPacketFilters, /* c. 9.11.4.9 O TV 3 IEI=55 */ + alwaysOnPDUSessionReq := p_AlwaysOnPDUSessionReq, /* c. 9.11.4.4 O TV 1 IEI=B */ + integrityProtMaxDataRate := p_IntegrityProtMaxDataRate, /* c. 9.11.4.7 O TV 2 IEI=13 */ + requestedQoSRules := p_QoS_Rules, /* cl. 9.11.4.13 O TLV-E 7-65538 IEI=7A */ + requestedQoSFlowDescr := p_QoSFlowDescr, /* cl. 9.11.4.12 O TLV-E 5-65538 IEI=79 */ + mappedEPSbearerContexts := p_MappedEPSBearerContexts, /* cl. 9.11.4.8 O TLV-E 7-65538 IEI=7F Dec18 */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + portManagementInfoContainer := p_PortManagementInfoContainer, /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */ + ipHeaderCompressionConfig := p_IPHeaderCompConfig, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ethernetHeaderCompressConfig := p_EthernetHeaderCompConfig, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + requestedMBS := p_RequestedMBS, /* cl. 9.11.4.30 O TLV-E 8-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template m_NG_PDU_SESSION_MODIFICATION_REQUEST + + template (present) NG_NAS_UL_Message_Type mw_NG_PDU_SESSION_MODIFICATION_REQUEST( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template NG_UE_SM_Cap p_NG_UE_SM_Cap := *, + template GMM_GSM_Cause p_Cause := *, + template MaxNumPacketFilters p_MaxNumPacketFilters := *, + template AlwaysOnPDUSessionReq p_AlwaysOnPDUSessionReq := *, + template IntegrityProtMaxDataRate p_IntegrityProtMaxDataRate := *, + template QoS_Rules p_QoS_Rules := *, + template QoSFlowDescr p_QoSFlowDescr := *, + template MappedEPSBearerContexts p_MappedEPSBearerContexts := *, + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template PortManagementInfoContainer p_PortManagementInfoContainer := *, + template IPHeaderCompressionConfig p_IPHeaderCompConfig := *, + template EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := *, + template RequestedMBSContainer p_RequestedMBS := *, + template ServiceLvlAAContainer p_ServiceLvlAA := * + ) modifies cr_NG_PDU_SESSION_MODIFICATION_REQUEST := { + pdu_Session_Modification_Request := {} + } // End of template mw_NG_PDU_SESSION_MODIFICATION_REQUEST + + template (value) NG_NAS_DL_Message_Type m_NG_PDU_SESSION_MODIFICATION_COMMAND( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in ProcedureTransactionIdentifier p_PTI, + in template (omit) GMM_GSM_Cause p_Cause := omit, + in template (omit) Session_AMBR p_Session_AMBR := omit, + in template (omit) GPRS_Timer p_RQTimer := omit, + in template (omit) AlwaysOnPDUSessionInd p_AlwaysOnPDUSessionInd := omit, + in template (omit) QoS_Rules p_QoS_Rules := omit, + in template (omit) QoSFlowDescr p_QoSFlowDescr := omit, + in template (omit) MappedEPSBearerContexts p_MappedEPSBearerContexts := omit, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit, + in template (omit) ATSSSContainer p_ATSSSContainer := omit, + in template (omit) IPHeaderCompressionConfig p_IPHeaderCompConfig := omit, + in template (omit) PortManagementInfoContainer p_PortManagementInfoContainer := omit, + in template (omit) ServingPLMNRateControl p_ServingPLMNRateCtrl := omit, + in template (omit) EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := omit, + in template (omit) ReceivedMBSContainer p_ReceivedMBS := omit, + in template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit + ) modifies cs_NG_PDU_SESSION_MODIFICATION_COMMAND := { + pdu_Session_Modification_Command := {} + } // End of template m_NG_PDU_SESSION_MODIFICATION_COMMAND + + template (present) NG_NAS_DL_Message_Type mw_NG_PDU_SESSION_MODIFICATION_COMMAND( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := ?, + template GMM_GSM_Cause p_Cause := *, + template Session_AMBR p_Session_AMBR := *, + template GPRS_Timer p_RQTimer := *, + template AlwaysOnPDUSessionInd p_AlwaysOnPDUSessionInd := *, + template QoS_Rules p_QoS_Rules := *, + template QoSFlowDescr p_QoSFlowDescr := *, + template MappedEPSBearerContexts p_MappedEPSBearerContexts := *, + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template ATSSSContainer p_ATSSSContainer := *, + template IPHeaderCompressionConfig p_IPHeaderCompConfig := *, + template PortManagementInfoContainer p_PortManagementInfoContainer := *, + template ServingPLMNRateControl p_ServingPLMNRateCtrl := *, + template EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := *, + template ReceivedMBSContainer p_ReceivedMBS := *, + template ServiceLvlAAContainer p_ServiceLvlAA := * + ) := { + pdu_Session_Modification_Command := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionModificationCommand, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + sessionAMBR := p_Session_AMBR, /* cl. 9.11.4.14 O TLV 8 IEI=2A */ + rqTimerValue := p_RQTimer, /* cl. 9.11.2.3 O TV 2 IEI=56 */ + alwaysOnPDUSessionInd := p_AlwaysOnPDUSessionInd, /* c. 9.11.4.3 O TV 1 IEI=8 */ + authorizedQoSRules := p_QoS_Rules, /* cl. 9.11.4.13 O TLV-E 7-65538 IEI=7A */ + mappedEPSContexts := p_MappedEPSBearerContexts, /* cl. 9.11.4.8 O TLV-E 7-65538 IEI=7F */ + authorizedQoSFlowDescr := p_QoSFlowDescr, /* cl. 9.11.4.12 O TLV-E 6-65538 IEI=79 */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + atsssContainer := p_ATSSSContainer, /* cl. 9.11.4.22 O TLV-E 3-65538 IEI=77 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ipHeaderCompressionConfig := p_IPHeaderCompConfig, /* cl. 9.11.4.24 O TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */ + portManagementInfoContainer := p_PortManagementInfoContainer, /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */ + servingPLMNRateControl := p_ServingPLMNRateCtrl, /* cl. 9.11.4.20 O TLV 4 IEI=18 Sep20 @sic R5s201387 Baseline Moving sic@ */ + ethernetHeaderCompressConfig := p_EthernetHeaderCompConfig, /* cl. 9.11.4.28 O TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */ + receivedMBS := p_ReceivedMBS, /* cl. 9.11.4.30 O TLV-E 8-65538 IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */ + serviceLvlAA := p_ServiceLvlAA /* cl. 9.11.2.10 O TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } + } // End of template mw_NG_PDU_SESSION_MODIFICATION_COMMAND + + template (omit) NG_NAS_UL_Message_Type m_NG_PDU_SESSION_MODIFICATION_COMPLETE( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in template (value) ProcedureTransactionIdentifier p_PTI := '00'O, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit, + in template (omit) PortManagementInfoContainer p_PortManagementInfoContainer := omit + ) := { + pdu_Session_Modification_Complete := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionModificationComplete, /* cl. 9.7 M V 1 */ + extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + portManagementInfoContainer := p_PortManagementInfoContainer /* cl. 9.11.4.27 O TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */ + } + } // End of template m_NG_PDU_SESSION_MODIFICATION_COMPLETE + + template (present) NG_NAS_UL_Message_Type mw_NG_PDU_SESSION_MODIFICATION_COMPLETE( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := '00'O, + template ExtdProtocolConfigOptions p_ExtdPCO := *, + template PortManagementInfoContainer p_PortManagementInfoContainer := * + ) modifies cr_NG_PDU_SESSION_MODIFICATION_COMPLETE := { + pdu_Session_Modification_Complete := {} + } // End of template mw_NG_PDU_SESSION_MODIFICATION_COMPLETE + + template (omit) NG_PDU_SESSION_MODIFICATION_REJECT m_NG_PDU_SESSION_MODIFICATION_REJECT( + in template (value) ExtdProtocolDiscriminator p_protocolDiscriminator, + in template (value) NG_PDU_SessionId p_pduSessionId, + in template (value) ProcedureTransactionIdentifier p_procedureTransactionIdentifier, + in template (value) MessageType p_messageType, + in template (value) GMM_GSM_Cause p_gsmCause, + in template (omit) GPRS_Timer3 p_backOffTimerValue := omit, + in template (omit) NGSM_CongestionReattemptInd p_ngsmCongestionReattemptInd := omit, + in template (omit) ExtdProtocolConfigOptions p_extdProtocolConfigurationOptions := omit, + in template (omit) ReAttemptIndicator p_reattemptInd := omit + ) := { + protocolDiscriminator := p_protocolDiscriminator, + pduSessionId := p_pduSessionId, + procedureTransactionIdentifier := p_procedureTransactionIdentifier, + messageType := p_messageType, + gsmCause := p_gsmCause, + backOffTimerValue := p_backOffTimerValue, + ngsmCongestionReattemptInd := p_ngsmCongestionReattemptInd, + extdProtocolConfigurationOptions := p_extdProtocolConfigurationOptions, + reattemptInd := p_reattemptInd + } // End of tmplate m_NG_PDU_SESSION_MODIFICATION_REJECT + + template (present) NG_PDU_SESSION_MODIFICATION_REJECT mw_NG_PDU_SESSION_MODIFICATION_REJECT( + template (present) ExtdProtocolDiscriminator p_protocolDiscriminator, + template (present) NG_PDU_SessionId p_pduSessionId, + template (present) ProcedureTransactionIdentifier p_procedureTransactionIdentifier, + template (present) MessageType p_messageType, + template (present) GMM_GSM_Cause p_gsmCause, + template GPRS_Timer3 p_backOffTimerValue := *, + template NGSM_CongestionReattemptInd p_ngsmCongestionReattemptInd := *, + template ExtdProtocolConfigOptions p_extdProtocolConfigurationOptions := *, + template ReAttemptIndicator p_reattemptInd := * + ) := { + protocolDiscriminator := p_protocolDiscriminator, + pduSessionId := p_pduSessionId, + procedureTransactionIdentifier := p_procedureTransactionIdentifier, + messageType := p_messageType, + gsmCause := p_gsmCause, + backOffTimerValue := p_backOffTimerValue, + ngsmCongestionReattemptInd := p_ngsmCongestionReattemptInd, + extdProtocolConfigurationOptions := p_extdProtocolConfigurationOptions, + reattemptInd := p_reattemptInd + } // End of tmplate mw_NG_PDU_SESSION_MODIFICATION_REJECT + + template (omit) NG_NAS_UL_Message_Type m_NG_PDU_SESSION_MODIFICATION_COMMAND_REJECT( + in template (value) NG_PDU_SessionId p_PDU_SessionId, + in template (value) ProcedureTransactionIdentifier p_PTI := '00'O, + in template (value) GMM_GSM_Cause p_Cause, + in template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit + ) := { + pdu_Session_Modification_Command_Reject := { + protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V 1 */ + pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V 1 */ + procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V 1 */ + messageType := tsc_MT_NG_PDUSessionModificationCommandReject, /* cl. 9.7 M V 1 */ + gsmCause := p_Cause, /* cl. 9.11.4.2 O TV 2 IEI=59 */ + extdProtocolConfigurationOptions := p_ExtdPCO /* cl. 9.11.4.6 O TLV-E 4-65538 IEI=0x7B */ + } + } // End of template m_NG_PDU_SESSION_MODIFICATION_COMMAND_REJECT + + template (present) NG_NAS_UL_Message_Type mw_NG_PDU_SESSION_MODIFICATION_COMMAND_REJECT( + template (present) NG_PDU_SessionId p_PDU_SessionId := ?, + template (present) ProcedureTransactionIdentifier p_PTI := '00'O, + template (present) GMM_GSM_Cause p_Cause := ?, + template ExtdProtocolConfigOptions p_ExtdPCO := * + ) modifies cr_NG_PDU_SESSION_MODIFICATION_COMMAND_REJECT := { + pdu_Session_Modification_Command_Reject := {} + } // End of template mw_NG_PDU_SESSION_MODIFICATION_COMMAND_REJECT + + template (value) NG_GMM_STATUS m_NG_GMM_STATUS( + in template (value) ExtdProtocolDiscriminator p_protocolDiscriminator, + in template (value) SpareHalfOctet p_spareHalfOctet, + in template (value) SecurityHeaderType p_securityHeaderType, + in template (value) MessageType p_messageType, + in template (value) GMM_GSM_Cause p_gmmCause + ) := { + protocolDiscriminator := p_protocolDiscriminator, + spareHalfOctet := p_spareHalfOctet, + securityHeaderType := p_securityHeaderType, + messageType := p_messageType, + gmmCause := p_gmmCause + } // End of template m_NG_GMM_STATUS + + template (present) NG_GMM_STATUS mw_NG_GMM_STATUS( + template (present) ExtdProtocolDiscriminator p_protocolDiscriminator := ?, + template (present) SpareHalfOctet p_spareHalfOctet := ?, + template (present) SecurityHeaderType p_securityHeaderType := ?, + template (present) MessageType p_messageType := ?, + template (present) GMM_GSM_Cause p_gmmCause := ? + ) := { + protocolDiscriminator := p_protocolDiscriminator, + spareHalfOctet := p_spareHalfOctet, + securityHeaderType := p_securityHeaderType, + messageType := p_messageType, + gmmCause := p_gmmCause + } // End of template mw_NG_GMM_STATUS + + template (value) NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMMAND m_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMMAND( + in template (value) ExtdProtocolDiscriminator p_protocolDiscriminator, + in template (value) SpareHalfOctet p_spareHalfOctet, + in template (value) SecurityHeaderType p_securityHeaderType, + in template (value) MessageType p_messageType, + in template (value) S_NSSAI_LV p_sNSSAI, + in template (value) EAP_Message p_eapMessage + ) := { + protocolDiscriminator := p_protocolDiscriminator, + spareHalfOctet := p_spareHalfOctet, + securityHeaderType := p_securityHeaderType, + messageType := p_messageType, + sNSSAI := p_sNSSAI, + eapMessage := p_eapMessage + } // End of template m_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMMAND + + template (present) NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMMAND mw_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMMAND( + template (present) ExtdProtocolDiscriminator p_protocolDiscriminator := ?, + template (present) SpareHalfOctet p_spareHalfOctet := ?, + template (present) SecurityHeaderType p_securityHeaderType := ?, + template (present) MessageType p_messageType := ?, + template (present) S_NSSAI_LV p_sNSSAI := ?, + template (present) EAP_Message p_eapMessage := ? + ) := { + protocolDiscriminator := p_protocolDiscriminator, + spareHalfOctet := p_spareHalfOctet, + securityHeaderType := p_securityHeaderType, + messageType := p_messageType, + sNSSAI := p_sNSSAI, + eapMessage := p_eapMessage + } // End of template mw_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMMAND + + template (value) NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMPLETE m_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMPLETE( + in template (value) ExtdProtocolDiscriminator p_protocolDiscriminator, + in template (value) SpareHalfOctet p_spareHalfOctet, + in template (value) SecurityHeaderType p_securityHeaderType, + in template (value) MessageType p_messageType, + in template (value) S_NSSAI_LV p_sNSSAI, + in template (value) EAP_Message p_eapMessage + ) := { + protocolDiscriminator := p_protocolDiscriminator, + spareHalfOctet := p_spareHalfOctet, + securityHeaderType := p_securityHeaderType, + messageType := p_messageType, + sNSSAI := p_sNSSAI, + eapMessage := p_eapMessage + } // End of template m_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMPLETE + + template (present) NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMPLETE mw_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMPLETE( + template (present) ExtdProtocolDiscriminator p_protocolDiscriminator := ?, + template (present) SpareHalfOctet p_spareHalfOctet := ?, + template (present) SecurityHeaderType p_securityHeaderType := ?, + template (present) MessageType p_messageType := ?, + template (present) S_NSSAI_LV p_sNSSAI := ?, + template (present) EAP_Message p_eapMessage := ? + ) := { + protocolDiscriminator := p_protocolDiscriminator, + spareHalfOctet := p_spareHalfOctet, + securityHeaderType := p_securityHeaderType, + messageType := p_messageType, + sNSSAI := p_sNSSAI, + eapMessage := p_eapMessage + } // End of template mw_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_COMPLETE + + template (value) NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_RESULT m_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_RESULT( + in template (value) ExtdProtocolDiscriminator p_protocolDiscriminator, + in template (value) SpareHalfOctet p_spareHalfOctet, + in template (value) SecurityHeaderType p_securityHeaderType, + in template (value) MessageType p_messageType, + in template (value) S_NSSAI_LV p_sNSSAI, + in template (value) EAP_Message p_eapMessage + ) := { + protocolDiscriminator := p_protocolDiscriminator, + spareHalfOctet := p_spareHalfOctet, + securityHeaderType := p_securityHeaderType, + messageType := p_messageType, + sNSSAI := p_sNSSAI, + eapMessage := p_eapMessage + } // End of template m_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_RESULT + + template (present) NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_RESULT mw_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_RESULT( + template (present) ExtdProtocolDiscriminator p_protocolDiscriminator := ?, + template (present) SpareHalfOctet p_spareHalfOctet := ?, + template (present) SecurityHeaderType p_securityHeaderType := ?, + template (present) MessageType p_messageType := ?, + template (present) S_NSSAI_LV p_sNSSAI := ?, + template (present) EAP_Message p_eapMessage := ? + ) := { + protocolDiscriminator := p_protocolDiscriminator, + spareHalfOctet := p_spareHalfOctet, + securityHeaderType := p_securityHeaderType, + messageType := p_messageType, + sNSSAI := p_sNSSAI, + eapMessage := p_eapMessage + } // End of template mw_NG_NETWORK_SLICE_SPECIFIC_AUTHENTICATION_RESULT + + template (value) NG_NOTIFICATION m_NG_NOTIFICATION( + in template (value) ExtdProtocolDiscriminator p_protocolDiscriminator, + in template (value) SpareHalfOctet p_spareHalfOctet, + in template (value) SecurityHeaderType p_securityHeaderType, + in template (value) MessageType p_messageType, + in template (value) SpareHalfOctet p_spareHalfOctet2, + in template (value) AccessType p_accessType + ) := { + protocolDiscriminator := p_protocolDiscriminator, + spareHalfOctet := p_spareHalfOctet, + securityHeaderType := p_securityHeaderType, + messageType := p_messageType, + spareHalfOctet2 := p_spareHalfOctet2, + accessType := p_accessType + } // End of template m_NG_NOTIFICATION + + template (present) NG_NOTIFICATION mw_NG_NOTIFICATION( + template (present) ExtdProtocolDiscriminator p_protocolDiscriminator := ?, + template (present) SpareHalfOctet p_spareHalfOctet := ?, + template (present) SecurityHeaderType p_securityHeaderType := ?, + template (present) MessageType p_messageType := ?, + template (present) SpareHalfOctet p_spareHalfOctet2 := ?, + template (present) AccessType p_accessType := ? + ) := { + protocolDiscriminator := p_protocolDiscriminator, + spareHalfOctet := p_spareHalfOctet, + securityHeaderType := p_securityHeaderType, + messageType := p_messageType, + spareHalfOctet2 := p_spareHalfOctet2, + accessType := p_accessType + } // End of template mw_NG_NOTIFICATION + + template (value) NG_GSM_STATUS m_NG_GSM_STATUS( + in template (value) ExtdProtocolDiscriminator p_protocolDiscriminator, + in template (value) NG_PDU_SessionId p_pduSessionId, + in template (value) ProcedureTransactionIdentifier p_procedureTransactionIdentifier, + in template (value) MessageType p_messageType, + in template (value) GMM_GSM_Cause p_gsmCause + ) := { + protocolDiscriminator := p_protocolDiscriminator, + pduSessionId := p_pduSessionId, + procedureTransactionIdentifier := p_procedureTransactionIdentifier, + messageType := p_messageType, + gsmCause := p_gsmCause + } // End of template m_NG_GSM_STATUS + + template (present) NG_GSM_STATUS mw_NG_GSM_STATUS( + template (present) ExtdProtocolDiscriminator p_protocolDiscriminator := ?, + template (present) NG_PDU_SessionId p_pduSessionId := ?, + template (present) ProcedureTransactionIdentifier p_procedureTransactionIdentifier := ?, + template (present) MessageType p_messageType := ?, + template (present) GMM_GSM_Cause p_gsmCause := ? + ) := { + protocolDiscriminator := p_protocolDiscriminator, + pduSessionId := p_pduSessionId, + procedureTransactionIdentifier := p_procedureTransactionIdentifier, + messageType := p_messageType, + gsmCause := p_gsmCause + } // End of template mw_NG_GSM_STATUS + + template (value) AuthenticationResponseParameter m_AuthenticationResponseParameter( + in template (value) Type4Length_Type p_iel, + in template (value) B32_128_Type p_ExpectedRES + ) := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := '2D'O, + iel := p_iel, /* RES has length of 32..128 bits i.e. 4..16 octets */ + res := p_ExpectedRES + } // End of template m_AuthenticationResponseParameter + + template (present) AuthenticationResponseParameter mw_AuthenticationResponseParameter( + template (present) B32_128_Type p_ExpectedRES := ? + ) modifies cr_AuthenticationResponseParameter := { /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := '2D'O, + iel := ?, /* RES has length of 32..128 bits i.e. 4..16 octets */ + res := p_ExpectedRES + } // End of template mw_AuthenticationResponseParameter + + template (omit) GMM_GSM_Cause m_GMM_GSM_Cause( + in template (omit) IEI8_Type p_IEI := omit, + in template (value) NAS_CauseValue_Type p_Cause + ) := { /* 24.501 cl. 9.11.3.2, 9.11.4.2 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, /* present in case of TV; omit in case of V */ + causeValue := p_Cause + } // End of template m_GMM_GSM_Cause + + template (present) GMM_GSM_Cause mw_GMM_GSM_Cause( + template (present) IEI8_Type p_IEI := ?, + template (present) NAS_CauseValue_Type p_Cause := ? + ) := { /* 24.501 cl. 9.11.3.2, 9.11.4.2 */ + /* @status APPROVED (IMS, NR5GC, NR5GC_IRAT, POS) */ + iei := p_IEI, /* present in case of TV; omit in case of V */ + causeValue := p_Cause + } // End of template mw_GMM_GSM_Cause + + template (value) IdentityType m_IdentityType( + in NAS_IdType p_NAS_IdType + ) modifies cs_IdentityType := { + } // End of template m_IdentityType + + template (present) IdentityType mw_IdentityType( + template (present) NAS_IdType p_NAS_IdType := ? + ) := { + spare := '0'B, + typeOfId := p_NAS_IdType + } // End of template mw_IdentityType + + //from template (present) NG_MobileIdentity cr_NG_MobileIdentitySUCI - NG_NAS_Common + template (value) NG_MobileIdentity m_NG_MobileIdentitySUCI(template (value) B4_Type p_SUPIFormat, + template (value) octetstring p_OtherDigits) := + { /* @status APPROVED (NR5GC) */ + iei := omit, + iel := int2oct(1+lengthof(p_OtherDigits), 2), // @sic R5s190719 sic@ + idDigit1 := p_SUPIFormat, // 4 bits + oddEvenInd := '0'B, // 1 bit + typeOfId := tsc_IdType_NG_SUCI, // 3 bits + otherDigits := p_OtherDigits + }; + + template RegistrationType m_rt(B1_Type p_fOR, B3_Type p_registrationType):= { /* 24.501 cl. 9.11.3.7 */ + // IEI is always skipped + fOR := p_fOR, + registrationType := p_registrationType + }; + + template (omit) PayloadContainer m_PayloadContainer( + in template (omit) IEI8_Type p_IEI := omit, + in template (value) Type6Length_Type p_IEL, + in template (value) octetstring p_payload + ) := { + iei := p_IEI, /* present in case of TLV; omit in case of LV */ + iel := p_IEL, /* allow any length */ + payload := p_payload /* allow any value for now */ + } // End of template m_PayloadContainer + + template (present) PayloadContainer mw_PayloadContainer( + template IEI8_Type p_IEI := ? + ) modifies cr_PayloadContainer := { + } // End of template mw_PayloadContainer + + template (value) NG_SECURITY_PROTECTED_NAS_MESSAGE m_NG_SECURITY_PROTECTED_NAS_MESSAGE( + in template (value) ExtdProtocolDiscriminator p_protocolDiscriminator, + in template (value) SpareHalfOctet p_spareHalfOctet, + in template (value) SecurityHeaderType p_securityHeaderType, + in template (value) MessageAuthenticationCode p_messageAuthenticationCode, + in template (value) NAS_SequenceNumber p_sequenceNumber, + in template (value) NG_NAS_Message p_plainNASMessage + ) := { /* 24.501 cl. 8.2.28 Significance: dual Direction: both */ + protocolDiscriminator := p_protocolDiscriminator, /* cl. 9.2 M V 1 */ + spareHalfOctet := p_spareHalfOctet, /* cl. 9.5 M V 1/2 */ + securityHeaderType := p_securityHeaderType, /* cl. 9.3 M V 1/2 */ + messageAuthenticationCode := p_messageAuthenticationCode, /* cl. 9.8 M V 4 */ + sequenceNumber := p_sequenceNumber, /* cl. 9.10 M V 1 */ + plainNASMessage := p_plainNASMessage /* cl. 9.9 M V 3-n */ + } // End of template m_NG_SECURITY_PROTECTED_NAS_MESSAGE + + template (present) NG_SECURITY_PROTECTED_NAS_MESSAGE mw_NG_SECURITY_PROTECTED_NAS_MESSAGE( + template (present) ExtdProtocolDiscriminator p_protocolDiscriminator := ?, + template (present) SpareHalfOctet p_spareHalfOctet := ?, + template (present) SecurityHeaderType p_securityHeaderType := ?, + template (present) MessageAuthenticationCode p_messageAuthenticationCode := ?, + template (present) NAS_SequenceNumber p_sequenceNumber := ?, + template (present) NG_NAS_Message p_plainNASMessage := ? + ) := { /* 24.501 cl. 8.2.28 Significance: dual Direction: both */ + protocolDiscriminator := p_protocolDiscriminator, /* cl. 9.2 M V 1 */ + spareHalfOctet := p_spareHalfOctet, /* cl. 9.5 M V 1/2 */ + securityHeaderType := p_securityHeaderType, /* cl. 9.3 M V 1/2 */ + messageAuthenticationCode := p_messageAuthenticationCode, /* cl. 9.8 M V 4 */ + sequenceNumber := p_sequenceNumber, /* cl. 9.10 M V 1 */ + plainNASMessage := p_plainNASMessage /* cl. 9.9 M V 3-n */ + } // End of template mw_NG_SECURITY_PROTECTED_NAS_MESSAGE + + template (present) RAND mw_GMM_AuthRAND( + template (present) B128_Type p_rand := ? + ) := { /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := '21'O, + randValue := p_rand + } // End of template mw_GMM_AuthRAND + + template (present) AUTN mw_GSM_AUTN( + template (present) B128_Type p_autn := ? + ) := { /* @status APPROVED (IMS, IMS_IRAT, LTE_A_IRAT, LTE_IRAT, NR5GC, NR5GC_IRAT, POS, SSNITZ, UTRAN) */ + iei := '20'O, + iel := '10'O, // Length of 16 octets + aUTN := p_autn // value of Authentication Parameter AUTN + } // End of template mw_GSM_AUTN + + template (value) NAS_KeySetIdentifier m_NAS_KeySetIdentifier( + in NAS_KsiValue p_NasKeySetId, + in B1_Type p_Tsc, + in IEI4_Type p_iei + ) modifies cs_NAS_KeySetIdentifier_lv := { + iei := p_iei + } // End of template m_NAS_KeySetIdentifier + + template (present) NAS_KeySetIdentifier mw_NAS_KeySetIdentifier( + template (present) NAS_KsiValue p_KsiValue, + template (present) B1_Type p_Tsc, + template (present) IEI4_Type p_iei + ) modifies cr_NAS_KeySetIdentifier := { + iei := p_iei + } // End of template mw_NAS_KeySetIdentifier + +} // End of module Lib_NG_NAS_Templates \ No newline at end of file diff --git a/ttcn/Lib_NG_NAS/lib_system/LIB_NG_NAS_Functions.ttcn b/ttcn/Lib_NG_NAS/lib_system/LIB_NG_NAS_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..84abfd45828d3f65f7ae8f2629f6111751e57c87 --- /dev/null +++ b/ttcn/Lib_NG_NAS/lib_system/LIB_NG_NAS_Functions.ttcn @@ -0,0 +1,379 @@ +module LIB_NG_NAS_Functions { + + // Lib_NG_NAS + import from Lib_NG_NAS_Interface all; + import from Lib_NG_NAS_Templates all; + import from Lib_NG_NAS_Pixits all; + + // NG_NAS + import from NG_NAS_TypeDefs all; + + // Lib3GPP + import from CommonDefs all; + import from NG_NAS_MsgContainers all; + import from NAS_CommonTypeDefs all; + import from NAS_CommonTemplates all; + import from NG_NAS_Common all; + import from NAS_AuthenticationCommon all; + import from NG_NAS_SecurityFunctions all; + + // Lib_NGAP + import from NGAP_IEs language "ASN.1:2002" all; + import from NGAP_Constants language "ASN.1:2002" all; + import from NGAP_PDU_Descriptions language "ASN.1:2002" all; + import from LibNGAP_Pixits all; + import from LibNGAP_Templates all; + import from LibNGAP_Interface all; + import from LibNGAP_Steps all; + + /** + * @desc Function to send NGSetupRequest message and await for NGSetupResponse message + */ + function f_send_NGSetupRequest_await_NGSetupRespone() runs on NGNASComponent { + f_send_NGAP_PDU( + m_ngap_initMsg( + m_n2_NGSetupRequest( + m_globalRANNodeID_globalGNB_ID( + m_ie_globalGnbId( + PX_PLMN_IDENTITY, + PX_GNB_ID,//'0000000000000000000000'B,//in template (value) bitstring p_gnbId, + -//in template (omit) GlobalGNB_ID.iE_Extensions p_iE_Extensions := omit + )), + { + m_supportedTAItem( + PX_TACode, + { + m_ie_broadcastPLMNItem( + PX_PLMN_IDENTITY,//m_ie_pLMNIdentity('00f110'O), + { + m_sliceSupportItem( + m_s_NSSAI( + PX_SST, + -,// in template (omit) SD p_sD := omit, + -// in template (omit) S_NSSAI.iE_Extensions p_iE_Extensions := omit + ), + -//in template (omit) SliceSupportItem.iE_Extensions p_iE_Extensions := omit + ) + } + ) + },//in template (value) BroadcastPLMNList p_broadcastPLMNList, + -//in template (omit) SupportedTAItem.iE_Extensions p_iE_Extensions := omit + ) + }, + PX_PAGING_DRX + ))); + f_recv_NGAP_PDU( + mw_ngap_succMsg( + mw_n2_NGSetupResponse( + mw_aMFName(PX_AMF_NAME), + { + *, + mw_servedGUAMIItem( + mw_gUAMI( + PX_PLMN_IDENTITY + )), + * + } + ))); + } + + /** + * @desc Function to send NAS RegistrationRequest message + * @see NG_NASTemplateFunctions.f_Check_NG_RegistrationReqMsg + */ + function f_send_NasRegistrationRequest() runs on NGNASComponent { + vt_NgNasUl_Msg := m_NG_REGISTRATION_REQUEST( + {'0'B,'001'B}, + '111'B, + '0'B, + m_NG_MobileIdentitySUCI(PX_SUPI_FORMAT,PX_SUPI_DIGITS) // TODO Use PIXIT here? + ); + vc_sendNAS_PDU := bit2oct(encvalue(valueof(vt_NgNasUl_Msg))); + f_send_NGAP_PDU( + m_ngap_initMsg( + m_n2_UplinkNASTransport( + PX_AMF_UE_NGAP_ID, + PX_RAN_UE_NGAP_ID, + vc_sendNAS_PDU, + m_uPTransportLayerInformation_userLocationInformationNR( + m_userLocationInformationNR( + m_nR_CGI, + m_tAI + ))))); + } + + /** + * @desc Function to await NAS NGSetupResponse message + */ + function f_await_registration_accept() runs on NGNASComponent { + // Await request for REGISTRATION_ACCEPT + f_recv_NGAP_PDU( + mw_ngap_initMsg( + mw_n2_DownlinkNASTransport( + PX_AMF_UE_NGAP_ID, + PX_RAN_UE_NGAP_ID, + ? // AuthorizationRequest + ))); + f_NASPDU_Get(vc_recvNGAP_PDU); + var NG_NAS_DL_Message_Type v_message; + if (f_Check_5GAKA_NAS_DL_Message( + vc_recvNAS_PDU, + mw_NG_REGISTRATION_ACCEPT( + -, + ?, + mw_PLMN_List( + -, -, + { + *, + PX_PLMN_IDENTITY, + * + } + ), + -,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-, + ? + ), + v_message) == false) { + setverdict(fail); + return; + } + } + + /** + * @desc Function to await NAS AuthorizationRequest message and send AuthorizationResponse message with security computation for future encryption + */ + function f_await_NasAuthorizationRequest_send_NasAuthorizationResponse() runs on NGNASComponent { + // Await request for authorization + f_recv_NGAP_PDU( + mw_ngap_initMsg( + mw_n2_DownlinkNASTransport( + PX_AMF_UE_NGAP_ID, + PX_RAN_UE_NGAP_ID, + ? // AuthorizationRequest + ))); + f_NASPDU_Get(vc_recvNGAP_PDU); + var NG_NAS_DL_Message_Type v_message; + if (f_Check_5GAKA_NAS_DL_Message( + vc_recvNAS_PDU, + mw_NG_AUTHENTICATION_REQUEST( + '100'B, + -, + mw_GMM_AuthRAND, + mw_GSM_AUTN + ), + v_message + ) == false) { + setverdict(fail); + return; + } + // Compute RES/XRES + f_5g_aka_compute_res_xres(v_message.authentication_Request.rand.randValue, v_message.authentication_Request.autn.aUTN, v_message.authentication_Request.abba, PX_PLMN_IDENTITY, oct2hex(PX_SUPI_DIGITS), vc_ng_nas_security_params_type); + // Send response + vt_NgNasUl_Msg := m_NG_AUTHENTICATION_RESPONSE( + { iei := '2d'O, iel := '10'O, res := vc_ng_nas_security_params_type.AuthParams.XRES } + ); + vc_sendNAS_PDU := bit2oct(encvalue(valueof(vt_NgNasUl_Msg))); + f_send_NGAP_PDU( + m_ngap_initMsg( + m_n2_UplinkNASTransport( + PX_AMF_UE_NGAP_ID, + PX_RAN_UE_NGAP_ID, + vc_sendNAS_PDU, + m_uPTransportLayerInformation_userLocationInformationNR( + m_userLocationInformationNR( + m_nR_CGI, + m_tAI + ))))); + } + + /******************************************************************************** + * + * FIXME Use or enhance check functions from 3GPP library such as NG_NASTemplateFunctions.f_Check_NG_SecurityModeCompleteMsg + * + ********************************************************************************/ + + function f_await_NasSecurityModeCommand() runs on NGNASComponent { + // Await SecurityModeCommand + f_recv_NGAP_PDU( + mw_ngap_initMsg( + mw_n2_DownlinkNASTransport( + PX_AMF_UE_NGAP_ID, + PX_RAN_UE_NGAP_ID, + ? // Security mode command + ))); + f_NASPDU_Get(vc_recvNGAP_PDU); + var NG_NAS_DL_Message_Type v_message; + if (f_Check_5GAKA_NAS_DL_Message( + vc_recvNAS_PDU, + mw_NG_SECURITY_MODE_COMMAND, + v_message + ) == false) { + setverdict(fail); + return; + } + } + + function f_await_NasSecurityModeCommand_send_NasSecurityModeComplete() runs on NGNASComponent { + // Await SecurityModeCommand + f_recv_NGAP_PDU( + mw_ngap_initMsg( + mw_n2_DownlinkNASTransport( + PX_AMF_UE_NGAP_ID, + PX_RAN_UE_NGAP_ID, + ? // Security mode command + ))); + f_NASPDU_Get(vc_recvNGAP_PDU); + var NG_NAS_DL_Message_Type v_message; + if (f_Check_5GAKA_NAS_DL_Message( + vc_recvNAS_PDU, + mw_NG_SECURITY_MODE_COMMAND, + v_message + ) == false) { + setverdict(fail); + return; + } + // Send SecurityModeComplete + vt_NgNasUl_Msg := m_NG_SECURITY_MODE_COMPLETE( + m_NG_MobileIdentitySUCI(PX_SUPI_FORMAT, PX_SUPI_DIGITS), //in template (value) NG_MobileIdentity p_IMEISV, + { iei := omit, iel := int2oct(0, 2), replayedNASMsgContainerValue := ''O } /* 24.301 cl. 9.9.3.51 @sic R5s170597 Baseline Moving sic@ */, //in template (value) ReplayedNASMessageContainer p_NASMsg, + m_NG_MobileIdentitySUCI(PX_SUPI_FORMAT,PX_SUPI_DIGITS) //in template (value) NG_MobileIdentity p_NonIMEISV_PEI + ); + var octetstring os := ''O; // FIXME f_EncodeAndCipher_NG_NasPdu(vt_NgNasUl_Msg, ); How to calculate NG_NAS_MSG_Request_Type + vt_NgNasUl_Msg.security_Protected_Nas_Message := m_NG_SECURITY_PROTECTED_NAS_MESSAGE( + tsc_EPD_GMM, + tsc_SpareHalfOctet, + tsc_SHT_IntegrityProtected_Ciphered, + '00000000'O, // FIXME How to calculate MessageAuthenticationCode? + '00'O, + os // Cyphered NAS message + ) + vc_sendNAS_PDU := bit2oct(encvalue(valueof(vt_NgNasUl_Msg))); + f_send_NGAP_PDU( + m_ngap_initMsg( + m_n2_UplinkNASTransport( + PX_AMF_UE_NGAP_ID, + PX_RAN_UE_NGAP_ID, + vc_sendNAS_PDU, + m_uPTransportLayerInformation_userLocationInformationNR( + m_userLocationInformationNR( + m_nR_CGI, + m_tAI + ))))); + } + + function f_terminate_NasRegistrationRequest_with_reject() runs on NGNASComponent { + // Send error message + vt_NgNasUl_Msg := m_NG_AUTHENTICATION_FAILURE( + m_GMM_GSM_Cause( + -, + tsc_EmmCause_IllegalMe // '00000110'B; + )); + vc_sendNAS_PDU := bit2oct(encvalue(valueof(vt_NgNasUl_Msg))); + f_send_NGAP_PDU( + m_ngap_initMsg( + m_n2_UplinkNASTransport( + PX_AMF_UE_NGAP_ID, + PX_RAN_UE_NGAP_ID, + vc_sendNAS_PDU, + m_uPTransportLayerInformation_userLocationInformationNR( + m_userLocationInformationNR( + m_nR_CGI, + m_tAI + ))))); + } + + function f_send_NGUERadioCApabilityInfoIndication() runs on NGNASComponent { + f_send_NGAP_PDU( + m_ngap_initMsg( + m_n2_UERadioCapabilityInfoIndication( + -, -, + ''O // FIXME FSCOM How to deal with UERadioCapability + ))); + } + + function f_await_NGInitialContextSetupRequest_send_NGInitialContextSetupRespone() runs on NGNASComponent { + f_recv_NGAP_PDU( + mw_ngap_initMsg( + mw_n2_InitialContextSetupRequest_withPDUSessionList( // FIXME FSCOM How to deal with it? + + ))); + f_send_NGAP_PDU( + m_ngap_succMsg( + m_n2_InitialContextSetupResponse_noPDUSessionResourceSetupListSURes + )); + } + + function f_NASPDU_Get(inout NGAP_PDU p_PDU) runs on NGNASComponent { + + vc_recvNGAP_PDU := p_PDU; + + if (ischosen(p_PDU.initiatingMessage)) { + // Nothing to do + if (match(vc_recvNGAP_PDU.initiatingMessage,mw_n2_NGSetupRequest_base)){ + var integer numOfIEs := lengthof(vc_recvNGAP_PDU.initiatingMessage.value_.NGSetupRequest.protocolIEs) + //log("Number of IEs:",numOfIEs); + for (var integer i:=0;i + #endif + ++#include + + #define AS_TCP_CHUNCK_SIZE 4096 + #define AS_SSL_CHUNCK_SIZE 16384 +@@ -171,6 +172,7 @@ Abstract_Socket::Abstract_Socket() { + remote_host_name = NULL; + remote_port_number = 0; + ai_family = AF_UNSPEC; // default: Auto ++ ip_proto = IPPROTO_TCP; // default + test_port_type=NULL; + test_port_name=NULL; + ttcn_buffer_usercontrol=false; +@@ -199,6 +201,7 @@ Abstract_Socket::Abstract_Socket(const char *tp_type, const char *tp_name) { + remote_host_name = NULL; + remote_port_number = 0; + ai_family = AF_UNSPEC; // default: Auto ++ ip_proto = IPPROTO_TCP; // default + test_port_type=tp_type; + test_port_name=tp_name; + ttcn_buffer_usercontrol=false; +@@ -261,6 +264,10 @@ bool Abstract_Socket::parameter_set(const char *parameter_name, + else if (strcasecmp(parameter_value,"IPv4")==0 || strcasecmp(parameter_value,"AF_INET")==0) ai_family = AF_INET; + else if (strcasecmp(parameter_value,"UNSPEC")==0 || strcasecmp(parameter_value,"AF_UNSPEC")==0) ai_family = AF_UNSPEC; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ai_family_name()); ++ } else if(strcmp(parameter_name, ip_proto_name()) == 0){ ++ if (strcasecmp(parameter_value,"IPPROTO_TCP")==0) ip_proto = IPPROTO_TCP; ++ else if (strcasecmp(parameter_value,"IPPROTO_SCTP")==0) ip_proto = IPPROTO_SCTP; ++ else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ip_proto_name()); + } else if(strcmp(parameter_name, local_port_name()) == 0){ + int a; + if (sscanf(parameter_value, "%d", &a)!=1) log_error("Invalid input as port number given: %s", parameter_value); +@@ -760,6 +767,7 @@ int Abstract_Socket::open_listen_port(const char* localHostname, const char* loc + hints.ai_flags = /*AI_ALL|*/AI_ADDRCONFIG|AI_PASSIVE; + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = ai_family; ++ hints.ai_protocol = ip_proto; + + error = getaddrinfo(localHostname, localServicename, &hints, &aip); + if (error != 0) { +@@ -1143,6 +1151,7 @@ int Abstract_Socket::open_client_connection(const char* remoteHostname, const ch + } + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = ai_family; ++ hints.ai_protocol = ip_proto; + + error = getaddrinfo(remoteHostname, remoteServicename, &hints, &res); + if (error != 0) { +@@ -1191,9 +1200,11 @@ int Abstract_Socket::open_client_connection(const char* remoteHostname, const ch + } + } + +- log_debug("Using address family for socket %d: %s",socket_fd, ++ log_debug("Using address family for socket %d: %s - %s",socket_fd, + ((aip->ai_family==AF_INET)?"IPv4": +- ((aip->ai_family==AF_INET6)?"IPv6":"unknown")) ++ ((aip->ai_family==AF_INET6)?"IPv6":"unknown")), ++ ((aip->ai_protocol==IPPROTO_TCP)?"IPPROTO_TCP": ++ ((aip->ai_protocol==IPPROTO_SCTP)?"IPPROTO_SCTP":"unknown")) + ); + + +@@ -1225,6 +1236,7 @@ int Abstract_Socket::open_client_connection(const char* remoteHostname, const ch + hints.ai_flags = AI_PASSIVE; + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = ai_family;//aip->ai_family; // NOTE: On solaris 10 if is set to aip->ai_family, getaddrinfo will crash for IPv4-mapped addresses! ++ hints.ai_protocol = ip_proto; + + error = getaddrinfo(localHostname, localServicename, &hints, &localAddrinfo); + if (error != 0) { +@@ -1390,10 +1402,13 @@ int Abstract_Socket::open_client_connection(const char* remoteHostname, const ch + } + + log_debug( +- "connected to: host %s service %s via address family %s\n", ++ "connected to: host %s service %s via address family %s with ip_proto %s\n", + remoteHostname, remoteServicename, + ((aip->ai_family==AF_INET)?"IPv4": +- ((aip->ai_family==AF_INET6)?"IPv6":"unknown"))); ++ ((aip->ai_family==AF_INET6)?"IPv6":"unknown")), ++ ((aip->ai_protocol==IPPROTO_TCP)?"IPPROTO_TCP": ++ ((aip->ai_protocol==IPPROTO_SCTP)?"IPPROTO_SCTP":"unknown")) ++ ); + break; + } + if (aip==NULL) { +@@ -1774,18 +1789,19 @@ const char* Abstract_Socket::remote_address_name() { return "destIPAddr + const char* Abstract_Socket::local_address_name() { return "serverIPAddr";} + const char* Abstract_Socket::remote_port_name() { return "destPort";} + const char* Abstract_Socket::ai_family_name() { return "ai_family";} ++const char* Abstract_Socket::ip_proto_name() { return "ip_proto";} + const char* Abstract_Socket::use_connection_ASPs_name() { return "use_connection_ASPs";} + const char* Abstract_Socket::halt_on_connection_reset_name(){ return "halt_on_connection_reset";} +-const char* Abstract_Socket::client_TCP_reconnect_name() { return "client_TCP_reconnect";} ++const char* Abstract_Socket::client_TCP_reconnect_name() { return "client_TCP_reconnect";} + const char* Abstract_Socket::TCP_reconnect_attempts_name() { return "TCP_reconnect_attempts";} +-const char* Abstract_Socket::TCP_reconnect_delay_name() { return "TCP_reconnect_delay";} ++const char* Abstract_Socket::TCP_reconnect_delay_name() { return "TCP_reconnect_delay";} + const char* Abstract_Socket::server_mode_name() { return "server_mode";} + const char* Abstract_Socket::socket_debugging_name() { return "socket_debugging";} + const char* Abstract_Socket::nagling_name() { return "nagling";} + const char* Abstract_Socket::use_non_blocking_socket_name() { return "use_non_blocking_socket";} + const char* Abstract_Socket::server_backlog_name() { return "server_backlog";} +-bool Abstract_Socket::add_user_data(int) {return true;} +-bool Abstract_Socket::remove_user_data(int) {return true;} ++bool Abstract_Socket::add_user_data(int) {return true;} ++bool Abstract_Socket::remove_user_data(int) {return true;} + bool Abstract_Socket::user_all_mandatory_configparameters_present() { return true; } + + diff --git a/ttcn/patch_abstract_socket/Abstract_Socket.hh.patch b/ttcn/patch_abstract_socket/Abstract_Socket.hh.patch new file mode 100644 index 0000000000000000000000000000000000000000..bce5667c9379427f8c787a494a45063e633ca6cb --- /dev/null +++ b/ttcn/patch_abstract_socket/Abstract_Socket.hh.patch @@ -0,0 +1,38 @@ +diff --git a/src/Abstract_Socket.hh b/src/Abstract_Socket.hh +index 6d7bc3d..a068662 100644 +--- a/src/Abstract_Socket.hh ++++ b/src/Abstract_Socket.hh +@@ -134,7 +134,7 @@ protected: + bool get_handle_half_close() const {return handle_half_close;} + int get_socket_fd() const; + int get_listen_fd() const {return listen_fd;} +- ++ + //set non-blocking mode + int set_non_block_mode(int fd, bool enable_nonblock); + +@@ -149,6 +149,8 @@ protected: + const struct sockaddr_in & get_local_addr() {return localAddr; }; /* FIXME: This function is deprecated and should be removed! */ + const int& get_ai_family() const {return ai_family;} + void set_ai_family(int parameter_value) {ai_family=parameter_value;} ++ const int& get_ip_proto() const {return ip_proto;} ++ void set_ip_proto(int parameter_value) {ip_proto=parameter_value;} + bool get_ttcn_buffer_usercontrol() const {return ttcn_buffer_usercontrol; } + void set_nagling(bool parameter_value) {nagling=parameter_value;} + void set_server_mode(bool parameter_value) {server_mode=parameter_value;} +@@ -204,6 +206,7 @@ protected: + virtual const char* local_address_name(); + virtual const char* remote_port_name(); + virtual const char* ai_family_name(); ++ virtual const char* ip_proto_name(); + virtual const char* use_connection_ASPs_name(); + virtual const char* halt_on_connection_reset_name(); + virtual const char* client_TCP_reconnect_name(); +@@ -269,6 +272,7 @@ private: + char* remote_host_name; + unsigned int remote_port_number; + int ai_family; // address family to use ++ int ip_proto; // protocol to use (e.g. IPPROTO_TCP, IPPROTO_SCTP) + // remoteAddr and localAddr is filled when map_user is called + struct sockaddr_in remoteAddr; /* FIXME: not used! should be removed */ + struct sockaddr_in localAddr; /* FIXME: not used! should be removed */ diff --git a/ttcn/patch_lib_ats_ims_iot/module.mk b/ttcn/patch_lib_ats_ims_iot/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..94f8db59cfcbe74ee8163c418d628f7337299e89 --- /dev/null +++ b/ttcn/patch_lib_ats_ims_iot/module.mk @@ -0,0 +1,73 @@ +sources:= \ + lib/AtsImsIot_PIXITS.ttcn \ + lib/AtsImsIot_Templates.ttcn \ + lib/AtsImsIot_TypesAndValues.ttcn \ + lib/AtsImsIot_Templates_GM.ttcn \ + lib/AtsImsIot_Templates_MW.ttcn \ + lib/AtsImsIot_Templates_MM.ttcn \ + lib/AtsImsIot_Templates_MI.ttcn \ + lib/AtsImsIot_Templates_IC.ttcn \ + lib/AtsImsIot_Templates_ISC.ttcn \ + lib/AtsImsIot_Templates_MX.ttcn \ + lib/AtsImsIot_Diameter_Templates.ttcn \ + lib_system/AtsImsIot_Functions.ttcn \ + lib_system/AtsImsIot_TestConfiguration.ttcn \ + lib_system/AtsImsIot_TP_behavior_GM.ttcn \ + lib_system/AtsImsIot_TP_behavior_MW_PS.ttcn \ + lib_system/AtsImsIot_TP_behavior_MW_IS.ttcn \ + lib_system/AtsImsIot_TP_behavior_MW_SI.ttcn \ + lib_system/AtsImsIot_TP_behavior_IC.ttcn \ + lib_system/AtsImsIot_TP_behavior_ISC.ttcn \ + lib_system/AtsImsIot_TP_behavior_MM.ttcn \ + lib_system/AtsImsIot_TP_behavior_MI.ttcn \ + lib_system/AtsImsIot_TP_behavior_MX.ttcn \ + ../patch_lib_ats_ims_iot/ttcn/AtsImsIot_TestSystem.ttcn \ + + +modules := ../LibCommon \ + ../LibIms \ + ../LibIot \ + ../LibMsrp \ + ../LibUpperTester \ + ../LibIms_ConfigAndTrigger \ + ../LibSip \ + ../LibDiameter \ + ../LibEmcom/LibNg112 \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ttcn/LibSecurity \ + ../patch_lib_http \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/Pcap \ + ../../titan-test-system-framework/ccsrc/Protocols/ETH \ + ../../titan-test-system-framework/ccsrc/Protocols/IP \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/Sctp \ + ../../titan-test-system-framework/ccsrc/Protocols/UDP \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ + ../../titan-test-system-framework/ccsrc/Protocols/Http \ + ../../titan-test-system-framework/ccsrc/security \ + ../../ccsrc/Ports/LibSip \ + ../../ccsrc/Ports/ImsMonitorSipPort \ + ../../ccsrc/Ports/ImsMonitorDiameterPort \ + ../../ccsrc/Ports/LibDiameter \ + ../../ccsrc/Ports/Naptr \ + ../../ccsrc/Ports/Data \ + ../../ccsrc/Ports/Sgi \ + ../../ccsrc/Ports/LibIot \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibDiameter \ + ../../ccsrc/EncDec/LibSip \ + ../../ccsrc/EncDec/LibMsrp \ + ../../ccsrc/framework \ + ../../ccsrc/Externals \ + ../../ccsrc/Protocols/ImsMonitor \ + ../../ccsrc/Protocols/Diameter \ + ../../ccsrc/Protocols/LowerLayerPPort \ + ../../ccsrc/Protocols/Sip \ + ../../ccsrc/Protocols/Naptr \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/UpperTester \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/patch_lib_ats_ims_iot/ttcn/AtsImsIot_TestSystem.ttcn b/ttcn/patch_lib_ats_ims_iot/ttcn/AtsImsIot_TestSystem.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..c64d4b92ff24a6355d9d114ca4423cd36f1c4ac1 --- /dev/null +++ b/ttcn/patch_lib_ats_ims_iot/ttcn/AtsImsIot_TestSystem.ttcn @@ -0,0 +1,173 @@ +module AtsImsIot_TestSystem { + + import from LibSip_SIPTypesAndValues all; + import from LibMsrp_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibDiameter_TypesAndValues all; + + /** + * @desc interfaces to the SUT + */ + type component IotSystemInterface { + port DataPort dPort; + port ImsMonitorSipPort sipPort; + port ImsMonitorDiameterPort diameterPort; + port SgiPort sgiPort; + port EquipmentAccessPort eaPort; + port AdapterConfigPort acPort; + } + /** + * @desc + * providing monitoring functionality of involved interfaces. Used as + * PTC. + */ + type component ImsInterfaceMonitor extends InterfaceMonitor { + port DataPort dPort; + port NaptrPort naptrPort; + port ImsMonitorDiameterPort rxPort; + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + type component SipInterfaceMonitor extends InterfaceMonitor { + port ImsMonitorSipPort sipPort; + port ImsCoordinationPort icpPort; + } + type component DiameterInterfaceMonitor extends InterfaceMonitor { + port ImsMonitorDiameterPort diameterPort; + port ImsCoordinationPort icpPort; + } + type component NaptrInterfaceMonitor extends InterfaceMonitor { + port NaptrPort naptrPort; + port ImsCoordinationPort icpPort; + } + type component SgiInterfaceMonitor extends InterfaceMonitor { + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + /** + * @desc + * used to coordinate the behavior of other components. It is in charge + * of controlling the overall execution, manangement of testing phases, + * test verdicts collection and synchronization. Used as MTC. + */ + type component ImsTestCoordinator extends TestCoordinator { + port ImsCoordinationPort icpPort; + var VxLTEMonitorInterfaceList vc_MonIntfList; + var CF_VXLTE_Interfaces vc_vxlte_monitor_components; + } + + group portDefinitions { + type port ImsCoordinationPort message { + inout SipMessage, DIAMETER_MSG; + } with { + extension "internal" + } + type port DataPort message { + in Request, Response, SEND_request, RECEIVE_response; // SIP + } + type port ImsMonitorSipPort message { //type port SipPort message + in Request, Response, SEND_request, RECEIVE_response; // SIP + } + type port NaptrPort message { + in NAPTRmessage; + } + type port ImsMonitorDiameterPort message { + in DIAMETER_MSG; + } + type port SgiPort message { + in charstring; + } + } + + type record CF_INT_CALL { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB optional, + ImsInterfaceMonitor naptr optional + } + type record CF_INT_AS { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor gmB, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_ROAM_AS { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_EPC_CALL { + ImsInterfaceMonitor gmA, // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + ImsInterfaceMonitor rx, // See ETSI TS 103 029 V3.1.1 clause 5.4.2 + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mw, + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + } + + group g_release15 { + + type record CF_VXLTE_Interfaces{ + SipInterfaceMonitor gmA optional, + SipInterfaceMonitor gmB optional, + SipInterfaceMonitor mmB_PSAP optional,// MmMx interface at IBCF to PSAP + SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF or E-CSCF/BGCF + SipInterfaceMonitor mlE_LRF optional,// Ml interface at E-CSCF/LRF + SipInterfaceMonitor mwS_PSAP optional,// MwMmMx interface at E,SCSCF to PSAP + SipInterfaceMonitor ic optional, + SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + SipInterfaceMonitor mwPS optional, + SipInterfaceMonitor mwPE optional,// Mw interface at P-CSCF to E-CSCF + SipInterfaceMonitor mwIS optional,// Mw interface at I-CSCF/S-CSCF + SipInterfaceMonitor mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF + SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF + SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF + SipInterfaceMonitor isc optional, + DiameterInterfaceMonitor cxIH optional, + DiameterInterfaceMonitor cxSH optional, + DiameterInterfaceMonitor gx optional, + DiameterInterfaceMonitor rx optional, + DiameterInterfaceMonitor s6a optional, + DiameterInterfaceMonitor s9 optional, + DiameterInterfaceMonitor sh optional + } + + type record CF_ATT_old { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor rx, + ImsInterfaceMonitor s6a, + ImsInterfaceMonitor gx, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mwPS, // Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + ImsInterfaceMonitor mwIS, // Mw interface at I-CSCF/S-CSCF + ImsInterfaceMonitor mwSI, // Mw interface at S-CSCF/IBCF + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB + } + + type record CF_ATT { + SipInterfaceMonitor gmA, + DiameterInterfaceMonitor rx, + DiameterInterfaceMonitor s6a, + DiameterInterfaceMonitor gx, + SipInterfaceMonitor mxA, + SipInterfaceMonitor mw, + SgiInterfaceMonitor sgi, + SipInterfaceMonitor gmB + } + } // end of g_release15 + +} \ No newline at end of file diff --git a/ttcn/patch_lib_common_titan/module.mk b/ttcn/patch_lib_common_titan/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..905b4887a000439649532bbbb61e8e39df20d6dc --- /dev/null +++ b/ttcn/patch_lib_common_titan/module.mk @@ -0,0 +1,9 @@ +sources := \ + ttcn/LibCommon_AbstractData.ttcn \ + ttcn/LibCommon_TextStrings.ttcn \ + ttcn/LibCommon_Time.ttcn \ + ttcn/LibCommon_VerdictControl.ttcn \ + ../patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn \ + ../patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn \ + ../patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn \ + diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..14f8f57cb8ccdc5ce7953f4d9f85741b656d4593 --- /dev/null +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn @@ -0,0 +1,250 @@ +/** + * @author ETSI + * @version $URL$ + * $Id$ + * @desc A collection of basic type and value definitions which may be + * useful in the implementation of any TTCN-3 test suite.

+ * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * + */ + module LibCommon_BasicTypesAndValues { + + /** + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group unsignedIntegerDefintions { + + const integer c_uInt1Max := 1; + const integer c_uInt2Max := 3; + const integer c_uInt3Max := 7; + const integer c_uInt4Max := 15; + const integer c_uInt5Max := 31; + const integer c_uInt6Max := 63; + const integer c_uInt7Max := 127; + const integer c_uInt8Max := 255; + const integer c_uInt9Max := 511; + const integer c_uInt10Max := 1023; + const integer c_uInt11Max := 2047; + const integer c_uInt12Max := 4095; + const integer c_uInt13Max := 8191; + const integer c_uInt14Max := 16383; + const integer c_uInt15Max := 32767; + const integer c_uInt16Max := 65535; + const integer c_uInt17Max := 131071; + const integer c_uInt18Max := 262143; + const integer c_uInt19Max := 524287; + const integer c_uInt20Max := 1048575; + const integer c_uInt21Max := 2097151; + const integer c_uInt22Max := 4194303; + const integer c_uInt23Max := 8388607; + const integer c_uInt24Max := 16777215; + const integer c_uInt25Max := 33554431; + const integer c_uInt26Max := 67108863; + const integer c_uInt27Max := 134217727; + const integer c_uInt28Max := 268435456; + const integer c_uInt29Max := 536870911; + const integer c_uInt30Max := 1073741823; + const integer c_uInt31Max := 2147483647; + const integer c_uInt32Max := 4294967295; + const integer c_uInt36Max := 68719476735; + const integer c_uInt48Max := 281474976710655; + const integer c_uInt52Max := 4503599627370495; + const integer c_uInt64Max := 18446744073709551615; + + type integer UInt (0 .. infinity); + type integer UInt1 (0 .. c_uInt1Max) with {variant "unsigned 1 bit"}; + type integer UInt2 (0 .. c_uInt2Max) with {variant "unsigned 2 bit"}; + type integer UInt3 (0 .. c_uInt3Max) with {variant "unsigned 3 bit"}; + type integer UInt4 (0 .. c_uInt4Max) with {variant "unsigned 4 bit"}; + type integer UInt5 (0 .. c_uInt5Max) with {variant "unsigned 5 bit"}; + type integer UInt6 (0 .. c_uInt6Max) with {variant "unsigned 6 bit"}; + type integer UInt7 (0 .. c_uInt7Max) with {variant "unsigned 7 bit"}; + type integer UInt8 (0 .. c_uInt8Max) with {variant "unsigned 8 bit"}; + type integer UInt9 (0 .. c_uInt9Max) with {variant "unsigned 9 bit"}; + type integer UInt10 (0 .. c_uInt10Max) with {variant "unsigned 10 bit"}; + type integer UInt11 (0 .. c_uInt11Max) with {variant "unsigned 11 bit"}; + type integer UInt12 (0 .. c_uInt12Max) with {variant "unsigned 12 bit"}; + type integer UInt13 (0 .. c_uInt13Max) with {variant "unsigned 13 bit"}; + type integer UInt14 (0 .. c_uInt14Max) with {variant "unsigned 14 bit"}; + type integer UInt15 (0 .. c_uInt15Max) with {variant "unsigned 15 bit"}; + type integer UInt16 (0 .. c_uInt16Max) with {variant "unsigned 16 bit"}; + type integer UInt17 (0 .. c_uInt17Max) with {variant "unsigned 17 bit"}; + type integer UInt18 (0 .. c_uInt18Max) with {variant "unsigned 18 bit"}; + type integer UInt19 (0 .. c_uInt19Max) with {variant "unsigned 19 bit"}; + type integer UInt20 (0 .. c_uInt20Max) with {variant "unsigned 20 bit"}; + type integer UInt21 (0 .. c_uInt21Max) with {variant "unsigned 21 bit"}; + type integer UInt22 (0 .. c_uInt22Max) with {variant "unsigned 22 bit"}; + type integer UInt23 (0 .. c_uInt23Max) with {variant "unsigned 23 bit"}; + type integer UInt24 (0 .. c_uInt24Max) with {variant "unsigned 24 bit"}; + type integer UInt25 (0 .. c_uInt25Max) with {variant "unsigned 25 bit"}; + type integer UInt26 (0 .. c_uInt26Max) with {variant "unsigned 26 bit"}; + type integer UInt27 (0 .. c_uInt27Max) with {variant "unsigned 27 bit"}; + type integer UInt28 (0 .. c_uInt28Max) with {variant "unsigned 28 bit"}; + type integer UInt29 (0 .. c_uInt29Max) with {variant "unsigned 29 bit"}; + type integer UInt30 (0 .. c_uInt30Max) with {variant "unsigned 30 bit"}; + type integer UInt31 (0 .. c_uInt31Max) with {variant "unsigned 31 bit"}; + type integer UInt32 (0 .. c_uInt32Max) with {variant "unsigned 32 bit"}; + type integer UInt36 (0 .. c_uInt36Max) with {variant "unsigned 36 bit"}; + type integer UInt48 (0 .. c_uInt48Max) with {variant "unsigned 48 bit"}; + type integer UInt52 (0 .. c_uInt52Max) with {variant "unsigned 52 bit"}; + type integer UInt64 (0 .. c_uInt64Max) with {variant "unsigned 64 bit"}; + + } // end group unsignedIntegerDefintions + + /** + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group signedIntegerDefintions { + + const integer c_int1Min := -1; + const integer c_int1Max := 0; + const integer c_int2Min := -2; + const integer c_int2Max := 1; + const integer c_int3Min := -4; + const integer c_int3Max := 3; + const integer c_int4Min := -8; + const integer c_int4Max := 7; + const integer c_int5Min := -16; + const integer c_int5Max := 15; + const integer c_int6Min := -32; + const integer c_int6Max := 31; + const integer c_int7Min := -64; + const integer c_int7Max := 63; + const integer c_int8Min := -128; + const integer c_int8Max := 127; + const integer c_int9Min := -256; + const integer c_int9Max := 255; + const integer c_int10Min := -512; + const integer c_int10Max := 511; + const integer c_int11Min := -1024; + const integer c_int11Max := 1023; + const integer c_int12Min := -2048; + const integer c_int12Max := 2047; + const integer c_int13Min := -4096; + const integer c_int13Max := 4095; + const integer c_int14Min := -8192; + const integer c_int14Max := 8191; + const integer c_int15Min := -16384; + const integer c_int15Max := 16383; + const integer c_int16Min := -32768; + const integer c_int16Max := 32767; + const integer c_int17Min := -65536; + const integer c_int17Max := 65535; + const integer c_int18Min := -131072; + const integer c_int18Max := 131071; + const integer c_int19Min := -262144; + const integer c_int19Max := 262143; + const integer c_int20Min := -524288; + const integer c_int20Max := 524287; + const integer c_int21Min := -1048576; + const integer c_int21Max := 1048575; + const integer c_int22Min := -2097152; + const integer c_int22Max := 2097151; + const integer c_int23Min := -4194304; + const integer c_int23Max := 4194303; + const integer c_int24Min := -8388608; + const integer c_int24Max := 8388607; + const integer c_int25Min := -16777216; + const integer c_int25Max := 16777215; + const integer c_int26Min := -33554432; + const integer c_int26Max := 33554431; + const integer c_int27Min := -67108864; + const integer c_int27Max := 67108863; + const integer c_int28Min := -134217728; + const integer c_int28Max := 134217727; + const integer c_int29Min := -268435456; + const integer c_int29Max := 268435456; + const integer c_int30Min := -536870912; + const integer c_int30Max := 536870911; + const integer c_int31Min := -1073741824; + const integer c_int31Max := 1073741823; + const integer c_int32Min := -2147483648; + const integer c_int32Max := 2147483647; + const integer c_int64Min := -9223372036854775808; + const integer c_int64Max := 9223372036854775807; + + type integer Int; + type integer Int1 (c_int1Min .. c_int1Max) with { variant "1 bit"}; + type integer Int2 (c_int2Min .. c_int2Max) with { variant "2 bit"}; + type integer Int3 (c_int3Min .. c_int3Max) with { variant "3 bit"}; + type integer Int4 (c_int4Min .. c_int4Max) with { variant "4 bit"}; + type integer Int5 (c_int5Min .. c_int5Max) with { variant "5 bit"}; + type integer Int6 (c_int6Min .. c_int6Max) with { variant "6 bit"}; + type integer Int7 (c_int7Min .. c_int7Max) with { variant "7 bit"}; + type integer Int8 (c_int8Min .. c_int8Max) with { variant "8 bit"}; + type integer Int9 (c_int9Min .. c_int9Max) with { variant "9 bit"}; + type integer Int10 (c_int10Min .. c_int10Max) with { variant "10 bit"}; + type integer Int11 (c_int11Min .. c_int11Max) with { variant "11 bit"}; + type integer Int12 (c_int12Min .. c_int12Max) with { variant "12 bit"}; + type integer Int13 (c_int13Min .. c_int13Max) with { variant "13 bit"}; + type integer Int14 (c_int14Min .. c_int14Max) with { variant "14 bit"}; + type integer Int15 (c_int15Min .. c_int15Max) with { variant "15 bit"}; + type integer Int16 (c_int16Min .. c_int16Max) with { variant "16 bit"}; + type integer Int17 (c_int17Min .. c_int17Max) with { variant "17 bit"}; + type integer Int18 (c_int18Min .. c_int18Max) with { variant "18 bit"}; + type integer Int19 (c_int19Min .. c_int19Max) with { variant "19 bit"}; + type integer Int20 (c_int20Min .. c_int20Max) with { variant "20 bit"}; + type integer Int21 (c_int21Min .. c_int21Max) with { variant "21 bit"}; + type integer Int22 (c_int22Min .. c_int22Max) with { variant "22 bit"}; + type integer Int23 (c_int23Min .. c_int23Max) with { variant "23 bit"}; + type integer Int24 (c_int24Min .. c_int24Max) with { variant "24 bit"}; + type integer Int25 (c_int25Min .. c_int25Max) with { variant "25 bit"}; + type integer Int26 (c_int26Min .. c_int26Max) with { variant "26 bit"}; + type integer Int27 (c_int27Min .. c_int27Max) with { variant "27 bit"}; + type integer Int28 (c_int28Min .. c_int28Max) with { variant "28 bit"}; + type integer Int29 (c_int29Min .. c_int29Max) with { variant "29 bit"}; + type integer Int30 (c_int30Min .. c_int30Max) with { variant "30 bit"}; + type integer Int31 (c_int31Min .. c_int31Max) with { variant "31 bit"}; + type integer Int32 (c_int32Min .. c_int32Max) with { variant "32 bit"}; + type integer Int64 (c_int64Min .. c_int64Max) with { variant "64 bit"}; + + } // end group signedIntegerDefintions + + group zeroedIntegers { + + const UInt1 c_uInt1Zero := 0; + const UInt2 c_uInt2Zero := 0; + const UInt3 c_uInt3Zero := 0; + const UInt4 c_uInt4Zero := 0; + const UInt5 c_uInt5Zero := 0; + const UInt6 c_uInt6Zero := 0; + const UInt7 c_uInt7Zero := 0; + const UInt8 c_uInt8Zero := 0; + const UInt10 c_uInt10Zero := 0; + const UInt12 c_uInt12Zero := 0; + const UInt14 c_uInt14Zero := 0; + const UInt16 c_uInt16Zero := 0; + const UInt24 c_uInt24Zero := 0; + const UInt32 c_uInt32Zero := 0; + const UInt48 c_uInt48Zero := 0; + + }//end group zeroedInt + + /** + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group booleanDefintions { + + type boolean Bool1 with { variant "1 bit" }; + type boolean Bool2 with { variant "2 bit" }; + type boolean Bool3 with { variant "3 bit" }; + type boolean Bool4 with { variant "4 bit" }; + type boolean Bool5 with { variant "5 bit" }; + type boolean Bool6 with { variant "6 bit" }; + type boolean Bool7 with { variant "7 bit" }; + type boolean Bool8 with { variant "8 bit" }; + + } // end group booleanDefintions + +} // end module LibCommon_BasicTypesAndValues diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..9bfbe61a78b4cb161929cae010cf34f510d97e00 --- /dev/null +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn @@ -0,0 +1,168 @@ +/** + * + * @author ETSI + * @version $URL$ + * $Id$ + * @desc A collection of data string type and value definitions which + * may be useful in the implementation of any TTCN-3 test + * suite. "Data string" refers to TTCN-3 hexstring, octetstring + * and bitstring types. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * + */ + module LibCommon_DataStrings { + + /** + * @remark Number in name indicates string length in number of + * _bits_ + */ + group bitStringSubTypes { + + type bitstring Bit1 length(1) with {encode "length(1)"}; + type bitstring Bit2 length(2) with {encode "length(2)"}; + type bitstring Bit3 length(3) with {encode "length(3)"}; + type bitstring Bit4 length(4) with {encode "length(4)"}; + type bitstring Bit5 length(5) with {encode "length(5)"}; + type bitstring Bit6 length(6) with {encode "length(6)"}; + type bitstring Bit7 length(7) with {encode "length(7)"}; + type bitstring Bit8 length(8) with {encode "length(8)"}; + type bitstring Bit9 length(9) with {encode "length(9)"}; + type bitstring Bit10 length(10) with {encode "length(10)"}; + type bitstring Bit11 length(11) with {encode "length(11)"}; + type bitstring Bit12 length(12) with {encode "length(12)"}; + type bitstring Bit13 length(13) with {encode "length(13)"}; + type bitstring Bit14 length(14) with {encode "length(14)"}; + type bitstring Bit15 length(15) with {encode "length(15)"}; + type bitstring Bit16 length(16) with {encode "length(16)"}; + type bitstring Bit17 length(17) with {encode "length(17)"}; + type bitstring Bit18 length(18) with {encode "length(18)"}; + type bitstring Bit19 length(19) with {encode "length(19)"}; + type bitstring Bit20 length(20) with {encode "length(20)"}; + type bitstring Bit21 length(21) with {encode "length(21)"}; + type bitstring Bit22 length(22) with {encode "length(22)"}; + type bitstring Bit23 length(23) with {encode "length(23)"}; + type bitstring Bit24 length(24) with {encode "length(24)"}; + type bitstring Bit25 length(25) with {encode "length(25)"}; + type bitstring Bit26 length(26) with {encode "length(26)"}; + type bitstring Bit27 length(27) with {encode "length(27)"}; + type bitstring Bit28 length(28) with {encode "length(28)"}; + type bitstring Bit29 length(29) with {encode "length(29)"}; + type bitstring Bit30 length(30) with {encode "length(30)"}; + type bitstring Bit31 length(31) with {encode "length(31)"}; + type bitstring Bit32 length(32) with {encode "length(32)"}; + type bitstring Bit40 length(40) with {encode "length(40)"}; + + type bitstring Bit48 length(48) with {encode "length(48)"}; + type bitstring Bit64 length(64) with {encode "length(64)"}; + type bitstring Bit72 length(72) with {encode "length(72)"}; + type bitstring Bit128 length(128) with {encode "length(128)"}; + type bitstring Bit144 length(144) with {encode "length(144)"}; + type bitstring Bit256 length(256) with {encode "length(256)"}; + + } // end group bitStringSubTypes + + group zeroedBits { + + const Bit1 c_1ZeroBit := int2bit(0,1); + const Bit2 c_2ZeroBits := int2bit(0,2); + const Bit4 c_4ZeroBits := int2bit(0,4); + const Bit5 c_5ZeroBits := int2bit(0,5); + const Bit6 c_6ZeroBits := int2bit(0,6); + const Bit8 c_8ZeroBits := int2bit(0,8); + const Bit14 c_14ZeroBits := int2bit(0,14); + const Bit64 c_64ZeroBits := int2bit(0,64); + + }//end group zeroedBits + + /** + * @remark Number in name indicates string length in number of + * _octets_ + */ + group octetStringSubTypes { + + type octetstring Oct1 length(1) with {encode "length(1)"}; + type octetstring Oct2 length(2) with {encode "length(2)"}; + type octetstring Oct3 length(3) with {encode "length(3)"}; + type octetstring Oct4 length(4) with {encode "length(4)"}; + type octetstring Oct5 length(5) with {encode "length(5)"}; + type octetstring Oct6 length(6) with {encode "length(6)"}; + type octetstring Oct7 length(7) with {encode "length(7)"}; + type octetstring Oct8 length(8) with {encode "length(8)"}; + type octetstring Oct9 length(9) with {encode "length(9)"}; + type octetstring Oct10 length(10) with {encode "length(10)"}; + type octetstring Oct11 length(11) with {encode "length(11)"}; + type octetstring Oct12 length(12) with {encode "length(12)"}; + type octetstring Oct13 length(13) with {encode "length(13)"}; + type octetstring Oct14 length(14) with {encode "length(14)"}; + type octetstring Oct15 length(15) with {encode "length(15)"}; + type octetstring Oct16 length(16) with {encode "length(16)"}; + + type octetstring Oct20 length(20) with {encode "length(20)"}; + type octetstring Oct32 length(32) with {encode "length(32)"}; + type octetstring Oct48 length(48) with {encode "length(48)"}; + type octetstring Oct64 length(64) with {encode "length(64)"}; + type octetstring Oct80 length(80) with {encode "length(80)"}; + type octetstring Oct96 length(96) with {encode "length(96)"}; + type octetstring Oct128 length(128) with {encode "length(128)"}; + type octetstring Oct160 length(160) with {encode "length(160)"}; + type octetstring Oct320 length(320) with {encode "length(320)"}; + type octetstring Oct640 length(640) with {encode "length(640)"}; + type octetstring Oct1280 length(1280) with {encode "length(1280)"}; + type octetstring Oct1380 length(1380) with {encode "length(1380)"}; + + type octetstring Oct0to3 length(0..3) with {encode "length(0..3)"}; + type octetstring Oct0to8 length(0..16) with {encode "length(0..8)"}; + type octetstring Oct0to12 length(0..12) with {encode "length(0..12)"}; + type octetstring Oct0to16 length(0..16) with {encode "length(0..16)"}; + type octetstring Oct0to31 length(0..31) with {encode "length(0..31)"}; + type octetstring Oct0to20 length(0..20) with {encode "length(0..20)"}; + type octetstring Oct0to30 length(0..20) with {encode "length(0..30)"}; + type octetstring Oct0to127 length(0..127) with {encode "length(0..127)"}; + type octetstring Oct0to255 length(0..255) with {encode "length(0..255)"}; + + type octetstring Oct1to15 length(1..15) with {encode "length(1..15)"}; + type octetstring Oct1to31 length(1..31) with {encode "length(1..31)"}; + type octetstring Oct1to128 length(1..128) with {encode "length(1..128)"}; + type octetstring Oct1to254 length(1..254) with {encode "length(1..254)"}; + type octetstring Oct1to255 length(1..255) with {encode "length(1..255)"}; + + type octetstring Oct4to16 length(4..16) with {encode "length(4..16)"}; + type octetstring Oct6to15 length(6..15) with {encode "length(6..15)"}; + + } // end group octetStringSubTypes + + group zeroedBytes { + const Oct1 c_1ZeroByte := int2oct(0,1); + const Oct2 c_2ZeroBytes := int2oct(0,2); + const Oct4 c_4ZeroBytes := int2oct(0,4); + const Oct6 c_6ZeroBytes := int2oct(0,6); + const Oct8 c_8ZeroBytes := int2oct(0,8); + const Oct9 c_9ZeroBytes := int2oct(0,9); + const Oct12 c_12ZeroBytes := int2oct(0,12); + const Oct16 c_16ZeroBytes := int2oct(0,16); + const Oct20 c_20ZeroBytes := int2oct(0,20); + + const Oct80 c_80ZeroBytes := int2oct(0,80); + const Oct160 c_160ZeroBytes := int2oct(0,160); + const Oct320 c_320ZeroBytes := int2oct(0,320); + const Oct640 c_640ZeroBytes := int2oct(0,640); + const Oct1280 c_1280ZeroBytes := int2oct(0,1280); + const Oct1380 c_1380ZeroBytes := int2oct(0,1380); + const octetstring c_256ZeroBytes := int2oct(0,256); + const octetstring c_1KZeroBytes := int2oct(0,1024); + const octetstring c_4KZeroBytes := int2oct(0,4096); + const octetstring c_16KZeroBytes := int2oct(0,16384); + const octetstring c_64KZeroBytes := int2oct(0,65536); + const octetstring c_128KZeroBytes := int2oct(0,131072); + + }//end group zeroedBytes + +} // end module LibCommon_DataStrings diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..eb11aef6902e2e36bf670457b6d30362093def84 --- /dev/null +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn @@ -0,0 +1,1360 @@ +/** + * @author ETSI + * @version $URL$ + * $Id$ + * @desc This module implements _one_ generic synchronization mechanism + * for TTCN-3 test cases with one or more test components. + * Key concept is here that one test component acts as a + * synchronization server which listens and triggers one or more + * synchronization clients. It is recomended to use the MTC always as + * the synchronization server but in theory also a PTC can act as such + * a server.

+ * This synchronization is used by calling a function on + * the server test component to wait for a desired amount of clients + * to notify the server that they have reached a specific synchronization + * point. Each client test component must call another + * function to perform this notification.

+ * In the event that a client is not able to reach a synchronization + * point the server sends out a signal to all clients to abort the + * test case. This signal is a STOP message which can be caught by + * a test component default which in turn can then run a proper + * shut down behavior based on the current state of the test + * component.

+ * Note that this synchronization mechanism can also be used + * in a special mode called "self synchronization" when a test case + * only has one test component. Here, the test component in essence + * acts as a server and client at the same time. The main benefit of + * using self synchoronization is that the same shutdown mechanisms + * can also be reused fomr the multi component test cases.

+ * This module contains a lot of TTCN-3 definitions. It has been + * structured into tree main groups to help the user to identify + * quickly relevant TTCN-3 definitions. For rookie users of this + * module basicUserRelevantDefinitions should offer all the needed + * definitions. Advanced users can consider use of definitions in + * advancedUserRelevantDefinitions. Finally, internalDefinitions + * are definitions which are required for the module to work + * properly but do not need to be used in your code. Remember that + * the main motiviation of this sychronization module is to offer + * are _simple_ user interface. Practice has shown that when writing + * actual test component behavior _only a handful_ of functions + * usually wind up being used! Also check the synchronization examples + * module for example uses of this synchronization mechanism.

+ * The invocation of the sync functions is also closely tied + * to the verdict control functions which should also be reviewed + * prior to using this module.

+ * This module has been derived from EtsiCommon_Synchronization + * which was created in ETSIs STF256/276. It has been kept + * intentionally separate to avoid conflicts with future ETSI + * test suite releases. + * @see LibCommon_Sync.basicUserRelevantDefinitions + * @see LibCommon_Sync.advancedUserRelevantDefinitions + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * + */ +module LibCommon_Sync { + + //Common + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_AbstractData all; + import from LibCommon_VerdictControl all; + + group basicUserRelevantDefinitions { + + group importantSyncTypeDefinitions { + + group compTypeRelated { + + /** + * @desc This type is used to be the base of any synchronization + * behavior which is to be executed on a sync server + * component. The test component which acts as a + * sync server in a test case must NOT directly use + * this component type in its runs on clause! + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component BaseSyncComp { + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + } + + /** + * @desc This type is used to define any synchronization + * behavior which is to be executed on a sync server + * component. The test component which acts as a + * sync server in a test case may - but does + * not have to - directly use this component type its + * runs on clause. + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component ServerSyncComp extends BaseSyncComp { + timer tc_shutDown := PX_TSHUT_DOWN_TIME_LIMIT; + } + + /** + * @desc This type is used to define any synchronization + * behavior which is to be executed on a sync client + * component. The test component(s) which act as a + * sync client in a test case may - but do not have + * to - directly use this component type their runs + * on clause. + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component ClientSyncComp extends BaseSyncComp { + var StringStack v_stateStack:= c_initStringStack; + var TestcaseStep vc_testcaseStep := e_preamble; + } + + /** + * @desc This type is used to define any synchronization + * behavior which is relevant to non-concurrent test + * cases. + * Note that self synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + * Note also that this type is type compatible to the + * ClientSyncComp type so that shutdown altsteps from + * concurrent test cases can also be reused in single + * component test cases! + * @see LibCommon_Sync.ClientSyncComp + */ + type component SelfSyncComp extends ClientSyncComp { + port SyncPort syncSendPort; + } + + /** + * @desc This port type must be imported into test suites + * when defining test component types which are + * type compatible to a synchronization component + * type + * @see LibCommon_Sync.SelfSyncComp + * @see LibCommon_Sync.ServerSyncComp + * @see LibCommon_Sync.ClientSyncComp + */ + type port SyncPort message { + inout SyncCmd + } with { + extension "internal" + } + + + /** + * @desc Describes in which step of execution is the testcase + */ + type enumerated TestcaseStep { + e_preamble, + e_testBody, + e_postamble + } + + } // end compTypeRelated + + group standardSyncPointNames { + const charstring c_prDone := "preambleDone"; + const charstring c_poDone := "postambleDone"; + const charstring c_tbDone := "testBodyDone"; + const charstring c_initDone := "initDone"; + } + + } // end group importantSyncTypeDefinitions + + group syncCompTestConfiguration { + + /** + * @desc Calls self connect function if invoking + * component is the MTC or otherwise connects the client + * the server. This function allows to implement preambles + * in a way that they can be used by test components + * in both non-concurrent as well as concurrent test + * cases! + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_connect4ClientSync + * should be used instead. + * @see LibCommon_Sync.f_connect4SelfSync + * @see LibCommon_Sync.f_connect4ClientSync + */ + function f_connect4SelfOrClientSync() + runs on SelfSyncComp { + if ( self == mtc ) { + f_connect4SelfSync(); + } else { + f_connect4ClientSync(); + } + } + + /** + * @desc Calls self connect function if the invoking + * component is the MTC or otherwise disconnects the client + * from the server. This function allows to implement + * postambles in a way that they can be used in both + * non-concurrent as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_disconnect4ClientSync + * should be used instead. + * @see LibCommon_Sync.f_disconnect4SelfSync + * @see LibCommon_Sync.f_disconnect4ClientSync + */ + function f_disconnect4SelfOrClientSync() + runs on SelfSyncComp { + if ( self == mtc ) { + f_disconnect4SelfSync(); + } else { + f_disconnect4ClientSync(); + } + } + + } // end group syncCompTestConfiguration + + group syncFunctions { + + /** + * @desc Implements synchronization of 2 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync2ClientsAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + f_serverSyncNClientsAndStop(2, p_syncPointIds); + } + + /** + * @desc Implements synchronization of 3 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync3ClientsAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + f_serverSyncNClientsAndStop(3, p_syncPointIds); + } + + /** + * @desc Implements synchronization of 4 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync4ClientsAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + f_serverSyncNClientsAndStop(4, p_syncPointIds); + } + + /** + * @desc Implements synchronization of N clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_numClients number of synchronization clients + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSyncNClientsAndStop ( + in UInt p_numClients, + in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed ( + p_numClients, + valueof(p_syncPointIds[i]), + PX_TSYNC_TIME_LIMIT ); + } + f_serverWaitForAllClientsToStop(); + } + + /** + * @desc Implements synchronization of 2 clients and 1 UT from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync2ClientsUtAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(3,valueof(p_syncPointIds[i]), PX_TSYNC_TIME_LIMIT); + } + f_serverWaitForAllClientsToStop(); + } + + /** + * @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * sets the verdict based on the specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdict + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdict + */ + function f_selfOrClientSyncAndVerdict( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdict(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdict(p_syncPoint, p_ret); + } + } + + /** + * @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * sets a preamble specific verdict based on the + * specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdictPreamble + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdictPreamble + */ + function f_selfOrClientSyncAndVerdictPreamble( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdictPreamble(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdictPreamble(p_syncPoint, p_ret); + } + } + + /** + * @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * sets a preamble specific verdict based on the + * specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdictTestBody + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdictPreamble + */ + function f_selfOrClientSyncAndVerdictTestBody( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdictTestBody(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdictTestBody(p_syncPoint, p_ret); + } + } + + /** + * @desc Function kept for backward compatibility + * @see f_selfOrClientSyncAndVerdictPreamble + * + */ + function f_selfOrClientSyncAndVerdictPR( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + f_selfOrClientSyncAndVerdictPreamble(p_syncPoint, p_ret); + } + + } // end group syncFunctions + + group syncCompStateHandling { + + /** + * + * @desc This function updates the state (stack) of a + * sync client or self sync component. This stack is + * key in the shutdown handling of test components. + * It adds the new state name to the top of the + * sync component stack of states. + * The state will only be added in case of a current + * execution status of e_success. + * @param p_newSyncCompState Name of state which was attempted to be reached. + * @param p_ret Current behavior execution status + * @remark If the state of component changes this function must be + * _at least_ called from your test suite prior to f_selfSync + * or f_clientSync which is the only definite place for the + * shutdown default invocation! + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_clientSync + */ + function f_addSyncCompState(in charstring p_newSyncCompState, + in FncRetCode p_ret) + runs on ClientSyncComp { + if ( p_ret == e_success ) { + if ( f_isItemOnStringStack(v_stateStack,p_newSyncCompState) ) { + log("**** f_addSyncCompState: WARNING: Attempt to add state which is already on sync state stack! No additition done.****"); + } else { + f_pushStringStack(v_stateStack,p_newSyncCompState); + } + } + } // end function f_addSyncCompState + + /** + * + * @desc This function returns the top state on the sync + * state stack of a sync client or self sync + * component and removes it from the stack + * This function cna be used, e.g., in a while + * statement within a postamble or shutdown + * implementation + * @param p_state State on top of the state stack. + * @return false if state stack is empty, true otherwise + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_getTopSyncCompState( out charstring p_state ) + runs on ClientSyncComp + return boolean { + if ( not f_peekStringStackTop(v_stateStack,p_state) ) { + p_state := "IDLE"; + return false; + } + f_popStringStack(v_stateStack); + return true; + } // end function f_getTopSyncCompState + + /* + * @desc This function removes the last state on the state stack + * of a sync client or self sync component. + * This stack is key in the shutdown handling of test + * components. + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_popSyncCompState() + runs on ClientSyncComp { + f_popStringStack(v_stateStack); + } // end function f_popSyncCompState + + /** + * + * @desc This function returns the top state on the sync state + * stack of a sync client or self sync component. It + * does not remove it from the stack + * This stack is key in the shutdown handling of test + * components. + * @param p_state State on top of the state stack. + * @return false if state stack is empty, true otherwise + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_peekTopSyncCompState(out charstring p_state) + runs on ClientSyncComp + return boolean { + return f_peekStringStackTop(v_stateStack,p_state); + } // end function f_peekTopSyncCompState + + /** + * @desc This function checks if the sync state stack + * of a sync client or self sync component is empty. + * This stack is key in the shutdown handling of test + * components. + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_isSyncCompStateStackEmpty() + runs on ClientSyncComp + return boolean { + return f_isStringStackEmpty(v_stateStack); + } // end function f_isSyncCompStateStackEmpty + + } // end group syncCompStateHandling + + group shutDownAltsteps { + + /** + * @desc This is an example of a shutdown altstep which can be + * used as a "template" for a interface specific shutdown + * altstep or possily as a first temporary solution in + * test case development.

+ * This altstep shall be activated as a default as the + * first statement in each test case function which drives + * an interface, i.e., in MTC behavior of single component + * and in each client behavior of multi component test + * cases.
+ * The required behavior from this altstep is to:

+ * 1) expect the STOP either via the test component + * syncPort

+ * 2) upon its arrival it should shut down the SUT + * gracefully based on the current component state

+ * The current component state should have been + * previously kept uptodate from a test suite via the + * f_addSyncCompState function. This default will then be + * (automatically) invoked either from within f_selfSync + * or f_clientSync.
+ * Note that shutdown defaults can be written as + * _interface specific_ - they do not need to be test case + * or test component specific! See another example of a + * shutdown altstep in the sync module. + * @see LibCommon_Sync.f_addSyncCompState + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_SyncExamples.a_exampleShutDown + * @remark Your application specific shutdown altstep + * implementation(s) should _not_ be defined in this + * module but as part of your test suite or application specific + * modules. + */ + altstep a_dummyShutDown() + runs on SelfSyncComp { + [] syncPort.receive(m_syncServerStop){ + var charstring v_state := ""; + tc_sync.stop; + log("**** a_dummyShutDown: Test component received STOP signal from sync server - going to IDLE state ****"); + while ( f_getTopSyncCompState(v_state) ) { + if ( v_state == "x" ) { + // then do something + } else if ( v_state == "y" ) { + // then do something else + } + } // end while + f_disconnect4SelfOrClientSync(); + // unmap/disconnect more if needed + log("**** a_dummyShutDown: -> Test component stopping itself now! ****") ; + stop ; + } + } // end altstep a_dummyShutDown + + /** + * @desc Shutdown alstep in case the sync server is requesting shutdown. + * + * @remark User shall stop the component + */ + altstep a_shutdown() + runs on BaseSyncComp { + [] syncPort.receive(m_syncServerStop){ + tc_sync.stop ; + log("**** a_shutdown: Test component received STOP signal from MTC **** "); + } + } + + } // end group shutDownAltsteps + + } // end group basicUserRelevantDefinitions + + group advancedUserRelevantDefinitions { + + group serverRelated { + + /** + * @desc Implements synchronization of "n" clients from server + * side. If a problem occurs, then server sends STOP to + * all clients. Waits for PX_TSYNC_TIME_LIMIT to let + * clients finish executing their behavior until this + * synchronization point. See f_serverSyncClientsTimed for + * overwriting this later timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync port! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @param p_noOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + */ + function f_serverSyncClients( in UInt p_noOfClients, in charstring p_syncId ) + runs on ServerSyncComp { + f_serverSyncClientsTimed(p_noOfClients,p_syncId, PX_TSYNC_TIME_LIMIT); + } + + /** + * @desc Implements synchronization of "n" clients from server + * side including intermediate synchronization. + * If a problem occurs, then server sends STOP to + * all clients. Waits for PX_TSYNC_TIME_LIMIT to let + * clients finish executing their behavior until this + * synchronization point. See f_serverSyncClientsTimed for + * overwriting this later timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync port! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @param p_noOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + */ + function f_serverSyncClientsIntermediateSync( in UInt p_noOfClients, in charstring p_syncId, in UInt p_NoOfClientIntermediate, in template (present) charstring p_syncIdIntermediate ) + runs on ServerSyncComp { + f_serverSyncClientsTimedIntermediateSync(p_noOfClients,p_syncId, p_NoOfClientIntermediate, p_syncIdIntermediate, PX_TSYNC_TIME_LIMIT); + } + + /** + * @desc Handles synchronization of clients from server side. + * If problem occurs, then server sends STOP to all clients. + * This function sets the server verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_NoOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + * @param p_execTimeLimit time limit given to all clients to finish the execution + * of their behavior up to this synchronization point + * @see LibCommon_Sync.f_connect4SelfOrClientSync + */ + function f_serverSyncClientsTimed(in UInt p_NoOfClients, + in charstring p_syncId, + float p_execTimeLimit ) + runs on ServerSyncComp { + f_serverSyncClientsTimedIntermediateSync(p_NoOfClients, p_syncId, 0, ?, p_execTimeLimit ) + } // end function f_serverSyncClientsTimed + + /** @desc Handles synchronization of clients from server side including + * intermediate synchronization. + * If problem occurs, then server sends STOP to all clients. + * This function sets the server verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_NoOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + * @param p_execTimeLimit time limit given to all clients to finish the execution + * of their behavior up to this synchronization point + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @return execution status + */ + function f_serverSyncClientsTimedIntermediateSync( in UInt p_NoOfClients, + in charstring p_syncId, in UInt p_NoOfClientIntermediate, in template (present) charstring p_syncIdIntermediate, + float p_execTimeLimit ) + runs on ServerSyncComp { + + var integer v_noOfRecvdSyncMsgs := 0, v_noOfRecvdSyncMsgsIntermediate := 0; + var boolean v_stopClients := false; + var ClientSyncCompList v_clientRefs := {}, v_clientRefsIntermediate := {}; + var ClientSyncComp v_clientRef; + + if ( p_syncId == c_prDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting PREAMBLE synchronization ... ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting TEST BODY synchronization ... ****") ; + } else if ( p_syncId == c_initDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting UPPER TESTER synchronization ... ****") ; + } else { + log("**** f_serverSyncClientsTimed: Sync server now starting handling of " & p_syncId & " synchronization point ... ****") ; + } + tc_sync.start(p_execTimeLimit) ; + alt{ + [v_noOfRecvdSyncMsgsIntermediate != p_NoOfClientIntermediate] syncPort.receive(m_syncClientReady(p_syncIdIntermediate)) -> sender v_clientRef { + if(not f_isPresentInArray(v_clientRef, v_clientRefsIntermediate)) { + v_clientRefsIntermediate[v_noOfRecvdSyncMsgsIntermediate] := v_clientRef; + v_noOfRecvdSyncMsgsIntermediate := v_noOfRecvdSyncMsgsIntermediate + 1; + if (v_noOfRecvdSyncMsgsIntermediate == p_NoOfClientIntermediate) { + f_serverSendToAllClients(v_clientRefsIntermediate, m_syncServerReady(p_syncIdIntermediate)); + } + } + repeat; + } + [] syncPort.receive(m_syncClientReady(p_syncId)) -> sender v_clientRef { + log("**** f_serverSyncClientsTimed: Sync server received READY signal from a client - server will wait for all clients to reach this synchronization point ****"); + if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; + } + if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } + } + [] syncPort.receive(m_syncClientStop) -> sender v_clientRef { + log("**** f_serverSyncClientsTimed: Sync server received STOP signal from a client - server will wait for all clients to reach their next synchronization point and then stop them! ****") ; + v_stopClients := true; + if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; + } + if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } + + } + [] syncPort.receive(m_syncClientReady(?)) -> sender v_clientRef { + log("**** f_serverSyncClientsTimed: Sync server received client sync message with incorrect synchronization point id which is currently not handled - server will stop all clients! ****") ; + v_stopClients := true; + if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + } + } + [] syncPort.receive(SyncCmd :? ) { + log("**** f_serverSyncClientsTimed: Sync server received (invalid) sync message from other sync server - server will stop all clients! ****") ; + v_stopClients := true; } + [] any port.receive { + // leave it to be ok to receive anything else + // in case that the user has added any non-sync ports to + // his/her server component type definition! + repeat; + } + [] tc_sync.timeout{ + log("**** f_serverSyncClientsTimed: A client is not responding within specified time limit - sync server is sending stop to all clients! ****"); + v_stopClients := true; } + } //end alt + if (v_noOfRecvdSyncMsgsIntermediate != p_NoOfClientIntermediate) { + v_stopClients := true; + } + tc_sync.stop ; + if ( v_stopClients ) { + setverdict(inconc); + // then send out STOP sync msg + f_serverSendToAllClients(v_clientRefs, m_syncServerStop); + f_serverWaitForAllClientsToShutDown(); // function will never return! + } else { + setverdict(pass); + // then send out READY sync msg + f_serverSendToAllClients(v_clientRefs, m_syncServerReady(p_syncId)); + if ( p_syncId == c_prDone ) { + log("**** f_serverSyncClientsTimed: Sync server successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_serverSyncClientsTimed: Sync server successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_serverSyncClientsTimed: Sync server successfully passed synchronization point. ****") ; + } + } + } // end function f_serverSyncClientsTimedIntermediateSync + + /** + * @desc This function is intended only for use on the sync + * server component in concurrent TTCN-3 test cases. + * It waits for all components to finish execution within + * the PX_TSYNC_TIME_LIMIT. If a timeout occurs + * the server will stop all clients. + * This function sets the server component verdict. + */ + function f_serverWaitForAllClientsToStop() + runs on ServerSyncComp { + tc_sync.start; + alt { + [] all component.done { + tc_sync.stop; + log("**** f_serverWaitForAllClientsToStop: All sync clients have finished their execution. Sync server now terminating test case. ****") ; + } + [] tc_sync.timeout { + log("**** f_serverWaitForAllClientsToStop: Not all sync clients have finshed execution within the sync time limit. Sync server will stop test case! ****") ; + stop; + } + } // end alt + setverdict(pass); + } // end function f_serverWaitForAllClientsToStop + + } // end group serverRelated + + group clientRelated { + + /** + * @desc This function creates the connection needed to + * execute client synchronization functions + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_Sync.f_clientSendStop + */ + function f_connect4ClientSync() + runs on ClientSyncComp { + connect(self:syncPort, mtc:syncPort); + }// end function f_connect4ClientSync + + /** + * @desc This function removes the connection needed + * to execute client synchronization functions + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_Sync.f_clientSendStop + */ + function f_disconnect4ClientSync() + runs on ClientSyncComp { + disconnect(self:syncPort, mtc:syncPort); + }// end function f_disconnect4ClientSync + + /** + * @desc This function combines client verdict setting with its + * synchronization for use,e.g, after or within a + * test body implementation. + * Note that such premables can _not_ be reused in non- + * concurrent test cases. This can be achieved by using + * the f_selfOrClientSyncAndVerdict function instead. + * This function sets the client component verdict. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + */ + function f_clientSyncAndVerdict(in charstring p_syncId, + in FncRetCode p_ret) + runs on ClientSyncComp { + if(vc_testcaseStep == e_preamble) { + f_clientSyncAndVerdictPreamble(p_syncId, p_ret); + } else if(vc_testcaseStep == e_testBody) { + f_clientSyncAndVerdictTestBody(p_syncId, p_ret); + } + else { + f_clientSyncAndVerdictPostamble(p_syncId, p_ret); + } + } + + /** + * @desc This function combines client verdict setting with its + * synchronization for use after or within a preamble + * implementation. + * Note that such preambles can _not_ be reused in non- + * concurrent test cases. + * This function sets the client component verdict. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdictPreamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + */ + function f_clientSyncAndVerdictPreamble(in charstring p_syncId , + FncRetCode p_ret) + runs on ClientSyncComp { + f_setVerdictPreamble(p_ret); + f_clientSync(p_syncId,p_ret); + vc_testcaseStep := e_testBody; + } + + /** + * @desc This function combines client verdict setting with its + * synchronization for use,e.g, after or within a + * test body implementation. + * Note that such premables can _not_ be reused in non- + * concurrent test cases. This can be achieved by using + * the f_selfOrClientSyncAndVerdict function instead. + * This function sets the client component verdict. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + */ + function f_clientSyncAndVerdictTestBody(in charstring p_syncId, + in FncRetCode p_ret) + runs on ClientSyncComp { + f_setVerdict(p_ret); + f_clientSync(p_syncId,p_ret); + vc_testcaseStep := e_postamble; + } + + /** + * @desc This function combines client verdict setting with its + * synchronization for use after or within a + * postamble implementation. + * Note that such prostambles can _not_ be reused in non- + * concurrent test cases. + * This function sets the client component verdict. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdictPostamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + */ + function f_clientSyncAndVerdictPostamble(in charstring p_syncId , + in FncRetCode p_ret) + runs on ClientSyncComp { + f_setVerdictPostamble(p_ret); + f_clientSync(p_syncId,p_ret); + } + + /** + * @desc This function handles synchronization of a sync client + * with the server. In case of successful execution it sends + * a READY message to the server and waits the READY back. + * The time used for waiting is defined by PX_TSYNC_TIME_LIMIT. + * In case of a non successful execution status it + * sends a STOP message to the server. + * In both cases the receipt of a STOP message or no + * response from the server it will trigger the shutdown + * default (if activated). + * This function will set only the client verdict to INCONC + * (and stop its execution) if no STOP response is received + * from the server within the PX_TSYNC_TIME_LIMIT + * or if no shutdown default is activated. In all other + * cases the client verdict is NOT set. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_clientSendStop + * @return Updated execution status + */ + function f_clientSync( in charstring p_syncId , + in FncRetCode p_ret ) + runs on ClientSyncComp + return FncRetCode{ + + if (p_ret == e_success){ + syncPort.send(m_syncClientReady(p_syncId)); + tc_sync.start; + alt{ + [] syncPort.receive(m_syncServerReady(p_syncId)){ + tc_sync.stop ; } + [] tc_sync.timeout{ + log("**** f_clientSync: Sync client did not receive message from sync server within the specified time limit - sync client will ask sync server to stop test case! ****") ; + f_clientSendStop(); } // function will not return! + } //end alt + } //end if + else { + log("**** f_clientSync: Execution status indicates that execution of test component behavior was not successful - sync client will ask sync server to stop test case! ****") ; + f_clientSendStop(); // function will not return! + } + if ( p_syncId == c_prDone ) { + log("**** f_clientSync: Sync client successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_clientSync: Sync client successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_clientSync: Sync client successfully passed synchronization point. ****") ; + } + return e_success ; + + } // end function f_clientSync + + /** + * @desc This function can be used to request the shutdown a + * multi component test case _prior_ to reaching a + * synchronization point. It sends a STOP message to + * the sync server and awaits then the STOP from the server + * which will trigger the shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * This function will set only the client verdict to INCONC + * (and stop its execution) if no STOP response is received + * from the server within the PX_TSYNC_TIME_LIMIT + * or if no shutdown default is activated. In all other + * cases the client verdict is NOT set. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_clientSendStop() + runs on ClientSyncComp { + log("**** f_clientSendStop: Sync client requesting from server to stop test case (including itself). ****") ; + syncPort.send(m_syncClientStop) ; + tc_sync.start; + alt{ + [] tc_sync.timeout{ + log("**** f_clientSendStop: Stopping sync client without shutdown - either no shutdown default active or no stop received from server. ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // stop here if shutdown default does not stop + } + + } // end group clientRelated + + } // end group advancedUserRelevantDefinitions + + group otherSyncModuleDefinitions { + + group syncModuleparams { + /** + * + * @desc Default time limit for a sync client to reach a + * synchronization point + */ + modulepar float PX_TSYNC_TIME_LIMIT := 120.0; + + /* + * @desc Default time limit for a sync client to finish + * its execution of the shutdown default + */ + modulepar float PX_TSHUT_DOWN_TIME_LIMIT := 120.0; + } + + group otherSyncTypes { + + type record of charstring SyncPointList; + + type record of ClientSyncComp ClientSyncCompList; + + } // end group otherSyncTypes + + group otherSelfSyncRelatedDefinitions { + + /** + * @desc This function creates the connection needed to + * execute self sync functions + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_selfSyncStop + */ + function f_connect4SelfSync() + runs on SelfSyncComp { + connect(self:syncSendPort, self:syncPort); + }// end function f_connect4SelfSync + + /** + * @desc This function removes the connection needed + * to execute self sync functions + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_selfSyncStop + */ + function f_disconnect4SelfSync() + runs on SelfSyncComp { + disconnect(self:syncSendPort, self:syncPort); + }// end function f_disconnect4SelfSync + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use in the preamble / test body / postamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_selfSyncAndVerdict( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + if(vc_testcaseStep == e_preamble) { + f_selfSyncAndVerdictPreamble(p_syncId, p_ret); + } else if(vc_testcaseStep == e_testBody) { + f_selfSyncAndVerdictTestBody(p_syncId, p_ret); + } + else { + f_selfSyncAndVerdictPostamble(p_syncId, p_ret); + } + } + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use after the preamble. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdictPreamble + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictPreamble( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdictPreOrPostamble(p_ret); + f_selfSync(p_syncId,p_ret); + vc_testcaseStep := e_testBody; + } + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use after the test body. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictTestBody( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdict(p_ret); + f_selfSync(p_syncId,p_ret); + vc_testcaseStep := e_postamble; + } + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use after the postamble. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdictPostamble + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictPostamble( in charstring p_syncId , + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdictPreOrPostamble(p_ret); + f_selfSync(p_syncId,p_ret); + } + + /** + * @desc This function synchronizes a MTC with itself. In case + * of a non successful execution status it sends a STOP + * message to itself and invokes that way the + * shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * Otherwise no verdict is set. + * @remark Sync ports should be connected prior to the invocation + * of this function! + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @return Updated execution status + * @see LibCommon_Sync.f_connect4SelfSync + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_selfSync( in charstring p_syncId , + in FncRetCode p_ret ) + runs on SelfSyncComp + return FncRetCode{ + if (p_ret != e_success){ + f_selfSyncStop() ; // function will not return! + } + if ( p_syncId == c_prDone ) { + log("**** f_selfSync: Successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_selfSync: Successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_selfSync: Successfully passed synchronization point. ****") ; + } + return e_success ; + }// end function f_selfSync + + /** + * @desc This function can be used to shut down a test case _prior_ + * to reaching a synchronization point. it sends a STOP + * message to itself and invokes that way the + * shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * Otherwise no verdict is set. + * @remark Sync ports should be connected prior to the invocation + * of this function! + * @see LibCommon_Sync.f_connect4SelfSync + */ + function f_selfSyncStop() + runs on SelfSyncComp { + + log("**** f_selfSyncStop: MTC requests to stop test case (itself). ****") ; + syncSendPort.send(m_syncServerStop) ; // this MUST be _server_ for the default to catch! + tc_sync.start(PX_TSYNC_TIME_LIMIT); + alt{ + [] tc_sync.timeout{ + log("**** f_selfSyncStop: Stopping MTC without shutdown - either no shutdown default active or missing syncPort connection ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // if shutdown default is not activated or if it does not stop + } // end function f_selfSyncStop + + } // end group otherSelfSyncRelatedDefinitions + + /** + * + * @desc The sychronization protocol is conceptually based on + * named synchronization. Each synchronization point + * has it own specific synchronization message. This + * makes each synchronization unique, and allows, e.g., to + * ensure that a server synchronizes only clients which have + * reached the same synchronization point. + */ + group syncProtocolDefinition { + + type union SyncCmd { + ClientReady clientReady, + ServerReady serverReady, + ClientStop clientStop, + ServerStop serverStop + } + + type record ClientReady { + charstring syncPointId + } + + type record ServerReady { + charstring syncPointId + } + + type record ClientStop {} + + type record ServerStop {} + + } // end group syncProtocolDefinition + + group syncMessages { + template SyncCmd m_syncClientReady( template (present) charstring p_syncId ) := { + clientReady := { p_syncId } + } + + template SyncCmd m_syncServerReady( template (present) charstring p_syncId ) := { + serverReady := { p_syncId } + } + + template SyncCmd m_syncClientStop := { + clientStop := {} + } + + template SyncCmd m_syncServerStop := { + serverStop := {} + } + + } // end group syncMessages + + group otherSyncFunctions { + + /** + * @desc Makes server send a sync message to all known clients + * @param p_clientRefs List of client references to which the message is to be send + * @param p_syncCmd The actual synchronization message to be sent out + */ + function f_serverSendToAllClients( in ClientSyncCompList p_clientRefs, + in template (value) SyncCmd p_syncCmd) + runs on ServerSyncComp { + var integer i:=0; + for (i:=0; i< sizeof(p_clientRefs); i:=i+1 ){ + syncPort.send(p_syncCmd) to valueof(p_clientRefs[i]); + } + } // end function f_serverSendToAllClients + + /** + * @desc This function is intended only for use on server in concurrent + * TTCN-3 test cases. It waits for all components to shut down + * within the PX_TSHUT_DOWN_TIME_LIMIT. If a timeout occurs + * it aborts the test case (no matter how far clients got with their + * shutdown). + * This function sets the server verdict. + */ + function f_serverWaitForAllClientsToShutDown() + runs on ServerSyncComp { + + tc_shutDown.start(PX_TSHUT_DOWN_TIME_LIMIT); + alt { + [] syncPort.receive { + // clients may still try to send some sync message + } + [] all component.done { + tc_shutDown.stop; + log("**** f_serverWaitForAllClientsToShutDown: All components have properly shut down. Sync server will now terminate the test case. ****") ; + } + [] tc_shutDown.timeout { + log("**** f_serverWaitForAllClientsToShutDown: Not all clients have properly shutdown within the shut down time limit. Sync server will now terminate test case! ****") ; + } + } // end alt + // cover case that shut down default is NOT activated + setverdict(inconc); + //mtc.stop; + syncPort.send(m_syncServerStop) to self; // this MUST be _server_ for the default to catch! + tc_sync.start(PX_TSYNC_TIME_LIMIT); + alt{ + [] tc_sync.timeout{ + log("**** f_selfSyncStop: Stopping MTC without shutdown - either no shutdown default active or missing syncPort connection ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // if shutdown default is not activated or if it does not stop + } // end function f_serverWaitForAllClientsToShutDown + + function f_isPresentInArray(in ClientSyncComp p_clientRef, in ClientSyncCompList p_clientRefs) + return boolean { + var integer i; + for(i:=0; i < sizeof(p_clientRefs); i:=i+1) { + if(p_clientRefs[i] == p_clientRef) { + return true; + } + } + return false; + } + } // end group otherSyncFunctions + + } // end group otherSyncDefinitions + +} // end module LibCommon_Sync diff --git a/ttcn/patch_lib_config_and_trigger_titan/module.mk b/ttcn/patch_lib_config_and_trigger_titan/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..55ba6b146ce786aee068ca85652a3db50168cdbd --- /dev/null +++ b/ttcn/patch_lib_config_and_trigger_titan/module.mk @@ -0,0 +1 @@ +sources := LibIms_UpperTester.ttcn \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/module.mk b/ttcn/patch_lib_diameter_titan/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..82b314ae0df93d39f5d2ae3ef12a1519f23ad018 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/module.mk @@ -0,0 +1,16 @@ +sources := \ + ttcn/LibDiameter_PIXITS.ttcn \ + ttcn/LibDiameter_Interface.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn \ + diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..e53d0a4d015ea9f7c9ce5514f1248c40194b7526 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn @@ -0,0 +1,281 @@ +module LibDiameter_EncdecDeclarations { + + //LibDiameter + import from LibDiameter_TypesAndValues all; + + external function fx_enc_CER_MSG(in CER_MSG p_CER_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_CER_MSG(inout bitstring pdu, out CER_MSG p_CER_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_CEA_MSG(in CEA_MSG p_CEA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_CEA_MSG(inout bitstring pdu, out CEA_MSG p_CEA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RAR_MSG(in RAR_MSG p_RAR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RAR_MSG(inout bitstring pdu, out RAR_MSG p_RAR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RAA_MSG(in RAA_MSG p_RAA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RAA_MSG(inout bitstring pdu, out RAA_MSG p_RAA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ACR_MSG(in ACR_MSG p_ACR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ACR_MSG(inout bitstring pdu, out ACR_MSG p_ACR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ACA_MSG(in ACA_MSG p_ACA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ACA_MSG(inout bitstring pdu, out ACA_MSG p_ACA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ASR_MSG(in ASR_MSG p_ASR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ASR_MSG(inout bitstring pdu, out ASR_MSG p_ASR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ASA_MSG(in ASA_MSG p_ASA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ASA_MSG(inout bitstring pdu, out ASA_MSG p_ASA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_STR_MSG(in STR_MSG p_STR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_STR_MSG(inout bitstring pdu, out STR_MSG p_STR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_STA_MSG(in STA_MSG p_STA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_STA_MSG(inout bitstring pdu, out STA_MSG p_STA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DWR_MSG(in DWR_MSG p_DWR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DWR_MSG(inout bitstring pdu, out DWR_MSG p_DWR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DWA_MSG(in DWA_MSG p_DWA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DWA_MSG(inout bitstring pdu, out DWA_MSG p_DWA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DPR_MSG(in DPR_MSG p_DPR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DPR_MSG(inout bitstring pdu, out DPR_MSG p_DPR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DPA_MSG(in DPA_MSG p_DPA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DPA_MSG(inout bitstring pdu, out DPA_MSG p_DPA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_UAR_MSG(in UAR_MSG p_UAR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_UAR_MSG(inout bitstring pdu, out UAR_MSG p_UAR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_UAA_MSG(in UAA_MSG p_UAA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_UAA_MSG(inout bitstring pdu, out UAA_MSG p_UAA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_SAR_MSG(in SAR_MSG p_SAR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_SAR_MSG(inout bitstring pdu, out SAR_MSG p_SAR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_SAA_MSG(in SAA_MSG p_SAA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_SAA_MSG(inout bitstring pdu, out SAA_MSG p_SAA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_LIR_MSG(in LIR_MSG p_LIR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_LIR_MSG(inout bitstring pdu, out LIR_MSG p_LIR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_LIA_MSG(in LIA_MSG p_LIA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_LIA_MSG(inout bitstring pdu, out LIA_MSG p_LIA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_MAR_MSG(in MAR_MSG p_MAR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_MAR_MSG(inout bitstring pdu, out MAR_MSG p_MAR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_MAA_MSG(in MAA_MSG p_MAA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_MAA_MSG(inout bitstring pdu, out MAA_MSG p_MAA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RTR_MSG(in RTR_MSG p_RTR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RTR_MSG(inout bitstring pdu, out RTR_MSG p_RTR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RTA_MSG(in RTA_MSG p_RTA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RTA_MSG(inout bitstring pdu, out RTA_MSG p_RTA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PPR_MSG(in PPR_MSG p_PPR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PPR_MSG(inout bitstring pdu, out PPR_MSG p_PPR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PPA_MSG(in PPA_MSG p_PPA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PPA_MSG(inout bitstring pdu, out PPA_MSG p_PPA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_UDR_MSG(in UDR_MSG p_UDR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_UDR_MSG(inout bitstring pdu, out UDR_MSG p_UDR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_UDA_MSG(in UDA_MSG p_UDA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_UDA_MSG(inout bitstring pdu, out UDA_MSG p_UDA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PUR_MSG(in PUR_MSG p_PUR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PUR_MSG(inout bitstring pdu, out PUR_MSG p_PUR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PUA_MSG(in PUA_MSG p_PUA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PUA_MSG(inout bitstring pdu, out PUA_MSG p_PUA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_SNR_MSG(in SNR_MSG p_SNR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_SNR_MSG(inout bitstring pdu, out SNR_MSG p_SNR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_SNA_MSG(in SNA_MSG p_SNA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_SNA_MSG(inout bitstring pdu, out SNA_MSG p_SNA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PNR_MSG(in PNR_MSG p_PNR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PNR_MSG(inout bitstring pdu, out PNR_MSG p_PNR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PNA_MSG(in PNA_MSG p_PNA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PNA_MSG(inout bitstring pdu, out PNA_MSG p_PNA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_CCR_MSG(in CCR_MSG p_CCR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_CCR_MSG(inout bitstring pdu, out CCR_MSG p_CCR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_CCA_MSG(in CCA_MSG p_CCA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_CCA_MSG(inout bitstring pdu, out CCA_MSG p_CCA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_AAR_MSG(in AAR_MSG p_AAR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_AAR_MSG(inout bitstring pdu, out AAR_MSG p_AAR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_AAA_MSG(in AAA_MSG p_AAA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_AAA_MSG(inout bitstring pdu, out AAA_MSG p_AAA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ULR_MSG(in ULR_MSG p_ULR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ULR_MSG(inout bitstring pdu, out ULR_MSG p_ULR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ULA_MSG(in ULA_MSG p_ULA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ULA_MSG(inout bitstring pdu, out ULA_MSG p_ULA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_AIR_MSG(in AIR_MSG p_AIR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_AIR_MSG(inout bitstring pdu, out AIR_MSG p_AIR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_AIA_MSG(in AIA_MSG p_AIA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_AIA_MSG(inout bitstring pdu, out AIA_MSG p_AIA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_CLR_MSG(in CLR_MSG p_CLR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_CLR_MSG(inout bitstring pdu, out CLR_MSG p_CLR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_CLA_MSG(in CLA_MSG p_CLA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_CLA_MSG(inout bitstring pdu, out CLA_MSG p_CLA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_IDR_MSG(in IDR_MSG p_IDR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_IDR_MSG(inout bitstring pdu, out IDR_MSG p_IDR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_IDA_MSG(in IDA_MSG p_IDA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_IDA_MSG(inout bitstring pdu, out IDA_MSG p_IDA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DSR_MSG(in DSR_MSG p_DSR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DSR_MSG(inout bitstring pdu, out DSR_MSG p_DSR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DSA_MSG(in DSA_MSG p_DSA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DSA_MSG(inout bitstring pdu, out DSA_MSG p_DSA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RSR_MSG(in RSR_MSG p_RSR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RSR_MSG(inout bitstring pdu, out RSR_MSG p_RSR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RSA_MSG(in RSA_MSG p_RSA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RSA_MSG(inout bitstring pdu, out RSA_MSG p_RSA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_NOR_MSG(in NOR_MSG p_NOR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_NOR_MSG(inout bitstring pdu, out NOR_MSG p_NOR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_NOA_MSG(in NOA_MSG p_NOA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_NOA_MSG(inout bitstring pdu, out NOA_MSG p_NOA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PUER_MSG(in PUER_MSG p_PUER_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PUER_MSG(inout bitstring pdu, out PUER_MSG p_PUER_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PUEA_MSG(in PUEA_MSG p_PUEA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PUEA_MSG(inout bitstring pdu, out PUEA_MSG p_PUEA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_UNKNOWN_MSG(in UNKNOWN_MSG p_UNKNOWN_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_UNKNOWN_MSG(inout bitstring pdu, out UNKNOWN_MSG p_UNKNOWN_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + +} // End of module LibDiameter_EncdecDeclarations \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..f6ef8f63177ecf34025e04444d50bb8ec30f2c8e --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn @@ -0,0 +1,2017 @@ +/** + * @author STF 434 + * @version $Id$ + * @desc This module provides functions used in DIAMETER + */ + +module LibDiameter_Steps +{ + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl {type FncRetCode; + function f_setVerdict;}; + import from LibCommon_BasicTypesAndValues {type UInt32;}; + //LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_Templates all; + import from LibDiameter_Interface all; + import from LibDiameter_PIXITS all; + +group CommonFunctions{ + + /** + * + * @desc f_gtZero, return true if value of p_int greater than 0 + * @param p_int - integer value + */ + function f_gtZero(integer p_int) + return boolean + { + if (p_int > 0){ + return true; + } + else{ + return false; + } + } + + /** + * + * @desc f_Inc, return incremented value of p_int 0 + * @param p_int - integer value + */ + function f_inc( inout UInt32 p_int) + return UInt32 + { + p_int:=p_int+1; + return p_int; + } + +}//end group CommonFunctions + +group AwaitingMessage { + + /** + * + * @desc receive DIAMETER message + * @param p_diameterMSG template of the message to be received + */ + function f_awaitingDiameterMsg(in template DIAMETER_MSG p_diameterMSG) runs on DiameterComponent + { + //var Lower_Layer_Primitive v_MSG; + var DIAMETER_MSG v_MSG; + + if (PX_DIAM_LLP_ENABLED and f_gtZero(vc_ETS_conn)) + { + tc_wait.start; + alt + { + []DIAMP.receive(p_diameterMSG) -> value v_MSG + { + tc_wait.stop; + vc_recvDiamMsg := v_MSG; + } + [] tc_wait.timeout { + setverdict(fail,"*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***"); + //Stop the component in case of timeout + all timer.stop; + f_componentStop(); + } + } + } + else + { + tc_wait.start; + alt + { + []DIAMP.receive(p_diameterMSG) -> value v_MSG + { + tc_wait.stop; + vc_recvDiamMsg := v_MSG; + } + [] tc_wait.timeout { + setverdict(fail,"*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***"); + //Stop the component in case of timeout + all timer.stop; + f_componentStop(); + } + } + } + } // end f_awaitingDiameterMsg + + /** + * + * @desc receive DIAMETER message + * @param p_diameterMSG1 template of the message 1 to be received + * @param p_diameterMSG2 template of the message 2 to be received + */ + function f_awaiting2DiameterMsgs ( in template DIAMETER_MSG p_diameterMSG1, in template DIAMETER_MSG p_diameterMSG2 ) runs on DiameterComponent + { + //var Lower_Layer_Primitive v_MSG; + var DIAMETER_MSG v_MSG; + + tc_wait.start; + alt { + []DIAMP.receive(p_diameterMSG1) -> value v_MSG { + tc_wait.stop; + vc_recvDiamMsg := v_MSG; } + []DIAMP.receive(p_diameterMSG2) -> value v_MSG { + tc_wait.stop; + vc_recvDiamMsg := v_MSG; } + [] tc_wait.timeout { + setverdict(fail,"*** " & __SCOPE__ & ": FAIL: Message was not received in due time. ***") } + } + } // end f_awaiting2DiameterMsgs + + function f_awaiting_CER(template (present)CER_MSG p_CER) runs on DiameterComponent + { + f_awaitingDiameterMsg({cER_MSG:=p_CER}); + //store specific parameter for CER if needed + if (ischosen (vc_recvDiamMsg.cER_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.cER_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.cER_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_CEA(template (present)CEA_MSG p_CEA) runs on DiameterComponent + { + f_awaitingDiameterMsg({cEA_MSG:=p_CEA}); + //store specific parameter for CER if needed + } + + function f_awaiting_DWR(template (present)DWR_MSG p_DWR) runs on DiameterComponent + { + f_awaitingDiameterMsg({dWR_MSG:=p_DWR}); + //store specific parameter for DWR if needed + if (ischosen (vc_recvDiamMsg.dWR_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.dWR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.dWR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_DWA(template (present)DWA_MSG p_DWA) runs on DiameterComponent + { + f_awaitingDiameterMsg({dWA_MSG:=p_DWA}); + //store specific parameter for DWA if needed + } + + function f_awaiting_DPR(template (present)DPR_MSG p_DPR) runs on DiameterComponent + { + f_awaitingDiameterMsg({dPR_MSG:=p_DPR}); + //store specific parameter for DPR if needed + if (ischosen (vc_recvDiamMsg.dPR_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.dPR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.dPR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_DPA(template (present)DPA_MSG p_DPA) runs on DiameterComponent + { + f_awaitingDiameterMsg({dPA_MSG:=p_DPA}); + //store specific parameter for DPA if needed + } + + function f_awaiting_AAR(template (present)AAR_MSG p_AAR) runs on DiameterComponent + { + f_awaitingDiameterMsg({aAR_MSG:=p_AAR}); + //store specific parameter for AAR if needed + if (ischosen (vc_recvDiamMsg.aAR_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.aAR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.aAR_MSG.header.endid; + vc_sessionId := vc_recvDiamMsg.aAR_MSG.session_Id; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_AAA(template (present)AAA_MSG p_AAA) runs on DiameterComponent + { + f_awaitingDiameterMsg({aAA_MSG:=p_AAA}); + //store specific parameter for AAA if needed + } + + function f_awaiting_STR(template (present)STR_MSG p_STR) runs on DiameterComponent + { + f_awaitingDiameterMsg({sTR_MSG:=p_STR}); + //store specific parameter for STR if needed + if (ischosen (vc_recvDiamMsg.sTR_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.sTR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.sTR_MSG.header.endid; + vc_sessionId := vc_recvDiamMsg.sTR_MSG.session_Id; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_STA(template (present)STA_MSG p_STA) runs on DiameterComponent + { + f_awaitingDiameterMsg({sTA_MSG:=p_STA}); + //store specific parameter for STA if needed + } + + function f_awaiting_ASR(template (present)ASR_MSG p_ASR) runs on DiameterComponent + { + f_awaitingDiameterMsg({aSR_MSG:=p_ASR}); + //store specific parameter for ASR if needed + if (ischosen (vc_recvDiamMsg.aSR_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.aSR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.aSR_MSG.header.endid; + vc_sessionId := vc_recvDiamMsg.aSR_MSG.session_Id; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_ASA(template (present)ASA_MSG p_ASA) runs on DiameterComponent + { + f_awaitingDiameterMsg({aSA_MSG:=p_ASA}); + //store specific parameter for ASA if needed + } + + + function f_awaiting_RAR(template (present)RAR_MSG p_RAR) runs on DiameterComponent + { + f_awaitingDiameterMsg({rAR_MSG:=p_RAR}); + //store specific parameter for RAR if needed + if (ischosen (vc_recvDiamMsg.rAR_MSG)){ + vc_sessionId := vc_recvDiamMsg.rAR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.rAR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.rAR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + + function f_awaiting_RAA(template (present)RAA_MSG p_RAA) runs on DiameterComponent + { + f_awaitingDiameterMsg({rAA_MSG:=p_RAA}); + //store specific parameter for RAA if needed + } + + function f_awaiting_2RAA(template (present)RAA_MSG p_RAA1, template (present)RAA_MSG p_RAA2) runs on DiameterComponent + { + f_awaiting2DiameterMsgs({rAA_MSG:=p_RAA1}, {rAA_MSG:=p_RAA2}); + } + + function f_awaiting_CCR(template (present)CCR_MSG p_CCR) runs on DiameterComponent + { + f_awaitingDiameterMsg({cCR_MSG:=p_CCR}); + //store specific parameter for CCR if needed + if (ischosen (vc_recvDiamMsg.cCR_MSG)){ + vc_sessionId := vc_recvDiamMsg.cCR_MSG.session_Id; + vc_recv_hopid := vc_recvDiamMsg.cCR_MSG.header.hopid; + vc_recv_endid := vc_recvDiamMsg.cCR_MSG.header.endid; + vc_recv_cC_Request_Number := vc_recvDiamMsg.cCR_MSG.cCR_Body.cC_Request_Number.aVP_Data; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_CCA(template (present)CCA_MSG p_CCA) runs on DiameterComponent + { + f_awaitingDiameterMsg({cCA_MSG:=p_CCA}); + //store specific parameter for CCA if needed + } + + function f_awaiting_ACR(template (present)ACR_MSG p_ACR) runs on DiameterComponent + { + f_awaitingDiameterMsg({aCR_MSG:=p_ACR}); + //store specific parameter for ACR if needed + if (ischosen (vc_recvDiamMsg.aCR_MSG)){ + vc_sessionId := vc_recvDiamMsg.aCR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.aCR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.aCR_MSG.header.endid; + vc_accountingRecordNumber := vc_recvDiamMsg.aCR_MSG.aCR_Body.accounting_Record_Number; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_ACA(template (present)ACA_MSG p_ACA) runs on DiameterComponent + { + f_awaitingDiameterMsg({aCA_MSG:=p_ACA}); + //store specific parameter for ACA if needed + } + + function f_awaiting_UAR(template (present)UAR_MSG p_UAR) runs on DiameterComponent + { + f_awaitingDiameterMsg({uAR_MSG:=p_UAR}); + //store specific parameter for UAR if needed + if (ischosen (vc_recvDiamMsg.uAR_MSG)){ + vc_sessionId := vc_recvDiamMsg.uAR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.uAR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.uAR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_UAA(template (present)UAA_MSG p_UAA) runs on DiameterComponent + { + f_awaitingDiameterMsg({uAA_MSG:=p_UAA}); + //store specific parameter for UAA if needed + } + + function f_awaiting_UDR(template (present)UDR_MSG p_UDR) runs on DiameterComponent + { + f_awaitingDiameterMsg({uDR_MSG:=p_UDR}); + //store specific parameter for UDR if needed + if (ischosen (vc_recvDiamMsg.uDR_MSG)){ + vc_sessionId := vc_recvDiamMsg.uDR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.uDR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.uDR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_UDA(template (present)UDA_MSG p_UDA) runs on DiameterComponent + { + f_awaitingDiameterMsg({uDA_MSG:=p_UDA}); + //store specific parameter for UDA if needed + } + + function f_awaiting_SAR(template (present)SAR_MSG p_SAR) runs on DiameterComponent + { + f_awaitingDiameterMsg({sAR_MSG:=p_SAR}); + //store specific parameter for SAR if needed + if (ischosen (vc_recvDiamMsg.sAR_MSG)){ + vc_sessionId := vc_recvDiamMsg.sAR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.sAR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.sAR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_SAA(template (present)SAA_MSG p_SAA) runs on DiameterComponent + { + f_awaitingDiameterMsg({sAA_MSG:=p_SAA}); + //store specific parameter for SAA if needed + } + + function f_awaiting_LIR(template (present)LIR_MSG p_LIR) runs on DiameterComponent + { + f_awaitingDiameterMsg({lIR_MSG:=p_LIR}); + //store specific parameter for LIR if needed + if (ischosen (vc_recvDiamMsg.lIR_MSG)){ + vc_sessionId := vc_recvDiamMsg.lIR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.lIR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.lIR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_LIA(template (present)LIA_MSG p_LIA) runs on DiameterComponent + { + f_awaitingDiameterMsg({lIA_MSG:=p_LIA}); + //store specific parameter for LIA if needed + } + + function f_awaiting_MAR(template (present)MAR_MSG p_MAR) runs on DiameterComponent + { + f_awaitingDiameterMsg({mAR_MSG:=p_MAR}); + //store specific parameter for MAR if needed + if (ischosen (vc_recvDiamMsg.mAR_MSG)){ + vc_sessionId := vc_recvDiamMsg.mAR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.mAR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.mAR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_MAA(template (present)MAA_MSG p_MAA) runs on DiameterComponent + { + f_awaitingDiameterMsg({mAA_MSG:=p_MAA}); + //store specific parameter for MAA if needed + } + + function f_awaiting_RTR(template (present)RTR_MSG p_RTR) runs on DiameterComponent + { + f_awaitingDiameterMsg({rTR_MSG:=p_RTR}); + //store specific parameter for RTR if needed + + if (ischosen (vc_recvDiamMsg.rTR_MSG)){ + vc_sessionId := vc_recvDiamMsg.rTR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.rTR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.rTR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + + } + + function f_awaiting_RTA(template (present)RTA_MSG p_RTA) runs on DiameterComponent + { + f_awaitingDiameterMsg({rTA_MSG:=p_RTA}); + //store specific parameter for RTA if needed + } + + function f_awaiting_PNR(template (present)PNR_MSG p_PNR) runs on DiameterComponent + { + f_awaitingDiameterMsg({pNR_MSG:=p_PNR}); + //store specific parameter for PNR if needed + if (ischosen (vc_recvDiamMsg.pNR_MSG)){ + vc_sessionId := vc_recvDiamMsg.pNR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.pNR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.pNR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_PNA(template (present)PNA_MSG p_PNA) runs on DiameterComponent + { + f_awaitingDiameterMsg({pNA_MSG:=p_PNA}); + //store specific parameter for PNA if needed + } + + function f_awaiting_PPR(template (present)PPR_MSG p_PPR) runs on DiameterComponent + { + f_awaitingDiameterMsg({pPR_MSG:=p_PPR}); + //store specific parameter for PPR if needed + if (ischosen (vc_recvDiamMsg.pPR_MSG)){ + vc_sessionId := vc_recvDiamMsg.pPR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.pPR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.pPR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_PPA(template (present)PPA_MSG p_PPA) runs on DiameterComponent + { + f_awaitingDiameterMsg({pPA_MSG:=p_PPA}); + //store specific parameter for PPA if needed + } + + function f_awaiting_PUR(template (present)PUR_MSG p_PUR) runs on DiameterComponent + { + f_awaitingDiameterMsg({pUR_MSG:=p_PUR}); + //store specific parameter for PUR if needed + if (ischosen (vc_recvDiamMsg.pUR_MSG)){ + vc_sessionId := vc_recvDiamMsg.pUR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.pUR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.pUR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_PUA(template (present)PUA_MSG p_PUA) runs on DiameterComponent + { + f_awaitingDiameterMsg({pUA_MSG:=p_PUA}); + //store specific parameter for PUA if needed + } + + function f_awaiting_ULR(template (present)ULR_MSG p_ULR) runs on DiameterComponent + { + f_awaitingDiameterMsg({uLR_MSG:=p_ULR}); + //store specific parameter for ULR if needed + if (ischosen (vc_recvDiamMsg.uLR_MSG)){ + vc_sessionId := vc_recvDiamMsg.uLR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.uLR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.uLR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_ULA(template (present)ULA_MSG p_ULA) runs on DiameterComponent + { + f_awaitingDiameterMsg({uLA_MSG:=p_ULA}); + //store specific parameter for ULA if needed + } + + function f_awaiting_AIR(template (present)AIR_MSG p_AIR) runs on DiameterComponent + { + f_awaitingDiameterMsg({aIR_MSG:=p_AIR}); + //store specific parameter for AIR if needed + if (ischosen (vc_recvDiamMsg.aIR_MSG)){ + vc_sessionId := vc_recvDiamMsg.aIR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.aIR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.aIR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_AIA(template (present)AIA_MSG p_AIA) runs on DiameterComponent + { + f_awaitingDiameterMsg({aIA_MSG:=p_AIA}); + //store specific parameter for AIA if needed + } + + function f_awaiting_CLR(template (present)CLR_MSG p_CLR) runs on DiameterComponent + { + f_awaitingDiameterMsg({cLR_MSG:=p_CLR}); + //store specific parameter for CLR if needed + if (ischosen (vc_recvDiamMsg.cLR_MSG)){ + vc_sessionId := vc_recvDiamMsg.cLR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.cLR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.cLR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_CLA(template (present)CLA_MSG p_CLA) runs on DiameterComponent + { + f_awaitingDiameterMsg({cLA_MSG:=p_CLA}); + //store specific parameter for CLA if needed + } + + function f_awaiting_IDR(template (present)IDR_MSG p_IDR) runs on DiameterComponent + { + f_awaitingDiameterMsg({iDR_MSG:=p_IDR}); + //store specific parameter for IDR if needed + if (ischosen (vc_recvDiamMsg.iDR_MSG)){ + vc_sessionId := vc_recvDiamMsg.iDR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.iDR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.iDR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_IDA(template (present)IDA_MSG p_IDA) runs on DiameterComponent + { + f_awaitingDiameterMsg({iDA_MSG:=p_IDA}); + //store specific parameter for IDA if needed + } + + function f_awaiting_DSR(template (present)DSR_MSG p_DSR) runs on DiameterComponent + { + f_awaitingDiameterMsg({dSR_MSG:=p_DSR}); + //store specific parameter for DSR if needed + if (ischosen (vc_recvDiamMsg.dSR_MSG)){ + vc_sessionId := vc_recvDiamMsg.dSR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.dSR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.dSR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_DSA(template (present)DSA_MSG p_DSA) runs on DiameterComponent + { + f_awaitingDiameterMsg({dSA_MSG:=p_DSA}); + //store specific parameter for DSA if needed + } + + function f_awaiting_PUER(template (present)PUER_MSG p_PUER) runs on DiameterComponent + { + f_awaitingDiameterMsg({pUER_MSG:=p_PUER}); + //store specific parameter for PUER if needed + if (ischosen (vc_recvDiamMsg.pUER_MSG)){ + vc_sessionId := vc_recvDiamMsg.pUER_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.pUER_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.pUER_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_PUEA(template (present)PUEA_MSG p_PUEA) runs on DiameterComponent + { + f_awaitingDiameterMsg({pUEA_MSG:=p_PUEA}); + //store specific parameter for PUEA if needed + } + + function f_awaiting_RSR(template (present)RSR_MSG p_RSR) runs on DiameterComponent + { + f_awaitingDiameterMsg({rSR_MSG:=p_RSR}); + //store specific parameter for RSR if needed + if (ischosen (vc_recvDiamMsg.rSR_MSG)){ + vc_sessionId := vc_recvDiamMsg.rSR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.rSR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.rSR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_RSA(template (present)RSA_MSG p_RSA) runs on DiameterComponent + { + f_awaitingDiameterMsg({rSA_MSG:=p_RSA}); + //store specific parameter for RSA if needed + } + + function f_awaiting_NOR(template (present)NOR_MSG p_NOR) runs on DiameterComponent + { + f_awaitingDiameterMsg({nOR_MSG:=p_NOR}); + //store specific parameter for NOR if needed + if (ischosen (vc_recvDiamMsg.nOR_MSG)){ + vc_sessionId := vc_recvDiamMsg.nOR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.nOR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.nOR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_NOA(template (present)NOA_MSG p_NOA) runs on DiameterComponent + { + f_awaitingDiameterMsg({nOA_MSG:=p_NOA}); + //store specific parameter for NOA if needed + } + + function f_awaiting_SNR(template (present)SNR_MSG p_SNR) runs on DiameterComponent + { + f_awaitingDiameterMsg({sNR_MSG:=p_SNR}); + //store specific parameter for SAR if needed + if (ischosen (vc_recvDiamMsg.sNR_MSG)){ + vc_sessionId := vc_recvDiamMsg.sNR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.sNR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.sNR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_SNA(template (present)SNA_MSG p_SNA) runs on DiameterComponent + { + f_awaitingDiameterMsg({sNA_MSG:=p_SNA}); + //store specific parameter for SAA if needed + } + +} // end AwaitingMessage + +group SendMessage { + + /** + * + * @desc send DIAMETER message + * @param p_diameterMSG template of the message to be sent + */ + function f_sendDiameterMsg(template (value) DIAMETER_MSG p_diameterMSG) runs on DiameterComponent + { + + if (PX_DIAM_LLP_ENABLED) + { + if(f_gtZero(vc_ETS_conn)) + { + f_Diameter_Set_Headers(p_diameterMSG); + DIAMP.send( p_diameterMSG); + } + else + { + log("Please check configuration!!! Send of DIAMETER message unsucessfull!"); + f_setVerdict (e_error); + } + } + else + { + f_Diameter_Set_Headers(p_diameterMSG); + DIAMP.send( p_diameterMSG); + } + }//end f_sendDiameterMsg + + function f_send_CER(template (value) CER_MSG p_CER) runs on DiameterComponent + { + //set specific parameter for CER if needed + + f_sendDiameterMsg({cER_MSG:=p_CER}); + } + + function f_send_CEA(template (value) CEA_MSG p_CEA) runs on DiameterComponent + { + //set specific parameter for CEA if needed + + f_sendDiameterMsg({cEA_MSG:=p_CEA}); + } + + function f_send_DWR(template (value) DWR_MSG p_DWR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for DWR if needed + + f_sendDiameterMsg({dWR_MSG:=p_DWR}); + } + + function f_send_DWA(template (value) DWA_MSG p_DWA) runs on DiameterComponent + { + //set specific parameter for DWA if needed + + f_sendDiameterMsg({dWA_MSG:=p_DWA}); + } + + function f_send_DPR(template (value) DPR_MSG p_DPR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for DPR if needed + + f_sendDiameterMsg({dPR_MSG:=p_DPR}); + } + + function f_send_DPA(template (value) DPA_MSG p_DPA) runs on DiameterComponent + { + //set specific parameter for DPA if needed + + f_sendDiameterMsg({dPA_MSG:=p_DPA}); + } + + function f_send_AAR(template (value) AAR_MSG p_AAR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for AAR if needed + + f_sendDiameterMsg({aAR_MSG:=p_AAR}); + } + + function f_send_AAA(template (value) AAA_MSG p_AAA) runs on DiameterComponent + { + //set specific parameter for AAA if needed + + f_sendDiameterMsg({aAA_MSG:=p_AAA}); + } + + function f_send_STR(template (value) STR_MSG p_STR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for STR if needed + + f_sendDiameterMsg({sTR_MSG:=p_STR}); + } + + function f_send_STA(template (value) STA_MSG p_STA) runs on DiameterComponent + { + //set specific parameter for STA if needed + + f_sendDiameterMsg({sTA_MSG:=p_STA}); + } + + function f_send_ASR(template (value) ASR_MSG p_ASR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for ASR if needed + + f_sendDiameterMsg({aSR_MSG:=p_ASR}); + } + + function f_send_ASA(template (value) ASA_MSG p_ASA) runs on DiameterComponent + { + //set specific parameter for ASA if needed + + f_sendDiameterMsg({aSA_MSG:=p_ASA}); + } + + function f_send_RAR(template (value) RAR_MSG p_RAR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for RAR if needed + + f_sendDiameterMsg({rAR_MSG:=p_RAR}); + } + + function f_send_RAA(template (value) RAA_MSG p_RAA) runs on DiameterComponent + { + //set specific parameter for RAA if needed + + f_sendDiameterMsg({rAA_MSG:=p_RAA}); + } + + function f_send_CCR(template (value) CCR_MSG p_CCR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for CCR if needed + + f_sendDiameterMsg({cCR_MSG:=p_CCR}); + } + + function f_send_CCA(template (value) CCA_MSG p_CCA) runs on DiameterComponent + { + //set specific parameter for CCA if needed + + f_sendDiameterMsg({cCA_MSG:=p_CCA}); + } + + function f_send_ACR(template (value) ACR_MSG p_ACR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for ACR if needed + + f_sendDiameterMsg({aCR_MSG:=p_ACR}); + } + + function f_send_ACA(template (value) ACA_MSG p_ACA) runs on DiameterComponent + { + //set specific parameter for ACA if needed + + f_sendDiameterMsg({aCA_MSG:=p_ACA}); + } + + function f_send_UAR(template (value) UAR_MSG p_UAR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for UAR if needed + + f_sendDiameterMsg({uAR_MSG:=p_UAR}); + } + + function f_send_UAA(template (value) UAA_MSG p_UAA) runs on DiameterComponent + { + //set specific parameter for UAA if needed + + f_sendDiameterMsg({uAA_MSG:=p_UAA}); + } + + function f_send_UDR(template (value) UDR_MSG p_UDR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for UDR if needed + + f_sendDiameterMsg({uDR_MSG:=p_UDR}); + } + + function f_send_UDA(template (value) UDA_MSG p_UDA) runs on DiameterComponent + { + //set specific parameter for UDA if needed + + f_sendDiameterMsg({uDA_MSG:=p_UDA}); + } + + function f_send_SAR(template (value) SAR_MSG p_SAR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for SAR if needed + + f_sendDiameterMsg({sAR_MSG:=p_SAR}); + } + + function f_send_SAA(template (value) SAA_MSG p_SAA) runs on DiameterComponent + { + //set specific parameter for SAA if needed + + f_sendDiameterMsg({sAA_MSG:=p_SAA}); + } + + function f_send_LIR(template (value) LIR_MSG p_LIR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for LIR if needed + + f_sendDiameterMsg({lIR_MSG:=p_LIR}); + } + + function f_send_LIA(template (value) LIA_MSG p_LIA) runs on DiameterComponent + { + //set specific parameter for LIA if needed + + f_sendDiameterMsg({lIA_MSG:=p_LIA}); + } + + function f_send_MAR(template (value) MAR_MSG p_MAR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for MAR if needed + + f_sendDiameterMsg({mAR_MSG:=p_MAR}); + } + + function f_send_MAA(template (value) MAA_MSG p_MAA) runs on DiameterComponent + { + //set specific parameter for MAA if needed + + f_sendDiameterMsg({mAA_MSG:=p_MAA}); + } + + function f_send_RTR(template (value) RTR_MSG p_RTR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for RTR if needed + + f_sendDiameterMsg({rTR_MSG:=p_RTR}); + } + + function f_send_RTA(template (value) RTA_MSG p_RTA) runs on DiameterComponent + { + //set specific parameter for RTA if needed + + f_sendDiameterMsg({rTA_MSG:=p_RTA}); + } + + function f_send_PNR(template (value) PNR_MSG p_PNR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for PNR if needed + + f_sendDiameterMsg({pNR_MSG:=p_PNR}); + } + + function f_send_PNA(template (value) PNA_MSG p_PNA) runs on DiameterComponent + { + //set specific parameter for PNA if needed + + f_sendDiameterMsg({pNA_MSG:=p_PNA}); + } + + function f_send_PPR(template (value) PPR_MSG p_PPR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for PPR if needed + + f_sendDiameterMsg({pPR_MSG:=p_PPR}); + } + + function f_send_PPA(template (value) PPA_MSG p_PPA) runs on DiameterComponent + { + //set specific parameter for PPA if needed + + f_sendDiameterMsg({pPA_MSG:=p_PPA}); + } + + function f_send_PUR(template (value) PUR_MSG p_PUR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for PUR if needed + + f_sendDiameterMsg({pUR_MSG:=p_PUR}); + } + + function f_send_PUA(template (value) PUA_MSG p_PUA) runs on DiameterComponent + { + //set specific parameter for PUA if needed + + f_sendDiameterMsg({pUA_MSG:=p_PUA}); + } + + function f_send_ULR(template (value) ULR_MSG p_ULR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for ULR if needed + + f_sendDiameterMsg({uLR_MSG:=p_ULR}); + } + + function f_send_ULA(template (value) ULA_MSG p_ULA) runs on DiameterComponent + { + //set specific parameter for ULA if needed + + f_sendDiameterMsg({uLA_MSG:=p_ULA}); + } + + function f_send_AIR(template (value) AIR_MSG p_AIR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for AIR if needed + + f_sendDiameterMsg({aIR_MSG:=p_AIR}); + } + + function f_send_AIA(template (value) AIA_MSG p_AIA) runs on DiameterComponent + { + //set specific parameter for AIA if needed + + f_sendDiameterMsg({aIA_MSG:=p_AIA}); + } + + function f_send_CLR(template (value) CLR_MSG p_CLR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for CLR if needed + + f_sendDiameterMsg({cLR_MSG:=p_CLR}); + } + + function f_send_CLA(template (value) CLA_MSG p_CLA) runs on DiameterComponent + { + //set specific parameter for CLA if needed + + f_sendDiameterMsg({cLA_MSG:=p_CLA}); + } + + function f_send_IDR(template (value) IDR_MSG p_IDR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for IDR if needed + + f_sendDiameterMsg({iDR_MSG:=p_IDR}); + } + + function f_send_IDA(template (value) IDA_MSG p_IDA) runs on DiameterComponent + { + //set specific parameter for IDA if needed + + f_sendDiameterMsg({iDA_MSG:=p_IDA}); + } + + function f_send_DSR(template (value) DSR_MSG p_DSR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for DSR if needed + + f_sendDiameterMsg({dSR_MSG:=p_DSR}); + } + + function f_send_DSA(template (value) DSA_MSG p_DSA) runs on DiameterComponent + { + //set specific parameter for DSA if needed + + f_sendDiameterMsg({dSA_MSG:=p_DSA}); + } + + function f_send_PUER(template (value) PUER_MSG p_PUER) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for PUER if needed + + f_sendDiameterMsg({pUER_MSG:=p_PUER}); + } + + function f_send_PUEA(template (value) PUEA_MSG p_PUEA) runs on DiameterComponent + { + //set specific parameter for PUEA if needed + + f_sendDiameterMsg({pUEA_MSG:=p_PUEA}); + } + + function f_send_RSR(template (value) RSR_MSG p_RSR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for RSR if needed + + f_sendDiameterMsg({rSR_MSG:=p_RSR}); + } + + function f_send_RSA(template (value) RSA_MSG p_RSA) runs on DiameterComponent + { + //set specific parameter for RSA if needed + + f_sendDiameterMsg({rSA_MSG:=p_RSA}); + } + + function f_send_NOR(template (value) NOR_MSG p_NOR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for NOR if needed + + f_sendDiameterMsg({nOR_MSG:=p_NOR}); + } + + function f_send_NOA(template (value) NOA_MSG p_NOA) runs on DiameterComponent + { + //set specific parameter for NOA if needed + + f_sendDiameterMsg({nOA_MSG:=p_NOA}); + } + + function f_send_SNR(template (value) SNR_MSG p_SNR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for SNR if needed + + f_sendDiameterMsg({sNR_MSG:=p_SNR}); + } + + function f_send_SNA(template (value) SNA_MSG p_SNA) runs on DiameterComponent + { + //set specific parameter for SNA if needed + + f_sendDiameterMsg({sNA_MSG:=p_SNA}); + } + + +} // end SendMessage + +group GlobalSteps { + + /* + * @desc This is a test step that init Diameter component + * @param + */ + function f_Diameter_Init_Component() + runs on DiameterComponent { + + } // end function f_Diameter_Init_Component + /* + * @desc This is a test step that assign common Diameter headers + * @param + */ + function f_Diameter_Set_Headers( inout template (value) DIAMETER_MSG p_diameterMSG) + runs on DiameterComponent { + + //insert length of message + if (ischosen(p_diameterMSG.cER_MSG)){ + p_diameterMSG.cER_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cER_MSG)); + p_diameterMSG.cER_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.cER_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.cEA_MSG)){ + p_diameterMSG.cEA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cEA_MSG)); + p_diameterMSG.cEA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.cEA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rAR_MSG)){ + p_diameterMSG.rAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rAR_MSG)); + p_diameterMSG.rAR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.rAR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rAA_MSG)){ + p_diameterMSG.rAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rAA_MSG)); + p_diameterMSG.rAA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.rAA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aCR_MSG)){ + p_diameterMSG.aCR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aCR_MSG)); + p_diameterMSG.aCR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.aCR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aCA_MSG)){ + p_diameterMSG.aCA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aCA_MSG)); + p_diameterMSG.aCA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.aCA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aSR_MSG)){ + p_diameterMSG.aSR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aSR_MSG)); + p_diameterMSG.aSR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.aSR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aSA_MSG)){ + p_diameterMSG.aSA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aSA_MSG)); + p_diameterMSG.aSA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.aSA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sTR_MSG)){ + p_diameterMSG.sTR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sTR_MSG)); + p_diameterMSG.sTR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.sTR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sTA_MSG)){ + p_diameterMSG.sTA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sTA_MSG)); + p_diameterMSG.sTA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.sTA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dWR_MSG)){ + p_diameterMSG.dWR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dWR_MSG)); + p_diameterMSG.dWR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.dWR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dWA_MSG)){ + p_diameterMSG.dWA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dWA_MSG)); + p_diameterMSG.dWA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.dWA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dPR_MSG)){ + p_diameterMSG.dPR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dPR_MSG)); + p_diameterMSG.dPR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.dPR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dPA_MSG)){ + p_diameterMSG.dPA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dPA_MSG)); + p_diameterMSG.dPA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.dPA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + //RFC4740 + if (ischosen(p_diameterMSG.uAR_MSG)){ + p_diameterMSG.uAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uAR_MSG)); + p_diameterMSG.uAR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.uAR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.uAA_MSG)){ + p_diameterMSG.uAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uAA_MSG)); + p_diameterMSG.uAA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.uAA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sAR_MSG)){ + p_diameterMSG.sAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sAR_MSG)); + p_diameterMSG.sAR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.sAR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sAA_MSG)){ + p_diameterMSG.sAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sAA_MSG)); + p_diameterMSG.sAA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.sAA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.lIR_MSG)){ + p_diameterMSG.lIR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.lIR_MSG)); + p_diameterMSG.lIR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.lIR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.lIA_MSG)){ + p_diameterMSG.lIA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.lIA_MSG)); + p_diameterMSG.lIA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.lIA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.mAR_MSG)){ + p_diameterMSG.mAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.mAR_MSG)); + p_diameterMSG.mAR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.mAR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.mAA_MSG)){ + p_diameterMSG.mAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.mAA_MSG)); + p_diameterMSG.mAA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.mAA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rTR_MSG)){ + p_diameterMSG.rTR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rTR_MSG)); + p_diameterMSG.rTR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.rTR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rTA_MSG)){ + p_diameterMSG.rTA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rTA_MSG)); + p_diameterMSG.rTA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.rTA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pPR_MSG)){ + p_diameterMSG.pPR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pPR_MSG)); + p_diameterMSG.pPR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.pPR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pPA_MSG)){ + p_diameterMSG.pPA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pPA_MSG)); + p_diameterMSG.pPA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.pPA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + //Sh interface + if (ischosen(p_diameterMSG.uDR_MSG)){ + p_diameterMSG.uDR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uDR_MSG)); + p_diameterMSG.uDR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.uDR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.uDA_MSG)){ + p_diameterMSG.uDA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uDA_MSG)); + p_diameterMSG.uDA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.uDA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pUR_MSG)){ + p_diameterMSG.pUR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUR_MSG)); + p_diameterMSG.pUR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.pUR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pUA_MSG)){ + p_diameterMSG.pUA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUA_MSG)); + p_diameterMSG.pUA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.pUA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sNR_MSG)){ + p_diameterMSG.sNR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sNR_MSG)); + p_diameterMSG.sNR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.sNR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sNA_MSG)){ + p_diameterMSG.sNA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sNA_MSG)); + p_diameterMSG.sNA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.sNA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pNR_MSG)){ + p_diameterMSG.pNR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pNR_MSG)); + p_diameterMSG.pNR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.pNR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pNA_MSG)){ + p_diameterMSG.pNA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pNA_MSG)); + p_diameterMSG.pNA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.pNA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + //RFC4006 + if (ischosen(p_diameterMSG.cCR_MSG)){ + p_diameterMSG.cCR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cCR_MSG)); + p_diameterMSG.cCR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.cCR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.cCA_MSG)){ + p_diameterMSG.cCA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cCA_MSG)); + p_diameterMSG.cCA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.cCA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + //Rx interface + if (ischosen(p_diameterMSG.aAR_MSG)){ + p_diameterMSG.aAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aAR_MSG)); + p_diameterMSG.aAR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.aAR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aAA_MSG)){ + p_diameterMSG.aAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aAA_MSG)); + p_diameterMSG.aAA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.aAA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + //S6a messages + if (ischosen(p_diameterMSG.uLR_MSG)){ + p_diameterMSG.uLR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uLR_MSG)); + p_diameterMSG.uLR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.uLR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.uLA_MSG)){ + p_diameterMSG.uLA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uLA_MSG)); + p_diameterMSG.uLA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.uLA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aIR_MSG)){ + p_diameterMSG.aIR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aIR_MSG)); + p_diameterMSG.aIR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.aIR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aIA_MSG)){ + p_diameterMSG.aIA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aIA_MSG)); + p_diameterMSG.aIA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.aIA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.cLR_MSG)){ + p_diameterMSG.cLR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cLR_MSG)); + p_diameterMSG.cLR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.cLR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.cLA_MSG)){ + p_diameterMSG.cLA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cLA_MSG)); + p_diameterMSG.cLA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.cLA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.iDR_MSG)){ + p_diameterMSG.iDR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.iDR_MSG)); + p_diameterMSG.iDR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.iDR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.iDA_MSG)){ + p_diameterMSG.iDA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.iDA_MSG)); + p_diameterMSG.iDA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.iDA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dSR_MSG)){ + p_diameterMSG.dSR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dSR_MSG)); + p_diameterMSG.dSR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.dSR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dSA_MSG)){ + p_diameterMSG.dSA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dSA_MSG)); + p_diameterMSG.dSA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.dSA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pUER_MSG)){ + p_diameterMSG.pUER_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUER_MSG)); + p_diameterMSG.pUER_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.pUER_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pUEA_MSG)){ + p_diameterMSG.pUEA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUEA_MSG)); + p_diameterMSG.pUEA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.pUEA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rSR_MSG)){ + p_diameterMSG.rSR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rSR_MSG)); + p_diameterMSG.rSR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.rSR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rSA_MSG)){ + p_diameterMSG.rSA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rSA_MSG)); + p_diameterMSG.rSA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.rSA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.nOR_MSG)){ + p_diameterMSG.nOR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.nOR_MSG)); + p_diameterMSG.nOR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.nOR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.nOA_MSG)){ + p_diameterMSG.nOA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.nOA_MSG)); + p_diameterMSG.nOA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.nOA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + + if (ischosen(p_diameterMSG.uNKNOWN_MSG)){ + p_diameterMSG.uNKNOWN_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uNKNOWN_MSG)); + p_diameterMSG.uNKNOWN_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.uNKNOWN_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + + } // end function f_Diameter_Set_Headers + + function f_IPAdress (IPv4Addr p_ipv4,IPv6Addr p_ipv6) + return Address + { + var Address v_ipv4, v_ipv6; + if (PX_IPv6) + { + v_ipv6.addressFamily := c_ipv6AddressFamily; + v_ipv6.ipAddress := {ipv6:= p_ipv6 }; + return(v_ipv6) + } + else + { + v_ipv4.addressFamily := c_ipv4AddressFamily; + v_ipv4.ipAddress := {ipv4:= p_ipv4 }; + return(v_ipv4) + } + } + + function f_IPV4or6_String2Address (charstring p_addr) + return template Address + { + var integer addr_len:=0; + var integer i; + //var integer addr[8]; + var integer addr_i; + var charstring num:=""; + var charstring current:=""; + var template Address v_ip; + addr_len:=lengthof(p_addr); + addr_i:=0; + + if (PX_IPv6){ + v_ip.addressFamily := c_ipv6AddressFamily; + v_ip.ipAddress.ipv6 := {0,0,0,0,0,0,0,0}; + for(i:=0;i7){ + log("IPV6 parse ERROR"); + }else{ + if ((lengthof(num) mod 2)==1){ + num:="0"# + } + //addr[addr_i]:=oct2int(str2oct(num)); + v_ip.ipAddress.ipv6[addr_i]:=oct2int(str2oct(num)); + num:=""; + } + + return(v_ip) + } + else{ + v_ip.addressFamily := c_ipv4AddressFamily; + v_ip.ipAddress.ipv4 := {0,0,0,0}; + for(i:=0;i3){ + log("IPV4 parse ERROR"); + }else{ + //addr[addr_i]:=str2int(num); + v_ip.ipAddress.ipv4[addr_i]:=str2int(num); + num:=""; + } + + return(v_ip) + } + } + + + function f_IPV4_Address2oct (charstring p_addr) + return octetstring + { + var integer addr_len:=0; + var integer i; + + var integer addr_i; + var charstring num:=""; + var charstring current:=""; + var integer v_Addrint; + var hexstring v_Addrhex := ''H; + var octetstring v_Addroct := ''O; + addr_len:=lengthof(p_addr); + addr_i:=0; + + for(i:=0;i3){ + log("IPV4 parse ERROR"); + }else{ + v_Addrint := str2int(num); + v_Addrhex := v_Addrhex&int2hex(v_Addrint, 2); + v_Addroct := hex2oct(v_Addrhex); + num:=""; + } + + return(v_Addroct) + + } + + /** + * + * @desc component termination + */ + function f_terminate_diameter_component() runs on DiameterComponent + { + log("component terminated - forced!"); + deactivate; + stop; + } + + /** + * @desc component termination + */ + function f_componentStop( + ) runs on DiameterComponent { + syncPort.send(m_syncClientStop); + DIAMP.clear; + stop; + } + + /** + + /** + * + * @desc original copied from older LibCommon_VerdictControl + */ + function f_getVerdict() + return FncRetCode { + var FncRetCode v_ret := e_error; + if (getverdict == pass or getverdict == none) { + v_ret := e_success; + } + return v_ret; + } + + /** + * + * @desc function waits for particular time before next expected message + */ + function f_wait(float p_time) runs on DiameterComponent + { + tc_wait.start(p_time); + alt { + [] tc_wait.timeout{} + } + } + +}// end group GlobalSteps + + +group Preambles { + + /** + * + * @desc preamble for Client(AS - IMS) side + * @param + */ + function f_preambleClient() runs on DiameterComponent + { + var Lower_Layer_Primitive v_MSG; + + //vc_ETS_conn:=1; // init connection ID, or even better random for each component + + LLPP.send(m_llp_connect(vc_ETS_address, vc_ETS_port, vc_SUT_address, vc_SUT_port,vc_ETS_conn)); + tc_wait.start; + alt + { + + [] LLPP.receive (mw_llp_connectConfirm(vc_ETS_address, vc_ETS_port, vc_SUT_address, vc_SUT_port,vc_ETS_conn)) -> value v_MSG + { + tc_wait.stop; + vc_ETS_conn:=valueof(v_MSG.ll_header.ETS_conn); + log("Connection established"); + }; + + [] LLPP.receive (mw_llp_disconnectIndication(vc_ETS_conn)) + { + tc_wait.stop; + vc_ETS_conn:=0; + log("Connection NOT established"); + f_setVerdict (e_error); + }; + [] tc_wait.timeout + { + vc_ETS_conn:=0; + log("Connection NOT established"); + f_setVerdict (e_error); + } + } + } + + /** + * + * @desc preamble for Server (PCRF) side + * @param + */ + function f_preambleServer() runs on DiameterComponent + { + var Lower_Layer_Primitive v_MSG; + + LLPP.send(m_llp_listen(vc_ETS_address, vc_ETS_port, vc_SUT_address, vc_SUT_port)); + tc_wait.start; + alt + { + [] LLPP.receive (mw_llp_connectIndication(*,*,*,*,*)) -> value v_MSG + { + tc_wait.stop; + vc_ETS_conn:=valueof(v_MSG.ll_header.ETS_conn); + log("Connection established"); + }; + [] tc_wait.timeout + { + log("Connection NOT established"); + f_setVerdict (e_error); + } + } + } + + group preamble_Diameter{ + + + function f_preambleDiameterBaseClient( + in UInt32 p_authApplicationId + ) runs on DiameterComponent { + + f_send_CER(m_CER_AppId(vc_originHost, vc_originRealm, vc_hostIPAddress, p_authApplicationId)); + f_awaiting_CEA(mw_CEA_dummy); + f_send_DWR(m_DWR_basic(vc_originHost, vc_originRealm)); + f_awaiting_DWA(mw_DWA_dummy); + } + + function f_preambleDiameterBaseClient_acct_Application_Id_AVP( + in UInt32 p_acctApplicationId + ) runs on DiameterComponent { + + f_send_CER(m_CER_AppId_acct_Application_Id(vc_originHost, vc_originRealm, vc_hostIPAddress, p_acctApplicationId)); + f_awaiting_CEA(mw_CEA_dummy); + f_send_DWR(m_DWR_basic(vc_originHost, vc_originRealm)); + f_awaiting_DWA(mw_DWA_dummy); + } + + function f_preambleDiameterBaseServer(UInt32 p_authApplicationId)runs on DiameterComponent + { + + f_awaiting_CER(mw_CER_dummy); + f_send_CEA(m_CEA_AppId(vc_originHost, vc_originRealm, vc_hostIPAddress, p_authApplicationId)); +// f_send_DWR(m_DWR_basic(vc_originHost, vc_originRealm)); +// f_awaiting_DWA(mw_DWA_dummy); + } + + }//end group preamble_Diameter + +}// end group Preambles + +group Postambles { + + /** + * + * @desc prostamble for Client or Server side + * @param + */ + function f_postambleDisconnect() runs on DiameterComponent + { + + LLPP.send(m_llp_disconnect(vc_ETS_conn)); + vc_ETS_conn:=0; + + all timer.stop; + //stop; + + } + group postamble_Diameter{ + + + function f_postamble_AF() runs on DiameterComponent + { + + f_postambleDiameterBase(); + + if(PX_DIAM_LLP_ENABLED) + { + f_postambleDisconnect(); + } + + } + + function f_postamble_PCRF() runs on DiameterComponent + { + + f_postambleDiameterBase(); + + if(PX_DIAM_LLP_ENABLED) + { + f_postambleDisconnect(); + } + + } + + function f_postambleDiameterBase()runs on DiameterComponent + { + f_send_DPR(m_DPR_basic(vc_originHost, vc_originRealm)); + f_awaiting_DPA(mw_DPA_dummy); + } + + }//end group postamble_Diameter + +} // end group Postambles + +group DiameterChecks +{ +}//end group DiameterChecks + +group DefaultsTestStep +{ + + altstep a_llp_default() runs on DiameterComponent + { + [] any timer.timeout + { + f_setVerdict(e_error); + all timer.stop; + //stop + } + + [] LLPP.receive (mw_llp_disconnectIndication(vc_ETS_conn)) + { + tc_wait.stop; + vc_ETS_conn:=0; + f_setVerdict (e_error); + }; + + } + + altstep a_diameter_default_withinllp() runs on DiameterComponent + { + [] any timer.timeout + { + f_setVerdict(e_error); + all timer.stop; + //stop + } + [] LLPP.receive (mw_llp_dataIndication(vc_ETS_conn, */*DWR*/)) + { + //f_send(/*DWA*/); + }; + [] LLPP.receive (mw_llp_dataIndication(vc_ETS_conn, */*CER*/)) + { + //f_send(/*CEA*/); + }; + + + } + + altstep a_diameter_default() runs on DiameterComponent + { + [] any timer.timeout + { + all timer.stop; + if (vc_serverStop==false) { + f_selfOrClientSyncAndVerdict("error", e_timeout); + } + else { + stop; + } + } + [] DIAMP.receive (DIAMETER_MSG:{dWR_MSG := mw_DWR_dummy}) -> value vc_recvDiamMsgDefault + { + vc_recv_hopid:= vc_recvDiamMsgDefault.dWR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsgDefault.dWR_MSG.header.endid; + f_send_DWA(m_DWA_basic(vc_originHost, vc_originRealm)); + repeat; + } + //CER message can be accepted in following cases: + //- if CER message was not accepted 1st time then it is handled in default altstep. + //- if component is unmaped and maped back for TP reason then Diameter Session can be established again in default Altestep + [] DIAMP.receive (DIAMETER_MSG:{cER_MSG := mw_CER_basic(?)}) -> value vc_recvDiamMsgDefault + { + vc_recv_hopid:= vc_recvDiamMsgDefault.cER_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsgDefault.cER_MSG.header.endid; + //Set all possible interfaces to avoid multiple CER checking + f_send_CEA(m_CEA_AppId_all(vc_originHost, vc_originRealm, vc_hostIPAddress)); + repeat; + } + [] DIAMP.receive (DIAMETER_MSG:?) -> value vc_recvDiamMsgDefault + { + if (vc_serverStop==false) { + f_selfOrClientSyncAndVerdict("error", e_error); + } + else { + stop; + } + } + [] DIAMP.receive + { + if (vc_serverStop==false) { + f_selfOrClientSyncAndVerdict("error", e_error); + } + else { + stop; + } + } + [] a_shutdown() { + // Process temination on error + log("*** a_diameter_default() : Process temination on error ***"); + // Terminate component execution + f_postambleDiameterBase(); + + stop; + } + }//end altstep a_diameter_default + +} // end of group DefaultsTestStep +} // end module LibDiameter_Steps \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..abc56bf05097c0ee1874c93343846df310b2442a --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn @@ -0,0 +1,3849 @@ +/** + * @author STF 434 + * @version $Id$ + * @desc This module defines Diameter Templates for message, header, and + * structured types.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Any additions to the templates shall follow the design rules + * and always modify base templates only; + */ + +module LibDiameter_Templates { + + //LibCommon + import from LibCommon_DataStrings all; + import from LibCommon_BasicTypesAndValues all; + + //LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_PIXITS all; + import from LibDiameter_TypesAndValues all; + + group LowerLayerPrimitives { + + template Lower_Layer_Primitive m_llp_listen(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port) := { + ll_header := m_llh_listen(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port), + pdu := omit + } + + template Lower_Layer_Primitive m_llp_connect(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + ll_header := m_llh_connect(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), + pdu := omit + } + + template Lower_Layer_Primitive mw_llp_connectIndication(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + ll_header := mw_llh_connectIndication(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), + pdu := * + } + + template Lower_Layer_Primitive mw_llp_connectConfirm(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + ll_header := mw_llh_connectConfirm(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), + pdu := * + } + + template Lower_Layer_Primitive m_llp_disconnect(template integer p_ETS_conn) := { + ll_header := m_llh_disconnect(p_ETS_conn), + pdu := omit + } + + template Lower_Layer_Primitive mw_llp_disconnectIndication(template integer p_ETS_conn) := { + ll_header := mw_llh_disconnectIndication(p_ETS_conn), + pdu := * + } + + template Lower_Layer_Primitive m_llp_dataRequest( template integer p_ETS_conn, template DIAMETER_MSG p_pdu) := { + ll_header := m_llh_dataRequest(p_ETS_conn), + pdu := p_pdu + } + + template Lower_Layer_Primitive mw_llp_dataIndication(template integer p_ETS_conn, template DIAMETER_MSG p_pdu) := { + ll_header := mw_llh_dataIndication(p_ETS_conn), + pdu := p_pdu + } + + template Lower_Layer_Header m_llh_listen(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port) := { + primitive := LISTEN_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := omit + } + + template Lower_Layer_Header m_llh_connect(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + primitive := CONNECT_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_connectIndication(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + primitive := CONNECT_INDICATION_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_connectConfirm(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + primitive := CONNECT_CONFIRM_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header m_llh_disconnect(template integer p_ETS_conn) := { + primitive := DISCONNECT_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := omit, + ETS_port := omit, + SUT_address := omit, + SUT_port := omit, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_disconnectIndication(template integer p_ETS_conn) := { + primitive := DISCONNECT_INDICATION_E, + transport_used := c_defaultTransportProtocol, + ETS_address := *, + ETS_port := *, + SUT_address := *, + SUT_port := *, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header m_llh_dataRequest(template integer p_ETS_conn) := { + primitive := DATA_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := omit, + ETS_port := omit, + SUT_address := omit, + SUT_port := omit, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_dataIndication(template integer p_ETS_conn) := { + primitive := DATA_INDICATION_E, + transport_used := c_defaultTransportProtocol, + ETS_address := *, + ETS_port := *, + SUT_address := *, + SUT_port := *, + ETS_conn := p_ETS_conn + } + + }//end group LowerLayerPrimitives + + //internal PIXITS if some + group ModuleParameters { + } //end group ModuleParameters + + group SubFields{ + + template Result_Code_Type/*integer*/ m_resultCode_diameterSuccess := DIAMETER_SUCCESS_E/*2001*/; + template Result_Code_Type/*integer*/ mw_resultCode_diameterSuccess := (DIAMETER_SUCCESS_E,DIAMETER_LIMITED_SUCCESS_E/*2000..2999*/); + + template AVP_Type mw_avpType(template (present) AVP_Header p_avpHeader) := { + aVP_Header := p_avpHeader, + aVP_Data := * + } + + } //end group SubFields + + group HeaderFieldTemplates{ + group DiameterHeaderGroup{ + template (value) Command_Flags m_cmdFlagsAns := { + r_bit := '0'B, + p_bit := '0'B, + e_bit := '0'B, + t_bit := '0'B, + reserved_bits := '0000'B + } + + template (value) Command_Flags m_cmdFlagsAnsProx modifies m_cmdFlagsAns:= { + p_bit := '1'B + } + + template (value) Command_Flags m_cmdFlagsReq modifies m_cmdFlagsAns:= { + r_bit := '1'B + } + + template (value) Command_Flags m_cmdFlagsReqDuplicated modifies m_cmdFlagsAns:= { + r_bit := '1'B, + t_bit := '1'B + } + + template Command_Flags mw_cmdFlags := { + r_bit := ?, + p_bit := ?, + e_bit := ?, + t_bit := ?, + reserved_bits := ? + } + + template (value) DiameterHeader m_diameterHeaderReq_dummy(Command_Code p_cmdcode, UInt32 p_applid) := { + version := c_versionId, + msglen := 0, //Message lenght with AVPs has to be calculated + cmdflags := m_cmdFlagsReq, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := 0, + endid := 0 + } + + template (value) DiameterHeader m_diameterHeaderReqDuplicated_dummy(Command_Code p_cmdcode, UInt32 p_applid) modifies m_diameterHeaderReq_dummy := { + cmdflags := m_cmdFlagsReqDuplicated + } + + template DiameterHeader mw_diameterHeaderReq_dummy(Command_Code p_cmdcode, template (present) UInt32 p_applid) := { + version := c_versionId, + msglen := ?, //Message lenght with AVPs has to be calculated + cmdflags := mw_cmdFlags, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := ?, + endid := ? + } + + template (value) DiameterHeader m_diameterHeaderAns_dummy(Command_Code p_cmdcode, UInt32 p_applid) := { + version := c_versionId, + msglen := 0, //Message lenght with AVPs has to be calculated + cmdflags := m_cmdFlagsAns, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := 0, + endid := 0 + } + + template DiameterHeader mw_diameterHeaderAns_dummy(Command_Code p_cmdcode, template (present) UInt32 p_applid) := { + version := c_versionId, + msglen := ?, //Message lenght with AVPs has to be calculated + cmdflags := mw_cmdFlags, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := ?, + endid := ? + } + + template (value) AVP_Flags m_avpFlags_Mbit1 := { + v_bit := '0'B, + m_bit := '1'B, + p_bit := '0'B, + reserved_bits := '00000'B + } + + template (value) AVP_Flags m_avpFlags_Mbit0 := { + v_bit := '0'B, + m_bit := '0'B, + p_bit := '0'B, + reserved_bits := '00000'B + } + + template (value) AVP_Flags m_avpFlags_VMbit1 := { + v_bit := '1'B, + m_bit := '1'B, + p_bit := '0'B, + reserved_bits := '00000'B + } + + template AVP_Flags mw_avpFlags_any := { + v_bit := ?, + m_bit := ?, + p_bit := ?, + reserved_bits := '00000'B + } + + template AVP_Flags mw_avpFlags_VMbits(template (present) Bit1 p_vbit, template (present) Bit1 p_mbit) := { + v_bit := p_vbit, + m_bit := p_mbit, + p_bit := ?, + reserved_bits := '00000'B + } + + template AVP_Header mw_aVP_Header_any := { + aVP_Code :=?, + aVP_flags := mw_avpFlags_any, + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_any_Code (template (present) AVP_Code p_avpCode):= { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_any, + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit0 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('0'B, ?), + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit0Mbit0 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('0'B, '0'B), + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit0Mbit1 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('0'B, '1'B), + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit1Mbit0 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('1'B, '0'B), + aVP_len := ?, + aVP_vid := ? + } + + //Same template as mw_aVP_Header_VMbit1 but same name style as above templates mw_aVP_Header_VbitXMbitX + template AVP_Header mw_aVP_Header_Vbit1Mbit1 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('1'B, '1'B), + aVP_len := ?, + aVP_vid := ? + } + + template AVP_Header mw_aVP_Header_VMbit1 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('1'B, '1'B), + aVP_len := ?, + aVP_vid := ? + } + + template (value) AVP_Header m_aVP_Header_Mbit1(AVP_Code p_avpCode, AVP_Length p_dataLen:=0) := { + aVP_Code := p_avpCode, + aVP_flags := m_avpFlags_Mbit1, + aVP_len := f_aVP_len(8, p_dataLen, omit), + aVP_vid := omit + } + + template (value) AVP_Header m_aVP_Header_Mbit0(AVP_Code p_avpCode, AVP_Length p_dataLen:=0) := { + aVP_Code := p_avpCode, + aVP_flags := m_avpFlags_Mbit0, + aVP_len := f_aVP_len(8, p_dataLen, omit), + aVP_vid := omit + } + + /** + * @desc complete AVP header field template + * @param p_avpCode specific Code of the AVP parameter + * @param p_avpDataLen additional length caused if AVP data field is present + * @param p_avpVid vendor id if needed + */ + template (value) AVP_Header m_aVP_HeaderVid_Mbit0(AVP_Code p_avpCode, AVP_Length p_avpDataLen, template (omit) AVP_Vendor_ID p_avpVid := omit) := { + aVP_Code := p_avpCode, + aVP_flags := {v_bit := f_aVPvBit(p_avpVid), + m_bit := '0'B, + p_bit := '0'B, + reserved_bits := '00000'B}, + aVP_len :=f_aVP_len(8, p_avpDataLen, p_avpVid), // add length of avpData and optional 4 (if Vid is present) + aVP_vid := p_avpVid + } + + /** + * @desc complete AVP header field template + * @param p_avpCode specific Code of the AVP parameter + * @param p_avpDataLen additional length caused if AVP data field is present + * @param p_avpVid vendor id if needed + */ + template (value) AVP_Header m_aVP_HeaderVid_Mbit1(AVP_Code p_avpCode, AVP_Length p_avpDataLen, template (omit) AVP_Vendor_ID p_avpVid := omit) := { + aVP_Code := p_avpCode, + aVP_flags := {v_bit := f_aVPvBit(p_avpVid), + m_bit := '1'B, + p_bit := '0'B, + reserved_bits := '00000'B}, + aVP_len :=f_aVP_len(8, p_avpDataLen, p_avpVid), // add length of avpData and optional 4 (if Vid is present) + aVP_vid := p_avpVid + } + + /** + * @desc complete AVP header field receive template + * @param p_avpCode specific Code of the AVP parameter + * @param p_avpDataLen additional length caused if AVP data field is present + * @param p_avpVid vendor id if needed + */ + template (present) AVP_Header mw_aVP_HeaderVid_Mbit1( + in AVP_Code p_avpCode, + in template (present) AVP_Length p_avpDataLen := ?, + in template (present) AVP_Vendor_ID p_avpVid) := { + aVP_Code := p_avpCode, + aVP_flags := {v_bit := f_aVPvBit(p_avpVid), + m_bit := '1'B, + p_bit := ?, + reserved_bits := '00000'B}, + aVP_len := p_avpDataLen, + aVP_vid := p_avpVid + } + + function f_aVP_len(AVP_Length p_length8, AVP_Length p_avpDataLen, template AVP_Vendor_ID p_avpVid)return AVP_Length { + var AVP_Length v_sum; + v_sum := p_length8 + p_avpDataLen + f_lengthVid(p_avpVid); + return v_sum + } + + function f_lengthof_AVP(AVP_Header p_header) return AVP_Length { + var AVP_Length v_sum; + v_sum := f_aVP_len (8, p_header.aVP_len, p_header.aVP_vid); + return v_sum + } + + function f_getByteAlignedLength(template AVP_Length p_length) return AVP_Length { + return (valueof(p_length) + ((4-valueof(p_length) mod 4) mod 4)); + + } + + function f_lengthVid(template AVP_Vendor_ID p_avpVid) return AVP_Length { + if(isvalue(p_avpVid)){return 4} else{return 0} + } + + function f_aVPvBit(template AVP_Vendor_ID p_avpVid) return Bit1 { + if(isvalue(p_avpVid)){return '1'B} else{return '0'B} + } + + } //end group DiameterHeaderGroup + + group DummyAVPHeaders{ + + template (value) Origin_Host_AVP m_originHost_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Host_AVP_Code, 3), + aVP_Data := "abc" + } + + template (value) Origin_Realm_AVP m_originRealm_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Realm_AVP_Code, 3), + aVP_Data := "abc" + } + + template Vendor_Id_AVP m_vendorId_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Id_AVP_Code, 4), + aVP_Data := 0 + } + + template Product_Name_AVP m_productName_dummy := { + aVP_Header := m_aVP_Header_Mbit0(c_product_Name_AVP_Code, 3), + aVP_Data := "abc" + } + + template Disconnect_Cause_AVP m_disconnectCause_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_disconnect_Cause_AVP_Code, 4), + aVP_Data := REBOOTING_E + } + + template Result_Code_AVP m_resultCode_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_result_Code_AVP_Code, 4), + aVP_Data := DIAMETER_DUMMY_E + } + + template (value) Destination_Host_AVP m_destinationHost_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Host_AVP_Code, 3), + aVP_Data := "abc" + } + + template (value) Destination_Realm_AVP m_destinationRealm_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Realm_AVP_Code, 3), + aVP_Data := "abc" + } + + template Termination_Cause_AVP m_terminationCause_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_termination_Cause_AVP_Code, 4), + aVP_Data := DIAMETER_LOGOUT_E + } + + template (value) Session_Id_AVP m_sessionId_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_session_Id_AVP_Code, 3), + aVP_Data := "abc" + } + + template (value) Auth_Application_Id_AVP m_authApplicationId_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_auth_Application_Id_AVP_Code, 4), + aVP_Data := 0 + } + + template Accounting_Record_Type_AVP m_accounting_Record_Type_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_accounting_Record_Type_AVP_Code,4), + aVP_Data := EVENT_RECORD_E + } + + template Accounting_Record_Number_AVP m_accounting_Record_Number_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_accounting_Record_Number_AVP_Code,4), + aVP_Data := 0 + } + + template Auth_Session_State_AVP m_auth_Session_State_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_auth_Session_State_AVP_Code,4), + aVP_Data := STATE_MAINTAINED_E + } + + template Auth_Session_State_AVP m_auth_Session_State_no_maintained := { + aVP_Header := m_aVP_Header_Mbit1(c_auth_Session_State_AVP_Code,4), + aVP_Data := NO_STATE_MAINTAINED_E + } + + template SIP_AOR_AVP m_sIP_AOR_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_AOR_AVP_Code, 18, omit), + aVP_Data := f_DiameterURI_2_UTF8String(m_diameterURI_dummy) + } + + template (value) DiameterURI m_diameterURI_dummy := + { + scheme := "aaa", + diameterId_FQDN := "www.etsi.org", + portField := omit, + transport := omit, + protocol := omit + } + + template SIP_Visited_Network_Id_AVP m_sIP_Visited_Network_Id_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Visited_Network_Id_AVP_Code, 6, omit), + aVP_Data := "abcabc" + } + + template SIP_Digest_Authenticate_AVP m_sIP_Digest_Authenticate( + in template (value) Digest_Realm_AVP p_digest_Realm + ) := { + aVP_Header := m_aVP_Header_Mbit1(c_sIP_Digest_Authenticate_AVP_Code), + digest_Realm := p_digest_Realm, + digest_Algorithm := omit, + digest_QoP := omit, + digest_HA1 := omit, + aVP_Type := omit + } + + template SIP_User_Authorization_Type_AVP m_sIP_User_Authorization_Type( + in template (value) SIP_User_Auth_Ty_Type p_aVP_Data := REGISTRATION_E + ) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Authorization_Type_AVP_Code, 4, omit), + aVP_Data := p_aVP_Data + } + + template SIP_User_Data_Already_Available_AVP m_sIP_User_Data_Already_Available_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Already_Available_AVP_Code, 4, omit), + aVP_Data := USER_DATA_NOT_AVAILABLE_E + } + + template SIP_Server_Assignment_Type_AVP m_sIP_Server_Assignment_Type_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Server_Assignment_Type_AVP_Code, 4, omit), + aVP_Data := NO_ASSIGNMENT_E + } + + template SIP_User_Data_AVP m_sIP_User_Data_dummy := + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_AVP_Code, 0, omit), + sIP_User_Data_Type := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Type_AVP_Code, 3 ,omit), + aVP_Data := "abc" + }, + sIP_User_Data_Contents := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Contents_AVP_Code, 1, omit), + aVP_Data := '00'O + }, + aVP_Type := omit + } + + template SIP_Accounting_Information_AVP m_sIP_Accounting_Information_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Accounting_Information_AVP_Code, 0, omit), + sIP_Accounting_Server_URI := omit, + sIP_Credit_Control_Server_URI := omit, + aVP_Type := omit + } + + template SIP_Method_AVP m_sIP_Method_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Method_AVP_Code, 3, omit), + aVP_Data := "sip" + } + + template SIP_Deregistration_Reason_AVP m_sIP_Deregistration_Reason_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Deregistration_Reason_AVP_Code, 8, omit), + sIP_Reason_Code_AVP := m_sIP_Reason_Code_dummy, + sIP_Reason_Info_AVP := omit, + aVP_Type := omit + } + + template SIP_Reason_Code_AVP m_sIP_Reason_Code_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Reason_Code_AVP_Code, 4, omit), + aVP_Data := PERMANENT_TERMINATION_E + } + + template User_Name_AVP m_user_Name_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_user_Name_AVP_Code, 3), + aVP_Data := "dbo" + } + + template User_Identity_AVP m_user_Identity_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Identity_AVP_Code, 0, c_vendId3gpp), + public_Identity_AVP := omit, + mSISDN_AVP := omit, + aVP_Type := omit + } + + template User_Data_AVP m_user_Data_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Data_AVP_Code, 1, c_vendId3gpp), + aVP_Data := '00'O + } + + template CC_Request_Type_AVP m_cC_Request_Type_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_cC_Request_Type_AVP_Code,4, omit), + aVP_Data := INITIAL_REQUEST_E + } + + template CC_Request_Number_AVP m_cC_Request_Number_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_cC_Request_Number_AVP_Code,4, omit), + aVP_Data := 0 + } + + template Data_Reference_AVP m_data_Reference_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_data_Reference_AVP_Code, 4, c_vendId3gpp), + aVP_Data := REPOSITORY_DATA_E + } + + template (value) Server_Name_AVP m_server_name_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_server_Name_AVP_Code, 4, c_vendId3gpp), + aVP_Data := "sip_url" + } + + template Service_Indication_AVP m_service_Indication_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_service_Indication_AVP_Code, 4, c_vendId3gpp), + aVP_Data := '00'O + } + + template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Appl_Id_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code), + vendor_Id := omit, + auth_Application_Id := omit, + acct_Application_Id := omit + } + + template Re_Auth_Request_Type_AVP m_re_Auth_Request_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_re_Auth_Request_Type_AVP_Code, 4), + aVP_Data := AUTHORIZE_ONLY_E + } + + template SIP_Number_Auth_Items_AVP m_sIPNumberAuthItems_RFC_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC, 4, omit), + aVP_Data := 1 + } + + template SIP_Auth_Data_Item_RFC_AVP m_sIPAuthDataItem_dummy_RFC := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC, 1, c_vendId3gpp), + sIP_Authentication_Scheme := m_sIPAuthenticationScheme_digest_RFC, + sIP_Item_Number := omit, + sIP_Authenticate := omit, + sIP_Authorization := omit, + sIP_Authentication_Info := omit, + aVP_Type := omit + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_digest_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := DIGEST_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_unknown_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := UNKNOWN_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_digest_aka_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := DIGEST_AKAv1_MD5_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_nass_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := NASS_BUNDLE_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_giga_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := GIBA_E + } + } + + template Subs_Req_Type_AVP m_subs_Req_Type_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_subs_Req_Type_AVP_Code, 4, c_vendId3gpp), + aVP_Data := SUBSCRIBE_E + } + + } //end group DummyAVPHeaders + + group SpecificAVPHeaders { + + template Session_Id_AVP m_sessionId(UTF8String p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_session_Id_AVP_Code, f_getUTF8StringLength(p_avpData)), + aVP_Data := p_avpData + } + + template Auth_Application_Id_AVP m_authApplicationId(UInt32 p_avpData):= + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_auth_Application_Id_AVP_Code, 4, omit), + aVP_Data := p_avpData + } + + template Acct_Application_Id_AVP m_acctApplicationId(UInt32 p_avpData):= + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_acct_Application_Id_AVP_Code, 4, omit), + aVP_Data := p_avpData + } + + template Disconnect_Cause_AVP m_disconnectCause(Disconnect_Cause_Type p_aVP_Data) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_disconnect_Cause_AVP_Code, 4, omit ), + aVP_Data := p_aVP_Data + } + + template Host_IP_Address_AVP m_hostIPAddress(Address p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_host_IP_Address_AVP_Code, f_IPAdressLengthUInt24()), + aVP_Data := p_avpData + } + + template Origin_Host_AVP m_originHost(template(value) charstring p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Host_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Origin_Realm_AVP m_originRealm(template(value) charstring p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Realm_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Destination_Host_AVP m_destinationHost(template(value) charstring p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Host_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Destination_Realm_AVP m_destinationRealm(template(value) charstring p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Realm_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Product_Name_AVP m_productName(template(value) UTF8String p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit0(c_product_Name_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Result_Code_AVP m_resultCode(template (value) /*integer*/Result_Code_Type p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_result_Code_AVP_Code, 4), + aVP_Data := p_avpData + } + + template Vendor_Id_AVP m_supportedVendorId(template(value) UInt32 p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_supported_Vendor_Id_AVP_Code, 4), + aVP_Data := p_avpData + } + + template Vendor_Id_AVP m_vendorId(template(value) UInt32 p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Id_AVP_Code, 4), + aVP_Data := p_avpData + } + + template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Appl_Id(UInt32 p_authApplicationId) := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code, 24), + vendor_Id := {m_vendorId(c_vendId3gpp)}, + auth_Application_Id := {m_authApplicationId(p_authApplicationId)}, + acct_Application_Id := omit + } + + template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Acct_Id(UInt32 p_acctApplicationId) := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code, 24), + vendor_Id := {m_vendorId(c_vendId3gpp)}, + auth_Application_Id := omit, + acct_Application_Id := {m_acctApplicationId(p_acctApplicationId)} + } + + template Auth_Application_Id_AVP mw_authApplicationId(UInt32 p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_auth_Application_Id_AVP_Code), + aVP_Data := p_avpData + } + + template Acct_Application_Id_AVP mw_acctApplicationId(UInt32 p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_acct_Application_Id_AVP_Code), + aVP_Data := p_avpData + } + + template QoS_Information_AVP mw_qosInformation_QosInfo_ARP := { + aVP_Header := mw_aVP_Header_VMbit1(c_qoS_Information_AVP_Code), // + qoS_Class_Identifier :=?, + max_Requested_Bandwidth_UL :=*, + max_Requested_Bandwidth_DL :=*, + guaranteed_Bitrate_UL :=*, + guaranteed_Bitrate_DL :=*, + bearer_Identifier :=*, + allocation_Retention_Priority :=?, + aPN_Aggregate_Max_Bitrate_UL :=*, + aPN_Aggregate_Max_Bitrate_DL :=*, + aVP_Type:=* + } + + template Result_Code_AVP mw_resultCode(template (present)/*integer*/Result_Code_Type p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_result_Code_AVP_Code), + aVP_Data := p_avpData + } +// +// template Experimental_Result_AVP mw_experimentalResult(template (present)/*integer*/Experimental_Result_Code_AVP p_experimental_Result_Code) := { +// aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_experimental_Result_AVP_Code), +// vendor_Id := ?, +// experimental_Result_Code := p_experimental_Result_Code +// } + + template Experimental_Result_Code_AVP mw_experimentalResultCode(template (present)/*integer*/Experimental_Result_Type p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_experimental_Result_Code_AVP_Code), + aVP_Data := p_avpData + } + + template Session_Release_Cause_AVP mw_sessReleaseCause(template (present) Session_Release_Cause p_avpData) := + { + aVP_Header := mw_aVP_Header_VMbit1(c_session_Release_Cause_AVP_Code), + aVP_Data := p_avpData + } + + template Supported_Features_AVP mw_supportedFeatures_dummy := { + aVP_Header := mw_aVP_HeaderVid_Mbit1(c_supported_Features_AVP_Code, ?, c_vendId3gpp), + vendor_Id := ?, + feature_list_Id := *, + feature_list := ?, + aVP_Data := * + } + + template Supported_Features_AVP m_supportedFeatures ( + template Vendor_Id_AVP p_vendorId, + template Feature_List_ID_AVP p_feature_list_Id, + template (value) Feature_List_AVP p_feature_list, + template Supported_Features_AVP.aVP_Data p_aVP_Data + ):= { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_supported_Features_AVP_Code, 1, c_vendId3gpp), + vendor_Id := m_vendorId(c_vendId3gpp), + feature_list_Id := p_feature_list_Id, + feature_list := p_feature_list, + aVP_Data := p_aVP_Data + } + + template Feature_List_AVP m_featureList(template (present) UInt32 p_avpData) := + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_feature_List_AVP_Code, 1, c_vendId3gpp), + aVP_Data := p_avpData + } + + template Feature_List_ID_AVP m_featureListId(template (present) UInt32 p_avpData) := + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_feature_List_ID_AVP_Code, 1, c_vendId3gpp), + aVP_Data := p_avpData + } + + template Failed_AVP mw_failed(template (present) Failed_AVP.aVP p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_failed_AVP_Code), + aVP := p_avpData + } + + template SIP_Number_Auth_Items_AVP m_sIPNumberAuthItems_RFC (template (value) UInt32 p_avpData) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC, 4, omit), + aVP_Data := p_avpData + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_RFC(template (value) SIP_Auth_Schm_Type p_SIPAuthSchmType) := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := p_SIPAuthSchmType + } + } + + template User_Name_AVP m_userName(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_user_Name_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template SIP_Item_Number_AVP m_sIPItemNumber_RFC(template (value) UInt32 p_aVP_Data) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Item_Number_AVP_Code_RFC, 4, omit), + aVP_Data := p_aVP_Data + } + + template SIP_Authorization_RFC_AVP m_sIP_Authorization_RFC( + template (value) Digest_Username_AVP p_digest_Username, + template (value) Digest_Realm_AVP p_digestRealm, + template (value) Digest_Nonce_AVP p_digestNonce, + template (value) Digest_URI_AVP p_digestUri, + template (value) Digest_Response_AVP p_digest_Response + ) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authorization_AVP_Code_RFC, 4, omit), + digest_Username := p_digest_Username, + digest_Realm := p_digestRealm, + digest_Nonce := p_digestNonce, + digest_URI := p_digestUri, + digest_Response := p_digest_Response, + digest_Algorithm := omit, + digest_CNonce := omit, + digest_Opaque := omit, + digest_QoP := omit, + digest_Nonce_Count := omit, + digest_Method := omit, + digest_Entity_Body_Hash := omit, + digest_Auth_Param := omit, + aVP_Type := omit + } + + template SIP_Authorization_RFC_AVP m_sIP_Authorization_digest_aka_RFC( + template (value) Digest_Username_AVP p_digest_Username, + template (value) Digest_Realm_AVP p_digestRealm, + template (value) Digest_Nonce_AVP p_digestNonce, + template (value) Digest_URI_AVP p_digestUri, + template (value) Digest_Response_AVP p_digest_Response + ) modifies m_sIP_Authorization_RFC := { + // TODO How to pass RAND + AUX + } + + template Digest_Username_AVP m_digestUsername(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Username_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Username_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_Realm_AVP m_digestRealm(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Realm_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Realm_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_Nonce_AVP m_digestNonce(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Realm_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Realm_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_URI_AVP m_digestUri(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_URI_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_URI_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_Response_AVP m_digestResponse(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Response_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Response_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template User_Name_AVP mw_userName(template (present) UTF8String p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_user_Name_AVP_Code), + aVP_Data := p_avpData + } + + + template User_Data_AVP m_user_Data_shData (octetstring p_ud) modifies m_user_Data_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Data_Sh_AVP_Code, lengthof(p_ud), c_vendId3gpp), + aVP_Data := p_ud + } + + } //end group SpecificAVPHeaders + } //end group HeaderFieldTemplates + + /** Message templates for CER,CEA, DWR, DWA, AAA, AAR, .... methods */ + group MessageTemplates { + + group dummy_templates { + + template UNKNOWN_MSG mw_UNKNOWN_dummy := { + header := ?, + aVP_Type := * + } + group dummy_request_templates_send { + + template (value) AAR_MSG m_AAR_dummy := + { + header := m_diameterHeaderReq_dummy(AAR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aAR_Body := m_AAR_Body_dummy + } + + template (value) AAR_Body_AVP m_AAR_Body_dummy := + { + //dRMP := omit, + auth_Application_Id := m_authApplicationId_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + destination_Host := m_destinationHost_dummy, + iP_Domain := omit, + af_Application_Id := omit, + media_Component_Description := omit, + service_Info_Status := omit, + af_Charging_Identifier := omit, + sip_Forking_Indication := omit, + specific_Action := omit, + subscription_Id := omit, + //oC_Supported_Features := omit, + supported_Features := omit, + reservation_Priority := omit, + framed_IP_Address := omit, + framed_IPv6_Address := omit, + called_Station_Id := omit, + service_URN := omit, + sponsored_Connectivity_Data := omit, + mps_Identifier := omit, + gcs_Identifier := omit, + mcptt_Identifier := omit, + mCVideo_Identifier := omit, + iMS_Content_Identifier := omit, + iMS_Content_Type := omit, + rx_Request_Type := omit, + required_Access_Info := omit, + aF_Requested_Data := omit, + //reference_Id := omit, + pre_emption_Control_Info := omit, + user_Name := omit, + origin_State_Id := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) ACR_MSG m_ACR_dummy := { + header := m_diameterHeaderReq_dummy(ACR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aCR_Body := m_ACR_Body_dummy + } + + template (omit) ACR_Body_AVP m_ACR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + accounting_Record_Type := m_accounting_Record_Type_dummy, + accounting_Record_Number := m_accounting_Record_Number_dummy, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + user_Name := omit, + supported_Features := omit, + accounting_Sub_Session_Id := omit, + acct_Session_Id := omit, + acct_Multi_Session_Id := omit, + acct_Interim_Interval := omit, + accounting_Realtime_Required := omit, + origin_State_Id := omit, + event_Timestamp := omit, + proxy_Info := omit, + route_Record := omit, + service_Context_Id := omit, + service_Information := omit, + aVP_Type := omit + } + + template (value) ASR_MSG m_ASR_dummy := { + header := m_diameterHeaderReq_dummy(ASR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aSR_Body := m_ASR_Body_dummy + } + + template (value) ASR_Body_AVP m_ASR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + destination_Host := m_destinationHost_dummy, + auth_Application_Id := m_authApplicationId_dummy, + abort_cause := omit, + user_Name := omit, + origin_State_Id := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) CCR_MSG m_CCR_dummy := { + header := m_diameterHeaderReq_dummy(CCR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + cCR_Body := m_CCR_Body_dummy + } + + template (omit) CCR_Body_AVP m_CCR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + auth_Application_Id := m_authApplicationId_dummy, + service_Context_Id := omit, + cC_Request_Type := m_cC_Request_Type_dummy, + cC_Request_Number := m_cC_Request_Number_dummy, + destination_Host := omit, + user_Name := omit, + cC_Sub_Session_Id := omit, + acct_Multi_Session_Id := omit, + origin_State_Id := omit, + event_Timestamp := omit, + subscription_Id := omit, + service_Identifier := omit, + termination_Cause := omit, + requested_Service_Unit := omit, + requested_Action := omit, + used_Service_Unit := omit, + aoc_Request_Type_AVP := omit, + multiple_Services_Indicator := omit, + multiple_Services_Credit_Control := omit, + service_Parameter_Info := omit, + cC_Correlation_Id := omit, + supported_Features := omit, + network_Request_Support := omit, + packet_Filter_Information := omit, + packet_Filter_Operation := omit, + bearer_Identifier := omit, + bearer_Operation := omit, + framed_IP_Address := omit, + framed_IPv6_Prefix := omit, + iP_CAN_Type := omit, + threeGPP_RAT_Type := omit, + rat_Type := omit, + qoS_Information := omit, + qoS_Negotiation := omit, + qoS_Upgrade := omit, + default_EPS_Bearer_QoS := omit, + aN_GW_Address := omit, + threeGPP_SGSN_MCC_MNC := omit, + threeGPP_SGSN_Address := omit, + threeGPP_SGSN_IPv6_Address := omit, + rAI := omit, + threeGPP_User_Location_Info := omit, + threeGPP_MS_TimeZone := omit, + called_Station_Id := omit, + pDN_Connection_ID := omit, + bearer_Usage := omit, + online := omit, + offline := omit, + tFT_Packet_Filter_Information := omit, + charging_Rule_Report := omit, + event_Trigger := omit, + event_Report_Indication := omit, + access_Network_Charging_Address := omit, + access_Network_Charging_Identifier_Gx := omit, + coA_Information := omit, + usage_Monitoring_Information := omit, + routing_Rule_Install := omit, + routing_Rule_Remove := omit, + maximum_Bandwidth := omit, + logical_Access_ID := omit, + physical_Access_ID := omit, + session_Linking_Indicator := omit, + qoS_Rule_Report := omit, + subsesion_Enforcement_Info := omit, + threeGPP2_BSID := omit, + multiple_BBERF_Action := omit, + user_CSG_Information := omit, + user_Equipment_Info := omit, + proxy_Info := omit, + route_Record := omit, + service_Information := omit, + aVP_Type := omit + } + + template (value) CER_MSG m_CER_dummy := { + header := m_diameterHeaderReq_dummy(CER_E, c_applIdCommonMsg), + cER_Body := m_CER_Body_dummy + } + + template (value) CER_Body_AVP m_CER_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + host_IP_Address := {m_hostIPAddress(c_address)}, // Address:{'0001'O, {ipv4 := {127, 0, 0,1}}})}, + vendor_Id := m_vendorId_dummy, + product_Name := m_productName_dummy, + origin_State_Id := omit, + supported_Vendor_Id := omit, + auth_Application_Id := omit, + inband_Security_Id := omit, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + firmware_Revision := omit, + aVP_Type := omit + } + + template (value) DWR_MSG m_DWR_dummy := { + header := m_diameterHeaderReq_dummy(DWR_E, c_applIdCommonMsg), + dWR_Body := m_DWR_Body_dummy + } + + template (value) DWR_Body_AVP m_DWR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + origin_State_Id := omit, + aVP_Type := omit + } + + template (value) DPR_MSG m_DPR_dummy := { + header := m_diameterHeaderReq_dummy(DPR_E, c_applIdCommonMsg), + dPR_Body := m_DPR_Body_dummy + } + + template (value) DPR_Body_AVP m_DPR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + disconnect_Cause := m_disconnectCause_dummy, + aVP_Type := omit + } + + template (value) LIR_MSG m_LIR_dummy := { + header := m_diameterHeaderReq_dummy(LIR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + lIR_Body := m_LIR_Body_dummy + } + + template (value) LIR_Body_AVP m_LIR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_AOR := m_sIP_AOR_dummy, + destination_Host := omit, + originating_Request := omit, //only TS129 229 + supported_Features := omit, //only TS129 229 + public_Identity := omit, //required only in TS129 229 + user_Authorization_Type := omit, //only TS129 229 + session_Priority := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) MAR_MSG m_MAR_dummy := { + header := m_diameterHeaderReq_dummy(MAR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + mAR_Body := m_MAR_Body_dummy + } + + template (value) MAR_Body_AVP m_MAR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_AOR := m_sIP_AOR_dummy, + sIP_Method := m_sIP_Method_dummy, + destination_Host := omit, + user_Name := omit, + supported_Features := omit, //only TS129 229 + public_Identity := omit, //required only in TS129 229 + sIP_Server_URI := omit, + sIP_Number_Auth_Items := omit, + sIP_Auth_Data_Item := omit, + server_Name := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PNR_MSG m_PNR_dummy := { + header := m_diameterHeaderReq_dummy(PNR_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pNR_Body := m_PNR_Body_dummy + } + + template (value) PNR_Body_AVP m_PNR_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + user_Data := m_user_Data_dummy, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PPR_MSG m_PPR_dummy := { + header := m_diameterHeaderReq_dummy(PPR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + pPR_Body := m_PPR_Body_dummy + } + + template (value) PPR_Body_AVP m_PPR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + user_Name := m_user_Name_dummy, + sIP_User_Data := omit, + sIP_Accounting_Information := m_sIP_Accounting_Information_dummy, + destination_Host := m_destinationHost_dummy, + authorization_Lifetime := omit, + auth_Grace_Period := omit, + supported_Features := omit, //only TS129 229 + user_Data := omit, //only TS129 229 + charging_Information := omit, //only TS129 229 + sIP_Auth_Data_Item := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PUR_MSG m_PUR_dummy := { + header := m_diameterHeaderReq_dummy(PUR_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pUR_Body := m_PUR_Body_dummy + } + + template (value) PUR_Body_AVP m_PUR_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + data_Reference := {m_data_Reference_dummy}, + user_Data := m_user_Data_dummy, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) RAR_MSG m_RAR_dummy := { + header := m_diameterHeaderReq_dummy(RAR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + rAR_Body := m_RAR_Body_dummy + } + + template (value) RAR_Body_AVP m_RAR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + destination_Host := m_destinationHost_dummy, + auth_Application_Id := m_authApplicationId_dummy, + specific_Action := omit, + re_Auth_Request_Type := m_re_Auth_Request_dummy, + user_Name := omit, + acc_nc_ident := omit, + acc_nc_addr := omit, + flows := omit, + subscription_Id := omit, + abort_Cause := omit, + ip_Can := omit, + rat_Type := omit, + sponsored_Connectivity_Data := omit, + origin_State_Id := omit, + class := omit, + session_Release_Cause := omit, + event_Trigger := omit, + event_Report_Indication := omit, + charging_Rule_Remove := omit, + charging_Rule_Install := omit, + default_EPS_Bearer_QoS := omit, + qoS_Information := omit, + revalidation_Time := omit, + usage_Monitoring_Information := omit, + qoS_Rule_Install := omit, + qoS_Rule_Remove := omit, + subsession_Decision_Info := omit, + aN_GW_Address := omit, + multiple_BBERF_Action := omit, + proxy_Info := omit, + route_Record := omit, + g_s_u_Pool_Identifier := omit, + service_Identifier := omit, + rating_Group := omit, + aVP_Type := omit + } + + template (value) RTR_MSG m_RTR_dummy := { + header := m_diameterHeaderReq_dummy(RTR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + rTR_Body := m_RTR_Body_dummy + } + + template (value) RTR_Body_AVP m_RTR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := m_destinationHost_dummy, + sIP_Deregistration_Reason := m_sIP_Deregistration_Reason_dummy, + destination_Realm := m_destinationRealm_dummy, + user_Name := omit, + sIP_AOR := omit, + associated_Identities := omit, //only TS129 229 + supported_Features := omit, //only TS129 229 + public_Identity := omit, //only TS129 229 + deregistration_Reason := omit, //required only in TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SAR_MSG m_SAR_dummy := { + header := m_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sAR_Body := m_SAR_Body_dummy + } + + template (value) SAR_Body_AVP m_SAR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_Server_Assignment_Type := m_sIP_Server_Assignment_Type_dummy, + sIP_User_Data_Already_Available := m_sIP_User_Data_Already_Available_dummy, + destination_Host := omit, + user_Name := omit, + sIP_Server_URI := omit, + sIP_Supported_User_Data_Type := omit, + sIP_AOR := omit, + supported_Features := omit, //only in TS129 229 + public_Identity := omit, //only in TS129 229 + wildcarded_Public_Identity := omit, //only in TS129 229 + server_Name := omit, //required only in TS129 229 + server_Assignment_Type := omit, //required only in TS129 229 + user_Data_Already_Available := omit, //required only in TS129 229 + sCSCF_Restoration_Info := omit, //only in TS129 229 + multiple_Registration_Indication := omit,//only in TS129 229 + session_Priority := omit, //only in TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SNR_MSG m_SNR_dummy := { + header := m_diameterHeaderReq_dummy(SNR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sNR_Body := m_SNR_Body_dummy + } + + template (value) SNR_Body_AVP m_SNR_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy,//required only in TS129 229 + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + service_Indication := omit, + send_Data_Indication := omit, + server_Name := omit, + subs_Req_Type := m_subs_Req_Type_dummy, + data_Reference := {m_data_Reference_dummy}, + identity_Set := omit, + expiry_Time := omit, + dSAI_Tag := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit, + user_Name := omit + } + + template (value) STR_MSG m_STR_dummy := + { + header := m_diameterHeaderReq_dummy(STR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + sTR_Body := m_STR_Body_dummy + } + + template (value) STR_Body_AVP m_STR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + auth_Application_Id := m_authApplicationId_dummy, + termination_Cause := m_terminationCause_dummy, + user_Name := omit, + destination_Host := omit, + class := omit, + origin_State_Id := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) UAR_MSG m_UAR_dummy := + { + header := m_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + uAR_Body := m_UAR_Body_dummy + } + + template (value) UAR_Body_AVP m_UAR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_AOR := m_sIP_AOR_dummy, + destination_Host := omit, + user_Name := omit, + sIP_Visited_Network_Id := m_sIP_Visited_Network_Id_dummy, + sIP_User_Authorization_Type := m_sIP_User_Authorization_Type, + supported_Features := omit, + public_Identity := omit, + visited_Network_Identifier := omit, + user_Authorization_Type := omit, + uAR_Flags := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) UDR_MSG m_UDR_dummy := { + header := m_diameterHeaderReq_dummy(UDR_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + uDR_Body := m_UDR_Body_dummy + } + + template (value) UDR_Body_AVP m_UDR_Body_dummy := + { + vendor_Specific_Application_Id := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + server_Name := omit, + service_Indication := omit, + data_Reference := {m_data_Reference_dummy}, + identity_Set := omit, + requested_Domain := omit, + current_Location := omit, + dSAI_Tag := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + }//end group dummy_request_templates_send + group dummy_request_templates_receive { + + template AAR_MSG mw_AAR_dummy := + { + header := mw_diameterHeaderReq_dummy(AAR_E, ?), + session_Id := ?, + aAR_Body := mw_AAR_Body_dummy + } + + template AAR_Body_AVP mw_AAR_Body_dummy := + { + //dRMP := *, + auth_Application_Id := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + destination_Host := *, + iP_Domain := *, + af_Application_Id := *, + media_Component_Description := *, + service_Info_Status := *, + af_Charging_Identifier := *, + sip_Forking_Indication := *, + specific_Action := *, + subscription_Id := *, + //oC_Supported_Features := *, + supported_Features := *, + reservation_Priority := *, + framed_IP_Address := *, + framed_IPv6_Address := *, + called_Station_Id := *, + service_URN := *, + sponsored_Connectivity_Data := *, + mps_Identifier := *, + gcs_Identifier := *, + mcptt_Identifier := *, + mCVideo_Identifier := *, + iMS_Content_Identifier := *, + iMS_Content_Type := *, + rx_Request_Type := *, + required_Access_Info := *, + aF_Requested_Data := *, + //reference_Id := omit, + pre_emption_Control_Info := *, + user_Name := *, + origin_State_Id := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template ACR_MSG mw_ACR_dummy := { + header := mw_diameterHeaderReq_dummy(ACR_E, ?), + session_Id := ?, + aCR_Body := mw_ACR_Body_dummy + } + + template ACR_Body_AVP mw_ACR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + accounting_Record_Type := ?, + accounting_Record_Number := ?, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + user_Name := *, + supported_Features := *, + accounting_Sub_Session_Id := *, + acct_Session_Id := *, + acct_Multi_Session_Id := *, + acct_Interim_Interval := *, + accounting_Realtime_Required := *, + origin_State_Id := *, + event_Timestamp := *, + proxy_Info := *, + route_Record := *, + service_Context_Id := *, + service_Information := *, + aVP_Type := * + } + + template ASR_MSG mw_ASR_dummy := { + header := mw_diameterHeaderReq_dummy(ASR_E, ?), + session_Id := ?, + aSR_Body := mw_ASR_Body_dummy + } + + template ASR_Body_AVP mw_ASR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + destination_Host := ?, + auth_Application_Id := ?, + abort_cause := *, + user_Name := *, + origin_State_Id := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template CCR_MSG mw_CCR_dummy := { + header := mw_diameterHeaderReq_dummy(CCR_E, ?), + session_Id := ?, + cCR_Body := mw_CCR_Body_dummy + } + + template CCR_Body_AVP mw_CCR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + auth_Application_Id := ?, + service_Context_Id := *, + cC_Request_Type := ?, + cC_Request_Number := ?, + destination_Host := *, + user_Name := *, + cC_Sub_Session_Id := *, + acct_Multi_Session_Id := *, + origin_State_Id := *, + event_Timestamp := *, + subscription_Id := *, + service_Identifier := *, + termination_Cause := *, + requested_Service_Unit := *, + requested_Action := *, + used_Service_Unit := *, + aoc_Request_Type_AVP := *, + multiple_Services_Indicator := *, + multiple_Services_Credit_Control := *, + service_Parameter_Info := *, + cC_Correlation_Id := *, + supported_Features := *, + network_Request_Support := *, + packet_Filter_Information := *, + packet_Filter_Operation := *, + bearer_Identifier := *, + bearer_Operation := *, + framed_IP_Address := *, + framed_IPv6_Prefix := *, + iP_CAN_Type := *, + threeGPP_RAT_Type := *, + rat_Type := *, + qoS_Information := *, + qoS_Negotiation := *, + qoS_Upgrade := *, + default_EPS_Bearer_QoS := *, + aN_GW_Address := *, + threeGPP_SGSN_MCC_MNC := *, + threeGPP_SGSN_Address := *, + threeGPP_SGSN_IPv6_Address := *, + rAI := *, + threeGPP_User_Location_Info := *, + threeGPP_MS_TimeZone := *, + called_Station_Id := *, + pDN_Connection_ID := *, + bearer_Usage := *, + online := *, + offline := *, + tFT_Packet_Filter_Information := *, + charging_Rule_Report := *, + event_Trigger := *, + event_Report_Indication := *, + access_Network_Charging_Address := *, + access_Network_Charging_Identifier_Gx := *, + coA_Information := *, + usage_Monitoring_Information := *, + routing_Rule_Install := *, + routing_Rule_Remove := *, + maximum_Bandwidth := *, + logical_Access_ID := *, + physical_Access_ID := *, + session_Linking_Indicator := *, + qoS_Rule_Report := *, + subsesion_Enforcement_Info := *, + threeGPP2_BSID := *, + multiple_BBERF_Action := *, + user_CSG_Information := *, + user_Equipment_Info := *, + proxy_Info := *, + route_Record := *, + service_Information := *, + aVP_Type := * + } + + template CER_MSG mw_CER_dummy := { + header := mw_diameterHeaderReq_dummy(CER_E, ?), + cER_Body := mw_CER_Body_dummy + } + + template CER_Body_AVP mw_CER_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + host_IP_Address := ?, + vendor_Id := ?, + product_Name := ?, + origin_State_Id := *, + supported_Vendor_Id := *, + auth_Application_Id := *, + inband_Security_Id := *, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + firmware_Revision := *, + aVP_Type := * + } + + template DWR_MSG mw_DWR_dummy := { + header := mw_diameterHeaderReq_dummy(DWR_E, ?), + dWR_Body := mw_DWR_Body_dummy + } + + template DWR_Body_AVP mw_DWR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + origin_State_Id := *, + aVP_Type := * + } + + template DPR_MSG mw_DPR_dummy := { + header := mw_diameterHeaderReq_dummy(DPR_E, ?), + dPR_Body := mw_DPR_Body_dummy + } + + template DPR_Body_AVP mw_DPR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + disconnect_Cause := ?, + aVP_Type := * + } + + template LIR_MSG mw_LIR_dummy := { + header := mw_diameterHeaderReq_dummy(LIR_E, ?), + session_Id := ?, + lIR_Body := mw_LIR_Body_dummy + } + + template LIR_Body_AVP mw_LIR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_AOR := ?, + destination_Host := *, + originating_Request := *, //only TS129 229 + supported_Features := *, //only TS129 229 + public_Identity := *, //required only in TS129 229 + user_Authorization_Type := *, //only TS129 229 + session_Priority := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template MAR_MSG mw_MAR_dummy := { + header := mw_diameterHeaderReq_dummy(MAR_E, ?), + session_Id := ?, + mAR_Body := mw_MAR_Body_dummy + } + + template MAR_Body_AVP mw_MAR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_AOR := ?, + sIP_Method := ?, + destination_Host := *, + user_Name := *, + supported_Features := *,//only TS129 229 + public_Identity := *, //required only in TS129 229 + sIP_Server_URI := *, + sIP_Number_Auth_Items := *, + sIP_Auth_Data_Item := *, + server_Name := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PNR_MSG mw_PNR_dummy := { + header := mw_diameterHeaderReq_dummy(PNR_E, ?), + session_Id := ?, + pNR_Body := mw_PNR_Body_dummy + } + + template PNR_Body_AVP mw_PNR_Body_dummy := + { + vendor_Specific_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + user_Data := ?, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PPR_MSG mw_PPR_dummy := { + header := mw_diameterHeaderReq_dummy(PPR_E, ?), + session_Id := ?, + pPR_Body := mw_PPR_Body_dummy + } + + template PPR_Body_AVP mw_PPR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := ?, + destination_Realm := ?, + user_Name := ?, + sIP_User_Data := *, + sIP_Accounting_Information := ?, + authorization_Lifetime := *, + auth_Grace_Period := *, + supported_Features := *, //only TS129 229 + user_Data := *, //only TS129 229 + charging_Information := *, //only TS129 229 + sIP_Auth_Data_Item := *, //only TS129 229 + proxy_Info := ?, + route_Record := ?, + aVP_Type := ? + } + + template PUR_MSG mw_PUR_dummy := { + header := mw_diameterHeaderReq_dummy(PUR_E, ?), + session_Id := ?, + pUR_Body := mw_PUR_Body_dummy + } + + template PUR_Body_AVP mw_PUR_Body_dummy := + { + vendor_Specific_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + data_Reference := ?, + user_Data := ?, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template RAR_MSG mw_RAR_dummy := { + header := mw_diameterHeaderReq_dummy(RAR_E, ?), + session_Id := ?, + rAR_Body := mw_RAR_Body_dummy + } + + template RAR_Body_AVP mw_RAR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + destination_Host := ?, + auth_Application_Id := ?, + specific_Action := *, + re_Auth_Request_Type := ?, + user_Name := *, + acc_nc_ident := *, + acc_nc_addr := *, + flows := *, + subscription_Id := *, + abort_Cause := *, + ip_Can := *, + rat_Type := *, + sponsored_Connectivity_Data := *, + origin_State_Id := *, + class := *, + session_Release_Cause := *, + event_Trigger := *, + event_Report_Indication := *, + charging_Rule_Remove := *, + charging_Rule_Install := *, + default_EPS_Bearer_QoS := *, + qoS_Information := *, + revalidation_Time := *, + usage_Monitoring_Information := *, + qoS_Rule_Install := *, + qoS_Rule_Remove := *, + subsession_Decision_Info := *, + aN_GW_Address := *, + multiple_BBERF_Action := *, + proxy_Info := *, + route_Record := *, + g_s_u_Pool_Identifier := *, + service_Identifier := *, + rating_Group := *, + aVP_Type := * + } + + template RTR_MSG mw_RTR_dummy := { + header := mw_diameterHeaderReq_dummy(RTR_E, ?), + session_Id := ?, + rTR_Body := mw_RTR_Body_dummy + } + + template RTR_Body_AVP mw_RTR_Body_dummy := + { + vendor_Specific_Application_Id := *,//required only in TS129 229 + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := ?, + destination_Realm := ?, + sIP_Deregistration_Reason := ?, + user_Name := *, + sIP_AOR := *, + associated_Identities := *, //only TS129 229 + supported_Features := *, //only TS129 229 + public_Identity := *, //only TS129 229 + deregistration_Reason := *, //required only in TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SAR_MSG mw_SAR_dummy := { + header := mw_diameterHeaderReq_dummy(SAR_E, ?), + session_Id := ?, + sAR_Body := mw_SAR_Body_dummy + } + + template SAR_Body_AVP mw_SAR_Body_dummy := + { + vendor_Specific_Application_Id :=*, //required only in TS129 229 + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_Server_Assignment_Type := ?, + sIP_User_Data_Already_Available := ?, + destination_Host := *, + user_Name := *, + sIP_Server_URI := *, + sIP_Supported_User_Data_Type := *, + sIP_AOR := *, + supported_Features := *, //only in TS129 229 + public_Identity := *, //only in TS129 229 + wildcarded_Public_Identity := *, //only in TS129 229 + server_Name := *, //required only in TS129 229 + server_Assignment_Type := *, //required only in TS129 229 + user_Data_Already_Available := *, //required only in TS129 229 + sCSCF_Restoration_Info := *, //only in TS129 229 + multiple_Registration_Indication := *,//only in TS129 229 + session_Priority := *, //only in TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SNR_MSG mw_SNR_dummy := { + header := mw_diameterHeaderReq_dummy(SNR_E, ?), + session_Id := ?, + sNR_Body := mw_SNR_Body_dummy + } + + template SNR_Body_AVP mw_SNR_Body_dummy := + { + vendor_Specific_Application_Id := ?,//required only in TS129 229 + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + service_Indication := *, + send_Data_Indication := *, + server_Name := *, + subs_Req_Type := ?, + data_Reference := ?, + identity_Set := *, + expiry_Time := *, + dSAI_Tag := *, + proxy_Info := *, + route_Record := *, + aVP_Type := *, + user_Name := * + } + + template STR_MSG mw_STR_dummy := + { + header := mw_diameterHeaderReq_dummy(STR_E, ?), + session_Id := ?, + sTR_Body := mw_STR_Body_dummy + } + + template STR_Body_AVP mw_STR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + auth_Application_Id := ?, + termination_Cause := ?, + user_Name := *, + destination_Host := *, + class := *, + origin_State_Id := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template UAR_MSG mw_UAR_dummy := { + header := mw_diameterHeaderReq_dummy(UAR_E, ?), + session_Id := ?, + uAR_Body := mw_UAR_Body_dummy + } + + template UAR_Body_AVP mw_UAR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_AOR := ?, + destination_Host := *, + user_Name := *, + sIP_Visited_Network_Id := ?, + sIP_User_Authorization_Type := ?, + supported_Features := *, + public_Identity := *, + visited_Network_Identifier := *, + user_Authorization_Type := *, + uAR_Flags := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template UDR_MSG mw_UDR_dummy := { + header := mw_diameterHeaderReq_dummy(UDR_E, ?), + session_Id := ?, + uDR_Body := mw_UDR_Body_dummy + } + + template UDR_Body_AVP mw_UDR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + server_Name := *, + service_Indication := *, + data_Reference := ?, + identity_Set := *, + requested_Domain := *, + current_Location := *, + dSAI_Tag := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + }//end group dummy_request_templates_receive + group dummy_answer_templates_send { + + template (value) AAA_MSG m_AAA_dummy := + { + header := m_diameterHeaderAns_dummy(AAA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aAA_Body := m_AAA_Body_dummy + } + + template (value) AAA_Body_AVP m_AAA_Body_dummy := + { + //dRMP := omit, + auth_Application_Id := m_authApplicationId_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + result_Code := omit, + experimental_Result := omit, + auth_Session_State := omit, + access_network_charging_Identifier := omit, + access_network_charging_address := omit, + acceptable_service_info := omit, + aN_GW_Address := omit, + //aN_Trusted := omit, + service_Authorization_Info := omit, + ip_Can_Type := omit, + //netLoc_Access_Support := omit, + rat_Type := omit, + flows := omit, + //oC_Supported_Features := *, + //oC_OLR := *, + supported_Features := omit, + subscription_Id_AVP := omit, + user_Equipment_Info := omit, + threeGPP_SGSN_MCC_MNC := omit, + class_ := omit, + user_Name := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + retry_Interval := omit, + origin_State_Id := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + proxy_Info := omit, + // load:= omit, + aVP_Type := omit + } + + template (value) ACA_MSG m_ACA_dummy := { + header := m_diameterHeaderAns_dummy(ACA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aCA_Body := m_ACA_Body_dummy + } + + template (omit) ACA_Body_AVP m_ACA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + accounting_Record_Type := m_accounting_Record_Type_dummy, + accounting_Record_Number := m_accounting_Record_Number_dummy, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + user_Name := omit, + accounting_Sub_Session_Id := omit, + acct_Session_Id := omit, + acct_Multi_Session_Id := omit, + error_Reporting_Host := omit, + acct_Interim_Interval := omit, + accounting_Realtime_Required := omit, + origin_State_Id := omit, + event_Timestamp := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) ASA_MSG m_ASA_dummy := { + header := m_diameterHeaderAns_dummy(ASA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aSA_Body := m_ASA_Body_dummy + } + + template (value) ASA_Body_AVP m_ASA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + user_Name := omit, + origin_State_Id := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) CCA_MSG m_CCA_dummy := { + header := m_diameterHeaderAns_dummy(CCA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + cCA_Body := m_CCA_Body_dummy + } + + template (omit) CCA_Body_AVP m_CCA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + auth_Application_Id := m_authApplicationId_dummy, + cC_Request_Type := m_cC_Request_Type_dummy, + cC_Request_Number := m_cC_Request_Number_dummy, + user_Name := omit, + cC_Session_Failover := omit, + cC_Sub_Session_Id := omit, + acct_Multi_Session_Id := omit, + origin_State_Id := omit, + event_Timestamp := omit, + granted_Service_Unit := omit, + multiple_Services_Credit_Control := omit, + cost_Information := omit, + final_Unit_Indication := omit, + check_Balance_Result := omit, + low_Balance_Indication := omit, + remaining_Balance := omit, + credit_Control_Failure_Handling := omit, + direct_Debiting_Failure_Handling := omit, + validity_Time := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + experimental_Result := omit, + supported_Features := omit, + bearer_Control_Mode := omit, + event_Trigger := omit, + charging_Rule_Remove := omit, + charging_Rule_Install := omit, + charging_Information := omit, + online := omit, + offline := omit, + qoS_Information := omit, + revalidation_Time := omit, + default_EPS_Bearer_QoS := omit, + bearer_Usage := omit, + threeGPP_User_Location_Info := omit, + usage_Monitoring_Information := omit, + cSG_Information_Reporting := omit, + user_CSG_Information := omit, + error_Message := omit, + error_Reporting_Host := omit, + qoS_Rule_Install := omit, + qoS_Rule_Remove := omit, + subsession_Decision_Info := omit, + aN_GW_Address := omit, + proxy_Info := omit, + route_Record := omit, + failed := omit, + service_Information := omit, + aVP_Type := omit + } + + template (value) CEA_MSG m_CEA_dummy := { + header := m_diameterHeaderAns_dummy(CEA_E, c_applIdCommonMsg), + cEA_Body := m_CEA_Body_dummy + } + + template (value) CEA_Body_AVP m_CEA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + host_IP_Address := {m_hostIPAddress(c_address)}, // Address:{'0001'O, {ipv4 := {127, 0, 0,1}}})}, + vendor_Id := m_vendorId_dummy, + product_Name := m_productName_dummy, + origin_State_Id := omit, + error_Message := omit, + failed := omit, + supported_Vendor_Id := omit, + auth_Application_Id := omit, + inband_Security_Id := omit, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + firmware_Revision := omit, + aVP_Type := omit + } + + template (value) DWA_MSG m_DWA_dummy := { + header := m_diameterHeaderAns_dummy(DWA_E, c_applIdCommonMsg), + dWA_Body := m_DWA_Body_dummy + } + + template (value) DWA_Body_AVP m_DWA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + error_Message := omit, + failed := omit, + origin_State_Id := omit, + aVP_Type := omit + } + + template (value) DPA_MSG m_DPA_dummy := { + header := m_diameterHeaderAns_dummy(DPA_E, c_applIdCommonMsg), + dPA_Body := m_DPA_Body_dummy + } + + template (value) DPA_Body_AVP m_DPA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + error_Message := omit, + failed := omit, + aVP_Type := omit + } + + template (value) LIA_MSG m_LIA_dummy := { + header := m_diameterHeaderAns_dummy(LIA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + lIA_Body := m_LIA_Body_dummy + } + + template (value) LIA_Body_AVP m_LIA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + sIP_Server_URI := omit, + sIP_Server_Capabilities := omit, + auth_Grace_Period := omit, + authorization_Lifetime := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + supported_Features := omit, //only TS129 229 + server_Name := omit, //only TS129 229 + server_Capabilities := omit, //only TS129 229 + wildcarded_Public_Identity := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) MAA_MSG m_MAA_dummy := { + header := m_diameterHeaderAns_dummy(MAA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + mAA_Body := m_MAA_Body_dummy + } + + template (value) MAA_Body_AVP m_MAA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + user_Name := omit, + supported_Features := omit, //required only in TS129 229 + public_Identity := omit, //only in RFC4740 + sIP_AOR := omit, + sIP_Number_Auth_Items := omit, + sIP_Auth_Data_Item := omit, + auth_Grace_Period := omit, + authorization_Lifetime := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PNA_MSG m_PNA_dummy := { + header := m_diameterHeaderAns_dummy(PNA_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pNA_Body := m_PNA_Body_dummy + } + + template (value) PNA_Body_AVP m_PNA_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + supported_Features := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PPA_MSG m_PPA_dummy := { + header := m_diameterHeaderAns_dummy(PPA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + pPA_Body := m_PPA_Body_dummy + } + + template (value) PPA_Body_AVP m_PPA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + supported_Features := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PUA_MSG m_PUA_dummy := { + header := m_diameterHeaderAns_dummy(PUA_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pUA_Body := m_PUA_Body_dummy + } + + template (value) PUA_Body_AVP m_PUA_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + result_Code := omit, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + repository_Data_Id := omit, + data_Reference := omit, + supported_Features := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) RAA_MSG m_RAA_dummy := { + header := m_diameterHeaderAns_dummy(RAA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + rAA_Body := m_RAA_Body_dummy + } + + template (value) RAA_Body_AVP m_RAA_Body_dummy := + { + result_Code := omit, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + experimental_Result := omit, + user_Name := omit, + media_Component_Description := omit, + service_URN := omit, + origin_State_Id := omit, + class := omit, + iP_CAN_Type := omit, + rat_Type := omit, + aN_GW_Address := omit, + threeGPP_SGSN_MCC_MNC := omit, + threeGPP_SGSN_Address := omit, + threeGPP_SGSN_IPv6_Address := omit, + rAI := omit, + threeGPP_User_Location_Info := omit, + threeGPP_MS_TimeZone := omit, + charging_Rule_Report := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + framed_IP_Address := omit, + framed_IPv6_Prefix := omit, + threeGPP2_BSID := omit, + qoS_Information := omit, + qoS_Rule_Report := omit, + subsesion_Enforcement_Info := omit, + user_CSG_Information := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) RTA_MSG m_RTA_dummy := { + header := m_diameterHeaderAns_dummy(RTA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + rTA_Body := m_RTA_Body_dummy + } + + template (value) RTA_Body_AVP m_RTA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + authorization_Lifetime := omit, + auth_Grace_Period := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + associated_Identities := omit, //only TS129 229 + supported_Features := omit, //only TS129 229 + identity_with_Emergency_Registration := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SAA_MSG m_SAA_dummy := + { + header := m_diameterHeaderAns_dummy(SAA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sAA_Body := m_SAA_Body_dummy + } + + template (value) SAA_Body_AVP m_SAA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + sIP_User_Data := {m_sIP_User_Data_dummy}, + sIP_Accounting_Information := m_sIP_Accounting_Information_dummy, + sIP_Supported_User_Data_Type := omit, + user_Name := omit, + auth_Grace_Period := omit, + authorization_Lifetime := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + supported_Features := omit, //only TS129 229 + user_Data := omit, //only TS129 229 + charging_Information := omit, //only TS129 229 + associated_Identities := omit, //only TS129 229 + loose_Route_Indication := omit, //only TS129 229 + sCSCF_Restoration_Info := omit, //only TS129 229 + associated_Registered_Identities := omit, //only TS129 229 + server_Name := omit, //only TS129 229 + wildcarded_Public_Identity := omit, //only TS129 229 + priviledged_Sender_Indication := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SNA_MSG m_SNA_dummy := + { + header := m_diameterHeaderAns_dummy(SNA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sNA_Body := m_SNA_Body_dummy + } + + template (value) SNA_Body_AVP m_SNA_Body_dummy := + { + + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy,//required only in TS129 229 + auth_Session_State := m_auth_Session_State_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + supported_Features := omit, + user_Data := omit, //only TS129 229 + expiry_Time := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) STA_MSG m_STA_dummy := + { + header := m_diameterHeaderAns_dummy(STA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + sTA_Body := m_STA_Body_dummy + } + + template (value) STA_Body_AVP m_STA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + user_Name := omit, + class := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + sponsored_Connectivity_Data := omit, + origin_State_Id := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) UAA_MSG m_UAA_dummy := { + header := m_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + uAA_Body := m_UAA_Body_dummy + } + + template (value) UAA_Body_AVP m_UAA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + sIP_Server_URI := omit, + sIP_Server_Capabilities := omit, + authorization_Lifetime := omit, + auth_Grace_Period := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + experimental_Result := omit,//only TS129 229 + supported_Features := omit,//only TS129 229 + server_Name := omit,//only TS129 229 + server_Capabilities := omit,//only TS129 229 + failed := omit,//only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) UDA_MSG m_UDA_dummy := { + header := m_diameterHeaderAns_dummy(UDA_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + uDA_Body := m_UDA_Body_dummy + } + + template (value) UDA_Body_AVP m_UDA_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + supported_Features := omit, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + user_Data := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + aVP_Type := omit, + failed := omit, + proxy_Info := omit, + route_Record := omit + } + + }//end group dummy_answer_templates_send + group dummy_answer_templates_receive { + + template AAA_MSG mw_AAA_dummy := + { + header := mw_diameterHeaderAns_dummy(AAA_E, ?), + session_Id := ?, + aAA_Body := mw_AAA_Body_dummy + } + + template AAA_Body_AVP mw_AAA_Body_dummy := + { + //dRMP := *, + auth_Application_Id := ?, + origin_Host := ?, + origin_Realm := ?, + result_Code := *, + experimental_Result := *, + auth_Session_State :=*, + access_network_charging_Identifier := *, + access_network_charging_address := *, + acceptable_service_info := *, + aN_GW_Address := *, + //aN_Trusted := *, + service_Authorization_Info := *, + ip_Can_Type := *, + //netLoc_Access_Support := *, + rat_Type := *, + flows := *, + //oC_Supported_Features := *, + //oC_OLR := *, + supported_Features := *, + subscription_Id_AVP := *, + user_Equipment_Info := *, + threeGPP_SGSN_MCC_MNC := *, + class_ := *, + user_Name := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + retry_Interval := *, + origin_State_Id := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + proxy_Info := *, + // load:= *, + aVP_Type := * + } + + template ACA_MSG mw_ACA_dummy := { + header := mw_diameterHeaderAns_dummy(ACA_E, ?), + session_Id := ?, + aCA_Body := mw_ACA_Body_dummy + } + + template ACA_Body_AVP mw_ACA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + accounting_Record_Type := ?, + accounting_Record_Number := ?, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + user_Name := *, + accounting_Sub_Session_Id := *, + acct_Session_Id := *, + acct_Multi_Session_Id := *, + error_Reporting_Host := *, + acct_Interim_Interval := *, + accounting_Realtime_Required := *, + origin_State_Id := *, + event_Timestamp := *, + proxy_Info := *, + aVP_Type := * + } + + template ASA_MSG mw_ASA_dummy := { + header := mw_diameterHeaderAns_dummy(ASA_E, ?), + session_Id := ?, + aSA_Body := mw_ASA_Body_dummy + } + + template ASA_Body_AVP mw_ASA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + user_Name := *, + origin_State_Id := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + proxy_Info := *, + aVP_Type := * + } + + template CCA_MSG mw_CCA_dummy := { + header := mw_diameterHeaderAns_dummy(CCA_E, ?), + session_Id := ?, + cCA_Body := mw_CCA_Body_dummy + } + + template CCA_Body_AVP mw_CCA_Body_dummy := + { + result_Code := *, + origin_Host := ?, + origin_Realm := ?, + auth_Application_Id := ?, + cC_Request_Type := ?, + cC_Request_Number := ?, + user_Name := *, + cC_Session_Failover := *, + cC_Sub_Session_Id := *, + acct_Multi_Session_Id := *, + origin_State_Id := *, + event_Timestamp := *, + granted_Service_Unit := *, + multiple_Services_Credit_Control := *, + cost_Information := *, + final_Unit_Indication := *, + check_Balance_Result := *, + low_Balance_Indication := *, + remaining_Balance := *, + credit_Control_Failure_Handling := *, + direct_Debiting_Failure_Handling := *, + validity_Time := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + experimental_Result := *, + supported_Features := *, + bearer_Control_Mode := *, + event_Trigger := *, + charging_Rule_Remove := *, + charging_Rule_Install := *, + charging_Information := *, + online := *, + offline := *, + qoS_Information := *, + revalidation_Time := *, + default_EPS_Bearer_QoS := *, + bearer_Usage := *, + threeGPP_User_Location_Info := *, + usage_Monitoring_Information := *, + cSG_Information_Reporting := *, + user_CSG_Information := *, + error_Message := *, + error_Reporting_Host := *, + qoS_Rule_Install := *, + qoS_Rule_Remove := *, + subsession_Decision_Info := *, + aN_GW_Address := *, + proxy_Info := *, + route_Record := *, + failed := *, + service_Information := *, + aVP_Type := * + } + + template CEA_MSG mw_CEA_dummy := { + header := mw_diameterHeaderAns_dummy(CEA_E, ?), + cEA_Body := mw_CEA_Body_dummy + } + + template CEA_Body_AVP mw_CEA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + host_IP_Address := ?, + vendor_Id := ?, + product_Name := ?, + origin_State_Id := *, + error_Message := *, + failed := *, + supported_Vendor_Id := *, + auth_Application_Id := *, + inband_Security_Id := *, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + firmware_Revision := *, + aVP_Type := * + } + + template DWA_MSG mw_DWA_dummy := { + header := mw_diameterHeaderAns_dummy(DWA_E, ?), + dWA_Body := mw_DWA_Body_dummy + } + + template DWA_Body_AVP mw_DWA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + error_Message := *, + failed := *, + origin_State_Id := *, + aVP_Type := * + } + + template DPA_MSG mw_DPA_dummy := { + header := mw_diameterHeaderAns_dummy(DPA_E, ?), + dPA_Body := mw_DPA_Body_dummy + } + + template DPA_Body_AVP mw_DPA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + error_Message := *, + failed := *, + aVP_Type := * + } + + template LIA_MSG mw_LIA_dummy := { + header := mw_diameterHeaderAns_dummy(LIA_E, ?), + session_Id := ?, + lIA_Body := mw_LIA_Body_dummy + } + + template LIA_Body_AVP mw_LIA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + sIP_Server_URI := *, + sIP_Server_Capabilities := *, + auth_Grace_Period := *, + authorization_Lifetime := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + supported_Features := *, //only TS129 229 + server_Name := *, //only TS129 229 + server_Capabilities := *, //only TS129 229 + wildcarded_Public_Identity := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template MAA_MSG mw_MAA_dummy := { + header := mw_diameterHeaderAns_dummy(MAA_E, ?), + session_Id := ?, + mAA_Body := mw_MAA_Body_dummy + } + + template MAA_Body_AVP mw_MAA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + user_Name := *, + supported_Features :=*, //required only in TS129 229 + public_Identity :=*, //only in RFC4740 + sIP_AOR := *, + sIP_Number_Auth_Items := *, + sIP_Auth_Data_Item := *, + auth_Grace_Period := *, + authorization_Lifetime := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PNA_MSG mw_PNA_dummy := { + header := mw_diameterHeaderAns_dummy(PNA_E, ?), + session_Id := ?, + pNA_Body := mw_PNA_Body_dummy + } + + template PNA_Body_AVP mw_PNA_Body_dummy := + { + vendor_Specific_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PPA_MSG mw_PPA_dummy := { + header := mw_diameterHeaderAns_dummy(PPA_E, ?), + session_Id := ?, + pPA_Body := mw_PPA_Body_dummy + } + + template PPA_Body_AVP mw_PPA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result :=*, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, //only TS129 229 + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PUA_MSG mw_PUA_dummy := { + header := mw_diameterHeaderAns_dummy(PUA_E, ?), + session_Id := ?, + pUA_Body := mw_PUA_Body_dummy + } + + template PUA_Body_AVP mw_PUA_Body_dummy := + { + vendor_Specific_Application_Id := ?, + result_Code := *, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + repository_Data_Id := *, + data_Reference := *, + supported_Features := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template RAA_MSG mw_RAA_dummy := { + header := mw_diameterHeaderAns_dummy(RAA_E, ?), + session_Id := ?, + rAA_Body := mw_RAA_Body_dummy + } + + template RAA_Body_AVP mw_RAA_Body_dummy := + { + result_Code := *, + origin_Host := ?, + origin_Realm := ?, + experimental_Result := *, + user_Name := *, + media_Component_Description := *, + service_URN := *, + origin_State_Id := *, + class := *, + iP_CAN_Type := *, + rat_Type := *, + aN_GW_Address := *, + threeGPP_SGSN_MCC_MNC := *, + threeGPP_SGSN_Address := *, + threeGPP_SGSN_IPv6_Address := *, + rAI := *, + threeGPP_User_Location_Info := *, + threeGPP_MS_TimeZone := *, + charging_Rule_Report := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + framed_IP_Address := *, + framed_IPv6_Prefix := *, + threeGPP2_BSID := *, + qoS_Information := *, + qoS_Rule_Report := *, + subsesion_Enforcement_Info := *, + user_CSG_Information := *, + proxy_Info := *, + aVP_Type := * + } + + template RTA_MSG mw_RTA_dummy := { + header := mw_diameterHeaderAns_dummy(RTA_E, ?), + session_Id := ?, + rTA_Body := mw_RTA_Body_dummy + } + + template RTA_Body_AVP mw_RTA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + authorization_Lifetime := *, + auth_Grace_Period := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + associated_Identities := *, //only TS129 229 + supported_Features := *, //only TS129 229 + identity_with_Emergency_Registration := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SAA_MSG mw_SAA_dummy := + { + header := mw_diameterHeaderAns_dummy(SAA_E, ?), + session_Id := ?, + sAA_Body := mw_SAA_Body_dummy + } + + template SAA_Body_AVP mw_SAA_Body_dummy := + { + vendor_Specific_Application_Id := omit,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + sIP_User_Data := ?, + sIP_Accounting_Information := ?, + sIP_Supported_User_Data_Type := *, + user_Name := *, + auth_Grace_Period := *, + authorization_Lifetime := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + supported_Features := *, //only TS129 229 + user_Data := *, //only TS129 229 + charging_Information := *, //only TS129 229 + associated_Identities := *, //only TS129 229 + loose_Route_Indication := *, //only TS129 229 + sCSCF_Restoration_Info := *, //only TS129 229 + associated_Registered_Identities := *, //only TS129 229 + server_Name := *, //only TS129 229 + wildcarded_Public_Identity := *, //only TS129 229 + priviledged_Sender_Indication := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SNA_MSG mw_SNA_dummy := + { + header := mw_diameterHeaderAns_dummy(SNA_E, ?), + session_Id := ?, + sNA_Body := mw_SNA_Body_dummy + } + + template SNA_Body_AVP mw_SNA_Body_dummy := + { + + vendor_Specific_Application_Id := ?,//required only in TS129 229 + auth_Session_State := ?, + result_Code := ?, + experimental_Result := *, + origin_Host := ?, + origin_Realm := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + supported_Features := *, + user_Data := *, //only TS129 229 + expiry_Time := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template STA_MSG mw_STA_dummy := + { + header := mw_diameterHeaderAns_dummy(STA_E, ?), + session_Id := ?, + sTA_Body := mw_STA_Body_dummy + } + + template STA_Body_AVP mw_STA_Body_dummy := + { + result_Code := *, + origin_Host := ?, + origin_Realm := ?, + user_Name := *, + class := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + sponsored_Connectivity_Data := *, + origin_State_Id := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + proxy_Info := *, + aVP_Type := * + } + + template UAA_MSG mw_UAA_dummy := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applIdCommonMsg), + session_Id := ?, + uAA_Body := mw_UAA_Body_dummy + } + + template UAA_Body_AVP mw_UAA_Body_dummy := + { + vendor_Specific_Application_Id := omit,//only TS129 229 + auth_Application_Id := ?, + auth_Session_State := ?, + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + sIP_Server_URI := *, + sIP_Server_Capabilities := *, + authorization_Lifetime := *, + auth_Grace_Period := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + experimental_Result := omit,//only TS129 229 + supported_Features := omit,//only TS129 229 + server_Name := omit,//only TS129 229 + server_Capabilities := omit,//only TS129 229 + failed := omit,//only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template UDA_MSG mw_UDA_dummy := { + header := mw_diameterHeaderAns_dummy(UDA_E, ?), + session_Id := ?, + uDA_Body := mw_UDA_Body_dummy + } + + template UDA_Body_AVP mw_UDA_Body_dummy := + { + vendor_Specific_Application_Id := ?, + result_Code := *, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, + wildcarded_PSI := *, + wildcarded_IMPU := *, + user_Data := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + }//end group dummy_answer_templates_receive + } //end group dummy_templates + group base_templates { + + group basic_request_templates_send { + + template (value) CER_MSG m_CER_basic( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm, + Address p_address) + modifies m_CER_dummy := { + cER_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI") + } + } + + template (value) DWR_MSG m_DWR_basic( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm) + modifies m_DWR_dummy := { + dWR_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm + } + } + + template (value) DPR_MSG m_DPR_basic( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm) + modifies m_DPR_dummy := { + dPR_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + disconnect_Cause := m_disconnectCause(REBOOTING_E) + } + } + + } // end group basic_request_templates_send + + group basic_request_templates_receive { + + template CER_MSG mw_CER_basic( + template Auth_Application_Id_AVP p_authApplicationId) + modifies mw_CER_dummy := { + cER_Body := { + auth_Application_Id := {p_authApplicationId} + } + } + + }//end group basic_request_templates_receive + + group basic_answer_templates_send { + template (value) CEA_MSG m_CEA_basic( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm, + Address p_address) + modifies m_CEA_dummy := { + cEA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI") + } + } + + template (value) DWA_MSG m_DWA_basic( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm) + modifies m_DWA_dummy := { + dWA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm + } + } + + template (value) RAA_MSG m_RAA_basic( + template (value)Session_Id_AVP p_sessionId, + template (value)Origin_Host_AVP p_originHost, + template (value)Origin_Realm_AVP p_originRealm) + modifies m_RAA_dummy := { + session_Id := p_sessionId, + rAA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm + } + } + + }//end group basic_answer_templates_send + + group basic_answer_templates_receive { + }//end group basic_answer_templates_receive + + } //end group base_templates + group modified_templates { + + group modified_request_templates_send { + template (value) CER_MSG m_CER_AppId( + in template (value) Origin_Host_AVP p_originHost, + in template (value) Origin_Realm_AVP p_originRealm, + in Address p_address, + in UInt32 p_authApplicationId + ) modifies m_CER_basic := { + cER_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI"), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(p_authApplicationId)}, + auth_Application_Id := {m_authApplicationId(p_authApplicationId)} + } + } + + template (value) CER_MSG m_CER_AppId_acct_Application_Id( + in template (value) Origin_Host_AVP p_originHost, + in template (value) Origin_Realm_AVP p_originRealm, + in Address p_address, + in UInt32 p_acctApplicationId + ) modifies m_CER_basic := { + cER_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI"), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Acct_Id(p_acctApplicationId)}, + acct_Application_Id := {m_acctApplicationId(p_acctApplicationId)} + } + } + + } //end group modified_request_templates_send + + group modified_request_templates_receive { + + template User_Data_AVP mw_user_Data_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_user_Data_AVP_Code), + aVP_Data := ? + } + + template SIP_Auth_Data_Item_RFC_AVP mw_sIPAuthDataItem_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC), + sIP_Authentication_Scheme := mw_sIPAuthenticationScheme_digest_RFC, + sIP_Item_Number := omit, + sIP_Authenticate := omit, + sIP_Authorization := omit, + sIP_Authentication_Info := omit, + aVP_Type := omit + } + + template (present) SIP_Auth_Data_Item_RFC_AVP mw_sIPAuthDataItem_RFC( + template (present) SIP_Authentication_Scheme_AVP p_sIP_Authentication_Scheme, + template (present) SIP_Item_Number_AVP p_sIP_Item_Number := ?, + template (present) SIP_Authenticate_AVP p_sIP_Authenticate := ?, + template SIP_Authorization_AVP p_sIP_Authorization := omit + ) modifies mw_sIPAuthDataItem_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC), + sIP_Authentication_Scheme := p_sIP_Authentication_Scheme, + sIP_Item_Number := p_sIP_Item_Number, + sIP_Authenticate := p_sIP_Authenticate, + sIP_Authorization := p_sIP_Authorization + } + + template SIP_Authentication_Scheme_AVP mw_sIPAuthenticationScheme_digest_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC), + aVP_Data := ? + } + } + + template SIP_Authentication_Scheme_AVP mw_sIPAuthenticationScheme_digest_aka_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC), + aVP_Data := DIGEST_AKAv1_MD5_E + } + } + + template SIP_Number_Auth_Items_AVP mw_sIPNumberAuthItems_RFC (template (present) UInt32 p_avpData := ?) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC), + aVP_Data := p_avpData + } + + template SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_dummy := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authenticate_AVP_Code_RFC), + digest_Realm := ?, + digest_Nonce := ?, + digest_Domain := *, + digest_Opaque := *, + digest_Stale := *, + digest_Algorithm := *, + digest_QoP := *, + digest_HA1 := *, + digest_Auth_Param := *, + aVP_Type := * + } + + template SIP_Authorization_RFC_AVP mw_sIPAuthorization_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authorization_AVP_Code_RFC), + digest_Username := ?, + digest_Realm := ?, + digest_Nonce := ?, + digest_URI := ?, + digest_Response := ?, + digest_Algorithm := *, + digest_CNonce := *, + digest_Opaque := *, + digest_QoP := *, + digest_Nonce_Count := *, + digest_Method := *, + digest_Entity_Body_Hash := *, + digest_Auth_Param := *, + aVP_Type := * + } + + template SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_digest ( + template (present) Digest_Realm_AVP p_digest_Realm := ?, + template (present) Digest_QoP_AVP p_digest_QoP := ?, + template (present) Digest_HA1_AVP p_digest_HA1 := ? + ) modifies mw_sIPAuthenticate_dummy := { + digest_Realm := p_digest_Realm, + digest_QoP := p_digest_QoP, + digest_HA1 := p_digest_HA1 + } + + template (present) SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_digest_aka ( + template (present) Digest_Realm_AVP p_digest_Realm := ?, + template (present) Digest_QoP_AVP p_digest_QoP := ?, + template (present) Digest_HA1_AVP p_digest_HA1 := ? + ) modifies mw_sIPAuthenticate_digest := { + digest_Opaque := ? + } + + template SIP_User_Data_AVP mw_sIP_User_Data_dummy := + { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_AVP_Code), + sIP_User_Data_Type := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_Type_AVP_Code), + aVP_Data := ? + }, + sIP_User_Data_Contents := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_Contents_AVP_Code), + aVP_Data := ? + }, + aVP_Type := * + } + + template Framed_IP_Address_AVP mw_framed_IP_Address_dummy := { + // Ref: RFC4005 6.11.1 Framed_IP_Address AVP + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_framed_IP_Address_AVP_Code), + aVP_Data := ? + } + + } //end group modified_request_templates_receive + + group modified_answer_templates_send { + template (value) CEA_MSG m_CEA_AppId( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm, + Address p_address, + UInt32 p_authApplicationId) + modifies m_CEA_basic := { + cEA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI "), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(p_authApplicationId)}, + auth_Application_Id := {m_authApplicationId(p_authApplicationId)} + } + } + + template (value) CEA_MSG m_CEA_AppId_all( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm, + Address p_address) + modifies m_CEA_basic := { + cEA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI "), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(c_applIdRx), + m_vendor_Specific_Appl_Id(c_applIdGx), + m_vendor_Specific_Appl_Id(c_applId3GPPCxDx), + m_vendor_Specific_Appl_Id(c_applIdRf), + m_vendor_Specific_Appl_Id(c_applIdRo) + //add new if needed + }, + auth_Application_Id := {m_authApplicationId(c_applIdRx), + m_authApplicationId(c_applIdGx), + m_authApplicationId(c_applId3GPPCxDx), + m_authApplicationId(c_applIdRf), + m_authApplicationId(c_applIdRo) + //add new if needed + } + } + } + + } //end group modified_answer_templates_send + + group modified_answer_templates_receive { + } //end group modified_answer_templates_receive + + } //end group modified_templates + } //end group MessageTemplates + + /** Type convertion functions to reduce warnings due to type mismaches */ + group FunctionsForTemplates { + + /** @desc Calculates the IP address length in bytes + */ + function f_IPAdressLengthUInt24 () + return UInt24 + {if (PX_IPv6) + {return(16+2) } //+2 address family + else {return(4+2) } + } + + /** @desc Calculates the Diameter-Identity length in bytes + */ + function f_getDiameterIdentityAvpLength(in Diameter_Identity p_avpData) return AVP_Length { + return lengthof(p_avpData); + } // End of function f_getDiameterIdentityAvpLength + + /** @desc Calculates the UTF8String AVP data length + */ + function f_getUTF8StringLength(in UTF8String p_avpData) return AVP_Length { + return lengthof(p_avpData); + } // End of function f_getUTF8StringLength + + /** @desc Calculates the charstring AVP data length + */ + function f_getCharStringLength(in charstring p_avpData) return AVP_Length { + return lengthof(p_avpData); + } // End of function f_getCharStringLength + + /** @desc Calculates the octetstring AVP data length + */ + function f_getOctetStringLength(in octetstring p_octetstring) return AVP_Length { + return lengthof(p_octetstring); + } // End of function f_getOctetStringLength + + /** @desc Returns the enumerated AVP data length + */ + function f_getEnumLength() return AVP_Length { + return 4; + } // End of function f_getEnumLength + + /** @desc Calculates the encoded playload length + */ + function f_getEncvalueLength(in bitstring p_bitstring) return AVP_Length { + return lengthof(p_bitstring) / 8; + } // End of function f_getEncvalueLength + + + /** @desc Calculates leghth of AVP with padded bytes (padded bytes are added in TA) + */ + function f_addPaddedBytes2Length(integer p_currLength) return integer { + var integer v_currLength; + + select(p_currLength mod 4){ + case (0) {v_currLength := p_currLength} + case (1) {v_currLength := p_currLength+3} + case (2) {v_currLength := p_currLength+2} + case (3) {v_currLength := p_currLength+1} + } + return v_currLength; + + } // End of f_addPaddedBytes2Length + + + /** @desc Converts DiameterURI to UTF8String + */ + function f_DiameterURI_2_UTF8String(in template DiameterURI p_diameterURI) return UTF8String { + var UTF8String v_utf8String; + var template charstring v_scheme, v_diameterId_FQDN, v_port, v_transport, v_protocol; + var integer v_portField; + var template charstring v_tailString := ""; + + + v_scheme := p_diameterURI.scheme; + v_diameterId_FQDN := p_diameterURI.diameterId_FQDN; + if (ispresent(p_diameterURI.portField)) + { + v_portField := valueof (p_diameterURI.portField); + v_port := int2char( v_portField ); + v_tailString := ":" & v_port; + } + if (ispresent(p_diameterURI.transport)) + { + v_transport := p_diameterURI.transport; + v_tailString := ";transport=" & v_transport; + } + + if (ispresent(p_diameterURI.protocol)) + { + v_protocol := p_diameterURI.protocol; + v_tailString := ";protocol=" & v_protocol; + } + v_utf8String := valueof(v_scheme) & "://" & valueof(v_diameterId_FQDN) & valueof(v_tailString); + + return v_utf8String; + + } // End of f_addPaddedBytes2Length + + /* Function f_char_to_BCD + * @desc: Returns BCD code in a hexstring converted from + * address digits (p_char) in charstring format + * Filler character '0'H is added where necessary + * End-of-Pulsing charater is added, if p_eop is TRUE + * Works for address lengths starting from 0 (i.e. empty string) + */ + function f_char_to_BCD(in charstring p_char, in boolean p_eop := false) return octetstring { + var integer v_string_length := lengthof(p_char); + var charstring v_address_char := p_char; + var octetstring v_address_oct; + var hexstring v_address_hex_ASCII; + + var integer i; + var hexstring v_address_hex_NUM := ''H; + + if (p_eop) // End of Pulsing required + { + + if (v_string_length mod 2 == 1) // odd number of digits + { + v_address_char := v_address_char & "O"; // instead of "?" + // add End of Pulsing, ASCII code of "O" = '4F'H + v_string_length := v_string_length + 1; + } + else // even number of digits + { + v_address_char := v_address_char & "O0"; // instead of "0?" + // add filler and End of Pulsing, ASCII code of "O" = '4F'H + v_string_length := v_string_length + 2; + } + } + else // End of Pulsing NOT required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_address_char := v_address_char & "0"; + // add filler + v_string_length := v_string_length + 1; + } + } + + v_address_oct := (char2oct(v_address_char)); + v_address_hex_ASCII := oct2hex(v_address_oct); + /* Examples + "1234" -> '31323334'H + "12345O" -> '31323334353F' */ + + // fill hexstring with adequate number of hex digits + for (i := 0; i < v_string_length; i := i + 1) + { + v_address_hex_NUM := v_address_hex_NUM & '0'H; + } + // fill hexstring with address in BCD format + for (i := 0; i < v_string_length; i := i + 2) + { + v_address_hex_NUM[i] := v_address_hex_ASCII[2*i + 3]; + v_address_hex_NUM[i+1] := v_address_hex_ASCII[2*i + 1]; + } + + v_address_oct := hex2oct(v_address_hex_NUM); + return v_address_oct; + } // End function f_char_to_BCD + } // End group FunctionsForTemplates + +}//end module LibDiameter_Templates \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..b5d8d5585b8f3e02646babc497022c212cbc3f49 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn @@ -0,0 +1,2912 @@ +/** + * @author STF 434 and Iskratel Research Development V&V + * @version $Id$ + * @desc This module defines message, header, structured and simple Diameter + * types as well constants used by LibDiameter constructs.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new message and header types is ok; + * Existing message or header types shall not be changed or removed + */ +module LibDiameter_TypesAndValues { + + //LibCommmon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + //LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibDiameter_Types_S6a_AVPs all; + import from LibDiameter_Types_S9_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_Types_RfRo_AVPs all; + +group BasicTypesAndConstants{ + + group GlobalConstants{ + + // Default DIAMETER protocol : TCP + const charstring c_defaultTransportProtocol := "TCP"; + + const Address c_address := {'0001'O, {ipv4 := {127, 0, 0,1}}}; + + } + + group DiameterConstants{ + + const charstring c_sync1 := "sync1"; + const charstring c_sync2 := "sync2"; + const charstring c_sync3 := "sync3"; + + const UInt8 c_versionId := 1; + + const Oct2 c_ipv4AddressFamily := '0001'O; + const Oct2 c_ipv6AddressFamily := '0002'O; + + group ApplicationIdConstants { + const UInt32 c_applIdCommonMsg := 0; //For DWR, DWA + const UInt32 c_applId3GPPCxDx := 16777216; //For 3GPPCxDx messages 16777216 (Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe)) + const UInt32 c_applId3GPPShDh := 16777217; //For 3GPPShDh messages + const UInt32 c_applIdRx := 16777236; //For Rx messages + const UInt32 c_applIdGx := 16777238; //For Gx messages + const UInt32 c_applIdGxx := 16777266; //For Gxx messages + const UInt32 c_applIdS6a:= 16777251; //For S6a messages- See ETSI TS 129 272 V10.8.0 (2013-07) Clause 7.1.8 Diameter Application Identifier + const UInt32 c_applIdS13:= 16777252; //For S6a messages- See ETSI TS 129 272 V10.8.0 (2013-07) Clause 7.1.8 Diameter Application Identifier + const UInt32 c_applIdS9:= 16777267; //For S9 messages + const UInt32 c_applIdCx:= 16777216; //For Cx messages + const UInt32 c_applIdDx:= 16777224; //For Dx messages + const UInt32 c_applIdRf:= 3;//16777218; //For Rf messages + const UInt32 c_applIdRo:= 4;//16777218; //For Ro messages + + } // End of group ApplicationIdConstants + group SMINetworkManagementPrivateEnterpriseCodes_VendorIDAVP { + const UInt32 c_vendId3gpp := 10415; //Vendor idFor 3GPP + const UInt32 c_vendIdETSI := 13019; //Vendor idFor ETSI + } // End of group SMINetworkManagementPrivateEnterpriseCodes_VendorIDAVP + group AVPCodeConstants { + group AVPCodeConstantsRFC3855{ + const integer c_accounting_Realtime_Required_AVP_Code := 483; //Ref: RFC3588 9.8.7. Accounting-Realtime-Required AVP + const integer c_accounting_Record_Number_AVP_Code := 485; //Ref: RFC3588 9.8.3. Accounting-Record-Number AVP + const integer c_accounting_Record_Type_AVP_Code := 480; //Ref: RFC3588 9.8.1. Accounting-Record-Type AVP + const integer c_accounting_Sub_Session_Id_AVP_Code := 287; //Ref: RFC3588 9.8.6. Accounting-Sub-Session-Id AVP + const integer c_acct_Application_Id_AVP_Code := 259; //Ref: RFC3588 6.9. Acct-Application-Id AVP + const integer c_acct_Interim_Interval_AVP_Code := 85; //Ref: RFC3588 9.8.2. Acct-Interim-Interval + const integer c_acct_Multi_Session_Id_AVP_Code := 50; //Ref: RFC3588 9.8.5. Acct-Multi-Session-Id AVP + const integer c_acct_Session_Id_AVP_Code := 44; //Ref: RFC3588 9.8.4. Acct-Session-Id AVP + const integer c_auth_Application_Id_AVP_Code := 258; //Ref: RFC3588 6.8. Auth-Application-Id AVP + const integer c_class_AVP_Code := 25; //Ref: RFC3588 8.20. Class AVP + const integer c_destination_Host_AVP_Code := 293; //Ref: RFC3588 6.5. Destination-Host AVP + const integer c_destination_Realm_AVP_Code := 283; //Ref: RFC3588 6.6. Destination-Realm AVP + const integer c_disconnect_Cause_AVP_Code := 273; //Ref: RFC3588 5.4.3. Disconnect-Cause AVP + const integer c_error_Message_AVP_Code := 281; //Ref: RFC3588 7.3. Error-Message AVP + const integer c_error_Reporting_Host_AVP_Code := 294; //Ref: RFC3588 7.4. Error-Reporting-Host AVP + const integer c_event_Timestamp_AVP_Code := 55; //Ref: RFC3588 8.21. Event-Timestamp AVP + const integer c_failed_AVP_Code := 279; //Ref: RFC3588 7.5. Failed-AVP AVP + const integer c_firmware_Revision_AVP_Code := 267; //Ref: RFC3588 5.3.4. Firmware-Revision AVP + const integer c_host_IP_Address_AVP_Code := 257; //Ref: RFC3588 5.3.5. Host-IP-Address AVP + const integer c_inband_Security_Id_AVP_Code := 299; //Ref: RFC3588 6.10. Inband-Security-Id AVP + const integer c_origin_Host_AVP_Code := 264; //Ref: RFC3588 6.3. Origin-Host AVP + const integer c_origin_Realm_AVP_Code := 296; //Ref: RFC3588 6.4. Origin-Realm AVP + const integer c_origin_State_Id_AVP_Code := 278; //Ref: RFC3588 8.16. Origin-State-Id AVP + const integer c_product_Name_AVP_Code := 269; //Ref: RFC3588 5.3.7. Product-Name AVP + const integer c_proxy_Host_AVP_Code := 280; //Ref: RFC3588 6.7.3. Proxy-Host AVP + const integer c_proxy_Info_AVP_Code := 284; //Ref: RFC3588 6.7.2. Proxy-Info AVP + const integer c_proxy_State_AVP_Code := 33; //Ref: RFC3588 6.7.4. Proxy-State AVP + const integer c_re_Auth_Request_Type_AVP_Code := 285; //Ref: RFC3588 8.12. Re-Auth-Request-Type AVP + const integer c_redirect_Host_AVP_Code := 292; //Ref: RFC3588 6.12. Redirect-Host AVP +// const integer c_redirect_Host_Cache_Time_AVP_Code := 9999; //NOTE Ref: RFC3588 Redirect_Host_Cache_Time_AVP_Code is NOT defined. + const integer c_redirect_Host_Usage_AVP_Code := 261; //Ref: RFC3588 6.13. Redirect-Host-Usage AVP + const integer c_result_Code_AVP_Code := 268; //Ref: RFC3588 7.1. Result-Code AVP + const integer c_route_Record_AVP_Code := 282; //Ref: RFC3588 6.7.1. Route-Record AVP + const integer c_session_Id_AVP_Code := 263; //Ref: RFC3588 8.8. Session-Id AVP + const integer c_supported_Vendor_Id_AVP_Code := 265; //Ref; RFC3588 5.3.6. Supported-Vendor-Id AVP + const integer c_termination_Cause_AVP_Code := 295; //Ref: RFC3588 8.15. Termination-Cause AVP + const integer c_user_Name_AVP_Code := 1; //Ref: RFC3588 8.14. User-Name AVP + const integer c_vendor_Id_AVP_Code := 266; //Ref: RFC3588 5.3.3. Vendor-Id AVP + const integer c_vendor_Specific_Appl_Id_AVP_Code := 260; //Ref: RFC3588 6.11. Vendor-Specific-Application-Id AVP + } // End of group AVPCodeConstantsRFC3855 + group AVPCodeConstantsRFC4740{ + /* ******** Cx *******/ + const integer c_auth_Grace_Period_AVP_Code := 276; //Ref: RFC3588 8.10. Auth-Grace-Period AVP + const integer c_auth_Session_State_AVP_Code := 277; //Ref: RFC3588 8.11. Auth-Session-State AVP + const integer c_authorization_Lifetime_AVP_Code := 291; //Ref: RFC3588 8.9. Authorization-Lifetime AVP + const integer c_redirect_Max_Cache_Time_AVP_Code := 262; //Ref: RFC3588 6.14. Redirect-Max-Cache-Time AVP + const integer c_sIP_Accounting_Information_AVP_Code := 368; //Ref: RFC4740 9.1. SIP-Accounting-Information AVP + const integer c_sIP_Accounting_Server_URI_AVP_Code := 369; //Ref: RFC4740 9.1.1. SIP-Accounting-Server-URI AVP + const integer c_sIP_AOR_AVP_Code := 122; //Ref: RFC4740 9.8. SIP-AOR AVP + const integer c_sIP_Auth_Data_Item_AVP_Code_RFC := 376; //Ref: RFC4740 9.5. SIP-Auth-Data-Item AVP + const integer c_sIP_Authenticate_AVP_Code_RFC := 379; //Ref: RFC4740 9.5.3. SIP-Authenticate AVP + const integer c_sIP_Authentication_Info_AVP_Code := 381; //Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP + const integer c_sIP_Authentication_Scheme_AVP_Code_RFC := 377; //Ref: RFC4740 9.5.1. SIP-Authentication-Scheme AVP + const integer c_sIP_Authorization_AVP_Code_RFC := 380; //Ref: RFC4740 9.5.4. SIP-Authorization AVP + const integer c_sIP_Credit_Control_Server_URI_AVP_Code := 370; //Ref: RFC4740 9.1.2. SIP-Credit-Control-Server-URI AVP + const integer c_sIP_Deregistration_Reason_AVP_Code := 383; //Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP + const integer c_sIP_Item_Number_AVP_Code_RFC := 378; //Ref: RFC4740 9.5.2 SIP-Item-Number AVP + const integer c_sIP_MandatoryCapability_AVP_Code := 373; //Ref: RFC4740 9.3.1. SIP-Mandatory-Capability AVP + const integer c_sIP_Method_AVP_Code := 393; //Ref: RFC4740 9.14. SIP-Method AVP + const integer c_sIP_Number_Auth_Items_AVP_Code_RFC := 382; //Ref: RFC4740 9.6. SIP-Number-Auth-Items AVP + const integer c_sIP_OptionalCapability_AVP_Code := 374; //Ref: RFC4740 9.3.2. SIP-Optional-Capability AVP + const integer c_sIP_Reason_Code_AVP_Code := 384; //Ref: RFC4740 9.7.1. SIP-Reason-Code AVP + const integer c_sIP_Reason_Info_AVP_Code := 385; //Ref: RFC4740 9.7.2. SIP-Reason-Info AVP + const integer c_sIP_Server_Assignment_Type_AVP_Code := 375; //Ref: RFC4740 9.4. SIP-Server-Assignment-Type AVP + const integer c_sIP_Server_Capabilities_AVP_Code := 372; //Ref: RFC4740 9.3. SIP-Server-Capabilities AVP + const integer c_sIP_Server_URI_AVP_Code := 371; //Ref: RFC4740 9.2 SIP-Server-URI AVP + const integer c_sIP_Supported_User_Data_Type_AVP_Code := 388; //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP + const integer c_sIP_User_Authorization_Type_AVP_Code := 387; //Ref: RFC4740 9.10. SIP-User-Authorization-Type AVP + const integer c_sIP_User_Data_Already_Available_AVP_Code := 392; //Ref: RFC4740 9.13. SIP-User-Data-Already-Available AVP + const integer c_sIP_User_Data_AVP_Code := 389; //Ref: RFC4740 9.12. SIP-User-Data AVP + const integer c_sIP_User_Data_Contents_AVP_Code := 391; //Ref: RFC4740 9.12.2. SIP-User-Data-Contents AVP + const integer c_sIP_User_Data_Type_AVP_Code := 390; //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP + const integer c_sIP_Visited_Network_Id_AVP_Code := 386; //Ref: RFC4740 9.9. SIP-Visited-Network-Id AVP + } // End of group AVPCodeConstantsRFC4740 + group AVPCodeConstantsRFC5580 { + const integer c_operator_Name_AVP_Code := 126; //Ref: RFC5580 Operator_Name_AVP + const integer c_location_Information_AVP_Code := 127; //Ref: RFC5580 Location_Information_AVP + const integer c_location_Data_AVP_Code := 128; //Ref: RFC5580 Location_Data_AVP + } // End of group AVPCodeConstantsRFC5580 + group AVPCodeConstantsCxDx_TS129_229{ + const integer c_visited_Network_Identifier_AVP_Code := 600; //Ref: TS 129.229 6.3.1 Visited_Network_Identifier + const integer c_public_Identity_AVP_Code := 601; //Ref: TS 129.229 6.3.2 Public_Identity + const integer c_server_Name_AVP_Code := 602; //Ref: TS 129.229 6.3.3 Server_Name + const integer c_server_Capabilities_AVP_Code := 603; //Ref: TS 129.229 6.3.4 Server_Capabilities + const integer c_mandatory_Capability_AVP_Code := 604; //Ref: TS 129.229 6.3.5 Mandatory_Capability + const integer c_optional_Capability_AVP_Code := 605; //Ref: TS 129.229 6.3.6 Optional_Capability + const integer c_user_Data_AVP_Code := 606; //Ref: TS 129.229 6.3.7 User_Data + const integer c_sIP_Number_Auth_Items_AVP_Code := 607; //Ref: TS 129.229 6.3.8 SIP-Number-Auth-Items AVP + const integer c_sIP_Authentication_Scheme_AVP_Code := 608; //Ref: TS 129.229 6.3.9. SIP-Authentication-Scheme AVP + const integer c_sIP_Authenticate_AVP_Code := 609; //Ref: TS 129.229 6.3.10 SIP-Authenticate AVP + const integer c_sIP_Authorization_AVP_Code := 610; //Ref: TS 129.229 6.3.11 SIP-Authorization AVP + const integer c_sIP_Authentication_Context_AVP_Code := 611; //Ref: TS 129.229 6.3.12 SIP_Authentication_Context + const integer c_sIP_Auth_Data_Item_AVP_Code := 612; //Ref: TS 129.229 6.3.13 SIP-Auth-Data-Item AVP + const integer c_sIP_Item_Number_AVP_Code := 613; //Ref: TS 129.229 6.3.14 SIP-Item-Number AVP + const integer c_server_Assignment_Type_AVP_Code := 614; //Ref: TS 129.229 6.3.15 Server_Assignment_Type + const integer c_deregistration_Reason_AVP_Code := 615; //Ref: TS 129.229 6.3.16 Deregistration_Reason + const integer c_reason_Code_AVP_Code := 616; //Ref: TS 129.229 6.3.17 Reason_Code + const integer c_reason_Info_AVP_Code := 617; //Ref: TS 129.229 6.3.18 Reason_Info + const integer c_user_Authorization_Type_AVP_Code := 623; //Ref: TS 129.229 6.3.24 User_Authorization_Type + const integer c_user_Data_Already_Available_AVP_Code := 624; //Ref: TS 129.229 6.3.26 User_Data_Already_Available + const integer c_confidentiality_Key_AVP_Code := 625; //Ref: TS 129.229 6.3.27 Confidentiality_Key + const integer c_integrity_Key_AVP_Code := 626; //Ref: TS 129.229 6.3.28 Integrity_Key + const integer c_supported_Features_AVP_Code := 628; //Ref: TS 129.229 6.3.29 Supported_Features + const integer c_feature_List_ID_AVP_Code := 629; //Ref: TS 129.229 6.3.30 Feature_List_ID + const integer c_feature_List_AVP_Code := 630; //Ref: TS 129.229 6.3.31 Feature_List + const integer c_supported_Applications_AVP_Code := 631; //Ref: TS 129.229 6.3.32 Supported_Applications + const integer c_associated_Identities_AVP_Code := 632; //Ref: TS 129.229 6.3.33 Associated_Identities + const integer c_originating_Request_AVP_Code := 633; //Ref: TS 129.229 6.3.34 Originating_Request + const integer c_wildcarded_Public_Identity_AVP_Code := 634; //Ref: TS 129.229 6.3.35 Wildcarded_Public_Identity + const integer c_sIP_Digest_Authenticate_AVP_Code := 635; //Ref: TS 129.229 6.3.36 SIP_Digest_Authenticate + const integer c_uAR_Flags_AVP_Code := 637; //Ref: TS 129.229 6.3.44 UAR_Flags + const integer c_loose_Route_Indication_AVP_Code := 638; //Ref: TS 129.229 6.3.45 Loose_Route_Indication + const integer c_sCSCF_Restoration_Info_AVP_Code := 639; //Ref: TS 129.229 6.3.46 SCSCF_Restoration_Info + const integer c_path_AVP_Code := 640; //Ref: TS 129.229 6.3.47 Path + const integer c_contact_AVP_Code := 641; //Ref: TS 129.229 6.3.48 Contact + const integer c_subscription_Info_AVP_Code := 642; //Ref: TS 129.229 6.3.49 Subscription_Info + const integer c_call_ID_SIP_Header_AVP_Code := 643; //Ref: TS 129.229 6.3.49.1 Call_ID_SIP_Header + const integer c_from_SIP_Header_AVP_Code := 644; //Ref: TS 129.229 6.3.49.2 From_SIP_Header + const integer c_to_SIP_Header_AVP_Code := 645; //Ref: TS 129.229 6.3.49.3 To_SIP_Header + const integer c_record_Route_AVP_Code := 646; //Ref: TS 129.229 6.3.49.4 Record_Route + const integer c_associated_Registered_Identities_AVP_Code := 647; //Ref: TS 129.229 6.3.50 Associated_Registered_Identities + const integer c_multiple_Registration_Indication_AVP_Code := 648; //Ref: TS 129.229 6.3.51 Multiple_Registration_Indication + const integer c_restoration_Info_AVP_Code := 649; //Ref: TS 129.229 6.3.52 Restoration_Info + const integer c_session_Priority_AVP_Code := 650; //Ref: TS 129.229 6.3.56 Session_Priority + const integer c_identity_with_Emergency_Registration_AVP_Code := 651; //Ref: TS 129.229 6.3.57 Identity_with_Emergency_Registration + const integer c_priviledged_Sender_Indication_AVP_Code := 652; //Ref: TS 129.229 6.3.58 Priviledged_Sender_Indication + } // End of group AVPCodeConstantsCxDx_TS129_229 + group AVPCodeConstantsDigest{ + const integer c_digest_Algorithm_AVP_Code := 111; //Ref: RFC4590 3.9. Digest-Algorithm Attribute + const integer c_digest_Auth_Param_AVP_Code := 117; //Ref: RFC4590 3.15. Digest-Auth-Param Attribute + const integer c_digest_CNonce_AVP_Code := 113; //Ref: RFC4590 3.11. Digest-CNonce Attribute + const integer c_digest_Domain_AVP_Code := 119; //Ref: RFC4590 3.17. Digest-Domain Attribute + const integer c_digest_Entity_Body_Hash_AVP_Code := 112; //Ref: RFC4590 3.10. Digest-Entity-Body-Hash Attribute + const integer c_digest_HA1_AVP_Code := 121; //Ref: RFC4590 3.19. Digest-HA1 Attribute + const integer c_digest_Method_AVP_Code := 108; //Ref: RFC4590 3.6. Digest-Method Attribute + const integer c_digest_Nextnonce_AVP_Code := 107; //Ref: RFC4590 + const integer c_digest_Nonce_AVP_Code := 105; //Ref: RFC4590 3.3. Digest-Nonce Attribute + const integer c_digest_Nonce_Count_AVP_Code := 114; //Ref: RFC4590 3.12. Digest-Nonce-Count Attribute + const integer c_digest_Opaque_AVP_Code := 116; //Ref: RFC4590 3.14. Digest-Opaque Attribute + const integer c_digest_QoP_AVP_Code := 110; //Ref: RFC4590 3.8. Digest-Qop Attribute + const integer c_digest_Realm_AVP_Code := 104; //Ref: RFC4590 3.2. Digest-Realm Attribute + const integer c_digest_Response_Auth_AVP_Code := 106; //Ref: RFC4590 + const integer c_digest_Response_AVP_Code := 103; //Ref: RFC4590 + const integer c_digest_Stale_AVP_Code := 120; //Ref: RFC4590 3.18. Digest-Stale Attribute + const integer c_digest_URI_AVP_Code := 109; //Ref: RFC4590 3.7. Digest-URI Attribute + const integer c_digest_Username_AVP_Code := 115; //Ref: RFC4590 3.13. Digest-Username Attribute + } // End of group AVPCodeConstantsDigest + group AVPCodeConstantsShDh_TS129_329{ + const integer c_current_Location_AVP_Code := 707; //Ref: 3GPP TS 29.329 6.3.8 Current-Location AVP + const integer c_data_Reference_AVP_Code := 703; //Ref: 3GPP TS 29.329 6.3.4 Data-Reference AVP + const integer c_dSAI_Tag_AVP_Code := 711; //Ref: 3GPP TS 29.329 6.3.18 DSAI-Tag AVP + const integer c_experimental_Result_AVP_Code := 297; //Ref: 3GPP TS 29.229 6.2 Result-Code AVP values // FUN 766300-PCL-030 : Experimental-Result AVP shall be used for Sh/Dh errors. + const integer c_experimental_Result_Code_AVP_Code := 298; //Ref: 3GPP TS 29.229 6.2 Result-Code AVP values + const integer c_expiry_Time_AVP_Code := 709; //Ref: 3GPP TS 29.329 6.3.16 Expiry-Time + const integer c_identity_Set_AVP_Code := 708; //Ref: 3GPP TS 29.329 6.3.10 Identity-Set AVP + const integer c_mSISDN_AVP_Code := 701; //Ref: 3GPP TS 29.329 6.3.2 MSISDN AVP + const integer c_repository_Data_Id_AVP_Code := 715 ; //Ref: 3GPP TS 29.329 6.3.24 + const integer c_requested_Domain_AVP_Code := 706; //Ref: 3GPP TS 29.329 6.3.7 Requested-Domain AVP + const integer c_send_Data_Indication_AVP_Code := 710; //Ref: 3GPP TS 29.329 6.3.17 Send-Data-Indication AVP + const integer c_service_Indication_AVP_Code := 704; //Ref: 3GPP TS 29.329 6.3.5 Service-Indication AVP + const integer c_sequence_Number_AVP_Code := 716 ; //Ref: 3GPP TS 29.329 6.3.25 + const integer c_subs_Req_Type_AVP_Code := 705; //Ref: 3GPP TS 29.329 6.3.6 Subs-Req-Type AVP + const integer c_user_Identity_AVP_Code := 700; //Ref: 3GPP TS 29.329 6.3.1 User-Identity AVP + const integer c_wildcarded_IMPU_AVP_Code := 636; //Ref: 3GPP TS 29.329 6.3.20 Wildcarded-IMPU AVP + const integer c_user_Data_Sh_AVP_Code := 702; //Ref: TS 129.329 6.3.3 User_Data + } // End of group AVPCodeConstantsShDh_TS129_329 + group AVPCodeConstantsRFC4005{ + const integer c_called_Station_Id_AVP_Code := 30; //Ref: RFC4005 4.5 Called_Station_Id AVP + const integer c_framed_IP_Address_AVP_Code := 8; //Ref: RFC4005 6.11.1 Framed_IP_Address AVP + const integer c_framed_IPv6_Prefix_AVP_Code := 97; //Ref: RFC4005 6.11.1 Framed_IPv6_Prefix AVP + } // End of group AVPCodeConstantsRFC4005 + group AVPCodeConstantsRFC4006{ + /* ***** Rf and Ro Ref: RFC4006 ***** */ + const integer c_rating_Group_AVP_Code := 433; //Ref: RFC4006 8.29. Rating-Group AVP + const integer c_tariff_Time_Change_AVP_Code := 451; //Ref: RFC4006 8.20. Tariff-Time-Change AVP + const integer c_cC_Correlation_Id_AVP_Code := 411; //Ref: RFC4006 8.1. CC-Correlation-Id AVP + const integer c_cC_Input_Octets_AVP_Code := 412; //Ref: RFC4006 8.24. CC-Input-Octets AVP + const integer c_cC_Money_AVP_Code := 413; //Ref: RFC4006 8.22. CC-Money AVP + const integer c_cC_Output_Octets_AVP_Code := 414; //Ref: RFC4006 8.25. CC-Output-Octets AVP + const integer c_cC_Request_Number_AVP_Code := 415; //Ref: RFC4006 8.2. CC-Request-Number AVP + const integer c_cC_Request_Type_AVP_Code := 416; //Ref: RFC4006 8.3. CC-Request-Type AVP + const integer c_cC_Service_Specific_Units_AVP_Code := 417; //Ref: RFC4006 8.26. CC-Service-Specific-Units AVP + const integer c_cC_Session_Failover_AVP_Code := 418; //Ref: RFC4006 8.4. CC-Session-Failover AVP + const integer c_cC_Sub_Session_Id_AVP_Code := 419; //Ref: RFC4006 8.5. CC-Sub-Session-Id AVP + const integer c_cC_Time_AVP_Code := 420; //Ref: RFC4006 8.21. CC-Time AVP + const integer c_cC_Total_Octets_AVP_Code := 421; //Ref: RFC4006 8.23. CC-Total-Octets AVP + const integer c_cC_Unit_Type_AVP_Code := 454; //Ref: RFC4006 8.32. CC-Unit-Type AVP + const integer c_check_Balance_Result_AVP_Code := 422; //Ref: RFC4006 8.6. Check-Balance-Result AVP 12.8. Check-Balance-Result AVP + const integer c_cost_Information_AVP_Code := 423; //Ref: RFC4006 8.7. Cost-Information AVP + const integer c_cost_Unit_AVP_Code := 424; //Ref: RFC4006 8.12. Cost-Unit AVP + const integer c_credit_Control_Failure_Handling_AVP_Code := 427; //Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP + const integer c_currency_Code_AVP_Code := 425; //Ref: RFC4006 8.11. Currency-Code AVP + const integer c_direct_Debiting_Failure_Handling_AVP_Code := 428; //Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP + const integer c_exponent_AVP_Code := 429; //Ref: RFC4006 8.9. Exponent AVP + const integer c_filter_Id_AVP_Code := 11; //Ref: RFC4005 6.7. Filter-Id AVP + const integer c_final_Unit_Action_AVP_Code := 449; //Ref: RFC4006 8.35. Final-Unit-Action AVP + const integer c_final_Unit_Indication_AVP_Code := 430; //Ref: RFC4006 8.34. Final-Unit-Indication AVP + const integer c_g_S_U_Pool_Identifier_AVP_Code := 453; //Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP + const integer c_g_S_U_Pool_Reference_AVP_Code := 457; //Ref: RFC4006 8.30. G-S-U-Pool-Reference AVP + const integer c_granted_Service_Unit_AVP_Code := 431; //Ref: RFC4006 8.17. Granted-Service-Unit AVP + const integer c_multiple_Services_Credit_Control_AVP_Code := 456; //Ref: RFC4006 8.16. Multiple-Services-Credit-Control AVP + const integer c_multiple_Services_Indicator_AVP_Code := 455; //Ref: RFC4006 8.40. Multiple-Services-Indicator AVP + const integer c_redirect_Address_Type_AVP_Code := 433; //Ref: RFC4006 8.38. Redirect-Address-Type AVP + const integer c_redirect_Server_Address_AVP_Code := 435; //Ref: RFC4006 8.39. Redirect-Server-Address AVP + const integer c_redirect_Server_AVP_Code := 434; //Ref: RFC4006 8.37. Redirect-Server AVP + const integer c_requested_Action_AVP_Code := 436; //Ref: RFC4006 8.41. Requested-Action AVP + const integer c_requested_Service_Unit_AVP_Code := 437; //Ref: RFC4006 8.18. Requested-Service-Unit AVP + const integer c_restriction_Filter_Rule_AVP_Code := 438; //Ref: RFC4006 8.36. Restriction-Filter-Rule AVP + const integer c_service_Context_Id_AVP_Code := 461; //Ref: RFC4006 8.42. Service-Context-Id AVP + const integer c_service_Identifier_AVP_Code := 439; //Ref: RFC4006 8.28. Service-Identifier AVP + const integer c_service_Parameter_Info_AVP_Code := 440; //Ref: RFC4006 8.43. Service-Parameter-Info AVP + const integer c_service_Parameter_Type_AVP_Code := 441; //Ref: RFC4006 8.44. Service-Parameter-Type AVP + const integer c_service_Parameter_Value_AVP_Code := 442; //Ref: RFC4006 8.45. Service-Parameter-Value AVP + const integer c_subscription_Id_AVP_Code := 443; //Ref: RFC4006 8.46. Subscription-Id AVP + const integer c_subscription_Id_Data_AVP_Code := 444; //Ref: RFC4006 + const integer c_subscription_Id_Type_AVP_Code := 450; //Ref: RFC4006 8.47. Subscription-Id-Type AVP + const integer c_tariff_Change_Usage_AVP_Code := 452; //Ref: RFC4006 8.27. Tariff-Change-Usage AVP + const integer c_unit_Value_AVP_Code := 445; //Ref: RFC4006 8.8. Unit-Value AVP + const integer c_used_Service_Unit_AVP_Code := 446; //Ref: RFC4006 8.19. Used-Service-Unit AVP + const integer c_user_Equipment_Info_AVP_Code := 458; //Ref: RFC4006 8.49. User-Equipment-Info AVP + const integer c_user_Equipment_Info_Type_AVP_Code := 459; //Ref: RFC4006 8.50. User-Equipment-Info-Type AVP + const integer c_user_Equipment_Info_Value_AVP_Code := 460; //Ref: RFC4006 8.51. User-Equipment-Info-Value AVP + const integer c_validity_Time_AVP_Code := 448; //Ref: RFC4006 8.33. Validity-Time AVP + const integer c_value_Digits_AVP_Code := 447; //Ref: RFC4006 8.10. Value-Digits AVP + } // End of group AVPCodeConstantsRFC4006 + group AVPCodeConstantsRxTS129_214{ + const integer c_acceptable_Service_Info_AVP_Code := 526; //Ref: ETSI TS 129 214 Acceptable_Service_Info_AVP + const integer c_access_Network_Charging_Address_AVP_Code := 501; //Ref: ETSI TS 129 214 Access_Network_Charging_Address AVP + const integer c_access_Network_Charging_Identifier_AVP_Code := 502; //Ref: ETSI TS 129 214 Access_Network_Charging_Identifier AVP + const integer c_access_Network_Charging_Identifier_Value_AVP_Code := 503;//Ref: ETSI TS 129 214 Access_Network_Charging_Identifier_Value AVP + const integer c_aF_Application_Identifier_AVP_Code := 504; //Ref: ETSI TS 129 214 AF_Application_Identifier AVP + const integer c_aF_Charging_Identifier_AVP_Code := 505; //Ref: ETSI TS 129 214 AF_Charging_Identifier AVP + const integer c_aF_Signalling_Protocol_AVP_Code := 529; //Ref: ETSI TS 129 214 AF_Signalling_Protocol AVP + const integer c_application_Service_Provider_Identity_AVP_Code := 532; //Ref: ETSI TS 129 214 Application_Service_Provider_Identity AVP + const integer c_codec_Data_AVP_Code := 524; //Ref: ETSI TS 129 214 Codec_data AVP + const integer c_flow_Description_AVP_Code := 507; //Ref: ETSI TS 129 214 Flow_Description AVP + const integer c_flow_Number_AVP_Code := 509; //Ref: ETSI TS 129 214 Flow_Number AVP + const integer c_flow_Status_AVP_Code := 511; //Ref: ETSI TS 129 214 Flow_Status AVP + const integer c_flow_Usage_AVP_Code := 512; //Ref: ETSI TS 129 214 Flow_Usage AVP + const integer c_flows_AVP_Code := 510; //Ref: ETSI TS 129 214 Flows_AVP + const integer c_max_Requested_Bandwidth_DL_AVP_Code := 515; //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_DL AVP + const integer c_max_Requested_Bandwidth_UL_AVP_Code := 516; //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_UL AVP + const integer c_media_Component_Description_AVP_Code := 517; //Ref: ETSI TS 129 214 Media_Component_Decription_AVP + const integer c_media_Component_Number_AVP_Code := 518; //Ref: ETSI TS 129 214 Media_Component_Number_AVP + const integer c_media_Sub_Component_AVP_Code := 519; //Ref: ETSI TS 129 214 Media_Sub_Component_AVP + const integer c_media_Type_AVP_Code := 520; //Ref: ETSI TS 129 214 Media_Type AVP + const integer c_mPS_Identifier_AVP_Code := 528; //Ref: ETSI TS 129 214 MPS_Identifier AVP + const integer c_reservation_Priority_AVP_Code := 458; //Ref: ETSI TS 129 214 Reservation_Priority AVP + const integer c_rR_Bandwidth_AVP_Code := 521; //Ref: ETSI TS 129 214 RR Bandwidth_AVP + const integer c_rS_Bandwidth_AVP_Code := 522; //Ref: ETSI TS 129 214 RS Bandwidth_AVP + const integer c_service_Info_Status_AVP_Code := 527; //Ref: ETSI TS 129 214 Service_Info AVP + const integer c_rx_Request_Type_AVP_Code := 533; //Ref: ETSI TS 129 214 Request_Type_AVP + const integer c_service_URN_AVP_Code := 525; //Ref: ETSI TS 129 214 Service_URN AVP + const integer c_sIP_Forking_Indication_AVP_Code := 523; //Ref: ETSI TS 129 214 SIP_Forking_Indication AVP + const integer c_specific_Action_AVP_Code := 513; //Ref: ETSI TS 129 214 Specific_Action AVP + const integer c_sponsor_Identity_AVP_Code := 531; //Ref: ETSI TS 129 214 Sponsor_Identity AVP + const integer c_sponsored_Connectivity_Data_AVP_Code := 530; //Ref: ETSI TS 129 214 Sponsored_Connectivity_Data AVP + const integer c_required_Access_Info_AVP := 536; //ref: TS129 214 5.3.34 + const integer c_abort_Cause_AVP_Code := 500; //Ref: ETSI TS 129 214 Abort Cause AVP + } // End of group AVPCodeConstantsRxTS129_214 + group AVPCodeConstantsS9_TS129_215 { + const integer c_subsession_Decision_Info_AVP_Code := 2200; // Ref: table 5.3.1 + const integer c_subsession_Enforcement_Info_AVP_Code := 2201; // Ref: table 5.3.1 + const integer c_subsession_Id_AVP_Code := 2202; // Ref: table 5.3.1 + const integer c_subsession_Operation_AVP_Code := 2203; // Ref: table 5.3.1 + const integer c_multiple_BBERF_Action_AVP_Code := 2204; // Ref: table 5.3.1 + } // End of group AVPCodeConstantsS9_TS129_215 + group AVPCodeConstantsGx_SdTS129_212{ + const integer c_access_Network_Charging_Identifier_Gx_AVP_Code := 1022; //Ref: ETSI TS 129 212 Access_Network_Charging_Identifier_Gx_AVP + const integer c_allocation_Retention_Priority_AVP_Code := 1034; //Ref: ETSI TS 129 212 Allocation_Retention_Priority_AVP + const integer c_aN_GW_Address_AVP_Code := 1050; //Ref: ETSI TS 129 212 AN_GW_Address_AVP + const integer c_aPN_Aggregate_Max_Bitrate_DL_AVP_Code := 1040; //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_DL_AVP + const integer c_aPN_Aggregate_Max_Bitrate_UL_AVP_Code := 1041; //Ref: ETSI TS 129 212 Aggregate_Max_Bitrate_UL_AVP + const integer c_bearer_Control_Mode_AVP_Code := 1023; //Ref: ETSI TS 129 212 Bearer_Control_Mode_AVP + const integer c_bearer_Identifier_AVP_Code := 1020; //Ref: ETSI TS 129 212 Bearer_Identifier_AVP + const integer c_bearer_Operation_AVP_Code := 1021; //Ref: ETSI TS 129 212 Bearer_Operation_AVP + const integer c_bearer_Usage_AVP_Code := 1000; //Ref: ETSI TS 129 212 Bearer_Usage_AVP + const integer c_charging_Rule_Install_AVP_Code := 1001; //Ref: ETSI TS 129 212 Charging_Rule_Install_AVP + const integer c_charging_Rule_Remove_AVP_Code := 1002; //Ref: ETSI TS 129 212 Charging_Rule_Remove_AVP + const integer c_charging_Rule_Definition_AVP_Code := 1003; //Ref: ETSI TS 129 212 Charging_Rule_Definition_AVP + const integer c_charging_Rule_Base_Name_AVP_Code := 1004; //Ref: ETSI TS 129 212 Charging_Rule_Base_Name_AVP + const integer c_charging_Rule_Name_AVP_Code := 1005; //Ref: ETSI TS 129 212 Charging_Rule_Name_AVP + const integer c_charging_Rule_Report_AVP_Code := 1018; //Ref: ETSI TS 129 212 Charging_Rule_Report_AVP + const integer c_charging_Correlation_Indicator_AVP_Code := 1073; //Ref: ETSI TS 129 212 Charging_Correlation_Indicator_AVP + const integer c_coA_IP_Address_AVP_Code := 1035; //Ref: ETSI TS 129 212 CoA_IP_Address_AVP + const integer c_coA_Information_AVP_Code := 1039; //Ref: ETSI TS 129 212 CoA_Information_AVP + const integer c_cSG_Information_Reporting_AVP_Code := 1071; //Ref: ETSI TS 129 212 CSG_Information_Reporting_AVP + const integer c_default_EPS_Bearer_QoS_AVP_Code := 1049; //Ref: ETSI TS 129 212 Default_EPS_Bearer_QoS_AVP + const integer c_event_Report_Indication_AVP_Code := 1033; //Ref: ETSI TS 129 212 Event_Report_Indication_AVP + const integer c_event_Trigger_AVP_Code := 1006; //Ref: ETSI TS 129 212 Event_Trigger_AVP + const integer c_flow_Direction_AVP_Code := 1080; //Ref: ETSI TS 129 212 Flow_Direction_AVP + const integer c_flow_Information_AVP_Code := 1058; //Ref: ETSI TS 129 212 Flow_Information_AVP + const integer c_flow_Label_AVP_Code := 1057; //Ref: ETSI TS 129 212 Flow_Label_AVP + const integer c_iP_CAN_Type_AVP_Code := 1027; //Ref: ETSI TS 129 212 IP_CAN_Type_AVP + const integer c_guaranteed_Bitrate_DL_AVP_Code := 1025; //Ref: ETSI TS 129 212 Guaranteed_Bitrate_DL_AVP + const integer c_guaranteed_Bitrate_UL_AVP_Code := 1026; //Ref: ETSI TS 129 212 Guaranteed_Bitrate_UL_AVP + const integer c_maximum_Bandwidth_AVP_Code := 1082; //Ref: ETSI TS 129 212 Maximum_Bandwidth_AVP + const integer c_max_Supported_Bandwidth_DL_AVP_Code := 1083; //Ref: ETSI TS 129 212 Max_Supported_Bandwidth_DL_AVP + const integer c_max_Supported_Bandwidth_UL_AVP_Code := 1084; //Ref: ETSI TS 129 212 Max_Supported_Bandwidth_UL_AVP + const integer c_metering_Method_AVP_Code := 1007; //Ref: ETSI TS 129 212 Metering_Method_AVP + const integer c_monitoring_Key_AVP_Code := 1066; //Ref: ETSI TS 129 212 Monitoring_Key_AVP + const integer c_Network_Request_Support_AVP_Code := 1024; //Ref: ETSI TS 129 212 Network_Request_Support_AVP + const integer c_offline_AVP_Code := 1008; //Ref: ETSI TS 129 212 Offline_AVP + const integer c_online_AVP_Code := 1009; //Ref: ETSI TS 129 212 Online_AVP + const integer c_packet_Filter_Content_AVP_Code := 1059; //Ref: ETSI TS 129 212 Packet_Filter_Content_AVP + const integer c_packet_Filter_Identifier_AVP_Code := 1060; //Ref: ETSI TS 129 212 Packet_Filter_Identifier_AVP + const integer c_packet_Filter_Information_AVP_Code := 1061; //Ref: ETSI TS 129 212 Packet_Filter_Information_AVP + const integer c_packet_Filter_Operation_AVP_Code := 1062; //Ref: ETSI TS 129 212 Packet_Filter_Operation_AVP + const integer c_packet_Filter_Usage_AVP_Code := 1072; //Ref: ETSI TS 129 212 Packet_Filter_Usage_AVP + const integer c_pDN_Connection_ID_AVP_Code := 1065; //Ref: ETSI TS 129 212 PDN_Connection_ID_AVP + const integer c_precedence_AVP_Code := 1010; //Ref: ETSI TS 129 212 Precedence_AVP + const integer c_pre_emption_Capability_AVP_Code := 1047; //Ref: ETSI TS 129 212 Pre_emption_Capability_AVP + const integer c_pre_emption_Vulnerability_AVP_Code := 1048; //Ref: ETSI TS 129 212 Pre_emption_Vulnerability_AVP + const integer c_priority_Level_AVP_Code := 1046; //Ref: ETSI TS 129 212 Priority_Level_AVP + const integer c_reporting_Level_AVP_Code := 1011; //Ref: ETSI TS 129 212 Reporting_Level_AVP + const integer c_routing_Filter_AVP_Code := 1078; //Ref: ETSI TS 129 212 Routing_Filter_AVP + const integer c_routing_IP_Address_AVP_Code := 1079; //Ref: ETSI TS 129 212 Routing_IP_Address_AVP + const integer c_routing_Rule_Definition_AVP_Code := 1076; //Ref: ETSI TS 129 212 Routing_Rule_Definition_AVP + const integer c_routing_Rule_Identifier_AVP_Code := 1077; //Ref: ETSI TS 129 212 Routing_Rule_Identifier_AVP + const integer c_routing_Rule_Install_AVP_Code := 1081; //Ref: ETSI TS 129 212 Routing_Rule_Install_AVP + const integer c_routing_Rule_Remove_AVP_Code := 1075; //Ref: ETSI TS 129 212 Routing_Rule_Remove_AVP + const integer c_pCC_Rule_Status_AVP_Code := 1019; //Ref: ETSI TS 129 212 PCC_Rule_Status_AVP + const integer c_session_Release_Cause_AVP_Code := 1045; //Ref: ETSI TS 129 212 Session_Release_Cause_AVP + const integer c_qoS_Class_Identifier_AVP_Code := 1028; //Ref: ETSI TS 129 212 QoS_Class_Identifier_AVP + const integer c_qoS_Information_AVP_Code := 1016; //Ref: ETSI TS 129 212 QoS_Information_AVP + const integer c_qoS_Negotiation_AVP_Code := 1029; //Ref: ETSI TS 129 212 QoS_Negotiation_AVP + const integer c_qos_Upgrade_AVP_Code := 1030; //Ref: ETSI TS 129 212 Qos_Upgrade_AVP + const integer c_resource_Allocation_Notification_AVP_Code := 1063; //Ref: ETSI TS 129 212 Resource_Allocation_Notification_AVP + const integer c_rule_Failure_Code_AVP_Code := 1031; //Ref: ETSI TS 129 212 Rule_Failure_Code_AVP + const integer c_security_Parameter_Index_AVP_Code := 1056; //Ref: ETSI TS 129 212 Security_Parameter_Index_AVP + const integer c_tFT_Filter_AVP_Code := 1012; //Ref: ETSI TS 129 212 TFT_Filter_AVP + const integer c_tFT_Packet_Filter_Information_AVP_Code := 1013; //Ref: ETSI TS 129 212 TFT_Packet_Filter_Information_AVP + const integer c_toS_Traffic_Class_AVP_Code := 1014; //Ref: ETSI TS 129 212 ToS_Traffic_Class_AVP + const integer c_tunnel_Header_Filter_AVP_Code := 1036; //Ref: ETSI TS 129 212 Tunnel_Header_Filter_AVP + const integer c_tunnel_Header_Length_AVP_Code := 1037; //Ref: ETSI TS 129 212 Tunnel_Header_Length_AVP + const integer c_tunnel_Information_AVP_Code := 1038; //Ref: ETSI TS 129 212 Tunnel_Information_AVP + const integer c_rAT_Type_AVP_Code := 1032; //Ref: ETSI TS 129 212 RAT_Type_AVP + const integer c_revalidation_Time_AVP_Code := 1042; //Ref: ETSI TS 129 212 Revalidation_Time_AVP + const integer c_rule_Activation_Time_AVP_Code := 1043; //Ref: ETSI TS 129 212 Rule_Activation_Time_AVP + const integer c_usage_Monitoring_Information_AVP_Code := 1067; //Ref: ETSI TS 129 212 Usage_Monitoring_Information_AVP + const integer c_rule_DeActivation_Time_AVP_Code := 1044; //Ref: ETSI TS 129 212 Rule_DeActivation_Time_AVP + const integer c_usage_Monitoring_Level_AVP_Code := 1068; //Ref: ETSI TS 129 212 Usage_Monitoring_Level_AVP + const integer c_usage_Monitoring_Report_AVP_Code := 1069; //Ref: ETSI TS 129 212 Usage_Monitoring_Report_AVP + const integer c_usage_Monitoring_Support_AVP_Code := 1070; //Ref: ETSI TS 129 212 Usage_Monitoring_Support_AVP + const integer c_tdf_Application_Identifier_AVP := 1088; // Ref: TS129 212 5.3.77 + const integer c_tdf_Information_AVP := 1087; // Ref: TS129 212 5.3.78 + const integer c_tdf_Destination_Realm_AVP := 1090; // Ref: TS129 212 5.3.79 + const integer c_tdf_Destination_Host_AVP := 1089; // Ref: TS129 212 5.3.80 + const integer c_tdf_IP_Address_AVP := 1091; // Ref: TS129 212 5.3.81 + const integer c_appl_Detection_Info_AVP := 1098; // Ref: TS129 212 5.3.91 + const integer c_tdf_Application_Instance_Id_AVP := 2802; // Ref: TS129 212 5.3.92 + const integer c_henb_Local_IP_Address_AVP := 2804; // Ref: TS129 212 5.3.95 + const integer c_ue_Local_IP_Address_AVP := 2805; // Ref: TS129 212 5.3.96 + const integer c_udp_Source_Port_AVP := 2806; // Ref: TS129 212 5.3.97 + const integer c_an_GW_Status_AVP := 2811; // Ref: TS129 212 5.3.100 + } // End of group AVPCodeConstantsGx_SdTS129_212 + group AVPCodeConstantsGxx_TS129_212{ + const integer c_qos_Rule_Install_AVP := 1051; // Ref: TS129 212 5a.3.1 + const integer c_qos_Rule_Remove_AVP := 1052; // Ref: TS129 212 5a.3.2 + const integer c_qos_Rule_Definition_AVP := 1053; // Ref: TS129 212 5a.3.3 + const integer c_qos_Rule_Name_AVP := 1054; // Ref: TS129 212 5a.3.4 + const integer c_qos_Rule_Report_AVP := 1055; // Ref: TS129 212 5a.3.5 + const integer c_session_Linking_Indicator_AVP := 1064; // Ref: TS129 212 5a.3.6 + const integer c_qos_Rule_Base_Name_AVP := 1074; // Ref: TS129 212 5a.3.7 + } // End of group AVPCodeConstantsGxx_TS129_212 + group AVPCodeConstantsTS129_061{ + const integer c_rAI_AVP_Code := 909; //Ref: ETSI TS 129 061 RAI_AVP + const integer c_threeGPP_Charging_Id_AVP_Code := 2; //Ref: ETSI TS 129 061 ThreeGPP_Charging_Id_AVP + const integer c_threeGPP_PDP_Type_AVP_Code := 3; //Ref: ETSI TS 129 061 ThreeGPP_PDP_Type_AVP + const integer c_threeGPP_SGSN_Address_AVP_Code := 6; //Ref: ETSI TS 129 061 ThreeGPP_SGSN_Address_AVP + const integer c_threeGPP_IMSI_MCC_MNC_AVP_Code := 8; //Ref: ETSI TS 129 061 ThreeGPP_IMSI_MCC_MNC_AVP + const integer c_threeGPP_GGSN_MCC_MNC_AVP_Code := 9; //Ref: ETSI TS 129 061 ThreeGPP_GGSN_MCC_MNC_AVP + const integer c_threeGPP_NSAPI_AVP_Code := 10; //Ref: ETSI TS 129 061 ThreeGPP_NSAPI_AVP + const integer c_threeGPP_Session_Stop_Indicator_AVP_Code := 11; //Ref: ETSI TS 129 061 ThreeGPP_Session_Stop_Indicator_AVP + const integer c_threeGPP_Selection_Mode_AVP_Code := 12; //Ref: ETSI TS 129 061 ThreeGPP_Selection_Mode_AVP + const integer c_threeGPP_Charging_Characteristics_AVP_Code := 13; //Ref: ETSI TS 129 061 ThreeGPP_Charging_Characteristics_AVP + const integer c_threeGPP_SGSN_IPv6_Address_AVP_Code := 15; //Ref: ETSI TS 129 061 ThreeGPP_SGSN_IPv6_Address_AVP + const integer c_threeGPP_User_Location_Info_AVP_Code := 22; //Ref: ETSI TS 129 061 ThreeGPP_User_Location_Info_AVP + const integer c_threeGPP_MS_TimeZone_AVP_Code := 23; //Ref: ETSI TS 129 061 ThreeGPP_MS_TimeZone_AVP + const integer c_threeGPP_RAT_Type_AVP_Code := 21; //Ref: ETSI TS 129 061 ThreeGPP_RAT_Type_AVP + const integer c_threeGPP_SGSN_MCC_MNC_AVP_Code := 18; //Ref: ETSI TS 129 061 ThreeGPP_SGSN_MCC_MNC_AVP + const integer c_threeGPP_GGSN_Address_AVP := 7; // Ref: TS129 061 table 9a + const integer c_threeGPP_GGSN_IPv6_Address_AVP := 16; // Ref: TS129 061 table 9a + const integer c_twan_Identifier_AVP := 29; // Ref: TS129 061 table 9a + + } // End of group AVPCodeConstantsTS129_061 + group AVPCodeConstantsTS129_272{ + const integer c_trace_Data_AVP_Code := 1485; //Ref: ETSI TS 129 272 Trace_Data_AVP + const integer c_trace_Reference_AVP_Code := 1459; //Ref: ETSI TS 129 272 Trace_Reference_AVP + const integer c_trace_Depth_AVP_Code := 1462; //Ref: ETSI TS 129 272 Trace_Depth_AVP + const integer c_trace_NE_Type_List_AVP_Code := 1463; //Ref: ETSI TS 129 272 Trace_NE_Type_List_AVP + const integer c_trace_Event_List_AVP_Code := 1465; //Ref: ETSI TS 129 272 Trace_Event_List_AVP + const integer c_trace_Collection_Entity_AVP_Code := 1452; //Ref: ETSI TS 129 272 Trace_Data_AVP + const integer c_trace_Interface_List_AVP_Code := 1464; //Ref: ETSI TS 129 272 Trace_Interface_List_AVP + const integer c_oMC_Id_AVP_Code := 1466; //Ref: ETSI TS 129 272 OMC_Id_AVP + const integer c_mDT_Configuration_AVP_Code := 1622; //Ref: ETSI TS 129 272 MDT_Configuration_AVP + const integer c_Job_Type_AVP_Code := 1623; //Ref: ETSI TS 129 272 Job_Type_AVP + const integer c_area_Scope_AVP_Code := 1624; //Ref: ETSI TS 129 272 Area_Scope_AVP + const integer c_list_Of_Measurements_AVP_Code := 1625; //Ref: ETSI TS 129 272 List_Of_Measurements_AVP + const integer c_reporting_Trigger_AVP_Code := 1626; //Ref: ETSI TS 129 272 Reporting_Trigger_AVP + const integer c_report_Interval_AVP_Code := 1627; //Ref: ETSI TS 129 272 Report_Interval_AVP + const integer c_report_Amount_AVP_Code := 1628; //Ref: ETSI TS 129 272 Report_Amount_AVP + const integer c_event_Treshold_RSRP_AVP_Code := 1629; //Ref: ETSI TS 129 272 Event_Treshold_RSRP_AVP + const integer c_event_Treshold_RSRQ_AVP_Code := 1630; //Ref: ETSI TS 129 272 Event_Treshold_RSRQ_AVP + const integer c_logging_Interval_AVP_Code := 1631; //Ref: ETSI TS 129 272 Logging_Interval_AVP + const integer c_logging_Duration_AVP_Code := 1632; //Ref: ETSI TS 129 272 Logging_Duration_AVP + const integer c_cell_Global_Identity_AVP_Code := 1604; //Ref: ETSI TS 129 272 Cell_Global_Identity_AVP + const integer c_e_UTRAN_Cell_Global_Identity_AVP_Code := 1602; //Ref: ETSI TS 129 272 E_UTRAN_Cell_Global_Identity_AVP + const integer c_routing_Area_Identity_AVP_Code := 1605; //Ref: ETSI TS 129 272 Routing_Area_Identity_AVP + const integer c_location_Area_Identity_AVP_Code := 1606; //Ref: ETSI TS 129 272 Location_Area_Identity_AVP + const integer c_tracking_Area_Identity_AVP_Code := 1603; //Ref: ETSI TS 129 272 Tracking_Area_Identity_AVP + + } // End of group AVPCodeConstantsTS129_272 + group AVPCodeConstantsTS129_299{ + const integer c_charging_Information_AVP_Code := 618; //Ref: ETSI TS 129 299 Charging_Information_AVP + const integer c_primary_Event_Charging_Function_Name_AVP_Code := 619; //Ref: ETSI TS 129 299 Primary_Event_Charging_Function_Name_AVP + const integer c_secondary_Event_Charging_Function_Name_AVP_Code := 620; //Ref: ETSI TS 129 299 Secondary_Event_Charging_Function_Name_AVP + const integer c_primary_Charging_Collection_Function_Name_AVP_Code := 621; //Ref: ETSI TS 129 299 Primary_Charging_Collection_Function_Name_AVP + const integer c_secondary_Charging_Collection_Function_Name_AVP_Code := 622; //Ref: ETSI TS 129 299 Secondary_Charging_Collection_Function_Name_AVP + + } // End of group AVPCodeConstantsTS129_299 + group AVPCodeConstantsTS132_299 { + + const integer c_accounting_Input_Octets_AVP_Code := 363; //Ref ETSI TS 132 299 Accounting-Input-Octets + const integer c_accounting_Output_Octets_AVP_Code := 364; //Ref ETSI TS 132 299 Accounting-Output-Octets + const integer c_event_Type_AVP_Code := 823; //Ref ETSI TS 132 299 Event_Type_AVP + const integer c_event_AVP_Code := 825; //Ref ETSI TS 132 299 Event_AVP + const integer c_content_Type_AVP_Code := 826; //Ref ETSI TS 132 299 Content_Type_AVP + const integer c_content_Length_AVP_Code := 827; //Ref ETSI TS 132 299 Content_Length_AVP + const integer c_content_Disposition_AVP_Code := 828; //Ref ETSI TS 132 299 Content_Disposition_AVP + const integer c_role_Of_Node_AVP_Code := 829; //Ref ETSI TS 132 299 Role_Of_Node_AVP + const integer c_user_Session_Id_AVP_Code := 830; //Ref ETSI TS 132 299 User_Session_Id_AVP + const integer c_calling_Party_Address_AVP_Code := 831; //Ref ETSI TS 132 299 Calling_Party_Address_AVP + const integer c_called_Party_Address_AVP_Code := 832; //Ref ETSI TS 132 299 Called_Party_Address_AVP + const integer c_time_Stamps_AVP_Code := 833; //Ref ETSI TS 132 299 Time_Stamps_AVP + const integer c_sip_Request_Timestamp_AVP_Code := 834; //Ref ETSI TS 132 299 SIP_Request_Timestamp_AVP + const integer c_sip_Response_Timestamp_AVP_Code := 835; //Ref ETSI TS 132 299 SIP_Response_Timestamp_AVP + const integer c_application_Server_AVP_Code := 836; //Ref ETSI TS 132 299 Application_Server_AVP + const integer c_application_provided_Called_Party_Address_AVP_Code := 837; //Ref ETSI TS 132 299 Application_provided_Called_Party_Address_AVP + const integer c_inter_Operator_Identifier_AVP_Code := 838; //Ref ETSI TS 132 299 Inter_Operator_Identifier_AVP + const integer c_originating_IOI_AVP_Code := 839; //Ref ETSI TS 132 299 Originating_IOI_AVP + const integer c_terminating_IOI_AVP_Code := 840; //Ref ETSI TS 132 299 Terminating_IOI_AVP + const integer c_ims_Charging_Identifier_AVP_Code := 841; //Ref ETSI TS 132 299 IMS_Charging_Identifier_AVP + const integer c_sdp_Session_Description_AVP_Code := 842; //Ref ETSI TS 132 299 SDP_Session_Description_AVP + const integer c_sdp_Media_Component_AVP_Code := 843; //Ref ETSI TS 132 299 SDP_Media_Component_AVP + const integer c_sdp_Media_Name_AVP_Code := 844; //Ref ETSI TS 132 299 SDP_Media_Name_AVP + const integer c_sdp_Media_Description_AVP_Code := 845; //Ref ETSI TS 132 299 SDP_Media_Description_AVP + const integer c_cg_Address_AVP_Code := 846; //Ref ETSI TS 132 299 CG_Address_AVP + const integer c_ggsn_Address_AVP_Code := 847; //Ref ETSI TS 132 299 GGSN_Address_AVP + const integer c_application_Server_Information_AVP_Code := 850; //Ref ETSI TS 132 299 Application_Server_Information_AVP + const integer c_trunk_Group_ID_AVP_Code := 851; //Ref ETSI TS 132 299 Trunk_Group_ID_AVP_Code + const integer c_incoming_Trunk_Group_ID_AVP_Code := 852; //Ref ETSI TS 132 299 Incoming_Trunk_Group_ID_AVP + const integer c_outgoing_Trunk_Group_ID_AVP_Code := 853; //Ref ETSI TS 132 299 Outgoing_Trunk_Group_ID_AVP + const integer c_bearer_Service_AVP_Code := 854; //Ref ETSI TS 132 299 Bearer_Service_AVP + const integer c_service_Id_AVP_Code := 855; //Ref ETSI TS 132 299 Service_Id_AVP + const integer c_associated_URI_AVP_Code := 856; //Ref ETSI TS 132 299 Associated_URI_AVP + const integer c_cause_Code_AVP_Code := 861; //Ref ETSI TS 132 299 Cause_Code_AVP + const integer c_node_Functionality_AVP_Code := 862; //Ref ETSI TS 132 299 Node_Functionality_AVP + const integer c_service_Specific_Data_AVP_Code := 863; //Ref ETSI TS 132 299 Service_Specific_Data_AVP + const integer c_originator_AVP_Code := 864; //Ref ETSI TS 132 299 Originator_AVP + const integer c_ps_Furnish_Charging_Information_AVP_Code := 865; //Ref ETSI TS 132 299 PS_Furnish_Charging_Information_AVP_Code + const integer c_ps_Free_Format_Data_AVP_Code := 866; //Ref ETSI TS 132 299 PS_Free_Format_Data_AVP + const integer c_ps_Append_Free_Format_Data_AVP_Code := 867; //Ref ETSI TS 132 299 PS_Append_Free_Format_Data_AVP + const integer c_time_Quota_Threshold_AVP_Code := 868; //Ref ETSI TS 132 299 Time_Quota_Threshold_AVP + const integer c_volume_Quota_Threshold_AVP_Code := 869; //Ref ETSI TS 132 299 Volume_Quota_Threshold_AVP + const integer c_trigger_Type_AVP_Code := 870; //Ref ETSI TS 132 299 Trigger_Type_AVP + const integer c_quota_Holding_Time_AVP_Code := 871; //Ref ETSI TS 132 299 Quota_Holding_Time_AVP + const integer c_reporting_Reason_AVP_Code := 872; //Ref ETSI TS 132 299 Reporting_Reason_AVP + const integer c_service_Information_AVP_Code := 873; //Ref ETSI TS 132 299 Service_Information_AVP + const integer c_ps_Information_AVP_Code := 874; //Ref ETSI TS 132 299 PS_Information_AVP + const integer c_wlan_Information_AVP_Code := 875; //Ref ETSI TS 132 299 WLAN_Information_AVP + const integer c_ims_Information_AVP_Code := 876; //Ref ETSI TS 132 299 IMS_Information_AVP + const integer c_quota_Consumption_Time_AVP_Code := 881; //Ref ETSI TS 132 299 Quota_Consumption_Time_AVP + const integer c_media_Initiator_Flag_AVP_Code := 882; //Ref ETSI TS 132 299 Media_Initiator_Flag_AVP + const integer c_expires_AVP_Code := 888; //Ref ETSI TS 132 299 Expires_AVP + const integer c_message_Body_AVP_Code := 889; //Ref ETSI TS 132 299 Message_Body_AVP + const integer c_wag_Address_AVP_Code := 890; //Ref ETSI TS 132 299 WAG_Address_AVP + const integer c_wag_PLMN_Ids_AVP_Code := 891; //Ref ETSI TS 132 299 WAG_Address_AVP + const integer c_wlan_Radio_Container_AVP_Code := 892; //Ref ETSI TS 132 299 WLAN_Radio_Container + const integer c_wlan_Technology_AVP_Code := 893; //Ref ETSI TS 132 299 WLAN_Technology_AVP + const integer c_wlan_UE_Local_IPAddress_AVP_Code := 894; //Ref ETSI TS 132 299 WLAN_UE_Local_IPAddress_AVP + const integer c_pdg_Address_AVP_Code := 895; //Ref ETSI TS 132 299 PDG_Address_AVP + const integer c_pdg_Charging_Id_AVP_Code := 896; //Ref ETSI TS 132 299 PDG_Charging_Id_AVP + + const integer c_unit_Quota_Threshold_AVP_Code := 1226; //Ref ETSI TS 132 299 Unit_Quota_Threshold_AVP + const integer c_sgsn_Address_AVP_Code := 1228; //Ref ETSI TS 132 299 SGSN_Address_AVP + const integer c_wlan_Session_Id_AVP_Code := 1246; //Ref ETSI TS 132 299 WLAN_Session_Id_AVP + const integer c_pdp_Context_Type_AVP_Code := 1247; //Ref ETSI TS 132 299 PDP_Context_Type_AVP + const integer c_called_Asserted_Identity_AVP_Code := 1250; //Ref ETSI TS 132 299 Called_Asserted_Identity_AVP + const integer c_requested_Party_Address_AVP_Code := 1251; //Ref ETSI TS 132 299 Requested_Party_Address_AVP + const integer c_service_Generic_Information_AVP_Code := 1256; //Ref ETSI TS 132 299 Service_Generic_Information_AVP + const integer c_service_Specific_Type_AVP_Code := 1257; //Ref ETSI TS 132 299 Service_Specific_Type_AVP + const integer c_access_Network_Information_AVP_Code := 1263; //Ref ETSI TS 132 299 Access_Network_Information_AVP + const integer c_trigger_AVP_Code := 1264; //Ref ETSI TS 132 299 Trigger_AVP + const integer c_base_Time_Interval_AVP_Code := 1265; //Ref ETSI TS 132 299 Base_Time_Interval_AVP + const integer c_envelope_End_Time_AVP_Code := 1267; //Ref ETSI TS 132 299 Envelope_End_Time_AVP + const integer c_envelope_AVP_Code := 1266; //Ref ETSI TS 132 299 Envelope_AVP + const integer c_envelope_Start_Time_AVP_Code := 1269; //Ref ETSI TS 132 299 Envelope_Start_Time_AVP + const integer c_envelope_Reporting_AVP_Code := 1268; //Ref ETSI TS 132 299 Envelope_Reporting_AVP + const integer c_time_Quota_Mechanism_AVP_Code := 1270; //Ref ETSI TS 132 299 Time_Quota_Mechanism_AVP + const integer c_time_Quota_Type_AVP_Code := 1271; //Ref ETSI TS 132 299 Time_Quota_Type_AVP + const integer c_early_Media_Description_AVP_Code := 1272; //Ref ETSI TS 132 299 Early_Media_Description_AVP + const integer c_sdp_TimeStamps_AVP_Code := 1273; //Ref ETSI TS 132 299 SDP_TimeStamps_AVP + const integer c_sdp_Offer_Timestamp_AVP_Code := 1274; //Ref ETSI TS 132 299 SDP_Offer_Timestamp_AVP + const integer c_sdp_Answer_Timestamp_AVP_Code := 1275; //Ref ETSI TS 132 299 SDP_Answer_Timestamp_AVP + const integer c_af_Correlation_Information_AVP_Code := 1276; //Ref ETSI TS 132 299 AF_Correlation_Information_AVP + const integer c_offline_Charging_AVP_Code := 1278; //Ref ETSI TS 132 299 Offline_Charging_AVP + const integer c_alternate_Charged_Party_Address_AVP_Code := 1280; //Ref ETSI TS 132 299 Alternate_Charged_Party_Address_AVP + const integer c_ims_Communication_Service_Identifier_AVP_Code := 1281; //Ref ETSI TS 132 299 IMS_Communication_Service_Identifier_AVP + const integer c_media_Initiator_Party_AVP_Code := 1288; //Ref ETSI TS 132 299 Media_Initiator_Party_AVP + const integer c_cSG_Id_AVP_Code := 1437; //Ref: ETSI TS 132 299 CSG_Id_AVP + + const integer c_low_Balance_Indication_AVP_Code := 2020; //Ref ETSI TS 132 299 Low_Balance_Indication_AVP + const integer c_remaining_Balance_AVP_Code := 2021; //Ref ETSI TS 132 299 Remaining_Balance_AVP + const integer c_refund_Information_AVP_Code := 2022; //Ref ETSI TS 132 299 Refund_Information_AVP + const integer c_carrier_Select_Routing_Information_AVP_Code := 2023; //Ref ETSI TS 132 299 Carrier_Select_Routing_Information_AVP + const integer c_number_Portability_Routing_Information_AVP_Code := 2024; //Ref ETSI TS 132 299 Number_Portability_Routing_Information_AVP + const integer c_node_Id_AVP_Code := 2034; //Ref ETSI TS 132 299 Node_Id_AVP + const integer c_sdp_Type_AVP_Code := 2036; //Ref ETSI TS 132 299 SDP_Type_AVP + const integer c_change_Condition_AVP_Code := 2037; //Ref ETSI TS 132 299 Change_Condition_AVP + const integer c_change_Time_AVP_Code := 2038; //Ref ETSI TS 132 299 Change_Time_AVP + const integer c_diagnostics_AVP_Code := 2039; //Ref ETSI TS 132 299 Diagnostics_AVP + const integer c_service_Data_Container_AVP_Code := 2040; //Ref ETSI TS 132 299 Service_Data_Container_AVP + const integer c_start_Time_AVP_Code := 2041; //Ref ETSI TS 132 299 Start_Time_AVP + const integer c_stop_Time_AVP_Code := 2042; //Ref ETSI TS 132 299 Stop_Time_AVP + const integer c_time_First_Usage_AVP_Code := 2043; //Ref ETSI TS 132 299 Time_First_Usage_AVP + const integer c_time_Last_Usage_AVP_Code := 2044; //Ref ETSI TS 132 299 Time_Last_Usage_AVP + const integer c_time_Usage_Usage_AVP_Code := 2045; //Ref ETSI TS 132 299 Time_Usage_AVP + const integer c_traffic_Data_Volumes_AVP_Code := 2046; //Ref ETSI TS 132 299 Traffic_Data_Volumes_AVP + const integer c_serving_Node_Type_AVP_Code := 2047; //Ref ETSI TS 132 299 Serving_Node_Type_AVP + const integer c_pdn_Connection_Charging_ID_AVP_Code := 2050; //Ref ETSI TS 132 299 PDN_Connection_Charging_ID_AVP + const integer c_dynamic_Address_Flag_AVP_Code := 2051; //Ref ETSI TS 132 299 + const integer c_accumulated_Cost_AVP_Code := 2052; //Ref ETSI TS 132 299 Accumulated_Cost_AVP + const integer c_aoc_Cost_Information_AVP_Code := 2053; //Ref ETSI TS 132 299 AoC_Cost_Information_AVP + const integer c_aoc_Information_AVP_Code := 2054; //Ref ETSI TS 132 299 AoC_Information_AVP + const integer c_aoc_Request_Type_AVP_Code := 2055; //Ref ETSI TS 132 299 AoC_Request_Type_AVP + const integer c_current_Tariff_AVP_Code := 2056; //Ref ETSI TS 132 299 Current_Tariff_AVP + const integer c_next_Tariff_AVP_Code := 2057; //Ref ETSI TS 132 299 Next_Tariff_AVP + const integer c_rate_Element_AVP_Code := 2058; //Ref ETSI TS 132 299 Rate_Element_AVP + const integer c_scale_Factor_AVP_Code := 2059; //Ref ETSI TS 132 299 Scale_Factor_AVP + const integer c_tariff_Information_AVP_Code := 2060; //Ref ETSI TS 132 299 Tariff_Information_AVP + const integer c_incremental_Cost_AVP_Code := 2062; //Ref ETSI TS 132 299 Incremental_Cost_AVP + const integer c_local_Sequence_Number_AVP_Code := 2063; //Ref ETSI TS 132 299 Local_Sequence_Number_AVP_Code + const integer c_unit_Cost_AVP_Code := 2061; //Ref ETSI TS 132 299 Unit_Cost_AVP + const integer c_sgw_Change_AVP_Code := 2065; //Ref ETSI TS 132 299 SGW_Change_AVP + const integer c_charging_Characteristics_Selection_Mode_AVP_Code:= 2066; //Ref ETSI TS 132 299 Charging_Characteristics_Selection_Mode_AVP + const integer c_sgw_Address_AVP_Code := 2067; //Ref ETSI TS 132 299 SGW_Address_AVP + const integer c_dynamic_Address_Flag_Extension_AVP_Code := 2068; //Ref ETSI TS 132 299 Dynamic_Address_Flag_Extension_AVP + + const integer c_application_Server_ID_AVP_Code := 2101; //Ref ETSI TS 132 299 Application_Server_ID_AVP + const integer c_application_Service_Type_AVP_Code := 2102; //Ref ETSI TS 132 299 Application_Service_Type_AVP + const integer c_application_Session_ID_AVP_Code := 2103; //Ref ETSI TS 132 299 Application_Session_ID_AVP + const integer c_delivery_Status_AVP_Code := 2104; //Ref ETSI TS 132 299 Delivery_Status_AVP + + const integer c_sip_Request_Timestamp_Fraction_AVP_Code := 2301;//Ref: ETSI TS 132 299 SIP_Request_Timestamp_Fraction_AVP + const integer c_sip_Response_Timestamp_Fraction_AVP_Code := 2302;//Ref: ETSI TS 132 299 SIP_Response_Timestamp_Fraction_AVP + const integer c_online_Charging_Flag_AVP_Code := 2303;//Ref: ETSI TS 132 299 Online_Charging_Flag_AVP + const integer c_real_Time_Tariff_Information_AVP_Code:= 2305;//Ref: ETSI TS 132 299 Real_Time_Tariff_Information_AVP + const integer c_imsi_Unauthenticated_Flag_AVP_Code := 2308;//Ref: ETSI TS 132 299 IMSI_Unauthenticated_Flag_AVP + const integer c_account_Expiration_AVP_Code := 2309;//Ref: ETSI TS 132 299 Account_Expiration_AVP + const integer c_aoc_Format_AVP_Code := 2310;//Ref: ETSI TS 132 299 AoC_Format_AVP + const integer c_aoc_Service_AVP_Code := 2311;//Ref: ETSI TS 132 299 AoC_Service_AVP + const integer c_aoc_Service_Obligatory_Type_AVP_Code := 2312;//Ref: ETSI TS 132 299 AoC_Service_Obligatory_Type_AVP + const integer c_aoc_Service_Type_AVP_Code := 2313;//Ref: ETSI TS 132 299 AoC_Service_Type_AVP + const integer c_aoc_Subscription_Information_AVP_Code:= 2314;//Ref: ETSI TS 132 299 AoC_Subscription_Information_AVP + const integer c_preferred_AoC_Currency_AVP_Code := 2315;//Ref: ETSI TS 132 299 Preferred_AoC_Currency_AVP + const integer c_cSG_Access_Mode_AVP_Code := 2317; //Ref: ETSI TS 132 299 CSG_Access_Mode_AVP + const integer c_cSG_Membership_Indication_AVP_Code := 2318;//Ref: ETSI TS 132 299 CSG_Membership_Indication_AVP + const integer c_user_CSG_Information_AVP_Code := 2319; //Ref: ETSI TS 132 299 User_CSG_Information_AVP + const integer c_initial_IMS_Charging_Identifier_AVP_Code := 2321; //Ref: ETSI TS 132 299 Initial_IMS_Charging_Identifier_AVP + const integer c_ims_Emergency_Indicator_AVP_Code := 2322; //Ref: ETSI TS 132 299 IMS_Emergency_Indicator_AVP + const integer c_tariff_XML_AVP_Code := 2326; //Ref: ETSI TS 132 299 Tariff_XML_AVP + const integer c_outgoing_Session_Id_AVP_Code := 2330; //Ref: ETSI TS 132 299 Outgoing_Session_Id_AVP + const integer c_low_Priority_Indicator_AVP_Code := 2602;//Ref: ETSI TS 132 299 Low_Priority_Indicator + const integer c_ip_Realm_Default_Indication_AVP_Code:= 2603;//Ref: ETSI TS 132 299 IP_Realm_Default_Indication_AVP + const integer c_local_GW_Inserted_Indication_AVP_Code:= 2604;//Ref: ETSI TS 132 299 Local_GW_Inserted_Indication_AVP + const integer c_transcoder_Inserted_Indication_AVP_Code:= 2605;//Ref: ETSI TS 132 299 Transcoder_Inserted_Indication_AVP + const integer c_pdp_Address_Prefix_Length_AVP_Code := 2606;//Ref: ETSI TS 132 299 PDP_Address_Prefix_Length_AVP + + } // End of group AVPCodeConstantsTS132_299 + group AVPCodeConstantsX_S0057_1{ + + const integer c_threeGPP2_BSID_AVP_Code := 5535; //Ref: X.S0057-1 ThreeGPP2_BSID_AVP + + } // End of group AVPCodeConstantsX_S0057_1 + group AVPCodeConstantsTS283_034{ + + const integer c_logical_Access_ID_AVP_Code := 302; //Ref: TS283_034 ThreeGPP2_BSID_AVP + const integer c_physical_Access_ID_AVP_Code := 313; //Ref: TS283_034 Physical_Access_ID_AVP + + } // End of group AVPCodeConstantsTS283_034 + + } // End of group AVPCodeConstants + } + +} // End of group BasicTypes + + group HeaderAndBodyTypes + { + group HeaderTypes{ + /* This group contains the type definitions of the messages. */ + + + // Diameter Header Record. + type record DiameterHeader { + UInt8 version, + UInt24 msglen, //message length + Command_Flags cmdflags, //command flags + Command_Code cmdcode, //command code + UInt32 applid, //application id + UInt32 hopid, //hop_by_hop_id previous optional + UInt32 endid //end_to_end_id previous optional + } + + } // End of group HeaderTypes + + group MessageTypes{ + + /* Ref: RFC3588 p.3 */ + type record Command_Flags{ + Bit1 r_bit, //Request + Bit1 p_bit, //Proxiable + Bit1 e_bit, //Error + Bit1 t_bit, //Potentialy re-transmited message + Bit4 reserved_bits +// } +// with { +// variant (r_bit) "intTag='r_bit'" + } + + /* Ref: RFC3588 p.3.1 */ + type enumerated Command_Code{ + CER_E, // Capabilities-Exchange-Request CER (257) + CEA_E, // Capabilities-Exchange-Answer CEA (257) + RAR_E, // Re-Auth-Request RAR (258) + RAA_E, // Re-Auth-Answer RAA (258) + /**/ + ACR_E, // Accounting-Request ACR(271) + ACA_E, // Accounting-Answer ACA (271) + /**/ + ASR_E, // Abort-Session-Request ASR (274) + ASA_E, // Abort-Sesion-Answer ASA (274) + STR_E, // Session-Termination-Request STR (275) + STA_E, // Session-Termination-Answer STA (275) + /**/ + DWR_E, // Device-Watchdog-Request DWR (280) + DWA_E, // Device-Watchdog-Answer DWA (280) + DPR_E, // Disconnect-Peer-Requst DPR (282) + DPA_E, // Disconnect-Peer-Answer DPA (282) + + /* Codes on Cx */ + UAR_E, // User-Authorization-Request UAR (283 in RFC4740 or 300 in TS 129 229) + UAA_E, // User-Authorizdatio-Response UAA (283 in RFC4740 or 300 in TS 129 229) + SAR_E, // Server-Assignment-Request SAR (284 in RFC4740 or 301 in TS 129 229) + SAA_E, // Server-Assignment-Answer SAA (284 in RFC4740 or 301 in TS 129 229) + LIR_E, // Location-Info-Request LIR (285 in RFC4740 or 302 in TS 129 229) + LIA_E, // Location-Info-Answer LIA (285 in RFC4740 or 302 in TS 129 229) + MAR_E, // Multimedia-Auth-Request MAR (286 in RFC4740 or 303 in TS 129 229) + MAA_E, // Multimedia-Auth-Answer MAA (286 in RFC4740 or 303 in TS 129 229) + RTR_E, // Registration-Termination-Request RTR (287 in RFC4740 or 304 in TS 129 229) + RTA_E, // Registration-Termination-Answer RTA (287 in RFC4740 or 304 in TS 129 229) + PPR_E, // Push-Profile-Request PPR (288 in RFC4740 or 305 in TS 129 229) + PPA_E, // Push-Profile-Answer PPA (288 in RFC4740 or 305 in TS 129 229) + + /* Codes on Sh/Dh interface */ + UDR_E, // UDR User-Data-Request AS->HSS UDR (306) + UDA_E, // UDA User-Data-Answer HSS->AS UDA (306) + PUR_E, // PUR Profile-Update-Request AS->HSS PUR (307) + PUA_E, // PUA Profile-Update-Answer HSS->AS PUA (307) + SNR_E, // SNR Subscribe-Notifications-Request AS->HSS SNR (308) + SNA_E, // SNA Subscribe-Notifications-Answer HSS->AS SNA (308) + PNR_E, // PNR Profile-Notification-Request HSS->AS PNR (309) + PNA_E, // PNA Profile-Notification-Answer AS->HSS PNA (309) + + /* Codes on Rx interface */ + AAR_E, // AAR Auth-Accounting-Request AAR (265) + AAA_E, // AAA Auth-Accounting-Request AAA (265) + + /* Codes on Gx interface - RFC4006 and TS 129 212 */ + CCR_E, // CCR Credit-Control-Request CCR (272) + CCA_E, // CCA Credit-Control-Request CCA (272) + + /* Codes on S6a interface - TS 129 272 */ + ULR_E, // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3 + ULA_E, // Update-Location-Answer ULA (316)- Ref: TS 129 272 7.2.4 + CLR_E, // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7 + CLA_E, // Cancel-Location-Answer CLA (317)- Ref: TS 129 272 7.2.8 + AIR_E, // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5 + AIA_E, // Authentication-Information-Answer AIA (318)- Ref: TS 129 272 7.2.6 + IDR_E, // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9 + IDA_E, // Insert-Subscriber-Data-Answer IDA (319)- Ref: TS 129 272 7.2.10 + DSR_E, // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11 + DSA_E, // Delete-Subscriber-Data-Answer DSA (320)- Ref: TS 129 272 7.2.12 + PUER_E, // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13 + PUEA_E, // Purge-UE-Answer PUA (321)- Ref: TS 129 272 7.2.14 + RSR_E, // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15 + RSA_E, // Reset-Answer DSA (322)- Ref: TS 129 272 7.2.16 + NOR_E, // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17 + NOA_E // Notify-Answer NOA (323)- Ref: TS 129 272 7.2.18 +// } +// with { +// variant "length=24;use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeCommandCode();decode=CodecHelper.decodeCommandCode()" + } + //RFC3588, chapter 3. Diameter Header: The Command-Code field is three octets + + + type union DIAMETER_MSG { + CER_MSG cER_MSG, + CEA_MSG cEA_MSG, + RAR_MSG rAR_MSG, + RAA_MSG rAA_MSG, + ACR_MSG aCR_MSG, + ACA_MSG aCA_MSG, + ASR_MSG aSR_MSG, + ASA_MSG aSA_MSG, + STR_MSG sTR_MSG, + STA_MSG sTA_MSG, + DWR_MSG dWR_MSG, + DWA_MSG dWA_MSG, + DPR_MSG dPR_MSG, + DPA_MSG dPA_MSG, + //RFC4740 + UAR_MSG uAR_MSG, + UAA_MSG uAA_MSG, + SAR_MSG sAR_MSG, + SAA_MSG sAA_MSG, + LIR_MSG lIR_MSG, + LIA_MSG lIA_MSG, + MAR_MSG mAR_MSG, + MAA_MSG mAA_MSG, + RTR_MSG rTR_MSG, + RTA_MSG rTA_MSG, + PPR_MSG pPR_MSG, + PPA_MSG pPA_MSG, + //Sh interface + UDR_MSG uDR_MSG, + UDA_MSG uDA_MSG, + PUR_MSG pUR_MSG, + PUA_MSG pUA_MSG, + SNR_MSG sNR_MSG, + SNA_MSG sNA_MSG, + PNR_MSG pNR_MSG, + PNA_MSG pNA_MSG, + //RFC4006 and TS 129 212 + CCR_MSG cCR_MSG, + CCA_MSG cCA_MSG, + //Rx interface + AAR_MSG aAR_MSG, + AAA_MSG aAA_MSG, + // S6a interface + ULR_MSG uLR_MSG, + ULA_MSG uLA_MSG, + AIR_MSG aIR_MSG, + AIA_MSG aIA_MSG, + CLR_MSG cLR_MSG, + CLA_MSG cLA_MSG, + IDR_MSG iDR_MSG, + IDA_MSG iDA_MSG, + DSR_MSG dSR_MSG, + DSA_MSG dSA_MSG, + + PUER_MSG pUER_MSG, // Purge-UE-Request: PUR (321)- Ref: TS 129 272 7.2.13 + PUEA_MSG pUEA_MSG, // Purge-UE-Answer: PUA (321)- Ref: TS 129 272 7.2.14 + + RSR_MSG rSR_MSG, + RSA_MSG rSA_MSG, + NOR_MSG nOR_MSG, + NOA_MSG nOA_MSG, + + UNKNOWN_MSG uNKNOWN_MSG + } + + /* ***** Diameter Message types ***** */ + group RFC3588{ + + type record UNKNOWN_MSG { + DiameterHeader header, + set of AVP_Type aVP_Type optional //changed +// } +// with { +// variant "present=!bytes(4, 257, 258)" +// variant "present=!bytes(4, 271, 275)" +// variant "present=!bytes(4, 280)" +// variant "present=!bytes(4, 282, 288)" +// variant "present=!bytes(4, 306, 309)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record CER_MSG{ + //Ref: RFC3588 5.3.1. Capabilities-Exchange-Request + DiameterHeader header,// ::= < Diameter Header: 257, REQ > + CER_Body_AVP cER_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 257)" //The Capabilities-Exchange-Request (CER), indicated by the Command-Code set to 257 and the Command Flags' 'R' bit set + } + + type set CER_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + set length (1..infinity) of Host_IP_Address_AVP host_IP_Address, + Vendor_Id_AVP vendor_Id, + Product_Name_AVP product_Name,//required + Origin_State_Id_AVP origin_State_Id optional, //set of removed due to RFC3588 + set of Supported_Vendor_Id_AVP supported_Vendor_Id optional, + set of Auth_Application_Id_AVP auth_Application_Id optional, + set of Inband_Security_Id_AVP inband_Security_Id optional, + set of Acct_Application_Id_AVP acct_Application_Id optional, + set of Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Firmware_Revision_AVP firmware_Revision optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (host_IP_Address) "fieldPresent=bytes(4, 257)" //presence check for inline defined lists +// variant (origin_State_Id) "fieldPresent=bytes(4, 278)" //presence check for inline defined optional lists +// variant (supported_Vendor_Id) "fieldPresent=bytes(4, 265)" //presence check for inline defined optional lists +// variant (auth_Application_Id) "fieldPresent=bytes(4, 258)" //presence check for inline defined optional lists +// variant (inband_Security_Id) "fieldPresent=bytes(4, 299)" //presence check for inline defined optional lists +// variant (acct_Application_Id) "fieldPresent=bytes(4, 259)" //presence check for inline defined optional lists +// variant (vendor_Specific_Application_Id) "fieldPresent=bytes(4, 260)" //presence check for inline defined optional lists +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record CEA_MSG{ + //Ref: RFC3588 5.3.2. Capabilities-Exchange-Answer + DiameterHeader header,// ::= < Diameter Header: 257 > + CEA_Body_AVP cEA_Body +// } with { +// variant "present=bits(32,1,0) && bytes(5,3, 257)" //The Capabilities-Exchange-Request (CEA), indicated by the Command-Code set to 257 and the Command Flags' 'R' bit clear + } + + type set CEA_Body_AVP { + Result_Code_AVP result_Code,//required + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set length (1..infinity) of Host_IP_Address_AVP host_IP_Address, + Vendor_Id_AVP vendor_Id, + Product_Name_AVP product_Name,//required + Origin_State_Id_AVP origin_State_Id optional, + Error_Message_AVP error_Message optional, + set of Failed_AVP failed optional, + set of Supported_Vendor_Id_AVP supported_Vendor_Id optional, + set of Auth_Application_Id_AVP auth_Application_Id optional, + set of Inband_Security_Id_AVP inband_Security_Id optional, + set of Acct_Application_Id_AVP acct_Application_Id optional, + set of Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Firmware_Revision_AVP firmware_Revision optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (host_IP_Address) "fieldPresent=bytes(4, 257)" //presence check for inline defined lists +// variant (failed) "fieldPresent=bytes(4, 278)" +// variant (supported_Vendor_Id) "fieldPresent=bytes(4, 279)" +// variant (auth_Application_Id) "fieldPresent=bytes(4, 265)" +// variant (inband_Security_Id) "fieldPresent=bytes(4, 299)" +// variant (acct_Application_Id) "fieldPresent=bytes(4, 259)" +// variant (vendor_Specific_Application_Id) "fieldPresent=bytes(4, 260)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record RAR_MSG{ + //Ref: RFC3588 8.3.1. Re-Auth-Request + DiameterHeader header,// ::= < Diameter Header: 258, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. //RFC3588 & TS 129 214 & TS 129 212 + RAR_Body_AVP rAR_Body +// } with { +// variant "present=bits(32,1,1) && bytes(5,3, 258)" //The RAR, indicated by the Command-Code set to 258 and the Command Flags' 'R' bit set + } + + type set RAR_Body_AVP { + Origin_Host_AVP origin_Host,//required //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Origin_Realm_AVP origin_Realm, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Destination_Realm_AVP destination_Realm, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Destination_Host_AVP destination_Host, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Auth_Application_Id_AVP auth_Application_Id, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Specific_Action_AVP specific_Action optional, // TS 129 214 required + Re_Auth_Request_Type_AVP re_Auth_Request_Type optional, //RFC3588req & TS 129 214NOT present & TS 129 212req & TS129 215 req + User_Name_AVP user_Name optional, //RFC3588 + set of Access_Network_Charging_Identifier_AVP acc_nc_ident optional, // TS 129 214 + Access_Network_Charging_Address_AVP acc_nc_addr optional, // TS 129 214 + set of Flows_AVP flows optional, // TS 129 214 + set of Subscription_Id_AVP subscription_Id optional, // TS 129 214 + Abort_Cause_AVP abort_Cause optional, // TS 129 214 + IP_CAN_Type_AVP ip_Can optional, // TS 129 214 + RAT_Type_AVP rat_Type optional, // TS 129 214 + Sponsored_Connectivity_Data_AVP sponsored_Connectivity_Data optional,// TS 129 214 + Origin_State_Id_AVP origin_State_Id optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of Class_AVP class optional, // TS 129 214 + Session_Release_Cause_AVP session_Release_Cause optional, // TS 129 212 & TS129 215 + set of Event_Trigger_AVP event_Trigger optional, // TS 129 212 & TS129 215 + Event_Report_Indication_AVP event_Report_Indication optional, // TS 129 212 + set of Charging_Rule_Remove_AVP charging_Rule_Remove optional, // TS 129 212 + set of Charging_Rule_Install_AVP charging_Rule_Install optional, // TS 129 212 + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, // TS 129 212 + set of QoS_Information_AVP qoS_Information optional, // TS 129 212 & TS129 215 + Revalidation_Time_AVP revalidation_Time optional, // TS 129 212 + set of Usage_Monitoring_Information_AVP usage_Monitoring_Information optional, // TS 129 212 + set of QoS_Rule_Install_AVP qoS_Rule_Install optional, //S9 (TS129 215) only + set of QoS_Rule_Remove_AVP qoS_Rule_Remove optional, //S9 (TS129 215) only + set of Subses_Decision_Info_AVP subsession_Decision_Info optional, //S9 (TS129 215) only + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, //S9 (TS129 215) only + Multiple_BBERF_Action_AVP multiple_BBERF_Action optional, //S9 (TS129 215) only + set of Proxy_Info_AVP proxy_Info optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of Route_Record_AVP route_Record optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + G_S_U_Pool_Identifier_AVP g_s_u_Pool_Identifier optional, //TS132 299 only + Service_Identifier_AVP service_Identifier optional, //TS132 299 only + Rating_Group_AVP rating_Group optional, //TS132 299 only + set of AVP_Type aVP_Type optional //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 +// } +// with { +// variant (acc_nc_ident) "fieldPresent=bytes(4, 502)" +// variant (flows) "fieldPresent=bytes(4, 510)" +// variant (subscription_Id) "fieldPresent=bytes(4, 443)" +// variant (class) "fieldPresent=bytes(4, 25)" +// variant (event_Trigger) "fieldPresent=bytes(4, 1006)" +// variant (charging_Rule_Remove) "fieldPresent=bytes(4, 1002)" +// variant (charging_Rule_Install) "fieldPresent=bytes(4, 1001)" +// variant (qoS_Information) "fieldPresent=bytes(4, 1016)" +// variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record RAA_MSG{ + //Ref: RFC3588 8.3.2. Re-Auth-Answer + DiameterHeader header,// ::= < Diameter Header: 258, PXY > + Session_Id_AVP session_Id,//fixed pos. //RFC3588 & TS 129 214 & TS 129 212 + RAA_Body_AVP rAA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 258)" + } + + type set RAA_Body_AVP { + Result_Code_AVP result_Code optional, //RFC3588req & TS 129 214opt & TS 129 212opt & TS129 215opt + Origin_Host_AVP origin_Host, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Origin_Realm_AVP origin_Realm,//required //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Experimental_Result_AVP experimental_Result optional, //TS 129 214 & TS 129 212 & TS129 215 + User_Name_AVP user_Name optional, //RFC3588 + set of Media_Component_Description_AVP media_Component_Description optional,//TS 129 214 + Service_URN_AVP service_URN optional, //TS 129 214 + Origin_State_Id_AVP origin_State_Id optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of Class_AVP class optional, //TS 129 214 + IP_CAN_Type_AVP iP_CAN_Type optional, //TS 129 212 & TS129 215 + RAT_Type_AVP rat_Type optional, //TS 129 212 & TS129 215 + record length (0..2) of AN_GW_Address_AVP aN_GW_Address optional, //TS 129 212 & TS129 215 + ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, //TS 129 212 & TS129 215 + ThreeGPP_SGSN_Address_AVP threeGPP_SGSN_Address optional, //TS 129 212 & TS129 215 + ThreeGPP_SGSN_IPv6_Address_AVP threeGPP_SGSN_IPv6_Address optional,//TS 129 212 & TS129 215 + RAI_AVP rAI optional, //TS 129 212 & TS129 215 + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional,//TS 129 212 & TS129 215 + ThreeGPP_MS_TimeZone_AVP threeGPP_MS_TimeZone optional, //TS 129 212 & TS129 215 + set of Charging_Rule_Report_AVP charging_Rule_Report optional, //TS 129 212 + Error_Message_AVP error_Message optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Error_Reporting_Host_AVP error_Reporting_Host optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of Failed_AVP failed optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of Redirect_Host_AVP redirect_Host optional, //RFC3588 & TS 129 214 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC3588 & TS 129 214 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC3588 & TS 129 214 + Framed_IP_Address_AVP framed_IP_Address optional, //S9 (TS129 215) only + Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, //S9 (TS129 215) only + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, //S9 (TS129 215) only + QoS_Information_AVP qoS_Information optional, //S9 (TS129 215) only + set of QoS_Rule_Report_AVP qoS_Rule_Report optional, //S9 (TS129 215) only + set of Subses_Enforcement_Info_AVP subsesion_Enforcement_Info optional, //S9 (TS129 215) only + User_CSG_Information_AVP user_CSG_Information optional, //S9 (TS129 215) only + set of Proxy_Info_AVP proxy_Info optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of AVP_Type aVP_Type optional //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 +// } +// with { +// variant (media_Component_Description) "fieldPresent=bytes(4, 517)" +// variant (class) "fieldPresent=bytes(4, 25)" +// variant (aN_GW_Address) "fieldPresent=bytes(4, 1050)" +// variant (charging_Rule_Report) "fieldPresent=bytes(4, 1018)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (redirect_Host) "fieldPresent=bytes(4, 292)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record ACR_MSG{ + //Ref: RFC3588 9.7.1. Accounting-Request + DiameterHeader header,// ::= < Diameter Header: 271, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + ACR_Body_AVP aCR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 271)" + } + + type set ACR_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Destination_Realm_AVP destination_Realm, + Accounting_Record_Type_AVP accounting_Record_Type, + Accounting_Record_Number_AVP accounting_Record_Number,//required + Acct_Application_Id_AVP acct_Application_Id optional,//optional + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + User_Name_AVP user_Name optional, + set of Supported_Features_AVP supported_Features optional, //specified in RFC4006 + Accounting_Sub_Session_Id_AVP accounting_Sub_Session_Id optional, + Acct_Session_Id_AVP acct_Session_Id optional, + Acct_Multi_Session_Id_AVP acct_Multi_Session_Id optional, + Acct_Interim_Interval_AVP acct_Interim_Interval optional, + Accounting_Realtime_Required_AVP accounting_Realtime_Required optional, + Origin_State_Id_AVP origin_State_Id optional, + Event_Timestamp_AVP event_Timestamp optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + Service_Context_Id_AVP service_Context_Id optional, //TS132 299 only + Service_Information_AVP service_Information optional, //TS132 299 only + set of AVP_Type aVP_Type optional +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record ACA_MSG{ + //Ref: RFC3588 9.7.2. Accounting-Answer + DiameterHeader header ,// ::= < Diameter Header: 271, PXY > + Session_Id_AVP session_Id,//fixed pos. + ACA_Body_AVP aCA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 271)" + } + + type set ACA_Body_AVP { + Result_Code_AVP result_Code,//required + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Accounting_Record_Type_AVP accounting_Record_Type, + Accounting_Record_Number_AVP accounting_Record_Number,//required + Acct_Application_Id_AVP acct_Application_Id optional,//optional + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + User_Name_AVP user_Name optional, + Accounting_Sub_Session_Id_AVP accounting_Sub_Session_Id optional, + Acct_Session_Id_AVP acct_Session_Id optional, + Acct_Multi_Session_Id_AVP acct_Multi_Session_Id optional, + Error_Reporting_Host_AVP error_Reporting_Host optional, + Acct_Interim_Interval_AVP acct_Interim_Interval optional, + Accounting_Realtime_Required_AVP accounting_Realtime_Required optional, + Origin_State_Id_AVP origin_State_Id optional, + Event_Timestamp_AVP event_Timestamp optional, + set of Proxy_Info_AVP proxy_Info optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record ASR_MSG{ + //Ref: RFC3588 8.5.1. Abort-Session-Request + DiameterHeader header ,// ::= < Diameter Header: 274, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + ASR_Body_AVP aSR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 274)" + } + + type set ASR_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Destination_Realm_AVP destination_Realm, + Destination_Host_AVP destination_Host, + Auth_Application_Id_AVP auth_Application_Id, + Abort_Cause_AVP abort_cause optional,//present in ETSI TS 129 214 p.5.6.7 + User_Name_AVP user_Name optional, + Origin_State_Id_AVP origin_State_Id optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record ASA_MSG{ + //Ref: RFC3588 8.5.2. Abort-Session-Answer + DiameterHeader header,// ::= < Diameter Header: 274, PXY > + Session_Id_AVP session_Id,//fixed pos. + ASA_Body_AVP aSA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 274)" + } + + type set ASA_Body_AVP { + Result_Code_AVP result_Code,//required + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + User_Name_AVP user_Name optional, + Origin_State_Id_AVP origin_State_Id optional, + Error_Message_AVP error_Message optional, + Error_Reporting_Host_AVP error_Reporting_Host optional, + set of Failed_AVP failed optional, + set of Redirect_Host_AVP redirect_Host optional, + Redirect_Host_Usage_AVP redirect_Host_Usage optional, + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, + set of Proxy_Info_AVP proxy_Info optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (redirect_Host) "fieldPresent=bytes(4, 292)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record STR_MSG{ + //Ref: RFC3588 8.4.1. Session-Termination-Request + DiameterHeader header,// ::= < Diameter Header: 275, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + STR_Body_AVP sTR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 275)" + } + + type set STR_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Destination_Realm_AVP destination_Realm, + Auth_Application_Id_AVP auth_Application_Id, + Termination_Cause_AVP termination_Cause,//requ. + User_Name_AVP user_Name optional, + Destination_Host_AVP destination_Host optional, + set of Class_AVP class optional, + Origin_State_Id_AVP origin_State_Id optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (class) "fieldPresent=bytes(4, 25)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record STA_MSG{ + //Ref: RFC3588 8.4.2. Session-Termination-Answer + DiameterHeader header,// ::= < Diameter Header: 275, PXY > + Session_Id_AVP session_Id,//fixed pos. + STA_Body_AVP sTA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 275)" + } + + type set STA_Body_AVP { + Result_Code_AVP result_Code optional,//required + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + User_Name_AVP user_Name optional, + set of Class_AVP class optional, + Error_Message_AVP error_Message optional, + Error_Reporting_Host_AVP error_Reporting_Host optional, + set of Failed_AVP failed optional, + Sponsored_Connectivity_Data_AVP sponsored_Connectivity_Data optional,//present in ETSI TS 129 214 p.5.6.6 + Origin_State_Id_AVP origin_State_Id optional, + set of Redirect_Host_AVP redirect_Host optional, + Redirect_Host_Usage_AVP redirect_Host_Usage optional, + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, + set of Proxy_Info_AVP proxy_Info optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (class) "fieldPresent=bytes(4, 25)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (redirect_Host) "fieldPresent=bytes(4, 292)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + /**/ + type record DWR_MSG{ + //Ref: RFC3588 5.5.1. Device-Watchdog-Request + DiameterHeader header,// ::= < Diameter Header: 280, REQ > + DWR_Body_AVP dWR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 280)" + } + + type set DWR_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Origin_State_Id_AVP origin_State_Id optional, + set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs +// } +// with { +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record DWA_MSG{ + //Ref: RFC3588 5.5.2. Device-Watchdog-Answer + DiameterHeader header,// ::= < Diameter Header: 280 > + DWA_Body_AVP dWA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 280)" + } + + type set DWA_Body_AVP { + Result_Code_AVP result_Code,//required + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm,//required + Error_Message_AVP error_Message optional, + set of Failed_AVP failed optional, + Origin_State_Id_AVP origin_State_Id optional, + set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs +// } +// with { +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record DPR_MSG{ + // Ref: RFC3588 5.4.1. Disconnect-Peer-Request + DiameterHeader header,// ::= < Diameter Header: 282, REQ > + DPR_Body_AVP dPR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 282)" + } + + type set DPR_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Disconnect_Cause_AVP disconnect_Cause,//requ. + set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs +// } +// with { +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record DPA_MSG{ + //Ref: RFC3588 5.4.2. Disconnect-Peer-Answer + DiameterHeader header,// ::= < Diameter Header: 282 > + DPA_Body_AVP dPA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 282)" + } + + type set DPA_Body_AVP { + Result_Code_AVP result_Code,//required + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm,//required + Error_Message_AVP error_Message optional, + set of Failed_AVP failed optional, + set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs +// } +// with { +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + } // End of group RFC3588 + group RFC4740{ + + /* Codes on Cx_Dx */ + type record UAR_MSG{ + //Ref: TS 129 229 6.1.1. User-Authorization-Request(UAR:300) Command + //Ref: RFC4740 8.1. User-Authorization-Request(UAR:283) Command + DiameterHeader header,// ::= < Diameter Header: 283 or 300, PXY > + Session_Id_AVP session_Id,//fixed pos. + UAR_Body_AVP uAR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 283)" + } + + type set UAR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + SIP_AOR_AVP sIP_AOR optional, //required only inRFC4740 + Destination_Host_AVP destination_Host optional, //RFC4740 & TS129 229 + User_Name_AVP user_Name optional, //RFC4740 & required in TS129 229 + SIP_Visited_Network_Id_AVP sIP_Visited_Network_Id optional, //required only in RFC4740 + SIP_User_Authorization_Type_AVP sIP_User_Authorization_Type optional, //required only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only in TS129 229 + Public_Identity_AVP public_Identity optional, //required only in TS129 229 + Visited_Network_Identifier_AVP visited_Network_Identifier optional, //required only in TS129 229 + User_Authorization_Type_AVP user_Authorization_Type optional, //only in TS129 229 + UAR_Flags_AVP uAR_Flags optional, //only in TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 + set of Route_Record_AVP route_Record optional, //RFC4740 + set of AVP_Type aVP_Type optional //RFC4740 +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record UAA_MSG{ + //Ref: TS 129 229 6.1.2. User-Authorization-Answer (UAA:300) Command + //Ref: RFC4740 8.2. User-Authorization-Answer (UAA:283) Command + DiameterHeader header,// ::= < Diameter Header: 283 or 300, PXY > + Session_Id_AVP session_Id,//fixed pos. + UAA_Body_AVP uAA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 283)" + } + + type set UAA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //required in RFC4740 & TS129 229 + SIP_Server_URI_AVP sIP_Server_URI optional, //RFC4740 + SIP_Server_Capabilities_AVP sIP_Server_Capabilities optional, //RFC4740 + Authorization_Lifetime_AVP authorization_Lifetime optional, //RFC4740 + Auth_Grace_Period_AVP auth_Grace_Period optional, //RFC4740 + Redirect_Host_AVP redirect_Host optional, //RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4740 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + Server_Name_AVP server_Name optional, //only TS129 229 + Server_Capabilities_AVP server_Capabilities optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record SAR_MSG{ + //Ref: TS 129 229 6.1.3. Server-Assignment-Request (SAR:301) Command + //Ref: RFC4740 8.3. Server-Assignment-Request (SAR:284) Command + DiameterHeader header,// ::= < Diameter Header: 284 or 301, PXY > + Session_Id_AVP session_Id,//fixed pos. + SAR_Body_AVP sAR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 284)" + } + + type set SAR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + SIP_Server_Assignment_Type_AVP sIP_Server_Assignment_Type optional, //required only in RFC4740 + SIP_User_Data_Already_Available_AVP sIP_User_Data_Already_Available optional,//required only in RFC4740 + Destination_Host_AVP destination_Host optional, //RFC4740 & TS129 229 + User_Name_AVP user_Name optional, //RFC4740 & TS129 229 + SIP_Server_URI_AVP sIP_Server_URI optional, //only in RFC4740 + set of SIP_Supported_User_Data_Type_AVP sIP_Supported_User_Data_Type optional, //only in RFC4740 + set of SIP_AOR_AVP sIP_AOR optional, //only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only in TS129 229 + set of Public_Identity_AVP public_Identity optional, //only in TS129 229 + Wildcarded_Public_Identity_AVP wildcarded_Public_Identity optional, //only in TS129 229 + Server_Name_AVP server_Name optional, //required only in TS129 229 + Server_Assignment_Type_AVP server_Assignment_Type optional, //required only in TS129 229 + User_Data_Already_Available_AVP user_Data_Already_Available optional, //required only in TS129 229 + SCSCF_Restoration_Info_AVP sCSCF_Restoration_Info optional, //only in TS129 229 + Multiple_Registration_Indication_AVP multiple_Registration_Indication optional,//only in TS129 229 + Session_Priority_AVP session_Priority optional, //only in TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 + set of Route_Record_AVP route_Record optional, //RFC4740 + set of AVP_Type aVP_Type optional //RFC4740 +// } +// with { +// variant (sIP_Supported_User_Data_Type) "fieldPresent=bytes(4, 375)" +// variant (sIP_AOR) "fieldPresent=bytes(4, 122)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record SAA_MSG{ + //Ref: TS 129 229 6.1.4. Server-Assignment-Answer (SAA:301) Command + // Ref: RFC4740 8.4. Server-Assignment-Answer (SAA:284) Command + DiameterHeader header ,// ::= < Diameter Header: 284 or 301, PXY > + Session_Id_AVP session_Id,//fixed pos. + SAA_Body_AVP sAA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 284)" + } + + type set SAA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + set of SIP_User_Data_AVP sIP_User_Data optional, //required only in RFC4740 + SIP_Accounting_Information_AVP sIP_Accounting_Information optional, //required only in RFC4740 + set of SIP_Supported_User_Data_Type_AVP sIP_Supported_User_Data_Type optional, //only in RFC4740 + User_Name_AVP user_Name optional, //RFC4740 & TS129 229 + Auth_Grace_Period_AVP auth_Grace_Period optional, //only in RFC4740 + Authorization_Lifetime_AVP authorization_Lifetime optional, //only in RFC4740 + Redirect_Host_AVP redirect_Host optional, //only in RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //only in RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + User_Data_AVP user_Data optional, //only TS129 229 + Charging_Information_AVP charging_Information optional, //only TS129 229 + Associated_Identities_AVP associated_Identities optional, //only TS129 229 + Loose_Route_Indication_AVP loose_Route_Indication optional, //only TS129 229 + set of SCSCF_Restoration_Info_AVP sCSCF_Restoration_Info optional, //only TS129 229 + Associated_Registered_Identities_AVP associated_Registered_Identities optional, //only TS129 229 + Server_Name_AVP server_Name optional, //only TS129 229 + Wildcarded_Public_Identity_AVP wildcarded_Public_Identity optional, //only TS129 229 + Priviledged_Sender_Indication_AVP priviledged_Sender_Indication optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 +// } +// with { +// variant (sIP_User_Data) "fieldPresent=bytes(4, 389)" //presence check for inline defined lists +// variant (sIP_Supported_User_Data_Type) "fieldPresent=bytes(4, 388)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record LIR_MSG{ + //Ref: TS 129 229 6.1.5. Location-Info-Request (LIR:302) Command + //Ref: RFC4740 8.5. Location-Info-Request (LIR:285) Command + DiameterHeader header ,// ::= < Diameter Header: 285 or 302, PXY > + Session_Id_AVP session_Id,//fixed pos. + LIR_Body_AVP lIR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 285)" + } + + type set LIR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + SIP_AOR_AVP sIP_AOR optional, //required only in RFC4740 + Destination_Host_AVP destination_Host optional, //RFC4740 & TS129 229 + Originating_Request_AVP originating_Request optional, //only TS129 229 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + Public_Identity_AVP public_Identity optional, //required only in TS129 229 + User_Authorization_Type_AVP user_Authorization_Type optional, //only TS129 229 + Session_Priority_AVP session_Priority optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record LIA_MSG{ + //Ref: TS 129 229 6.1.6. Location-Info-Answer (LIA:302) Command + //Ref: RFC4740 8.6. Location-Info-Answer (LIA:285) Command + DiameterHeader header ,// ::= < Diameter Header: 285 or 302, PXY > + Session_Id_AVP session_Id,//fixed pos. + LIA_Body_AVP lIA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 285)" + } + + type set LIA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + SIP_Server_URI_AVP sIP_Server_URI optional, //only in RFC4740 + SIP_Server_Capabilities_AVP sIP_Server_Capabilities optional, //only in RFC4740 + Auth_Grace_Period_AVP auth_Grace_Period optional, //only in RFC4740 + Authorization_Lifetime_AVP authorization_Lifetime optional, //only in RFC4740 + Redirect_Host_AVP redirect_Host optional, //only in RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //only in RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + Server_Name_AVP server_Name optional, //only TS129 229 + Server_Capabilities_AVP server_Capabilities optional, //only TS129 229 + Wildcarded_Public_Identity_AVP wildcarded_Public_Identity optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record MAR_MSG{ + //Ref: TS 129 229 6.1.7. Multimedia-Auth-Request (MAR:303) Command + //Ref: RFC4740 8.7. Multimedia-Auth-Request (MAR:286) Command + DiameterHeader header ,// ::= < Diameter Header: 286 or 303, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + MAR_Body_AVP mAR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 286)" + } + + type set MAR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + SIP_AOR_AVP sIP_AOR optional, //required in RFC4740 + SIP_Method_AVP sIP_Method optional, //required in RFC4740 + Destination_Host_AVP destination_Host optional, //RFC4740 & TS129 229 + User_Name_AVP user_Name optional, //RFC4740 & required in TS129 229 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + Public_Identity_AVP public_Identity optional, //required only in TS129 229 + SIP_Server_URI_AVP sIP_Server_URI optional, //only in RFC4740 + SIP_Number_Auth_Items_AVP sIP_Number_Auth_Items optional, //RFC4740 & required in TS129 229 + SIP_Auth_Data_Item_AVP sIP_Auth_Data_Item optional, //required in TS129 229 + Server_Name_AVP server_Name optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + + type record MAA_MSG{ + //Ref: TS 129 229 6.1.8. Multimedia-Auth-Answer (MAA:303) Command + //Ref: RFC4740 8.8. Multimedia-Auth-Answer (MAA:286) Command + DiameterHeader header ,// ::= < Diameter Header: 286 or 303, PXY > + Session_Id_AVP session_Id,//fixed pos. + MAA_Body_AVP mAA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 286)" + } + + type set MAA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + User_Name_AVP user_Name optional, //RFC4740 & TS129 229 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + Public_Identity_AVP public_Identity optional, //required only in TS129 229 + SIP_AOR_AVP sIP_AOR optional, //only in RFC4740 + SIP_Number_Auth_Items_AVP sIP_Number_Auth_Items optional, //RFC4740 & TS129 229 + set of SIP_Auth_Data_Item_AVP sIP_Auth_Data_Item optional, //TS129 229 + Auth_Grace_Period_AVP auth_Grace_Period optional, //only in RFC4740 + Authorization_Lifetime_AVP authorization_Lifetime optional, //only in RFC4740 + Redirect_Host_AVP redirect_Host optional, //only in RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //only in RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //only in RFC4740 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 +// } +// with { +// variant (sIP_Auth_Data_Item) "fieldPresent=bytes(4, 376)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record RTR_MSG{ + //Ref: TS 129 229 6.1.9. Registration-Termination-Request (RTR:304) Command + //Ref: RFC4740 8.9. Registration-Termination-Request (RTR:287) Command + DiameterHeader header ,// ::= < Diameter Header: 287 or 304, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + RTR_Body_AVP rTR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 287)" + } + + type set RTR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Host_AVP destination_Host, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + SIP_Deregistration_Reason_AVP sIP_Deregistration_Reason optional, //required only in RFC4740 + User_Name_AVP user_Name optional, //RFC4740 & required in TS129 229 + set of SIP_AOR_AVP sIP_AOR optional, //only in RFC4740 + Associated_Identities_AVP associated_Identities optional, //only TS129 229 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + set of Public_Identity_AVP public_Identity optional, //only TS129 229 + Deregistration_Reason_AVP deregistration_Reason optional, //required only in TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 +// } +// with { +// variant (sIP_AOR) "fieldPresent=bytes(4, 122)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record RTA_MSG{ + //Ref: TS 129 229 6.1.10. Registration-Termination-Answer (RTA:304) Command + //Ref: RFC4740 8.10. Registration-Termination-Answer (RTA:287) Command + DiameterHeader header ,// ::= < Diameter Header: 287 or 304, PXY > + Session_Id_AVP session_Id,//fixed pos. + RTA_Body_AVP rTA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 287)" + } + + type set RTA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Authorization_Lifetime_AVP authorization_Lifetime optional, //only in RFC4740 + Auth_Grace_Period_AVP auth_Grace_Period optional, //only in RFC4740 + Redirect_Host_AVP redirect_Host optional, //only in RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //only in RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //only in RFC4740 + Associated_Identities_AVP associated_Identities optional, //only TS129 229 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + set of Identity_with_Emergency_Registration_AVP identity_with_Emergency_Registration optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PPR_MSG{ + //Ref: TS 129 229 6.1.11. Push-Profile-Request (PPR:305) Command + //Ref: RFC4740 8.11. Push-Profile-Request (PPR:288) Command + DiameterHeader header ,// ::= < Diameter Header: 288 or 305, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + PPR_Body_AVP pPR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 288)" + } + + type set PPR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Host_AVP destination_Host, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + User_Name_AVP user_Name , //RFC4740 & TS129 229 + set of SIP_User_Data_AVP sIP_User_Data optional, //only in RFC4740 + SIP_Accounting_Information_AVP sIP_Accounting_Information optional, //only in RFC4740 + Authorization_Lifetime_AVP authorization_Lifetime optional, //only in RFC4740 + Auth_Grace_Period_AVP auth_Grace_Period optional, //only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + User_Data_AVP user_Data optional, //only TS129 229 + Charging_Information_AVP charging_Information optional, //only TS129 229 + SIP_Auth_Data_Item_AVP sIP_Auth_Data_Item optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 +// } +// with { +// variant (sIP_User_Data) "fieldPresent=bytes(4, 289)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PPA_MSG{ + //Ref: TS 129 229 6.1.12. Push-Profile-Answer (PPA: 305) Command + //Ref: RFC4740 8.12. Push-Profile-Answer (PPA: 288) Command + DiameterHeader header ,// ::= < Diameter Header: 288 or 305, PXY > + Session_Id_AVP session_Id,//fixed pos. + PPA_Body_AVP pPA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 288)" + } + + type set PPA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Redirect_Host_AVP redirect_Host optional, //only in RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //only in RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + }// End of group RFC4740 + + group Sh_Intf{ + /* Codes on Sh */ + type record UDR_MSG{ + // Ref: 3GPP TS 29.329 6.1.1 User-Data-Request (UDR) Command + DiameterHeader header ,//< User-Data-Request> ::= < Diameter Header: 306, REQ, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + UDR_Body_AVP uDR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 306)" + } + + type set UDR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + User_Identity_AVP user_Identity optional,//requi. but for testing set to optional TP_Sh_HSS_MS_01 + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + Server_Name_AVP server_Name optional, + set of Service_Indication_AVP service_Indication optional, + set of Data_Reference_AVP data_Reference,//requi. + set of Identity_Set_AVP identity_Set optional, + Requested_Domain_AVP requested_Domain optional, + Current_Location_AVP current_Location optional, + set of DSAI_Tag_AVP dSAI_Tag optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (service_Indication) "fieldPresent=bytes(4, 704)" +// variant (data_Reference) "fieldPresent=bytes(4, 703)" +// variant (identity_Set) "fieldPresent=bytes(4, 708)" +// variant (dSAI_Tag) "fieldPresent=bytes(4, 711)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record UDA_MSG{ + // Ref: 3GPP TS 29.329 6.1.2 User-Data-Answer (UDA) Command + DiameterHeader header ,//< Diameter Header: 306, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + UDA_Body_AVP uDA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 306)" + } + + type set UDA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + User_Data_AVP user_Data optional, + Redirect_Host_AVP redirect_Host optional, //RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4740 + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PUR_MSG{ + // Ref: 3GPP TS 29.329 6.1.3 Profile-Update-Request (PUR) Command + DiameterHeader header ,//< Diameter Header: 307, REQ, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + PUR_Body_AVP pUR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 307)" + } + + type set PUR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + User_Identity_AVP user_Identity,//requi. + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + set of Data_Reference_AVP data_Reference, //ETSI TS 129 329 + User_Data_AVP user_Data,//Requi. + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PUA_MSG{ + // Ref: 3GPP TS 29.329 6.1.4 Profile-Update-Answer (PUA) Command + DiameterHeader header ,//< Diameter Header: 307, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + PUA_Body_AVP pUA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 307)" + } + + type set PUA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + Repository_Data_ID_AVP repository_Data_Id optional, + Data_Reference_AVP data_Reference optional, //ETSI TS 129 329 + set of Supported_Features_AVP supported_Features optional, + Redirect_Host_AVP redirect_Host optional, //RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4740 + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record SNR_MSG{ + // Ref: 3GPP TS 29.329 6.1.5 Subscribe-Notifications-Request (SNR) Command + DiameterHeader header ,//< Diameter Header: 308, REQ, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + SNR_Body_AVP sNR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 308)" + } + + type set SNR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + User_Identity_AVP user_Identity,//requi. + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + set of Service_Indication_AVP service_Indication optional, + Send_Data_Indication_AVP send_Data_Indication optional, + Server_Name_AVP server_Name optional, + Subs_Req_Type_AVP subs_Req_Type, + set of Data_Reference_AVP data_Reference, + set of Identity_Set_AVP identity_Set optional, + Expiry_Time_AVP expiry_Time optional, + set of DSAI_Tag_AVP dSAI_Tag optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional, + User_Name_AVP user_Name optional //RFC4740 & required in TS129 229 +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (service_Indication) "fieldPresent=bytes(4, 704)" +// variant (data_Reference) "fieldPresent=bytes(4, 703)" +// variant (identity_Set) "fieldPresent=bytes(4, 708)" +// variant (dSAI_Tag) "fieldPresent=bytes(4, 711)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record SNA_MSG{ + // Ref: 3GPP TS 29.329 6.1.6 Subscribe-Notifications-Answer (SNA) Command + DiameterHeader header ,//< Diameter Header: 308, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + SNA_Body_AVP sNA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 308)" + } + + type set SNA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Auth_Session_State_AVP auth_Session_State,//requi. + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + set of Supported_Features_AVP supported_Features optional, + User_Data_AVP user_Data optional, + Expiry_Time_AVP expiry_Time optional, + Redirect_Host_AVP redirect_Host optional, //RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4740 + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PNR_MSG{ + // Ref: 3GPP TS 29.329 6.1.7 Push-Notification-Request (PNR) Command + DiameterHeader header ,//< Diameter Header: 309, REQ, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + PNR_Body_AVP pNR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 309)" + } + + type set PNR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + User_Identity_AVP user_Identity,//requi. + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + User_Data_AVP user_Data,//Requi. + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PNA_MSG{ + // Ref: 3GPP TS 29.329 6.1.8 Push-Notifications-Answer (PNA) Command + DiameterHeader header ,//< Diameter Header: 309, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + PNA_Body_AVP pNA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 309)" + } + + type set PNA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + Redirect_Host_AVP redirect_Host optional, //RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4740 + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + } // End of group Sh_Intf + + group RFC4006{ + /* Codes on Ro and Rf interface */ + //ACR ACA message is defined in RFC3588 group + + + type record CCR_MSG{ + // Ref: RFC4006 3.1. Credit-Control-Request (CCR) Command + DiameterHeader header ,//< Diameter Header: 272, REQ, PXY> + Session_Id_AVP session_Id,//fixed pos. //RFC4006 & TS129 212 + CCR_Body_AVP cCR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 272)" + } + + type set CCR_Body_AVP { + Origin_Host_AVP origin_Host,//requi. //RFC4006 & TS129 212 & TS129 215 + Origin_Realm_AVP origin_Realm,//requi. //RFC4006 & TS129 212 & TS129 215 + Destination_Realm_AVP destination_Realm,//requi. //RFC4006 & TS129 212 & TS129 215 + Auth_Application_Id_AVP auth_Application_Id, //RFC4006 & TS129 212 & TS129 215 + Service_Context_Id_AVP service_Context_Id optional, //RFC4006 + CC_Request_Type_AVP cC_Request_Type, //RFC4006 & TS129 212 & TS129 215 + CC_Request_Number_AVP cC_Request_Number, //RFC4006 & TS129 212 & TS129 215 + Destination_Host_AVP destination_Host optional, //RFC4006 & TS129 212 & TS129 215 + User_Name_AVP user_Name optional, //RFC4006 + CC_Sub_Session_Id_AVP cC_Sub_Session_Id optional, //RFC4006 + Acct_Multi_Session_Id_AVP acct_Multi_Session_Id optional, //RFC4006 + Origin_State_Id_AVP origin_State_Id optional, //RFC4006 & TS129 212 & TS129 215 + Event_Timestamp_AVP event_Timestamp optional, //RFC4006 + set of Subscription_Id_AVP subscription_Id optional, //RFC4006 & TS129 212 & TS129 215 + Service_Identifier_AVP service_Identifier optional, //RFC4006 + Termination_Cause_AVP termination_Cause optional, //RFC4006 & TS129 212 & TS129 215 + Requested_Service_Unit_AVP requested_Service_Unit optional, //RFC4006 + Requested_Action_AVP requested_Action optional, //RFC4006 + set of Used_Service_Unit_AVP used_Service_Unit optional, //RFC4006 + AoC_Request_Type_AVP aoc_Request_Type_AVP optional, //TS132 299 only + Multiple_Services_Indicator_AVP multiple_Services_Indicator optional, //RFC4006 + set of Multiple_Services_Credit_Control_AVP multiple_Services_Credit_Control optional, //RFC4006 + set of Service_Parameter_Info_AVP service_Parameter_Info optional, //RFC4006 + CC_Correlation_Id_AVP cC_Correlation_Id optional, //RFC4006 + set of Supported_Features_AVP supported_Features optional, //TS129 212 & TS129 215 + Network_Request_Support_AVP network_Request_Support optional, //TS129 212 & TS129 215 + set of Packet_Filter_Information_AVP packet_Filter_Information optional,//TS129 212 & TS129 215 + Packet_Filter_Operation_AVP packet_Filter_Operation optional, //TS129 212 & TS129 215 + Bearer_Identifier_AVP bearer_Identifier optional, //TS129 212 only + Bearer_Operation_AVP bearer_Operation optional, //TS129 212 only + Framed_IP_Address_AVP framed_IP_Address optional, //TS129 212 & TS129 215 + Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, //TS129 212 & TS129 215 + IP_CAN_Type_AVP iP_CAN_Type optional, //TS129 212 & TS129 215 + ThreeGPP_RAT_Type_AVP threeGPP_RAT_Type optional, //TS129 212 only + RAT_Type_AVP rat_Type optional, //TS129 212 & TS129 215 + QoS_Information_AVP qoS_Information optional, //TS129 212 & TS129 215 + QoS_Negotiation_AVP qoS_Negotiation optional, //TS129 212 & TS129 215 + QoS_Upgrade_AVP qoS_Upgrade optional, //TS129 212 & TS129 215 + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, //TS129 212 only + record length (0..2) of AN_GW_Address_AVP aN_GW_Address optional, //TS129 212 & TS129 215 + ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, //TS129 212 & TS129 215 + ThreeGPP_SGSN_Address_AVP threeGPP_SGSN_Address optional, //TS129 212 & TS129 215 + ThreeGPP_SGSN_IPv6_Address_AVP threeGPP_SGSN_IPv6_Address optional, //TS129 212 & TS129 215 + RAI_AVP rAI optional, //TS129 212 & TS129 215 + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, //TS129 212 & TS129 215 + ThreeGPP_MS_TimeZone_AVP threeGPP_MS_TimeZone optional, //TS129 212 & TS129 215 + Called_Station_Id_AVP called_Station_Id optional, //TS129 212 only + PDN_Connection_ID_AVP pDN_Connection_ID optional, //TS129 212 only + Bearer_Usage_AVP bearer_Usage optional, //TS129 212 only + Online_AVP online optional, //TS129 212 only + Offline_AVP offline optional, //TS129 212 only + set of TFT_Packet_Filter_Information_AVP tFT_Packet_Filter_Information optional, //TS129 212 only + set of Charging_Rule_Report_AVP charging_Rule_Report optional, //TS129 212 only + set of Event_Trigger_AVP event_Trigger optional, //TS129 212 & TS129 215 + Event_Report_Indication_AVP event_Report_Indication optional, //TS129 212 only + Access_Network_Charging_Address_AVP access_Network_Charging_Address optional, //TS129 212 only + set of Access_Network_Charging_Identifier_Gx_AVP access_Network_Charging_Identifier_Gx optional,//TS129 212 only + set of CoA_Information_AVP coA_Information optional, //TS129 212 only + set of Usage_Monitoring_Information_AVP usage_Monitoring_Information optional, //TS129 212 only + Routing_Rule_Install_AVP routing_Rule_Install optional, //TS129 212 only + Routing_Rule_Remove_AVP routing_Rule_Remove optional, //TS129 212 only + Maximum_Bandwidth_AVP maximum_Bandwidth optional, //TS129 212 only + Logical_Access_ID_AVP logical_Access_ID optional, //TS129 212 only + Physical_Access_ID_AVP physical_Access_ID optional, //TS129 212 only + Session_Linking_Indicator_AVP session_Linking_Indicator optional,//Gxx TS129 212 only + set of QoS_Rule_Report_AVP qoS_Rule_Report optional, //S9 (TS129 215) & Gxx (TS129 212) + set of Subses_Enforcement_Info_AVP subsesion_Enforcement_Info optional, //S9 (TS129 215) only + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, //S9 (TS129 215) & Gxx (TS129 212) + Multiple_BBERF_Action_AVP multiple_BBERF_Action optional, //S9 (TS129 215) only + User_CSG_Information_AVP user_CSG_Information optional, //S9 (TS129 215) & Gxx (TS129 212) + User_Equipment_Info_AVP user_Equipment_Info optional, //RFC4006 & TS129 212 & TS129 215 + set of Proxy_Info_AVP proxy_Info optional, //RFC4006 & TS129 212 & TS129 215 + set of Route_Record_AVP route_Record optional, //RFC4006 & TS129 212 & TS129 215 + Service_Information_AVP service_Information optional, //TS132 299 only + set of AVP_Type aVP_Type optional //RFC4006 & TS129 212 & TS129 215 +// } +// with { +// variant (subscription_Id) "fieldPresent=bytes(4, 443)" +// variant (used_Service_Unit) "fieldPresent=bytes(4, 446)" +// variant (multiple_Services_Credit_Control) "fieldPresent=bytes(4, 456)" +// variant (service_Parameter_Info) "fieldPresent=bytes(4, 440)" +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (packet_Filter_Information) "fieldPresent=bytes(4, 1061)" +// variant (aN_GW_Address) "fieldPresent=bytes(4, 1050)" +// variant (tFT_Packet_Filter_Information) "fieldPresent=bytes(4, 1013)" +// variant (charging_Rule_Report) "fieldPresent=bytes(4, 1018)" +// variant (event_Trigger) "fieldPresent=bytes(4, 1006)" +// variant (access_Network_Charging_Identifier_Gx) "fieldPresent=bytes(4, 1022)" +// variant (coA_Information) "fieldPresent=bytes(4, 1039)" +// variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record CCA_MSG{ + // Ref: RFC4006 3.2. Credit-Control-Answer (CCA) Command + DiameterHeader header ,//< Diameter Header: 272, PXY> + Session_Id_AVP session_Id,//fixed pos. //RFC4006 & TS129 212 + CCA_Body_AVP cCA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 272)" + } + + type set CCA_Body_AVP { + Result_Code_AVP result_Code optional, //RFC4006 & TS129 212 & TS129 215 + Origin_Host_AVP origin_Host,//requi. //RFC4006 & TS129 212 & TS129 215 + Origin_Realm_AVP origin_Realm,//requi. //RFC4006 & TS129 212 & TS129 215 + Auth_Application_Id_AVP auth_Application_Id, //RFC4006 & TS129 212 & TS129 215 + CC_Request_Type_AVP cC_Request_Type, //RFC4006 & TS129 212 & TS129 215 + CC_Request_Number_AVP cC_Request_Number, //RFC4006 & TS129 212 & TS129 215 + User_Name_AVP user_Name optional, //RFC4006 + CC_Session_Failover_AVP cC_Session_Failover optional, //RFC4006 + CC_Sub_Session_Id_AVP cC_Sub_Session_Id optional, //RFC4006 + Acct_Multi_Session_Id_AVP acct_Multi_Session_Id optional, //RFC4006 + Origin_State_Id_AVP origin_State_Id optional, //RFC4006 & TS129 212 & TS129 215 + Event_Timestamp_AVP event_Timestamp optional, //RFC4006 + Granted_Service_Unit_AVP granted_Service_Unit optional, //RFC4006 + set of Multiple_Services_Credit_Control_AVP multiple_Services_Credit_Control optional, //RFC4006 + Cost_Information_AVP cost_Information optional, //RFC4006 + Final_Unit_Indication_AVP final_Unit_Indication optional, //RFC4006 + Check_Balance_Result_AVP check_Balance_Result optional, //RFC4006 + Low_Balance_Indication_AVP low_Balance_Indication optional, //TS132 299 only + Remaining_Balance_AVP remaining_Balance optional, //TS132 299 only + Credit_Control_Failure_Handling_AVP credit_Control_Failure_Handling optional, //RFC4006 + Direct_Debiting_Failure_Handling_AVP direct_Debiting_Failure_Handling optional, //RFC4006 + Validity_Time_AVP validity_Time optional, //RFC4006 + set of Redirect_Host_AVP redirect_Host optional, //RFC4006 & TS129 212 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4006 & TS129 212 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4006 & TS129 212 + Experimental_Result_AVP experimental_Result optional, //TS129 212 & TS129 215 + set of Supported_Features_AVP supported_Features optional, //TS129 212 & TS129 215 + Bearer_Control_Mode_AVP bearer_Control_Mode optional, //TS129 212 & TS129 215 + set of Event_Trigger_AVP event_Trigger optional, //TS129 212 & TS129 215 + set of Charging_Rule_Remove_AVP charging_Rule_Remove optional, //TS129 212 only + set of Charging_Rule_Install_AVP charging_Rule_Install optional, //TS129 212 only + Charging_Information_AVP charging_Information optional, //TS129 212 & TS129 215 + Online_AVP online optional, //TS129 212 only + Offline_AVP offline optional, //TS129 212 only + set of QoS_Information_AVP qoS_Information optional, //TS129 212 & TS129 215 + Revalidation_Time_AVP revalidation_Time optional, //TS129 212 only + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, //TS129 212 only + Bearer_Usage_AVP bearer_Usage optional, //TS129 212 only + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, //TS129 212 only + set of Usage_Monitoring_Information_AVP usage_Monitoring_Information optional, //TS129 212 only + set of CSG_Information_Reporting_AVP cSG_Information_Reporting optional,//TS129 212 & TS129 215 + User_CSG_Information_AVP user_CSG_Information optional, //TS129 212 only + Error_Message_AVP error_Message optional, //TS129 212 & TS129 215 + Error_Reporting_Host_AVP error_Reporting_Host optional, //TS129 212 & TS129 215 + set of QoS_Rule_Install_AVP qoS_Rule_Install optional, //S9 (TS129 215) only + set of QoS_Rule_Remove_AVP qoS_Rule_Remove optional, //S9 (TS129 215) only + set of Subses_Decision_Info_AVP subsession_Decision_Info optional, //S9 (TS129 215) only + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, //S9 (TS129 215) only + set of Proxy_Info_AVP proxy_Info optional, //RFC4006 & TS129 212 & TS129 215 + set of Route_Record_AVP route_Record optional, //RFC4006 & TS129 212 & TS129 215 + set of Failed_AVP failed optional, //RFC4006 & TS129 212 & TS129 215 + Service_Information_AVP service_Information optional, //TS132 299 only + set of AVP_Type aVP_Type optional //RFC4006 & TS129 212 & TS129 215 +// } +// with { +// variant (multiple_Services_Credit_Control) "fieldPresent=bytes(4, 456)" +// variant (redirect_Host) "fieldPresent=bytes(4, 292)" +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (event_Trigger) "fieldPresent=bytes(4, 1006)" +// variant (charging_Rule_Remove) "fieldPresent=bytes(4, 1002)" +// variant (charging_Rule_Install) "fieldPresent=bytes(4, 1001)" +// variant (qoS_Information) "fieldPresent=bytes(4, 1016)" +// variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" +// variant (cSG_Information_Reporting) "fieldPresent=bytes(4, 1071)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + } // End of group RFC4006 + + group Rx_Intf{ + + type record AAR_MSG{ + //Ref: ETSI TS 129 214 5.6.1 -Request + DiameterHeader header ,// ::= < Diameter Header: 265, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + AAR_Body_AVP aAR_Body +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 265)" + } + + type set AAR_Body_AVP { + //DRMP dRMP optional, //ETSI TS 129 214 V15.5 from RFC 7944 + Auth_Application_Id_AVP auth_Application_Id, + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Destination_Realm_AVP destination_Realm, + Destination_Host_AVP destination_Host optional, + IP_Domain_AVP iP_Domain optional, //ETSI TS 129 214 V15.5 + AF_Application_Identifier_AVP af_Application_Id optional,//present in ETSI TS 129 214 p.5.6.7 + set of Media_Component_Description_AVP media_Component_Description optional, + Service_Info_Status_AVP service_Info_Status optional, + AF_Charging_Identifier_AVP af_Charging_Identifier optional, + SIP_Forking_Indication_AVP sip_Forking_Indication optional, + set of Specific_Action_AVP specific_Action optional, + set of Subscription_Id_AVP subscription_Id optional, + //OC_Supported_Features_AVP oC_Supported_Features optional, //ETSI TS 129 214 V15.5 from RFC7583 + set of Supported_Features_AVP supported_Features optional, + Reservation_Priority_AVP reservation_Priority optional, + Framed_IP_Address_AVP framed_IP_Address optional, + Framed_IPv6_Prefix_AVP framed_IPv6_Address optional, + Called_Station_Id_AVP called_Station_Id optional, + Service_URN_AVP service_URN optional, + Sponsored_Connectivity_Data_AVP sponsored_Connectivity_Data optional, + MPS_Identifier_AVP mps_Identifier optional, + GCS_Identifier_AVP gcs_Identifier optional, //ETSI TS 129 214 V15.5 + MCPTT_Identifier_AVP mcptt_Identifier optional, //ETSI TS 129 214 V15.5 + MCVideo_Identifier_AVP mCVideo_Identifier optional, //ETSI TS 129 214 V15.5 + IMS_Content_Identifier_AVP iMS_Content_Identifier optional, //ETSI TS 129 214 V15.5 + IMS_Content_Type_AVP iMS_Content_Type optional, //ETSI TS 129 214 V15.5 + Rx_Request_Type_AVP rx_Request_Type optional, //ETSI TS 129 214 V15.5 + set of Required_Access_Info_AVP required_Access_Info optional, //ETSI TS 129 214 V15.5 + AF_Requested_Data_AVP aF_Requested_Data optional, //ETSI TS 129 214 V15.5 + //Reference_Id_AVP reference_Id optional, //ETSI TS 129 214 V15.5 from TS 129 154 + Pre_emption_Control_Info_AVP pre_emption_Control_Info optional, //ETSI TS 129 214 V15.5 + User_Name_AVP user_Name optional, + Origin_State_Id_AVP origin_State_Id optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant (media_Component_Description) "fieldPresent=bytes(4, 517)" +// variant (specific_Action) "fieldPresent=bytes(4, 513)" +// variant (subscription_Id) "fieldPresent=bytes(4, 443)" +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record AAA_MSG{ + //Ref: ETSI TS 129 214 5.6.2 -> Answer + DiameterHeader header,// ::= < Diameter Header: 265, PXY > + Session_Id_AVP session_Id,//fixed pos. + AAA_Body_AVP aAA_Body +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 265)" + } + + type set AAA_Body_AVP { + //DRMP dRMP optional, //ETSI TS 129 214 V15.5 from RFC 7944 + Auth_Application_Id_AVP auth_Application_Id, + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Result_Code_AVP result_Code optional,//required + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State optional, //ETSI TS 129 214 V15.5 + set of Access_Network_Charging_Identifier_AVP access_network_charging_Identifier optional, + Access_Network_Charging_Address_AVP access_network_charging_address optional, + Acceptable_Service_Info_AVP acceptable_service_info optional, + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, //ETSI TS 129 214 V15.5 + //AN_Trusted_AVP aN_Trusted optional, //ETSI TS 129 214 V15.5 from TS 129 273 + Service_Authorization_Info_AVP service_Authorization_Info optional, //ETSI TS 129 214 V15.5 + IP_CAN_Type_AVP ip_Can_Type optional, + //NetLoc_Access_Support_AVP netLoc_Access_Support optional, //ETSI TS 129 214 V15.5 from TS 129 212 + RAT_Type_AVP rat_Type optional, + set of Flows_AVP flows optional, //ETSI TS 129 214 V15.5 + //OC_Supported_Features_AVP oC_Supported_Features optional, //ETSI TS 129 214 V15.5 from RFC7683 + //OC_OLR_AVP oC_OLR optional, //ETSI TS 129 214 V15.5 from RFC7683 + set of Supported_Features_AVP supported_Features optional, + set of Subscription_Id_AVP subscription_Id_AVP optional, //ETSI TS 129 214 V15.5 + User_Equipment_Info_AVP user_Equipment_Info optional, //ETSI TS 129 214 V15.5 + ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, //ETSI TS 129 214 V15.5 + set of Class_AVP class_ optional, + User_Name_AVP user_Name optional, + Error_Message_AVP error_Message optional, + Error_Reporting_Host_AVP error_Reporting_Host optional, + Failed_AVP failed optional, + Retry_Interval_AVP retry_Interval optional, //ETSI TS 129 214 V15.5 + Origin_State_Id_AVP origin_State_Id optional, + set of Redirect_Host_AVP redirect_Host optional, + Redirect_Host_Usage_AVP redirect_Host_Usage optional, + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, + set of Proxy_Info_AVP proxy_Info optional, + //set of Load_AVP load optional, //ETSI TS 129 214 V15.5 + set of AVP_Type aVP_Type optional +// } +// with { +// variant (access_network_charging_Identifier) "fieldPresent=bytes(4, 502)" +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (class) "fieldPresent=bytes(4, 25)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (redirect_Host) "fieldPresent=bytes(4, 292)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (aVP_Type) "fieldPresent=!isEOF" + } + + } // End of group Rx + + group S6a_Intf { + // Update-Location-Request (ULR) Command - Ref: TS 129 272 7.2.3 + type record ULR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 316, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + ULR_Body_AVP uLR_Body + } + + type set of Supported_Features_AVP Supported_Features_AVPs; + + type set ULR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + Supported_Features_AVPs supported_Features optional, + Terminal_Information_AVP terminal_Information optional, + RAT_Type_AVP rat_Type, + ULR_Flags_AVP ulr_Flags, + UE_SRVCC_Capability_AVP ue_SRVCC_Capability optional, + Visited_PLMN_Id_AVP visited_PLMN_Id, + SGSN_Number_AVP sgsn_Number optional, + Homogeneous_Support_AVP homogeneous_Support optional, + GMLC_Address_AVP gmlc_Address optional, + Active_APN_AVP active_APN optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Update-Location-Answer (ULA) Command - Ref: TS 129 272 7.2.4 + type record ULA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 316, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + ULA_Body_AVP uLA_Body + } + type set ULA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Error_Diagnostic_AVP error_Diagnostic optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set of Supported_Features_AVP supported_Features optional, + ULA_Flags_AVP ula_Flags optional, + Subscription_Data_AVP subscription_Data optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Authentication-Information-Request (AIR) Command - Ref: TS 129 272 7.2.5 + type record AIR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 318, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + AIR_Body_AVP aIR_Body + } + type set AIR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + set of Supported_Features_AVP supported_Features optional, + Req_EUTRAN_Auth_Info_AVP req_EUTRAN_Auth_Info optional, + Req_UTRAN_GERAN_Auth_Info_AVP req_UTRAN_GERAN_Auth_Info optional, + Visited_PLMN_Id_AVP visited_PLMN_Id, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Authentication-Information-Answer (AIA) Command - Ref: TS 129 272 7.2.6 + type record AIA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 318, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + AIA_Body_AVP aIA_Body + } + type set AIA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Error_Diagnostic_AVP error_Diagnostic optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set of Supported_Features_AVP supported_Features optional, + Authentication_Info_AVP authentication_Info optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Cancel-Location-Request (CLR) Command - Ref: TS 129 272 7.2.7 + type record CLR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 317, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + CLR_Body_AVP cLR_Body + } + type set CLR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + set of Supported_Features_AVP supported_Features optional, + Cancellation_Type_AVP cancellation_Type, + CLR_Flags_AVP cLR_Flags optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Cancel-Location-Answer (CLA) Command - Ref: TS 129 272 7.2.8 + type record CLA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 317, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + CLA_Body_AVP cLA_Body + } + type set CLA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + set of Supported_Features_AVP supported_Features optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Insert-Subscriber-Data-Request (IDR) Command - Ref: TS 129 272 7.2.9 + type record IDR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 319, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + IDR_Body_AVP iDR_Body + } + type set IDR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + set of Supported_Features_AVP supported_Features optional, + Subscription_Data_AVP subscription_Data, + IDR_Flags_AVP iDR_Flags optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Insert-Subscriber-Data-Answer (IDA) Command - Ref: TS 129 272 7.2.10 + type record IDA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 319, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + IDA_Body_AVP iDA_Body + } + type set IDA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + set of Supported_Features_AVP supported_Features optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + IMS_Voice_PS_Sessions_Support_AVP iMS_Voice_PS_Sessions_Support optional, + Last_UE_Activity_Time_AVP last_UE_Activity_Time_AVP optional, + RAT_Type_AVP rat_Type optional, + IDA_Flags_AVP iDA_Flags optional, + EPS_User_State_AVP ePS_User_State optional, + EPS_Location_Information_AVP ePS_Location_Information optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Delete-Subscriber-Data-Request (DSR) Command - Ref: TS 129 272 7.2.11 + type record DSR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 320, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + DSR_Body_AVP dSR_Body + } + type set DSR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + set of Supported_Features_AVP supported_Features optional, + DSR_Flags_AVP dSR_Flags, + set of Context_Identifier_AVP context_Identifier optional, + Trace_Reference_AVP trace_Reference optional, + set of TS_Code_AVP tS_Code optional, + set of SS_Code_AVP sS_Code optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Delete-Subscriber-Data-Answer (DSA) Command - Ref: TS 129 272 7.2.12 + type record DSA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 320, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + DSA_Body_AVP dSA_Body + } + type set DSA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + set of Supported_Features_AVP supported_Features optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Error_Diagnostic_AVP error_Diagnostic optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + DSA_Flags_AVP dSA_Flags optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Purge-UE-Request (PUR) Command - Ref: TS 129 272 7.2.13 + type record PUER_MSG { + DiameterHeader header, + // ::= < Diameter Header: 321, REQ, PXY, 16777251 > + Session_Id_AVP session_Id, + // + PUER_Body_AVP pUER_Body + } + + type set PUER_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + User_Name_AVP user_Name,//Requi. + PUER_Flags_AVP pUER_Flags optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Purge-UE-Answer (PUA) Command - Ref: TS 129 272 7.2.14 + type record PUEA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 321, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + PUEA_Body_AVP pUEA_Body + } + + type set PUEA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + PUEA_Flags_AVP pUEA_Flags optional, + set of Supported_Features_AVP supported_Features optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Reset-Request (RSR) Command - Ref: TS 129 272 7.2.15 + type record RSR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 322, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + RSR_Body_AVP rSR_Body + } + type set RSR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host, + Destination_Realm_AVP destination_Realm, + set of Supported_Features_AVP supported_Features optional, + set of User_Id_AVP user_Id optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Reset-Answer (RSA) Command - Ref: TS 129 272 7.2.16 + type record RSA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 322, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + RSA_Body_AVP rSA_Body + } + type set RSA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + set of Supported_Features_AVP supported_Features optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Notify-Request (NOR) Command - Ref: TS 129 272 7.2.17 + type record NOR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 323, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + NOR_Body_AVP nOR_Body + } + type set NOR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + set of Supported_Features_AVP supported_Features optional, + Terminal_Information_AVP terminal_Information optional, + MIP6_Agent_Info_AVP mIP6_Agent_Info optional, + Visited_Network_Identifier_AVP visited_Network_Identifier optional, + Context_Identifier_AVP context_Identifier optional, + Service_Selection_AVP service_Selection optional, + Alert_Reason_AVP alert_Reason optional, + UE_SRVCC_Capability_AVP uE_SRVCC_Capability optional, + NOR_Flags_AVP nOR_Flags optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Notify-Answer (NOA) Command - Ref: TS 129 272 7.2.18 + type record NOA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 323, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + NOA_Body_AVP nOA_Body + } + type set NOA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set of Supported_Features_AVP supported_Features optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + } // End of group S6a + + + } // End of group MessageTypes + with{ + encode "DIAMETERCodec" + } + + group Other{ + + // Diameter Message Record(Header and Body(AVP's)). + type record Lower_Layer_Primitive { + Lower_Layer_Header ll_header, + DIAMETER_MSG pdu optional + } + //Abstract Service Primitive ist, Layer (TE) to Layer (SA) + + type record Lower_Layer_Header{ + ASP_type primitive, + charstring transport_used, + charstring ETS_address optional, + integer ETS_port optional, + charstring SUT_address optional, + integer SUT_port optional, + integer ETS_conn optional + } + //Abstract Service Primitive ist, Layer (TE) to Layer (SA) + + // ASP type definition. + type enumerated ASP_type { + CONNECT_REQUEST_E(1), + CONNECT_INDICATION_E(2), + CONNECT_CONFIRM_E(3), + DISCONNECT_REQUEST_E(4), + DISCONNECT_INDICATION_E(5), + DATA_REQUEST_E(6), + DATA_INDICATION_E(7), + LISTEN_REQUEST_E(8) + } + //Abstract Service Primitive ist, Layer (TE) to Layer (SA) + + } // End of group Other + + }//End group HeaderAndBodyTypes + +} with { + encode "DIAMETERCodec"; variant "" +} // End module LibDiameter_TypesAndValues diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..4a9bef32ba277d213bc9d5e3a35dbd0d10139b10 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn @@ -0,0 +1,4179 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter Base AVP types used by LibDiameter constructs.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new Base AVP types is ok; + */ +module LibDiameter_Types_Base_AVPs { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + // LibDiameter + // import from LibDiameter_Types_RfRo_AVPs all; + // import from LibDiameter_Types_Gx_AVPs all; + // import from LibDiameter_Types_CxDx_AVPs all; + + group AVPTypes{ + group AVP_Base_Types{ + //AVP Data Union(Integer,String,Record of and Grouped). + + type record GROUPED{ + AVP_Header aVP_Header, + set of AVP_Type aVP_Type + }; + + type union AVP_Data { + /* Ref: RFC3588 p.4.1 Basic Avp Data Formats */ + octetstring oCTETSTRING, + charstring cHARSTRING, + Int32 iNTEGER32, + Int64 iNTEGER64, + UInt32 uNSIGNED32, + UInt64 uNSIGNED64, + FLOAT32 fLOAT32, + FLOAT64 fLOAT64, + GROUPED gROUPED + } + + /* Ref: FRC3588 p.4.3 Derived Avp Data Formats */ + //changed addressFamily added ! + type record Address{ + Oct2 addressFamily, + IpAddress ipAddress + } + type union IpAddress { + IPv4Addr ipv4, + IPv6Addr ipv6 + } + //RFC3588 chapter 4.3: + // The Address format is derived from the OctetString AVP Base + // Format. It is a discriminated union, representing, for example a + // 32-bit (IPv4) [IPV4] or 128-bit (IPv6) [IPV6] address, most + // significant octet first. The first two octets of the Address + // AVP represents the AddressType, which contains an Address Family + // defined in [IANAADFAM]. The AddressType is used to discriminate + // the content and format of the remaining octets. + // -> check if IPv4(1) or IPv6(2) (http://www.iana.org/assignments/address-family-numbers/address-family-numbers.xml) + + type UInt32 Time; + + /* Diameter_Identity is FQDN - Fully Qualified Domain Name. + * host + * | 2nd level domain + * | | top level domain + * www.something.com + * host + * | 2nd level domain + * | | 3rd level domain + * | | | top level domain + * www.somtehing1.something2.com + * host + */ + type charstring Diameter_Identity; +// with { +// variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeCharstringWithPadding();decode=CodecHelper.decodeCharstringWithPadding()" +// variant "length=getIntTag('aVP_len')" +// } + type record GenericParam{ + /* pid : ";transport=" or ";protocol=" + * paramValue : + * - for pid ";transport=" paramValue can be "tcp" / "udp" / "sctp" + * - for pid ";protocol=" paramValue can be "diameter" / "radius" / "tacacs+" + * */ + charstring pid optional, + charstring paramValue optional + } + + type set of GenericParam SemicolonParam_List; + type record DiameterURI{ + /* The DiameterURI MUST follow the Uniform Resource Identifiers (URI) + * syntax [URI] rules specified below: + * No transport security used : "aaa://" FQDN [ port ] [ transport ] [ protocol ] + * Transport security used : "aaas://" FQDN [ port ] [ transport ] [ protocol ] + * - port = ":" 1*DIGIT (If absent, the default Diameter port (3868) is assumed.) + * - transport = ";transport=" transport-protocol + * transport-protocol = ( "tcp" / "sctp" / "udp" ) + * - protocol = ";protocol=" aaa-protocol (If absent, the default AAA protocol is diameter.) + * aaa-protocol = ( "diameter" / "radius" / "tacacs+" ) + * Examples: + * aaa://host.example.com;transport=tcp + * aaa://host.example.com;protocol=diameter + * aaa://host.example.com:6666;protocol=diameter + * aaa://host.example.com:6666;transport=tcp;protocol=diameter + * aaa://host.example.com:1813;transport=udp;protocol=radius + */ +// charstring scheme, // "aaa://" +// UserInfo userInfo, +// HostPort hostPort optional, +// SemicolonParam_List urlParameters optional + + //charstring scheme, // "aaa://" + //charstring diameterId_FQDN, + //UInt16 portField optional, + //SemicolonParam_List uriParameters optional + charstring scheme ("aaa", "aaas"), + charstring diameterId_FQDN, + integer portField optional,//eg: 3868 + charstring transport ("transport=tcp", "transport=sctp", "transport=udp") optional, + charstring protocol ("protocol=diameter", "protocol=radius", "protocol=tacacs+") optional + } + + type record IP_AddressMask{ + UTF8String addr, + UTF8String mask optional, + UTF8String ports optional + } + + type record IPFilterRule_Type{ + //RFC3588 +/* Action actions permit - Allow packets that match the rule. + deny - Drop packets that match the rule. + + Dir dir "in" is from the terminal, "out" is to the + terminal. + + Proto proto An IP protocol specified by number. The "ip" + keyword means any protocol will match. + Aaddr_mask + src and dst
[ports] +*/ + UTF8String action_, + UTF8String direction, + UTF8String proto, + IP_AddressMask src, //including optional ports + IP_AddressMask dst, //including optional ports + UTF8String options optional + } + //TODO Parser and Codec needed here (first version do not include this) +// with { +// variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeIPFilterRule_Type();decode=CodecHelper.decodeIPFilterRule_Type()" +// } + + type UInt32 AVP_Code (1..c_uInt32Max); + + //type Bit8 AVP_Flags; + type record AVP_Flags{ + Bit1 v_bit, + Bit1 m_bit, + Bit1 p_bit, + Bit5 reserved_bits + } + + type UInt24 AVP_Length; + type UInt32 AVP_Vendor_ID; + + type record AVP_Header{ + AVP_Code aVP_Code, + AVP_Flags aVP_flags, + AVP_Length aVP_len, + AVP_Vendor_ID aVP_vid optional + } + + type record AVP_Type { + AVP_Header aVP_Header, + AVP_Data aVP_Data optional + } + }//end group AVP_Base_Types + + group RFC_AVP3588_Types{ + + type enumerated Result_Code_Type{ + DIAMETER_DUMMY_E (0), + + DIAMETER_MULTI_ROUND_AUTH_E (1001), + + DIAMETER_SUCCESS_E (2001), + DIAMETER_LIMITED_SUCCESS_E (2002), + + DIAMETER_COMMAND_UNSUPPORTED_E (3001), + DIAMETER_UNABLE_TO_DELIVER_E (3002), + DIAMETER_REALM_NOT_SERVED_E (3003), + DIAMETER_TOO_BUSY_E (3004), + DIAMETER_LOOP_DETECTED_E (3005), + DIAMETER_REDIRECT_INDICATION_E (3006), + DIAMETER_APPLICATION_UNSUPPORTED_E (3007), + DIAMETER_INVALID_HDR_BITS_E (3008), + DIAMETER_INVALID_AVP_BITS_E (3009), + DIAMETER_UNKNOWN_PEER_E (3010), + + DIAMETER_AUTHENTICATION_REJECTED_E (4001), + DIAMETER_OUT_OF_SPACE_E (4002), + DIAMETER_ELECTION_LOST_E (4003), + + DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE_E (4181), + + DIAMETER_AVP_UNSUPPORTED_E (5001), + DIAMETER_UNKNOWN_SESSION_ID_E (5002), + DIAMETER_AUTHORIZATION_REJECTED_E (5003), + DIAMETER_INVALID_AVP_VALUE_E (5004), + DIAMETER_MISSING_AVP_E (5005), + DIAMETER_RESOURCES_EXCEEDED_E (5006), + DIAMETER_CONTRADICTING_AVPS_E (5007), + DIAMETER_AVP_NOT_ALLOWED_E (5008), + DIAMETER_AVP_OCCURS_TOO_MANY_TIMES_E (5009), + DIAMETER_NO_COMMON_APPLICATION_E (5010), + DIAMETER_UNSUPPORTED_VERSION_E (5011), + DIAMETER_UNABLE_TO_COMPLY_E (5012), + DIAMETER_INVALID_BIT_IN_HEADER_E (5013), + DIAMETER_INVALID_AVP_LENGTH_E (5014), + DIAMETER_INVALID_MESSAGE_LENGTH_E (5015), + DIAMETER_INVALID_AVP_BIT_COMBO_E (5016), + DIAMETER_NO_COMMON_SECURITY_E (5017), + DIAMETER_ERROR_SUBSESSION_E (5470) + } +// with { +// variant "length=32" +// } + + type enumerated Re_Auth_Req_Type{ + //Ref: RFC3588 8.12. Re-Auth-Request-Type AVP + AUTHORIZE_ONLY_E (0), + AUTHORIZE_AUTHENTICATE_E (1) + } +// with { +// variant "length=32" +// } + type enumerated Redirect_Host_Usage_Type{ + DONT_CACHE_E (0), + ALL_SESSION_E (1), + ALL_REALM_E (2), + REALM_AND_APPLICATION_E (3), + ALL_APPLICATION_E (4), + ALL_HOST_E (5), + ALL_USER_E (6) + } +// with { +// variant "length=32" +// } + type enumerated Acc_Record_Type{ + EVENT_RECORD_E (1), + START_RECORD_E (2), + INTERIM_RECORD_E (3), + STOP_RECORD_E (4) + } +// with { +// variant "length=32" +// } + type enumerated Acc_Realtime_Req_Type{ + DELIVER_AND_GRANT_E (1), + GRANT_AND_STORE_E (2), + GRANT_AND_LOSE_E (3) + } +// with { +// variant "length=32" +// } + + type enumerated Termination_Cause_Type{ + DIAMETER_LOGOUT_E (1), + DIAMETER_SERVICE_NOT_PROVIDED_E (2), + DIAMETER_BAD_ANSWER_E (3), + DIAMETER_ADMINISTRATIVE_E (4), + DIAMETER_LINK_BROKEN_E (5), + DIAMETER_AUTH_EXPIRED_E (6), + DIAMETER_USER_MOVED_E (7), + DIAMETER_SESSION_TIMEOUT_E (8) + } +// with { +// variant "length=32" +// } + type enumerated Disconnect_Cause_Type{ + REBOOTING_E (0), + BUSY_E (1), + DO_NOT_WANT_TO_TALK_TO_YOU_E (2) + } +// with { +// variant "length=32" +// } + type enumerated Auth_Session_State_Type{ + STATE_MAINTAINED_E (0), + NO_STATE_MAINTAINED_E (1) + } +// with { +// variant "length=32" +// } + //type DiameterURI SIP_AOR_Type;// RFC 4740 sec. 9.8 + type enumerated SIP_User_Auth_Ty_Type{ + //Ref: RFC4740, section 9.10 + REGISTRATION_E (0), + DEREGISTRATION_E (1), + REGISTRATION_AND_CAPABILITIES_E (2) + } +// with { +// variant "length=32" +// } + type enumerated SIP_Srv_Assgmt_Type{ + NO_ASSIGNMENT_E (0), + REGISTRATION_E (1), + RE_REGISTRATION_E (2), + UNREGISTERED_USER_E (3), + TIMEOUT_DEREGISTRATION_E (4), + USER_DEREGISTRATION_E (5), + TIMEOUT_DEREGISTRATION_STORE_SERVER_NAME_E (6), + USER_DEREGISTRATION_STORE_SERVER_NAME_E (7), + ADMINISTRATIVE_DEREGISTRATION_E (8), + AUTHENTICATION_FAILURE_E (9), + AUTHENTICATION_TIMEOUT_E (10), + DEREGISTRATION_TOO_MUCH_DATA_E (11) + } +// with { +// variant "length=32" +// } + + type enumerated SIP_Usr_Dat_Al_Av_Type{ + USER_DATA_NOT_AVAILABLE_E (0), + USER_DATA_ALREADY_AVAILABLE_E (1) + } +// with { +// variant "length=32" +// } + type enumerated SIP_Auth_Schm_Type{ + DIGEST_E (0), // RFC4740 Clause 9.5.1. SIP-Authentication-Scheme AVP + DIGEST_AKAv1_MD5_E (1), // TODO CHeck the value are correct + NASS_BUNDLE_E (2), // TODO CHeck the value are correct + GIBA_E (3), // TODO CHeck the value are correct + UNKNOWN_E + } +// with { +// variant "length=32" +// } + type enumerated SIP_Reason_Code_Type{ + PERMANENT_TERMINATION_E (0), + NEW_SIP_SERVER_ASSIGNED_E (1), + SIP_SERVER_CHANGE_E (2), + REMOVE_SIP_SERVER_E (3) + } +// with { +// variant "length=32" +// } + /* Types on Sh interface */ + type enumerated Data_Reference_Type{ + REPOSITORY_DATA_E (0), + IMS_PUBLIC_IDENTITY_E (10), + IMS_USER_STATE_E (11), + S_CSCF_NAME_E (12), + INITIAL_FILTER_CRITERIA_E (13), + LOCATION_INFORMATION_E (14), + USER_STATE_E (15), + CHARGING_INFORMATION_E (16), + MSISDN (17), + PSI_ACTIVATION_E (18), + DSAI_E (19), + SERVICE_LEVEL_TRACE_INFO_E (21), + IP_ADDRESS_SECURE_BINDING_INFORMATION_E (22), + SERVICE_PRIORITY_LEVEL_E (23), + SMS_REGISTRATION_INFO_E (24), + UE_REACHABILITY_FOR_IP_E (25), + TADS_INFORMATION_E (26), + STN_SR_E (27), + UE_SRVCC_CAPABILITY_E (28), + EXTENDED_PRIORITY_E (29), + CSRN_E (30), + REFERENCE_LOCATION_INFORMATION (31), + IMSI (32), + IMS_PRIVATE_USER_IDENTITY_E (33) + } +// with { +// variant "length=32" +// } + type enumerated Subs_Req_Ty_Type{ + SUBSCRIBE_E (0), + UNSUBSCRIBE_E (1) + } +// with { +// variant "length=32" +// } + type enumerated Request_Domain_Type{ + CS_DOMAIN_E (0), + PS_DOMAIN_E (1) + } +// with { +// variant "length=32" +// } + type enumerated Current_Location_Type{ + DO_NOT_NEED_INITIATE_ACTIVATE_LOCATION_RETRIEVAL_E (0), + INITIATE_ACTIVATE_LOCATION_RETRIEVAL_E (1) + } +// with { +// variant "length=32" +// } + type enumerated Identity_Set_Type{ + ALL_IDENTITIES_E (0), + REGISTERED_IDENTITIES_E (1), + IMPLICIT_IDENTITIES_E (2), + ALIAS_IDENTITIES_E (3) + } +// with { +// variant "length=32" +// } + type enumerated Send_Data_Indication_Type{ + USER_DATA_NOT_REQUESTED_E (0), + USER_DATA_REQUESTED_E (1) + } +// with { +// variant "length=32" +// } + type enumerated Experimental_Result_Type{ // See http://diameter-protocol.blogspot.fr/2012/10/list-of-experimental-result-codes.html + DIAMETER_FIRST_REGISTRATION_E (2001), + DIAMETER_SUBSEQUENT_REGISTRATION_E (2002), + DIAMETER_UNREGISTERED_SERVICE_E (2003), // due to TS 129 299 Clause 6.2.1.3 + DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED_E (2004), + //DIAMETER_UNREGISTERED_SERVICE_E (2005), // deleted because belongs to Result-Code AVP and not Experimental Result Code see: RFC 4740 Diameter SIP Application Clause 10.1.1. Success Result-Code AVP Values + DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE_E (4181), + DIAMETER_ERROR_USER_UNKNOWN_E (5001), + DIAMETER_ERROR_IDENTITIES_DONT_MATCH_E (5002), + DIAMETER_ERROR_IDENTITY_NOT_REGISTERED_E (5003), + DIAMETER_ERROR_ROAMING_NOT_ALLOWED_E (5004), + DIAMETER_ERROR_IDENTITY_ALREADY_REGISTERED_E (5005), + DIAMETER_ERROR_AUTH_SCHEME_NOT_SUPPORTED_E (5006), + DIAMETER_ERROR_IN_ASSIGNMENT_TYPE_E (5007), + DIAMETER_ERROR_TOO_MUCH_DATA_E (5008), + DIAMETER_ERROR_NOT_SUPPORTED_USER_DATA_E (5009), + // Ref: ETSI TS 129 214 5.5 + INVALID_SERVICE_INFORMATION_E (5061), + FILTER_RESTRICTIONS_E (5062), + REQUESTED_SERVICE_NOT_AUTHORIZED_E (5063), + DUPLICATED_AF_SESSION_E (5064), + IP_CAN_SESSION_NOT_AVAILABLE_E (5065), + UNAUTHORIZED_NON_EMERGENCY_SESSION_E (5066), + UNAUTHORIZED_SPONSORED_DATA_CONNECTIVITY_E (5067), + + // Ref: ETSI TS 129 329 + DIAMETER_ERROR_USER_DATA_NOT_RECOGNIZED_E (5100), + DIAMETER_ERROR_OPERATION_NOT_ALLOWED_E (5101), + DIAMETER_ERROR_USER_DATA_CANNOT_BE_READ_E (5102), + DIAMETER_ERROR_USER_DATA_CANNOT_BE_MODIFIED_E (5103), + DIAMETER_ERROR_USER_DATA_CANNOT_BE_NOTIFIED_E (5104), + DIAMETER_ERROR_TRANSPARENT_DATA_OUT_OF_SYNC_E (5105), + DIAMETER_ERROR_SUBS_DATA_ABSENT(5106), + DIAMETER_ERROR_DSAI_NOT_AVAILABLE_E (5108), + DIAMETER_USER_DATA_NOT_AVAILABLE_E (4100), + DIAMETER_PRIOR_UPDATE_IN_PROGRESS_E (4101), + + + + + + DIAMETER_ERROR_INITIAL_PARAMETERS_E (5140), + DIAMETER_ERROR_TRIGGER_EVENT_E (5141), + DIAMETER_PCC_RULE_EVENT_E (5142), + DIAMETER_ERROR_BEARER_NOT_AUTHORIZED_E (5143), + DIAMETER_ERROR_TRAFFIC_MAPPING_INFO_REJECTED_E (5144), + DIAMETER_ERROR_CONFLICTING_REQUEST_E (5147), + // Ref: 3GPP TS 29.215 + DIAMETER_ERROR_SUBSESSION_E (5470), + DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION_E (5420),//(9990), // Set the correct error code value - See ETSI TS 129 272 Clause 5.2.1.1.3 Detailed behaviour of the HSS + DIAMETER_ERROR_RAT_NOT_ALLOWED_E (5421),//(9991), // Set the correct error code value - See ETSI TS 129 272 Clause 5.2.1.1.3 Detailed behaviour of the HSS + DIAMETER_ERROR_EQUIPMENT_UNKNOWN_E (5422), //See ETSI TS 129 272 Clause 7.4.3 + DIAMETER_ERROR_UNKOWN_SERVING_NODE_E (5423),//See ETSI TS 129 272 Clause 7.4.3 + unknown + } +// with { +// variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;length=32;decode=CodecHelper.decodeExperimental_Result_Type()" +// } + + type enumerated CC_Request_Ty_Type{ + // Ref: RFC4006 8.3. CC-Request-Type AVP + INITIAL_REQUEST_E (1), + UPDATE_REQUEST_E (2), + TERMINATION_REQUEST_E (3), + EVENT_REQUEST_E (4) + } +// with { +// variant "length=32" +// } + + type enumerated Subscription_Id_Ty_Type{ + // Ref: RFC4006 8.47. Subscription-Id-Type AVP + END_USER_E164_E (0), + END_USER_IMSI_E (1), + END_USER_SIP_URI_E (2), + END_USER_NAI_E (3), + END_USER_PRIVATE_E (4) + } +// with { +// variant "length=32" +// } + type enumerated Requested_Action_Type{ + // Ref: RFC4006 8.41. Requested-Action AVP + DIRECT_DEBITING_E (0), + REFUND_ACCOUNT_E (1), + CHECK_BALANCE_E (2), + PRICE_ENQUIRY_E (3) + } +// with { +// variant "length=32" +// } + type enumerated Tariff_Change_Usage_Type{ + // Ref: RFC4006 8.27. Tariff-Change-Usage AVP + UNIT_BEFORE_TARIFF_CHANGE_E (0), + UNIT_AFTER_TARIFF_CHANGE_E (1), + UNIT_INDETERMINATE_E (2) + } +// with { +// variant "length=32" +// } + type enumerated Multiple_Serv_Indi_Type{ + // Ref: RFC4006 8.40. Multiple-Services-Indicator AVP + MULTIPLE_SERVICES_NOT_SUPPORTED_E (0), + MULTIPLE_SERVICES_SUPPORTED_E (1) + } +// with { +// variant "length=32" +// } + type enumerated CC_Unit_Ty_Type { + // Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP + TIME_E (0), + MONEY_E (1), + TOTAL_OCTETS_E (2), + INPUT_OCTETS_E (3), + OUTPUT_OCTETS_E (4), + SERVICE_SPECIFIC_UNITS_E (5) + } +// with { +// variant "length=32" +// } + + type enumerated Final_Unit_Action_Type{ + // Ref: RFC4006 8.35. Final-Unit-Action AVP + TERMINATE_E (0), + REDIRECT_E (1), + RESTRICT_ACCESS_E (2) + } +// with { +// variant "length=32" +// } + type enumerated Redirect_Address_Ty_Type{ + // Ref: RFC4006 8.38. Redirect-Address-Type AVP + IPV4_ADDRESS_E (0), + IPV6_ADDRESS_E (1), + URL_E (2), + SIP_URI_E (3) + } +// with { +// variant "length=32" +// } + type enumerated User_Equipment_Info_Ty_Type { + // Ref: RFC4006 8.50. User-Equipment-Info-Type AVP + IMEISV_E (0), + MAC_E (1), + EUI64_E (2), + MODIFIED_EUI64_E (3) + } +// with { +// variant "length=32" +// } + type enumerated CC_Session_Failover_Type{ + // Ref: RFC4006 8.4. CC-Session-Failover AVP + FAILOVER_NOT_SUPPORTED_E (0), + FAILOVER_SUPPORTED_E (1) + } +// with { +// variant "length=32" +// } + type enumerated Check_Balance_Result_Type{ + // Ref: RFC4006 8.6. Check-Balance-Result AVP + ENOUGH_CREDIT_E (0), + NO_CREDIT_E (1) + } +// with { +// variant "length=32" +// } + type enumerated Credit_Cont_Fail_Hand_Type{ + // Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP + TERMINATE_E (0), + CONTINUE_E (1), + RETRY_AND_TERMINATE_E (2) + } +// with { +// variant "length=32" +// } + type enumerated Direct_Debi_Fail_Hand_Type{ + // Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP + TERMINATE_OR_BUFFER_E (0), + CONTINUE_E (1) + } +// with { +// variant "length=32" +// } + }//end group RFC3588 types + + group AVP_GxFrom132_299_Types{ + + type enumerated CSG_Access_Mode{ + // Ref: ETSI TS 132 299 7.2.46A + CLOSED_MODE_E (0), + HYBRID_MODE_E (1) + } +// with { +// variant "length=32" +// } + + type enumerated CSG_Membership_Indication{ + // Ref: ETSI TS 132 299 7.2.46B + NOT_CSG_MEMBER_E (0), + CSG_MEMBER_E (1) + } +// with { +// variant "length=32" +// } + + }//end group AVP_GxFrom132_299_Types + + group AVP_GxFrom132_422_Types{ + + type enumerated Job_Type{ + // Ref: ETSI TS 132 422 5.10.1 + IMMEDIATE_MDT_ONLY_E (0), + LOGGED_MDT_ONLY_E (1), + TRACE_ONLY_E (2), + IMMEDIATE_MDT_AND_TRACE_E (3) + } +// with { +// variant "length=32" +// } + + type enumerated Report_Interval{ + // Ref: ETSI TS 132 422 5.10.5 + REPORT_INTERVAL_250MS_E (0), + REPORT_INTERVAL_500MS_E (1), + REPORT_INTERVAL_1000MS_E (2), + REPORT_INTERVAL_2000MS_E (3), + REPORT_INTERVAL_3000MS_E (4), + REPORT_INTERVAL_4000MS_E (5), + REPORT_INTERVAL_6000MS_E (6), + REPORT_INTERVAL_8000MS_E (7), + REPORT_INTERVAL_12000MS_E (8), + REPORT_INTERVAL_16000MS_E (9), + REPORT_INTERVAL_20000MS_E (10), + REPORT_INTERVAL_24000MS_E (11), + REPORT_INTERVAL_28000MS_E (12), + REPORT_INTERVAL_32000MS_E (13), + REPORT_INTERVAL_64000MS_E (14), + REPORT_INTERVAL_120MS_E (15), + REPORT_INTERVAL_240MS_E (16), + REPORT_INTERVAL_480MS_E (17), + REPORT_INTERVAL_640MS_E (18), + REPORT_INTERVAL_1024MS_E (19), + REPORT_INTERVAL_2048MS_E (20), + REPORT_INTERVAL_5120MS_E (21), + REPORT_INTERVAL_10240MS_E (22), + REPORT_INTERVAL_60000MS_E (23), + REPORT_INTERVAL_360000MS_E (24), + REPORT_INTERVAL_720000MS_E (25), + REPORT_INTERVAL_1800000MS_E (26), + REPORT_INTERVAL_3600000MS_E (27) + } +// with { +// variant "length=32" +// } + + type enumerated Report_Amount{ + // Ref: ETSI TS 132 422 5.10.6 + AMOUNT_1_E (0), + AMOUNT_2_E (1), + AMOUNT_4_E (2), + AMOUNT_8_E (3), + AMOUNT_16_E (4), + AMOUNT_32_E (5), + AMOUNT_64_E (6), + AMOUNT_INFINITY_E (7) + } +// with { +// variant "length=32" +// } + + type enumerated Logging_Interval{ + // Ref: ETSI TS 132 422 5.10.8 + LOGGING_INTERVAL_1_28_E (0), + LOGGING_INTERVAL_2_56_E (1), + LOGGING_INTERVAL_3_12_E (2), + LOGGING_INTERVAL_10_24_E (3), + LOGGING_INTERVAL_20_49_E (4), + LOGGING_INTERVAL_30_72_E (5), + LOGGING_INTERVAL_40_96_E (6), + LOGGING_INTERVAL_61_44_E (7) + } +// with { +// variant "length=32" +// } + + type enumerated Logging_Duration{ + // Ref: ETSI TS 132 422 5.10.9 + LOGGING_DURATION_600SEC_E (0), + LOGGING_DURATION_1200SEC_E (1), + LOGGING_DURATION_2400SEC_E (2), + LOGGING_DURATION_3600SEC_E (3), + LOGGING_DURATION_5400SEC_E (4), + LOGGING_DURATION_7200SEC_E (5) + } +// with { +// variant "length=32" +// } + + type enumerated Trace_Depth{ + // Ref: ETSI TS 132 422 5.3 + MINIMUM_E (0), + MEDIUM_E (1), + MAXIMUM_E (2), + MINIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (3), + MEDIUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (4), + MAXIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (5) + } +// with { +// variant "length=32" +// } + + type record Sponsor_Identity_AVP{ + //Ref: ETSI TS 129 214 Sponsor_Identity AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 531);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + }//end group AVP_GxFrom132_422_Types + + }//end group AVP_Types + group AVPs{ + /* AVPNs */ + group RFC3588_AVPs{ + type record Origin_Host_AVP{ + //Ref: RFC3588 6.3. Origin-Host AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } +// with { +// variant "present=bytes(4, 264);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Origin_Realm_AVP{ + //Ref: RFC3588 6.4. Origin-Realm AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } +// with { +// variant "present=bytes(4, 296);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Host_IP_Address_AVP{ + //Ref: RFC3588 5.3.5. Host-IP-Address AVP + AVP_Header aVP_Header,// + Address aVP_Data + } +// with { +// variant "present=bytes(4, 257);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Vendor_Id_AVP{ + //Ref: RFC3588 5.3.3. Vendor-Id AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 266)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Product_Name_AVP{ + //Ref: RFC3588 5.3.7. Product-Name AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 269);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Origin_State_Id_AVP{ + //Ref: RFC3588 8.16. Origin-State-Id AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 278);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Supported_Vendor_Id_AVP{ + //Ref; 5.3.6. Supported-Vendor-Id AVP + AVP_Header aVP_Header,// + Int32 aVP_Data + } +// with { +// variant "present=bytes(4, 265);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Auth_Application_Id_AVP{ + //Ref: RFC3588 6.8. Auth-Application-Id AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 258)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Inband_Security_Id_AVP{ + //Ref: RFC3588 6.10. Inband-Security-Id AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 299);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Acct_Application_Id_AVP{ + //Ref: RFC3588 6.9. Acct-Application-Id AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 259)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Vendor_Specific_Appl_Id_AVP{ + //Ref: RFC3588 6.11. Vendor-Specific-Application-Id AVP + AVP_Header aVP_Header,// ::= < AVP Header: 260 > + set of Vendor_Id_AVP vendor_Id optional, + set of Auth_Application_Id_AVP auth_Application_Id optional, + set of Acct_Application_Id_AVP acct_Application_Id optional + } +// with { +// variant "present=bytes(4, 260);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (vendor_Id) "fieldPresent=bytes(4, 266)&&CodecHelper.isAvailable()" +// variant (auth_Application_Id) "fieldPresent=bytes(4, 258)&&CodecHelper.isAvailable()" +// variant (acct_Application_Id) "fieldPresent=bytes(4, 259)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Firmware_Revision_AVP{ + //Ref: RFC3588 5.3.4. Firmware-Revision AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 267);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Result_Code_AVP{ + //Ref: RFC3588 7.1. Result-Code AVP + AVP_Header aVP_Header,// + //UInt32 + Result_Code_Type aVP_Data + } +// with { +// variant "present=bytes(4, 268);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Error_Message_AVP{ + //Ref: RFC3588 7.3. Error-Message AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 281);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Failed_AVP{ + //Ref: RFC3588 7.5. Failed-AVP AVP + AVP_Header aVP_Header,// + set of AVP_Type aVP + } +// with { +// variant "present=bytes(4, 279);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP) "condition=CodecHelper.leaveScope()" +// } + type record Session_Id_AVP{ + //Ref: RFC3588 8.8. Session-Id AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 263);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Destination_Realm_AVP{ + //Ref: RFC3588 6.6. Destination-Realm AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } +// with { +// variant "present=bytes(4, 283);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Destination_Host_AVP{ + //Ref: RFC3588 6.5. Destination-Host AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } +// with { +// variant "present=bytes(4, 293);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Re_Auth_Request_Type_AVP{ + //Ref: RFC3588 8.12. Re-Auth-Request-Type AVP + AVP_Header aVP_Header,// + Re_Auth_Req_Type aVP_Data + } +// with { +// variant "present=bytes(4, 285);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record User_Name_AVP{ + //Ref: RFC3588 8.14. User-Name AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 1);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Proxy_Host_AVP{ + //Ref: RFC3588 6.7.3. Proxy-Host AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } +// with { +// variant "present=bytes(4, 280);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Proxy_State_AVP{ + //Ref: RFC3588 6.7.4. Proxy-State AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 33);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + type record Proxy_Info_AVP{ + //Ref: RFC3588 6.7.2. Proxy-Info AVP + AVP_Header aVP_Header,// + Proxy_Host_AVP proxy_Host,//requi. + Proxy_State_AVP proxy_State,//requi. + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 284);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Route_Record_AVP{ + //Ref: RFC3588 6.7.1. Route-Record AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } +// with { +// variant "present=bytes(4, 282);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Error_Reporting_Host_AVP{ + //Ref: RFC3588 7.4. Error-Reporting-Host AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } +// with { +// variant "present=bytes(4, 294);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Redirect_Host_AVP{ + /* Ref: RFC3588 6.12. Redirect-Host AVP + NOTE: In Ref aVP_Data type is not defined, I presume it should be Diameter_Identity as the other xxx_Host_AVPs */ + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } +// with { +// variant "present=bytes(4, 292);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Redirect_Host_Usage_AVP{ + //Ref: RFC3588 6.13. Redirect-Host-Usage AVP + AVP_Header aVP_Header,// + Redirect_Host_Usage_Type aVP_Data + } +// with { +// variant "present=bytes(4, 261);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + +// type record Redirect_Host_Cache_Time_AVP{ +// // NOTE Ref: RFC3588 Redirect_Host_Cache_Time_AVP is NOT defined. +// // I presume it should be Time type. rmag +// AVP_Header aVP_Header,// +// Time aVP_Data +// }; + type record Accounting_Record_Type_AVP{ + //Ref: RFC3588 9.8.1. Accounting-Record-Type AVP + AVP_Header aVP_Header,// + Acc_Record_Type aVP_Data + } +// with { +// variant "present=bytes(4, 480);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Accounting_Record_Number_AVP{ + //Ref: RFC3588 9.8.3. Accounting-Record-Number AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 485);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Accounting_Sub_Session_Id_AVP{ + //Ref: RFC3588 9.8.6. Accounting-Sub-Session-Id AVP + AVP_Header aVP_Header,// + UInt64 aVP_Data + } +// with { +// variant "present=bytes(4, 287);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Acct_Session_Id_AVP{ + //Ref: RFC3588 9.8.4. Acct-Session-Id AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 44);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + type record Acct_Multi_Session_Id_AVP{ + //Ref: RFC3588 9.8.5. Acct-Multi-Session-Id AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 50);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Acct_Interim_Interval_AVP{ + //Ref: RFC3588 9.8.2. Acct-Interim-Interval + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 85);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Accounting_Realtime_Required_AVP{ + //Ref: RFC3588 9.8.7. Accounting-Realtime-Required AVP + AVP_Header aVP_Header,// + Acc_Realtime_Req_Type aVP_Data + } +// with { +// variant "present=bytes(4, 283);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Event_Timestamp_AVP{ + //Ref: RFC3588 8.21. Event-Timestamp AVP + AVP_Header aVP_Header,// + Time aVP_Data + } +// with { +// variant "present=bytes(4, 55);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Termination_Cause_AVP{ + //Ref: RFC3588 8.15. Termination-Cause AVP + AVP_Header aVP_Header,// + Termination_Cause_Type aVP_Data + } +// with { +// variant "present=bytes(4, 295);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Class_AVP{ + //Ref: RFC3588 8.20. Class AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 25);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + type record Disconnect_Cause_AVP{ + //Ref: RFC3588 5.4.3. Disconnect-Cause AVP + AVP_Header aVP_Header,// + Disconnect_Cause_Type aVP_Data + } +// with { +// variant "present=bytes(4, 273);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + }//enf of group RFC3855_AVPs + group RFC4740_AVPs{ + /* ******** Cx *******/ + type record Auth_Session_State_AVP{ + // Ref: RFC3588 8.11. Auth-Session-State AVP + AVP_Header aVP_Header,// + Auth_Session_State_Type aVP_Data + } +// with { +// variant "present=bytes(4, 277);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record SIP_AOR_AVP{ + // Ref: RFC4740 9.8. SIP-AOR AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data //DiameterURI/SIP_AOR_Type replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } +// with { +// variant "present=bytes(4, 122);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" +// } + type record SIP_Visited_Network_Id_AVP{ + // Ref: RFC4740 9.9. SIP-Visited-Network-Id AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 386);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record SIP_User_Authorization_Type_AVP{ + // Ref: RFC4740 9.10. SIP-User-Authorization-Type AVP + AVP_Header aVP_Header,// + SIP_User_Auth_Ty_Type aVP_Data + } +// with { +// variant "present=bytes(4, 387);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record SIP_Server_URI_AVP{ + // Ref: RFC4740 9.2 SIP-Server-URI AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 371);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record SIP_MandatoryCapability_AVP{ + //Ref: RFC4740 9.3.1. SIP-Mandatory-Capability AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 373);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record SIP_OptionalCapability_AVP{ + //Ref: RFC4740 9.3.2. SIP-Optional-Capability AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 374);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record SIP_Server_Capabilities_AVP{ + //Ref: RFC4740 9.3. SIP-Server-Capabilities AVP + AVP_Header aVP_Header,// + set of SIP_MandatoryCapability_AVP sIP_MandatoryCapability optional, + set of SIP_OptionalCapability_AVP sIP_OptionalCapability optional, + set of SIP_Server_URI_AVP sIPServerURI optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 372);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (sIP_MandatoryCapability) "fieldPresent=bytes(4, 373)&&CodecHelper.isAvailable()" +// variant (sIP_OptionalCapability) "fieldPresent=bytes(4, 374)&&CodecHelper.isAvailable()" +// variant (sIPServerURI) "fieldPresent=bytes(4, 371)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + type record Authorization_Lifetime_AVP{ + //Ref: RFC35888.9. Authorization-Lifetime AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 291);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Auth_Grace_Period_AVP{ + //Ref: RFC35888.10. Auth-Grace-Period AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 276);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Redirect_Max_Cache_Time_AVP { + //Ref: RFC3588 6.14. Redirect-Max-Cache-Time AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 262);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record SIP_Server_Assignment_Type_AVP{ + //Ref: RFC4740 9.4. SIP-Server-Assignment-Type AVP + AVP_Header aVP_Header,// + SIP_Srv_Assgmt_Type aVP_Data + } +// with { +// variant "present=bytes(4, 375);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record SIP_User_Data_Already_Available_AVP{ + //Ref: RFC4740 9.13. SIP-User-Data-Already-Available AVP + AVP_Header aVP_Header,// + SIP_Usr_Dat_Al_Av_Type aVP_Data + } +// with { +// variant "present=bytes(4, 392);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record SIP_Supported_User_Data_Type_AVP{ + //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 388);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record SIP_User_Data_Type_AVP{ + // Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 390);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record SIP_User_Data_Contents_AVP{ + // Ref: RFC4740 9.12.2. SIP-User-Data-Contents AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 391);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + type record SIP_User_Data_AVP{ + //Ref: RFC4740 9.12. SIP-User-Data AVP + AVP_Header aVP_Header,// < AVP Header: 389 > + SIP_User_Data_Type_AVP sIP_User_Data_Type,//req. + SIP_User_Data_Contents_AVP sIP_User_Data_Contents,//req. + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 389);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record SIP_Accounting_Information_AVP{ + //Ref: RFC4740 9.1. SIP-Accounting-Information AVP + AVP_Header aVP_Header,// + set of SIP_Accounting_Server_URI_AVP sIP_Accounting_Server_URI optional, + set of SIP_Credit_Control_Server_URI_AVP sIP_Credit_Control_Server_URI optional, + set of AVP_Type aVP_Type optional + } + +// with { +// variant "present=bytes(4, 368);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (sIP_Accounting_Server_URI) "fieldPresent=bytes(4, 369)&&CodecHelper.isAvailable()" +// variant (sIP_Credit_Control_Server_URI) "fieldPresent=bytes(4, 370)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + type record SIP_Accounting_Server_URI_AVP{ + //Ref: RFC4740 9.1.1. SIP-Accounting-Server-URI AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } +// with { +// variant "present=bytes(4, 369);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// encode (aVP_Data) "SipNist" +// variant (aVP_Data) "externalEncode;externalDecode;condition=CodecHelper.leaveScope()" +// variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" +// } + + type record SIP_Credit_Control_Server_URI_AVP{ + //Ref: RFC4740 9.1.2. SIP-Credit-Control-Server-URI AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } +// with { +// variant "present=bytes(4, 370);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// encode (aVP_Data) "SipNist" +// variant (aVP_Data) "externalEncode;externalDecode;condition=CodecHelper.leaveScope()" +// variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" +// } + type record SIP_Method_AVP{ + //Ref: RFC4740 9.14. SIP-Method AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 393);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record SIP_Number_Auth_Items_AVP{ + //Ref: RFC4740 9.6. SIP-Number-Auth-Items AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 382);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type union SIP_Auth_Data_Item_AVP { + SIP_Auth_Data_Item_RFC_AVP sIP_Auth_Data_Item_RFC_AVP, //RFC type definition + SIP_Auth_Data_Item_3GPP_AVP sIP_Auth_Data_Item_3GPP_AVP //3GPP type definition + } + + /** + * ETSI TS 129 229 V10.5.0 (2013-04) Clause 6.3.13 SIP-Auth-Data-Item AVP + */ + type record SIP_Auth_Data_Item_3GPP_AVP { + AVP_Header aVP_Header, //SIP-Auth-Data-Item ::= < AVP Header: 612 > + SIP_Authentication_Scheme_AVP sIP_Authentication_Scheme optional, + SIP_Item_Number_AVP sIP_Item_Number optional, + SIP_Authenticate_AVP sIP_Authenticate optional, + SIP_Authorization_AVP sIP_Authorization optional, + SIP_Authentication_Context_AVP sIP_Authentication_Context optional, + SIP_Digest_Authenticate_AVP sIP_Digest_Authenticate optional, + Confidentiality_Key_AVP confidentiality_Key optional, + Integrity_Key_AVP integrity_Key optional, + Framed_IP_Address_AVP framed_IP_Address optional, + Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, + Framed_Interface_Id_AVP framed_Interface_Id optional, + Line_Identifier_AVP line_Identifier optional, + set of AVP_Type aVP_Type optional + } + + type record Integrity_Key_AVP { //ref: 7.3.58 + AVP_Header aVP_Header, //Integrity-Key ::= + octetstring aVP_Data + } + + type record Confidentiality_Key_AVP { //ref: 7.3.57 + AVP_Header aVP_Header, //Confidentiality-Key ::= + octetstring aVP_Data + } + + type record SIP_Digest_Authenticate_AVP{ + //Ref: RFC4740 9.5.3. SIP-Digest-Authenticate AVP + AVP_Header aVP_Header,//SIP-Digest-Authenticate ::= < AVP Header: 635 > + Digest_Realm_AVP digest_Realm,//requ. + Digest_Algorithm_AVP digest_Algorithm optional, + Digest_QoP_AVP digest_QoP optional, + Digest_HA1_AVP digest_HA1 optional, + set of AVP_Type aVP_Type optional + } + + type record Line_Identifier_AVP { //ref: ETSI TS 129 229 V10.5.0 (2013-04) 6.3.42 + AVP_Header aVP_Header, //Line_Identifier-Key ::= + octetstring aVP_Data + } + + type record SIP_Auth_Data_Item_RFC_AVP{ + //Ref: RFC4740 9.5. SIP-Auth-Data-Item AVP + AVP_Header aVP_Header,//SIP-Auth-Data-Item ::= < AVP Header: 376 > + SIP_Authentication_Scheme_AVP sIP_Authentication_Scheme,//requ. + SIP_Item_Number_AVP sIP_Item_Number optional, + SIP_Authenticate_AVP sIP_Authenticate optional, + SIP_Authorization_AVP sIP_Authorization optional, + SIP_Authentication_Info_AVP sIP_Authentication_Info optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 376);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type union SIP_Authentication_Scheme_AVP{ + SIP_Authentication_Scheme_RFC_AVP sIP_Authentication_Scheme_RFC_AVP, + SIP_Authentication_Scheme_3GPP_AVP sIP_Authentication_Scheme_3GPP_AVP + } + + type record SIP_Authentication_Scheme_RFC_AVP{ + //Ref: RFC4740 9.5.1. SIP-Authentication-Scheme AVP + AVP_Header aVP_Header,// + SIP_Auth_Schm_Type aVP_Data + } +// with { +// variant "present=bytes(4, 377);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record SIP_Item_Number_AVP{ + //Ref: RFC4740 9.5.2 SIP-Item-Number AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 378);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record SIP_Authenticate_3GPP_AVP{ + // Ref: 129 229 6.3.10. SIP-Authenticate AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + + type union SIP_Authenticate_AVP { + SIP_Authenticate_RFC_AVP sIP_Authenticate_RFC_AVP, //RFC type definition + SIP_Authenticate_3GPP_AVP sIP_Authenticate_3GPP_AVP //3GPP type definition + } + + /** + * ETSI TS 129 229 Clause 6.3.9 SIP-Authentication-Scheme AVP + */ + type record SIP_Authentication_Scheme_3GPP_AVP{ + //Ref: RFC4740 9.5.1. SIP-Authentication-Scheme AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + + type record SIP_Authorization_3GPP_AVP{ + // Ref: 129 229 6.3.11. SIP-Authorization AVP + AVP_Header aVP_Header,//SIP-Authorization ::= < AVP Header: 610 > + octetstring aVP_Data + } + + type record SIP_Authenticate_RFC_AVP{ + //Ref: RFC4740 9.5.3. SIP-Authenticate AVP + AVP_Header aVP_Header,//SIP-Authenticate ::= < AVP Header: 379 > + Digest_Realm_AVP digest_Realm,//requ. + Digest_Nonce_AVP digest_Nonce,//requ. + Digest_Domain_AVP digest_Domain optional, + Digest_Opaque_AVP digest_Opaque optional, + Digest_Stale_AVP digest_Stale optional, + Digest_Algorithm_AVP digest_Algorithm optional, + Digest_QoP_AVP digest_QoP optional, + Digest_HA1_AVP digest_HA1 optional, + set of Digest_Auth_Param_AVP digest_Auth_Param optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 379);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (digest_Auth_Param) "fieldPresent=bytes(1, 117)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type union SIP_Authorization_AVP { + SIP_Authorization_RFC_AVP sIP_Authorization_RFC_AVP, //RFC type definition + SIP_Authorization_3GPP_AVP sIP_Authorization_3GPP_AVP //3GPP type definition + } + + type record SIP_Authorization_RFC_AVP{ + // Ref: RFC4740 9.5.4. SIP-Authorization AVP + AVP_Header aVP_Header,//SIP-Authorization ::= < AVP Header: 380 > + Digest_Username_AVP digest_Username,//requi. + Digest_Realm_AVP digest_Realm, + Digest_Nonce_AVP digest_Nonce, + Digest_URI_AVP digest_URI, + Digest_Response_AVP digest_Response,//requi. + Digest_Algorithm_AVP digest_Algorithm optional, + Digest_CNonce_AVP digest_CNonce optional, + Digest_Opaque_AVP digest_Opaque optional, + Digest_QoP_AVP digest_QoP optional, + Digest_Nonce_Count_AVP digest_Nonce_Count optional, + Digest_Method_AVP digest_Method optional, + Digest_Entity_Body_Hash_AVP digest_Entity_Body_Hash optional, + set of Digest_Auth_Param_AVP digest_Auth_Param optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 380);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (digest_Auth_Param) "fieldPresent=bytes(1, 117)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record SIP_Authentication_Info_AVP{ + // Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP + AVP_Header aVP_Header,//SIP-Authentication-Info ::= < AVP Header: 381 > + Digest_Nextnonce_AVP digest_Nextnonce optional, + Digest_QoP_AVP digest_QoP optional, + Digest_Response_Auth_AVP digest_Response_Auth optional, + Digest_CNonce_AVP digest_CNonce optional, + Digest_Nonce_Count_AVP digest_Nonce_Count optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 381);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + + type record SIP_Reason_Info_AVP{ + //Ref: RFC4740 9.7.2. SIP-Reason-Info AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 385);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record SIP_Deregistration_Reason_AVP{ + // Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP + AVP_Header aVP_Header,//SIP-Deregistration-Reason ::= < AVP Header: 383 > + SIP_Reason_Code_AVP sIP_Reason_Code_AVP,//requi. + SIP_Reason_Info_AVP sIP_Reason_Info_AVP optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 383);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record SIP_Reason_Code_AVP{ + // Ref: RFC4740 .7.1. SIP-Reason-Code AVP + AVP_Header aVP_Header,// + SIP_Reason_Code_Type aVP_Data + } +// with { +// variant "present=bytes(4, 384);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + }//end of group RFC4740_AVPs + + /* ******** Digest AVPs ********* */ + group Digest_AVPs{ + //type UInt8 Digest_Ty_Type; + + type record Digest_Realm_AVP{ + //Ref:RFC4590 3.2. Digest-Realm Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of type system +// Digest_Ty_Type Type,//104 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 104)" +// variant (Length) "intTag='aVP_len', value-2" +// } + + type record Digest_Nonce_AVP{ + //Ref:RFC4590 3.3. Digest-Nonce Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//105 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 105)" +// variant (Length) "intTag='aVP_len', value-2" +// } + + type record Digest_Domain_AVP{ + //Ref:RFC4590 3.17. Digest-Domain Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//119 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 119)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Opaque_AVP{ + //Ref:RFC4590 3.14. Digest-Opaque Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//116 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 116)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Stale_AVP{ + //Ref:RFC4590 3.18. Digest-Stale Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//120 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 120)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Algorithm_AVP{ + //Ref:RFC4590 3.9. Digest-Algorithm Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//111 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 111)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_QoP_AVP{ + //Ref:RFC4590 3.8. Digest-Qop Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type, //110 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 110)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_HA1_AVP{ + //Ref:RFC4590 3.19. Digest-HA1 Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//121 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 121)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Auth_Param_AVP{ + //Ref:RFC4590 3.15. Digest-Auth-Param Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//117 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 117);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (Length) "intTag='aVP_len', value-2" +// variant (Text) "condition=CodecHelper.leaveScope()" +// } + type record Digest_Username_AVP{ + //Ref:RFC4590 3.13. Digest-Username Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type, //115 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 115)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_URI_AVP{ + //Ref:RFC4590 3.7. Digest-URI Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type, //109 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 109)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Response_AVP{ + //Ref:RFC4590 + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//103 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 103)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_CNonce_AVP{ + //Ref:RFC4590 3.11. Digest-CNonce Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type, //113 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 113)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Nonce_Count_AVP{ + //Ref:RFC4590 3.12. Digest-Nonce-Count Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//114 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 114)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Method_AVP{ + //Ref:RFC4590 3.6. Digest-Method Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type, //108 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 108)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Entity_Body_Hash_AVP{ + //Ref:RFC4590 3.10. Digest-Entity-Body-Hash Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//112 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 112)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Nextnonce_AVP{ + //Ref:RFC4590 + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//107 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 107)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Response_Auth_AVP{ + //Ref:RFC4590 + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//106 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 106)" +// variant (Length) "intTag='aVP_len', value-2" +// } + /* ************ end of Digest AVPs************ */ + }//end of Digest AVPs + /* ***** Sh Ref: 3GPP TS 29.329 Table 6.3.1: Diameter Multimedia Application AVPs ***** + User_Identity (700), + MSISDN (701), + Data_Reference (703), + Service_Indication (704), + Subs_Req_Type (705), + Requested-Domain (706), + Current-Location (707), + Identity-Set (708), + Expiry-Time (709), + Send-Data-Indication (710), + Server-Name (602), + Supported-Features (628), + Feature-List-ID (629), + Feature-List (630), + Supported-Applications (631), + Public-Identity (601), + DSAI-Tag (711), + Wildcarded-PSI (634), + Wildcarded-IMPU (636) */ + group Sh_AVPs{ + type record Public_Identity_AVP{ + // Ref: 3GPP TS 29.329 6.3.15 Public-Identity AVP + // 3GPP TS 29.229 6.3.2 Public-Identity AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 601);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type set of Public_Identity_AVP Public_Identity_AVPs; + + type record User_Identity_AVP{ + // Ref: 3GPP TS 29.329 6.3.1 User-Identity AVP + AVP_Header aVP_Header,// + Public_Identity_AVP public_Identity_AVP optional, + MSISDN_AVP mSISDN_AVP optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 700);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record MSISDN_AVP{ + // Ref: 3GPP TS 29.329 6.3.2 MSISDN AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 700);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Data_Reference_AVP{ + // Ref: 3GPP TS 29.3296.3.4 Data-Reference AVP + AVP_Header aVP_Header,// + Data_Reference_Type aVP_Data + } +// with { +// variant "present=bytes(4, 703);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Service_Indication_AVP{ + // Ref: 3GPP TS 29.329 6.3.5 Service-Indication AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 704);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + + type record Subs_Req_Type_AVP{ + // Ref: 3GPP TS 29.329 6.3.6 Subs-Req-Type AVP + AVP_Header aVP_Header,// + Subs_Req_Ty_Type aVP_Data + } +// with { +// variant "present=bytes(4, 705);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Requested_Domain_AVP{ + // Ref: 3GPP TS 29.329 6.3.7 Requested-Domain AVP + AVP_Header aVP_Header,// + Request_Domain_Type aVP_Data + } +// with { +// variant "present=bytes(4, 706);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Current_Location_AVP{ + // Ref: 3GPP TS 29.329 6.3.8 Current-Location AVP + AVP_Header aVP_Header,// + Current_Location_Type aVP_Data + } +// with { +// variant "present=bytes(4, 707);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Identity_Set_AVP{ + // Ref: 3GPP TS 29.329 6.3.10 Identity-Set AVP + AVP_Header aVP_Header,// + Identity_Set_Type aVP_Data + } +// with { +// variant "present=bytes(4, 708);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Expiry_Time_AVP{ + // Ref: 3GPP TS 29.329 6.3.16 Expiry-Time + AVP_Header aVP_Header,// + Time aVP_Data + } +// with { +// variant "present=bytes(4, 709);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Send_Data_Indication_AVP{ + // Ref: 3GPP TS 29.329 6.3.17 Send-Data-Indication AVP + AVP_Header aVP_Header,// + Send_Data_Indication_Type aVP_Data + } +// with { +// variant "present=bytes(4, 710);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Repository_Data_ID_AVP { + //ref: TS129 328 6.3.24 + AVP_Header aVP_Header, //Repository Data ID ::= + Service_Indication_AVP service_Indication, + Sequence_Number_AVP sequence_Number, + set of AVP_Type aVP_Type optional + } + + type record Sequence_Number_AVP{ + //Ref: TS129 328 6.3.25 + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + + type record Server_Name_AVP{ + // Ref: 3GPP TS 29.329 6.3.9 Server-Name AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 602);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Supported_Features_AVP{ + // Ref: 3GPP TS 29.329 6.3.11 Supported-Features AVP (See 3GPP TS 29.229, clause 6.3.29) + AVP_Header aVP_Header,// + Vendor_Id_AVP vendor_Id, + Feature_List_ID_AVP feature_list_Id optional, + Feature_List_AVP feature_list, + set of AVP_Type aVP_Data optional //other parameters. + } +// with { +// variant "present=bytes(4, 628);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + type record Feature_List_ID_AVP{ + // Ref: 3GPP TS 29.229, clause 6.3.30 + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 629);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Feature_List_AVP{ + // Ref: 3GPP TS 29.229, clause 6.3.31 + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 630);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Wildcarded_PSI_AVP{ + // Ref: 3GPP TS 29.329 6.3.19 Wildcarded-PSI AVP , 3GPP TS 29.229 + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 634);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Wildcarded_IMPU_AVP{ + // Ref: 3GPP TS 29.329 6.3.20 Wildcarded-IMPU AVP , 3GPP TS 29.229 + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 636);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record DSAI_Tag_AVP{ + // Ref: 3GPP TS 29.329 6.3.18 DSAI-Tag AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 711);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + type record Experimental_Result_Code_AVP{ + // Ref: 3GPP TS 29.229 6.2 Result-Code AVP values + AVP_Header aVP_Header,// + Experimental_Result_Type aVP_Data + } +// with { +// variant "present=bytes(4, 298);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Experimental_Result_AVP{ + // Ref: 3GPP TS 29.229 6.2 Result-Code AVP values + // FUN 766300-PCL-030 : Experimental-Result AVP shall be used for Sh/Dh errors. + // This is a grouped AVP which contains the 3GPP Vendor ID in the Vendor-Id AVP, and the error code in + // the Experimental-Result-Code AVP. + AVP_Header aVP_Header,// + Vendor_Id_AVP vendor_Id, + Experimental_Result_Code_AVP experimental_Result_Code + } +// with { +// variant "present=bytes(4, 297);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (experimental_Result_Code) "condition=CodecHelper.leaveScope()" +// } + type record User_Data_AVP{ + // Ref: 3GPP TS 29.229 6.3.7 User-Data AVP + // Ref: + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 606);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + } + + group RFC4005_AVPs{ + group NAS_Session_AVPs{ + + type record Called_Station_Id_AVP{ + // Ref: RFC4005 4.5 Called_Station_Id AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 30);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + }//end group NAS_Session_AVPs + + group IP_Access_Authorization_AVPs { + + type record Framed_IP_Address_AVP{ + // Ref: RFC4005 6.11.1 Framed_IP_Address AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 8);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Framed_IPv6_Prefix_AVP{ + // Ref: RFC4005 6.11.1 Framed_IPv6_Prefix AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 97);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Framed_Interface_Id_AVP{ + // Ref: RFC4005 6.11.5. Framed-Interface-Id AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 97);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + }//end group IP_Access_Authorization_AVPs + + }//end group RFC4005_AVPs + + /* ***** Rf and Ro Ref: RFC4006 ***** */ + group RFC4006_AVPs{ + type record Service_Context_Id_AVP{ + // Ref: RFC4006 8.42. Service-Context-Id AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 461);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record CC_Request_Type_AVP{ + // Ref: RFC4006 8.3. CC-Request-Type AVP + AVP_Header aVP_Header,// + CC_Request_Ty_Type aVP_Data + } +// with { +// variant "present=bytes(4, 416);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record CC_Request_Number_AVP{ + // Ref: RFC4006 8.2. CC-Request-Number AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 415);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record CC_Sub_Session_Id_AVP{ + // Ref: RFC4006 8.5. CC-Sub-Session-Id AVP + AVP_Header aVP_Header,// + UInt64 aVP_Data + } +// with { +// variant "present=bytes(4, 419);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Subscription_Id_Type_AVP{ + // Ref: RFC4006 8.47. Subscription-Id-Type AVP + AVP_Header aVP_Header,// + Subscription_Id_Ty_Type aVP_Data + } +// with { +// variant "present=bytes(4, 450);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Subscription_Id_Data_AVP{ + // Ref: RFC4006 + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 444);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Subscription_Id_AVP{ + // Ref: RFC4006 8.46. Subscription-Id AVP + AVP_Header aVP_Header,//< AVP Header: 443 > + Subscription_Id_Type_AVP subscription_Id_Type, + Subscription_Id_Data_AVP subscription_Id_Data + } +// with { +// variant "present=bytes(4, 443);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (subscription_Id_Data) "condition=CodecHelper.leaveScope()" +// } + type record Service_Identifier_AVP{ + // Ref: RFC4006 8.28. Service-Identifier AVP + AVP_Header aVP_Header,//< AVP Header: 439 > + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 439);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record CC_Time_AVP{ + // Ref: RFC4006 8.21. CC-Time AVP + AVP_Header aVP_Header,//< AVP Header: 420 > + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 420);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Value_Digits_AVP{ + // Ref: RFC4006 8.10. Value-Digits AVP + AVP_Header aVP_Header,//< AVP Header: 447 > + Int64 aVP_Data + } +// with { +// variant "present=bytes(4, 447);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Exponent_AVP{ + // Ref: RFC4006 8.9. Exponent AVP + AVP_Header aVP_Header,//< AVP Header: 429 > + Int32 aVP_Data + } +// with { +// variant "present=bytes(4, 429);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Unit_Value_AVP{ + // Ref: RFC4006 8.8. Unit-Value AVP + AVP_Header aVP_Header,//< AVP Header: 445 > + Value_Digits_AVP value_Digits, + Exponent_AVP exponent optional + } +// with { +// variant "present=bytes(4, 445);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (exponent) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + type record Currency_Code_AVP{ + // Ref: RFC4006 8.11. Currency-Code AVP + AVP_Header aVP_Header,//< AVP Header: 425 > + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 425);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type set CC_Money_AVP{ + // Ref: RFC4006 8.22. CC-Money AVP + AVP_Header aVP_Header,//< AVP Header: 413 > + Unit_Value_AVP unit_Value, + Currency_Code_AVP currency_Code optional + } +// with { +// variant "present=bytes(4, 413);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (currency_Code) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record CC_Total_Octets_AVP{ + // Ref: RFC4006 8.23. CC-Total-Octets AVP + AVP_Header aVP_Header,//< AVP Header: 421 > + UInt64 aVP_Data + } +// with { +// variant "present=bytes(4, 421);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record CC_Input_Octets_AVP{ + // Ref: RFC4006 8.24. CC-Input-Octets AVP + AVP_Header aVP_Header,//< AVP Header: 412 > + UInt64 aVP_Data + } +// with { +// variant "present=bytes(4, 412);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record CC_Output_Octets_AVP{ + // Ref: RFC4006 8.25. CC-Output-Octets AVP + AVP_Header aVP_Header,//< AVP Header: 414 > + UInt64 aVP_Data + } +// with { +// variant "present=bytes(4, 414);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record CC_Service_Specific_Units_AVP{ + // Ref: RFC4006 8.26. CC-Service-Specific-Units AVP + AVP_Header aVP_Header,//< AVP Header: 417 > + UInt64 aVP_Data + } +// with { +// variant "present=bytes(4, 417);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type set Requested_Service_Unit_AVP{ + // Ref: RFC4006 8.18. Requested-Service-Unit AVP + AVP_Header aVP_Header,//< AVP Header: 437 > + CC_Time_AVP cC_Time optional, + CC_Money_AVP cC_Money optional, + CC_Total_Octets_AVP cC_Total_Octets optional, + CC_Input_Octets_AVP cC_Input_Octets optional, + CC_Output_Octets_AVP cC_Output_Octets optional, + CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 437);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + type record Requested_Action_AVP{ + // Ref: RFC4006 8.41. Requested-Action AVP + AVP_Header aVP_Header,//< AVP Header: 436 > + Requested_Action_Type aVP_Data + } +// with { +// variant "present=bytes(4, 436);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Tariff_Change_Usage_AVP{ + // Ref: RFC4006 8.27. Tariff-Change-Usage AVP + AVP_Header aVP_Header,//< AVP Header: 452 > + Tariff_Change_Usage_Type aVP_Data + } +// with { +// variant "present=bytes(4, 452);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + /** + * @desc The Quota-Holding-Time AVP (AVP code 872) + * @member aVP_Header Header AVP + * @member aVP_Data Specifies the reason for usage reporting for one or more types of quota for a particular category + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.175 Reporting-Reason AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Reporting_Reason_AVP { + AVP_Header aVP_Header,// + Reporting_Reason aVP_Data + } // End of type Reporting_Reason_AVP + + /** + * @desc The Reporting_Reason enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.175 Reporting-Reason AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Reporting_Reason { + THRESHOLD_E (0), + QHT_E (1), + FINAL_E (2), + QUOTA_EXHAUSTED_E (3), + VALIDITY_TIME_E (4), + OTHER_QUOTA_TYPE_E (5), + RATING_CONDITION_CHANGE_E (6), + FORCED_REAUTHORISATION_E (7), + POOL_EXHAUSTED_E (8) +// } with { +// variant "length=32" + } // End of type Reporting_Reason + + type set Used_Service_Unit_AVP{ + // Ref: RFC4006 8.19. Used-Service-Unit AVP + AVP_Header aVP_Header,//< AVP Header: 446 > + Reporting_Reason_AVP reporting_Reason optional, // TS 132 299 + Tariff_Change_Usage_AVP tariff_Change_Usage optional, + CC_Time_AVP cC_Time optional, + CC_Money_AVP cC_Money optional, + CC_Total_Octets_AVP cC_Total_Octets optional, + CC_Input_Octets_AVP cC_Input_Octets optional, + CC_Output_Octets_AVP cC_Output_Octets optional, + CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, + Event_Charging_TimeStamp_AVP event_Charging_TimeStamp optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 446);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + /** + * @desc Event-Charging-TimeStamp_AVP (AVP code 1258) + * @member aVP_Header Header AVP + * @member Time Holds the type Time - timestamp of the event reported in the CC-Service-Specific-Units AVP + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.64 Event-Charging-TimeStamp_AVP + */ + type record Event_Charging_TimeStamp_AVP{ + AVP_Header aVP_Header,//< AVP Header: 1258 > + Time aVP_Data + } + + type record Multiple_Services_Indicator_AVP{ + // Ref: RFC4006 8.40. Multiple-Services-Indicator AVP + AVP_Header aVP_Header,//< AVP Header: 455 > + Multiple_Serv_Indi_Type aVP_Data + } +// with { +// variant "present=bytes(4, 455);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Tariff_Time_Change_AVP{ + // Ref: RFC4006 8.20. Tariff-Time-Change AVP + AVP_Header aVP_Header,//< AVP Header: 451 > + Time aVP_Data + } +// with { +// variant "present=bytes(4, 451);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type set Granted_Service_Unit_AVP{ + // Ref: RFC4006 8.17. Granted-Service-Unit AVP + AVP_Header aVP_Header,//< AVP Header: 431 > + Tariff_Time_Change_AVP tariff_Time_Change optional, + CC_Time_AVP cC_Time optional, + CC_Money_AVP cC_Money optional, + CC_Total_Octets_AVP cC_Total_Octets optional, + CC_Input_Octets_AVP cC_Input_Octets optional, + CC_Output_Octets_AVP cC_Output_Octets optional, + CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 431);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Rating_Group_AVP{ + // Ref: RFC4006 8.29. Rating-Group AVP + AVP_Header aVP_Header,//< AVP Header: 433 > + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 433);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record G_S_U_Pool_Identifier_AVP{ + // Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP + AVP_Header aVP_Header,//< AVP Header: 453 > + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 453);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record CC_Unit_Type_AVP{ + // Ref: RFC4006 8.32. CC-Unit-Type AVP + AVP_Header aVP_Header,//< AVP Header: 454 > + CC_Unit_Ty_Type aVP_Data + } +// with { +// variant "present=bytes(4, 454);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type set G_S_U_Pool_Reference_AVP{ + // Ref: RFC4006 8.30. G-S-U-Pool-Reference AVP + AVP_Header aVP_Header,//< AVP Header: 457 > + G_S_U_Pool_Identifier_AVP g_S_U_Pool_Identifier, + CC_Unit_Type_AVP cC_Unit_Type, + Unit_Value_AVP unit_Value + } +// with { +// variant "present=bytes(4, 457);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (unit_Value) "condition=CodecHelper.leaveScope()" +// } + type record Validity_Time_AVP{ + // Ref: RFC4006 8.33. Validity-Time AVP + AVP_Header aVP_Header,//< AVP Header: 448 > + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 448);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Final_Unit_Action_AVP{ + // Ref: RFC4006 8.35. Final-Unit-Action AVP + AVP_Header aVP_Header,//< AVP Header: 449 > + Final_Unit_Action_Type aVP_Data + } +// with { +// variant "present=bytes(4, 449);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Restriction_Filter_Rule_AVP{ + // Ref: RFC4006 8.36. Restriction-Filter-Rule AVP + AVP_Header aVP_Header,//< AVP Header: 438 > + IPFilterRule_Type aVP_Data + } +// with { +// variant "present=bytes(4, 438);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Filter_Id_AVP{ + // Ref: RFC4005 6.7. Filter-Id AVP + AVP_Header aVP_Header,//< AVP Header: 11 > + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 11);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Redirect_Address_Type_AVP{ + // Ref: RFC4006 8.38. Redirect-Address-Type AVP + AVP_Header aVP_Header,//< AVP Header: 433 > + Redirect_Address_Ty_Type aVP_Data + } +// with { +// variant "present=bytes(4, 433);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Redirect_Server_Address_AVP{ + // Ref: RFC4006 8.39. Redirect-Server-Address AVP + AVP_Header aVP_Header,//< AVP Header: 435 > + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 435);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Redirect_Server_AVP{ + // Ref: RFC4006 8.37. Redirect-Server AVP + AVP_Header aVP_Header,//< AVP Header: 434 > + Redirect_Address_Type_AVP redirect_Address_Type, + Redirect_Server_Address_AVP redirect_Server_Address + } +// with { +// variant "present=bytes(4, 434);use=com.testingtech.ttcn.tci.codec.CodecHelper" + // variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type set Final_Unit_Indication_AVP{ + // Ref: RFC4006 8.34. Final-Unit-Indication AVP + AVP_Header aVP_Header,//< AVP Header: 430 > + Final_Unit_Action_AVP final_Unit_Action, + set of Restriction_Filter_Rule_AVP restriction_Filter_Rule optional, + set of Filter_Id_AVP filter_Id optional, + Redirect_Server_AVP redirect_Server optional + } +// with { +// variant "present=bytes(4, 430);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (restriction_Filter_Rule) "fieldPresent=bytes(4, 438)&&CodecHelper.isAvailable()" +// variant (filter_Id) "fieldPresent=bytes(4, 11)&&CodecHelper.isAvailable()" +// variant (redirect_Server) "condition=CodecHelper.leaveScope()" +// } + + type set Multiple_Services_Credit_Control_AVP{ + // Ref: RFC4006 8.16. Multiple-Services-Credit-Control AVP + // Ref: TS 132 299 Clause 7.1.9 Multiple-Services-Credit-Control + AVP_Header aVP_Header,//< AVP Header: 456 > + Granted_Service_Unit_AVP granted_Service_Unit optional, + Requested_Service_Unit_AVP requested_Service_Unit optional, + set of Used_Service_Unit_AVP used_Service_Unit optional, + Tariff_Change_Usage_AVP tariff_Change_Usage optional, + set of Service_Identifier_AVP service_Identifier optional, + Rating_Group_AVP rating_Group optional, + set of G_S_U_Pool_Reference_AVP g_S_U_Pool_Reference optional, + Validity_Time_AVP validity_Time optional, + Result_Code_AVP result_Code optional, + Final_Unit_Indication_AVP final_Unit_Indication optional, + Time_Quota_Threshold_AVP time_Quota_Threshold optional, // TS 132 299 + Volume_Quota_Threshold_AVP volume_Quota_Threshold optional, // TS 132 299 + Unit_Quota_Threshold_AVP unit_Quota_Threshold optional, // TS 132 299 + Quota_Holding_Time_AVP quota_Holding_Time optional, // TS 132 299 + Quota_Consumption_Time_AVP quota_Consumption_Time optional, // TS 132 299 + set of Reporting_Reason_AVP reporting_Reason optional, // TS 132 299 + Trigger_AVP trigger_ optional, // TS 132 299 + PS_Furnish_Charging_Information_AVP ps_Furnish_Charging_Information optional, // TS 132 299 + Refund_Information_AVP refund_Information optional, // TS 132 299 + set of AF_Correlation_Information_AVP aF_Correlation_Information optional, // TS 132 299 + set of Envelope_AVP envelope optional, // TS 132 299 + Envelope_Reporting_AVP envelope_Reporting optional, // TS 132 299 + Time_Quota_Mechanism_AVP time_Quota_Mechanism optional, // TS 132 299 + set of Service_Specific_Info_AVP service_Specific_Info optional, // TS 132 299 + QoS_Information_AVP qoS_Information optional, // TS 132 299 + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 456);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (used_Service_Unit) "fieldPresent=bytes(4, 446)&&CodecHelper.isAvailable()" +// variant (service_Identifier) "fieldPresent=bytes(4, 439)&&CodecHelper.isAvailable()" +// variant (g_S_U_Pool_Reference) "fieldPresent=bytes(4, 457)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + /** + * @desc The Time-Quota-Mechanism AVP (AVP code 1270) + * @member aVP_Header Header AVP + * @member aVP_Data_Quota_Type TODO + * @member base_Time_Interval TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.228 Time-Quota-Mechanism + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Time_Quota_Mechanism_AVP { + AVP_Header aVP_Header,// + Time_Quota_Type_AVP time_Quota_Type optional, + Base_Time_Interval_AVP base_Time_Interval optional + } // End of type Time_Quota_Mechanism_AVP + + /** + * @desc Base-Time-Interval AVP (AVP code 1265) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the length of the base time interval, for controlling the consumption of time quota, in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.29 Base-Time-Interval AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Base_Time_Interval_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Base_Time_Interval_AVP + + /** + * @desc The Time-Quota-Type AVP (AVP code 1271) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate which time quota consumption mechanism shall be used for the associated Rating Group + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.230 Time-Quota-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Time_Quota_Type_AVP { + AVP_Header aVP_Header,// + Time_Quota_Type aVP_Data + } // End of type Time_Quota_Type_AVP + + /** + * @desc The Time-Quota-Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.230 Time-Quota-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Time_Quota_Type { + DISCRETE_TIME_PERIOD_E (0), + CONTINUOUS_TIME_PERIOD_E (1) +// } with { +// variant "length=32" + } // End of type Time_Quota_Type + + /** + * @desc The AF-Correlation-Information AVP (AVP code 1276) + * @member aVP_Header Header AVP + * @member af_Charging_Identifier TODO + * @member flows Flow identifiers generated by the AF and received by P-GW over Rx/Gx as defined in TS 29.214 [214] and TS 29.212 [215] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.11 AF-Correlation-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AF_Correlation_Information_AVP { + AVP_Header aVP_Header,// + AF_Charging_Identifier_AVP af_Charging_Identifier optional, + set of Flows_AVP flows optional + } // End of type AF_Correlation_Information_AVP + + type record AF_Signalling_Protocol_AVP{ + //Ref: ETSI TS 129 214 AF_Signalling_Protocol AVP + AVP_Header aVP_Header,// + AF_Signalling_Protocol_Type aVP_Data + } +// with { +// variant "present=bytes(4, 529);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type enumerated AF_Signalling_Protocol_Type{ + // Ref: ETSI TS 129 214 5.3.26 + NO_INFORMATION_E (0), + SIP_E (1) + } +// with { +// variant "length=32" +// } + + type record Flows_AVP{ + //Ref: ETSI TS 129 214 Flows_AVP + AVP_Header aVP_Header,// + Media_Component_Number_AVP media_component_number, + set of Flow_Number_AVP flow_Number optional, + Final_Unit_Action_AVP final_unit_action optional + } + // with { +// variant "present=bytes(4, 510);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (flow_Number) "fieldPresent=bytes(4, 509)&&CodecHelper.isAvailable()" +// variant (final_unit_action) "condition=CodecHelper.leaveScope()" +// } + + type record Flow_Status_AVP{ + //Ref: ETSI TS 129 214 Flow_Status AVP + AVP_Header aVP_Header,// + Flow_Status_Type aVP_Data + } +// with { +// variant "present=bytes(4, 511);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Flow_Description_AVP{ + //Ref: ETSI TS 129 214 Flow_Description AVP + AVP_Header aVP_Header,// + IPFilterRule_Type aVP_Data + } + // with { + // variant "present=bytes(4, 507);use=com.testingtech.ttcn.tci.codec.CodecHelper" + // variant (aVP_Data) "condition=CodecHelper.leaveScope()" + // } + + type record Flow_Number_AVP{ + //Ref: ETSI TS 129 214 Flow_Number AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 509);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type enumerated Flow_Status_Type{ + // Ref: ETSI TS 129 214 5.3.11 + ENABLED_UPLINK_E (0), + ENABLED_DOWNLINK_E (1), + ENABLED_E (2), + DISABLED_E (3), + REMOVED_E (4) + } +// with { +// variant "length=32" +// } + + type record Media_Component_Number_AVP{ + //Ref: ETSI TS 129 214 Media_Component_Number_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 518);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record AF_Charging_Identifier_AVP{ + //Ref: ETSI TS 129 214 AF_Charging_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 505);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + /** + * @desc Envelope AVP (AVP code 1266) + * @member aVP_Header Header AVP + * @member envelope_Start_Time TODO + * @member envelope_End_Time TODO + * @member cC_Total_Octets TODO + * @member cC_Input_Octets TODO + * @member cC_Output_Octets TODO + * @member cC_Service_Specific_Units TODO + * @member aVP_Type TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.59 Envelope AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Envelope_AVP { + AVP_Header aVP_Header,// + Envelope_Start_Time_AVP envelope_Start_Time, + Envelope_End_Time_AVP envelope_End_Time optional, + CC_Total_Octets_AVP cC_Total_Octets optional, + CC_Input_Octets_AVP cC_Input_Octets optional, + CC_Output_Octets_AVP cC_Output_Octets optional, + CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, + set of AVP_Type aVP_Type optional + } // End of type Envelope_AVP + + /** + * @desc The Envelope-End-Time AVP (AVP code 1267) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate the time of the end of the time envelope + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.62 Envelope-End-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Envelope_End_Time_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type Envelope_End_Time_AVP + + /** + * @desc The Envelope-Start-Time AVP (AVP code 1269) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate the time of the packet of user data which caused the time envelope to start + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.62 Envelope-Start-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Envelope_Start_Time_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type Envelope_Start_Time_AVP + + /** + * @desc The Refund-Information AVP (AVP code 2022) + * @member aVP_Header Header AVP + * @member aVP_Data Conveys relevant information for the OCS application relative to refund mechanism + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.171 Refund-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Refund_Information_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type Refund_Information_AVP + + /** + * @desc The Trigger AVP (AVP code 1264) + * @member aVP_Header Header AVP + * @member trigger_Type Holds the trigger types + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.235 Trigger AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Trigger_AVP { + AVP_Header aVP_Header,// + set of Trigger_Type_AVP trigger_Type + } // End of type Trigger_AVP + + /** + * @desc The Trigger-Type AVP (AVP code 870) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates a single re-authorisation event type + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.236 Trigger-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Trigger_Type_AVP { + AVP_Header aVP_Header,// + Trigger_Type aVP_Data + } // End of type Trigger_Type_AVP + + /** + * @desc The Trigger_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.235 Trigger AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Trigger_Type { + CHANGE_IN_SGSN_IP_ADDRESS_E (1), + CHANGE_IN_QOS_E (2), + CHANGE_IN_LOCATION_E (3), + CHANGE_IN_RAT_E (4), + CHANGE_IN_UE_TIMEZONE_E (5), + CHANGEINQOS_TRAFFIC_CLASS_E (10), + CHANGEINQOS_RELIABILITY_CLASS_E (11), + CHANGEINQOS_DELAY_CLASS_E (12), + CHANGEINQOS_PEAK_THROUGHPUT_E (13), + CHANGEINQOS_PRECEDENCE_CLASS_E (14), + CHANGEINQOS_MEAN_THROUGHPUT_E (15), + CHANGEINQOS_MAXIMUM_BIT_RATE_FOR_UPLINK_E (16), + CHANGEINQOS_MAXIMUM_BIT_RATE_FOR_DOWNLINK_E (17), + CHANGEINQOS_RESIDUAL_BER_E (18), + CHANGEINQOS_SDU_ERROR_RATIO_E (19), + CHANGEINQOS_TRANSFER_DELAY_E (20), + CHANGEINQOS_TRAFFIC_HANDLING_PRIORITY_E (21), + CHANGEINQOS_GUARANTEED_BIT_RATE_FOR_UPLINK_E (22), + CHANGEINQOS_GUARANTEED_BIT_RATE_FOR_DOWNLINK_E (23), + CHANGEINLOCATION_MCC_E (30), + CHANGEINLOCATION_MNC_E (31), + CHANGEINLOCATION_RAC_E (32), + CHANGEINLOCATION_LAC_E (33), + CHANGEINLOCATION_CellId_E (34), + CHANGEINLOCATION_TAC_E (35), + CHANGEINLOCATION_ECGI_E (36), + CHANGE_IN_MEDIA_COMPOSITION_E (40), + CHANGE_IN_PARTICIPANTS_NMB_E (50), + CHANGE_IN_THRSHLD_OF_PARTICIPANTS_NMB_E (51), + CHANGE_IN_USER_PARTICIPATING_TYPE_E (52), + CHANGE_IN_SERVICE_CONDITION_E (60), + CHANGE_IN_SERVING_NODE_E (61), + CHANGE_IN_USER_CSG_INFORMATION_E (70), + CHANGE_IN_HYBRID_SUBSCRIBED_USER_CSG_INFORMATION_E (71), + CHANGE_IN_HYBRID_UNSUBSCRIBED_USER_CSG_INFORMATION_E (72) +// } with { +// variant "length=32" + } // End of type Trigger_Type + + /** + * @desc The Envelope-Reporting AVP (AVP code 1268) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate whether the client shall report the start and end of each time envelope, in those cases in which quota is consumed in envelopes + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.61 Envelope-Reporting AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Envelope_Reporting_AVP { + AVP_Header aVP_Header,// + Envelope_Reporting aVP_Data + } // End of type Envelope_Reporting_AVP + + /** + * @desc The Envelope-Reporting enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.61 Envelope-Reporting AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Envelope_Reporting { + DO_NOT_REPORT_ENVELOPES_E (0), + REPORT_ENVELOPES_E (1), + REPORT_ENVELOPES_WITH_VOLUME_E (2), + REPORT_ENVELOPES_WITH_EVENTS_E (3), + REPORT_ENVELOPES_WITH_VOLUME_AND_EVENTS_E (4) +// } with { +// variant "length=32" + } // End of type Envelope_Reporting + + /** + * @desc The Service-Specific-Info AVP (AVP code 1249) + * @member aVP_Header Header AVP + * @member reason Contains the reason for closing a container and the addition of a new container + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.195 Service-Specific-Info AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Service_Specific_Info_AVP { + AVP_Header aVP_Header,// + Service_Specific_Data_AVP service_Specific_Data, + Service_Specific_Type_AVP service_Specific_Type + } // End of type Service_Specific_Info_AVP + + /** + * @desc Service-Specific-Type AVP (AVP code 1257) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the type of the Service-Specific-Data + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.196 Service-Specific-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Service_Specific_Type_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Service_Specific_Type_AVP + + /** + * @desc The Service-Specific-Data AVP (AVP code 863) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the value of the Service-Specific-Data + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.194 Service-Specific-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Service_Specific_Data_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Service_Specific_Data_AVP + + type record QoS_Information_AVP{ + //Ref: ETSI TS 129 212 QoS_Information_AVP + AVP_Header aVP_Header, // + QoS_Class_Identifier_AVP qoS_Class_Identifier optional, + Max_Requested_Bandwidth_UL_AVP max_Requested_Bandwidth_UL optional, + Max_Requested_Bandwidth_DL_AVP max_Requested_Bandwidth_DL optional, + Guaranteed_Bitrate_UL_AVP guaranteed_Bitrate_UL optional, + Guaranteed_Bitrate_DL_AVP guaranteed_Bitrate_DL optional, + Bearer_Identifier_AVP bearer_Identifier optional, + Allocation_Retention_Priority_AVP allocation_Retention_Priority optional, + APN_Aggregate_Max_Bitrate_UL_AVP aPN_Aggregate_Max_Bitrate_UL optional, + APN_Aggregate_Max_Bitrate_DL_AVP aPN_Aggregate_Max_Bitrate_DL optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1016);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Allocation_Retention_Priority_AVP{ + //Ref: ETSI TS 129 212 Allocation_Retention_Priority_AVP + AVP_Header aVP_Header, // + Priority_Level_AVP priority_Level, + Pre_emption_Capability_AVP pre_emption_Capability optional, + Pre_emption_Vulnerability_AVP pre_emption_Vulnerability optional + } +// with { +// variant "present=bytes(4, 1034);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (pre_emption_Vulnerability) "condition=CodecHelper.leaveScope()" +// } + + type record Pre_emption_Capability_AVP{ + //Ref: ETSI TS 129 212 Pre_emption_Capability_AVP + AVP_Header aVP_Header,// + Pre_emption_Capability aVP_Data + } +// with { +// variant "present=bytes(4, 1047);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type enumerated Pre_emption_Capability{ + // Ref: ETSI TS 129 212 5.3.46 + PRE_EMPTION_CAPABILITY_ENABLED_E (0), + PRE_EMPTION_CAPABILITY_DISABLED_E (1) + } +// with { +// variant "length=32" +// } + + type record Pre_emption_Vulnerability_AVP{ + //Ref: ETSI TS 129 212 Pre_emption_Vulnerabilitye_AVP + AVP_Header aVP_Header,// + Pre_emption_Vulnerability aVP_Data + } + // with { + // variant "present=bytes(4, 1048);use=com.testingtech.ttcn.tci.codec.CodecHelper" + // variant (aVP_Data) "condition=CodecHelper.leaveScope()" + // } + + type enumerated Pre_emption_Vulnerability{ + // Ref: ETSI TS 129 212 5.3.47 + PRE_EMPTION_VULNERABILITY_ENABLED_E (0), + PRE_EMPTION_VULNERABILITY_DISABLED_E (1) + } +// with { +// variant "length=32" +// } + + type record Priority_Level_AVP{ + //Ref: ETSI TS 129 212 Priority_Level_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1046);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Bearer_Identifier_AVP{ + //Ref: ETSI TS 129 212 Bearer_Identifier_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1020);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Guaranteed_Bitrate_DL_AVP{ + //Ref: ETSI TS 129 212 Guaranteed_Bitrate_DL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1025);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Guaranteed_Bitrate_UL_AVP{ + //Ref: ETSI TS 129 212 Guaranteed_Bitrate_UL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1026);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Max_Requested_Bandwidth_UL_AVP{ + //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_UL AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 516);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Max_Requested_Bandwidth_DL_AVP{ + //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_DL AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 515);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record QoS_Class_Identifier_AVP{ + //Ref: ETSI TS 129 212 QoS_Class_Identifier_AVP + AVP_Header aVP_Header,// + QoS_Class_Identifier aVP_Data + } +// with { +// variant "present=bytes(4, 1028);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type enumerated QoS_Class_Identifier{ + // Ref: ETSI TS 129 212 5.3.17 + Reserved1_E ( 0), + QCI_1_E (1),//examle service=conversational voice + QCI_2_E (2),//examle service=conversational video + QCI_3_E (3),//examle service=real time gaming + QCI_4_E (4),//examle service=non-conversational video + QCI_5_E (5),//examle service=IMS signalling + QCI_6_E (6),//examle service=video(TCP based) + QCI_7_E (7),//examle service=voice,video(life streaming) + QCI_8_E (8),//examle service=video(buffered streaming) + QCI_9_E (9),//examle service=video(buffered streaming) + Reserved2_E ( 10), // .. 127 + OperatorSpecific_E (128), // .. 254 + Reserved3_E (255) + } +// with { +// variant "length=32" +// } + + type record APN_Aggregate_Max_Bitrate_UL_AVP{ + //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_UL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1041);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record APN_Aggregate_Max_Bitrate_DL_AVP{ + //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_DL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1040);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + /** + * @desc The PS-Furnish-Charging-Information AVP (AVP code 865) + * @member aVP_Header Header AVP + * @member threeGPP_Charging_Id TODO + * @member ps_Free_Format_Data TODO + * @member ps_Append_Free_Format_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.157 PS-Furnish-Charging-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PS_Furnish_Charging_Information_AVP { + AVP_Header aVP_Header,// + ThreeGPP_Charging_Id_AVP threeGPP_Charging_Id, + PS_Free_Format_Data_AVP ps_Free_Format_Data, + PS_Append_Free_Format_Data_AVP ps_Append_Free_Format_Data optional + } // End of type PS_Furnish_Charging_Information_AVP + + /** + * @desc The PS-Append-Free-Format-Data AVP (AVP code 867) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates if the information sent in the PS-Free-Format-Data AVP must be appended to the PS-free-format-data stored for the online-session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.155 PS-Append-Free-Format-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PS_Append_Free_Format_Data_AVP { + AVP_Header aVP_Header,// + PS_Append_Free_Format_Data aVP_Data + } // End of type PS_Append_Free_Format_Data_AVP + + /** + * @desc The PS-Append-Free-Format-Data enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.155 PS-Append-Free-Format-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PS_Append_Free_Format_Data { + APPEND_E (0), + OVERWRITE_E (1) +// } with { +// variant "length=32" + } // End of type PS_Append_Free_Format_Data + + /** + * @desc The PS-Furnish-Charging-Information AVP (AVP code 866) + * @member aVP_Header Header AVP + * @member aVP_Data Holds online charging session specific data + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.156 PS-Free-Format-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PS_Free_Format_Data_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type PS_Free_Format_Data_AVP + + /** + * @desc The Quota-Holding-Time AVP (AVP code 871) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the quota holding time in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.160 Quota-Holding-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Quota_Holding_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Quota_Holding_Time_AVP + + /** + * @desc The Quota-Consumption-Time AVP (AVP code 881) + * @member aVP_Header Header AVP + * @member aVP_Data Contains an idle traffic aVP_Data time in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.159 Quota-Consumption-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Quota_Consumption_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Quota_Consumption_Time_AVP + + /** + * @desc The Time-Quota-Threshold AVP (AVP code 868) + * @member aVP_Header Header AVP + * @member aVP_Data Contains a threshold value in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.229 Time-Quota-Threshold AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Time_Quota_Threshold_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Time_Quota_Threshold_AVP + + /** + * @desc The Volume-Quota-Threshold AVP (AVP code 869) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the session identifier + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.243 Volume-Quota-Threshold AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Volume_Quota_Threshold_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Volume_Quota_Threshold_AVP + + /** + * @desc The Unit-Quota-Threshold AVP (AVP code 1226) + * @member aVP_Header Header AVP + * @member aVP_Data Threshold value in service specific units + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.240 Unit-Quota-Threshold AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Unit_Quota_Threshold_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Unit_Quota_Threshold_AVP + + type record Service_Parameter_Type_AVP{ + // Ref: RFC4006 8.44. Service-Parameter-Type AVP + AVP_Header aVP_Header,//< AVP Header: 441 > + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 441);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Service_Parameter_Value_AVP{ + // Ref: RFC4006 8.45. Service-Parameter-Value AVP + AVP_Header aVP_Header,//< AVP Header: 442 > + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 442);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + type set Service_Parameter_Info_AVP{ + // Ref: RFC4006 8.43. Service-Parameter-Info AVP + AVP_Header aVP_Header,//< AVP Header: 440 > + Service_Parameter_Type_AVP service_Parameter_Type, + Service_Parameter_Value_AVP service_Parameter_Value + } +// with { +// variant "present=bytes(4, 440);use=com.testingtech.ttcn.tci.codec.CodecHelper" + // variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record CC_Correlation_Id_AVP{ + // Ref: RFC4006 8.1. CC-Correlation-Id AVP + AVP_Header aVP_Header,//< AVP Header: 411 > + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 411);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record User_Equipment_Info_Type_AVP{ + // Ref: RFC4006 8.50. User-Equipment-Info-Type AVP + AVP_Header aVP_Header,//< AVP Header: 459 > + User_Equipment_Info_Ty_Type aVP_Data + } +// with { +// variant "present=bytes(4, 459);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record User_Equipment_Info_Value_AVP{ + // Ref: RFC4006 8.51. User-Equipment-Info-Value AVP + AVP_Header aVP_Header,//< AVP Header: 460 > + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 460);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + type set User_Equipment_Info_AVP{ + // Ref: RFC4006 8.49. User-Equipment-Info AVP + AVP_Header aVP_Header,//< AVP Header: 458 > + User_Equipment_Info_Type_AVP user_Equipment_Info_Type, + User_Equipment_Info_Value_AVP user_Equipment_Info_Value + } +// with { +// variant "present=bytes(4, 458);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (user_Equipment_Info_Value) "condition=CodecHelper.leaveScope()" +// } + type record CC_Session_Failover_AVP{ + // Ref: RFC4006 8.4. CC-Session-Failover AVP + AVP_Header aVP_Header,//< AVP Header: 418 > + CC_Session_Failover_Type aVP_Data + } +// with { +// variant "present=bytes(4, 418);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Cost_Unit_AVP{ + // Ref: RFC4006 8.12. Cost-Unit AVP + AVP_Header aVP_Header,//< AVP Header: 424 > + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 424);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type set Cost_Information_AVP{ + // Ref: RFC4006 8.7. Cost-Information AVP + AVP_Header aVP_Header,//< AVP Header: 423 > + Unit_Value_AVP unit_Value, + Currency_Code_AVP currency_Code, + Cost_Unit_AVP cost_Unit optional + } +// with { +// variant "present=bytes(4, 423);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (cost_Unit) "condition=CodecHelper.leaveScope()" +// } + type record Check_Balance_Result_AVP{ + // Ref: RFC4006 8.6. Check-Balance-Result AVP 12.8. Check-Balance-Result AVP + AVP_Header aVP_Header,//< AVP Header: 422 > + Check_Balance_Result_Type aVP_Data + } +// with { +// variant "present=bytes(4, 422);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Credit_Control_Failure_Handling_AVP{ + // Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP + AVP_Header aVP_Header,//< AVP Header: 427 > + Credit_Cont_Fail_Hand_Type aVP_Data + } +// with { +// variant "present=bytes(4, 427);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Direct_Debiting_Failure_Handling_AVP{ + // Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP + AVP_Header aVP_Header,//< AVP Header: 428 > + Direct_Debi_Fail_Hand_Type aVP_Data + } +// with { +// variant "present=bytes(4, 428);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + }//end of group RFC4006_AVPa + + group RFC5580_AVPS { + + /** + * @desc The Operator-Name Attribute (AVP code 126) + * @member aVP_Header Header AVP + * @member namespace_Id Namespace ID + * @member operator_Name Contains the operator namespace identifier AND an Access Network Operator Name + * + * @see RFC5580 Clause 4.1. Operator-Name Attribute + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Operator_Name_AVP { + AVP_Header aVP_Header,// + UInt8 namespace_Id, + UTF8String operator_Name + } // End of type Operator_Name_AVP + + /** + * @desc The Operator-Name Attribute (AVP code 127) + * @member aVP_Header Header AVP + * @member index Allows this attribute to provide information relating to the information included in the Location- Data Attribute to which it refers (via the Index) + * @member code Indicates the content of the location profile carried in the Location-Data Attribute + * @member entity Refers to as an unsigned 8-bit integer value + * @member sighting_Time Indicates when the location information was accurate + * @member time_to_Live Gives a hint regarding for how long location information should be considered current + * @member method Describes the way that the location information was determined + * + * @see RFC5580 Clause 4.2. Location-Information Attribute + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Location_Information_AVP { + AVP_Header aVP_Header,// + UInt16 index, + UInt8 code, + UInt8 entity, + UInt64 sighting_Time, + UInt64 time_to_Live, + UTF8String method + } // End of type Location_Information_AVP + + /** + * @desc The Location-Data Attribute (AVP code 128) + * @member aVP_Header Header AVP + * @member index TODO + * @member aVP_Data TODO + * + * @see RFC5580 Clause 4.3. Location-Data Attribute + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Location_Data_AVP { + AVP_Header aVP_Header,// + UInt16 index, + UTF8String aVP_Data + } // End of type Location_Data_AVP + + } // End of group RFC5580_AVPS + + // FIXME Can be moved in TTCN-3 module LibDiameter_Types_GiSGi_AVPs if GiSGi interface will be ddeveloped + group TS129_061_AVPSGiSGi{ + + type record RAI_AVP{ + //Ref: ETSI TS 129 061 RAI_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 909);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record ThreeGPP_SGSN_Address_AVP{ + //Ref: ETSI TS 129 061 3GPP_SGSN_Address + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 6);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record ThreeGPP_SGSN_IPv6_Address_AVP{ + //Ref: ETSI TS 129 061 3GPP_SGSN_Address + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 15);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record ThreeGPP_User_Location_Info_AVP{ + //Ref: ETSI TS 129 061 ThreeGPP_User_Location_Info_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 22);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record ThreeGPP_MS_TimeZone_AVP{ + //Ref: ETSI TS 129 061 ThreeGPP_MS_TimeZone_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 23);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record ThreeGPP_RAT_Type_AVP{ + //Ref: ETSI TS 129 061 ThreeGPP_RAT_Type_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 21);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record ThreeGPP_SGSN_MCC_MNC_AVP{ + //Ref: ETSI TS 129 061 ThreeGPP_SGSN_MCC_MNC_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 18);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_IMSI_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_IMSI_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_Charging_Id_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type ThreeGPP_Charging_Id_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_PDP_Type_AVP { + AVP_Header aVP_Header,// + ThreeGPP_PDP_Type aVP_Data + } // End of type ThreeGPP_PDP_Type_AVP + + /** + * @desc PDP context ot type + * + * @see ETSI TS 129 061 V10.12.0 Table 7: List of the 3GPP Vendor-Specific sub-attributes + */ + type enumerated ThreeGPP_PDP_Type { + IP (0), + PPP (1), + IPv4 (2), + IPv6 (3), + IPv4v6 (4) + } +// } with { +// variant "length=32" +// } // End of type ThreeGPP_PDP_Type + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_IMSI_MCC_MNC_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_IMSI_MCC_MNC_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_GGSN_MCC_MNC_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_GGSN_MCC_MNC_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_NSAPI_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_NSAPI_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_Session_Stop_Indicator_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_Session_Stop_Indicator_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_Selection_Mode_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_Selection_Mode_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_Charging_Characteristics_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_Charging_Characteristics_AVP + + }//end of group TS129_061_AVPSGiSGi + + group TS129_272_AVPs{ + + type UTF8String IMEI length (14..15); + type record IMEI_AVP { //ref: 7.3.4 + AVP_Header aVP_Header, //IMEI ::= + IMEI aVP_Data //14 digits, 8-digit Type Allocation Code (TAC) + 6-digit Serial Number (SNR). + //It may also include a 15th digit + } + + type UTF8String SVN length (2); + type record Sofware_Version_AVP { //ref: 7.3.5 + AVP_Header aVP_Header, //Software-Version ::= + SVN aVP_Data //2-digit Software Version Number (SVN) + } + + type record Terminal_Information_AVP { //ref: 7.3.3 + AVP_Header aVP_Header, //Terminal Information ::= + IMEI_AVP imei optional, + ThreeGPP2_MEID_AVP meid optional, + Sofware_Version_AVP sofware_Version optional, + set of AVP_Type aVP_Type optional + } + + type octetstring ThreeGPP2_MEID length (8); + type record ThreeGPP2_MEID_AVP { //ref: 7.3.6 + AVP_Header aVP_Header, //3GPP2-MEID ::= + ThreeGPP2_MEID aVP_Data + } + + type record Trace_Data_AVP{ + //Ref: ETSI TS 129 272 Trace_Data_AVP + AVP_Header aVP_Header, // + Trace_Reference_AVP trace_Reference, + Trace_Depth_AVP trace_Depth, + Trace_NE_Type_List_AVP trace_NE_Type_List, + Trace_Event_List_AVP trace_Event_List, + Trace_Collection_Entity_AVP trace_Collection_Entityt, + Trace_Interface_List_AVP trace_Interface_List optional, + OMC_Id_AVP oMC_Id optional, + MDT_Configuration_AVP mDT_Configuration optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1485);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Trace_Reference_AVP{ + //Ref: ETSI TS129 272 Trace_Reference_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1459);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Trace_Depth_AVP{ + //Ref: ETSI TS129 272 Trace_Depth_AVP + AVP_Header aVP_Header, // + Trace_Depth aVP_Data + } +// with { +// variant "present=bytes(4, 1462);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + + type record Trace_NE_Type_List_AVP{ + //Ref: ETSI TS129 272 Trace_NE_Type_List_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1463);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Trace_Event_List_AVP{ + //Ref: ETSI TS129 272 Trace_Event_List_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1465);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Trace_Collection_Entity_AVP{ + //Ref: ETSI TS129 272 Trace_Collection_Entity_AVP + AVP_Header aVP_Header, // + Address aVP_Data + } +// with { +// variant "present=bytes(4, 1452);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Trace_Interface_List_AVP{ + //Ref: ETSI TS129 272 Trace_Interface_List_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1464);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record OMC_Id_AVP{ + //Ref: ETSI TS129 272 OMC_Id_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1466);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record MDT_Configuration_AVP{ + //Ref: ETSI TS129 272 MDT_Configuration_AVP + AVP_Header aVP_Header, // + Job_Type_AVP job_Type, + Area_Scope_AVP area_Scope optional, + List_Of_Measurements_AVP list_Of_Measurements optional, + Reporting_Trigger_AVP reporting_Trigger optional, + Report_Interval_AVP report_Interval optional, + Report_Amount_AVP report_Amount optional, + Event_Treshold_RSRP_AVP event_Treshold_RSRP optional, + Event_Treshold_RSRQ_AVP event_Treshold_RSRQ optional, + Logging_Interval_AVP logging_Interval optional, + Logging_Duration_AVP logging_Duration optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1622);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Job_Type_AVP{ + //Ref: ETSI TS129 272 Job_Type_AVP + AVP_Header aVP_Header, // + Job_Type aVP_Data + } +// with { +// variant "present=bytes(4, 1623);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Area_Scope_AVP{ + //Ref: ETSI TS129 272 Area_Scope_AVP + AVP_Header aVP_Header, // + set of Cell_Global_Identity_AVP cell_Global_Identity optional, + set of E_UTRAN_Cell_Global_Identity_AVP e_UTRAN_Cell_Global_Identity_AVP optional, + set of Routing_Area_Identity_AVP routing_Area_Identity optional, + set of Location_Area_Identity_AVP location_Area_Identity optional, + set of Tracking_Area_Identity_AVP tracking_Area_Identity optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1624);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (cell_Global_Identity) "fieldPresent=bytes(4, 1604)&&CodecHelper.isAvailable()" +// variant (e_UTRAN_Cell_Global_Identity_AVP) "fieldPresent=bytes(4, 1602)&&CodecHelper.isAvailable()" +// variant (routing_Area_Identity) "fieldPresent=bytes(4, 1605)&&CodecHelper.isAvailable()" +// variant (location_Area_Identity) "fieldPresent=bytes(4, 1606)&&CodecHelper.isAvailable()" +// variant (tracking_Area_Identity) "fieldPresent=bytes(4, 1603)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record List_Of_Measurements_AVP{ + //Ref: ETSI TS129 272 List_Of_Measurements_AVP + AVP_Header aVP_Header, // + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1625);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Reporting_Trigger_AVP{ + //Ref: ETSI TS129 272 Reporting_Trigger_AVP + AVP_Header aVP_Header, // + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1626);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Report_Interval_AVP{ + //Ref: ETSI TS129 272 Report_Interval_AVP + AVP_Header aVP_Header, // + Report_Interval aVP_Data + } +// with { +// variant "present=bytes(4, 1627);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Report_Amount_AVP{ + //Ref: ETSI TS129 272 Report_Amount_AVP + AVP_Header aVP_Header, // + Report_Amount aVP_Data + } +// with { +// variant "present=bytes(4, 1628);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Event_Treshold_RSRP_AVP{ + //Ref: ETSI TS129 272 Event_Treshold_RSRP_AVP + AVP_Header aVP_Header, // + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1629);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Event_Treshold_RSRQ_AVP{ + //Ref: ETSI TS129 272 Event_Treshold_RSRQ_AVP + AVP_Header aVP_Header, // + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1630);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Logging_Interval_AVP{ + //Ref: ETSI TS129 272 Logging_Interval_AVP + AVP_Header aVP_Header, // + Logging_Interval aVP_Data + } +// with { +// variant "present=bytes(4, 1631);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Logging_Duration_AVP{ + //Ref: ETSI TS129 272 Logging_Duration_AVP + AVP_Header aVP_Header, // + Logging_Duration aVP_Data + } +// with { +// variant "present=bytes(4, 1632);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Cell_Global_Identity_AVP{ + //Ref: ETSI TS129 272 Cell_Global_Identity_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1604);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record E_UTRAN_Cell_Global_Identity_AVP{ + //Ref: ETSI TS129 272 E_UTRAN_Cell_Global_Identity_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1602);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Routing_Area_Identity_AVP{ + //Ref: ETSI TS129 272 Routing_Area_Identity_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1605);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Location_Area_Identity_AVP{ + //Ref: ETSI TS129 272 Location_Area_Identity_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1606);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Tracking_Area_Identity_AVP{ + //Ref: ETSI TS129 272 Tracking_Area_Identity_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1603);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + }//end of group TS129_272_AVPs + + group TS129_299_AVPs{ + + type record Charging_Information_AVP{ + //Ref: ETSI TS 129 299 Charging_Information_AVP + AVP_Header aVP_Header, // + Primary_Event_Charging_Function_Name_AVP primary_Event_Charging_Function_Name optional, + Secondary_Event_Charging_Function_Name_AVP secondary_Event_Charging_Function_Name optional, + Primary_Charging_Collection_Function_Name_AVP primary_Charging_Collection_Function_Name optional, + Secondary_Charging_Collection_Function_Name_AVP secondary_Charging_Collection_Function_Name optional, + set of AVP_Type aVP_Type optional + } + + type record Primary_Event_Charging_Function_Name_AVP{ + //Ref: ETSI TS 129 299 Primary_Event_Charging_Function_Name_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } + + type record Secondary_Event_Charging_Function_Name_AVP{ + //Ref: ETSI TS 129 299 Secondary_Event_Charging_Function_Name_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } + + type record Primary_Charging_Collection_Function_Name_AVP{ + //Ref: ETSI TS 129 299 Primary_Charging_Collection_Function_Name_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } + + type record Secondary_Charging_Collection_Function_Name_AVP{ + //Ref: ETSI TS 129 299 Secondary_Charging_Collection_Function_Name_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } + + }//end of group TS129_299_AVPs + + group TS132_299_AVPs{ + //Types were moved to LibDiameter_Types_RfRo_AVPs + }//end of group TS132_299_AVPs + + group X_S0057_1_AVPs{ + type record ThreeGPP2_BSID_AVP{ + //Ref: Draft X.S0057-1 ThreeGPP2_BSID_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 621);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + }//end of group X_S0057_1_AVPs + + group TS283_034_AVPs{ + type record Logical_Access_ID_AVP{ + //Ref: Draft TS283_034 Logical_Access_ID_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 302);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Physical_Access_ID_AVP{ + //Ref: Draft TS283_034 Physical_Access_ID_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 313);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + }//end of group TS283_034_AVPs + + type record Application_Service_Provider_Identity_AVP{ + //Ref: ETSI TS 129 214 Application_Service_Provider_Identity AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + // with { + // variant "present=bytes(4, 532);use=com.testingtech.ttcn.tci.codec.CodecHelper" + // variant (aVP_Data) "condition=CodecHelper.leaveScope()" + // } + + type record Access_Network_Charging_Identifier_Value_AVP{ + //Ref: ETSI TS 129 214 Access_Network_Charging_Identifier_Value AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 503);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record PDP_Address_AVP { //ref: TS 132 299 7.2.137 + AVP_Header aVP_Header, //PDP-Address ::= + Address aVP_Data + } + + type record Charging_Rule_Base_Name_AVP { + //Ref: ETSI TS 129 212 Charging_Rule_Base_Name_AVP AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 1004);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Session_Priority_AVP{ + //Ref: ETSI TS 129 229 6.3.56 Multiple_Registration_Indication AVP + AVP_Header aVP_Header,// + Session_Prio_Code aVP_Data +// } +// with { +// variant "present=bytes(4,650);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type enumerated Session_Prio_Code{ + PRIORITY_0 (0), + PRIORITY_1 (1), + PRIORITY_2 (2), + PRIORITY_3 (3), + PRIORITY_4 (4) +// } +// with { +// variant "length=32" + } + + type record Served_Party_IP_Address_AVP { //ref: TS 132 299 7.2.187 + AVP_Header aVP_Header, //Served-Party-IP-Address ::= + Address aVP_Data + } + + type record User_CSG_Information_AVP{ + //Ref: ETSI TS 132 299 User_CSG_Information_AVP + AVP_Header aVP_Header, // + CSG_Id_AVP cSG_Id, + CSG_Access_Mode_AVP cSG_Access_Mode, + CSG_Membership_Indication_AVP CSG_Membership_Indication_AVP optional + } + + type record CSG_Id_AVP{ + //Ref: ETSI TS 132 299 & TS129 272 CSG_Id_AVP + AVP_Header aVP_Header, // + UInt32 aVP_Data + } + + type record CSG_Access_Mode_AVP{ + //Ref: ETSI TS 132 299 CSG_Access_Mode_AVP + AVP_Header aVP_Header, // + CSG_Access_Mode aVP_Data + } + + type record CSG_Membership_Indication_AVP{ + //Ref: ETSI TS 132 299 CSG_Membership_Indication_AVP + AVP_Header aVP_Header, // + CSG_Membership_Indication aVP_Data + } + + group TS129_229Cx_Dx_AVPS{ + type record SIP_Authentication_Context_AVP{ + // Ref: ETSI TS 129 229 V10.5.0 (2013-04) 6.3.13 SIP-Authentication-Context AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + + type record Server_Capabilities_AVP{ + // Ref: ETSI TS 129 229 6.3.4 Server-Capabilities AVP + AVP_Header aVP_Header,// + set of MandatoryCapability_AVP mandatoryCapability optional, + set of OptionalCapability_AVP optionalCapability optional, + set of Server_Name_AVP server_Name optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant "present=bytes(4, 603);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (mandatoryCapability) "fieldPresent=bytes(4, 604)&&CodecHelper.isAvailable()" +// variant (optionalCapability) "fieldPresent=bytes(4, 605)&&CodecHelper.isAvailable()" +// variant (server_Name) "fieldPresent=bytes(4, 602)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record MandatoryCapability_AVP{ + //Ref: ETSI TS 129 229 6.3.5. Mandatory-Capability AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data +// } +// with { +// variant "present=bytes(4, 604);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record OptionalCapability_AVP{ + //Ref: ETSI TS 129 229 6.3.6. Optional-Capability AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data +// } +// with { +// variant "present=bytes(4, 605);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + }//end group TS129_229Cx_Dx_AVPS + + group TS129_212Gx_AVPs{ + + type record RAT_Type_AVP{ + //Ref: ETSI TS 129 212 RAT Type AVP + AVP_Header aVP_Header,// + RAT_Type aVP_Data + } +// with { +// variant "present=bytes(4, 1032);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type enumerated RAT_Type{ + // Ref: ETSI TS 129 212 5.3.31 + WLAN_E (0), + VIRTUAL_E (1), + UTRAN_E (1000), + GERAN_E (1001), + GAN_E (1002), + HSPA_EVOLUTION_E (1003), + EUTRAN_E (1004), + CDMA2000_IX_E (2000), + HRPD_E(2001), + UMB_E(2002), + EHRPD_E(2003) + } +// with { +// variant "length=32" +// } + + }//end group TS129_212Gx_AVPs + + }//end group AVPs + + + + group NumberTypes { + + type float FLOAT32; + + //not supported so far but not used as well + type float FLOAT64; + + type record length (4) of UInt8 IPv4Addr; + + type record length (8) of UInt16 IPv6Addr; + + type universal charstring UTF8String; + + }// end group NumberTypes + +} with { + encode "DIAMETERCodec"; variant ""; +} //end module LibDiameter_Types_Base_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..72652b74f4cc4b783b4735ae7e787b681323eef4 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn @@ -0,0 +1,389 @@ +/** + * @author STF 480 + * @version $Id$ + * @desc This module defines Diameter Cx and Dx AVP types used by LibDiameter constructs.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new Rx AVP types is ok; + */ +module LibDiameter_Types_CxDx_AVPs { + + import from LibCommon_BasicTypesAndValues all; + + //import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; + + group AVPCodeConstants { + + /** + * ETSI TS 129 229 V10.5.0 (2013-04) Clause 6.3.42 Line-Identifier AVP + */ + const integer c_line_Identifier_AVP_Code := 500; + + } + + group AVPTypes{ + + group Enum_AVP_Cx_Dx_Types{ + + type enumerated User_Authorization_Type_Code{ + // Ref: ETSI TS 129 299 6.3.24 + REGISTRATION (0), + DE_REGISTRATION (1), + REGISTRATION_AND_CAPABILITIES (2) +// } +// with { +// variant "length=32" + } + + type enumerated Srv_Assgmt_Type_Code{ + NO_ASSIGNMENT_E (0), + REGISTRATION_E (1), + RE_REGISTRATION_E (2), + UNREGISTERED_USER_E (3), + TIMEOUT_DEREGISTRATION_E (4), + USER_DEREGISTRATION_E (5), + TIMEOUT_DEREGISTRATION_STORE_SERVER_NAME_E (6), + USER_DEREGISTRATION_STORE_SERVER_NAME_E (7), + ADMINISTRATIVE_DEREGISTRATION_E (8), + AUTHENTICATION_FAILURE_E (9), + AUTHENTICATION_TIMEOUT_E (10), + DEREGISTRATION_TOO_MUCH_DATA_E (11), + AAA_USER_DATA_REQUEST (12), + PGW_UPDATE (13) +// } +// with { +// variant "length=32" + } + + type enumerated Usr_Dat_Al_Av_Code{ + USER_DATA_NOT_AVAILABLE_E (0), + USER_DATA_ALREADY_AVAILABLE_E (1) +// } +// with { +// variant "length=32" + } + + type enumerated Multiple_Reg_Id_Code{ + NOT_MULTIPLE_REGISTRATION (0), + MULTIPLE_REGISTRATION (1) +// } +// with { +// variant "length=32" + } + + type enumerated Loose_Route_Ind_Code{ + LOOSE_ROUTE_NOT_REQUIRED (0), + LOOSE_ROUTE_REQUIRED (1) +// } +// with { +// variant "length=32" + } + + type enumerated Priviledged_Sender_Ind_Code{ + NOT_PRIVILEDGED_SENDER (0), + PRIVILEDGED_SENDER (1) +// } +// with { +// variant "length=32" + } + + type enumerated Originating_Request_Code{ + ORIGINATING (0) +// } +// with { +// variant "length=32" + } + + type enumerated Reason_Code_Type{ + PERMANENT_TERMINATION_E (0), + NEW_SERVER_ASSIGNED_E (1), + SERVER_CHANGE_E (2), + REMOVE_S_CSCF_E (3) +// } +// with { +// variant "length=32" + } + + }//end group Enum_AVP_Cx_Dx_Types + + }//end group AVP_Types + group AVPs{ + group TS129_229Cx_Dx_AVPS{ + + type record Visited_Network_Identifier_AVP{ + // Ref: ETSI TS 129 229 6.3.1 Visited-Network-Id AVP + AVP_Header aVP_Header,// + octetstring aVP_Data +// } +// with { +// variant "present=bytes(4, 600);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record UAR_Flags_AVP{ + //Ref: ETSI TS 129 229 6.3.44 UAR_Flags_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data +// } +// with { +// variant "present=bytes(4, 637);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record User_Authorization_Type_AVP{ + //Ref: ETSI TS 129 229 6.3.24 User_Authorization_Type AVP + AVP_Header aVP_Header,// + User_Authorization_Type_Code aVP_Data +// } +// with { +// variant "present=bytes(4, 520);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Wildcarded_Public_Identity_AVP{ + //Ref: ETSI TS 129 229 6.3.35 Wildcarded_Public_Identity AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data +// } +// with { +// variant "present=bytes(4, 634);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Server_Assignment_Type_AVP{ + //Ref: ETSI TS 129 229 6.3.15 Server-Assignment-Type AVP + AVP_Header aVP_Header,// + Srv_Assgmt_Type_Code aVP_Data +// } +// with { +// variant "present=bytes(4, 614);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record User_Data_Already_Available_AVP{ + //Ref: ETSI TS 129 229 6.3.26 User_Data_Already_Available AVP + AVP_Header aVP_Header,// + Usr_Dat_Al_Av_Code aVP_Data +// } +// with { +// variant "present=bytes(4,624);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record SCSCF_Restoration_Info_AVP{ + //Ref: ETSI TS 129 229 6.3.46 SCSCF_Restoration_Info AVP + AVP_Header aVP_Header,// < AVP Header: 639 > + set length (1..infinity) of Restoration_Info_AVP restoration_Info, + SIP_Authentication_Scheme_AVP sIP_Authentication_Scheme, + set of AVP_Type aVP_Type optional +// } +// with { +// variant "present=bytes(4, 639);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Restoration_Info_AVP{ + //Ref: ETSI TS 129 229 6.3.52 Restoration_Info AVP + AVP_Header aVP_Header,// < AVP Header: 649 > + Path_AVP path, + Contact_AVP contact, + Subscription_Info_AVP subscription_Info optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant "present=bytes(4, 649);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Path_AVP{ + // Ref: ETSI TS 129 229 6.3.47 Path AVP + AVP_Header aVP_Header,// + octetstring aVP_Data +// } +// with { +// variant "present=bytes(4, 640);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Subscription_Info_AVP{ + //Ref: ETSI TS 129 229 6.3.49 Subscription_Info AVP + AVP_Header aVP_Header,// < AVP Header: 642 > + Call_ID_SIP_Header_AVP call_ID_SIP_Header, + From_SIP_Header_AVP from_SIP_Header, + To_SIP_Header_AVP to_SIP_Header, + Record_Route_AVP record_Route, + Contact_AVP contact, + set of AVP_Type aVP_Type optional +// } +// with { +// variant "present=bytes(4, 642);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Contact_AVP{ + // Ref: ETSI TS 129 229 6.3.48 Contact AVP + AVP_Header aVP_Header,// + octetstring aVP_Data +// } +// with { +// variant "present=bytes(4, 641);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Call_ID_SIP_Header_AVP{ + // Ref: ETSI TS 129 229 6.3.49.1 Call_ID_SIP_Header AVP + AVP_Header aVP_Header,// + octetstring aVP_Data +// } +// with { +// variant "present=bytes(4, 643);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record From_SIP_Header_AVP{ + // Ref: ETSI TS 129 229 6.3.49.2 From_SIP_Header AVP + AVP_Header aVP_Header,// + octetstring aVP_Data +// } +// with { +// variant "present=bytes(4, 644);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record To_SIP_Header_AVP{ + // Ref: ETSI TS 129 229 6.3.49.3 To_SIP_Header AVP + AVP_Header aVP_Header,// + octetstring aVP_Data +// } +// with { +// variant "present=bytes(4, 645);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Record_Route_AVP{ + // Ref: ETSI TS 129 229 6.3.49.4 Record_Route AVP + AVP_Header aVP_Header,// + octetstring aVP_Data +// } +// with { +// variant "present=bytes(4, 646);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Multiple_Registration_Indication_AVP{ + //Ref: ETSI TS 129 229 6.3.51 Multiple_Registration_Indication AVP + AVP_Header aVP_Header,// + Multiple_Reg_Id_Code aVP_Data +// } +// with { +// variant "present=bytes(4,648);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Associated_Identities_AVP{ + //Ref: ETSI TS 129 229 6.3.33 Subscription_Info AVP + AVP_Header aVP_Header,// < AVP Header: 632 > + User_Name_AVP user_Name optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant "present=bytes(4, 632);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Associated_Registered_Identities_AVP{ + //Ref: ETSI TS 129 229 6.3.50 Subscription_Info AVP + AVP_Header aVP_Header,// < AVP Header: 647 > + User_Name_AVP user_Name optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant "present=bytes(4, 647);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Loose_Route_Indication_AVP{ + //Ref: ETSI TS 129 229 6.3.45 Multiple_Registration_Indication AVP + AVP_Header aVP_Header,// + Loose_Route_Ind_Code aVP_Data +// } +// with { +// variant "present=bytes(4,638);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Priviledged_Sender_Indication_AVP{ + //Ref: ETSI TS 129 229 6.3.58 Multiple_Registration_Indication AVP + AVP_Header aVP_Header,// + Priviledged_Sender_Ind_Code aVP_Data +// } +// with { +// variant "present=bytes(4,652);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Originating_Request_AVP{ + //Ref: ETSI TS 129 229 6.3.58 Multiple_Registration_Indication AVP + AVP_Header aVP_Header,// + Originating_Request_Code aVP_Data +// } +// with { +// variant "present=bytes(4,652);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Deregistration_Reason_AVP{ + //Ref: ETSI TS 129 229 6.3.16 Deregistration_Reason AVP + AVP_Header aVP_Header,//SIP-Deregistration-Reason ::= < AVP Header: 615 > + Reason_Code_AVP reason_Code,//requi. + Reason_Info_AVP reason_Info optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant "present=bytes(4, 615);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Reason_Code_AVP{ + //Ref: ETSI TS 129 229 6.3.17 Reason_Code AVP + AVP_Header aVP_Header,// + Reason_Code_Type aVP_Data +// } +// with { +// variant "present=bytes(4, 616);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Reason_Info_AVP{ + //Ref: ETSI TS 129 229 6.3.18 Reason_Info AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data +// } +// with { +// variant "present=bytes(4, 617);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Identity_with_Emergency_Registration_AVP{ + //Ref: ETSI TS 129 229 6.3.57 Identity_with_Emergency_Registration AVP + AVP_Header aVP_Header,//SIP-Deregistration-Reason ::= < AVP Header: 651 > + User_Name_AVP user_Name, + Public_Identity_AVP public_Identity, + set of AVP_Type aVP_Type optional +// } +// with { +// variant "present=bytes(4, 651);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + }//end of group TS129_229Cx_Dx_AVPs + + }//end group AVPs + + +} with { + encode "DIAMETERCodec"; variant ""; +} //end module LibDiameter_Types_Cx_Dx_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..b194f540d38272200c52f5e49102acd994319a8d --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn @@ -0,0 +1,1015 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter Gx and Gxx AVP types used by LibDiameter constructs.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new Gx and Gxx AVP types is ok; + */ +module LibDiameter_Types_Gx_AVPs { + + import from LibCommon_BasicTypesAndValues all; + + //import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; + //import from LibDiameter_Types_Rx_AVPs all; + //mport from LibDiameter_Types_RfRo_AVPs all; + + group AVPTypes{ + group AVP_Gx_Types{ + + type enumerated IP_CAN_Type{ + // Ref: ETSI TS 129 212 5.3.27 + ThreeGPP_GPRS_E (0), + DOCSIS_E (1), + XDSL_E (2), + WIMAX_E (3), + ThreeGPP2_E (4), + ThreeGPP_EPS_E (5), + NON_3GPP_EPS_E (6) + } +// with { +// variant "length=32" +// } + + type enumerated Bearer_Control_Mode{ + // Ref: ETSI TS 129 212 5.3.23 + UE_ONLY_E (0), + RESERVED_E (1), + UE_NW_E (2) + } +// with { +// variant "length=32" +// } + type enumerated Bearer_Operation{ + // Ref: ETSI TS 129 212 5.3.21 + TERMINATION_E (0), + ESTABLISHMENT_E (1), + MODIFICATION_E (2) + } +// with { +// variant "length=32" +// } + type enumerated Bearer_Usage{ + // Ref: ETSI TS 129 212 5.3.1 + GENERAL_E (0), + IMS_SIGNALLING_E (1) + } +// with { +// variant "length=32" +// } + type enumerated Charging_Correlation_Indicator{ + // Ref: ETSI TS 129 212 5.3.67 + CHARGING_IDENTIFIER_REQUIRED_E (0) + } +// with { +// variant "length=32" +// } + type enumerated CSG_Information_Reporting{ + // Ref: ETSI TS 129 212 5.3.64 + CHANGE_CSG_CELL_E (0), + CHANGE_CSG_SUBSCRIBED_HYBRID_CELL_E (1), + CHANGE_CSG_UNSUBSCRIBED_HYBRID_CELL_E (2) + } +// with { +// variant "length=32" +// } + + type enumerated Event_Trigger{ + // Ref: ETSI TS 129 212 5.3.7 + SGSN_CHANGE_E (0), + QOS_CHANGE_E (1), + RAT_CHANGE_E (2), + TFT_CHANGE_E (3), + PLMN_CHANGE_E (4), + LOSS_OF_BEARER_E (5), + RECOVERY_OF_BEARER_E (6), + IP_CAN_CHANGE_E (7), + QOS_CHANGE_EXCEEDING_AUTHORIZATION_E (11), + RAI_CHANGE_E (12), + USER_LOCATION_CHANGE_E (13), + NO_EVENT_TRIGGERS_E (14), + OUT_OF_CREDIT_E (15), + REALLOCATION_OF_CREDIT_E (16), + REVALIDATION_TIMEOUT_E (17), + UE_IP_ADDRESS_ALLOCATE_E (18), + UE_IP_ADDRESS_RELEASE_E (19), + DEFAULT_EPS_BEARER_QOS_CHANGE_E (20), + AN_GW_CHANGE_E (21), + SUCCESSFUL_RESOURCE_ALLOCATION_E (22), + RESOURCE_MODIFICATION_REQUEST_E (23), + PGW_TRACE_CONTROL_E (24), + UE_TIME_ZONE_CHANGE_E (25), + TAI_CHANGE_E (26), + ECGI_CHANGE_E (27), + CHARGING_CORRELATION_EXCHANGE_E (28), + APN_AMBR_MODIFICATION_FAILURE_E (29), + USER_CSG_INFORMATION_CHANGE_E (30), + USAGE_REPORT_E (33), + DEFAULT_EPS_BEARER_QOS_MODIFICATION_FAILURE_E (34), + USER_CSG_HYBRID_SUBSCRIBED_INFORMATION_CHANGE_E (35), + USER_CSG_HYBRID_UNSUBSCRIBED_INFORMATION_CHANGE_E (36), + ROUTING_RULE_CHANGE_E (37), + MAX_MBR_APN_AMBR_CHANGE_E (38) + } +// with { +// variant "length=32" +// } + type enumerated Flow_Direction{ + // Ref: ETSI TS 129 212 5.3.65 + UNSPECIFIED_E (0), + DOWNLINK_E (1), + UPLINK_E (2), + BIDIRECTIONAL_E (3) + } +// with { +// variant "length=32" +// } + type enumerated Metering_Method{ + // Ref: ETSI TS 129 212 5.3.8 + DURATION_E (0), + VOLUME_E (1), + DURATION_VOLUME_E (2) + } +// with { +// variant "length=32" +// } + type enumerated Network_Request_Support{ + // Ref: ETSI TS 129 212 5.3.24 + NETWORK_REQUEST_NOT_SUPPORTED_E (0), + NETWORK_REQUEST_SUPPORTED_E (1) + } +// with { +// variant "length=32" +// } + type enumerated Offline{ + // Ref: ETSI TS 129 212 5.3.9 + DISABLE_OFFLINE_E (0), + ENABLE_OFFLINE_E (1) + } +// with { +// variant "length=32" +// } + type enumerated Online{ + // Ref: ETSI TS 129 212 5.3.10 + DISABLE_ONLINE_E (0), + ENABLE_ONLINE_E (1) + } +// with { +// variant "length=32" +// } + + type enumerated Packet_Filter_Operation{ + // Ref: ETSI TS 129 212 5.3.57 + DELETION_E (0), + ADDITION_E (1), + MODIFICATION_E (2) + } +// with { +// variant "length=32" +// } + + type enumerated Packet_Filter_Usage{ + // Ref: ETSI TS 129 212 5.3.66 + SEND_TO_UE_E (1) + } +// with { +// variant "length=32" +// } + + type enumerated Reporting_Level{ + // Ref: ETSI TS 129 212 5.3.12 + SERVICE_IDENTIFIER_LEVEL_E (0), + RATING_GROUP_LEVEL_E (1), + SPONSORED_CONNECTIVITY_LEVEL_E (2) + } +// with { +// variant "length=32" +// } + + type enumerated PCC_Rule_Status{ + // Ref: ETSI TS 129 212 5.3.19 + ACTIVE_E (0), + INACTIVE_E (1), + TEMPORARILY_INACTIVE_E (2) + } + + type enumerated Session_Release_Cause{ + // Ref: ETSI TS 129 212 5.3.44 + UNSPECIFIED_REASON_E (0), + UE_SUBSCRIPTION_REASON_E (1), + INSUFFICIENT_SERVER_RESOURCES_E (2) + } +// with { +// variant "length=32" +// } + + type enumerated QoS_Negotiation{ + // Ref: ETSI TS 129 212 5.3.28 + NO_QoS_NEGOTIATION_E (0), + QoS_NEGOTIATION_SUPPORTED_E (1) + } +// with { +// variant "length=32" +// } + + type enumerated QoS_Upgrade{ + // Ref: ETSI TS 129 212 5.3.29 + QoS_UPGRADE_NOT_SUPPORTED_E (0), + QoS_UPGRADE_SUPPORTED_E (1) + } +// with { +// variant "length=32" +// } + + type enumerated Resource_Allocation_Notification{ + // Ref: ETSI TS 129 212 5.3.50 + ENABLE_NOTIFICATION_E (0) + } +// with { +// variant "length=32" +// } + + type enumerated Rule_Failure_Code{ + // Ref: ETSI TS 129 212 5.3.38 + UNKNOWN_RULE_NAME_E (1), + RATING_GROUP_ERROR_E (2), + SERVICE_IDENTIFIER_ERROR_E (3), + GW_PCEF_MALFUNCTION_E (4), + RESOURCES_LIMITATION_E (5), + MAX_NR_BEARERS_REACHED_E (6), + UNKNOWN_BEARER_ID_E (7), + MISSING_BEARER_ID_E (8), + MISSING_FLOW_INFORMATION_E (9), + RESOURCE_ALLOCATION_FAILURE_E (10), + UNSUCCESSFUL_QOS_VALIDATION_E (11), + INCORRECT_FLOW_INFORMATION_E (12), + PS_TO_CS_HANDOVER_E (13), + NO_BEARER_BOUND_E (15) + } + + type enumerated Usage_Monitoring_Level{ + // Ref: ETSI TS 129 212 5.3.61 + SESSION_LEVEL_E (0), + PCC_RULE_LEVEL_E (1) + } +// with { +// variant "length=32" +// } + + type enumerated Usage_Monitoring_Report{ + // Ref: ETSI TS 129 212 5.3.62 + USAGE_MONITORING_REPORT_REQUIRED_E (0) + } +// with { +// variant "length=32" +// } + + type enumerated Usage_Monitoring_Support{ + // Ref: ETSI TS 129 212 5.3.63 + USAGE_MONITORING_DISABLED_E (0) + } +// with { +// variant "length=32" +// } + + }//end group AVP_Gx_Types + + }//end group AVP_Types + group AVPs{ + group TS129_212Gx_AVPs{ + + type record IP_CAN_Type_AVP{ + //Ref: ETSI TS 129 212 IP CAN Type AVP + AVP_Header aVP_Header,// + IP_CAN_Type aVP_Data + } +// with { +// variant "present=bytes(4, 1027);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Bearer_Control_Mode_AVP{ + //Ref: ETSI TS 129 212 Bearer_Control_Mode_AVP + AVP_Header aVP_Header,// + Bearer_Control_Mode aVP_Data + } +// with { +// variant "present=bytes(4, 1023);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Bearer_Operation_AVP{ + //Ref: ETSI TS 129 212 Bearer_Operation_AVP + AVP_Header aVP_Header,// + Bearer_Operation aVP_Data + } +// with { +// variant "present=bytes(4, 1021);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Bearer_Usage_AVP{ + //Ref: ETSI TS 129 212 Bearer_Usage_AVP + AVP_Header aVP_Header,// + Bearer_Usage aVP_Data + } +// with { +// variant "present=bytes(4, 1000);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Charging_Correlation_Indicator_AVP{ + //Ref: ETSI TS 129 212 Charging_Correlation_Indicator_AVP + AVP_Header aVP_Header,// + Charging_Correlation_Indicator aVP_Data + } +// with { +// variant "present=bytes(4, 1073);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record CSG_Information_Reporting_AVP{ + //Ref: ETSI TS 129 212 CSG_Information_Reporting_AVP + AVP_Header aVP_Header,// + CSG_Information_Reporting aVP_Data + } +// with { +// variant "present=bytes(4, 1071);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Event_Trigger_AVP{ + //Ref: ETSI TS 129 212 Event_Trigger_AVP + AVP_Header aVP_Header,// + Event_Trigger aVP_Data + } +// with { +// variant "present=bytes(4, 1006);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Flow_Direction_AVP{ + //Ref: ETSI TS 129 212 Flow_Direction_AVP + AVP_Header aVP_Header,// + Flow_Direction aVP_Data + } +// with { +// variant "present=bytes(4, 1080);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Metering_Method_AVP{ + //Ref: ETSI TS 129 212 Metering_Method_AVP + AVP_Header aVP_Header,// + Metering_Method aVP_Data + } +// with { +// variant "present=bytes(4, 1007);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Network_Request_Support_AVP{ + //Ref: ETSI TS 129 212 Network_Request_Support_AVP + AVP_Header aVP_Header,// + Network_Request_Support aVP_Data + } +// with { +// variant "present=bytes(4, 1024);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + // } + + type record Offline_AVP{ + //Ref: ETSI TS 129 212 Offlinet_AVP + AVP_Header aVP_Header,// + Offline aVP_Data + } +// with { +// variant "present=bytes(4, 1008);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Online_AVP{ + //Ref: ETSI TS 129 212 Online_AVP + AVP_Header aVP_Header,// + Online aVP_Data + } +// with { +// variant "present=bytes(4, 1009);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Packet_Filter_Operation_AVP{ + //Ref: ETSI TS 129 212 Packet_Filter_Operation_AVP + AVP_Header aVP_Header,// + Packet_Filter_Operation aVP_Data + } +// with { +// variant "present=bytes(4, 1062);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Packet_Filter_Usage_AVP{ + //Ref: ETSI TS 129 212 Packet_Filter_Usage_AVP + AVP_Header aVP_Header,// + Packet_Filter_Usage aVP_Data + } +// with { +// variant "present=bytes(4, 1072);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + //Ref: ETSI TS 129 212 Reporting_Levele_AVP + type record Reporting_Level_AVP{ + AVP_Header aVP_Header,// + Reporting_Level aVP_Data + } +// with { +// variant "present=bytes(4, 1011);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record PCC_Rule_Status_AVP{ + //Ref: ETSI TS 129 212 PCC_Rule_Status_AVP + AVP_Header aVP_Header,// + PCC_Rule_Status aVP_Data + } + + type record Session_Release_Cause_AVP{ + //Ref: ETSI TS 129 212 Session_Release_Cause_AVP + AVP_Header aVP_Header,// + Session_Release_Cause aVP_Data + } +// with { +// variant "present=bytes(4, 1045);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record QoS_Negotiation_AVP{ + //Ref: ETSI TS 129 212 QoS_Negotiation_AVP + AVP_Header aVP_Header,// + QoS_Negotiation aVP_Data + } +// with { +// variant "present=bytes(4, 1029);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record QoS_Upgrade_AVP{ + //Ref: ETSI TS 129 212 QoS_Upgrade_AVP + AVP_Header aVP_Header,// + QoS_Upgrade aVP_Data + } +// with { +// variant "present=bytes(4, 1030);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Resource_Allocation_Notification_AVP{ + //Ref: ETSI TS 129 212 Resource_Allocation_Notification_AVP + AVP_Header aVP_Header,// + Resource_Allocation_Notification aVP_Data + } +// with { +// variant "present=bytes(4, 1063);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Rule_Failure_Code_AVP{ + //Ref: ETSI TS 129 212 Rule_Failure_Code_AVP + AVP_Header aVP_Header,// + Rule_Failure_Code aVP_Data + } + + type record Usage_Monitoring_Level_AVP{ + //Ref: ETSI TS 129 212 Usage_Monitoring_Level_AVP + AVP_Header aVP_Header,// + Usage_Monitoring_Level aVP_Data + } +// with { +// variant "present=bytes(4, 1068);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Usage_Monitoring_Report_AVP{ + //Ref: ETSI TS 129 212 Usage_Monitoring_Report_AVP + AVP_Header aVP_Header,// + Usage_Monitoring_Report aVP_Data + } +// with { +// variant "present=bytes(4, 1069);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Usage_Monitoring_Support_AVP{ + //Ref: ETSI TS 129 212 Usage_Monitoring_Support_AVP + AVP_Header aVP_Header,// + Usage_Monitoring_Support aVP_Data + } +// with { +// variant "present=bytes(4, 1070);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Charging_Rule_Name_AVP{ + //Ref: ETSI TS 129 212 Charging_Rule_Name_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1005);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Flow_Label_AVP{ + //Ref: ETSI TS 129 212 Flow_Label_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1057);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Monitoring_Key_AVP{ + //Ref: ETSI TS 129 212 Monitoring_Key_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1066);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Packet_Filter_Identifier_AVP{ + //Ref: ETSI TS 129 212 Packet_Filter_Identifier_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1060);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + type record PDN_Connection_ID_AVP{ + //Ref: ETSI TS 129 212 PDN_Connection_ID_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1065);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Routing_Rule_Identifier_AVP{ + //Ref: ETSI TS 129 212 Routing_Rule_Identifier_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1077);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Security_Parameter_Index_AVP{ + //Ref: ETSI TS 129 212 Security_Parameter_Index_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1056);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record ToS_Traffic_Class_AVP{ + //Ref: ETSI TS 129 212 ToS_Traffic_Class_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1014);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Max_Supported_Bandwidth_DL_AVP{ + //Ref: ETSI TS 129 212 Max_Supported_Bandwidth_DL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1083);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Max_Supported_Bandwidth_UL_AVP{ + //Ref: ETSI TS 129 212 Max_Supported_Bandwidth_UL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1084);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Precedence_AVP{ + //Ref: ETSI TS 129 212 Precedence_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1010);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Tunnel_Header_Length_AVP{ + //Ref: ETSI TS 129 212 Tunnel_Header_Length_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1037);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record AN_GW_Address_AVP{ + //Ref: ETSI TS 129 212 AN_GW_Address_AVP + AVP_Header aVP_Header,// + Address aVP_Data + } +// with { +// variant "present=bytes(4, 1050);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record CoA_IP_Address_AVP{ + //Ref: ETSI TS 129 212 CoA_IP_Address_AVP + AVP_Header aVP_Header,// + Address aVP_Data + } +// with { +// variant "present=bytes(4, 1035);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Routing_IP_Address_AVP{ + //Ref: ETSI TS 129 212 Routing_IP_Address_AVP + AVP_Header aVP_Header,// + Address aVP_Data + } +// with { +// variant "present=bytes(4, 1079);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Packet_Filter_Content_AVP{ + //Ref: ETSI TS 129 212 Packet_Filter_Content_AVP + AVP_Header aVP_Header,// + IPFilterRule_Type aVP_Data + } +// with { +// variant "present=bytes(4, 1059);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record TFT_Filter_AVP{ + //Ref: ETSI TS 129 212 TFT_Filter_AVP + AVP_Header aVP_Header,// + IPFilterRule_Type aVP_Data + } +// with { +// variant "present=bytes(4, 1012);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Tunnel_Header_Filter_AVP{ + //Ref: ETSI TS 129 212 Tunnel_Header_Filter_AVP + AVP_Header aVP_Header,// + IPFilterRule_Type aVP_Data + } +// with { +// variant "present=bytes(4, 1036);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Revalidation_Time_AVP{ + //Ref: ETSI TS 129 212 Revalidation_Time_AVP + AVP_Header aVP_Header,// + Time aVP_Data + } +// with { +// variant "present=bytes(4, 1042);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Rule_Activation_Time_AVP{ + //Ref: ETSI TS 129 212 Rule_Activation_Time_AVP + AVP_Header aVP_Header,// + Time aVP_Data + } +// with { +// variant "present=bytes(4, 1043);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Rule_DeActivation_Time_AVP{ + //Ref: ETSI TS 129 212 Rule_DeActivation_Time_AVP + AVP_Header aVP_Header,// + Time aVP_Data + } +// with { +// variant "present=bytes(4, 1044);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Access_Network_Charging_Identifier_Gx_AVP{ + //Ref: ETSI TS 129 212 Access_Network_Charging_Identifier_Gx_AVP + AVP_Header aVP_Header, // + Access_Network_Charging_Identifier_Value_AVP acc_Net_Charging_Id_Val, + set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + set of Charging_Rule_Name_AVP charging_Rule_Name optional + } +// with { +// variant "present=bytes(4, 1022);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" +// variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Charging_Rule_Install_AVP{ + //Ref: ETSI TS 129 212 Charging_Rule_Install_AVP + AVP_Header aVP_Header, // + set of Charging_Rule_Definition_AVP charging_Rule_Definition optional, + set of Charging_Rule_Name_AVP charging_Rule_Name optional, + set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + Bearer_Identifier_AVP bearer_Identifier optional, + Rule_Activation_Time_AVP rule_Activation_Time optional, + Rule_DeActivation_Time_AVP rule_DeActivation_Time optional, + Resource_Allocation_Notification_AVP resource_Allocation_Notification optional, + Charging_Correlation_Indicator_AVP charging_Correlation_Indicator optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1001);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (charging_Rule_Definition) "fieldPresent=bytes(4, 1003)&&CodecHelper.isAvailable()" +// variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" +// variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Charging_Rule_Remove_AVP{ + //Ref: ETSI TS 129 212 Charging_Rule_Install_AVP + AVP_Header aVP_Header, // + set of Charging_Rule_Name_AVP charging_Rule_Name optional, + set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1002);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" +// variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Charging_Rule_Definition_AVP{ + //Ref: ETSI TS 129 212 Charging_Rule_Definition_AVP + AVP_Header aVP_Header, // + Charging_Rule_Name_AVP charging_Rule_Name, + Service_Identifier_AVP service_Identifier optional, + Rating_Group_AVP rating_Group optional, + set of Flow_Information_AVP flow_Information optional, + Flow_Status_AVP flow_Status optional, + QoS_Information_AVP qoS_Information optional, + Reporting_Level_AVP reporting_Level optional, + Online_AVP online optional, + Offline_AVP offline optional, + Metering_Method_AVP metering_Method optional, + Precedence_AVP precedence optional, + AF_Charging_Identifier_AVP aF_Charging_Identifier optional, + set of Flows_AVP flows optional, + Monitoring_Key_AVP monitoring_Key optional, + AF_Signalling_Protocol_AVP aF_Signalling_Protocol optional, + Sponsor_Identity_AVP sponsor_Identity optional, + Application_Service_Provider_Identity_AVP application_Service_Provider_Identity optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1003);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (flow_Information) "fieldPresent=bytes(4, 1058)&&CodecHelper.isAvailable()" +// variant (flows) "fieldPresent=bytes(4, 510)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Charging_Rule_Report_AVP{ + //Ref: ETSI TS 129 212 Charging_Rule_Report_AVP + AVP_Header aVP_Header, // + set of Charging_Rule_Name_AVP charging_Rule_Name optional, + set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + Bearer_Identifier_AVP bearer_Identifier optional, + PCC_Rule_Status_AVP pCC_Rule_Status optional, + Rule_Failure_Code_AVP rule_Failure_Code optional, + Final_Unit_Indication_AVP final_Unit_Indication optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1018);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" +// variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Flow_Information_AVP{ + //Ref: ETSI TS 129 212 Flow_Information_AVP + AVP_Header aVP_Header, // + Flow_Description_AVP flow_Description optional, + Packet_Filter_Identifier_AVP packet_Filter_Identifier optional, + Packet_Filter_Usage_AVP packet_Filter_Usage optional, + ToS_Traffic_Class_AVP toS_Traffic_Class optional, + Security_Parameter_Index_AVP security_Parameter_Index optional, + Flow_Label_AVP flow_Label optional, + Flow_Direction_AVP flow_Direction optional, + set of AVP_Type aVP_Type optional + } + + type record CoA_Information_AVP{ + //Ref: ETSI TS 129 212 CoA_Information_AVP + AVP_Header aVP_Header, // + Tunnel_Information_AVP tunnel_Information, + CoA_IP_Address_AVP coA_IP_Address, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1039);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Default_EPS_Bearer_QoS_AVP{ + //Ref: ETSI TS 129 212 Default_EPS_Bearer_QoS_AVP + AVP_Header aVP_Header, // + QoS_Class_Identifier_AVP qoS_Class_Identifier optional, + Allocation_Retention_Priority_AVP allocation_Retention_Priority optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1049);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Event_Report_Indication_AVP{ + //Ref: ETSI TS 129 212 Event_Report_Indication_AVP + AVP_Header aVP_Header, // + set of Event_Trigger_AVP event_Trigger optional, + User_CSG_Information_AVP user_CSG_Information optional, + RAT_Type_AVP rAT_Type optional, + QoS_Information_AVP qoS_Information optional, + RAI_AVP rAI optional, + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, + Trace_Data_AVP trace_Data optional, + Trace_Reference_AVP trace_Reference optional, + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, + ThreeGPP_MS_TimeZone_AVP threeGPP_MS_TimeZone optional, + ThreeGPP_SGSN_Address_AVP threeGPP_SGSN_Address optional, + ThreeGPP_SGSN_IPv6_Address_AVP threeGPP_SGSN_IPv6_Address optional, + Routing_IP_Address_AVP routing_IP_Address optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1033);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (event_Trigger) "fieldPresent=bytes(4, 1006)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Maximum_Bandwidth_AVP{ + //Ref: ETSI TS 129 212 Maximum_Bandwidth_AVP + AVP_Header aVP_Header, // + Max_Supported_Bandwidth_UL_AVP max_Supported_Bandwidth_UL optional, + Max_Supported_Bandwidth_DL_AVP max_Supported_Bandwidth_DL optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1082);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Packet_Filter_Information_AVP{ + //Ref: ETSI TS 129 212 Packet_Filter_Information_AVP + AVP_Header aVP_Header, // + Packet_Filter_Identifier_AVP packet_Filter_Identifier optional, + Precedence_AVP precedence optional, + Packet_Filter_Content_AVP packet_Filter_Content optional, + ToS_Traffic_Class_AVP toS_Traffic_Class optional, + Security_Parameter_Index_AVP security_Parameter_Index optional, + Flow_Label_AVP flow_Label optional, + Flow_Direction_AVP flow_Direction optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1061);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Routing_Filter_AVP{ + //Ref: ETSI TS 129 212 Routing_Filter_AVP + AVP_Header aVP_Header, // + Flow_Description_AVP flow_Description, + Flow_Direction_AVP flow_Direction, + ToS_Traffic_Class_AVP toS_Traffic_Class optional, + Security_Parameter_Index_AVP security_Parameter_Index optional, + Flow_Label_AVP flow_Label optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1078);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Routing_Rule_Definition_AVP{ + //Ref: ETSI TS 129 212 Routing_Rule_Definition_AVP + AVP_Header aVP_Header, // + Routing_Rule_Identifier_AVP routing_Rule_Identifier, + set of Routing_Filter_AVP routing_Filter optional, + Precedence_AVP precedence optional, + Routing_IP_Address_AVP routing_IP_Address optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1076);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (routing_Filter) "fieldPresent=bytes(4, 1078)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Routing_Rule_Install_AVP{ + //Ref: ETSI TS 129 212 Routing_Rule_Install_AVP + AVP_Header aVP_Header, // + set of Routing_Rule_Definition_AVP routing_Rule_Definition optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1081);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (routing_Rule_Definition) "fieldPresent=bytes(4, 1076)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Routing_Rule_Remove_AVP{ + //Ref: ETSI TS 129 212 Routing_Rule_Remove_AVP + AVP_Header aVP_Header, // + set of Routing_Rule_Identifier_AVP routing_Rule_Identifier optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1075);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (routing_Rule_Identifier) "fieldPresent=bytes(4, 1077)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record TFT_Packet_Filter_Information_AVP{ + //Ref: ETSI TS 129 212 TFT_Packet_Filter_Information_AVP + AVP_Header aVP_Header, // + Precedence_AVP precedence optional, + TFT_Filter_AVP tFT_Filter optional, + ToS_Traffic_Class_AVP toS_Traffic_Class optional, + Security_Parameter_Index_AVP security_Parameter_Index optional, + Flow_Label_AVP flow_Label optional, + Flow_Direction_AVP flow_Direction optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1013);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Tunnel_Information_AVP{ + //Ref: ETSI TS 129 212 Tunnel_Information_AVP + AVP_Header aVP_Header, // + Tunnel_Header_Length_AVP tunnel_Header_Length optional, + record length (0..2) of Tunnel_Header_Filter_AVP tunnel_Header_Filter optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1038);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (tunnel_Header_Filter) "fieldPresent=bytes(4, 1036)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Usage_Monitoring_Information_AVP{ + //Ref: ETSI TS 129 212 Usage_Monitoring_Information_AVP + AVP_Header aVP_Header, // + Monitoring_Key_AVP monitoring_Key optional, + Granted_Service_Unit_AVP granted_Service_Unit optional, + Used_Service_Unit_AVP used_Service_Unit optional, + Usage_Monitoring_Level_AVP usage_Monitoring_Level optional, + Usage_Monitoring_Report_AVP usage_Monitoring_Report optional, + Usage_Monitoring_Support_AVP usage_Monitoring_Support optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1067);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + }//end of group TS129_212Gx_AVPs + + }//end group AVPs + +} with { + encode "DIAMETERCodec"; variant ""; +} //end module LibDiameter_Types_Gx_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..866f9e5fdfc253bd2ec0f09e25530ddfb48d43e2 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn @@ -0,0 +1,3796 @@ +/** + * @author STF 490 + * @version $Id: LibDiameter_Types_RfRo_AVPs.ttcn 180 2015-02-26 07:15:21Z garciay $ + * @desc This module defines Diameter Rf and Ro AVP types used by LibDiameter constructs.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + */ +module LibDiameter_Types_RfRo_AVPs { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibDiameter + //import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; + // import from LibDiameter_Types_S6a_AVPs all; + // import from LibDiameter_Types_Gx_AVPs all; + // import from LibDiameter_Types_Rx_AVPs all; + // import from LibDiameter_Types_CxDx_AVPs all; + + group AVPTypes { + + group Enum_AVP_Rf_Ro_Types { + + /** + * @desc PDP-Context-Type enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.138 PDP-Context-Type AVP + */ + type enumerated PDP_Context_Type { + PRIMARY_E (0), + SECONDARY_E (1) +// } with { +// variant "length=32" + } // End of type Charge_Reason_Code + + /** + * @desc Charge-Reason-Code enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.38A Charge-Reason-Code AVP + */ + type enumerated Charge_Reason_Code { + UNKNOWN_CRC_E (0), // To prevent recursive declaration with other enumerated containing UNKNOWN_E + USAGE_E (1), + COMMUNICATION_ATTEMPT_CHARGE_E (2), + SETUP_CHARGE_E (3), + ADD_ON_CHARGE_E (4) +// } with { +// variant "length=32" + } // End of type Charge_Reason_Code + + /** + * @desc Charge-Reason-Code enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.57 Dynamic-Address-Flag AVP + */ + type enumerated Dynamic_Address_Flag { + STATIC_E (0), + DYNAMIC_E (1) +// } with { +// variant "length=32" + } // End of type Dynamic_Address_Flag + + /** + * @desc Charge-Reason-Code enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.57A Dynamic-Address-Flag-Extension AVP + */ + type enumerated Dynamic_Address_Flag_Extension { + STATIC_E (0), + DYNAMIC_E (1) +// } with { +// variant "length=32" + } // End of type Dynamic_Address_Flag_Extension + + /** + * @desc Charge-Reason-Code enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.198 Serving-Node-Type AVP + */ + type enumerated Serving_Node_Type { + SGSN_E (0), + PMIPSGW_E (1), + GTPSGW_E (2), + EPDG_E (3), + HSGW_E (4), + MME_E (5) +// } with { +// variant "length=32" + } // End of type Serving_Node_Type + + /** + * @desc Charge-Reason-Code enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.200 SGW-Change AVP + */ + type enumerated SGW_Change { + UNAUTHENTICATEDE_ACR_START_NOT_DUE_TO_SGW_CHANGE_E (0), + ACR_START_DUE_TO_SGW_CHANGE_E (1) +// } with { +// variant "length=32" + } // End of type SGW_Change + + /** + * @desc IMSI-Unauthenticated-Flag enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.78 IMSI-Unauthenticated-Flag AVP + */ + type enumerated IMSI_Unauthenticated_Flag { + AUTHENTICATED_E (0), + UNAUTHENTICATED_E (1) +// } with { +// variant "length=32" + } // End of type IMSI_Unauthenticated_Flag + + /** + * @desc The Charging-Characteristics-Selection-Mode enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.39A Charging-Characteristics-Selection-Mode AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Charging_Characteristics_Selection_Mode { + SERVING_NODE_SUPPLIED_E (0), + SUBSCRIPTION_SPECIFIC_E (1), + APN_SPECIFIC_E (2), + HOME_DEFAULT_E (3), + ROAMING_DEFAULT_E (4), + VISITING_DEFAULT_E (5) +// } with { +// variant "length=32" + } // End of type Charging_Characteristics_Selection_Mode + + /** + * @desc The Charging-Characteristics-Selection-Mode enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.37 Change-Condition AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Change_Condition { + NORMALRELEASE_E (0), + ABNORMALRELEASE_E (1), + QOSCHANGE_E (2), + VOLUMELIMIT_E (3), + TIMELIMIT_E (4), + SERVINGNODECHANGE_E (5), + SERVINGNODEPLMNCHANGE_E (6), + USERLOCATIONCHANGE_E (7), + RATCHANGE_E (8), + UETIMEZONECHANGE_E (9), + TARIFFTIMECHANGE_E (10), + SERVICEIDLEDOUT_E (11), + SERVICESPECIFICUNITLIMIT_E (12), + MAXNUMBERCHANGESCHARGINGCONDITIONS_E (13), + CGI_SAICHANGE_E (14), + RAICHANGE_E (15), + ECGICHANGE_E (16), + TAICHANGE_E (17), + SERVICEDATAVOLUMELIMIT_E (18), + SERVICEDATATIMELIMIT_E (19), + MANAGEMENTINTERVENTION_E (20), + SERVICESTOP_E (21), + USERCSGINFORMATIONCHANGE_E (22), + S_GWCHANGE_E (23) +// } with { +// variant "length=32" + } // End of type Change_Condition + + /** + * @desc The Low-Priority-Indicator enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause .2.97A Low-Priority-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Low_Priority_Indicator { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type Low_Priority_Indicator + + /** + * @desc The AoC-Service-Obligatory-Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.18 AoC-Service-Obligatory-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated AoC_Service_Obligatory_Type { + NON_BINDING_E (0), + BINDING_E (1) +// } with { +// variant "length=32" + } // End of type AoC_Service_Obligatory_Type + + /** + * @desc The AoC-Service-Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.19 AoC-Service-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated AoC_Service_Type { + NONE_E (0), + AOC_S_E (1), + AOC_D_E (2), + AOC_E_E (3) +// } with { +// variant "length=32" + } // End of type AoC_Service_Type + + /** + * @desc The AoC-Format enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.14 AoC-Format AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated AoC_Format { + MONETARY_E (0), + NON_MONETARY_E (1), + CAI_E (2) +// } with { +// variant "length=32" + } // End of type AoC_Format + + /** + * @desc The AoC-Request-Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.16 AoC-Request-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated AoC_Request_Type { + AOC_NOT_REQUESTED_E (0), + AOC_FULL_E (1), + AOC_COST_ONLY_E (2), + AOC_TARIFF_ONLY_E (3) +// } with { +// variant "length=32" + } // End of type AoC_Request_Type + + /** + * @desc The Low-Balance-Indication enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.97 Low-Balance-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Low_Balance_Indication { + NOT_APPLICABLE_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type Low_Balance_Indication + + /** + * @desc The Role-Of-Node enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.177 Role-Of-Node AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Role_Of_Node { + ORIGINATING_ROLE_E (0), + TERMINATING_ROLE_E (1) +// } with { +// variant "length=32" + } // End of type Role_Of_Node + + /** + * @desc The Node_Functionality enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.113 Node-Functionality AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Node_Functionality { + S_CSCF_E (0), + P_CSCF_E (1), + I_CSCF_E (2), + MRFC_E (3), + MGCF_E (4), + BGCF_E (5), + AS_E (6), + IBCF_E (7), + S_GW_E (8), + P_GW_E (9), + HSGW_E (10), + E_CSCF_E (11) +// } with { +// variant "length=32" + } // End of type Node_Functionality + + /** + * @desc The Online_Charging_Flag enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.122 Online-Charging-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Online_Charging_Flag { + ADDRESSNOTPROVIDED_E (0), + ADDRESSPROVIDED_E (1) +// } with { +// variant "length=32" + } // End of type Online_Charging_Flag + + /** + * @desc The IMS_Emergency_Indicator enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.76A IMS-Emergency-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated IMS_Emergency_Indicator { + NON_EMERGENCY_E (0), + EMERGENCY_E (1) +// } with { +// variant "length=32" + } // End of type IMS_Emergency_Indicator + + /** + * @desc The Originator enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.124 Originator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Originator { + CALLING_PARTY_E (0), + CALLED_PARTY_E (1) +// } with { +// variant "length=32" + } // End of type Originator + + /** + * @desc The SDP_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.186 SDP-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated SDP_Type { + SDP_OFFER_E (0), + SDP_ANSWER_E (1) +// } with { +// variant "length=32" + } // End of type SDP_Type + + /** + * @desc The Local_GW_Inserted_Indication enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.92A Local-GW-Inserted-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Local_GW_Inserted_Indication { + LOCAL_GW_NOT_INSERTED_E (0), + LOCAL_GW_INSERTED_E (1) +// } with { +// variant "length=32" + } // End of type Local_GW_Inserted_Indication + + /** + * @desc The IP_Realm_Default_Indication enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.80A IP-Realm-Default-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated IP_Realm_Default_Indication { + DEFAULT_IP_REALM_NOT_USED_E (0), + DEFAULT_IP_REALM_USED_E (1) +// } with { +// variant "length=32" + } // End of type IP_Realm_Default_Indication + + /** + * @desc The Transcoder_Inserted_Indication enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.233A Transcoder-Inserted-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Transcoder_Inserted_Indication { + TRANSCODER_NOT_INSERTED_E (0), + TRANSCODER_INSERTED_E (1) +// } with { +// variant "length=32" + } // End of type Transcoder_Inserted_Indication + + /** + * @desc The Media_Initiator_Flag enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.101 Media-Initiator-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Media_Initiator_Flag { + CALLED_PARTY_E (0), + CALLING_PARTY_E (1), + UNKNOWN_MIF_E (3) // To prevent recursive declaration with other enumerated containing UNKNOWN_E +// } with { +// variant "length=32" + } // End of type Media_Initiator_Flag + + /** + * @desc The Application_Service_Type enumerated values + * @see OMA-DDS-Charging_Data-V1_0-20110201-A / Table 5 + */ + type enumerated Application_Service_Type { + SENDING_E (100), + RECEIVING_E (101), + RETRIEVAL_E (102), + INVITING_E (103), + LEAVING_E (104), + JOINING_E (105) +// INVITING_E (0), +// JOINING_E (1), +// LEAVING_E (2), +// RECEIVING_E (3), +// RETRIEVAL_E (4), +// SENDING_E (5) +// } with { +// variant "length=32" + } // End of type Application_Service_Type + + /** + * @desc The Address_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.9 Address-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Address_Type { + EMAIL_ADDRESS_E (0), + MSISDN_E (1), + IPV4_ADDRESS_E (2), + IPV6_ADDRESS_E (3), + NUMERIC_SHORTCODE_E (4), + ALPHANUMERIC_SHORTCODE_E (5), + OTHER_E (6), + IMSI_E (7) +// } with { +// variant "length=32" + } // End of type Address_Type + + /** + * @desc The DRM_Content enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.56 DRM-Content AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated DRM_Content { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type DRM_Content + + /** + * @desc The Addressee_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.10 Addressee-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Addressee_Type { + TO_E (0), + CC_E (1), + BCC_E (2) +// } with { +// variant "length=32" + } // End of type Addressee_Type + + /** + * @desc The Adaptation enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.4 Adaptations AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Adaptation { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type Adaptation + + /** + * @desc The Priority enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.154 Priority AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Priority { + LOW_E (0), + NORMAL_E (1), + HIGH_E (2) +// } with { +// variant "length=32" + } // End of type Priority + + /** + * @desc The Message_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.107 Message-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Message_Type { + M_SEND_REQ_E (1), + M_SEND_CONF_E (2), + M_NOTIFICATION_IND_E (3), + M_NOTIFYRESP_IND_E (4), + M_RETRIEVE_CONF_E (5), + M_ACKNOWLEDGE_IND_E (6), + M_DELIVERY_IND_E (7), + M_READ_REC_IND_E (8), + M_READ_ORIG_IND_E (9), + M_FORWARD_REQ_E (10), + M_FORWARD_CONF_E (11), + M_MBOX_STORE_CONF_E (12), + M_MBOX_VIEW_CONF_E (13), + M_MBOX_UPLOAD_CONF_E (14), + M_MBOX_DELETE_CONF_E (15) +// } with { +// variant "length=32" + } // End of type Message_Type + + /** + * @desc The Class_Identifier enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.40 Class-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Class_Identifier { + PERSONAL_E (0), + ADVERTISEMENT_E (1), + INFORMATIONAL_E (2), + AUTO_E (3) +// } with { +// variant "length=32" + } // End of type Class_Identifier + + /** + * @desc The Read_Reply_Report_Requested enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.162 Read-Reply-Report-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Read_Reply_Report_Requested { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type Read_Reply_Report_Requested + + /** + * @desc The Delivery_Report_Requested enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.52 Delivery-Report-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Delivery_Report_Requested { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type Delivery_Report_Requested + + /** + * @desc The MMBox_Storage_Requested enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.109 MMBox-Storage-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated MMBox_Storage_Requested { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type MMBox_Storage_Requested + + /** + * @desc The MMBox_Storage_Requested enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.42 Content-Class AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Content_Class { + IMAGE_BASIC_E (0), + IMAGE_RICH_E (1), + VIDEO_BASIC_E (2), + VIDEO_RICH_E (3), + MEGAPIXEL_E (4), + CONTENT_BASIC_E (5), + CONTENT_RICH_E (6) +// } with { +// variant "length=32" + } // End of type Content_Class + + /** + * @desc The LCS_Client_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.86 LCS-Client-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated LCS_Client_Type { + EMERGENCY_SERVICES_E (0), + VALUE_ADDED_SERVICES_E (1), + PLMN_OPERATOR_SERVICESC_E (2), + LAWFUL_INTERCEPT_SERVICES_E (3) +// } with { +// variant "length=32" + } // End of type LCS_Client_Type + + /** + * @desc The LCS_Client_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.88 LCS-Format-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated LCS_Format_Indicator { + LOGICAL_NAME_E (0), + EMAIL_ADDRESS_E (1), + MSISDN_E (2), + URL_E (3), + SIP_URL_E (4) +// } with { +// variant "length=32" + } // End of type LCS_Format_Indicator + + /** + * @desc The Location_Estimate_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.95 Location-Estimate-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Location_Estimate_Type { + CURRENT_LOCATION_E (0), + CURRENT_LAST_KNOWN_LOCATION_E (1), + INITIAL_LOCATION_E (2), + ACTIVATE_DEFERRED_LOCATION_E (3), + CANCEL_DEFERRED_LOCATION_E (4) +// } with { +// variant "length=32" + } // End of type Location_Estimate_Type + + /** + * @desc The PoC_Server_Role enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.145 PoC-Server-Role AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_Server_Role { + PARTICIPATING_POC_SERVER_E (0), + CONTROLLING_POC_SERVER_E (1) +// } with { +// variant "length=32" + } // End of type PoC_Server_Role + + /** + * @desc The PoC_Session_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.148 PoC-Session-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_Session_Type { + ONE_TOONE_POC_SESSION_E (0), + CHAT_POC_GROUP_SESSION_E (1), + PRE_ARRANGED_POC_GROUP_SESSION_E (2), + AD_HOC_POC_GROUP_SESSION_E (3) +// } with { +// variant "length=32" + } // End of type PoC_Session_Type + + /** + * @desc The PoC_User_Role_info_Units enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.151 PoC-User-Role-info-Units AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_User_Role_info_Units { + MODERATOR_E (0), + DISPATCHER_E (1), + SESSION_OWNER_E (2), + SESSION_PARTICIPANT_E (3) +// } with { +// variant "length=32" + } // End of type PoC_User_Role_info_Units + + /** + * @desc The PoC_Session_Initiation_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.147 PoC-Session-Initiation-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_Session_Initiation_Type { + PRE_ESTABLISH_E (0), + ON_DEMAND_E (1) +// } with { +// variant "length=32" + } // End of type PoC_Session_Initiation_Type + + /** + * @desc The PoC_Event_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.142 PoC-Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_Event_Type { + NORMAL_E (0), + INSTANT_PPERSONAL_AALERT_EVENT_E (1), + POC_GROUP_ADVERTISEMENT_EVENT_E (2), + EARLY_SSESSION_SETTING_UP_EVENT_E (3), + POC_TALK_BURST_E (4) +// } with { +// variant "length=32" + } // End of type PoC_Event_Type + + /** + * @desc The Participant_Access_Priority enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.142 PoC-Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Participant_Access_Priority { + PRE_EMPTIVE_PRIORITY_E (0), + HIGH_PRIORITY_E (1), + NORMAL_PRIORITY_E (2), + LOW_PRIORITY_E (3) +// } with { +// variant "length=32" + } // End of type Participant_Access_Priority + + /** + * @desc The User_Participating_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.142 PoC-Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated User_Participating_Type { + NORMAL_E (0), + NW_POC_BOX_E (1), + UE_POC_BOX_E (2) +// } with { +// variant "length=32" + } // End of type User_Participating_Type + + /** + * @desc The PoC_Change_Condition enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.139 PoC-Change-Condition AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_Change_Condition { + SERVICE_CHANGE_E (0), + VOLUME_LIMIT_E (1), + TIME_LIMIT_E (2), + NUMBER_OF_TALK_BURST_LIMIT_E (3), + NUMBER_OF_ACTIVE_PARTICIPANTS_E (4), + TARIFF_TIME_E (5) +// } with { +// variant "length=32" + } // End of type PoC_Change_Condition + + } // End of group Enum_AVP_Rf_Ro_Types + + group Avp_Rf_Ro_Types { + + group TS132_299Rf_Ro_AVPS { + + /** + * @desc The Accounting-Input-Octets AVP (AVP code 363) + * @member aVP_Header Header AVP + * @member aVP_Data Number of octets transmitted during the data container recording interval, reflecting the volume counts for uplink traffic for a data flow + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.1.1 Accounting-Input-Octets + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Accounting_Input_Octets_AVP { + AVP_Header aVP_Header,// + UInt64 aVP_Data + } // End of type Accounting_Input_Octets_AVP + + /** + * @desc The Accounting-Output-Octets AVP (AVP code 364) + * @member aVP_Header Header AVP + * @member aVP_Data Number of octets transmitted during the data container recording interval, reflecting the volume counts for downlink traffic for a data flow + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.1.3 Accounting-Output-Octets + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Accounting_Output_Octets_AVP { + AVP_Header aVP_Header,// + UInt64 aVP_Data + } // End of type Accounting_Output_Octets_AVP + + /** + * @desc The Event-Type AVP (AVP code 823) + * @member aVP_Header Header AVP + * @member sip_Method TODO + * @member event TODO + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.65 Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Event_Type_AVP { + AVP_Header aVP_Header,// + SIP_Method_AVP sip_Method optional, + Event_AVP event optional, + Expires_AVP aVP_Data optional + } // End of type Event_Type_AVP + + /** + * @desc The Event AVP (AVP code 825) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the content of the "Event" header + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.63 Event AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Event_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Event_AVP + + /** + * @desc The Content-Type AVP (AVP code 826) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the media type (e.g. application/sdp, text/html) of the message-body, as described in RFC 3261 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.46 Content-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Content_Type_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Content_Type_AVP + + /** + * @desc The Content-Length AVP (AVP code 827) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the size of the message-body, as described in RFC 3261 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.44 Content-Length AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Content_Length_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Content_Length_AVP + + /** + * @desc The Content-Disposition AVP (AVP code 828) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates how the message body or a message body part is to be interpreted (e.g. session, render), as described in RFC 3261 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.43 Content-Disposition AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Content_Disposition_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Content_Disposition_AVP + + /** + * @desc The Event AVP (AVP code 829) + * @member aVP_Header Header AVP + * @member aVP_Data Specifies whether the IMS node (except the MRFC) is serving the calling or the called party + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.177 Role-Of-Node AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Role_Of_Node_AVP { + AVP_Header aVP_Header,// + Role_Of_Node aVP_Data + } // End of type Role_Of_Node_AVP + + /** + * @desc The User-Session-Id AVP (AVP code 830) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the session identifier + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.242 User-Session-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record User_Session_Id_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type User_Session_Id_AVP + + /** + * @desc The Calling-Party-Address AVP (AVP code 831) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the session identifier + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.33 Calling-Party-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Calling_Party_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Calling_Party_Address_AVP + + /** + * @desc The Called-Party-Address AVP (AVP code 832) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the session identifier + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.32 Called-Party-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Called_Party_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Called_Party_Address_AVP + + /** + * @desc The Time-Stamps AVP (AVP code 833) + * @member aVP_Header Header AVP + * @member sip_Request_Timestamp TODO + * @member sip_Response_Timestamp TODO + * @member sip_Request_Timestamp_Fraction TODO + * @member sip_Response_Timestamp_Fraction TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.231 Time-Stamps AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Time_Stamps_AVP { + AVP_Header aVP_Header,// + SIP_Request_Timestamp_AVP sip_Request_Timestamp optional, + SIP_Response_Timestamp_AVP sip_Response_Timestamp optional, + SIP_Request_Timestamp_Fraction_AVP sip_Request_Timestamp_Fraction optional, + SIP_Response_Timestamp_Fraction_AVP sip_Response_Timestamp_Fraction optional + } // End of type Time_Stamps_AVP + + /** + * @desc The SIP-Request-Timestamp AVP (AVP code 834) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the time in UTC format of the SIP request + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.202 SIP-Request-Timestamp AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SIP_Request_Timestamp_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type SIP_Request_Timestamp_AVP + + /** + * @desc The SIP-Response-Timestamp AVP (AVP code 835) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the time in UTC format of the SIP response + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.204 SIP-Response-Timestamp AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SIP_Response_Timestamp_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type SIP_Response_Timestamp_AVP + + /** + * @desc The Application-Server AVP (AVP code 836) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the SIP URL(s) of the AS(s) addressed during the session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.23 Application-Server AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Application_Server_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Application_Server_AVP + + /** + * @desc The Application-provided-Called-Party-Address AVP (AVP code 837) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the called party number (SIP URI, E.164), if it is determined by an application server + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.22 Application-provided-Called-Party-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Application_provided_Called_Party_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Application_provided_Called_Party_Address_AVP + + /** + * @desc The Inter-Operator-Identifier AVP (AVP code 838) + * @member aVP_Header Header AVP + * @member originating_IOI TODO + * @member terminating_IOI TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.80 Inter-Operator-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Inter_Operator_Identifier_AVP { + AVP_Header aVP_Header,// + Originating_IOI_AVP originating_IOI optional, + Terminating_IOI_AVP terminating_IOI optional + } // End of type Inter_Operator_Identifier_AVP + + /** + * @desc The Originating-IOI AVP (AVP code 839) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the Inter Operator Identifier (IOI) for the originating network as generated by the IMS network element which takes responsibility for populating this parameter [404] in a SIP request as described in TS 24.229 [202] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.123 Originating-IOI AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Originating_IOI_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Originating_IOI_AVP + + /** + * @desc The Terminating-IOI AVP (AVP code 840) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the Inter Operator Identifier (IOI) for the terminating network as generated by the IMS network element which takes responsibility for populating this parameter [404] in a SIP response as described in TS 24.229 [202] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.225 TTerminatingerminating-IOI AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Terminating_IOI_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Originating_IOI_AVP + + /** + * @desc The IMS-Charging-Identifier AVP (AVP code 841) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IMS Charging Identifier (ICID) as generated by a IMS node for a SIP session and described in TS 24.229 [204] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.75 IMS-Charging-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record IMS_Charging_Identifier_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type IMS_Charging_Identifier_AVP + + /** + * @desc The SDP-Session-Description AVP (AVP code 842) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the content of the SDP line (i=, c=, b=, k=, a=, etc.) in the session description, as described in RFC 4566 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.184 SDP-Session-Description AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Session_Description_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type SDP_Session_Description_AVP + + /** + * @desc The SDP-Media-Component AVP (AVP code 843) + * @member aVP_Header Header AVP + * @member SDP_Media_Name_AVP TODO + * @member set of SDP_Media_Description_AVP TODO + * @member Local_GW_Inserted_Indication_AVP TODO + * @member IP_Realm_Default_Indication_AVP TODO + * @member Transcoder_Inserted_Indication_AVP TODO + * @member Media_Initiator_Flag_AVP TODO + * @member Media_Initiator_Party_AVP TODO + * @member ThreeGPP_Charging_Id_AVP TODO + * @member Access_Network_Charging_Identifier_Value_AVP TODO + * @member SDP_Type_AVP TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.180 SDP-Media-Component AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Media_Component_AVP { + AVP_Header aVP_Header,// + SDP_Media_Name_AVP sdp_Media_Name optional, + set of SDP_Media_Description_AVP sdp_Media_Description optional, + Local_GW_Inserted_Indication_AVP local_GW_Inserted_Indication optional, + IP_Realm_Default_Indication_AVP ip_Realm_Default_Indication optional, + Transcoder_Inserted_Indication_AVP transcoder_Inserted_Indication optional, + Media_Initiator_Flag_AVP media_Initiator_Flag optional, + Media_Initiator_Party_AVP media_Initiator_Party optional, + ThreeGPP_Charging_Id_AVP threeGPP_Charging_Id optional, + Access_Network_Charging_Identifier_Value_AVP access_Network_Charging_Identifier_Value optional, + SDP_Type_AVP sdp_Type optional + } // End of type SDP_Media_Component_AVP + + /** + * @desc The SDP-Media-Name AVP (AVP code 844) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the content of SDP lines (i=, c=, b=, k=, a=, etc.) related to a media description, as described in RFC 4566 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.182 SDP-Media-Name AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Media_Name_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type SDP_Media_Name_AVP + + /** + * @desc The SDP-Media-Description AVP (AVP code 845) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the content of SDP lines (i=, c=, b=, k=, a=, etc.) related to a media description, as described in RFC 4566 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.181 SDP-Media-Description AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Media_Description_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type SDP_Media_Description_AVP + + /** + * @desc The CG-Address AVP (AVP code 846) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IP-address of the P-GW that generated the GPRS/EPC Charging ID + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.36 CG-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record CG_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type CG_Address_AVP + + /** + * @desc The GGSN-Address AVP (AVP code 847) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IP-address of the P-GW that generated the GPRS/EPC Charging ID + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.68 GGSN-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record GGSN_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type GGSN_Address_AVP + + /** + * @desc The Application-Server-Information AVP (AVP code 850) + * @member aVP_Header Header AVP + * @member application_Server TODO + * @member application_Provided_Called_Party_Address TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.24 Application-Server-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Application_Server_Information_AVP { + AVP_Header aVP_Header,// + Application_Server_AVP application_Server optional, + set of Application_provided_Called_Party_Address_AVP application_Provided_Called_Party_Address optional + } // End of type Application_Server_Information_AVP + + /** + * @desc The Trunk-Group-ID AVP (AVP code 851) + * @member aVP_Header Header AVP + * @member incoming_Trunk_Group_ID TODO + * @member outgoing_Trunk_Group_ID TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.24 7.2.237 Trunk-Group-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Trunk_Group_ID_AVP { + AVP_Header aVP_Header,// + Incoming_Trunk_Group_ID_AVP incoming_Trunk_Group_ID optional, + Outgoing_Trunk_Group_ID_AVP outgoing_Trunk_Group_ID optional + } // End of type Trunk_Group_ID_AVP + + /** + * @desc The Incoming-Trunk-Group-ID AVP (AVP code 852) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the incoming PSTN leg + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.79 Incoming-Trunk-Group-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Incoming_Trunk_Group_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Incoming_Trunk_Group_ID_AVP + + /** + * @desc The Outgoing-Trunk-Group-ID AVP (AVP code 853) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the outgoing PSTN leg + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.129 Outgoing-Trunk-Group-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Outgoing_Trunk_Group_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Outgoing_Trunk_Group_ID_AVP + + /** + * @desc The Bearer-Service AVP (AVP code 854) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the used bearer service for the PSTN leg + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.30 Bearer-Service AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Bearer_Service_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type Bearer_Service_AVP + + /** + * @desc The Service-ID AVP (AVP code 855) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the service the MRFC is hosting or AoC service + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.190 Service-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Service_Id_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Service_Id_AVP + + /** + * @desc The Associated-URI AVP (AVP code 856) + * @member aVP_Header Header AVP + * @member aVP_Data Holds a non-barred public user identity (SIP URI or TEL URI) associated to the public user identity under registration + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.26 Associated-URI AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Associated_URI_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Associated_URI_AVP + + /** + * @desc The Charged-Party AVP (AVP code 857) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the address (Public User ID: SIP URI, TEL URI, etc.) of the party to be charged + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.39 Charged-Party AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Charged_Party_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Charged_Party_AVP + + /** + * @desc The PoC-Controlling-Address AVP (AVP code 858) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the PoC server performing the controlling function for the associated PoC session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.141 PoC-Controlling-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_Controlling_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type PoC_Controlling_Address_AVP + + /** + * @desc The PoC-Group-Name AVP (AVP code 859) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies a group + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.143 PoC-Group-Name AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_Group_Name_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type PoC_Group_Name_AVP + + /** + * @desc The Cause-Code AVP (AVP code 861) + * @member aVP_Header Header AVP + * @member aVP_Data Includes the cause code value from IMS node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.35 Cause-Code AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Cause_Code_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Cause_Code_AVP + + /** + * @desc The Node-Functionality AVP (AVP code 862) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the functionality identifier of the node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.113 Node-Functionality AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Node_Functionality_AVP { + AVP_Header aVP_Header,// + Node_Functionality aVP_Data + } // End of type Node_Functionality_AVP + + /** + * @desc The Originator AVP (AVP code 863) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the originating party of the message body + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.124 Originator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Originator_AVP { + AVP_Header aVP_Header,// + Originator aVP_Data + } // End of type Originator_AVP + + /** + * @desc The Service-Information AVP (AVP code 873) + * @member aVP_Header Header AVP + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.192 Service-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Service_Information_AVP { + AVP_Header aVP_Header,// + set of Subscription_Id_AVP subscription_Id optional, + AoC_Information_AVP aoc_Information optional, + PS_Information_AVP ps_Information optional, + WLAN_Information_AVP wlan_Information optional, + IMS_Information_AVP ims_Information optional, + MMS_Information_AVP mms_Information optional, + LCS_Information_AVP lcs_Information optional, + PoC_Information_AVP poc_Information optional, + MBMS_Information_AVP mbms_Information optional, + SMS_Information_AVP sms_Information optional, + MMTel_Information_AVP mmtel_Information optional, + Service_Generic_Information_AVP service_Generic_Information optional, + IM_Information_AVP im_Information optional, + DCD_Information_AVP dcd_Information optional + } // End of type Service_Information_AVP + + /** + * @desc The PS-Information AVP (AVP code 874) + * @member aVP_Header Header AVP + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.158 PS-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PS_Information_AVP { + AVP_Header aVP_Header,// + ThreeGPP_Charging_Id_AVP threeGPP_Charging_Id optional, + PDN_Connection_Charging_ID_AVP pdn_Connection_Charging_ID optional, + Node_Id_AVP node_Id optional, + ThreeGPP_PDP_Type_AVP threeGPP_PDP_Type optional, + set of PDP_Address_AVP pdp_Address optional, + PDP_Address_Prefix_Length_AVP pdp_Address_Prefix_Length optional, + Dynamic_Address_Flag_AVP dynamic_Address_Flag optional, + Dynamic_Address_Flag_Extension_AVP dynamic_Address_Flag_Extension optional, + QoS_Information_AVP qos_Information optional, + set of SGSN_Address_AVP sgsn_Address optional, + set of GGSN_Address_AVP ggsn_Address optional, + set of SGW_Address_AVP sgw_Address optional, + CG_Address_AVP cg_Address optional, + Serving_Node_Type_AVP serving_Node_Type optional, + SGW_Change_AVP sgw_Change optional, + ThreeGPP_IMSI_MCC_MNC_AVP threeGPP_IMSI_MCC_MNC optional, + IMSI_Unauthenticated_Flag_AVP imsi_Unauthenticated_Flag optional, + ThreeGPP_GGSN_MCC_MNC_AVP threeGPP_GGSN_MCC_MNC optional, + ThreeGPP_NSAPI_AVP threeGPP_NSAPI optional, + Called_Station_Id_AVP called_Station_Id optional, + ThreeGPP_Session_Stop_Indicator_AVP threeGPP_Session_Stop_Indicator optional, + ThreeGPP_Selection_Mode_AVP threeGPP_Selection_Mode optional, + ThreeGPP_Charging_Characteristics_AVP threeGPP_Charging_Characteristics optional, + Charging_Characteristics_Selection_Mode_AVP charging_Characteristics_Selection_Mode optional, + ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, + ThreeGPP_MS_TimeZone_AVP threeGPP_MS_TimeZone optional, + Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, + User_CSG_Information_AVP user_CSG_Information optional, + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, + ThreeGPP_RAT_Type_AVP threeGPP_RAT_Type optional, + PS_Furnish_Charging_Information_AVP ps_Furnish_Charging_Information optional, + PDP_Context_Type_AVP pdp_Context_Type optional, + Offline_Charging_AVP offline_Charging optional, + set of Traffic_Data_Volumes_AVP traffic_Data_Volumes optional, + set of Service_Data_Container_AVP service_Data_Container optional, + User_Equipment_Info_AVP user_Equipment_Info optional, + Terminal_Information_AVP terminal_Information optional, + Start_Time_AVP start_Time optional, + Stop_Time_AVP stop_Time optional, + Change_Condition_AVP change_Condition optional, + Diagnostics_AVP diagnostics optional, + Low_Priority_Indicator_AVP low_Priority_Indicator optional + } // End of type PS_Information_AVP + + /** + * @desc The WLAN-Information AVP (AVP code 875) + * @member aVP_Header Header AVP + * @member wlan_Session_Id TODO + * @member wlan_Session_Id TODO + * @member pdg_Address TODO + * @member pdg_Charging_Id TODO + * @member wag_Address TODO + * @member wag_PLMN_Id TODO + * @member wlan_Radio_Container TODO + * @member wlan_UE_Local_IPAddress TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.246 WLAN-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WLAN_Information_AVP { + AVP_Header aVP_Header,// + WLAN_Session_Id_AVP wlan_Session_Id optional, + PDG_Address_AVP pdg_Address optional, + PDG_Charging_Id_AVP pdg_Charging_Id optional, + WAG_Address_AVP wag_Address optional, + WAG_PLMN_Id_AVP wag_PLMN_Id optional, + WLAN_Radio_Container_AVP wlan_Radio_Container optional, + WLAN_UE_Local_IPAddress_AVP wlan_UE_Local_IPAddress optional + } // End of type WLAN_Information_AVP + + /** + * @desc The IMS-Information AVP (AVP code 876) + * @member aVP_Header Header AVP + * @member event_Type TODO + * @member role_Of_Node TODO + * @member node_Functionality TODO + * @member user_Session_Id TODO + * @member outgoing_Session_Id TODO + * @member session_Priority TODO + * @member calling_Party_Address TODO + * @member called_Party_Address TODO + * @member called_Asserted_Identity TODO + * @member number_Portability_Routing_Information TODO + * @member carrier_Select_Routing_Information TODO + * @member alternate_Charged_Party_Address TODO + * @member requested_Party_Address TODO + * @member associated_URI TODO + * @member time_Stamps TODO + * @member application_Server_Information TODO + * @member inter_Operator_Identifie TODO + * @member ims_Charging_Identifier TODO + * @member sdp_Session_Description TODO + * @member sdp_Media_Component TODO + * @member served_Party_IP_Address TODO + * @member server_Capabilities TODO + * @member bearer_Service TODO + * @member service_Id TODO + * @member service_Specific_Info TODO + * @member message_Body TODO + * @member cause_Code TODO + * @member access_Network_Information TODO + * @member early_Media_Description TODO + * @member ims_Communication_Service_Identifier TODO + * @member online_Charging_Flag TODO + * @member real_Time_Tariff_Information TODO + * @member account_Expiration TODO + * @member initial_IMS_Charging_Identifier TODO + * @member ims_Emergency_Indicator TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.77 IMS-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record IMS_Information_AVP { + AVP_Header aVP_Header,// + Event_Type_AVP event_Type optional, + Role_Of_Node_AVP role_Of_Node optional, + Node_Functionality_AVP node_Functionality, + User_Session_Id_AVP user_Session_Id optional, + Outgoing_Session_Id_AVP outgoing_Session_Id optional, + Session_Priority_AVP session_Priority optional, + set of Calling_Party_Address_AVP calling_Party_Address optional, + Called_Party_Address_AVP called_Party_Address optional, + set of Called_Asserted_Identity_AVP called_Asserted_Identity optional, + Number_Portability_Routing_Information_AVP number_Portability_Routing_Information optional, + Carrier_Select_Routing_Information_AVP carrier_Select_Routing_Information optional, + Alternate_Charged_Party_Address_AVP alternate_Charged_Party_Address optional, + Requested_Party_Address_AVP requested_Party_Address optional, + set of Associated_URI_AVP associated_URI optional, + Time_Stamps_AVP time_Stamps optional, + set of Application_Server_Information_AVP application_Server_Information optional, + set of Inter_Operator_Identifier_AVP inter_Operator_Identifier optional, + IMS_Charging_Identifier_AVP ims_Charging_Identifier optional, + set of SDP_Session_Description_AVP sdp_Session_Description optional, + set of SDP_Media_Component_AVP sdp_Media_Component optional, + Served_Party_IP_Address_AVP served_Party_IP_Address optional, + Server_Capabilities_AVP server_Capabilities optional, + Trunk_Group_ID_AVP trunk_Group_ID optional, + Bearer_Service_AVP bearer_Service optional, + Service_Id_AVP service_Id optional, + set of Service_Specific_Info_AVP service_Specific_Info optional, + set of Message_Body_AVP message_Body optional, + Cause_Code_AVP cause_Code optional, + Access_Network_Information_AVP access_Network_Information optional, + set of Early_Media_Description_AVP early_Media_Description optional, + IMS_Communication_Service_Identifier_AVP ims_Communication_Service_Identifier optional, + Online_Charging_Flag_AVP online_Charging_Flag optional, + Real_Time_Tariff_Information_AVP real_Time_Tariff_Information optional, + Account_Expiration_AVP account_Expiration optional, + Initial_IMS_Charging_Identifier_AVP initial_IMS_Charging_Identifier optional, + IMS_Emergency_Indicator_AVP ims_Emergency_Indicator optional + } // End of type IMS_Information_AVP + + /** + * @desc The MMS-Information AVP (AVP code 876) + * @member aVP_Header Header AVP + * @member originator_Address TODO + * @member recipient_Address TODO + * @member submission_Time TODO + * @member mm_Content_Type TODO + * @member priority TODO + * @member message_ID TODO + * @member message_Type TODO + * @member message_Size TODO + * @member message_Class TODO + * @member delivery_Report_Requested TODO + * @member read_Reply_Report_Requested TODO + * @member mmbox_Storage_Requested TODO + * @member applic_ID TODO + * @member reply_Applic_ID TODO + * @member aux_Applic_Info TODO + * @member content_Class TODO + * @member drm_Content TODO + * @member adaptations TODO + * @member vasp_Id TODO + * @member vas_Id TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.110 MMS-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record MMS_Information_AVP { + AVP_Header aVP_Header,// + Originator_Address_AVP originator_Address optional, + set of Recipient_Address_AVP recipient_Address optional, + Submission_Time_AVP submission_Time optional, + MM_Content_Type_AVP mm_Content_Type optional, + Priority_AVP priority optional, + Message_ID_AVP message_ID optional, + Message_Type_AVP message_Type optional, + Message_Size_AVP message_Size optional, + Message_Class_AVP message_Class optional, + Delivery_Report_Requested_AVP delivery_Report_Requested optional, + Read_Reply_Report_Requested_AVP read_Reply_Report_Requested optional, + MMBox_Storage_Requested_AVP mmbox_Storage_Requested optional, + Applic_ID_AVP applic_ID optional, + Reply_Applic_ID_AVP reply_Applic_ID optional, + Aux_Applic_Info_AVP aux_Applic_Info optional, + Content_Class_AVP content_Class optional, + DRM_Content_AVP drm_Content optional, + Adaptations_AVP adaptations optional, + VASP_ID_AVP vasp_Id optional, + VAS_ID_AVP vas_Id optional + } // End of type MMS_Information_AVP + + /** + * @desc The LCS-Information AVP (AVP code 878) + * @member aVP_Header Header AVP + * @member lcs_Client_ID TODO + * @member location_Type TODO + * @member location_Estimate TODO + * @member positioning_Data TODO + * @member priority optional TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.89 LCS-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Information_AVP { + AVP_Header aVP_Header,// + LCS_Client_ID_AVP lcs_Client_ID optional, + Location_Type_AVP location_Type optional, + Location_Estimate_AVP location_Estimate optional, + Positioning_Data_AVP positioning_Data optional, + ThreeGPP_IMSI_AVP threeGPP_IMSI optional, + MSISDN_AVP msisdn optional + } // End of type LCS_Information_AVP + + type record PoC_Information_AVP { + AVP_Header aVP_Header,// + PoC_Server_Role_AVP poc_Server_Role optional, + PoC_Session_Type_AVP poc_Session_Type optional, + PoC_User_Role_AVP poc_User_Role optional, + PoC_Session_Initiation_Type_AVP poc_Session_Initiation_Type optional, + PoC_Event_Type_AVP poc_Event_Type optional, + Number_Of_Participants_AVP number_Of_Participants optional, + set of Participants_Involved_AVP participants_Involved optional, + set of Participant_Group_AVP participant_Group optional, + set of Talk_Burst_Exchange_AVP talk_Burst_Exchange optional, + PoC_Controlling_Address_AVP poc_Controlling_Address optional, + PoC_Group_Name_AVP poc_Group_Name optional, + PoC_Session_Id_AVP poc_Session_Id optional, + Charged_Party_AVP charged_Party optional + } // End of type PoC_Information_AVP + + type record MBMS_Information_AVP { + AVP_Header aVP_Header// + // TODO + + } // End of type MBMS_Information_AVP + + /** + * @desc The Media-Initiator-Flag AVP (AVP code 882) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates which party has requested the session modification + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.101 Media-Initiator-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Media_Initiator_Flag_AVP { + AVP_Header aVP_Header,// + Media_Initiator_Flag aVP_Data + } // End of type Media_Initiator_Flag_AVP + + /** + * @desc The PoC-Server-Role AVP (AVP code 883) + * @member aVP_Header Header AVP + * @member aVP_Data Specifies the role of the PoC server + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.145 PoC-Server-Role AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_Server_Role_AVP { + AVP_Header aVP_Header,// + PoC_Server_Role aVP_Data + } // End of type PoC_Server_Role_AVP + + /** + * @desc The PoC-Session-Type AVP (AVP code 884) + * @member aVP_Header Header AVP + * @member aVP_Data Specifies the type of the PoC session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.148 PoC-Session-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_Session_Type_AVP { + AVP_Header aVP_Header,// + PoC_Session_Type aVP_Data + } // End of type PoC_Session_Type_AVP + + /** + * @desc The Number-Of-Participants AVP (AVP code 885) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the number of invited parties of the multi-party session when included in the initial charging request message + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.117 Number-Of-Participants AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Number_Of_Participants_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Number_Of_Participants_AVP + + /** + * @desc The Originator-Address AVP (AVP code 886) + * @member aVP_Header Header AVP + * @member address_Type TODO + * @member address_Data TODO + * @member address_Domain TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.125 Originator-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Originator_Address_AVP { + AVP_Header aVP_Header,// + Address_Type_AVP address_Type optional, + Address_Data_AVP address_Data optional, + Address_Domain_AVP address_Domain optional + } // End of type Originator_Address_AVP + + /** + * @desc The Participants-Involved AVP (AVP code 887) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the list of address (Public User ID: SIP URI, TEL URI, MSISDN) of the parties who are involved into the PoC session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.130 Participants-Involved AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Participants_Involved_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Participants_Involved_AVP + + /** + * @desc The Expires AVP (AVP code 888) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the content of the "Expires" header + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.66 Expires AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Expires_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Expires_AVP + + /** + * @desc The Message-Body AVP (AVP code 889) + * @member aVP_Header Header AVP + * @member content_Type TODO + * @member content_Length TODO + * @member content_Disposition TODO + * @member originator TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.103 Message-Body AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Message_Body_AVP { + AVP_Header aVP_Header,// + Content_Type_AVP content_Type, + Content_Length_AVP content_Length, + Content_Disposition_AVP content_Disposition optional, + Originator_AVP originator optional + } // End of type Message_Body_AVP + + /** + * @desc The WAG-Address AVP (AVP code 890) + * @member aVP_Header Header AVP + * @member aVP_Data Address and contains the WAG IP address + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.244 WAG-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WAG_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type WAG_Address_AVP + + /** + * @desc The WAG-PLMN-Ids AVP (AVP code 891) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the WAG PLMN id (MCC and MNC) + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.245 WAG-PLMN-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WAG_PLMN_Id_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type WAG_PLMN_Id_AVP + + /** + * @desc The WLAN-Radio-Container AVP (AVP code 892) + * @member aVP_Header Header AVP + * @member operator_Name TODO + * @member location_Data TODO + * @member location_Information TODO + * @member wlan_Technology TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.247 WLAN-Radio-Container AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WLAN_Radio_Container_AVP { + AVP_Header aVP_Header,// + Operator_Name_AVP operator_Name optional, + Location_Data_AVP location_Data optional, + Location_Information_AVP location_Information optional, + WLAN_Technology_AVP wlan_Technology optional + } // End of type WLAN_Radio_Container_AVP + + /** + * @desc The Unit-Quota-Threshold AVP (AVP code 893) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.249 WLAN-Technology AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record WLAN_Technology_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type WLAN_Technology_AVP + + /** + * @desc The WLAN-UE-Local-IPAddress AVP (AVP code 894) + * @member aVP_Header Header AVP + * @member aVP_Data Address and contains the UE"s local IP address + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.250 WLAN-UE-Local-IPAddress AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WLAN_UE_Local_IPAddress_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type WLAN_UE_Local_IPAddress_AVP + + /** + * @desc The PDG-Address AVP (AVP code 895) + * @member aVP_Header Header AVP + * @member aVP_Data Address and contains the PDG IP address + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.134 PDG-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PDG_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type PDG_Address_AVP + + /** + * @desc The PDG-Charging-Id AVP (AVP code 896) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the charging identifier generated by the PDG for the tunnel + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.135 PDG-Charging-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PDG_Charging_Id_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type PDG_Charging_Id_AVP + + /** + * @desc The Address-Data AVP (AVP code 897) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the address information and formatted according type of address indicated in the Address-Type AVP and according to MMS encapsulation + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.7 Address-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Address_Data_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Address_Data_AVP + + /** + * @desc The Address-Domain AVP (AVP code 898) + * @member aVP_Header Header AVP + * @member domain_Name TODO + * @member threeGPP_IMSI_MCC_MNC TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.7 Address-Domain AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Address_Domain_AVP { + AVP_Header aVP_Header,// + Domain_Name_AVP domain_Name optional, + ThreeGPP_IMSI_MCC_MNC_AVP threeGPP_IMSI_MCC_MNC optional + } // End of type Address_Domain_AVP + + /** + * @desc The Address-Type AVP (AVP code 899) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the address information and formatted according type of address indicated in the Address-Type AVP and according to MMS encapsulation + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.9 Address-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Address_Type_AVP { + AVP_Header aVP_Header,// + Address_Type aVP_Data + } // End of type Address_Type_AVP + + /** + * @desc The VASP-ID AVP (AVP code 1101) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see 3GPP TS 29.140 Table 7.1: 3GPP specific AVP code + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record VASP_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type VASP_ID_AVP + + /** + * @desc The VAS-ID AVP (AVP code 1102) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see 3GPP TS 29.140 Table 7.1: 3GPP specific AVP code + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record VAS_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type VAS_ID_AVP + + /** + * @desc The Domain-Name AVP (AVP code 1200) + * @member aVP_Header Header AVP + * @member aVP_Data Represents a fully qualified domain name (FQDN) + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.55 Domain-Name AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Domain_Name_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Domain_Name_AVP + + /** + * @desc The MM-Content-Type AVP (AVP code 1201) + * @member aVP_Header Header AVP + * @member type_Number TODO + * @member additional_Type_Information TODO + * @member content_Size TODO + * @member additional_Content_Information TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.108 MM-Content-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record MM_Content_Type_AVP { + AVP_Header aVP_Header,// + Type_Number_AVP type_Number optional, + Additional_Type_Information_AVP additional_Type_Information optional, + Content_Size_AVP content_Size optional, + Additional_Content_Information_AVP additional_Content_Information optional + } // End of type MM_Content_Type_AVP + + /** + * @desc The Submission-Time AVP (AVP code 1202) + * @member aVP_Header Header AVP + * @member aVP_Data Represents a fully qualified domain name (FQDN) + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.217 Submission-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Submission_Time_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type Submission_Time_AVP + + /** + * @desc The Recipient-Address AVP (AVP code 1203) + * @member aVP_Header Header AVP + * @member address_Type TODO + * @member address_Data TODO + * @member address_Domain TODO + * @member addressee_Type TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.167 Recipient-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Recipient_Address_AVP { + AVP_Header aVP_Header,// + Address_Type_AVP address_Type optional, + Address_Data_AVP address_Data optional, + Address_Domain_AVP address_Domain optional, + Addressee_Type_AVP addressee_Type optional + } // End of type Recipient_Address_AVP + + /** + * @desc The Type-Number AVP (AVP code 1204) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the well-known media types + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.238 Type-Number AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Type_Number_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Type_Number_AVP + + /** + * @desc The Additional-Type-Information AVP (AVP code 1205) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates any additional information beyond well-known media types or non-well-known media types + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.6 Additional-Type-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Additional_Type_Information_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Additional_Type_Information_AVP + + /** + * @desc The Content-Size AVP (AVP code 1206) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the size in bytes of the specified content type + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.45 Content-Size AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Content_Size_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Content_Size_AVP + + /** + * @desc The Additional-Content-Information AVP (AVP code 1207) + * @member aVP_Header Header AVP + * @member type_Number TODO + * @member additional_Type_Information TODO + * @member content_Size TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.5 Additional-Content-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Additional_Content_Information_AVP { + AVP_Header aVP_Header,// + Type_Number_AVP type_Number optional, + Additional_Type_Information_AVP additional_Type_Information optional, + Content_Size_AVP content_Size optional + } // End of type Additional_Content_Information_AVP + + /** + * @desc The Addressee-Type AVP (AVP code 1208) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the how the recipient is addressed in the header of an MM + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.10 Addressee-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Addressee_Type_AVP { + AVP_Header aVP_Header,// + Addressee_Type aVP_Data + } // End of type Addressee_Type_AVP + + /** + * @desc The Priority AVP (AVP code 1209) + * @member aVP_Header Header AVP + * @member aVP_Data Priority (importance) of the message if specified + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.154 Priority AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Priority_AVP { + AVP_Header aVP_Header,// + Priority aVP_Data + } // End of type Priority_AVP + + /** + * @desc The Message-ID AVP (AVP code 1210) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identification of the message being charged + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.105 Message-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Message_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Message_ID_AVP + + /** + * @desc The Message-Type AVP (AVP code 1211) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identification of the message being charged + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.107 Message-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Message_Type_AVP { + AVP_Header aVP_Header,// + Message_Type aVP_Data + } // End of type Message_Type_AVP + + /** + * @desc The Message-Size AVP (AVP code 1212) + * @member aVP_Header Header AVP + * @member aVP_Data For MMS, it holds the total size in bytes of the MM calculated according to TS 23.140 + * For SMS, it holds the total size in octets of SM including any user data header + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.105 7.2.106 Message-Size AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Message_Size_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Message_Size_AVP + + /** + * @desc The Message-Class AVP (AVP code 1213) + * @member aVP_Header Header AVP + * @member class_Identifier TODO + * @member token_Text TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.104 Message-Class AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Message_Class_AVP { + AVP_Header aVP_Header,// + Class_Identifier_AVP class_Identifier optional, + Token_Text_AVP token_Text optional + } // End of type Message_Class_AVP + + /** + * @desc The Class-Identifier AVP (AVP code 1214) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.40 Class-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Class_Identifier_AVP { + AVP_Header aVP_Header,// + Class_Identifier aVP_Data + } // End of type Class_Identifier_AVP + + /** + * @desc The Token-Text AVP (AVP code 1215) + * @member aVP_Header Header AVP + * @member aVP_Data Contains extension information for the Message-Class AVP + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.234 Token-Text AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Token_Text_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Token_Text_AVP + + /** + * @desc The Delivery-Report-Requested AVP (AVP code 1216) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates whether a delivery report has been requested by the originator or not + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.52 Delivery-Report-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Delivery_Report_Requested_AVP { + AVP_Header aVP_Header,// + Delivery_Report_Requested aVP_Data + } // End of type Delivery_Report_Requested_AVP + + /** + * @desc The Adaptations AVP (AVP code 1217) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies whether the originator allows adaptation of the content (default Yes) + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.4 Adaptations AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Adaptations_AVP { + AVP_Header aVP_Header,// + Adaptation aVP_Data + } // End of type Adaptations_AVP + + /** + * @desc The Applic-ID AVP (AVP code 1118) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identification of the destination application that the underlying MMS abstract message was addressed to + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.21 Applic-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Applic_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Applic_ID_AVP + + /** + * @desc The Aux-Applic-Info AVP (AVP code 1119) + * @member aVP_Header Header AVP + * @member aVP_Data Holds additional application/implementation specific control information + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.28 Aux-Applic-Info AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Aux_Applic_Info_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Aux_Applic_Info_AVP + + /** + * @desc The Content-Class AVP (AVP code 1120) + * @member aVP_Header Header AVP + * @member aVP_Data Classifies the content of the MM to the highest content class to which the MM belongs, as defined in MMS Encapsulation + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.42 Content-Class AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Content_Class_AVP { + AVP_Header aVP_Header,// + Content_Class aVP_Data + } // End of type Content_Class_AVP + + /** + * @desc The DRM-Content AVP (AVP code 1221) + * @member aVP_Header Header AVP + * @member aVP_Data Represents a fully qualified domain name (FQDN) + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.56 DRM-Content AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record DRM_Content_AVP { + AVP_Header aVP_Header,// + DRM_Content aVP_Data + } // End of type DRM_Content_AVP + + /** + * @desc The Read-Reply-Report-Requested AVP (AVP code 1222) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates whether a read reply report has been requested by the originator MMS User Agent or not + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.162 Read-Reply-Report-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Read_Reply_Report_Requested_AVP { + AVP_Header aVP_Header,// + Read_Reply_Report_Requested aVP_Data + } // End of type Read_Reply_Report_Requested_AVP + + /** + * @desc The Reply-Applic-ID AVP (AVP code 1223) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identifier of a "reply path", i.e. the identifier of the application to which delivery reports, read-reply reports and reply-MMs are addressed + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.173 Reply-Applic-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Reply_Applic_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Reply_Applic_ID_AVP + + /** + * @desc The SGSN-Address AVP (AVP code 1228) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IP-address of the SGSN/Serving Node that was used during a report + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.199 SGSN-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SGSN_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type SGSN_Address_AVP + + /** + * @desc The PoC-Session-Id AVP (AVP code 1229) + * @member aVP_Header Header AVP + * @member aVP_Data identifies an end-to-end PoC session and may be used for correlation between charging information generated by participating and controlling PoC functions + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.146 PoC-Session-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_Session_Id_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type PoC_Session_Id_AVP + + /** + * @desc The LCS-Client-ID AVP (AVP code 1232) + * @member aVP_Header Header AVP + * @member lcs_Client_Type TODO + * @member lcs_Client_External_ID TODO + * @member lcs_Client_Dialed_By_MS TODO + * @member lcs_Client_Name TODO + * @member lcs_APN TODO + * @member lcs_Requestor_ID TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.84 LCS-Client-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Client_ID_AVP { + AVP_Header aVP_Header,// + LCS_Client_Type_AVP lcs_Client_Type optional, + LCS_Client_External_ID_AVP lcs_Client_External_ID optional, + LCS_Client_Dialed_By_MS_AVP lcs_Client_Dialed_By_MS optional, + LCS_Client_Name_AVP lcs_Client_Name optional, + LCS_APN_AVP lcs_APN optional, + LCS_Requestor_ID_AVP lcs_Requestor_ID optional + } // End of type LCS_Client_ID_AVP + + /** + * @desc Deferred-Location-Event-Type AVP (AVP code 1230) + * @member aVP_Header Header AVP + * @member aVP_Data Holds information related to a deferred location request + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.51 Deferred-Location-Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Deferred_Location_Event_Type_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Deferred_Location_Event_Type_AVP + + /** + * @desc LCS-APN AVP (AVP code 1231) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the APN of the LCS Client + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.81 LCS-APN AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_APN_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_APN_AVP + + /** + * @desc LCS-Client-Dialed-By-MS AVP (AVP code 1233) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the number of the LCS Client dialled by the UE + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.82 LCS-Client-Dialed-By-MS AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Client_Dialed_By_MS_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_Client_Dialed_By_MS_AVP + + /** + * @desc LCS-Client-External-ID AVP (AVP code 1234) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identification of the external LCS Client + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.83 LCS-Client-External-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Client_External_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_Client_External_ID_AVP + + /** + * @desc LCS-Client-External-ID AVP (AVP code 1235) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identification of the external LCS Client + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.85 LCS-Client-Name AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Client_Name_AVP { + AVP_Header aVP_Header,// + LCS_Data_Coding_Scheme_AVP lcs_Data_Coding_Scheme optional, + LCS_Name_String_AVP lcs_Name_String optional, + LCS_Format_Indicator_AVP lcs_Format_Indicator optional + } // End of type LCS_Client_Name_AVP + + /** + * @desc LCS-Data-Coding-Scheme AVP (AVP code 1236) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the information of the alphabet and the language used + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.87 LCS-Data-Coding-Scheme AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Data_Coding_Scheme_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_Data_Coding_Scheme_AVP + + /** + * @desc LCS-Format-Indicator AVP (AVP code 1237) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the format of the LCS Client name + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.88 LCS-Format-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Format_Indicator_AVP { + AVP_Header aVP_Header,// + LCS_Format_Indicator aVP_Data + } // End of type LCS_Format_Indicator_AVP + + /** + * @desc LCS-Name-String AVP (AVP code 1238) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the LCS Client name + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.90 LCS-Name-String AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Name_String_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_Name_String_AVP + + /** + * @desc LCS-Requestor-ID AVP (AVP code 1239) + * @member aVP_Header Header AVP + * @member lcs_Data_Coding_Scheme TODO + * @member lcs_Requestor_ID_String TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.91 LCS-Requestor-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Requestor_ID_AVP { + AVP_Header aVP_Header,// + LCS_Data_Coding_Scheme_AVP lcs_Data_Coding_Scheme optional, + LCS_Requestor_ID_String_AVP lcs_Requestor_ID_String optional + } // End of type LCS_Requestor_ID_AVP + + /** + * @desc LCS-Requestor-ID-String AVP (AVP code 1240) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the identification of the Requestor and can be e.g. MSISDN or logical name + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.92 LCS-Requestor-ID-String AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Requestor_ID_String_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_Requestor_ID_String_AVP + + /** + * @desc LCS-Client-Type AVP (AVP code 1241) + * @member aVP_Header Header AVP + * @member aVP_Data Contains an estimate of the location of an MS in universal coordinates and the accuracy of the estimate + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.86 LCS-Client-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Client_Type_AVP { + AVP_Header aVP_Header,// + LCS_Client_Type aVP_Data + } // End of type LCS_Client_Type_AVP + + /** + * @desc Location-Type AVP (AVP code 1244) + * @member aVP_Header Header AVP + * @member location_Estimate_Type TODO + * @member deferred_Location_Event_Type TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.96 Location-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Location_Type_AVP { + AVP_Header aVP_Header,// + Location_Estimate_Type_AVP location_Estimate_Type optional, + Deferred_Location_Event_Type_AVP deferred_Location_Event_Type optional + } // End of type Location_Type_AVP + + /** + * @desc The 7.2.248 Location-Estimate AVP (AVP code 1242) + * @member aVP_Header Header AVP + * @member aVP_Data Contains an estimate of the location of an MS in universal coordinates and the accuracy of the estimate + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.94 Location-Estimate AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Location_Estimate_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type Location_Estimate_AVP + + /** + * @desc The 7.2.248 Location-Estimate-Type AVP (AVP code 1243) + * @member aVP_Header Header AVP + * @member aVP_Data Contains an estimate of the location of an MS in universal coordinates and the accuracy of the estimate + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.95 Location-Estimate-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Location_Estimate_Type_AVP { + AVP_Header aVP_Header,// + Location_Estimate_Type aVP_Data + } // End of type Location_Estimate_Type_AVP + + /** + * @desc The 7.2.248 Positioning-Data AVP (AVP code 1245) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the usage of each positioning method that was attempted to determine the location estimate either successfully or unsuccessfully + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.152 Positioning-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Positioning_Data_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Positioning_Data_AVP + + /** + * @desc The 7.2.248 WLAN-Session-Id AVP (AVP code 1246) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the charging id generated by the AAA Server for the session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.248 WLAN-Session-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WLAN_Session_Id_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type WLAN_Session_Id_AVP + + /** + * @desc The PDP-Context-Type AVP (AVP code 1247) + * @member aVP_Header Header AVP + * @member reason Contains the reason for closing a container and the addition of a new container + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.138 PDP-Context-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PDP_Context_Type_AVP { + AVP_Header aVP_Header,// + PDP_Context_Type reason + } // End of type PDP_Context_Type_AVP + + /** + * @desc The MMBox-Storage-Requested AVP (AVP code 1248) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates whether an MMBoxstorage has been requested by the originator MMS User Agent or not + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.109 MMBox-Storage-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record MMBox_Storage_Requested_AVP { + AVP_Header aVP_Header,// + MMBox_Storage_Requested aVP_Data + } // End of type MMBox_Storage_Requested_AVP + + /** + * @desc The Called-Asserted-Identity AVP (AVP code 1250) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the address (Public User ID: SIP URI, E.164, etc.) of the finally asserted called party + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.31 Called-Asserted-Identity AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Called_Asserted_Identity_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Called_Asserted_Identity_AVP + + /** + * @desc The Requested-Party-Address AVP (AVP code 1251) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the address (SIP URI or TEL URI) of the party (Public User ID or Public Service ID) to whom the SIP transaction was originally posted + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.176 Requested-Party-ARequested-Party-AddressRequested-Party-Addressddress AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Requested_Party_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Requested_Party_Address_AVP + + /** + * @desc The PoC-User-Role AVP (AVP code 1252) + * @member aVP_Header Header AVP + * @member poc_User_Role_Id TODO + * @member poc_User_Role_info_Units TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.149 PoC-User-Role AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_User_Role_AVP { + AVP_Header aVP_Header,// + PoC_User_Role_Ids_AVP poc_User_Role_Id optional, + PoC_User_Role_info_Units_AVP poc_User_Role_info_Units optional + } // End of type PoC_User_Role_AVP + + /** + * @desc The PoC-User-Role AVP (AVP code 1253) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the PoC user role + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.149 PoC-User-Role AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_User_Role_Ids_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type PoC_User_Role_Ids_AVP + + /** + * @desc The PoC-User-Role-info-Units AVP (AVP code 1254) + * @member aVP_Header Header AVP + * @member aVP_Data Specify the role type details of PoC users + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.151 PoC-User-Role-info-Units AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_User_Role_info_Units_AVP { + AVP_Header aVP_Header,// + PoC_User_Role_info_Units aVP_Data + } // End of type PoC_User_Role_info_Units_AVP + + /** + * @desc The Talk-Burst-Exchange AVP (AVP code 1255) + * @member aVP_Header Header AVP + * @member aVP_Data Specify the role type details of PoC users + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.220 Talk-Burst-Exchange AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Talk_Burst_Exchange_AVP { + AVP_Header aVP_Header,// + PoC_Change_Time_AVP poc_Change_Time, + Number_Of_Talk_Bursts_AVP number_Of_Talk_Bursts optional, + Talk_Burst_Volume_AVP talk_Burst_Volume optional, + Talk_Burst_Time_AVP talk_Burst_Time optional, + Number_Of_Received_Talk_Bursts_AVP number_Of_Received_Talk_Bursts optional, + Received_Talk_Burst_Volume_AVP received_Talk_Burst_Volume optional, + Received_Talk_Burst_Time_AVP received_Talk_Burst_Time optional, + Number_Of_Participants_AVP number_Of_Participants optional, + PoC_Change_Condition_AVP poc_Change_Condition optional + } // End of type Talk_Burst_Exchange_AVP + + /** + * @desc Service-Generic-Information AVP (AVP code 1256) + * @member aVP_Header Header AVP + * @member application_Server_ID TODO + * @member application_Service_Type TODO + * @member application_Session_ID TODO + * @member delivery_Status TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.191 Service-Generic-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + * @see OMA-DDS-Charging_Data-V1_0-20110201-A + */ + type record Service_Generic_Information_AVP { + AVP_Header aVP_Header,// + Application_Server_ID_AVP application_Server_ID optional, + Application_Service_Type_AVP application_Service_Type optional, + Application_Session_ID_AVP application_Session_ID optional, + Delivery_Status_AVP delivery_Status optional + } // End of type Service_Generic_Information_AVP + + /** + * @desc Participant-Access-Priority AVP (AVP code 1259) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate the priority level for users when initiating a new PoC session or participating in a PoC session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.132 Participant-Access-Priority AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Participant_Access_Priority_AVP { + AVP_Header aVP_Header,// + Participant_Access_Priority aVP_Data + } // End of type Participant_Access_Priority_AVP + + /** + * @desc Service-Specific-Type AVP (AVP code 1260) + * @member aVP_Header Header AVP + * @member called_Party_Address TODO + * @member participant_Access_Priority TODO + * @member user_Participating_Type TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.131 Participant-Group AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Participant_Group_AVP { + AVP_Header aVP_Header,// + Called_Party_Address_AVP called_Party_Address optional, + Participant_Access_Priority_AVP participant_Access_Priority optional, + User_Participating_Type_AVP user_Participating_Type optional + } // End of type Participant_Group_AVP + + /** + * @desc The PoC-Change-Condition AVP (AVP code 1261) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the reason for closing a container and the addition of a new container + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.139 PoC-Change-Condition AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PoC_Change_Condition_AVP { + AVP_Header aVP_Header,// + PoC_Change_Condition aVP_Data + } // End of type PoC_Change_Condition_AVP + + /** + * @desc The PoC-Change-Time AVP (AVP code 1262) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the time stamp that defines the moment when a container is closed or the CDR is closed + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.140 PoC-Change-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PoC_Change_Time_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type PoC_Change_Time_AVP + + /** + * @desc The Access-Network-Information AVP (AVP code 1263) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the SIP P-header "P-Access-Network-Information" + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.1 Access-Network-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Access_Network_Information_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type Access_Network_Information_AVP + + /** + * @desc The Early-Media-Description AVP (AVP code 1272) + * @member aVP_Header Header AVP + * @member sdp_TimeStamps TODO + * @member sdp_Media_Component TODO + * @member sdp_Session_Description TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.58 Early-Media-Description AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Early_Media_Description_AVP { + AVP_Header aVP_Header,// + SDP_TimeStamps_AVP sdp_TimeStamps optional, + set of SDP_Media_Component_AVP sdp_Media_Component optional, + set of SDP_Session_Description_AVP sdp_Session_Description optional + } // End of type Early_Media_Description_AVP + + /** + * @desc The SDP-TimeStamps AVP (AVP code 1273) + * @member aVP_Header Header AVP + * @member sdp_Offer_Timestamp_AVP TODO + * @member sdp_Answer_Timestamp_AVP TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.185 SDP-TimeStamps AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_TimeStamps_AVP { + AVP_Header aVP_Header,// + SDP_Offer_Timestamp_AVP sdp_Offer_Timestamp optional, + SDP_Answer_Timestamp_AVP sdp_Answer_Timestamp optional + } // End of type SDP_TimeStamps_AVP + + /** + * @desc The SDP-Offer-Timestamp AVP (AVP code 1274) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the time in UTC format of the SDP offer + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.183 SDP-Offer-Timestamp AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Offer_Timestamp_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type SDP_Offer_Timestamp_AVP + + /** + * @desc The SDP-Answer-Timestamp AVP (AVP code 1275) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the time in UTC format of the SDP offer + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.179 SDP-Answer-Timestamp AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Answer_Timestamp_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type SDP_Answer_Timestamp_AVP + + /** + * @desc The PoC-Session-Initiation-Type AVP (AVP code 1277) + * @member aVP_Data Specifies the type of the PoC session initiation + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.147 PoC-Session-Initiation-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PoC_Session_Initiation_Type_AVP { + AVP_Header aVP_Header,// + PoC_Session_Initiation_Type aVP_Data + } // End of type PoC_Session_Initiation_Type_AVP + + /** + * @desc The Offline-Charging AVP (AVP code 1278) + * @member aVP_Header Header AVP + * @member quota_Consumption_Time TODO + * @member time_Quota_Mechanism TODO + * @member envelope_Reporting optional TODO + * @member multiple_Services_Credit_Control TODO + * @member aVP_Type TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.121 Offline-Charging AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Offline_Charging_AVP { + AVP_Header aVP_Header,// + Quota_Consumption_Time_AVP quota_Consumption_Time optional, + Time_Quota_Mechanism_AVP time_Quota_Mechanism optional, + Envelope_Reporting_AVP envelope_Reporting optional, + set of Multiple_Services_Credit_Control_AVP multiple_Services_Credit_Control optional, + set of AVP_Type aVP_Type optional + } // End of type Offline_Charging_AVP + + /** + * @desc The User-Participating-Type AVP (AVP code 1279) + * @member aVP_Data Indicate the user participating type when participating in the PoC session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.241 User-Participating-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record User_Participating_Type_AVP { + AVP_Header aVP_Header,// + User_Participating_Type aVP_Data + } // End of type User_Participating_Type_AVP + + /** + * @desc Alternate-Charged-Party-Address AVP (AVP code 1280) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the address of the alternate charged party determined by an AS at IMS session initiation + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.12 Alternate-Charged-Party-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Alternate_Charged_Party_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Alternate_Charged_Party_Address_AVP + + /** + * @desc Number-Of-Received-Talk-Bursts AVP (AVP code 1282) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the number of the received talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.118 Number-Of-Received-Talk-Bursts AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Number_Of_Received_Talk_Bursts_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Number_Of_Received_Talk_Bursts_AVP + + /** + * @desc Number-Of-Talk-Bursts AVP (AVP code 1283) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the number of the sent talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.119 Number-Of-Talk-Bursts AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Number_Of_Talk_Bursts_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Number_Of_Talk_Bursts_AVP + + /** + * @desc Received-Talk-Burst-Time AVP (AVP code 1284) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the duration in seconds of the received talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.165 Received-Talk-Burst-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Received_Talk_Burst_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Received_Talk_Burst_Time_AVP + + /** + * @desc Received-Talk-Burst-Volume AVP (AVP code 1285) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the volume in bytes of the received talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.166 Received-Talk-Burst-Volume AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Received_Talk_Burst_Volume_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Received_Talk_Burst_Volume_AVP + + /** + * @desc Talk-Burst-Time AVP (AVP code 1286) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the duration in seconds of the sent talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.221 Talk-Burst-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Talk_Burst_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Talk_Burst_Time_AVP + + /** + * @desc Talk-Burst-Volume AVP (AVP code 1287) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the volume in bytes of the sent talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.222 Talk-Burst-Volume AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Talk_Burst_Volume_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Talk_Burst_Volume_AVP + + /** + * @desc Alternate-Charged-Party-Address AVP (AVP code 1288) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the address (SIP URI or TEL URI) of the party (Public User ID or Public Service ID) who initiates the media action, like adding/removing, connecting/disconnecting the media + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.12 Alternate-Charged-Party-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Media_Initiator_Party_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Media_Initiator_Party_AVP + + /** + * @desc IMS-Communication-Service-Identifier AVP (AVP code 1281) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IMS Communication Service Identifier (ICSI) as contained in the P-Asserted-Service header of a SIP request to identify an IMS Communication Service as defined in TS 24.229 [202] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.76 IMS-Communication-Service-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record IMS_Communication_Service_Identifier_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type IMS_Communication_Service_Identifier_AVP + + type record SMS_Information_AVP { + AVP_Header aVP_Header// + // TODO + + } // End of type SMS_Information_AVP + + /** + * @desc The Low-Balance-Indication AVP (AVP code 2020) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates if the subscriber balance went below a designated aVP_Data by its account + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.97 Low-Balance-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Low_Balance_Indication_AVP { + AVP_Header aVP_Header,// + Low_Balance_Indication aVP_Data + } // End of type Low_Balance_Indication_AVP + + /** + * @desc The Remaining-Balance AVP (AVP code 2021) + * @member aVP_Header Header AVP + * @member unit_Value TODO + * @member currency_Code TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.172 Remaining-Balance AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Remaining_Balance_AVP { + AVP_Header aVP_Header,// + Unit_Value_AVP unit_Value, + Currency_Code_AVP currency_Code + } // End of type Remaining_Balance_AVP + + /** + * @desc The Carrier-Select-Routing-Information AVP (AVP code 2023) + * @member aVP_Header Header AVP + * @member aVP_Data Holds information on carrier selection performed by S-CSCF/AS + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.34 Carrier-Select-Routing-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Carrier_Select_Routing_Information_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Carrier_Select_Routing_Information_AVP + + /** + * @desc The Number-Portability-Routing-Information AVP (AVP code 2024) + * @member aVP_Header Header AVP + * @member aVP_Data Holds information on carrier selection performed by S-CSCF/AS + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.120 Number-Portability-Routing-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Number_Portability_Routing_Information_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Number_Portability_Routing_Information_AVP + + /** + * @desc The PoC-Event-Type AVP (AVP code 2025) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates PoC session unrelated charging event + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.142 PoC-Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PoC_Event_Type_AVP { + AVP_Header aVP_Header,// + PoC_Event_Type aVP_Data + } // End of type PoC_Event_Type_AVP + + type record MMTel_Information_AVP { + AVP_Header aVP_Header// + // TODO + + } // End of type MMTel_Information_AVP + + /** + * @desc The Node-Id AVP (AVP code 2034) + * @member aVP_Header Header AVP + * @member aVP_Data Operator configurable identifier string for the node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.114 Node-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Node_Id_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Node_Id_AVP + + /** + * @desc The Change-Condition AVP (AVP code 2036) + * @member aVP_Header Header AVP + * @member aVP_Data Holds information if the SDP media component was of type SDP offer or SDP answer + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.186 SDP-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record SDP_Type_AVP { + AVP_Header aVP_Header,// + SDP_Type aVP_Data + } // End of type SDP_Type_AVP + + /** + * @desc The Change-Condition AVP (AVP code 2037) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the change in charging condition + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.37 Change-Condition AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Change_Condition_AVP { + AVP_Header aVP_Header,// + Change_Condition aVP_Data + } // End of type Change_Condition_AVP + + /** + * @desc The Change-Time AVP (AVP code 2038) + * @member aVP_Header Header AVP + * @member aVP_Data EPC Charging: holds the time in UTC format when the volume counts associated to the IP-CAN bearer, or the service data container, is closed and reported due to Charging condition change + * MMTel Charging: holds the time in UTC format and it is a time stamp that defines the moment when the conference participant has an action + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.38 Change-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Change_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Change_Time_AVP + + /** + * @desc The Diagnostics AVP (AVP code 2039) + * @member aVP_Header Header AVP + * @member cause Provides a more detailed cause value from PCN node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.54 Diagnostics AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Diagnostics_AVP { + AVP_Header aVP_Header,// + UInt32 cause + } // End of type Diagnostics_AVP + + /** + * @desc The Service-Data-Container AVP (AVP code 2040) + * @member aVP_Header Header AVP + * @member aF_Correlation_Information TODO + * @member charging_Rule_Base_Name TODO + * @member accounting_Input_Octets TODO + * @member accounting_Output_Octets TODO + * @member local_Sequence_Number TODO + * @member qos_Information TODO + * @member rating_Group TODO + * @member change_Time TODO + * @member service_Identifier TODO + * @member service_Specific_Info TODO + * @member SGSN_Address TODO + * @member aVP_Data_First_Usage TODO + * @member aVP_Data_Last_Usage TODO + * @member aVP_Data_Usage TODO + * @member change_Condition TODO + * @member threeGPP_User_Location_Info TODO + * @member threeGPP2_BSID TODO + * @member user_CSG_Information TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.189 Service-Data-Container AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Service_Data_Container_AVP { + AVP_Header aVP_Header,// + AF_Correlation_Information_AVP aF_Correlation_Information optional, + Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + Accounting_Input_Octets_AVP accounting_Input_Octets optional, + Accounting_Output_Octets_AVP accounting_Output_Octets optional, + Local_Sequence_Number_AVP local_Sequence_Number optional, + QoS_Information_AVP qos_Information optional, + Rating_Group_AVP rating_Group optional, + Change_Time_AVP change_Time optional, + Service_Identifier_AVP service_Identifier optional, + Service_Specific_Info_AVP service_Specific_Info optional, + SGSN_Address_AVP SGSN_Address optional, + Time_First_Usage_AVP time_First_Usage optional, + Time_Last_Usage_AVP time_Last_Usage optional, + Time_Usage_AVP time_Usage optional, + set of Change_Condition_AVP change_Condition optional, + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, + User_CSG_Information_AVP user_CSG_Information optional + } // End of type Service_Data_Container_AVP + + /** + * @desc The Start-Time AVP (AVP code 2041) + * @member aVP_Header Header AVP + * @member aVP_Data The time in UTC format which represents the start of a user session at the S-GW/P-GW + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.215 Start-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Start_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Start_Time_AVP + + /** + * @desc The Stop-Time AVP (AVP code 2042) + * @member aVP_Header Header AVP + * @member aVP_Data The the time in UTC format which represents the termination of a user session at the S-GW/P-GW + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.216 Stop-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Stop_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Stop_Time_AVP + + /** + * @desc The Time-First-Usage AVP (AVP code 2043) + * @member aVP_Header Header AVP + * @member aVP_Data The the time in UTC format for the first IP packet to be transmitted and mapped to the current service data container + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.226 Time-First-Usage AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Time_First_Usage_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Time_First_Usage_AVP + + /** + * @desc The Time-Last-Usage AVP (AVP code 2044) + * @member aVP_Header Header AVP + * @member aVP_Data The the time in UTC format for the last IP packet to be transmitted and mapped to the current service data container + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.227 Time-Last-Usage AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Time_Last_Usage_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Time_Last_Usage_AVP + + /** + * @desc The Time-Last-Usage AVP (AVP code 2045) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the effective used time within the service data container reporting interval. + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.232 Time-Usage AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Time_Usage_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Time_Usage_AVP + + /** + * @desc The Traffic-Data-Volumes AVP (AVP code 2046) + * @member aVP_Header Header AVP + * @member qos_Information TODO + * @member accounting_Input_Octets TODO + * @member accounting_Output_Octets TODO + * @member change_condition TODO + * @member change_Time TODO + * @member threeGPP_User_Location_Info TODO + * @member user_CSG_Information TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.233 Traffic-Data-Volumes AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Traffic_Data_Volumes_AVP { + AVP_Header aVP_Header,// + QoS_Information_AVP qos_Information optional, + Accounting_Input_Octets_AVP accounting_Input_Octets optional, + Accounting_Output_Octets_AVP accounting_Output_Octets optional, + Change_Condition_AVP change_condition optional, + Change_Time_AVP change_Time optional, + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, + User_CSG_Information_AVP user_CSG_Information optional + } // End of type Traffic_Data_Volumes_AVP + + /** + * @desc The Serving-Node-Type AVP (AVP code 2047) + * @member aVP_Header Header AVP + * @member node_Type The type of Serving Node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.198 Serving-Node-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Serving_Node_Type_AVP { + AVP_Header aVP_Header,// + Serving_Node_Type aVP_Data + } // End of type Serving_Node_Type_AVP + + /** + * @desc The PDN-Connection-Charging-ID AVP (AVP code 2050) + * @member aVP_Header Header AVP + * @member aVP_Data The charging identifier to identify different records belonging to same PDN connection + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.136 PDN-Connection-Charging-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PDN_Connection_Charging_ID_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type PDN_Connection_Charging_ID_AVP + + /** + * @desc The Dynamic-Address-Flag AVP (AVP code 2051) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates whether the PDP context/PDN address is statically or dynamically allocated + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.57 Dynamic-Address-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Dynamic_Address_Flag_AVP { + AVP_Header aVP_Header,// + Dynamic_Address_Flag aVP_Data + } // End of type Dynamic_Address_Flag_AVP + + /** + * @desc The Accumulated-Cost AVP (AVP code 2052) + * @member aVP_Header Header AVP + * @member value_Digits TODO + * @member exponent TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.3 Accumulated-Cost AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Accumulated_Cost_AVP { + AVP_Header aVP_Header,// + Value_Digits_AVP value_Digits, + Exponent_AVP exponent optional + } // End of type Accumulated_Cost_AVP + + /** + * @desc The AoC-Cost-Information AVP (AVP code 2053) + * @member aVP_Header Header AVP + * @member accumulated_Cost Holds the accumulated cost for the ongoing session + * @member incremental_Cost Holds the incremental cost since last AoC interaction for the ongoing session + * @member currency_Code Not used in 3GPP. + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.13 AoC-Cost-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Cost_Information_AVP { + AVP_Header aVP_Header,// + Accumulated_Cost_AVP accumulated_Cost optional, + set of Incremental_Cost_AVP incremental_Cost optional, + Currency_Code_AVP currency_Code optional // Not used in 3GPP + } // End of type AoC_Cost_Information_AVP + + /** + * @desc The AoC-Information AVP (AVP code 2054) + * @member aVP_Header Header AVP + * @member aoc_Cost_Information_AVP Holds accumulated and incremental cost information for the AoC service + * @member tariff_Information_AVP Holds a tariff definition either from the local provider or from 3rd party provider + * @member aoc_Subscription_Information Holds the subscription and formatting parameters received from HSS + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.15 AoC-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Information_AVP { + AVP_Header aVP_Header,// + AoC_Cost_Information_AVP aoc_Cost_Information optional, + Tariff_Information_AVP tariff_Information optional, + AoC_Subscription_Information_AVP aoc_Subscription_Information optional + } // End of type AoC_Information_AVP + + /** + * @desc The AoC-Request-Type AVP (AVP code 2055) + * @member aVP_Header Header AVP + * @member aoc_Request_Type Tags if the client is looking for AoCI in conjunction to the Request-Type and Request-Action AVPs + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.16 AoC-Request-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Request_Type_AVP { + AVP_Header aVP_Header,// + AoC_Request_Type aoc_Request_Type + } // End of type AoC_Request_Type_AVP + + /** + * @desc The Current-Tariff AVP (AVP code 2056) + * @member aVP_Header Header AVP + * @member currency_Code Not used in 3GPP. + * @member scale_Factor Holds simple multiplication factor in the same format as Unit-Value + * @member rate_Element Holds simple rate element of one dimension + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.47 Current-Tariff AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Current_Tariff_AVP { + AVP_Header aVP_Header,// + Currency_Code_AVP currency_Code optional, // Not used in 3GPP + Scale_Factor_AVP scale_Factor optional, + set of Rate_Element_AVP rate_Element optional + } // End of type Current_Tariff_AVP + + /** + * @desc The Next-Tariff AVP (AVP code 2057) + * @member aVP_Header Header AVP + * @member currency_Code Not used in 3GPP. + * @member scale_Factor Holds simple multiplication factor in the same format as Unit-Value + * @member rate_Element Holds simple rate element of one dimension + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.112 Next-Tariff AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Next_Tariff_AVP { + AVP_Header aVP_Header,// + Currency_Code_AVP currency_Code optional, // Not used in 3GPP + Scale_Factor_AVP scale_Factor optional, + set of Rate_Element_AVP rate_Element optional + } // End of type Next_Tariff_AVP + + /** + * @desc The Rate-Element AVP (AVP code 2058) + * @member aVP_Header Header AVP + * @member cc_Unit_Type_AVP TODO + * @member charge_Reason_Code Identifies if the Rate-Element corresponds to a specific charge type + * @member unit_Value Not used in 3GPP. + * @member unit_Cost Holds monetary value + * @member unit_Quota_Threshold TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.161 Rate-Element AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Rate_Element_AVP { + AVP_Header aVP_Header,// + CC_Unit_Type_AVP cc_Unit_Type, + Charge_Reason_Code_AVP charge_Reason_Code optional, + Unit_Value_AVP unit_Value optional, + Unit_Cost_AVP unit_Cost optional, + Unit_Quota_Threshold_AVP unit_Quota_Threshold optional + } // End of type Rate_Element_AVP + + /** + * @desc The Scale-Factor AVP (AVP code 2059) + * @member aVP_Header Header AVP + * @member value_Digits TODO + * @member exponent TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.178 Scale-Factor AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Scale_Factor_AVP { + AVP_Header aVP_Header,// + Value_Digits_AVP value_Digits, + Exponent_AVP exponent optional + } // End of type Scale_Factor_AVP + + /** + * @desc The Tariff-Information AVP (AVP code 2060) + * @member aVP_Header Header AVP + * @member current_Tariff Holds tariff information + * @member tariff_Time_Change Not used in 3GPP. + * @member next_Tariff Holds tariff information + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.223 Tariff-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Tariff_Information_AVP { + AVP_Header aVP_Header,// + Current_Tariff_AVP current_Tariff, + Tariff_Time_Change_AVP tariff_Time_Change optional, + Next_Tariff_AVP next_Tariff optional + } // End of type Tariff_Information_AVP + + /** + * @desc The Unit-Cost AVP (AVP code 2061) + * @member aVP_Header Header AVP + * @member value_Digits TODO + * @member exponent TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.239 Unit-Cost AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Unit_Cost_AVP { + AVP_Header aVP_Header,// + Value_Digits_AVP value_Digits, + Exponent_AVP exponent optional + } // End of type Unit_Cost_AVP + + /** + * @desc The Incremental-Cost AVP (AVP code 2062) + * @member aVP_Header Header AVP + * @member value_Digits TODO + * @member exponent TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.70 Incremental-Cost AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Incremental_Cost_AVP { + AVP_Header aVP_Header,// + Value_Digits_AVP value_Digits, + Exponent_AVP exponent optional + } // End of type Incremental_Cost_AVP + + /** + * @desc The Local-Sequence-Number AVP (AVP code 2063) + * @member aVP_Header Header AVP + * @member seq_number Holds the service data container sequence number + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.93 Local-Sequence-Number AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Local_Sequence_Number_AVP { + AVP_Header aVP_Header,// + UInt32 seq_number + } // End of type Local_Sequence_Number_AVP + + /** + * @desc The SGW-Change AVP (AVP code 2065) + * @member aVP_Header Header AVP + * @member aVP_Data Accounting Request type + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.200 SGW-Change AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SGW_Change_AVP { + AVP_Header aVP_Header,// + SGW_Change aVP_Data + } // End of type SGW_Change_AVP + + /** + * @desc The Charging-Characteristics-Selection-Mode AVP (AVP code 2066) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates how the applied Charging-Characteristics was selected + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.39A Charging-Characteristics-Selection-Mode AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Charging_Characteristics_Selection_Mode_AVP { + AVP_Header aVP_Header,// + Charging_Characteristics_Selection_Mode aVP_Data + } // End of type Charging_Characteristics_Selection_Mode_AVP + + /** + * @desc The SGW-Address AVP (AVP code 2067) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IP-address of the S-GW Node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.199A SGW-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SGW_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type SGW_Address_AVP + + /** + * @desc The Dynamic-Address-Flag-Extension AVP (AVP code 2068) + * @member aVP_Header Header AVP + * @member pdpAddressAllocation indicates that the IPv4 PDN address has been dynamically allocated for that particular IP CAN bearer (PDN connection) of PDN type IPv4v6, and the dynamic IPv6 address is indicated in Dynamic Address Flag + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.57A Dynamic-Address-Flag-Extension AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Dynamic_Address_Flag_Extension_AVP { + AVP_Header aVP_Header,// + Dynamic_Address_Flag_Extension pdpAddressAllocation + } // End of type Dynamic_Address_Flag_Extension_AVP + + /** + * @desc The Application-Server-ID AVP (AVP code 2101) + * @member aVP_Header Header AVP + * @member aVP_Data The Application Server identifier + * + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Application_Server_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Application_Server_ID_AVP + + /** + * @desc The Application-Service-Type AVP (AVP code 2102) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Application_Service_Type_AVP { + AVP_Header aVP_Header,// + Application_Service_Type aVP_Data + } // End of type Application_Service_Type_AVP + + /** + * @desc The Application-Session-ID AVP (AVP code 2103) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Application_Session_ID_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Application_Session_ID_AVP + + /** + * @desc The Delivery_Status AVP (AVP code 2104) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Delivery_Status_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Delivery_Status_AVP + + type record IM_Information_AVP { + AVP_Header aVP_Header// + // TODO + + } // End of type IM_Information_AVP + + type record DCD_Information_AVP { + AVP_Header aVP_Header// + // TODO + + } // End of type DCD_Information_AVP + + /** + * @desc The Incremental-Cost AVP (AVP code 2118) + * @member aVP_Header Header AVP + * @member value Enumerated value + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.38A Charge-Reason-Code AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Charge_Reason_Code_AVP { + AVP_Header aVP_Header,// + Charge_Reason_Code aVP_Data + } // End of type Charge_Reason_Code_AVP + + /** + * @desc The SIP-Request-Timestamp-Fraction AVP (AVP code 2301) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the miliseconds fraction in relation to SIP-Request-Timestamp + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.203 SIP-Request-Timestamp-Fraction AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record SIP_Request_Timestamp_Fraction_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type SIP_Request_Timestamp_Fraction_AVP + + /** + * @desc The SIP-Response-Timestamp-Fraction AVP (AVP code 2302) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the miliseconds fraction in relation to SIP-Response-Timestamp + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.205 SIP-Response-Timestamp-Fraction AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record SIP_Response_Timestamp_Fraction_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type SIP_Response_Timestamp_Fraction_AVP + + /** + * @desc The Online-Charging-Flag AVP (AVP code 2303) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the Online Charging Request was sent based on the provided ECF address from the SIP P-header "P-Charging-Function-Addresses" + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.122 Online-Charging-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Online_Charging_Flag_AVP { + AVP_Header aVP_Header,// + Online_Charging_Flag aVP_Data + } // End of type Online_Charging_Flag_AVP + + /** + * @desc The Online-Charging-Flag AVP (AVP code 2305) + * @member aVP_Header Header AVP + * @member tariff_Information TODO + * @member tariff_XML TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.164 Real-Time-Tariff-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Real_Time_Tariff_Information_AVP { + AVP_Header aVP_Header,// + Tariff_Information_AVP tariff_Information optional, + Tariff_XML_AVP tariff_XML optional + } // End of type Real_Time_Tariff_Information_AVP + + /** + * @desc The Tariff-XML AVP (AVP code 2306) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the XML body describing the tariff/add-on charge information exchanged during the SIP transaction, as described in the TS 29.658 [222] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.224 Tariff-XML AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Tariff_XML_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Tariff_XML_AVP + + /** + * @desc The IMSI-Unauthenticated-Flag AVP (AVP code 2308) + * @member aVP_Header Header AVP + * @member aVP_Data Enumerated value + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.78 IMSI-Unauthenticated-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record IMSI_Unauthenticated_Flag_AVP { + AVP_Header aVP_Header,// + IMSI_Unauthenticated_Flag aVP_Data + } // End of type IMSI_Unauthenticated_Flag_AVP + + /** + * @desc The Account-Expiration AVP (AVP code 2309) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the subscriber account expiration date and time of day + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.2 Account-Expiration AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Account_Expiration_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type Account_Expiration_AVP + + /** + * @desc The AoC-Format AVP (AVP code 2310) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the format on how the AoC information shall be sent to the UE + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.14 AoC-Format AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Format_AVP { + AVP_Header aVP_Header,// + AoC_Format aVP_Data + } // End of type AoC_Format_AVP + + /** + * @desc The AoC-Service AVP (AVP code 2311) + * @member aVP_Header Header AVP + * @member aoc_Service_Obligatory_Type AoC Service type + * @member aoc_Service_Type AoC Service obligatory type + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.17 AoC-Service AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Service_AVP { + AVP_Header aVP_Header,// + AoC_Service_Obligatory_Type_AVP aoc_Service_Obligatory_Type optional, + AoC_Service_Type_AVP aoc_Service_Type optional + } // End of type AoC_Service_AVP + + /** + * @desc The AoC-Service-Obligatory-Type AVP (AVP code 2312) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the information if the AoC information is binding or not + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.18 AoC-Service-Obligatory-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Service_Obligatory_Type_AVP { + AVP_Header aVP_Header,// + AoC_Service_Obligatory_Type aVP_Data + } // End of type AoC_Service_Obligatory_Type_AVP + + /** + * @desc The AoC-Service-Type AVP (AVP code 2313) + * @member aVP_Header Header AVP + * @member aVP_Data Defines the type of AoC information to be provided to the subscriber + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.19 AoC-Service-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Service_Type_AVP { + AVP_Header aVP_Header,// + AoC_Service_Type aVP_Data + } // End of type AoC_Service_Type_AVP + + /** + * @desc The AoC-Subscription-Information AVP (AVP code 2314) + * @member aVP_Header Header AVP + * @member aoc_Service TODO + * @member aoc_Format TODO + * @member preferred_AoC_Currency TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.20 AoC-Subscription-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Subscription_Information_AVP { + AVP_Header aVP_Header,// + set of AoC_Service_AVP aoc_Service optional, + AoC_Format_AVP aoc_Format optional, + Preferred_AoC_Currency_AVP preferred_AoC_Currency optional + } // End of type AoC_Subscription_Information_AVP + + /** + * @desc The Preferred-AoC-Currency AVP (AVP code 2315) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the preferred currency code that the AoC function would like to get the AoC information + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.153 Preferred-AoC-Currency AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Preferred_AoC_Currency_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Preferred_AoC_Currency_AVP + + /** + * @desc The Initial-IMS-Charging-Identifier AVP (AVP code 2321) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the Initial IMS Charging Identifier (ICID) as generated by a IMS node for the initial SIP session created for IMS service continuity + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.79A Initial-IMS-Charging-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Initial_IMS_Charging_Identifier_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Initial_IMS_Charging_Identifier_AVP + + /** + * @desc The Initial-IMS-Charging-Identifier AVP (AVP code 2322) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the IMS session is an IMS emergency session or IMS registration + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.76A IMS-Emergency-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record IMS_Emergency_Indicator_AVP { + AVP_Header aVP_Header,// + IMS_Emergency_Indicator aVP_Data + } // End of type IMS_Emergency_Indicator_AVP + + /** + * @desc The Outgoing-Session-Id AVP (AVP code 2330) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the SIP Call ID of the outgoing leg, as defined in RFC 3261 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.128A Outgoing-Session-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Outgoing_Session_Id_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Outgoing_Session_Id_AVP + + /** + * @desc The Low-Priority-Indicator AVP (AVP code 2602) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates if the PDN connection has a low aVP_Data, i.e. for Machine Type Communications + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.97A Low-Priority-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Low_Priority_Indicator_AVP { + AVP_Header aVP_Header,// + Low_Priority_Indicator aVP_Data + } // End of type Low_Priority_Indicator_AVP + + /** + * @desc The Local-GW-Inserted-Indication AVP (AVP code 2603) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates whether the IP realm used for the SDP media component is the Default IP realm or not + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.80A IP-Realm-Default-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record IP_Realm_Default_Indication_AVP { + AVP_Header aVP_Header,// + IP_Realm_Default_Indication aVP_Data + } // End of type IP_Realm_Default_Indication_AVP + + /** + * @desc The Local-GW-Inserted-Indication AVP (AVP code 2604) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates if the local GW (TrGW, IMS-AGW) is inserted or not for the SDP media component + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.92A Local-GW-Inserted-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Local_GW_Inserted_Indication_AVP { + AVP_Header aVP_Header,// + Local_GW_Inserted_Indication aVP_Data + } // End of type Local_GW_Inserted_Indication_AVP + + /** + * @desc The Transcoder-Inserted-Indication AVP (AVP code 2605) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates if a transcoder is inserted or not for the SDP media component + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.233A Transcoder-Inserted-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Transcoder_Inserted_Indication_AVP { + AVP_Header aVP_Header,// + Transcoder_Inserted_Indication aVP_Data + } // End of type Transcoder_Inserted_Indication_AVP + + /** + * @desc The PDP-Address-Prefix-Length AVP (AVP code 2606) + * @member aVP_Header Header AVP + * @member aVP_Data The aVP_Data length of an IPv6 typed PDP-Address AVP + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.137a PDP-Address-Prefix-Length AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PDP_Address_Prefix_Length_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type PDP_Address_Prefix_Length_AVP + + } // End of group TS132_299Rf_Ro_AVPS + + } // End of group Avp_Rf_Ro_Types + + } // End of group AVPTypes + +} with { + encode "DIAMETERCodec"; variant ""; +} // End of module LibDiameter_Types_RfRo_AVPs diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6e00d18edcb78fce8411ec967f0c1223f488338b --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn @@ -0,0 +1,492 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter Rx AVP types used by LibDiameter constructs.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new Rx AVP types is ok; + */ +module LibDiameter_Types_Rx_AVPs { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibDiameter + import from LibDiameter_Types_Base_AVPs all; + + group AVPTypes{ + + group AVP_Rx_Types{ + + type enumerated Abort_Cause_Type{ + // Ref: ETSI TS 129 214 5.3.1 + BEARER_RELEASED_E (0), + INSUFFICIENT_SERVER_RESOURCES_E (1), + INSUFFICIENT_BEARER_RESOURCES_E (2), + PS_TO_CS_HANDOVER_E (3), + SPONSORED_DATA_CONNECTIVITY_DISALLOWED_E (4) + } +// with { +// variant "length=32" +// } + + type enumerated Flow_Usage_Type{ + // Ref: ETSI TS 129 214 5.3.12 + NO_INFORMATION_E (0), + RTCP_E (1), + AF_SIGNALLING_E (2) + } +// with { +// variant "length=32" +// } + + + type enumerated IMS_Content_Type{ + // Ref: ETSI TS 129 214 5.3.61 + NO_CONTENT_DETAIL_E (0), + CAT_E (1) + } +// with { +// variant "length=32" +// } + + type enumerated Specific_Action_Type{ + // Ref: ETSI TS 129 214 5.3.13 + VOID_0_E (0), + CHARGING_CORRELATION_EXCHANGE_E (1), + INDICATION_OF_LOSS_OF_BEARER_E (2), + INDICATION_OF_RECOVERY_OF_BEARER_E (3), + INDICATION_OF_RELEASE_OF_BEARER_E (4), + VOID_5_E (5), + IP_CAN_CHANGE_E (6), + INDICATION_OF_OUT_OF_CREDIT_E (7), + INDICATION_OF_SUCCESSFUL_RESOURCES_ALLOCATION_E (8), + INDICATION_OF_FAILED_RESOURCES_ALLOCATION_E (9), + INDICATION_OF_LIMITED_PCC_DEPLOYMENT_E (10), + USAGE_REPORT_E (11), + ACCESS_NETWORK_INFO_REPORT_E (12) + } +// with { +// variant "length=32" +// } + + type enumerated Media_Type_Type{ + // Ref: ETSI TS 129 214 5.3.19 + AUDIO_E (0), + VIDEO_E (1), + DATA_E (2), + APPLICATION_E (3), + CONTROL_E (4), + TEXT_E (5), + MESSAGE_E (6), + OTHER_E (7) // OTHER is defined as c_uInt32Max = 0xFFFFFFFF + } +// with { +// variant "length=32" +// } + + type enumerated Rx_Request_Type{ + // Ref: ETSI TS 129 214 5.3.31 + INITIAL_REQUEST_E (0), + UPDATE_REQUEST_E (1), + PCSCF_RESTORATION_E (2) + } +// with { +// variant "length=32" +// } + + type enumerated Service_Info_Type{ + // Ref: ETSI TS 129 214 5.3.25 + FINAL_SERVICE_INFORMATION_E (0), + PRELIMINARY_SERVICE_INFORMATION_E (1) + } +// with { +// variant "length=32" +// } + + type enumerated SIP_Forking_Indication_Type{ + // Ref: ETSI TS 129 214 5.3.22 + SINGLE_DIALOGUE_E (0), + SEVERAL_DIALOGUES_E (1) + } +// with { +// variant "length=32" +// } + + type enumerated Reservation_Priority_Type{ + // Ref: ETSI TS 183 017 7.3.9 + PRIORITY_ONE_E (1), + PRIORITY_TWO_E (2), + PRIORITY_THREE_E (3), + PRIORITY_FOUR_E (4), + PRIORITY_FIVE_E (5), + PRIORITY_SIX_E (6), + PRIORITY_SEVEN_E (7), + PRIORITY_EIGHT_E (8), + PRIORITY_NINE_E (9), + PRIORITY_TEN_E(10), + PRIORITY_ELEVEN_E (11), + PRIORITY_TWELVE_E (12), + PRIORITY_THIRTEEN_E (13), + PRIORITY_FOURTEEN_E (14), + PRIORITY_FIFTEEN_E (15) + } + + }//end group AVP_Rx_Types + + }//end group AVP_Types + group AVPs{ + group TS129_214Rx_AVPS{ + + type record Abort_Cause_AVP{ + //Ref: ETSI TS 129 214 Abort Cause AVP + AVP_Header aVP_Header,// + Abort_Cause_Type aVP_Data + } +// with { +// variant "present=bytes(4, 500);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Access_Network_Charging_Address_AVP{ + //Ref: ETSI TS 129 214 Access_Network_Charging_Address AVP + AVP_Header aVP_Header,// + Address aVP_Data + } +// with { +// variant "present=bytes(4, 501);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Access_Network_Charging_Identifier_AVP{ + //Ref: ETSI TS 129 214 Access_Network_Charging_Identifier AVP + AVP_Header aVP_Header, // + Access_Network_Charging_Identifier_Value_AVP acc_Net_Charging_Id_Val, + set of Flows_AVP flows + } +// with { +// variant "present=bytes(4, 502);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (flows) "condition=CodecHelper.leaveScope()" +// } + + type record Acceptable_Service_Info_AVP{ + //Ref: ETSI TS 129 214 Acceptable_Service_Info_AVP + AVP_Header aVP_Header,// + set of Media_Component_Description_AVP media_component_description optional, + Max_Requested_Bandwidth_UL_AVP max_Requested_Bw_Ul optional, + Max_Requested_Bandwidth_DL_AVP max_Requested_Bw_Dl optional, + set of AVP_Type aVP_Type optional + } + // with { +// variant "present=bytes(4, 411);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (media_component_description) "fieldPresent=bytes(4, 511)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record AF_Application_Identifier_AVP{ + //Ref: ETSI TS 129 214 AF_Application_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 504);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record AF_Requested_Data_AVP{ + //Ref: ETSI TS 129 214 AF_Requested_Data AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 551);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Codec_Data_AVP{ + //Ref: ETSI TS 129 214 Codec_data AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 524);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope();condition=CodecHelper.leaveScope()" +// } + + type record Flow_Usage_AVP{ + //Ref: ETSI TS 129 214 Flow_Usage AVP + AVP_Header aVP_Header,// + Flow_Usage_Type aVP_Data + } +// with { +// variant "present=bytes(4, 512);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record GCS_Identifier_AVP{ + //Ref: ETSI TS 129 214 GCS_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 538);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record IMS_Content_Identifier_AVP{ + //Ref: ETSI TS 129 214 IMS_Content_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 563);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record IMS_Content_Type_AVP{ + //Ref: ETSI TS 129 214 IMS_Content_Type AVP + AVP_Header aVP_Header,// + IMS_Content_Type aVP_Data + } +// with { +// variant "present=bytes(4, 564);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record IP_Domain_AVP{ + //Ref: ETSI TS 129 214 IP_Domain AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 525);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Specific_Action_AVP{ + //Ref: ETSI TS 129 214 Specific_Action AVP + AVP_Header aVP_Header,// + Specific_Action_Type aVP_Data + } +// with { +// variant "present=bytes(4, 513);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type set of Specific_Action_AVP Setof_Specific_Action_AVP +// with { +// variant "present=bytes(4, 513)" +// } + + type record MCPTT_Identifier_AVP{ + //Ref: ETSI TS 129 214 MCPTT_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 547);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record MCVideo_Identifier_AVP{ + //Ref: ETSI TS 129 214 MCVideo_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 562);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Media_Component_Description_AVP{ + //Ref: ETSI TS 129 214 Media_Component_Decription_AVP + AVP_Header aVP_Header,// + Media_Component_Number_AVP media_Component_Nr, + set of Media_Sub_Component_AVP media_Sub_component optional, + AF_Application_Identifier_AVP af_Application_Id optional, + Media_Type_AVP media_type optional, + Max_Requested_Bandwidth_UL_AVP max_Requested_Bw_Ul optional, + Max_Requested_Bandwidth_DL_AVP max_Requested_Bw_Dl optional, + Flow_Status_AVP flow_Status optional, + Reservation_Priority_AVP reservation_Priority optional, + RS_Bandwidth_AVP rs_Bw optional, + RR_Bandwidth_AVP rr_Bw optional, + set of Codec_Data_AVP codec_data optional + } +// with { +// variant "present=bytes(4, 517);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (media_Sub_component) "fieldPresent=bytes(4, 519)&&CodecHelper.isAvailable()" +// variant (codec_data) "fieldPresent=bytes(4, 524)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Media_Sub_Component_AVP{ + //Ref: ETSI TS 129 214 Media_Sub_Component_AVP + AVP_Header aVP_Header,// + Flow_Number_AVP flow_Number, + record length (0..2) of Flow_Description_AVP flow_Description optional, + Flow_Status_AVP flow_Status optional, + Flow_Usage_AVP flow_Usage optional, + Max_Requested_Bandwidth_UL_AVP max_Requested_Bw_Ul optional, + Max_Requested_Bandwidth_DL_AVP max_Requested_Bw_Dl optional, + AF_Signalling_Protocol_AVP af_Signalling_Protocol optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 519);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (flow_Description) "fieldPresent=bytes(4, 507)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Flow_Description_AVP{ + //Ref: ETSI TS 129 214 Flow_Description AVP + AVP_Header aVP_Header,// + IPFilterRule_Type aVP_Data + } +// with { +// variant "present=bytes(4, 507);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Media_Type_AVP{ + //Ref: ETSI TS 129 214 Media_Type AVP + AVP_Header aVP_Header,// + Media_Type_Type aVP_Data + } +// with { +// variant "present=bytes(4, 520);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record MPS_Identifier_AVP{ + //Ref: ETSI TS 129 214 MPS_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 528);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Pre_emption_Control_Info_AVP{ + //Ref: ETSI TS 129 214 Pre_emption_Control_Info AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 553);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Retry_Interval_AVP{ + //Ref: ETSI TS 129 214 Retry_Interval AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 541);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Rx_Request_Type_AVP{ + //Ref: ETSI TS 129 214 Rx_Request_Type AVP + AVP_Header aVP_Header,// + Rx_Request_Type aVP_Data + } +// with { +// variant "present=bytes(4, 533);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record RR_Bandwidth_AVP{ + //Ref: ETSI TS 129 214 RR Bandwidth_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 521);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record RS_Bandwidth_AVP{ + //Ref: ETSI TS 129 214 RS Bandwidth_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 522);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Service_Info_Status_AVP{ + //Ref: ETSI TS 129 214 Service_Info AVP + AVP_Header aVP_Header,// + Service_Info_Type aVP_Data + } +// with { +// variant "present=bytes(4, 527);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Service_Authorization_Info_AVP { + //Ref: ETSI TS 129 214 RS Bandwidth_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 548);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record SIP_Forking_Indication_AVP{ + //Ref: ETSI TS 129 214 SIP_Forking_Indication AVP + AVP_Header aVP_Header,// + SIP_Forking_Indication_Type aVP_Data + } +// with { +// variant "present=bytes(4, 523);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Sponsored_Connectivity_Data_AVP{ + //Ref: ETSI TS 129 214 Sponsored_Connectivity_Data AVP + AVP_Header aVP_Header, // + Sponsor_Identity_AVP sponsor_Identity optional, + Application_Service_Provider_Identity_AVP application_service_provider_Id optional, + Granted_Service_Unit_AVP granted_Service_Unit optional, + Used_Service_Unit_AVP used_service_unit optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 530);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Reservation_Priority_AVP{ + //Ref: ETSI TS 183 017 Reservation_Priority AVP + AVP_Header aVP_Header,// + Reservation_Priority_Type aVP_Data + } +// with { +// variant "present=bytes(4, 458);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + }//end of group TS129_214Rx_AVPs + + }//end group AVPs + + +} with { + encode "DIAMETERCodec"; variant ""; +} //end module LibDiameter_Types_Rx_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..d2a52b1dc707cb725633a0771dd42ad8b2a227ed --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn @@ -0,0 +1,1116 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter S6a AVP types used by LibDiameter constructs.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new S6a AVP types is ok; + */ +module LibDiameter_Types_S6a_AVPs { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + // LibDiameter + //import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; + //import from LibDiameter_Types_Gx_AVPs all; + // import from LibDiameter_Types_RfRo_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + // import from LibDiameter_Types_Gx_AVPs all; + // import from LibDiameter_Types_Rx_AVPs all; + + group AVPs { + + group TS129_272_AVPs { + + type record ULR_Flags_AVP { //ref: 7.3.7 + AVP_Header aVP_Header, //ULR-Flags ::= + UInt32 aVP_Data + } + + type record ULA_Flags_AVP { //ref: 7.3.8 + AVP_Header aVP_Header, //ULA-Flags ::= + UInt32 aVP_Data + } + + type record Visited_PLMN_Id_AVP { //ref: 7.3.9 + AVP_Header aVP_Header, //Visited-PLMN-Id ::= + Oct3 aVP_Data + } + + type enumerated UE_SRVCC_Capability_Type { + UE_SRVCC_NOT_SUPPORTED_E (0), + UE_SRVCC_SUPPORTED_E (1) + } + + type record UE_SRVCC_Capability_AVP { //ref: 7.3.130 + AVP_Header aVP_Header, //UE-SRVCC-Capability ::= + UE_SRVCC_Capability_Type aVP_Data + } + + type record SGSN_Number_AVP { //ref: 7.3.102 + AVP_Header aVP_Header, //SGSN-Number ::= + octetstring aVP_Data + } + + type enumerated Homogeneous_Support_Type { + NOT_SUPPORTED_E (0), + SUPPORTED_E (1) + } + + type record Homogeneous_Support_AVP { //ref: 7.3.107 + AVP_Header aVP_Header, //Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions ::= + Homogeneous_Support_Type aVP_Data + } + + type record GMLC_Address_AVP { //ref: 7.3.109 - TS 129 173 6.4.7 + AVP_Header aVP_Header, //GMLC-Address ::= + Address aVP_Data + } + + type record Context_Identifier_AVP { //ref: 7.3.27 + AVP_Header aVP_Header, //Context-Identifier ::= + UInt32 aVP_Data + } + + type record Service_Selection_AVP { //ref: 7.3.36 - IETF RFC 5778 6.2 + AVP_Header aVP_Header, //Service-Selection ::= + UTF8String aVP_Data + } + + type record MIP_Home_Agent_Address_AVP { //ref: 7.3.42 - IETF RFC 4004 7.4 + AVP_Header aVP_Header, //MIP-Home-Agent-Address ::= + Address aVP_Data + } + + type record MIP_Home_Agent_Host_AVP { //ref: 7.3.43 - IETF RFC 4004 7.11 + AVP_Header aVP_Header, //MIP-Home-Agent-Host ::= + Destination_Realm_AVP destination_Realm, + Destination_Host_AVP destination_Host, + set of AVP_Type aVP_Type optional + } + + type record MIP6_Home_Link_Prefix_AVP { //ref:IETF RFC 5447 4.2.4 + AVP_Header aVP_Header, //MIP6-Home-Link-Prefix ::= + octetstring aVP_Data + } + + type record MIP6_Agent_Info_AVP { //ref: 7.3.45 + AVP_Header aVP_Header, //MIP6-Agent-Info ::= < AVP Header: 486 > + MIP_Home_Agent_Address_AVP mip_Home_Agent_Address1 optional, + MIP_Home_Agent_Address_AVP mip_Home_Agent_Address2 optional, + MIP_Home_Agent_Host_AVP mip_Home_Agent_Host optional, + MIP6_Home_Link_Prefix_AVP mip6_Home_Link_Prefix optional, + set of AVP_Type aVP_Type optional + } + + type record Specific_APN_Info_AVP { //ref: 7.3.82 + AVP_Header aVP_Header, //Specific-APN-Info ::= + Service_Selection_AVP service_Selection, + MIP6_Agent_Info_AVP mip6_Agent_Info, + Visited_Network_Identifier_AVP visited_Network_Identifier optional, + set of AVP_Type aVP_Type optional + } + + type record Active_APN_AVP { //ref: 7.3.127 + AVP_Header aVP_Header, //Active-APN ::= + Context_Identifier_AVP context_Identifier, + Service_Selection_AVP service_Selection optional, + MIP6_Agent_Info_AVP mip6_Agent_Info optional, + Visited_Network_Identifier_AVP visited_Network_Identifier optional, + Specific_APN_Info_AVP specific_APN_Info optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Error_Diagnostic_Code_Type { + GPRS_DATA_SUBSCRIBED_E (0), + NO_GPRS_DATA_SUBSCRIBED_E (1), + ODB_ALL_APN_E (2), + ODB_HPLMN_APN_E (3), + ODB_VPLMN_APN_E (4) + } + + type record Error_Diagnostic_AVP { //ref: 7.3.128 + AVP_Header aVP_Header, //Error-Diagnostic ::= + Error_Diagnostic_Code_Type error_Diagnostic_Code + } + + type enumerated Subscriber_Status_Code { + SERVICE_GRANTED_E (0), + OPERATOR_DETERMINED_BARRING_E (1) + } + + type record Subscriber_Status_AVP { //ref: 7.3.29 + AVP_Header aVP_Header, //Subscriber-Status ::= + Subscriber_Status_Code subscriber_Status_Code + } + + type record STN_SR_AVP { //ref: 7.3.39 + AVP_Header aVP_Header, //STN-SR ::= + octetstring sTN_SR + } + + type enumerated ICS_Indicator_Code { + FALSE_E (0), + TRUE_E (1) + } + + type record ICS_Indicator_AVP { //ref: 7.3.104 + AVP_Header aVP_Header, //ICS-Indicator ::= + ICS_Indicator_Code iCS_Indicator_Code + } + + type enumerated Network_Access_Mode_Code { + PACKET_AND_CIRCUIT_E (0), + Reserved_E (1), + ONLY_PACKET_E (2) + } + + type record Network_Access_Mode_AVP { //ref: 7.3.21 + AVP_Header aVP_Header, //Network-Access-Mode ::= + Network_Access_Mode_Code network_Access_Mode + } + + type record Operator_Determined_Barring_AVP { //ref: 7.3.30 + AVP_Header aVP_Header, //Operator-Determined-Barring ::= + UInt32 aVP_Data + } + + type record HPLMN_ODB_AVP { //ref: 7.3.22 + AVP_Header aVP_Header, //HPLMN-ODB ::= + UInt32 aVP_Data + } + + type record Regional_Subscription_Zone_Code_AVP { //ref: 7.3.52 + AVP_Header aVP_Header, //Regional-Subscription-Zone-Code ::= + octetstring aVP_Data + } + + type record Access_Restriction_Data_AVP { //ref: 7.3.31 + AVP_Header aVP_Header, //Access-Restriction-Data ::= + UInt32 aVP_Data + } + + type record APN_OI_Replacement_AVP { //ref: 7.3.32 + AVP_Header aVP_Header, //APN-OI-Replacement ::= + UTF8String aVP_Data + } + + type record GMLC_Number_AVP { //ref: 7.3.85 + AVP_Header aVP_Header, //GMLC-Number ::= + octetstring aVP_Data + } + + type record SS_Code_AVP { //ref: 7.3.87 + AVP_Header aVP_Header, //SS-Code ::= + octetstring aVP_Data + } + + type record SS_Status_AVP { //ref: 7.3.88 + AVP_Header aVP_Header, //SS-Status ::= + octetstring aVP_Data + } + + type enumerated Notification_To_UE_User_Code { + NOTIFY_LOCATION_ALLOWED_E (0), + NOTIFYANDVERIFY_LOCATION_ALLOWED_IF_NO_RESPONSE_E (1), + NOTIFYANDVERIFY_LOCATION_NOT_ALLOWED_IF_NO_RESPONSE_E (2), + LOCATION_NOT_ALLOWED_E (3) + } + + type record Notification_To_UE_User_AVP { //ref: 7.3.89 + AVP_Header aVP_Header, //Notification-To-UE-User ::= + Notification_To_UE_User_Code notification_To_UE_User_Code + } + + type record External_Client_AVP { //ref: 7.3.90 + AVP_Header aVP_Header, //External-Client ::= > + Client_Identity_AVP client_Identity, + GMLC_Restriction_AVP gMLC_Restriction optional, + Notification_To_UE_User_AVP notification_To_UE_User optional, + set of AVP_Type aVP_Type optional + } + + type record Client_Identity_AVP { //ref: 7.3.91 + AVP_Header aVP_Header, //Client-Identity ::= + octetstring aVP_Data + } + + type enumerated GMLC_Restriction_Code { + GMLC_LIST_E (0), + HOME_COUNTRY_E (1) + } + + type record GMLC_Restriction_AVP { //ref: 7.3.92 + AVP_Header aVP_Header, //GMLC-Restriction ::= + GMLC_Restriction_Code gMLC_Restriction_Code + } + + type enumerated PLMN_Client_Code { + GMLC_LIST_E (0), + HOME_COUNTRY_E (1) + } + + type record PLMN_Client_AVP { //ref: 7.3.93 + AVP_Header aVP_Header, //PLMN-Client ::= + PLMN_Client_Code pLMN_Client_Code + } + + type record ServiceTypeIdentity_AVP { //ref: 7.3.95 + AVP_Header aVP_Header, //ServiceTypeIdentity ::= + UInt32 aVP_Data + } + + type record Service_Type_AVP { //ref: 7.3.94 + AVP_Header aVP_Header, //Service-Type ::= + ServiceTypeIdentity_AVP serviceTypeIdentity, + GMLC_Restriction_AVP gMLC_Restriction optional, + Notification_To_UE_User_AVP notification_To_UE_User optional, + set of AVP_Type aVP_Type optional + } + + type record LCS_PrivacyException_AVP { //ref: 7.3.86 + AVP_Header aVP_Header, //LCS-PrivacyException ::= + SS_Code_AVP sS_Code optional, + SS_Status_AVP sS_Status optional, + Notification_To_UE_User_AVP notification_To_UE_User optional, + set of External_Client_AVP external_Client optional, + set of PLMN_Client_AVP pLMN_Client optional, + set of Service_Type_AVP service_Type optional, + set of AVP_Type aVP_Type optional + } + + type record MO_LR_AVP { //ref: 7.3.96 + AVP_Header aVP_Header, //MO-LR ::= + SS_Code_AVP sS_Code optional, + SS_Status_AVP sS_Status optional, + set of AVP_Type aVP_Type optional + } + + type record LCS_Info_AVP { //ref: 7.3.32 + AVP_Header aVP_Header, //LCS-Info ::= + set of GMLC_Number_AVP gMLC_Number optional, + set of LCS_PrivacyException_AVP lCS_PrivacyException optional, + set of MO_LR_AVP mO_LR optional, + set of AVP_Type aVP_Type optional + } + + type record TS_Code_AVP { //ref: 7.3.100 + AVP_Header aVP_Header, //TS-Code ::= + octetstring aVP_Data + } + + type record Teleservice_List_AVP { //ref: 7.3.99 + AVP_Header aVP_Header, //Teleservice-List ::= + set length (1..infinity) of TS_Code_AVP tS_Code, + set of AVP_Type aVP_Type optional + } + + type record Call_Barring_Info_AVP { //ref: 7.3.101 + AVP_Header aVP_Header, //Call-Barring-Info ::= + SS_Code_AVP sS_Code, + SS_Status_AVP sS_Status, + set of AVP_Type aVP_Type optional + } + + type record AMBR_AVP { //ref: 7.3.41 + AVP_Header aVP_Header, //AMBR ::= + Max_Requested_Bandwidth_UL_AVP max_Requested_Bw_Ul,//max_Requested_Bandwidth_UL,//max_Requested_Bw_Ul + Max_Requested_Bandwidth_DL_AVP max_Requested_Bw_Dl,//max_Requested_Bandwidth_DL,//max_Requested_Bw_Dl + set of AVP_Type aVP_Type optional + } + + type record ThreeGPP_Charging_Char_AVP { //ref: TS 129 601 + AVP_Header aVP_Header, //3GPP-Charging-Characteristics ::= + octetstring aVP_Data + } + + type enumerated All_APN_Conf_Included_Id_Code { + All_APN_CONFIGURATIONS_INCLUDED_E (0), + MODIFIED_ADDED_APN_CONFIGURATIONS_INCLUDED_E (1) + } + + type record All_APN_Conf_Included_Id_AVP { //ref: 7.3.33 + AVP_Header aVP_Header, //All-APN-Configurations-Included-Indicator ::= + All_APN_Conf_Included_Id_Code all_APN_Conf_Included_Indicator + } + + type record APN_Configuration_Profile_AVP { //ref: 7.3.34 + AVP_Header aVP_Header, //APN-Configuration-Profile ::= + Context_Identifier_AVP context_Identifier, + All_APN_Conf_Included_Id_AVP all_APN_Conf_Included_Id, + set length (1 .. infinity) of APN_Configuration_AVP aPN_Configuration, + set of AVP_Type aVP_Type optional + } + + type enumerated PDN_Type_Code { + IPv4_E (0), + IPv6_E (1), + IPv4v6_E (2), + IPv4_OR_IPv6_E (3) + } + + type record PDN_Type_AVP { //ref: 7.3.62 + AVP_Header aVP_Header, //PDN-Type ::= + PDN_Type_Code pDN_Type_Code + } + + type record EPS_Subscribed_QoS_Profile_AVP { //ref: 7.3.37 + AVP_Header aVP_Header, //EPS-Subscribed-QoS-Profile ::= + QoS_Class_Identifier_AVP qoS_Class_Identifier, + Allocation_Retention_Priority_AVP allocation_Retention_Priority, + set of AVP_Type aVP_Type optional + } + + type enumerated VPLMN_Dynamic_Address_Allowed_Code { + NOTALLOWED_E (0), + ALLOWED_E (1) + } + + type record VPLMN_Dynamic_Address_Allowed_AVP { //ref: 7.3.38 + AVP_Header aVP_Header, //VPLMN-Dynamic-Address-Allowed ::= + VPLMN_Dynamic_Address_Allowed_Code vPLMN_Dynamic_Address_Allowed + } + + type enumerated PDN_GW_Allocation_Type_Code { + STATIC_E (0), + DYNAMIC_E (1) + } + + type record PDN_GW_Allocation_Type_AVP { //ref: 7.3.44 + AVP_Header aVP_Header, //PDN-GW-Allocation-Type ::= + PDN_GW_Allocation_Type_Code pDN_GW_Allocation_Type + } + + type enumerated SIPTO_Permission_Code { + SIPTO_ALLOWED_E (0), + SIPTO_NOTALLOWED_E (1) + } + + type record SIPTO_Permission_AVP { //ref: 7.3.135 + AVP_Header aVP_Header, //SIPTO-Permission ::= + SIPTO_Permission_Code sIPTO_Permission + } + + type enumerated LIPA_Permission_Code { + LIPA_PROHIBITED_E (0), + LIPA_ONLY_E (1), + LIPA_CONDITIONAL_E (2) + } + + type record LIPA_Permission_AVP { //ref: 7.3.133 + AVP_Header aVP_Header, //LIPA-Permission ::= + LIPA_Permission_Code lIPA_Permission + } + + type record APN_Configuration_AVP { //ref: 7.3.35 + AVP_Header aVP_Header, //APN-Configuration ::= + Context_Identifier_AVP context_Identifier, + set length (2) of Served_Party_IP_Address_AVP served_Party optional, + PDN_Type_AVP pDN_Type, + Service_Selection_AVP service_Selection, + EPS_Subscribed_QoS_Profile_AVP ePS_Subscribed_QoS_Profile optional, + VPLMN_Dynamic_Address_Allowed_AVP vPLMN_Dynamic_Address_Allowed optional, + MIP6_Agent_Info_AVP mIP6_Agent_Info optional, + Visited_Network_Identifier_AVP visited_Network_Identifier optional, + PDN_GW_Allocation_Type_AVP pDN_GW_Allocation_Type optional, + ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, + AMBR_AVP aMBR optional, + set of Specific_APN_Info_AVP specific_APN_Info optional, + APN_OI_Replacement_AVP aPN_OI_Replacement optional, + SIPTO_Permission_AVP sIPTO_Permission optional, + LIPA_Permission_AVP lIPA_Permission optional, + set of AVP_Type aVP_Type optional + } + + type record RAT_Freq_Sel_Priority_ID_AVP { //ref: 7.3.46 + AVP_Header aVP_Header, //PRAT-Frequency-Selection-Priority-ID ::= + UInt32 aVP_Data + } + + type enumerated Trace_Depth_Code { + MINIMUM_E (0), + MEDIUM_E (1), + MAXIMUM_E (2), + MINIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (3), + MEDIUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (4), + MAXIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (5) + } + + type record Trace_Depth_AVP { //ref: 7.3.67 + AVP_Header aVP_Header, //Trace-Depth ::= + Trace_Depth_Code trace_Depth + } + + type record Trace_NE_Type_List_AVP { //ref: 7.3.68 + AVP_Header aVP_Header, //Trace-NE-Type-List ::= + octetstring aVP_Data + } + + type record Trace_Interface_List_AVP { //ref: 7.3.69 + AVP_Header aVP_Header, //Trace-Interface-List ::= + octetstring aVP_Data + } + + type record Trace_Event_List_AVP { //ref: 7.3.70 + AVP_Header aVP_Header, //Trace-Event-List ::= + octetstring aVP_Data + } + + type record OMC_Id_AVP { //ref: 7.3.71 + AVP_Header aVP_Header, //OMC-Id ::= + octetstring aVP_Data + } + + type record Trace_Collection_Entity_AVP { //ref: 7.3.98 + AVP_Header aVP_Header, //Trace-Collection-Entitys ::= + Address aVP_Data + } + + type enumerated Job_Type_Code { + IMMEDIATE_MDT_ONLY_E (0), + LOGGED_MDT_ONLY_E (1), + TRACE_ONLY_E (2), + IMMEDIATE_MDT_AND_TRACE_E (3), + RLF_REPORTS_ONLY_E (4), + RCEF_REPORTS_ONLY_E (5) + } + + type record Job_Type_AVP { //ref: 7.3.137 - TS 132 422 5.9a + AVP_Header aVP_Header, //Job-Type ::= + Job_Type_Code job_Type + } + + type record Cell_Global_Identity_AVP { //ref: 7.3.119 + AVP_Header aVP_Header, //Cell-Global-Identity ::= + octetstring aVP_Data + } + + type record E_UTRAN_Cell_Gl_Identity_AVP { //ref: 7.3.117 + AVP_Header aVP_Header, //E-UTRAN-Cell-Global-Identity ::= + octetstring aVP_Data + } + + type record Routing_Area_Identity_AVP { //ref: 7.3.120 + AVP_Header aVP_Header, //Routing-Area-Identity ::= + octetstring aVP_Data + } + + type record Location_Area_Identity_AVP { //ref: 7.3.121 + AVP_Header aVP_Header, //Location-Area-Identity ::= + octetstring aVP_Data + } + + type record Tracking_Area_Identity_AVP { //ref: 7.3.118 + AVP_Header aVP_Header, //Tracking-Area-Identity::= + octetstring aVP_Data + } + + type record Area_Scope_AVP { //ref: 7.3.138 - TS 132 422 5.10.2 + AVP_Header aVP_Header, //Area-Scope ::= + set of Cell_Global_Identity_AVP cell_Global_Identity optional, + set of E_UTRAN_Cell_Gl_Identity_AVP e_UTRAN_Cell_Global_Identity optional, + set of Routing_Area_Identity_AVP routing_Area_Identity optional, + set of Location_Area_Identity_AVP location_Area_Identity optional, + set of Tracking_Area_Identity_AVP tracking_Area_Identity optional, + set of AVP_Type aVP_Type optional + } + + type record List_Of_Measurements_AVP { //ref: 7.3.139 + AVP_Header aVP_Header, //List-Of-Measurements ::= + UInt32 aVP_Data + } + + type record Reporting_Trigger_AVP { //ref: 7.3.140 + AVP_Header aVP_Header, //Reporting-Trigger ::= + UInt32 aVP_Data + } + + type enumerated Report_Interval_Code { + T_250ms_E ( 0), + T_500ms_E ( 1), + T_1000ms_E ( 2), + T_2000ms_E ( 3), + T_3000ms_E ( 4), + T_4000ms_E ( 5), + T_6000ms_E ( 6), + T_8000ms_E ( 7), + T_12000ms_E ( 8), + T_16000ms_E ( 9), + T_20000ms_E (10), + T_24000ms_E (11), + T_28000ms_E (12), + T_32000ms_E (13), + T_64000ms_E (14), + T_120ms_E (15), + T_240ms_E (16), + T_480ms_E (17), + T_640ms_E (18), + T_1024ms_E (19), + T_2048ms_E (20), + T_5120ms_E (21), + T_10240ms_E (22), + T_60000ms_E (23), // 1 min + T_360000ms_E (24), // 6 min + T_720000ms_E (25), // 12 min + T_1800000ms_E (26), // 30 min + T_3600000ms_E (27) // 60 min + } + + type record Report_Interval_AVP { //ref: 7.3.141 - TS 132 422 5.10.5 + AVP_Header aVP_Header, //Report-Interval ::= + Report_Interval_Code report_Interval + } + + type enumerated Report_Amount_Code { + N_1_E (0), + N_2_E (1), + N_4_E (2), + N_8_E (3), + N_16_E (4), + N_32_E (5), + N_64_E (6), + N_INFINITY_E (7) + } + + type record Report_Amount_AVP { //ref: 7.3.142 - TS 132 422 5.10.6 + AVP_Header aVP_Header, //Report-Amount ::= + Report_Amount_Code report_Amount + } + + type record Event_Threshold_RSRP_AVP { //ref: 7.3.143 - TS 132 422 5.10.7 + AVP_Header aVP_Header, //Event-Threshold-RSRP ::= + UInt32 aVP_Data + } + + type record Event_Threshold_RSRQ_AVP { //ref: 7.3.144 - TS 132 422 5.10.7a + AVP_Header aVP_Header, //Event-Threshold-RSRQ ::= + UInt32 aVP_Data + } + + type enumerated Logging_Interval_Code { + T_1dot28_E (0), + T_2dot56_E (1), + T_5dot12_E (2), + T_10dot24_E (3), + T_20dot48_E (4), + T_30dot72_E (5), + T_40dot96_E (6), + T_61dot44_E (7) + } + + type record Logging_Interval_AVP { //ref: 7.3.145 - TS 132 422 5.10.8 + AVP_Header aVP_Header, //Logging-Interval ::= + Logging_Interval_Code logging_Interval + } + + type enumerated Logging_Duration_Code { + T_600sec_E (0), + T_1200sec_E (1), + T_2400sec_E (2), + T_3600sec_E (3), + T_5400sec_E (4), + T_7200sec_E (5) + } + + type record Logging_Duration_AVP { //ref: 7.3.146 - TS 132 422 5.10.9 + AVP_Header aVP_Header, //Logging-Duration ::= + Logging_Duration_Code logging_Duration + } + + type record MDT_Configuration_AVP { //ref: 7.3.136 + AVP_Header aVP_Header, //MDT-Configuration ::= + Job_Type_AVP job_Type, + Area_Scope_AVP area_Scope optional, + List_Of_Measurements_AVP list_Of_Measurements optional, + Reporting_Trigger_AVP reporting_Trigger optional, + Report_Interval_AVP report_Interval optional, + Report_Amount_AVP report_Amount optional, + Event_Threshold_RSRP_AVP event_Threshold_RSRP optional, + Event_Threshold_RSRQ_AVP event_Threshold_RSRQ optional, + Logging_Interval_AVP logging_Interval optional, + Logging_Duration_AVP logging_Duration optional, + set of AVP_Type aVP_Type optional + } + + type record Trace_Data_AVP { //ref: 7.3.63 + AVP_Header aVP_Header, //Trace-Data ::= + Trace_Reference_AVP trace_Reference, + Trace_Depth_AVP trace_Depth, + Trace_NE_Type_List_AVP trace_NE_Type_List, + Trace_Interface_List_AVP trace_Interface_List optional, + Trace_Event_List_AVP trace_Event_List, + OMC_Id_AVP oMC_Id optional, + Trace_Collection_Entity_AVP trace_Collection_Entity, + MDT_Configuration_AVP mDT_Configuration optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Complete_DL_Included_Indicator_Code { + All_PDP_CONTEXTS_INCLUDED_E (0), + MODIFIED_ADDED_PDP_CONTEXTS_INCLUDED_E (1) + } + + type record Complete_DL_Included_Indicator_AVP { //ref: 7.3.73 + AVP_Header aVP_Header, //Complete-Data-List-Included-Indicator ::= + Complete_DL_Included_Indicator_Code complete_DL_Included_Indicator + } + + type record PDP_Type_AVP { //ref: 7.3.75 + AVP_Header aVP_Header, //PDP-Type ::= + octetstring aVP_Data + } + + type record QoS_Subscribed_AVP { //ref: 7.3.77 + AVP_Header aVP_Header, //QoS-Subscribed ::= + octetstring aVP_Data + } + + type record Ext_PDP_Type_AVP { //ref: 7.3.75A + AVP_Header aVP_Header, //Ext-PDP-Type ::= + octetstring aVP_Data + } + + type record Ext_PDP_Address_AVP { //ref: 7.3.129 + AVP_Header aVP_Header, //Ext-PDP-Address ::= + Address aVP_Data + } + + type record PDP_Context_AVP { //ref: 7.3.74 + AVP_Header aVP_Header, //PDP-Context ::= + Context_Identifier_AVP context_Identifier, + PDP_Type_AVP pDP_Type, + PDP_Address_AVP pDP_Address optional, + QoS_Subscribed_AVP qoS_Subscribed, + VPLMN_Dynamic_Address_Allowed_AVP vPLMN_Dynamic_Address_Allowed optional, + Service_Selection_AVP service_Selection, + ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, + Ext_PDP_Type_AVP ext_PDP_Type optional, + Ext_PDP_Address_AVP ext_PDP_Address optional, + AMBR_AVP aMBR optional, + SIPTO_Permission_AVP sIPTO_Permission optional, + LIPA_Permission_AVP lIPA_Permission optional, + set of AVP_Type aVP_Type optional + } + + type record GPRS_Subscription_Data_AVP { //ref: 7.3.72 + AVP_Header aVP_Header, //GPRS-Subscription-Data ::= + Complete_DL_Included_Indicator_AVP complete_Data_List_Included_Indicator, + set length (1..50) of PDP_Context_AVP pDP_Context, + set of AVP_Type aVP_Type optional + } + +// type record CSG_Id_AVP { //ref: 7.3.79 +// AVP_Header aVP_Header, //CSG-Id ::= +// UInt32 aVP_Data +// } + + type record Expiration_Date_AVP { //ref: 7.3.80 + AVP_Header aVP_Header, //Expiration-Date ::= + Time aVP_Data + } + + type record CSG_Subscription_Data_AVP { //ref: 7.3.78 + AVP_Header aVP_Header, //CSG-Subscription-Data ::= + CSG_Id_AVP cSG_Id, + Expiration_Date_AVP expiration_Date optional, + set of Service_Selection_AVP service_Selection optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Roaming_Rest_Unsupp_Feature_Code { + ROAMING_RESTRICTED_DUE_TO_UNSUPPORTED_FEATURE_E (0) + } + + type record Roaming_Rest_Unsupp_Feature_AVP { //ref: 7.3.81 + AVP_Header aVP_Header, //Roaming-Restricted-Due-To-Unsupported-Feature ::= + Roaming_Rest_Unsupp_Feature_Code roaming_Restricted_Due_To_Unsupported_Feature + } + + type record RAU_TAU_Timer_AVP { //ref: 7.3.134 + AVP_Header aVP_Header, //Subscribed-Periodic-RAU-TAU-Timer ::= + UInt32 aVP_Data + } + + type record MPS_Priority_AVP { //ref: 7.3.131 + AVP_Header aVP_Header, //MPS-Priority ::= + UInt32 aVP_Data + } + + type enumerated VPLMN_LIPA_Allowed_Code { + LIPA_NOTALLOWED_E (0), + LIPA_ALLOWED_E (1) + } + + type record VPLMN_LIPA_Allowed_AVP { //ref: 7.3.132 + AVP_Header aVP_Header, //VPLMN-LIPA-Allowed ::= + VPLMN_LIPA_Allowed_Code vPLMN_LIPA_Allowed + } + + type enumerated Relay_Node_Indicator_Code { + NOT_RELAY_NODE_E (0), + RELAY_NODE_E (1) + } + + type record Relay_Node_Indicator_AVP { //ref: 7.3.147 + AVP_Header aVP_Header, //Relay-Node-Indicator ::= + Relay_Node_Indicator_Code relay_Node_Indicator + } + + type enumerated MDT_User_Consent_Code { + CONSENT_NOT_GIVEN_E (0), + CONSENT_GIVEN_E (1) + } + + type record MDT_User_Consent_AVP { //ref: 7.3.148 + AVP_Header aVP_Header, //MDT-User-Consent ::= + MDT_User_Consent_Code mDT_User_Consent + } + + type record Subscription_Data_AVP { //ref: 7.3.2 + AVP_Header aVP_Header, //Subscription-Data ::= + Subscriber_Status_AVP subscriber_Status optional, + MSISDN_AVP mSISDN optional, + STN_SR_AVP sTN_SR optional, + ICS_Indicator_AVP iCS_Indicator optional, + Network_Access_Mode_AVP network_Access_Mode optional, + Operator_Determined_Barring_AVP operator_Determined_Barring optional, + HPLMN_ODB_AVP hPLMN_ODB optional, + set length (10) of Regional_Subscription_Zone_Code_AVP zone_Code optional, + Access_Restriction_Data_AVP access_Restriction_Data optional, + APN_OI_Replacement_AVP aPN_OI_Replacement optional, + LCS_Info_AVP lCS_Info optional, + Teleservice_List_AVP teleservice_List optional, + set of Call_Barring_Info_AVP call_Barring_Info optional, + ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, + AMBR_AVP aMBR optional, + APN_Configuration_Profile_AVP aPN_Configuration_Profile optional, + RAT_Freq_Sel_Priority_ID_AVP rAT_Freq_Sel_Priority_ID optional, + Trace_Data_AVP trace_Data optional, + GPRS_Subscription_Data_AVP gPRS_Subscription_Data optional, + CSG_Subscription_Data_AVP cSG_Subscription_Data optional, + Roaming_Rest_Unsupp_Feature_AVP roaming_Rest_Unsupp_Feature optional, + RAU_TAU_Timer_AVP subscribed_Perio_RAUTAU_Timer optional, + MPS_Priority_AVP mPS_Priority optional, + VPLMN_LIPA_Allowed_AVP vPLMN_LIPA_Allowed optional, + Relay_Node_Indicator_AVP relay_Node_Indicator optional, + MDT_User_Consent_AVP mDT_User_Consent optional, + set of AVP_Type aVP_Type optional + } + + type record Number_Of_Requested_Vectors_AVP { //ref: 7.3.14 + AVP_Header aVP_Header, //Number-Of-Requested-Vectors ::= + UInt32 aVP_Data + } + + type record Immediate_Response_Preferred_AVP { //ref: 7.3.16 + AVP_Header aVP_Header, //Immediate-Response-Preferred ::= + UInt32 aVP_Data + } + + type record Re_synchronization_Info_AVP { //ref: 7.3.15 + AVP_Header aVP_Header, //Re-synchronization-Info ::= + octetstring aVP_Data + } + + type record Req_EUTRAN_Auth_Info_AVP { //ref: 7.3.11 + AVP_Header aVP_Header, //Requested-EUTRAN-Authentication-Info ::= + Number_Of_Requested_Vectors_AVP number_Of_Requested_Vectors optional, + Immediate_Response_Preferred_AVP immediate_Response_Preferred optional, + Re_synchronization_Info_AVP re_synchronization_Info optional, + set of AVP_Type aVP_Type optional + } + + type record Req_UTRAN_GERAN_Auth_Info_AVP { //ref: 7.3.12 + AVP_Header aVP_Header, //Requested-EUTRAN-GERAN-Authentication-Info ::= + Number_Of_Requested_Vectors_AVP number_Of_Requested_Vectors optional, + Immediate_Response_Preferred_AVP immediate_Response_Preferred optional, + Re_synchronization_Info_AVP re_synchronization_Info optional, + set of AVP_Type aVP_Type optional + } + + type record Item_Number_AVP { //ref: 7.3.23 + AVP_Header aVP_Header, //Item-Number ::= + UInt32 aVP_Data + } + + type record RAND_AVP { //ref: 7.3.53 + AVP_Header aVP_Header, //RAND ::= + octetstring aVP_Data + } + + type record XRES_AVP { //ref: 7.3.54 + AVP_Header aVP_Header, //XRES ::= + octetstring aVP_Data + } + + type record AUTN_AVP { //ref: 7.3.55 + AVP_Header aVP_Header, //AUTN ::= + octetstring aVP_Data + } + + type record KASME_AVP { //ref: 7.3.56 + AVP_Header aVP_Header, //KASME ::= + octetstring aVP_Data + } + + type record E_UTRAN_Vector_AVP { //ref: 7.3.18 + AVP_Header aVP_Header, //E-UTRAN-Vector ::= + Item_Number_AVP item_Number optional, + RAND_AVP rAND, + XRES_AVP xRES, + AUTN_AVP aUTN, + KASME_AVP kASME, + set of AVP_Type aVP_Type optional + } + + type record UTRAN_Vector_AVP { //ref: 7.3.19 + AVP_Header aVP_Header, //UTRAN-Vector ::= + Item_Number_AVP item_Number optional, + RAND_AVP rAND, + XRES_AVP xRES, + AUTN_AVP aUTN, + Confidentiality_Key_AVP confidentiality_Key, + Integrity_Key_AVP integrity_Key, + set of AVP_Type aVP_Type optional + } + + type record SRES_AVP { //ref: 7.3.60 + AVP_Header aVP_Header, //SRES ::= + octetstring aVP_Data + } + + type record Kc_AVP { //ref: 7.3.59 + AVP_Header aVP_Header, //Kc ::= + octetstring aVP_Data + } + + type record GERAN_Vector_AVP { //ref: 7.3.20 + AVP_Header aVP_Header, //GERAN-Vector ::= + Item_Number_AVP item_Number optional, + RAND_AVP rAND, + SRES_AVP sRES, + Kc_AVP kc, + set of AVP_Type aVP_Type optional + } + + type record Authentication_Info_AVP { //ref: 7.3.17 + AVP_Header aVP_Header, //Authentication-Info ::= + set of E_UTRAN_Vector_AVP e_UTRAN_Vector optional, + set of UTRAN_Vector_AVP uTRAN_Vector optional, + set of GERAN_Vector_AVP gERAN_Vector optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Cancellation_Type_Code { + MME_UPDATE_PROCEDURE_E (0), + SGSN_UPDATE_PROCEDURE_E (1), + SUBSCRIPTION_WITHDRAWAL_E (2), + UPDATE_PROCEDURE_IWF_E (3), + INITIAL_ATTACH_PROCEDURE_E (4) + } + + type record Cancellation_Type_AVP { //ref: 7.3.24 + AVP_Header aVP_Header, //Cancellation-Type ::= + Cancellation_Type_Code cancellation_Type + } + + type record CLR_Flags_AVP { //ref: 7.3.152 + AVP_Header aVP_Header, //CLR-Flags ::= + UInt32 aVP_Data + } + + type record IDR_Flags_AVP { //ref: 7.3.103 + AVP_Header aVP_Header, //IDR-Flags ::= + UInt32 aVP_Data + } + + type record DSR_Flags_AVP { //ref: 7.3.25 + AVP_Header aVP_Header, //DSR-Flags ::= + UInt32 aVP_Data + } + + type record DSA_Flags_AVP { //ref: 7.3.26 + AVP_Header aVP_Header, //DSA-Flags ::= + UInt32 aVP_Data + } + + type record PUER_Flags_AVP { //ref: 7.3.149 + AVP_Header aVP_Header, //PUR-Flags ::= + UInt32 aVP_Data + } + + type record PUEA_Flags_AVP { //ref: 7.3.48 + AVP_Header aVP_Header, //PUA-Flags ::= + UInt32 aVP_Data + } + + type record IDA_Flags_AVP { //ref: 7.3.47 + AVP_Header aVP_Header, //IDA-Flags ::= + UInt32 aVP_Data + } + + type record NOR_Flags_AVP { //ref: 7.3.49 + AVP_Header aVP_Header, //NOR-Flags ::= + UInt32 aVP_Data + } + + type enumerated IMS_Voice_PS_Sessions_Support_Code { + NOT_SUPPORTED_E (0), + SUPPORTED_E (1) + } + + type record IMS_Voice_PS_Sessions_Support_AVP { //ref: 7.3.106 + AVP_Header aVP_Header, //IMS-Voice-Over-PS-Sessions-Supported ::= + IMS_Voice_PS_Sessions_Support_Code iMS_Voice_Over_PS_Sessions_Supported + } + + type record Last_UE_Activity_Time_AVP { //ref: 7.3.108 + AVP_Header aVP_Header, //Last-UE-Activity-Time ::= + Time aVP_Data + } + + type record EPS_User_State_AVP { //ref: 7.3.110 + AVP_Header aVP_Header, //EPS-User-State ::= + MME_User_State_AVP mME_User_State optional, + SGSN_User_State_AVP sGSN_User_State optional, + set of AVP_Type aVP_Type optional + } + + type record EPS_Location_Information_AVP { //ref: 7.3.111 + AVP_Header aVP_Header, //EPS-Location-Information ::= + MME_Location_Information_AVP mME_Location_Information optional, + SGSN_Location_Information_AVP sGSN_Location_Information optional, + set of AVP_Type aVP_Type optional + } + + type record Service_Area_Identity_AVP { //ref: 7.3.122 + AVP_Header aVP_Header, //Service-Area-Identity ::= + octetstring aVP_Data + } + + type record Geographical_Information_AVP { //ref: 7.3.123 + AVP_Header aVP_Header, //Geographical-Information ::= + octetstring aVP_Data + } + + type record Geodetic_Information_AVP { //ref: 7.3.124 + AVP_Header aVP_Header, //Geodetic-Information ::= + octetstring aVP_Data + } + + type enumerated Current_Location_Retrieved_Code { + ACTIVE_LOCATION_RETRIEVAL_E (0) + } + + type record Current_Location_Retrieved_AVP { //ref: 7.3.125 + AVP_Header aVP_Header, //Current-Location-Retrieved ::= + Current_Location_Retrieved_Code current_Location_Retrieved + } + + type record Age_Of_Location_Informations_AVP { //ref: 7.3.126 + AVP_Header aVP_Header, //Age-Of-Location-Information ::= + UInt32 aVP_Data + } + + type enumerated CSG_Access_Mode_Code { + CLOSED_MODE_E (0), + HYBRID_MODE_E (1) + } + + type record CSG_Access_Mode_AVP { //ref: TS 132 299 7.2.46A + AVP_Header aVP_Header, //CSG-Access-Mode ::= + CSG_Access_Mode_Code cSG_Access_Mode + } + + type enumerated CSG_Membership_Indication_Code { + NOT_CSG_MEMBER_E (0), + CSG_MEMBER_E (1) + } + + type record CSG_Membership_Indication_AVP { //ref: TS 132 299 7.2.46B + AVP_Header aVP_Header, //CSG-Membership-Indication ::= + CSG_Membership_Indication_Code cSG_Membership_Indication + } + + type record MME_Location_Information_AVP { //ref: 7.3.115 + AVP_Header aVP_Header, //MME-Location-Information ::= + E_UTRAN_Cell_Gl_Identity_AVP e_UTRAN_Cell_Gl_Identity optional, + Tracking_Area_Identity_AVP tracking_Area_Identity optional, + Geographical_Information_AVP geographical_Information optional, + Geodetic_Information_AVP geodetic_Information optional, + Current_Location_Retrieved_AVP current_Location_Retrieved optional, + Age_Of_Location_Informations_AVP age_Of_Location_Informations optional, + User_CSG_Information_AVP user_CSG_Information optional, + set of AVP_Type aVP_Type optional + } + + type record SGSN_Location_Information_AVP { //ref: 7.3.116 + AVP_Header aVP_Header, //SGSN-Location-Information ::= + Cell_Global_Identity_AVP cell_Global_Identity optional, + Location_Area_Identity_AVP location_Area_Identity optional, + Service_Area_Identity_AVP service_Area_Identity optional, + Routing_Area_Identity_AVP routing_Area_Identity optional, + Geographical_Information_AVP geographical_Information optional, + Geodetic_Information_AVP geodetic_Information optional, + Current_Location_Retrieved_AVP current_Location_Retrieved optional, + Age_Of_Location_Informations_AVP age_Of_Location_Informations optional, + User_CSG_Information_AVP user_CSG_Information optional, + set of AVP_Type aVP_Type optional + } + + type record MME_User_State_AVP { //ref: 7.3.112 + AVP_Header aVP_Header, //MME-User-State ::= + User_State_AVP user_State optional, + set of AVP_Type aVP_Type optional + } + + type record SGSN_User_State_AVP { //ref: 7.3.113 + AVP_Header aVP_Header, //SGSN-User-State ::= + User_State_AVP user_State optional, + set of AVP_Type aVP_Type optional + } + + type enumerated User_State_Code { + DETACHED_E (0), + ATTACHED_NOT_REACHABLE_FOR_PAGING_E (1), + ATTACHED_REACHABLE_FOR_PAGING_E (2), + CONNECTED_NOT_REACHABLE_FOR_PAGING_E (3), + CONNECTED_REACHABLE_FOR_PAGING_E (4), + NETWORK_DETERMINED_NOT_REACHABLE_E (5) + } + + type record User_State_AVP { //ref: 7.3.114 + AVP_Header aVP_Header, //User-State ::= + User_State_Code user_State + } + + type record User_Id_AVP { //ref: 7.3.50 + AVP_Header aVP_Header, //User-Id ::= + UTF8String aVP_Data + } + + type enumerated Alert_Reason_Code { + MME_UPDATE_PROCEDURE_E (0), + SGSN_UPDATE_PROCEDURE_E (1), + SUBSCRIPTION_WITHDRAWAL_E (2), + UPDATE_PROCEDURE_IWF_E (3), + INITIAL_ATTACH_PROCEDURE_E (4) + } + + type record Alert_Reason_AVP { //ref: 7.3.83 + AVP_Header aVP_Header, //Alert-Reason ::= + Alert_Reason_Code alert_Reason + } + + } // End of group TS129_272_AVPs + + } // End of group AVPs + +} with { + encode "DIAMETERCodec"; variant ""; +} // End of LibDiameter_Types_S6a_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..4b5a1deb3b49ee417a8c9cfd1016c2039531cd5e --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn @@ -0,0 +1,292 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter S9 AVP types used by LibDiameter constructs.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new S9 AVP types is ok; + */ +module LibDiameter_Types_S9_AVPs { + + import from LibCommon_BasicTypesAndValues all; + //import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + // import from LibDiameter_Types_RfRo_AVPs all; + + group AVPs{ + group TS129_215_AVPs { + type octetstring DiameterIdentity; // Alias + + type record TDF_Information_AVP { //ref: TS129 212 5.3.78 + AVP_Header aVP_Header, //TDF-Information ::= + TDF_Destination_Realm_AVP tDF_Destination_Realm optional, + TDF_Destination_Host_AVP tDF_Destination_Host optional, + TDF_IP_Address_AVP tDF_IP_Address optional + } + + type record TDF_Destination_Realm_AVP { //ref: TS129 212 5.3.79 + AVP_Header aVP_Header, //TDF-Destination-Realm ::= + DiameterIdentity aVP_Data + } + + type record TDF_Destination_Host_AVP { //ref: TS129 212 5.3.80 + AVP_Header aVP_Header, //TDF-Destination-Host ::= + DiameterIdentity aVP_Data + } + + type record TDF_IP_Address_AVP { //ref: TS129 212 5.3.81 + AVP_Header aVP_Header, //TDF-IP-Address ::= + Address aVP_Data + } + + type enumerated AN_GW_Status_Code { + AN_GW_FAILED_E (0) + } + + type record AN_GW_Status_AVP { //ref: TS129 212 5.3.100 + AVP_Header aVP_Header, //AN-GW-Statush ::= + AN_GW_Status_Code aN_GW_Status + } + + type record ThreeGPP_GGSN_Address_AVP { //ref: TS129 061 table 9a + AVP_Header aVP_Header, //3GPP-GGSN-Address ::= + octetstring aVP_Data + } + + type record ThreeGPP_GGSN_IPv6_Address_AVP { //ref: TS129 061 table 9a + AVP_Header aVP_Header, //3GPP-GGSN-IPv6-Address ::= + octetstring aVP_Data + } + + type record TWAN_Identifier_AVP { //ref: TS129 061 table 9a + AVP_Header aVP_Header, //TWAN-Identifier ::= + octetstring aVP_Data + } + + type record QoS_Rule_Report_AVP { //ref: TS129 212 5a.3.5 + AVP_Header aVP_Header, //QoS-Rule-Report ::= + set of QoS_Rule_Name_AVP qoS_Rule_Name optional, + set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, + PCC_Rule_Status_AVP pCC_Rule_Status optional, + Rule_Failure_Code_AVP rule_Failure_Code optional, + set of AVP_Type aVP_Type optional + } + + type record QoS_Rule_Name_AVP { //ref: TS129 212 5a.3.4 + AVP_Header aVP_Header, //QoS-Rule-Name ::= + octetstring aVP_Data + } + + type record QoS_Rule_Base_Name_AVP { //ref: TS129 212 5a.3.7 + AVP_Header aVP_Header, //QoS-Rule-Base-Name ::= + UTF8String aVP_Data + } + + type record Appl_Detection_Info_AVP { //ref: TS129 212 5.3.91 + AVP_Header aVP_Header, //Application-Detection-Information ::= + TDF_Application_Identifier_AVP tDF_Application_Identifier, + TDF_Application_Instance_Id_AVP tDF_Application_Instance_Id optional, + set of Flow_Information_AVP flow_Information optional, + set of AVP_Type aVP_Type optional + } + + type record TDF_Application_Identifier_AVP { //ref: TS129 212 5.3.77 + AVP_Header aVP_Header, //TDF-Application-Identifier ::= + octetstring aVP_Data + } + + type record TDF_Application_Instance_Id_AVP { //ref: TS129 212 5.3.92 + AVP_Header aVP_Header, //TDF-Application-Instance-Identifier ::= + octetstring aVP_Data + } + + type record HeNB_Local_IP_Address_AVP { //ref: TS129 212 5.3.95 + AVP_Header aVP_Header, //HeNB-Local-IP-Address ::= + Address aVP_Data + } + + type record UE_Local_IP_Address_AVP { //ref: TS129 212 5.3.96 + AVP_Header aVP_Header, //UE-Local-IP-Address ::= + Address aVP_Data + } + + type record UDP_Source_Port_AVP { //ref: TS129 212 5.3.97 + AVP_Header aVP_Header, //UDP-Source-Port ::= + UInt32 aVP_Data + } + + type enumerated Session_Linking_Indicator_Code { + SESSION_LINKING_IMMEDIATE_E (0), + SESSION_LINKING_DEFERRED_E (1) + } + + type record Session_Linking_Indicator_AVP { //ref: TS129 212 5a.3.6 + AVP_Header aVP_Header, //Session-Linking-Indicator ::= + Session_Linking_Indicator_Code session_Linking_Indicator + } + + type record Subses_Decision_Info_AVP { //ref: TS129 215 5.3.1 + AVP_Header aVP_Header, //Subsession-Decision-Info ::= + Subsession_Id_AVP subsession_Id, + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + set of Charging_Rule_Remove_AVP charging_Rule_Remove optional, + set of Charging_Rule_Install_AVP charging_Rule_Install optional, + set of QoS_Rule_Install_AVP qoS_Rule_Install optional, + set of QoS_Rule_Remove_AVP qoS_Rule_Remove optional, + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, + set of Usage_Monitoring_Info_AVP usage_Monitoring_Information optional, + Session_Release_Cause_AVP session_Release_Cause optional, + Bearer_Control_Mode_AVP bearer_Control_Mode optional, + set of Event_Trigger_AVP event_Trigger optional, + Revalidation_Time_AVP revalidation_Time optional, + Online_AVP online optional, + Offline_AVP offline optional, + QoS_Information_AVP qoS_Information optional, + set of AVP_Type aVP_Type optional + } + + type record Subses_Enforcement_Info_AVP { //ref: TS129 215 5.3.2 + AVP_Header aVP_Header, //Subsession-Enforcement-Info ::= + Subsession_Id_AVP subsession_Id, + Subsession_Operation_AVP subsession_Operation optional, + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, + Bearer_Identifier_AVP bearer_Identifier optional, + Bearer_Operation_AVP bearer_Operation optional, + set of Packet_Filter_Info_AVP packet_Filter_Information optional, + Packet_Filter_Operation_AVP packet_Filter_Operation optional, + QoS_Information_AVP qoS_Information optional, + Framed_IP_Address_AVP framed_IP_Address optional, + Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, + set of CoA_Information_AVP coA_Information optional, + Called_Station_Id_AVP called_Station_Id optional, + PDN_Connection_ID_AVP pDN_Connection_ID optional, + Bearer_Usage_AVP bearer_Usage optional, + set of TFT_Packet_Filter_Info_AVP tFT_Packet_Filter_Information optional, + Online_AVP online optional, + Offline_AVP offline optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + set of Charging_Rule_Report_AVP charging_Rule_Report optional, + set of QoS_Rule_Report_AVP qoS_Rule_Report optional, + IP_CAN_Type_AVP iP_CAN_Type optional, + RAT_Type_AVP rat_Type optional, + ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, + ThreeGPP_SGSN_Address_AVP threeGPP_SGSN_Address optional, + ThreeGPP_SGSN_IPv6_Address_AVP threeGPP_SGSN_IPv6_Address optional, + RAI_AVP rAI optional, + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, + User_CSG_Information_AVP user_CSG_Information optional, + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, + Network_Request_Support_AVP network_Request_Support optional, + Routing_Rule_Install_AVP routing_Rule_Install optional, + Routing_Rule_Remove_AVP routing_Rule_Remove optional, + Logical_Access_ID_AVP logical_Access_ID optional, + Physical_Access_ID_AVP physical_Access_ID optional, + set of Usage_Monitoring_Info_AVP usage_Monitoring_Information optional, + Multiple_BBERF_Action_AVP multiple_BBERF_Action optional, + set of Event_Trigger_AVP event_Trigger optional, + Access_Netw_Charging_Addr_AVP access_Network_Charging_Address optional, + set of Access_Netw_Charg_Id_Gx_AVP access_Network_Charging_Id_Gx optional, + Session_Linking_Indicator_AVP session_Linking_Indicator optional, + set of AVP_Type aVP_Type optional + } + + type record Subsession_Id_AVP { //ref: TS129 215 5.3.3 + AVP_Header aVP_Header, //Subsession-Id ::= + UInt32 aVP_Data + } + + type enumerated Subsession_Operation_Code { + TERMINATION_E (0), + ESTABLISHMENT_E (1), + MODIFICATION_E (2) + } + + type record Subsession_Operation_AVP { //ref: TS129 215 5.3.4 + AVP_Header aVP_Header, //Subsession-Operation ::= + Subsession_Operation_Code subsession_Operation + } + + type enumerated Multiple_BBERF_Action_Code { + ESTABLISHMENT_E (0), + TERMINATION_E (1) + } + + type record Multiple_BBERF_Action_AVP { //ref: TS129 215 5.3.6 + AVP_Header aVP_Header, //Multiple-BBERF-Action ::= + Multiple_BBERF_Action_Code multiple_BBERF_Action + } + + type Resource_Allocation_Notification_AVP + Resource_Alloc_Notification_AVP; // Shortened Name - Alias + type Access_Network_Charging_Identifier_Value_AVP + ANw_Charging_Id_Value_AVP; // Shortened Name - Alias + type record QoS_Rule_Install_AVP { //ref: TS129 212 5a.3.1 + AVP_Header aVP_Header, //QoS-Rule-Install ::= + set of QoS_Rule_Definition_AVP qoS_Rule_Definition optional, + set of QoS_Rule_Name_AVP qoS_Rule_Name optional, + set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, + Tunnel_Information_AVP tunnel_Information optional, + ANw_Charging_Id_Value_AVP acc_Net_Charging_Id_Val optional, + Resource_Alloc_Notification_AVP resource_Alloc_Notification optional, + Rule_Activation_Time_AVP rule_Activation_Time optional, + Rule_DeActivation_Time_AVP rule_DeActivation_Time optional, + ThreeGPP_GGSN_Address_AVP threeGPP_GGSN_Address optional, + ThreeGPP_GGSN_IPv6_Address_AVP threeGPP_GGSN_IPv6_Address optional, + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, + UDP_Source_Port_AVP uDP_Source_Port optional, + set of AVP_Type aVP_Type optional + } + + type record QoS_Rule_Remove_AVP { //ref: TS129 212 5a.3.2 + AVP_Header aVP_Header, //QoS-Rule-Remove ::= + set of QoS_Rule_Name_AVP qoS_Rule_Name optional, + set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, + set of AVP_Type aVP_Type optional + } + + type record QoS_Rule_Definition_AVP { //ref: TS129 212 5a.3.3 + AVP_Header aVP_Header, //QoS-Rule-Definition ::= + QoS_Rule_Name_AVP qoS_Rule_Name, + set of Flow_Information_AVP flow_Information optional, + QoS_Information_AVP qoS_Information optional, + Precedence_AVP precedence optional, + set of Required_Access_Info_AVP required_Access_Info optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Required_Access_Info_Code { + USER_LOCATION_E (0), + MS_TIME_ZONE_E (1) } + + type record Required_Access_Info_AVP { //ref: TS129 214 5.3.34 + AVP_Header aVP_Header, //Required-Access-Info ::= + Required_Access_Info_Code required_Access_Info + } + }//end of group TS129_215_AVPs + }//end group AVPs + + group ShorterNames { + type Packet_Filter_Information_AVP Packet_Filter_Info_AVP; // Shortened Name - Alias + type AN_GW_Address_AVP AN_GW_Addr_AVP; // Shortened Name - Alias + type TFT_Packet_Filter_Information_AVP TFT_Packet_Filter_Info_AVP; // Shortened Name - Alias + type Access_Network_Charging_Address_AVP + Access_Netw_Charging_Addr_AVP; // Shortened Name - Alias + type Access_Network_Charging_Identifier_Gx_AVP + Access_Netw_Charg_Id_Gx_AVP; // Shortened Name - Alias + type Multiple_Services_Credit_Control_AVP + Multiple_Services_CC_AVP; // Shortened Name - Alias + type Usage_Monitoring_Information_AVP Usage_Monitoring_Info_AVP; // Shortened Name - Alias + type CSG_Information_Reporting_AVP CSG_Info_Reporting_AVP; // Shortened Name - Alias + } + +} with { + encode "DIAMETERCodec"; variant ""; +} //end module LibDiameter_Types_S9_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..bdfc52f4adb42d9b38de9abde9e041e5ec2bbfce --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn @@ -0,0 +1,29 @@ +/** + * @author STF 544 + * @version $Id$ + * @desc This module defines Diameter Cx and Dx AVP types used by LibDiameter constructs.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new ShDh AVP types is ok; + */ +module LibDiameter_Types_ShDh_AVPs { + + // LibCommmon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + // LibDiameter + //import from LibDiameter_TypesAndValues all; + //import from LibDiameter_Types_Base_AVPs all; + // import from LibDiameter_Types_Gx_AVPs all; + // import from LibDiameter_Types_Rx_AVPs all; + // import from LibDiameter_Types_S6a_AVPs all; + // import from LibDiameter_Types_S9_AVPs all; + // import from LibDiameter_Types_CxDx_AVPs all; + // import from LibDiameter_Types_RfRo_AVPs all; + +} with { + encode "DIAMETERCodec"; variant ""; +} // End of LibDiameter_Types_ShDh_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_http/module.mk b/ttcn/patch_lib_http/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..c092268d4f1125b3d6579319f40f0a793de34800 --- /dev/null +++ b/ttcn/patch_lib_http/module.mk @@ -0,0 +1,6 @@ +sources := \ + ttcn/LibHttp_XmlMessageBodyTypes.ttcn \ + ttcn/LibHttp_XmlTemplates.ttcn \ + ttcn/LibHttp_JsonMessageBodyTypes.ttcn \ + ttcn/LibHttp_JsonTemplates.ttcn \ + diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..2902554378b4e92dccfb00156c362b4e7db44fca --- /dev/null +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -0,0 +1,30 @@ +module LibHttp_JsonMessageBodyTypes { + + // LibNg112 + import from LibNg112_DequeueRegistration all; + + // Lib3pp + import from Etsi_ts_129514_TypesAndValues all; + + /** + * This file volontary contains a trivial declaration of the type JsonBody. + * In accordance with your TTCN-3 module LibHttp_JSONTypes, you have to change the JsonBody typing. + */ + // TODO Add here your custom RFCs import + + type union JsonBody { + // TODO Add here your custom variants + DequeueRegistrationRequest dequeueRegistrationRequest, + DequeueRegistrationResponse dequeueRegistrationResponse, + AppSessionContextReqData appSessionContextReqData, // ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.3-1: Definition of type AppSessionContextReqData + AppSessionContextRespData appSessionContextRespData, // ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.4 Type AppSessionContextRespData + EventsNotification eventsNotification, // ETSI TS 129 514 V16.21.0 (2025-01) Table 5.6.2.9-1: Definition of type EventsNotification + universal charstring raw + } with { + variant "" + } + +} with { + encode "JSON"; + variant "" +} // End of module LibHttp_JsonMessageBodyTypes diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..84053ebeac7ca82c949f040ab02b7dc0e173fc50 --- /dev/null +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -0,0 +1,182 @@ +/** + * @author ETSI / STF569 + * @version $URL$ + * $ID:$ + * @desc This module provides the custom templates for ITS HTTP based protocols. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + */ +module LibHttp_JsonTemplates { + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_JsonMessageBodyTypes all; + + // LibJson + import from Json all; + + // LibNg112 + import from LibNg112_DequeueRegistration all; + import from LibNg112_SubscriptionPayloads all; + + // Lib3pp + import from Etsi_ts_129514_TypesAndValues all; + + // TODO Add here your custom RFCs import + + template (value) JsonBody m_json_body_raw( + in template (value) charstring p_raw + ) := { + raw := p_raw + } // End of template m_json_body_raw + + template (present) JsonBody mw_json_body_raw( + template (present) charstring p_raw := ? + ) := { + raw := p_raw + } // End of template mw_json_body_raw + + group dequeue_register { + + template (value) LibHttp_JsonMessageBodyTypes.JsonBody m_body_json_dequeue_registration_request( + in template (value) DequeueRegistrationRequest p_dequeue_registration_request + ) := { + dequeueRegistrationRequest := p_dequeue_registration_request + } // End of template m_dequeue_registration_request + + template (present) LibHttp_JsonMessageBodyTypes.JsonBody mw_body_json_dequeue_registration_request( + template (present) DequeueRegistrationRequest p_dequeue_registration_request := ? + ) := { + dequeueRegistrationRequest := p_dequeue_registration_request + } // End of template mw_dequeue_registration_request + + template (present) LibHttp_JsonMessageBodyTypes.JsonBody mw_body_json_dequeue_registration_response( + template (present) DequeueRegistrationResponse p_dequeue_registration_response := ? + ) := { + dequeueRegistrationResponse := p_dequeue_registration_response + } // End of template m_dequeue_registration_response + + template (omit) DequeueRegistrationRequest m_dequeue_registration_request( + in template (value) Json.String p_DequeueRegistrationQueueUri, + in template (value) Json.String p_DequeueRegistrationDequeuer, + in template (value) Json.Integer p_DequeueRegistrationExpirationTime, + in template (omit) Json.Integer p_DequeueRegistrationDequeuePreference := omit + ) := { + DequeueRegistrationQueueUri := p_DequeueRegistrationQueueUri, + DequeueRegistrationDequeuer := p_DequeueRegistrationDequeuer, + DequeueRegistrationExpirationTime := p_DequeueRegistrationExpirationTime, + DequeueRegistrationDequeuePreference := p_DequeueRegistrationDequeuePreference + } // End of template m_dequeue_registration_request + + template (present) DequeueRegistrationRequest mw_dequeue_registration_request( + template (present) Json.String p_DequeueRegistrationQueueUri := ?, + template (present) Json.String p_DequeueRegistrationDequeuer := ?, + template (present) Json.Integer p_DequeueRegistrationExpirationTime := ?, + template Json.Integer p_DequeueRegistrationDequeuePreference := * + ) := { + DequeueRegistrationQueueUri := p_DequeueRegistrationQueueUri, + DequeueRegistrationDequeuer := p_DequeueRegistrationDequeuer, + DequeueRegistrationExpirationTime := p_DequeueRegistrationExpirationTime, + DequeueRegistrationDequeuePreference := p_DequeueRegistrationDequeuePreference + } // End of template mw_dequeue_registration_request + + template (omit) DequeueRegistrationRequest m_dequeue_deregistration_request( + in template (value) Json.String p_DequeueRegistrationQueueUri, + in template (value) Json.String p_DequeueRegistrationDequeuer, + in template (omit) Json.Integer p_DequeueRegistrationDequeuePreference := omit + ) := { + DequeueRegistrationQueueUri := p_DequeueRegistrationQueueUri, + DequeueRegistrationDequeuer := p_DequeueRegistrationDequeuer, + DequeueRegistrationExpirationTime := 0, + DequeueRegistrationDequeuePreference := p_DequeueRegistrationDequeuePreference + } // End of template m_dequeue_deregistration_request + + template (present) DequeueRegistrationRequest mw_dequeue_deregistration_request( + template (present) Json.String p_DequeueRegistrationQueueUri := ?, + template (present) Json.String p_DequeueRegistrationDequeuer := ?, + template Json.Integer p_DequeueRegistrationDequeuePreference := * + ) := { + DequeueRegistrationQueueUri := p_DequeueRegistrationQueueUri, + DequeueRegistrationDequeuer := p_DequeueRegistrationDequeuer, + DequeueRegistrationExpirationTime := 0, + DequeueRegistrationDequeuePreference := p_DequeueRegistrationDequeuePreference + } // End of template mw_dequeue_registration_request + + template (value) DequeueRegistrationResponse m_dequeue_response_ok( + in template (value) Json.Integer p_DequeueRegistrationExpirationTime + ) := { + DequeueRegistrationExpirationTime := p_DequeueRegistrationExpirationTime, + DequeueRegistrationStatusCode := 0 + + } // End of template m_dequeue_registration_request + + template (present) DequeueRegistrationResponse mw_dequeue_response_ok( + template (present) Json.Integer p_DequeueRegistrationExpirationTime := ? + ) := { + DequeueRegistrationExpirationTime := p_DequeueRegistrationExpirationTime, + DequeueRegistrationStatusCode := ? + } // End of template mw_dequeue_registration_request + + } // End of group dequeue_register + + group three_gpp { + + template (value) LibHttp_JsonMessageBodyTypes.JsonBody m_body_json_app_session_context_req_data( + in template (value) AppSessionContextReqData p_app_session_context_req_data + ) := { + appSessionContextReqData := p_app_session_context_req_data + } // End of template m_body_json_app_session_context_req_data + + template (present) LibHttp_JsonMessageBodyTypes.JsonBody mw_body_json_app_session_context_req_data( + template (present) AppSessionContextReqData p_app_session_context_req_data := ? + ) := { + appSessionContextReqData := p_app_session_context_req_data + } // End of template mw_body_json_app_session_context_req_data + + template (value) LibHttp_JsonMessageBodyTypes.JsonBody m_body_json_app_session_context_resp_data( + in template (value) AppSessionContextRespData p_app_session_context_resp_data + ) := { + appSessionContextRespData := p_app_session_context_resp_data + } // End of template m_body_json_app_session_context_resp_data + + template (present) LibHttp_JsonMessageBodyTypes.JsonBody mw_body_json_app_session_context_resp_data( + template (present) AppSessionContextRespData p_app_session_context_resp_data := ? + ) := { + appSessionContextRespData := p_app_session_context_resp_data + } // End of template mw_body_json_app_session_context_resp_data + + template (value) LibHttp_JsonMessageBodyTypes.JsonBody m_body_json_events_notification( + in template (value) EventsNotification p_events_notification + ) := { + eventsNotification := p_events_notification + } // End of template m_body_json_events_notification + + template (present) LibHttp_JsonMessageBodyTypes.JsonBody mw_body_json_events_notification( + template (present) EventsNotification p_events_notification := ? + ) := { + eventsNotification := p_events_notification + } // End of template mw_body_json_events_notification + + + + + + + + + + + + + + + + + + + +} // End of group three_gpp + +} // End of module LibHttp_JsonTemplates diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_XmlMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_XmlMessageBodyTypes.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..68796c4f8e414c353d0a692df3e426248e647027 --- /dev/null +++ b/ttcn/patch_lib_http/ttcn/LibHttp_XmlMessageBodyTypes.ttcn @@ -0,0 +1,62 @@ +module LibHttp_XmlMessageBodyTypes { + + import from XSD all; + + // LibNg112 + import from LibNg112_TypesAndValues all; + + // LibHttp + import from LibHttp_XMLTypes all; + + // RFC5985 Held + import from urn_ietf_params_xml_ns_geopriv_held language "XSD" all + with { + extension "File:../xsd/RFC5985_held.xsd"; + } + + // RFC3863 PIDF + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/urn_ietf_params_xml_ns_pidf.ttcn" + } + + // RFC5222 + import from urn_ietf_params_xml_ns_lost1 language "XSD" all + with { + extension "File:../xsd/RFC5222_lost.xsd"; + } + + /** + * This file volontary contains a trivial declaration of the type XmlBody. + * In accordance with your TTCN-3 module LibHttp_XMLTypes, you have to change the XmlBody typing. + */ + // TODO Add here your custom RFCs import + + type union XmlBodyMsg { + // TODO Add here your custom variants + LocationRequest locationRequest, + LocationResponse locationResponse, + Presence presence, + ErrorType errorType, + FindService findServiceRequest, + FindServiceResponse findServiceResponse, + ListServices listServices, + ListServicesResponse listServicesResponse, + ListServicesByLocation listServicesByLocation, + ListServicesByLocationResponse listServicesByLocationResponse, + ExceptionContainer exceptionContainer, + Redirect redirect, + charstring raw + } with { + variant "" + } + + type record XmlBody { + XmlBodyMsg msg, + charstring raw optional + } + +} with { + encode "XML"; + variant "" +} // End of LibHttp_XmlMessageBodyTypes diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_XmlTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_XmlTemplates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..34a00781b3270ca3f332f60eb50fbfae58c7d864 --- /dev/null +++ b/ttcn/patch_lib_http/ttcn/LibHttp_XmlTemplates.ttcn @@ -0,0 +1,1097 @@ +/** + * @author ETSI / STF545 + * @version $URL: https://oldforge.etsi.org/svn/LibIts/branches/STF525/ttcn/Http/LibHttp_Templates.ttcn $ + * $ID:$ + * @desc This module provides the custom templates for ITS HTTP based protocols. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + */ +module LibHttp_XmlTemplates { + + import from XSD all; + + // RFC5985 Held + import from urn_ietf_params_xml_ns_geopriv_held language "XSD" all + with { + extension "File:../xsd/RFC5985_held.xsd"; + } + // RFC6155 Held ID + import from urn_ietf_params_xml_ns_geopriv_held_id language "XSD" all + with { + extension "File:../xsd/RFC6155_held_id.xsd"; + } + // RFC3863 PIDF + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/urn_ietf_params_xml_ns_pidf.ttcn" + } + import from urn_ietf_params_xml_ns_pidf_geopriv10 language "XSD" all + with { + extension "File:../xsd/RFC4119_geopriv10.xsd"; + } + import from urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy language "XSD" all + with { + extension "File:../xsd/RFC4119_geopriv10_basic_policy.xsd"; + } + + import from urn_ietf_params_xml_ns_pidf_geopriv10_civicAddr language "XSD" all + with { + extension "File:../xsd/RFC5139_pdif_geopriv10_civic_address.xsd"; + } + + // RFC3863 + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/RFC3863_pidf.xsd"; + } + + // RFC5222 + import from urn_ietf_params_xml_ns_lost1 language "XSD" all + with { + extension "File:../xsd/RFC5222_lost.xsd"; + } + + // OpenGIS + import from http_www_opengis_net_pidflo_1_0 language "XSD" all + with { + extension "File:../xsd/GLM-pidf-lo-shape.xsd"; + } + import from http_www_opengis_net_gml language "XSD" all + with { + extension "File:../xsd/gmlBase.xsd"; + extension "File:../xsd/basicTypes.xsd"; + extension "File:../xsd/measures.xsd"; + extension "File:../xsd/geometryPrimitives.xsd"; + extension "File:../xsd/geometryBasic0d1d.xsd"; + extension "File:../xsd/geometryBasic2d.xsd"; + } + + // LibHttp + import from LibHttp_XmlMessageBodyTypes all; + import from LibHttp_XMLTypes all; + + template (value) XmlBody m_xml_body_raw( + in template (value) charstring p_raw + ) := { + msg := { raw := p_raw }, + raw := p_raw + } // End of template m_xml_body_raw + + template (present) XmlBody mw_xml_body_raw( + template (present) charstring p_raw := ? + ) := { + msg := { raw := p_raw }, + raw := p_raw + } // End of template mw_xml_body_raw + + group rfc5985_held { + + group http_xml_body { + + template (value) XmlBody m_body_xml_location_request( + in template (value) LocationRequest p_locationRequest + ) := { + msg := { locationRequest := p_locationRequest }, + raw := omit + } // End of template m_body_xml_location_request + + template (present) XmlBody mw_body_xml_location_request( + template (present) LocationRequest p_locationRequest := ? + ) := { + msg := { locationRequest := p_locationRequest }, + raw := omit + } // End of template mw_body_xml_location_request + + template (value) XmlBody m_body_xml_location_response( + in template (value) LocationResponse p_locationResponse + ) := { + msg := { locationResponse := p_locationResponse }, + raw := omit + } // End of template m_body_xml_location_response + + template (present) XmlBody mw_body_xml_location_response( + template (present) LocationResponse p_locationResponse := ? + ) := { + msg := { locationResponse := p_locationResponse }, + raw := omit + } // End of template mw_body_xml_location_response + + template (present) XmlBody mw_body_xml_presence( + in template (present) Presence p_presence := ? + ) := { + msg := { presence := p_presence }, + raw := omit + } // End of template mw_body_xml_presence + + template (present) XmlBody mw_body_xml_location_response_error( + in template (present) ErrorType p_error_type := ? + ) := { + msg := { errorType := p_error_type }, + raw := omit + } // End of template mw_body_xml_location_response_error + + template (value) XmlBody m_body_xml_find_service_request( + in template (value) FindService p_findServiceRequest + ) := { + msg := { findServiceRequest := p_findServiceRequest }, + raw := omit + } // End of template m_body_xml_find_service_request + + template (present) XmlBody mw_body_xml_find_service_request( + template (present) FindService p_findServiceRequest := ? + ) := { + msg := { findServiceRequest := p_findServiceRequest }, + raw := omit + } // End of template mw_body_xml_find_service_request + + template (value) XmlBody m_body_xml_find_service_response( + in template (value) FindServiceResponse p_findServiceResponse + ) := { + msg := { findServiceResponse := p_findServiceResponse }, + raw := omit + } // End of template m_body_xml_find_service_response + + template (present) XmlBody mw_body_xml_find_service_response( + template (present) FindServiceResponse p_findServiceResponse := ? + ) := { + msg := { findServiceResponse := p_findServiceResponse }, + raw := omit + } // End of template mw_body_xml_find_service_response + + template (value) XmlBody m_body_xml_list_services_request( + in template (value) ListServices p_listServices + ) := { + msg := { listServices := p_listServices }, + raw := omit + } // End of template m_body_xml_list_services_request + + template (present) XmlBody mw_body_xml_list_services_response( + template (present) ListServicesResponse p_listServicesResponse := ? + ) := { + msg := { listServicesResponse := p_listServicesResponse }, + raw := omit + } // End of template mw_body_xml_list_services_response + + template (value) XmlBody m_body_xml_list_services_by_location_request( + in template (value) ListServicesByLocation p_listServicesByLocation + ) := { + msg := { listServicesByLocation := p_listServicesByLocation }, + raw := omit + } // End of template m_body_xml_list_services_by_location_request + + template (present) XmlBody mw_body_xml_list_services_by_location_response( + template (present) ListServicesByLocationResponse p_listServicesByLocationResponse := ? + ) := { + msg := { listServicesByLocationResponse := p_listServicesByLocationResponse }, + raw := omit + } // End of template mw_body_xml_list_services_by_location_response + + template (value) XmlBody m_body_xml_redirect_response( + in template (value) Redirect p_redirect + ) := { + msg := { redirect := p_redirect }, + raw := omit + } // End of template m_body_xml_list_services_request + + template (present) XmlBody mw_body_xml_redirect_response( + template (present) Redirect p_redirect := ? + ) := { + msg := { redirect := p_redirect }, + raw := omit + } // End of template mw_body_xml_list_services_by_location_response + + template (present) XmlBody mw_body_xml_find_service_response_error( + template (present) ExceptionContainer p_exceptionContainer := ? + ) := { + msg := { exceptionContainer := p_exceptionContainer }, + raw := omit + } // End of template mw_body_xml_find_service_response_error + + } // End of group http_xml_body + + template (omit) LocationRequest m_locationRequest( + in template (value) LocationRequestType.elem_list p_elem_list, + in template (omit) LocationTypeType p_locationType := omit, + in template (omit) ResponseTimeType p_responseTime := omit, + in template (omit) LocationRequestType.attr p_attr := omit + ) := { + responseTime := p_responseTime, + attr := p_attr, + locationType := p_locationType, + elem_list := p_elem_list + } // End of template m_locationRequest + + template LocationRequest mw_locationRequest( + template (present) LocationRequestType.elem_list p_elem_list := ?, + template LocationTypeType p_locationType := *, + template ResponseTimeType p_responseTime := *, + template LocationRequestType.attr p_attr := * + ) := { + responseTime := p_responseTime, + attr := p_attr, + locationType := p_locationType, + elem_list := p_elem_list + } // End of template mw_locationRequest + + //template (value) Uri m_uri(in template (value) Uri p_uri) := p_uri; + + template (value) LocationResponseType m_locationResponse( + in template (omit) ReturnLocationType p_locationUriSet := omit, + in template (value) Presence p_presence, + in template (value) LocationResponseType.elem_list p_elem_list := { } + ) := { + locationUriSet := p_locationUriSet, + presence := p_presence, + elem_list := p_elem_list + } // End of template m_locationResponse + + template LocationResponseType mw_locationResponse( + template ReturnLocationType p_locationUriSet := *, + template Presence p_presence := *, + template LocationResponseType.elem_list p_elem_list := * + ) := { + locationUriSet := p_locationUriSet, + presence := p_presence, + elem_list := p_elem_list + } // End of template mw_locationResponse + + template (omit) LocationTypeType m_locationTypeType( + in template (value) LocationTypeBase p_base, + in template (omit) XSD.Boolean p_exact := omit + ) := { + exact := p_exact, + base := p_base + } // End of template m_locationTypeType + + template (value) LocationTypeBase m_locationTypeBase_civic := { + alt_1 := { + civic + } + } // End of template m_locationTypeBase_civic + + template (value) LocationTypeBase m_locationTypeBase_geodetic := { + alt_1 := { + geodetic + } + } // End of template m_locationTypeBase_geodetic + + template (value) LocationTypeBase m_locationTypeBase_locationUri := { + alt_1 := { + locationURI + } + } // End of template m_locationTypeBase_locationUri + + template (value) LocationTypeBase m_locationTypeBase_all := { + alt_1 := { + geodetic, civic + } + } // End of template m_locationTypeBase_all + + template (value) ReturnLocationType m_locationUriSet( + in template (value) XSD.DateTime p_expires, + in template (value) ReturnLocationType.locationURI_list p_locationURI_list + ):= { + expires := p_expires, + locationURI_list := p_locationURI_list + } // End of template m_locationUriSet + + template (present) ReturnLocationType mw_locationUriSet( + template (present) XSD.DateTime p_expires := ?, + template (present) ReturnLocationType.locationURI_list p_locationURI_list := { ? } + ):= { + expires := p_expires, + locationURI_list := p_locationURI_list + } // End of template mw_locationUriSet + + template ErrorType mw_error_type( + template (present) XSD.Token p_code := ?, + template (present) ErrorType.message_list p_message_list := ?, + template (present) ErrorType.elem_list p_elem_list := {}, + template ErrorType.attr p_attr := * + ) := { + code := p_code, + attr := p_attr, + message_list := p_message_list, + elem_list := p_elem_list + } // End of template mw_error_type + + } // End of group rfc5985_held + + group rfc6155_held_id { + + template (value) Device m_device( + in template (value) Device.elem_list p_elem_list + ) := { + elem_list := p_elem_list + } // End of template m_device + + template (present) Device mw_device( + template (present) DeviceIdentity.elem_list p_elem_list := ? + ) := { + elem_list := p_elem_list + } // End of template mw_device + + } // End of group rfc6155_held_id + + group rfc3863_pidf { + + template (present) Presence mw_presence( + template (present) XSD.AnyURI p_entity := ?, + template (present) Presence.tuple_list p_tuple_list := ? + ) := { + entity := p_entity, + tuple_list := p_tuple_list, + note_list := {}, + elem_list := {} + } // End of template mw_presence + + template Tuple mw_tuple( + template (present) universal charstring p_id := ?, + template (present) Status p_status := ?, + template (present) Tuple.elem_list p_elem_list := ?, + template (present) Tuple.note_list p_note_list := {}, + template Contact p_contact := * + ) := { + id := p_id, + status := p_status, + elem_list := p_elem_list, + contact := p_contact, + note_list := p_note_list, + timestamp_ := * + } // End of template mw_tuple + + } // End of group rfc3863_pidf + + group rfc4119_geopriv10 { + + template (value) LocInfoType m_location_info( + in template (value) LocInfoType.point p_point + ) := { + point := p_point + } // End of template m_location_info + + template (present) LocInfoType mw_location_info( + template LocInfoType.point p_point := * + ) := { + point := p_point + } // End of template mw_location_info + + template (value) Geopriv m_geopriv( + in template (value) LocInfoType p_location_info, + in template (value) LocPolicyType p_usage_rules, + in template (value) Geopriv.elem_list p_elem_list := { }, + in template (omit) LocMethod p_method := omit, + in template (omit) LocProvidedBy p_provided_by := omit + ) := { + location_info := p_location_info, + usage_rules := p_usage_rules, + method := p_method, + provided_by := p_provided_by, + elem_list := p_elem_list + } // End of template m_geopriv + + template (present) Geopriv mw_geopriv( + template (present) LocInfoType p_location_info := ?, + template (present) LocPolicyType p_usage_rules := ?, + template LocMethod p_method := ?, + template LocProvidedBy p_provided_by := *, + template Geopriv.elem_list p_elem_list := * + ) := { + location_info := p_location_info, + usage_rules := p_usage_rules, + method := p_method, + provided_by := p_provided_by, + elem_list := p_elem_list + } // End of template mw_geopriv + + template (value) LocPolicyType m_LocPolicyType( + in template (value) LocPolicyType.elem_list p_elem_list := {} + ) := { + retransmission_allowed := omit, + retention_expiry := omit, + external_ruleset := omit, + note_well := omit, + elem_list := p_elem_list + } // End of template m_LocPolicyType + + } // End of group rfc4119_geopriv10 + + group rfc5139_pdif_geopriv10_civic_address { + + template (present) CaType mw_ca_type( + template (present) XSD.Token p_base := ? + ) := { + lang := *, + base := p_base + } // End of template mw_ca_type + + template CivicAddress mw_civicAddress( + template (present) Iso3166a2 p_country := ?, + template (present) XSD.Token p_a1 := ?, + template (present) XSD.String p_a3 := ?, + template (present) XSD.String p_a4 := ?, + template (present) XSD.String p_sTS := ?, + template (present) XSD.String p_lMK := ?, + template (present) CivicAddress.elem_list p_elem_list := ? + ) := { + attr := *, + country := p_country, + a1 := mw_ca_type(p_a1), + a2 := *, + a3 := mw_ca_type(p_a3), + a4 := mw_ca_type(p_a4), + a5 := *, + a6 := *, + pRM := *, + pRD := *, + rD := *, + sTS := mw_ca_type(p_sTS), + pOD := *, + pOM := *, + rDSEC := *, + rDBR := *, + rDSUBBR := *, + hNO := *, + hNS := *, + lMK := mw_ca_type(p_lMK), + lOC := *, + fLR := *, + nAM := *, + pC := *, + bLD := *, + uNIT := *, + rOOM := *, + sEAT := *, + pLC := *, + pCN := *, + pOBOX := *, + aDDCODE := *, + elem_list := p_elem_list + } // End of template mw_civicAddress + + } // End of group rfc5139_pdif_geopriv10_civic_address + + group rfc5222_lost { + + template (omit) FindService m_find_service_request( + in template (value) FindService.location_list p_location_list, + in template (value) FindService.notLost_list p_notLost_list, + in template (omit) Service p_service := omit, + in template (omit) XSD.Boolean p_recursive_ := omit, + in template (omit) FindService.serviceBoundary p_serviceBoundary := omit, + in template (omit) XSD.Boolean p_validateLocation := omit, + in template (omit) Path p_path := omit + ) := { + recursive_ := p_recursive_, + serviceBoundary := p_serviceBoundary, + validateLocation := p_validateLocation, + location_list := p_location_list, + path := p_path, + service := p_service, + notLost_list := p_notLost_list + } // End of template m_find_service_request + + template FindService mw_find_service_request( + template (present) FindService.location_list p_location_list := ?, + template (present) FindService.notLost_list p_notLost_list := ?, + template Service p_service := *, + template XSD.Boolean p_recursive_ := *, + template FindService.serviceBoundary p_serviceBoundary := *, + template XSD.Boolean p_validateLocation := *, + template Path p_path := * + ) := { + recursive_ := p_recursive_, + serviceBoundary := p_serviceBoundary, + validateLocation := p_validateLocation, + location_list := p_location_list, + path := p_path, + service := p_service, + notLost_list := p_notLost_list + } // End of template mw_find_service_request + + template (omit) Location m_location( + in template (value) XSD.Token p_id, + in template (value) Location.extensionPoint_list p_extensionPoint_list, + in template (omit) XSD.NMTOKEN p_profile := omit + ) := { + id := p_id, + profile := p_profile, + extensionPoint_list := p_extensionPoint_list + } // End of template m_location + + template Location mw_location( + template (present) XSD.Token p_id := ?, + template (present) Location.extensionPoint_list p_extensionPoint_list := ?, + template XSD.NMTOKEN p_profile := * + ) := { + id := p_id, + profile := p_profile, + extensionPoint_list := p_extensionPoint_list + } // End of template mw_location + + template (value) NotLost m_notLost( + in template (value) XSD.String p_elem + ) := { + elem := p_elem + } // End of template m_notLost + + template (value) ExtensionPoint m_extension_point( + in template (value) XSD.String p_elem + ) := { + elem := p_elem, + notLost_list := { } + } // End of template m_extension_point + + template (present) ExtensionPoint mw_extension_point( + template (present) XSD.String p_elem := ? + ) := { + elem := p_elem, + notLost_list := { } + } // End of template mw_extension_point + + template (value) ExtensionPoint m_extension_point_notLost( + in template (value) XSD.String p_elem, + in template (value) ExtensionPoint.notLost_list p_notLost_list + ) modifies m_extension_point := { + notLost_list := p_notLost_list + } // End of template m_extension_point_notLost + + template (omit) FindServiceResponse m_find_service_response( + in template (value) FindServiceResponse.mapping_list p_mapping_list, + in template (value) FindServiceResponse.warnings_list p_warnings_list := { }, + in template (value) Path p_path, + in template (value) FindServiceResponse.notLost_list p_notLost_list := { }, + in template (omit) LocationValidation p_locationValidation := omit, + in template (omit) LocationUsed p_locationUsed := omit + ) := { + mapping_list := p_mapping_list, + locationValidation := p_locationValidation, + warnings_list := p_warnings_list, + path := p_path, + notLost_list := p_notLost_list, + locationUsed := p_locationUsed + } // End of template m_find_service_response + + template FindServiceResponse mw_find_service_response( + template (present) FindServiceResponse.mapping_list p_mapping_list := ?, + template (present) FindServiceResponse.warnings_list p_warnings_list := ?, + template (present) Path p_path := ?, + template (present) FindServiceResponse.notLost_list p_notLost_list := ?, + template LocationValidation p_locationValidation := *, + template LocationUsed p_locationUsed := * + ) := { + mapping_list := p_mapping_list, + locationValidation := p_locationValidation, + warnings_list := p_warnings_list, + path := p_path, + notLost_list := p_notLost_list, + locationUsed := p_locationUsed + } // End of template mw_find_service_response + + template Redirect mw_redirect( + template (present) XSD.Token p_source := ?, + template (present) XSD.Token p_target := ?, + template (present) XSD.Token p_message := ? + ) := { + lang := ?, + message_ := p_message, + source := p_source, + target := p_target, + notLost_list := {} + } // End of template mw_find_service_response + + template Redirect m_redirect( + template (present) XSD.Token p_source := ?, + template (present) XSD.Token p_target := ?, + template (present) XSD.Token p_message := "Out of jurisdiction" + ) := { + lang := "en", + message_ := p_message, + source := p_source, + target := p_target, + notLost_list := {} + } // End of template mw_find_service_response + + template (omit) Mapping m_mapping( + in template (value) Mapping.expires p_expires, + in template (value) XSD.DateTime p_lastUpdated, + in template (value) AppUniqueString p_source, + in template (value) XSD.Token p_sourceId, + in template (value) Mapping.displayName_list p_displayName_list, + in template (value) Mapping.uri_list p_uri_list, + in template (omit) Mapping.choice p_choice := omit, + in template (omit) Service p_service := omit, + in template (value) Mapping.notLost_list p_notLost_list := { }, + in template (omit) Mapping.lang p_lang := omit, + in template (omit) XSD.Token p_message_ := omit, + in template (omit) ServiceNumber p_serviceNumber := omit + ) := { + lang := p_lang, + expires := p_expires, + lastUpdated := p_lastUpdated, + message_ := p_message_, + source := p_source, + sourceId := p_sourceId, + displayName_list := p_displayName_list, + service := p_service, + choice := omit, + uri_list := p_uri_list, + serviceNumber := p_serviceNumber, + notLost_list := p_notLost_list + } // End of template m_mapping + + template Mapping mw_mapping( + template (present) Mapping.expires p_expires := ?, + template (present) XSD.DateTime p_lastUpdated := ?, + template (present) AppUniqueString p_source := ?, + template (present) XSD.Token p_sourceId := ?, + template (present) Mapping.displayName_list p_displayName_list := ?, + template (present) Mapping.uri_list p_uri_list := ?, + template Mapping.choice p_choice := *, + template Service p_service := *, + template (present) Mapping.notLost_list p_notLost_list := ?, + template Mapping.lang p_lang := *, + template XSD.Token p_message_ := *, + template ServiceNumber p_serviceNumber := * + ) := { + lang := p_lang, + expires := p_expires, + lastUpdated := p_lastUpdated, + message_ := p_message_, + source := p_source, + sourceId := p_sourceId, + displayName_list := p_displayName_list, + service := p_service, + choice := *, + uri_list := p_uri_list, + serviceNumber := p_serviceNumber, + notLost_list := p_notLost_list + } // End of template mw_mapping + + template (value) DisplayName m_display_name( + in template (value) XSD.Language p_lang := "en", + in template (value) XSD.String p_base + ) := { + lang := p_lang, + base := p_base + } // End of template m_display_name + + template (present) DisplayName mw_display_name( + template (present) XSD.Language p_lang := ?, + template (present) XSD.String p_base := ? + ) := { + lang := p_lang, + base := p_base + } // End of template mw_display_name + + template (present) Mapping.expires mw_expires_date_time( + template (present) XSD.DateTime p_date_time := ? + ) := { + dateTime := p_date_time + } // End of template mw_expires_date_time + + template (present) Mapping.choice mw_mapping_service_boundary( + template (present) ServiceBoundary_1 p_service_boundary := ? + ) := { + serviceBoundary := p_service_boundary + } // End of template mw_mapping_service_boundary + + template (present) ServiceBoundary_1 mw_service_boundary( + template (present) ServiceBoundary_1.serviceBoundary_list p_serviceBoundary_list + ) := { + serviceBoundary_list := p_serviceBoundary_list + } // End of template mw_service_boundary + + template ServiceBoundary mw_service_boundary_item( + template XSD.NMTOKEN p_profile := *, + template (present) ServiceBoundary.extensionPoint_list p_extensionPoint_list := ? + ) := { + profile := p_profile, + extensionPoint_list := p_extensionPoint_list + } // End of template mw_service_boundary_item + + template BasicException mw_basic_exception( + template XSD.Language p_lang := *, + template XSD.Token p_message_ := *, + template (present) BasicException.notLost_list p_notLost_list := ? + ) := { + lang := p_lang, + message_ := p_message_, + notLost_list := p_notLost_list + } // End of template mw_basic_exception + + template LocationProfileUnrecognized mw_location_profile_unrecognized( + template XSD.Language p_lang := *, + template XSD.Token p_message_ := *, + template (present) LocationProfileUnrecognized.notLost_list p_notLost_list := ? + ) := { + lang := p_lang, + message_ := p_message_, + notLost_list := p_notLost_list + } // End of template mw_location_profile_unrecognized + + template (present) ExceptionContainer mw_exception_serviceNotImplemented( + template (present) AppUniqueString p_source := ?, + template (present) BasicException p_serviceNotImplemented := ?, + template (present) ExceptionContainer.notLost_list p_notLost_list := ? +) := { + source := p_source, + choice_list := { { serviceNotImplemented := p_serviceNotImplemented } }, + notLost_list := p_notLost_list + } // End of template mw_exception_serviceNotImplemented + + template (present) ExceptionContainer mw_exception_locationProfileUnrecognized( + template (present) AppUniqueString p_source := ?, + template (present) LocationProfileUnrecognized p_locationProfileUnrecognized := ?, + template (present) ExceptionContainer.notLost_list p_notLost_list := ? + ) := { + source := p_source, + choice_list := { { locationProfileUnrecognized := p_locationProfileUnrecognized } }, + notLost_list := p_notLost_list + } // End of template mw_exception_locationProfileUnrecognized + + template (present) ExceptionContainer mw_exception_loop( + template (present) AppUniqueString p_source := ?, + template (present) Loop p_loop := ?, + template (present) ExceptionContainer.notLost_list p_notLost_list := ? + ) := { + source := p_source, + choice_list := { { loop := p_loop } }, + notLost_list := p_notLost_list + } // End of template mw_exception_loop + + template (present) ExceptionContainer mw_exception_badRequest( + template (present) AppUniqueString p_source := ?, + template (present) BadRequest p_bad := ?, + template (present) ExceptionContainer.notLost_list p_notLost_list := ? + ) := { + source := p_source, + choice_list := { { badRequest := p_bad } }, + notLost_list := p_notLost_list + } // End of template mw_exception_badRequest + + template (value) LocationUsed m_location_used( + in template (value) XSD.Token p_id + ) := { + id := p_id + } // End of template m_location_used + + template (present) LocationUsed mw_location_used( + template (present) XSD.Token p_id := ? + ) := { + id := p_id + } // End of template mw_location_used + + template (value) Via m_via( + in template (value) AppUniqueString p_source + ) := { + source := p_source, + notLost_list := { } + } // End of template m_via + + template (present) Via mw_via( + template (present) AppUniqueString p_source := ? + ) := { + source := p_source, + notLost_list := ? + } // End of template mw_via + + template (value) Path m_path( + in template (value) Path.via_list p_via_list + ) := { + via_list := p_via_list + } // End of template m_path + + template (present) Path mw_path( + template (present) Path.via_list p_via_list := ? + ) := { + via_list := p_via_list + } // End of template mw_path + + template (omit) ListServices m_list_services( + in template (omit) Path p_path := omit, + in template (omit) Service p_service := omit + ) := { + path := p_path, + service := p_service, + notLost_list := { } + } // End of template m_list_services + + template (present) ListServicesResponse mw_list_services_response( + template (present) ServiceList p_serviceList := ?, + template (present) Path p_path := ?, + template (present) ListServicesResponse.warnings_list p_warnings_list := ? + ) := { + serviceList := p_serviceList, + warnings_list := p_warnings_list, + path := p_path, + notLost_list := { } + } // End of template mw_list_services_response + + template (omit) ListServicesByLocation m_list_services_by_location( + in template (value) ListServicesByLocation.location_list p_location_list, + in template (omit) Path p_path := omit, + in template (omit) Service p_service := omit, + in template (omit) XSD.Boolean p_recursive_ := omit + ) := { + recursive_ := p_recursive_, + location_list := p_location_list, + path := p_path, + service := p_service, + notLost_list := { } + } // End of template m_list_services_by_location + + template (present) ListServicesByLocationResponse mw_list_services_by_location_response( + template (present) ServiceList p_serviceList := ?, + template (present) Path p_path := ?, + template (present) ListServicesByLocationResponse.warnings_list p_warnings_list := ?, + template (present) LocationUsed p_locationUsed := ? + ) := { + serviceList := p_serviceList, + warnings_list := p_warnings_list, + path := p_path, + notLost_list := { }, + locationUsed := p_locationUsed + } // End of template mw_list_services_by_location_response + + } // End of group rfc5222_lost + + group open_gis { + + template (omit) Point m_point( + in template (value) Pos p_position, + in template (omit) XSD.AnyURI p_srsName := omit, + in template (omit) XSD.AnyURI p_id := omit + ) := { + axisLabels := omit, + gid := omit, + id := p_id, + srsDimension := omit, + srsName := p_srsName, + uomLabels := omit, + pos := p_position + } // End of template m_point + + template Point mw_point( + template (present) Pos p_position := ?, + template XSD.AnyURI p_srsName := * + ) := { + axisLabels := *, + gid := *, + id := *, + srsDimension := *, + srsName := p_srsName, + uomLabels := *, + pos := p_position + } // End of template mw_point + + template Point mw_point_1( + template (present) XSD.Double p_position_1 := ?, + template (present) XSD.Double p_position_2 := ?, + template XSD.AnyURI p_srsName := * + ) := { + axisLabels := *, + gid := *, + id := *, + srsDimension := *, + srsName := p_srsName, + uomLabels := *, + pos := { p_position_1, p_position_2 } + } // End of template mw_point_1 + + template (omit) CircleType m_circle( + in template (value) CenterGroup p_centerGroup, + in template (value) LengthType p_radius, + in template (omit) XSD.AnyURI p_srsName := omit, + in template (omit) XSD.AnyURI p_id := omit + ) := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := p_srsName, + uomLabels := omit, + centerGroup := p_centerGroup, + radius := p_radius + } // End of template m_circle + + template CircleType mw_circle( + template (present) CenterGroup p_centerGroup := ?, + template (present) LengthType p_radius := ?, + template XSD.AnyURI p_srsName := * + ) := { + axisLabels := *, + gid := *, + id := *, + srsDimension := *, + srsName := p_srsName, + uomLabels := *, + centerGroup := p_centerGroup, + radius := p_radius + } // End of template mw_circle + + template (omit) EllipseType m_ellipse( + in template (value) CenterGroup p_centerGroup, + in template (value) LengthType p_semiMajorAxis, + in template (value) LengthType p_semiMinorAxis, + in template (value) AngleType p_orientation, + in template (omit) XSD.AnyURI p_srsName := omit, + in template (omit) XSD.AnyURI p_id := omit + ) := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := p_srsName, + uomLabels := omit, + centerGroup := p_centerGroup, + semiMajorAxis := p_semiMajorAxis, + semiMinorAxis := p_semiMinorAxis, + orientation := p_orientation + } // End of template m_ellipse + + template (omit) ArcBandType m_arcband( + in template (value) CenterGroup p_centerGroup, + in template (value) LengthType p_innerRadius, + in template (value) LengthType p_outerRadius, + in template (value) AngleType p_startAngle, + in template (value) AngleType p_openingAngle, + in template (omit) XSD.AnyURI p_srsName := omit, + in template (omit) XSD.AnyURI p_id := omit + ) := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := p_srsName, + uomLabels := omit, + centerGroup := p_centerGroup, + innerRadius := p_innerRadius, + outerRadius := p_outerRadius, + startAngle := p_startAngle, + openingAngle := p_openingAngle + } // End of template m_arcband + + + template (omit) PolygonType m_polygon( + in template (omit) DoubleList p_posList, + in template (omit) XSD.AnyURI p_srsName := omit + ) := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := p_srsName, + uomLabels := omit, + exterior := { + ring := { + linearRing := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := omit, + uomLabels := omit, + choice := { + posList := { + count := omit, + base := p_posList + } + } + } + } + } + } + + + + template (value) CenterGroup m_center_group_pos( + in template (value) CenterGroup.pos p_pos + ) := { + pos := p_pos + } // End of template m_center_group_pos + + template (present) CenterGroup mw_center_group_pos( + template (present) CenterGroup.pos p_pos := ? + ) := { + pos := p_pos + } // End of template mw_center_group_pos + + template (present) CenterGroup mw_center_group_pos_1( + template (present) XSD.Double p_pos_1 := ?, + template (present) XSD.Double p_pos_2 := ? + ) := { + pos := { p_pos_1, p_pos_2 } + } // End of template mw_center_group_pos_1 + + template (value) LengthType m_radius( + in template (value) XSD.AnyURI p_uom, + in template (value) XSD.Double p_base + ) := { + uom := p_uom, + base := p_base + } // End of template m_radius + + template (present) LengthType mw_radius( + template (present) XSD.AnyURI p_uom := ?, + template (present) XSD.Double p_base := ? + ) := { + uom := p_uom, + base := p_base + } // End of template mw_radius + + template (present) PolygonType mw_polygon( + template (present) XSD.AnyURI p_srsName := ?, + template (present) Exterior p_exterior := ? + ) := { + axisLabels := *, + gid := *, + id := *, + srsDimension := *, + srsName := p_srsName, + uomLabels := *, + exterior := p_exterior + } // End of template mw_polygon + + template (present) Exterior mw_exterior_linear_ring( + template (present) LinearRingType p_linear_ring := ? + ) := { + ring := { linearRing := p_linear_ring } + } // End of template mw_exterior + + template (omit) LinearRingType m_linear_ring_type_pos( + in template (value) LinearRingType.choice.choice_list p_choice_list, + in template (omit) XSD.AnyURI p_srsName := omit, + in template (omit) NCNameList p_uomLabels := omit + ) := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := p_srsName, + uomLabels := p_uomLabels, + choice := { + choice_list := p_choice_list + } + } // End of template m_linear_ring_type_pos + + template (present) LinearRingType mw_linear_ring_type_pos( + template (present) XSD.AnyURI p_srsName := ?, + template (present) LinearRingType.choice.choice_list p_choice_list := ? + ) := { + axisLabels := *, + gid := *, + id := *, + srsDimension := *, + srsName := p_srsName, + uomLabels := *, + choice := { + choice_list := p_choice_list + } + } // End of template mw_linear_ring_type_pos + + } // End of group open_gis + +} // End of module LibHttp_XmlTemplates diff --git a/ttcn/patch_lib_ims_titan/module.mk b/ttcn/patch_lib_ims_titan/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..58a75b6b39ea357852c5b35b66a8c91784fcee34 --- /dev/null +++ b/ttcn/patch_lib_ims_titan/module.mk @@ -0,0 +1,6 @@ +sources := \ + ttcn/LibIms_Interface.ttcn \ + ttcn/LibIms_Library.ttcn \ + ttcn/LibIms_SIPTypesAndValues.ttcn \ + ../patch_lib_ims_titan/ttcn/LibIms_Steps.ttcn \ + ../patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn diff --git a/ttcn/patch_lib_ims_titan/ttcn/LibIms_Steps.ttcn b/ttcn/patch_lib_ims_titan/ttcn/LibIms_Steps.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..993bb388c8bcaece03dc6ffed299fe06b395311e --- /dev/null +++ b/ttcn/patch_lib_ims_titan/ttcn/LibIms_Steps.ttcn @@ -0,0 +1,1548 @@ +/** + * @author STF471 + * @version $Id$ + * @desc This module provides the steps used by the test component for SIP-IMS tests. + * This module is part of LibImsV3. + */ +module LibIms_Steps { + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_PIXITS all; + import from LibSip_Interface all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Common all; + // LibIms + import from LibIms_Templates all; + import from LibIms_Interface all; + import from LibIms_SIPTypesAndValues all; + + group externalfunctions { + } // end group externalfunctions + group parameterOperations { + + /** + * @desc Adds new Via parameter + * @param p_message (request) SIP message to be used to prepair via header + */ + function f_addNewViaParameter( + in Request p_message + ) runs on ImsComponent { + var integer v_intVia; + var integer i := 0; + if (isvalue(p_message.msgHeader.via)) { + + v_intVia := lengthof(p_message.msgHeader.via.viaBody); + while (i < v_intVia) { + p_message.msgHeader.via.viaBody[v_intVia] := p_message.msgHeader.via.viaBody[v_intVia - 1]; + v_intVia := v_intVia - 1; + } + vc_branch := c_branchCookie & f_getRndTag(); + p_message.msgHeader.via.viaBody[0] := valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)); + vc_via := p_message.msgHeader.via; + } + } + + /** + * @desc Removes own Via parameter + * @param p_message (request) SIP message to be used to prepair via header + */ + function f_removeOwnViaParameter( + in Response p_message + ) runs on ImsComponent { + var integer v_intVia; + var Via v_via := c_empty_Via; + var integer i := 0; + + if (ispresent(p_message.msgHeader.via)) { + + v_intVia := lengthof(p_message.msgHeader.via.viaBody) - 1; + + for (i := 0; i < v_intVia; i := i + 1) { + v_via.viaBody[i] := p_message.msgHeader.via.viaBody[i + 1]; + } + vc_via := v_via; + } + } + + /** + * @desc Adds new RecordRoute parameter and removes Route parameter + * @param p_message (request) SIP message to be used to prepair via header + */ + function f_addNewRecordRouteAndRemoveRoutParameter( + in Request p_message + ) runs on ImsComponent { + var integer v_intRoute, v_intRecordRoute; + var integer i := 1; + var RouteBody v_route1; + var Route v_newRoute; + v_newRoute.fieldName := ROUTE_E; + if (isvalue(p_message.msgHeader.route)) { + v_intRoute := lengthof(p_message.msgHeader.route.routeBody); + v_route1 := p_message.msgHeader.route.routeBody[0]; + while (i < v_intRoute) { + v_newRoute.routeBody[i - 1] := p_message.msgHeader.route.routeBody[i]; + i := i + 1; + } + vc_route := v_newRoute; + } + + if (isvalue(p_message.msgHeader.recordRoute)) { + + v_intRecordRoute := lengthof(p_message.msgHeader.recordRoute.routeBody); + while (0 < v_intRecordRoute) { + p_message.msgHeader.recordRoute.routeBody[v_intRecordRoute] := p_message.msgHeader.recordRoute.routeBody[v_intRecordRoute - 1]; + v_intRecordRoute := v_intRecordRoute - 1; + } + p_message.msgHeader.recordRoute.routeBody[0] := v_route1; + vc_recordRoute := valueof(p_message.msgHeader.recordRoute); + } + } + + /** + * @desc Adds new RecordRoute parameter (IMS) + * @param p_rr The recordRoute parameter to add + */ + function f_addNewRecordRouteIMS( + in RecordRoute p_rr + ) runs on ImsComponent + return template RecordRoute { + var integer v_intRecordRoute; + var template RecordRoute v_recordRoute := omit; + + v_intRecordRoute := lengthof(p_rr.routeBody); + if (v_intRecordRoute > 0) { + while (0 < v_intRecordRoute) { + p_rr.routeBody[v_intRecordRoute] := p_rr.routeBody[v_intRecordRoute - 1]; + v_intRecordRoute := v_intRecordRoute - 1; + } + p_rr.routeBody[0] := valueof(m_routeBody_currIpAddr(vc_userprofile)); + vc_recordRoute := p_rr; + return vc_recordRoute; + } + else { + return (v_recordRoute); + } + } + + } // end group parameterOperations + + group fieldOperations { + + /** + * @desc Sets BYE header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersBYE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user + ) runs on ImsComponent { + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + vc_route := f_route(); // update the route header field depending on vc_boo_route + vc_recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + } // end f_setHeadersBYE + + /** + * @desc Sets CANCEL header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + */ + function f_setHeadersCANCEL( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + vc_route := f_route(); // update the route header field depending on vc_boo_route + vc_recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + LibSip_Steps.f_setHeadersCANCEL(p_cSeq_s); + } // end f_setHeadersCANCEL + + /** + * @desc Sets headers for forward request from AS in case if AS acts as Proxy + * @param p_cSeq_s The current cSeq + * @param p_proxyMode true = proxyMode, false = B2BMode + */ + function f_setHeadersForwardRequestFromAS( + inout CSeq p_cSeq_s, + boolean p_proxyMode + ) runs on ImsComponent { + var Request v_request; + v_request := vc_request; + + if (p_proxyMode) { + vc_requestUri2 := v_request.requestLine.requestUri; + vc_to := v_request.msgHeader.toField; + vc_contact := v_request.msgHeader.contact; + f_addNewViaParameter(v_request); + f_addNewRecordRouteAndRemoveRoutParameter(v_request); + } + else { + // B2Bmode + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + } + } // end function f_setHeadersForwardRequest + + /** + * @desc Sets header fields for forward request from AS in case if AS acts as Proxy + */ + function f_setHeadersForwardResponseFromAS( + ) runs on ImsComponent { + var Response v_response; + v_response := vc_response; + + vc_caller_To := v_response.msgHeader.toField; + vc_to := v_response.msgHeader.toField; + vc_contact := v_response.msgHeader.contact; + + if (ispresent(v_response.msgHeader.recordRoute)) { + vc_recordRoute := v_response.msgHeader.recordRoute; + } + f_removeOwnViaParameter(v_response); + } // end function f_setHeadersForwardResponse + + /** + * @desc Sets Invite header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersINVITE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersINVITE(p_cSeq_s); + } // end f_setHeadersINVITE + + /** + * @desc Sets Invite header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersUPDATE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersUPDATE(p_cSeq_s); + } // end f_setHeadersUPDATE + + /** + * @desc Sets Message header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersMESSAGE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + LibSip_Steps.f_setHeadersMESSAGE(p_cSeq_s); + } // end f_setHeadersMESSAGE + + /** + * @desc Sets Notify header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersNOTIFY( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersNOTIFY(p_cSeq_s); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} + }; + + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + // contact header initialization for sending of NOTIFY from CSCF component + vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); + } // end f_setHeadersNOTIFY + + /** + * @desc Sets Options header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersOPTIONS( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersOPTIONS(p_cSeq_s); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} + }; + + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + // contact header initialization for sending of OPTIONS from CSCF component + vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); + } // end f_setHeadersOPTIONS + + /** + * @desc Sets Publish header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersPUBLISH( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersPUBLISH(p_cSeq_s); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} + }; + + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + // contact header initialization for sending of PUBLISH from CSCF component + vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); + } // end f_setHeadersPUBLISH + + /** + * @desc Sets Subscribe header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersSUBSCRIBE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_to_user // SipUrl + } + }, // end addressField + toParams := omit + }; + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + LibSip_Steps.f_setHeadersSUBSCRIBE(p_cSeq_s); + } // end f_setHeadersSUBSCRIBE + + /** + * @desc Sets headers for ReINVITE method + * @param p_cSeq_s The current cSeq + * @param p_orginatingSide true in case of Re-INVITE is send from the orgination endpoint otherwise false. + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersReINVITE( + inout CSeq p_cSeq_s, + in boolean p_orginatingSide, + in SipUrl p_to_user + ) runs on ImsComponent { + var integer v_tmp, i, j, v_nbroute; + var Request v_request; + v_request := vc_request; + + f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + + vc_requestUri := p_to_user; + + if (p_orginatingSide) { + vc_to := vc_caller_To; + vc_from := vc_caller_From; + } + else { + vc_to := vc_callee_To; + vc_from := vc_callee_From; + + // get route from previous ACK request + // Route Management + if (isvalue(v_request.msgHeader.recordRoute)) { + vc_recordRoute := valueof(v_request.msgHeader.recordRoute); + v_nbroute := lengthof(vc_recordRoute.routeBody); + // copy and reverse the order of the routes in route header + for (i := 0; i <= (v_nbroute - 1); i := i + 1) { + j := v_nbroute - 1 - i; + vc_route.routeBody[j] := vc_recordRoute.routeBody[i]; + } + vc_route.fieldName := ROUTE_E; + vc_boo_recordRoute := true; + vc_boo_route := true; + } + else { + vc_boo_recordRoute := false; + vc_boo_route := false; + } + } + + v_tmp := str2int(vc_sdp_local.origin.session_id); + vc_sdp_local.origin.session_id := int2str(v_tmp + 1); + v_tmp := str2int(vc_sdp_local.origin.session_version); + vc_sdp_local.origin.session_version := int2str(v_tmp + 1); + } // end function f_setHeadersReINVITE + + /** + * @desc Sets component variables related to message header fields when sending requests from the home I-CSCF (TS) to the visited P-CSCF (SUT) (message type independent: CSeq, contact, via), function uses information from userprofile and interfaceprofile + * @param p_cSeq_s The CSeq parameter + * @param p_method The method name for cSeq header field + */ + function f_setHeadersGeneral_ICSCF( + inout CSeq p_cSeq_s, + in charstring p_method + ) runs on SipComponent { + p_cSeq_s.fieldName := CSEQ_E; + p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; + p_cSeq_s.method := p_method; + vc_cSeq := p_cSeq_s; + + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_branch_ICSCF := c_branchCookie & f_getRndTag(); + + vc_via := { + fieldName := VIA_E, + viaBody := { + valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)), + valueof(m_ViaBody_virtualUEinPCSCF(vc_branch_ICSCF, vc_userprofile)) + } + }; + } // end function f_setHeadersGeneral_ICSCF + + /** + * @desc Sets header field for the next outgoing REGISTER message from the visited P-CSCF to the home I-CSCF + * @param p_cSeq_s The CSeq parameter to be applied + */ + function f_setHeaders_REGISTER_PCSCF( + inout CSeq p_cSeq_s + ) runs on SipComponent { + var SemicolonParam_List v_params; + + f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via + vc_requestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := vc_userprofile.registrarDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + }; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + vc_callIdReg := vc_callId; + + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + v_params := { + { + id := c_tagId, + paramValue := { + tokenOrHost := f_getRndTag() + } + } + }; + vc_from := { + fieldName := FROM_E, + addressField := vc_to.addressField, + fromParams := v_params + }; + + if (not vc_firstREGISTER_sent) { + v_params := { + { + id := c_expiresId, + paramValue := { + tokenOrHost := c_shortRegistration + } + } + }; + vc_contact.contactBody.contactAddresses[0].contactParams := v_params; + } + + vc_firstREGISTER_sent := true; // f_setHeaders_Register is called in deREGISTER function + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentials_empty(vc_userprofile)} + }; + } // end function setHeaders_REGISTER_PCSCF + + /** + * @desc Sets REFER header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersREFER( + inout CSeq p_cSeq_s, + in SipUrl p_to_user + ) runs on ImsComponent { + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersREFER(p_cSeq_s); + } // end f_setHeadersREFER + + /** + * @desc Sets REFER header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_uri The SipUrl for request URI and To header + */ + function f_setHeadersREFER_conf( + inout CSeq p_cSeq_s, + in SipUrl p_uri + ) runs on ImsComponent { + vc_to := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_uri // SipUrl + } + }, // end addressField + toParams := omit + }; + + vc_from := f_initFromHeader(p_uri, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_uri; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersREFER(p_cSeq_s); + } // end f_setHeadersREFER_conf + + } // end group fieldOperations + + group awaitingMessage { + } + + group sendMessage { + + /** + * @desc Sends PRACK message + * @param p_mb The message body of the PRACK message + * @param p_rack_cseq The cSeq of the PRACK message + */ + function f_sendPRACK_sdp( + template(value) MessageBody p_mb, + CSeq p_rack_cseq + ) runs on SipComponent { + var integer v_responseNum := 1; + var template(value) PRACK_Request v_prackReq; + + f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via + if (isvalue(vc_response.msgHeader.rSeq.responseNum)) { + v_responseNum := vc_response.msgHeader.rSeq.responseNum; + } + vc_rAck := m_RAck(v_responseNum, p_rack_cseq.seqNumber, p_rack_cseq.method); + + v_prackReq := m_PRACK_Request_sdp(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_rAck, p_mb); + + // added route header if required + if (isvalue(vc_response.msgHeader.recordRoute)) { + v_prackReq.msgHeader.route := f_route(); + } + + SIPP.send(v_prackReq) to vc_sent_label; + } + + } + group globalSteps { + + //NOTE STF471: removed function f_init_userprofile, have to move up to specific ATS + + /** + * @desc Initializes the To header + * @param p_user Identifies the selected user's SIP URL + * @return The To header + */ + function f_initToHeader( + in SipUrl p_user + ) runs on ImsComponent + return To { + var To v_to := c_empty_To; + v_to := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_user // SipUrl + } + }, // end addressField + toParams := omit + }; + return (v_to); + } + + /** + * @desc Initializes the From header + * @param p_user Identifies the selected user' SIP URL + * @param p_tag_str The string value of the tag id + * @return The From header + */ + function f_initFromHeader( + in SipUrl p_user, + charstring p_tag_str + ) runs on ImsComponent + return From { + var From v_from := c_empty_From; + v_from := { + fieldName := FROM_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_user // SipUrl + } + }, // end addressField + fromParams := { + { + id := c_tagId, + paramValue := { + tokenOrHost := p_tag_str + } + } + } + }; + return v_from; + } + + //NOTE STF471: removed function f_initSipUrl, have to move up to specific ATS + + //NOTE STF471: removed function f_init_interfaceprofile, have to move up to specific ATS + + /** + * @desc Retrieves user DomainPort value of the user profile + * @param p_userProfile Identifies the selected user profile + * @return The Domain HostPort + */ + function f_get_userDomainPort( + in SipUserProfile p_userProfile + ) runs on ImsComponent + return HostPort { + return + { + p_userProfile.homeDomain, + p_userProfile.currPort + }; + } + + /** + * @desc Retrieves HostPort value of the interface profile + * @param p_interface Identifies the selected interface + * @return The HostPort + */ + function f_get_interfaceHostPort( + in ImsInterfaceProfile p_interface + ) runs on ImsComponent + return HostPort { + return + { + p_interface.SUTIpaddr, + p_interface.SUTPort + }; + } + + /** + * @desc Retrieves DomainPort value of the interface profile + * @param p_interface Identifies the selected interface + * @return The Domain HostPort + */ + function f_get_interfaceDomainPort( + in ImsInterfaceProfile p_interface + ) runs on ImsComponent + return HostPort { + return + { + p_interface.SUTHomeDomain, + p_interface.SUTPort + }; + } + + /** + * @desc Gets the receive template for the NameAddr of the interface + * @param p_interface Identifies the selected interface + * @return The NameAddr template + */ + function f_get_interfaceNameAddr( + in ImsInterfaceProfile p_interface + ) runs on ImsComponent + return template NameAddr { + return mw_SipUrl_SUTinterface(p_interface.SUTIpaddr, p_interface.SUTPort); + } + + } + + group registration { + + /** + * @desc Registration and authentication + * @param p_cSeq_s The current cseq + * @param p_auth flag indicating if authentication is needed + * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) + * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) + */ + function f_Registration_IMS( + inout CSeq p_cSeq_s, + in boolean p_auth, + template(value) charstring p_host, + template(value) integer p_port + ) runs on SipComponent { + f_setHeaders_REGISTER(p_cSeq_s); + f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization, {c_Integrity_protected_no}), p_host, p_port)); // LibSip + // awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER + if (p_auth) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq_s); + f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization, {c_Integrity_protected_yes}), p_host, p_port)); // LibSip + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) { + tc_ack.stop; + log("*** " & __SCOPE__ & ": INCONC: Authorization was not requested as expected ***"); + setverdict(inconc); + } + } + } + else { + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + } // end function f_Registration_IMS + + /** + * @desc awaiting UE1 registration (with authentication) + * @param p_cSeq_s The current cseq + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + * @param p_register The expected REGISTER_Request - default: mw_REGISTER_authorizedRequest_IMS + */ + function f_awaitingRegistration_IMS( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in charstring p_qop, + in template(present) REGISTER_Request p_register := + mw_REGISTER_authorizedRequest_IMS( + mw_Authorization_digest( + mw_digestResponse( + (c_Integrity_protected_yes, c_Integrity_protected_ip_assoc_pending) + ) + ) + ) + ) runs on ImsComponent { + var SipUrl v_passociated_url; + + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse( + m_Response_WWWauthenticate_IMS( + c_statusLine401, + vc_callId, + p_cSeq_s, + vc_caller_From, + vc_caller_To, + vc_via, + m_wwwAuthenticate( + f_calculatecChallenge_forWWWAuthorization( + p_qop, + valueof(vc_authorization.body[0].digestResponse) + ) + ) + ) + ); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(p_register); + + // 200OK to complete the request + if (isvalue(vc_request.msgHeader.contact)) { + vc_contact := valueof(vc_request.msgHeader.contact); + vc_contact.contactBody.contactAddresses[0].contactParams := { + { + "expires", + { + tokenOrHost := int2str(3600) + } + } + }; + } + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, p_cSeq_s, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + } // end function f_awaitingRegistration_IMS + + /** + * @desc Awaiting UE1 registration (with authentication, without security headers) + * @param p_cSeq_s The current cseq + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_awaitingRegistration_IMS_gm( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + vc_ignore_subscribe := true; // handle SUBSCRIBE during the call + + f_awaitingRegistration_IMS(p_cSeq_s, p_to_user, p_qop, mw_REGISTER_authorizedRequest_wo_securityheaders_IMS); + + vc_DeregDone := false; + } // end function f_awaitingRegistration_IMS_gm + + /** + * @desc Remove registration + * @param p_cSeq_s The current cseq + * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) + * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) + */ + function f_removeRegistration_IMS( + inout CSeq p_cSeq_s, + template(value) charstring p_host, + template(value) integer p_port + ) runs on SipComponent { + var template(value) REGISTER_Request v_request; + + if (PX_SIP_REGISTRATION) { + f_setHeaders_deREGISTER(p_cSeq_s); + v_request := m_REGISTER_Request_expires_IMS(vc_requestUri, vc_callIdReg, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_authorization, p_host, p_port, "0"); + v_request.msgHeader.route := f_route(); + + f_SendREGISTER(v_request); + if (PX_SIP_REGISTER_AUTHENTICATION_ENABLED) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callIdReg, p_cSeq_s)) -> value vc_response { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq_s); + v_request := m_REGISTER_Request_expires_IMS(vc_requestUri, vc_callIdReg, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_authorization, p_host, p_port, "0"); + v_request.msgHeader.route := f_route(); + // Re-send protected REGISTER + f_SendREGISTER(v_request); // LibSip + // awaiting 200 OK REGISTER + f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)) -> value vc_response { + tc_ack.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + log("*** " & __SCOPE__ & ": INFO: Authorization was not requested as expected ***"); + } + } + } + else { + f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)); + } + } + } // end f_RemoveRegistration_IMS + + } // end group registration + + group preambles { + + /** + * @desc Sets variables and default initialization for user profile where proxy role is present + * @param p_userprofile User profile of call + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_MGCF( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + vc_boo_recordRoute := true; + vc_boo_route := true; + //NOTE STF471: removed f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_MGCF); + + f_IMS_preamble_woRegistration(p_cSeq_s); + } + + /** + * @desc Sets variables and default initialization for user profile + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_woRegistration( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + // avoid deregistration in default behavior + vc_DeregDone := true; + vc_boo_route := true; + vc_boo_recordRoute := true; + + // Variables & defaults initialization + LibSip_Steps.f_init_component(p_cSeq_s); + + // Preamble + //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + } + + //NOTE STF471 added + /** + * @desc Sets variables and default initialization for user profile + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_woRegistration_as( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + // avoid deregistration in default behavior + vc_DeregDone := true; + vc_boo_route := true; + vc_boo_recordRoute := true; + + // Variables & defaults initialization + LibSip_Steps.f_init_component(p_cSeq_s); + + // Preamble + //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_cSeq_s The current cseq + * @param p_register Register template + */ + function f_IMS_preamble_withEmergencyRegistration( + inout CSeq p_cSeq_s, + template REGISTER_Request p_register + ) runs on ImsComponent { + + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + // Preamble + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED, true); + + // deregistration in case of successful registration + vc_DeregDone := false; + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_cSeq_s The current cseq + * @param p_register Register template + */ + function f_IMS_preamble_withRegistration( + inout CSeq p_cSeq_s, + out template REGISTER_Request p_register + ) runs on ImsComponent { + + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + + // Preamble + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + + // deregistration in case of successful registration + vc_DeregDone := false; + + f_setHeaders_SUBSCRIBE(p_cSeq_s); + f_Subscription(p_cSeq_s, m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_route_REG)); + } + + //NOTE STF471 added + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_cSeq_s The current cseq + * @param p_register Register template + */ + function f_IMS_preamble_withRegistrationWoSubscription( + inout CSeq p_cSeq_s, + out template REGISTER_Request p_register + ) runs on ImsComponent { + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + + // Preamble + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + + // deregistration in case of successful registration + vc_DeregDone := false; + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 (basic registration template) + * @param p_cSeq_s The current cseq + * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) + * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) + */ + function f_IMS_preamble_withRegistrationBasic( + inout CSeq p_cSeq_s, + template(value) charstring p_host, + template(value) integer p_port + ) runs on ImsComponent { + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + + // Preamble + f_Registration_IMS(p_cSeq_s, PX_SIP_REGISTER_AUTHENTICATION_ENABLED, p_host, p_port); + f_setHeaders_SUBSCRIBE(p_cSeq_s); + f_Subscription(p_cSeq_s, m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_route_REG)); + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 (basic registration template) + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_AS( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + // avoid deregistration in default behavior + vc_DeregDone := true; + vc_boo_route := true; + vc_boo_recordRoute := true; + vc_cSeq := p_cSeq_s; + + // Defaults + vc_def_catchSyncStop := activate(a_Sip_catchSyncStop()); + vc_default := activate(a_altstep_AS()); + + // Preamble + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + } + + } // end group preambles + + group postambles { + + /** + * @desc Terminates component and handles deregistration + * @param p_cSeq_s The current cseq + */ + function f_IMS_postamble_withDeRegistration( + CSeq p_cSeq_s + ) runs on ImsComponent { + f_RemoveRegistration(p_cSeq_s); + f_terminate_component(); + } + + /** + * @desc Terminates component and optionally handles deregistration on AS as TS + * @param p_deRegistration Handle deregistration? + */ + function f_IMS_postamble_AS_withDeRegistration( + boolean p_deRegistration + ) runs on ImsComponent { + + if (p_deRegistration == true) { + f_awaitingREGISTER_sendReply(mw_REGISTER_Request_Base, true); + } + f_terminate_component(); + } + + /** + * @desc Terminates component without registration + */ + function f_SIP_postamble_IMS1_withoutRegistration( + ) runs on ImsComponent { + f_terminate_component(); + } + + /** + * @desc Terminates component without de-registration + */ + function f_IMS_postamble_withoutDeRegistration( + ) runs on ImsComponent { + f_terminate_component(); + } + + /** + * @desc Terminates component with de-registration + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_SIP_postamble_IMS1_awaitDeRegistration( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var SipUrl v_passociated_url; + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 200OK to complete the request + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + + f_terminate_component(); + } + + /** + * @desc Terminates component with de-registration + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_IMS_postamble_awaitDeRegistration( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var SipUrl v_passociated_url; + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 200OK to complete the request + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + + f_terminate_component(); + } + + + /** + * @desc Awaits de-registration + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_IMS_awaitDeRegistration( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var SipUrl v_passociated_url; + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 200OK to complete the request + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + } + + //NOTE STF471: renamed f_SIP_postamble_UE(1|2)_withoutRegistration to f_SIP_postamble_UE_withoutRegistration + /** + * @desc Terminates component without registration + */ + function f_SIP_postamble_UE_withoutRegistration( + ) runs on ImsComponent { + f_terminate_component(); + } + + /** + * @desc Sends BYE and awaits response (IMS) + * @param p_requestUri The Request URI + * @param p_callId CallId parameter for outgoing BYE + * @param p_cSeq_s CSeq parameter for outgoing BYE + * @param p_from From parameter for outgoing BYE + * @param p_to To parameter for outgoing BYE + */ + function f_terminateCall_IMS( + SipUrl p_requestUri, + CallId p_callId, + inout CSeq p_cSeq_s, + From p_from, + template(value) To p_to + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_IMS(p_requestUri, p_callId, p_cSeq_s, p_from, p_to, vc_via, vc_route)); + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { + repeat; + } + [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + } // end function f_terminateCall_IMS + + /** + * @desc Sends BYE and awaits response (UE) + * @param p_requestUri The Request URI + * @param p_callId CallId parameter for outgoing BYE + * @param p_cSeq_s CSeq parameter for outgoing BYE + * @param p_from From parameter for outgoing BYE + * @param p_to To parameter for outgoing BYE + * @param p_recordRoute RecordRoute parameter for outgoing BYE - default: omit + */ + function f_terminateCall_UE( + SipUrl p_requestUri, + CallId p_callId, + inout CSeq p_cSeq_s, + From p_from, + template(value) To p_to, + template RecordRoute p_recordRoute := omit + ) runs on ImsComponent { + var Route v_route; + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + // Sending of a BYE request to release the call and expect a final response + if (ispresent(p_recordRoute)) { + v_route := {ROUTE_E, valueof(p_recordRoute.routeBody)}; + f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, valueof(p_to), vc_via, v_route)); + } + else { + f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, valueof(p_to), vc_via, vc_route)); + } + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { + repeat; + } + [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + } // end function f_terminateCall_UE + + /** + * @desc Sends BYE and awaits response and De-registration + * @param p_requestUri The Request URI + * @param p_callId CallId parameter for outgoing BYE + * @param p_cSeq_s CSeq parameter for outgoing BYE + * @param p_from From parameter for outgoing BYE + * @param p_to To parameter for outgoing BYE + * @param p_qop of the peer UE (alternatively) + */ + function f_terminateCall_UE_withDeReg( + SipUrl p_requestUri, + CallId p_callId, + inout CSeq p_cSeq_s, + From p_from, + template(value) To p_to, + in charstring p_qop + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, p_to, vc_via, vc_route)); + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { + repeat; + } + [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + action("Please de-register"); + f_IMS_awaitDeRegistration(p_requestUri, p_qop); + } // end function f_terminateCall_UE_withDeReg + + } + group defaults { + + /** + * @desc Altstep for clearing registration (IMS user) + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + * @verdict fail for all unexpected branches + */ + altstep a_clearRegistration_IMSuser( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var Response v_response; + var Request v_request; + var SUBSCRIBE_Request v_subscribe_request; + var REGISTER_Request v_register_request; + var BYE_Request v_bye_request; + var CANCEL_Request v_cancel_request; + var NOTIFY_Request v_notify_request; + var INFO_Request v_info_request; + var CSeq v_cSeq; + [] any timer.timeout { + log("*** " & testcasename() & ": FAIL: Timeout while waiting for message. ***"); + setverdict(fail); + all timer.stop; + vc_callId := vc_callIdReg; + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // allow repeated INVITEs + [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) { + repeat; + } + // allow repeated BYEs after ack of the first BYE + [vc_ignore_bye] SIPP.receive(mw_BYE_Request_Base(?)) { + repeat; + } + [] SIPP.receive(mw_ACK_Request_Base(?)) { + repeat; + } + // allow 100 replies + [] SIPP.receive(mw_Response_Base(c_statusLine100, ?, ?)) { + repeat; + } + // ignore 181 if flag is set (following TS 183004 ����4.5.2.1) + [vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181, vc_callId, vc_cSeq)) -> value v_response /*sender vc_sent_label*/ { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + repeat; + } + // according to SIP chap.8.1.3.2 + [] SIPP.receive(mw_Response_Base(c_statusLine183, vc_callId, vc_cSeq)) { + repeat; + } + // ignore 484 if flag is set + [vc_ignore484] SIPP.receive(mw_Response_Base(c_statusLine484, vc_callId, vc_cSeq)) { + repeat; + } + [vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response /*sender vc_sent_label*/ { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + repeat; + } + [vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) { + repeat; + } + [] SIPP.receive(mw_INFO_Request_Base(vc_callId)) -> value v_info_request /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfRequest(v_info_request); + f_send200OK(); + repeat; + } + // awaiting of Notify + [] SIPP.receive(mw_NOTIFY_Request_Base(vc_callId)) -> value v_notify_request /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfRequest(v_notify_request); + f_send200OK(); + repeat; + } + // awaiting of subscribe from UE + [vc_ignore_subscribe] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfSUBSCRIBE(v_subscribe_request); + f_send200OK(); + repeat; + } + // awaiting of subscribe on proxy + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfRequest(v_subscribe_request); + f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); + f_SendNOTIFY(m_NOTIFY_Request_contact(v_subscribe_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); + f_awaitingOkResponse(vc_cSeq); + repeat; + } + // unexpected BYE is acknowledged to avoid retransmissions + [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request /*sender vc_sent_label*/ { + log("*** " & testcasename() & ": FAIL: Unexpected BYE message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_bye_request); + f_send200OK(); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // unexpected CANCEL is acknowledged to avoid retransmissions + [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request /*sender vc_sent_label*/ { + log("*** " & testcasename() & ": FAIL: Unexpected CANCEL message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_cancel_request); + // Answer to the CANCEL + f_send200OK(); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // catch 4xx response + [] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response /*sender vc_sent_label*/ { + log("*** " & testcasename() & ": FAIL: Unexpected 4xx response received. ***"); + setverdict(fail); + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // catch 5xx response + [] SIPP.receive(mw_Response_Base(mw_statusLine5xx, vc_callId, ?)) -> value v_response /*sender vc_sent_label*/ { + log("*** " & testcasename() & ": FAIL: Unexpected 5xx response received. ***"); + setverdict(fail); + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // catch invalid REGISTER + [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request /*sender vc_sent_label*/ { + log("*** " & testcasename() & ": FAIL: Unexpected REGISTER received. ***"); + setverdict(fail); + f_componentStop(); + } + // any + [] SIPP.receive { + log("*** " & testcasename() & ": FAIL: Unexpected message received. ***"); + setverdict(fail); + all timer.stop; + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + } + + /** + * @desc Main default altstep to handle unexpected messages and timeout + * @verdict fail for all unexpected branches + */ + altstep a_altstep_AS( + ) runs on SipComponent { + var Request v_request; + var REGISTER_Request v_register_request; + var BYE_Request v_bye_request; + var CANCEL_Request v_cancel_request; + + [] any timer.timeout { + log("*** " & testcasename() & ": FAIL: Timeout while waiting for message. ***"); + setverdict(fail); + all timer.stop; + } + // allow repeated INVITEs + [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) { + repeat; + } + // handle REGISTER requests + [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfREGISTER(v_register_request); + // vc_contact := vc_request.msgHeader.contact; + f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact)); + repeat; + } + // according to SIP chap.8.1.3.2 + [] SIPP.receive(mw_Response_Base(c_statusLine183, vc_callId, vc_cSeq)) { + repeat; + } + // unexpected CANCEL is acknowledged to avoid retransmissions + [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request /*sender vc_sent_label*/ { + log("*** " & testcasename() & ": FAIL: Unexpected CANCEL message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_cancel_request); + f_send200OK(); + } + // unexpected BYE is acknowledged to avoid retransmissions + [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request /*sender vc_sent_label*/ { + log("*** " & testcasename() & ": FAIL: Unexpected BYE message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_bye_request); + f_send200OK(); + } + [] SIPP.receive(mw_Response_Base(?, vc_callId, vc_cSeq)) -> value vc_response { + log("*** " & testcasename() & ": FAIL: Unexpected response message in " & __SCOPE__ & " received. ***"); + setverdict(fail); + repeat; + } + // any + [] SIPP.receive { + log("*** " & testcasename() & ": FAIL: Unexpected message received. ***"); + setverdict(fail); + all timer.stop; + } + } + } +} // module LibIms_Steps diff --git a/ttcn/patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn b/ttcn/patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..7a60b7d2da5ed7c99cd5b195a9190c1b05a8d21b --- /dev/null +++ b/ttcn/patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn @@ -0,0 +1,4632 @@ +/** + * @author STF471 + * @version $Id$ + * @desc This module provides the templates used by the test component for SIP-IMS tests. + * This module is part of LibImsV3. + */ +module LibIms_Templates { + // LibCommon + import from LibCommon_DataStrings all; + + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Common all; + + // LibIms + import from LibIms_SIPTypesAndValues all; + + // LibXMLTypes + import from XSD all; + + import from urn_ietf_params_xml_ns_resource_lists language "XSD" all + with { + extension "File:../xsd/ResourceList.xsd"; + } + + import from urn_ietf_params_xml_ns_reginfo language "XSD" all except {type Contact;} + with { + extension "File:../xsd/regInfo.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all + with { + extension "File:../xsd/SupplementaryServices.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all + with { + extension "File:../xsd/MCID.xsd"; + } + + import from NoTargetNamespace language "XSD" all + with { + extension "File:../xsd/Ims3gpp.xsd"; + } + + import from urn_ietf_params_xml_ns_conference_info language "XSD" all + with { + extension "File:../xsd/CONF.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all + with { + extension "File:../xsd/PSTN.xsd"; + } + + import from urn_ietf_params_xml_ns_common_policy language "XSD" all + with { + extension "File:../xsd/common-policy.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all + with { + extension "File:../xsd/CDIVN.xsd"; + } + + import from urn_3gpp_ns_cw_1_0 language "XSD" all + with { + extension "File:../xsd/cw.xsd"; + } + + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/pidf.xsd"; + } + + template(present) charstring mw_international_number_format := pattern "\\+\d+"; + + template(present) NameAddr mw_SipUrl_SUTinterface( + template(present) charstring p_host := ?, + template(present) integer p_port := ? + ) := { + displayName := *, + addrSpec := { + scheme := "sip:", + components := { + sip := { + userInfo := *, + hostPort := mw_hostPort(p_host, p_port) + } + }, + urlParameters := *, + headers := * + } + } + + template(present) Addr_Union mw_UE1_Addr_display( + template(present) DisplayName p_displayName + ) := { + nameAddr := { + displayName := p_displayName, + addrSpec := ? + } + } + + // MIME name application + template(value) charstring m_mimeMultipart := "multipart/mixed;boundary=""" & PX_SIP_MIME_BOUNDARY & """"; + + group subfields { + + template(value) SipUrl m_SipUrl_currIpaddr_CSCF( + template(value) SipUserProfile p_userprofile + ) := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := omit, //* optional + hostPort := { + host := p_userprofile.currIpaddr, //* hostname, IPv4 or IPv6 as a charstring + portField := p_userprofile.currPort //* optional integer + } + } + }, + urlParameters := omit, + headers := omit + } + + template(present) SemicolonParam_List mw_semicolonParams_realm( + template GenValue p_realm + ) := + superset( + { + "realm", + p_realm + }, + { + "nonce", + ? + }, + { + "algorithm", + { tokenOrHost := "AKAv1-MD5" } + }, + { + "ik", + ? + }, + { + "ck", + ? + } + ); + + template(value) SemicolonParam_List m_semicolonParams_language( + template(omit) GenValue p_language := omit + ) := { + { + "language", + p_language + } + } + + template(present) SemicolonParam_List mw_semicolonParams_language( + template GenValue p_language + ) := { + { + "language", + p_language + } + } + + template(value) SemicolonParam_List m_semicolonParams_isub( + template(omit) GenValue p_address := omit + ) := { + { + "isub", + p_address + } + } + } + + group headerFieldTemplates { + + template(value) MinSE m_minSE( + template(value) DeltaSec p_ds + ) := { + fieldName := MIN_SE_E, + deltaSec := p_ds, + minSeParam := omit + } + + template(present) PathValue mw_pathvalue( + template(present) SipUrl p_sipUrl := ? + ) := { + nameAddr := { + displayName := *, // optional charstring + addrSpec := p_sipUrl // SipUrl + }, + rrParam := * + } + + template(value) Path m_path( + template(value) charstring p_host, + template(value) integer p_port, + template(value) SipUrl p_sipUrl + ) modifies m_path_TS := { + pathValues := { + { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_sipUrl // SipUrl + }, + rrParam := omit + } + } + } + + template(value) Path m_path_TS( + template(value) charstring p_host, + template(value) integer p_port + ) := { + fieldName := PATH_E, + pathValues := { + { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "registrar", + password := omit + }, + hostPort := {p_host, p_port} + } + }, + urlParameters := { + { + id := "lr", + paramValue := omit + } + }, + headers := omit + } + }, + rrParam := omit + } + } + } + + /** + * @desc Path header field expectation with at least one path value + * @param p_sipUrl value of the last element in the list of path values + */ + template(present) Path mw_path( + template(present) SipUrl p_sipUrl := ? + ) := { + fieldName := PATH_E, + pathValues := {mw_pathvalue(p_sipUrl)} // any number of SipUrl may occur before p_sipUrl + } + + template(value) PAccessNetworkInfo m_pAccessNetworkInfo_IEEE_11a := { + fieldName := P_ACCESS_NETWORK_INFO_E, + accessType := "IEEE-802.11a", + genericParams := { + { + id := "extension-access-info", + paramValue := { tokenOrHost := "192.1.1.20" } + } + } + } + + template(value) PAssertedService m_pAssertedService( + template(value) PAssertedServiceValue p_pAssertedServiceValue + ) := { + fieldName := P_ASSERTED_SERVICE_E, + pAssertedServiceValue := p_pAssertedServiceValue + } + + template(value) PChargingFunctionAddresses m_pChargingFunctionAddresses_fixedValue := { + fieldName := P_CHARGING_FUNCTION_ADDRESSES_E, + chargeAddrParams := { + { + id := "ccf", + paramValue := { tokenOrHost := "192.1.1.1" } + }, // value is fixed because it is deleted on proxy + { + id := "ecf", + paramValue := { tokenOrHost := "192.1.1.2" } + } // value is fixed because it is deleted on proxy + } + } + + template(value) PChargingVector m_pChargingVector( + template(value) charstring p_icidValue, + template(omit) SemicolonParam_List p_chargeParams := omit + ) modifies m_pChargingVector_icid_TS := { + icidValue := p_icidValue, + chargeParams := p_chargeParams + } + + // NOTE STF471 change: icidValue extracted from chargeParams, chargeParams removed + template(value) PChargingVector m_pChargingVector_icid_TS := { + fieldName := P_CHARGING_VECTOR_E, + icidValue := c_icid_value, + chargeParams := omit + } + + template(value) PChargingVector m_pChargingVector_origIoi_fixedValue( + template(value) GenValue p_homeDomain + ) modifies m_pChargingVector_icid_TS := { + chargeParams := { + { + id := c_icid_generated_at, + paramValue := { tokenOrHost := "192.1.1.10" } + }, + { + id := c_orig_ioi, + paramValue := p_homeDomain + } + } + } + + template(value) PChargingVector m_pChargingVector_termIoi_fixedValue( + template(value) GenValue p_homeDomain + ) modifies m_pChargingVector_icid_TS := { + chargeParams := { + { + id := c_icid_generated_at, + paramValue := { tokenOrHost := "192.1.1.10" } + }, + { + id := c_term_ioi, + paramValue := p_homeDomain + } + } + } + + template(value) PChargingVector m_pChargingVector_accessNetwInfo( + template(value) GenValue p_homeDomain + ) modifies m_pChargingVector_icid_TS := { + chargeParams := { + { + id := c_term_ioi, + paramValue := p_homeDomain + }, + { + id := c_access_network_charging_info, + paramValue := { tokenOrHost := "192.1.1.10" } + } + } + } + + // NOTE STF471 change: icidValue added + template(present) PChargingVector mw_pChargingVector( + template(present) charstring p_id := ?, + template GenValue p_paramValue + ) := { + fieldName := P_CHARGING_VECTOR_E, + icidValue := ?, + chargeParams := + superset( + { + id := p_id, + paramValue := p_paramValue + } + ) + } + + template(value) PMediaAuthorization m_pMediaAuthorization_fixedValue := { + fieldName := P_MEDIA_AUTHORIZATION_E, + pMediaAuthorizations := {"A"} // example + } + + + template(value) PEarlyMedia m_pEarlyMedia_sup := { + fieldName := P_EARLY_MEDIA_E, + em_param := {"supported"} + } + + + template(value) ProxyRequire m_proxyRequire_secAgree := { + fieldName := PROXY_REQUIRE_E, + optionsTags := {"sec-agree"} + } + + template(value) PVisitedNetworkID m_pVisitedNetworkID_TS := { + fieldName := P_VISITED_NETWORK_E, + vNetWorkSpec := { + { + vNetworkSpecToken := "Visited ETSI 1", + genericParams := omit + } + } + } + + template(present) PVisitedNetworkID mw_pVisitedNetworkID( + template(present) charstring p_vNetworkSpecToken + ) modifies m_pVisitedNetworkID_TS := { + vNetWorkSpec := { + { + vNetworkSpecToken := p_vNetworkSpecToken, + genericParams := * + } + } + } + + template(value) RecordRoute m_recordRoute_notmatching := { + fieldName := RECORD_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, // contains "sip" + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unknown", + password := omit + }, + hostPort := { + host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + } + } + + template(value) Require m_require := { + fieldName := REQUIRE_E, + optionsTags := {} + } + + template(value) Require m_require_secAgree + modifies m_require := { + optionsTags := {"sec-agree"} + } + + template(present) Require mw_require_path + modifies m_require := { + optionsTags := superset("path") + } + + template(value) Route m_route_interface( + template(value) ImsInterfaceProfile p_interfaceprofile + ) modifies m_route_notmatching := { + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, // contains "sip" + components := { + sip := { + userInfo := omit, + hostPort := { + host := p_interfaceprofile.SUTHomeDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + } + } + + template(value) Route m_route_notmatching := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, // contains "sip" + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unknown", + password := omit + }, + hostPort := { + host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + } + } + + + template(value) SessionExpires m_se( + template(value) DeltaSec p_ds + ) modifies mw_se := { + deltaSec := p_ds + } + + template(present) SessionExpires mw_se := { + fieldName := SESSION_EXPIRES_E, + deltaSec := ?, + seParam := omit + } + + template(value) Supported m_supported := { + fieldName := SUPPORTED_E, + optionsTags := {} + } + + template(value) Supported m_supported_timer + modifies m_supported := { + optionsTags := {"timer"} + } + + template(value) Supported m_supported_histinfo + modifies m_supported := { + optionsTags := {"histinfo"} + } + + + template(value) Supported m_supported_fromChange + modifies m_supported := { + optionsTags := {"from-change"} + } + + template(value) To m_To_targetRefreshRequest( + template(value) To p_To + ) := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := p_To.addressField.nameAddr.displayName, + addrSpec := p_To.addressField.nameAddr.addrSpec + } + }, // end addressField + toParams := { + { + id := c_tagId, + paramValue := { tokenOrHost := f_getRndTag() } + } + } + } + + template(value) ViaBody m_ViaBody_virtualUEinPCSCF( + template(value) charstring p_branch_val, + template(value) SipUserProfile p_userprofile + ) := { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy := { + host := p_userprofile.contactIpaddr, + portField := p_userprofile.contactPort + }, + viaParams := { + { + id := c_branchId, + paramValue := { + tokenOrHost := p_branch_val + } + } + } + } + + template(value) ViaBody m_ViaBody_virtual_XCSCF( + template(value) charstring p_branch_val, + template(value) SipUserProfile p_userprofile + ) modifies m_ViaBody_virtualUEinPCSCF := { + sentBy := { + host := p_userprofile.currIpaddr, + portField := p_userprofile.currPort + } + } + + template(value) Via m_via_notmatching := { + fieldName := VIA_E, + viaBody := { + { + sentProtocol := m_SentProtocol("UDP"), + sentBy := { + host := "unknown.domain.name", + portField := 10000 + }, + viaParams := { + { + id := c_branchId, + paramValue := { tokenOrHost := "abcd0000" } + } + } + } + } + } + + /** + * @desc WWW-Authenticate header field + * @param p_challenge value + */ + template(value) WwwAuthenticate m_wwwAuthenticate( + template(value) Challenge p_challenge + ) := { + fieldName := WWW_AUTHENTICATE_E, + challenge := p_challenge + } + + /** + * @desc WWW-Authenticate header field + * @param p_challenge value + */ + template(present) WwwAuthenticate mw_wwwAuthenticate( + template(present) SemicolonParam_List p_semicolonParam_List := ? + ) := { + fieldName := WWW_AUTHENTICATE_E, + challenge := { + digestCln := p_semicolonParam_List // set of GenericParam + } + } + + template(present) SemicolonParam_List mw_challenge := superset(mw_ck, mw_ik); + + template(present) GenericParam mw_ck := { + "ck", * + } + + template(present) GenericParam mw_ik := { + "ik", * + } + + /** + * @desc AcceptContact header field + * @param p_semicolonParam_List value + */ + template(value) AcceptContact m_acceptContact( + template(omit) SemicolonParam_List p_semicolonParam_List := omit + ) := { + fieldName := ACCEPT_CONTACT_E, + acValues := { + { + wildcard := c_WILDCARD, + acRcParams := p_semicolonParam_List // set of GenericParam + } + } + } + + /** + * @desc Authenticate header field + * @param p_semicolonParam_List value + */ + template(present) AcceptContact mw_acceptContact( + template SemicolonParam_List p_semicolonParam_List + ) := { + fieldName := ACCEPT_CONTACT_E, + acValues := { + { + wildcard := c_WILDCARD, + acRcParams := p_semicolonParam_List // set of GenericParam + } + } + } + + template(present) SubscriptionState mw_subscriptionState( + template(present) charstring p_state := ? + ) := { + fieldName := SUBSCRIPTION_STATE_E, + subState := p_state, + substateParams := omit + } + + // [3455/5.1 ] + template(value) PAssociatedURI m_pAssociatedURI( + template(value) NameAddr p_nameAddr + ) := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := { + { + nameAddr := p_nameAddr, + genericParams := omit + } + } + } + + template(present) SecurityServer mw_securityServer( + template(present) SecurityMechanism_List p_securityMechanism_List := ? + ) := { + fieldName := SECURITY_SERVER_E, + securityMech := p_securityMechanism_List + } + + template(value) SecurityClient m_securityClient( + template(value) SecurityMechanism_List p_securityMechanism_List + ) := { + fieldName := SECURITY_CLIENT_E, + securityMech := p_securityMechanism_List + } + + template(value) SecurityVerify m_securityVerify( + template(value) SecurityMechanism_List p_securityMechanism_List + ) := { + fieldName := SECURITY_VERIFY_E, + securityMech := p_securityMechanism_List + } + + template(value) RSeq m_rseq9999 := { + fieldName := RSEQ_E, + responseNum := 9999 // Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + } + + template(value) Expires m_expires( + template(value) integer p_deltaSec + ) := { + fieldName := EXPIRES_E, + deltaSec := int2str(valueof(p_deltaSec)) + } + + + } // end group headerFieldTemplates + + group messageBodyTemplates { + + group xmlTemplates { + + template(value) XmlBody m_XmlBody_ConfInfo( + template(value) Conference_type p_confInfo + ) := { + conference := p_confInfo + } + + template(value) XmlBody m_XmlBody_CW( + template(value) Ims_cw p_cw + ) := { + cw := p_cw + } + + template(value) XmlBody m_XmlBody_CUG( + template(value) Cug p_cug + ) := { + cug := p_cug + } + + template(value) XmlBody m_XmlBody_MCID( + template(value) Mcid p_mcid + ) := { + mcid := p_mcid + } + + template(value) XmlBody m_XmlBody_PSTNTransit( + template(value) PSTN_transit p_pstn + ) := { + pstnTransit := p_pstn + } + + template(value) XmlBody m_XmlBody_simservs( + template(value) Simservs p_simservs + ) := { + simservs := p_simservs + } + + template(value) XmlBody m_XmlBody_ACR_ICB( + template(value) Incoming_communication_barring p_icb + ) := { + simservs := { + attr := omit, + //absServiceGroup_list := {}, + extensions := { + elem_list := valueof(p_icb.attr) + } + } + } + + template(value) XmlBody m_XmlBody_ACR_OCB( + template(value) Outgoing_communication_barring p_ocb + ) := { + simservs := { + attr := omit, + //absServiceGroup_list := {}, + extensions := { + elem_list := valueof(p_ocb.attr) + } + } + } + + template(value) XmlBody m_XmlBody_CDIVN( + template(value) Comm_div_info_type p_cdivn + ) := { + cdivn := p_cdivn + } + + template(value) XmlBody m_XmlBody_Reginfo( + template(value) Reginfo p_regInfo + ) := { + regInfo := p_regInfo + } + + template(value) XmlBody m_XmlBody_Presence( + template(value) Presence p_presence + ) := { + presence := p_presence + } + + template(value) MessageBody m_messageBodyXML( + template(value) XmlBody p_xmlBody + ) := { + xmlBody := p_xmlBody + } + + template(value) Reginfo m_reginfo( + template(value) XSD.AnyURI p_user + ) := { + full, + 0, + {m_registration(p_user)}, + {} + } + + template(value) Registration m_registration( + template(value) XSD.AnyURI p_user + ) := { + p_user, // XSD.anyURI aor + "a7", // XSD.string id + init, // enumerated {active,init,terminated} state, + {}, // record of Contact contact_list optional, + {} // record of anytype elem_list optional + } + + template(present) XmlBody mw_XmlBody_ConfInfo( + template(present) Conference_type p_confInfo := ? + ) := { + conference := p_confInfo + } + + template(present) XmlBody mw_XmlBody_CUG( + template(present) Cug p_cug := ? + ) := { + cug := p_cug + } + + template(present) XmlBody mw_XmlBody_MCID( + template(present) Mcid p_mcid := ? + ) := {mcid := p_mcid} + + template(present) XmlBody mw_XmlBody_PSTNTransit( + template(present) PSTN_transit p_pstn := ? + ) := { + pstnTransit := p_pstn + } + + template(present) XmlBody mw_XmlBody_CDIVN( + template(present) Comm_div_info_type p_cdivn := ? + ) := { + cdivn := p_cdivn + } + + template(present) XmlBody mw_XmlBody_simservs( + template(present) Simservs p_simservs := ? + ) := { + simservs := p_simservs + } + + template(present) XmlBody mw_XmlBody_ResourceLists( + template(present) Resource_lists p_resourceLists := ? + ) := { + resourceLists := p_resourceLists + } + + template(present) XmlBody mw_XmlBody_Reginfo( + template(present) Reginfo p_regInfo := ? + ) := { + regInfo := p_regInfo + } + + template(present) MessageBody mw_messageBodyXML( + template(present) XmlBody p_xmlBody := ? + ) := { + xmlBody := p_xmlBody + } + + + } // end group xmlTemplates + + group acrCbTemplates { + + template(value) Incoming_communication_barring m_ICB( + template(value) RuleType p_ruleType + ) := { + active := omit, + attr := omit, + ruleset := { + {p_ruleType} + } + } + + template(value) Outgoing_communication_barring m_OCB( + template(value) RuleType p_ruleType + ) := { + active := omit, + attr := omit, + ruleset := { + {p_ruleType} + } + } + + template(value) RuleType m_ruleType_actionFalse( + template(value) ConditionsType p_condition + ) := { + id := "rule66", + conditions := p_condition, + actions := { + elem_list := {""} + }, + transformations := omit + } + + template(value) ConditionsType m_conditionsType_identity( + template(value) charstring p_id + ) := { + { + { + identity_list := { + { + { + { + one := { + id := p_id, + elem := omit + } + } + } + } + } + } + } + } + + + } // end group acr_cbTemplates + + group cugTemplates { + + template(value) Cug m_CUG( + template(omit) CugRequestType p_crt := omit, + template(omit) NetworkIdentityType p_nit := omit, + template(omit) SixteenbitType p_cibc := omit, + template(omit) TwobitType p_cci := omit + ) := { + active := omit, + attr := omit, + cugCallOperation := p_crt, + networkIndicator := p_nit, + cugInterlockBinaryCode := p_cibc, + cugCommunicationIndicator := p_cci + } + + template(present) Cug mw_CUG( + template CugRequestType p_crt, + template NetworkIdentityType p_nit, + template SixteenbitType p_cibc, + template TwobitType p_cci + ) := { + active := omit, + attr := *, + cugCallOperation := p_crt, + networkIndicator := p_nit, + cugInterlockBinaryCode := p_cibc, + cugCommunicationIndicator := p_cci + } + + template(value) CugRequestType m_cugReqType( + template(value) boolean p_outAccessRequest, + template(value) CugIndexType p_cugIndex + ) := { + outgoingAccessRequest := p_outAccessRequest, + cugIndex := p_cugIndex + } + + template(present) CugRequestType mw_cugReqType( + template(present) boolean p_outAccessRequest := ?, + template(present) CugIndexType p_cugIndex := ? + ) := { + outgoingAccessRequest := p_outAccessRequest, + cugIndex := p_cugIndex + } + + } // end group cugTemplates + + group cwTemplates { + + template(value) Ims_cw m_CW( + template(value) TEmptyType p_cwi + ) := { + attr := omit, + communication_waiting_indication := p_cwi, + elem_list := {} + } + + template(present) Ims_cw mw_ims_cw( + template(present) TEmptyType p_cwi := ? + ) := { + attr := *, + communication_waiting_indication := p_cwi, + elem_list := ? + } + + } // end group cwTemplates + + group mcidTemplates { + + template(value) Mcid m_mcid_request_mcidIndicatorTrue := { + choice := { + request := { + mcidRequestIndicator := "1", + holdingIndicator := "0" + } + } + } + + template(value) Mcid m_mcid_request_mcidIndicatorTrue_holdIndTrue + modifies m_mcid_request_mcidIndicatorTrue := { + choice := { + request := { + holdingIndicator := "1" + } + } + } + + template(present) Mcid mw_mcid_request_mcidIndicatorTrue + modifies m_mcid_request_mcidIndicatorTrue := { + choice := { + request := { + holdingIndicator := ? + } + } + } + + template(value) Mcid m_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + mcidResponseIndicator := "1", + holdingProvidedIndicator := "0" + } + } + } + + template(present) Mcid mw_mcid_response_mcidIndicatorTrue + modifies m_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + holdingProvidedIndicator := ? + } + } + } + + template(present) Mcid mw_mcid_response_mcidIndicatorTrue_holdProvIndFalse + modifies mw_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + holdingProvidedIndicator := "0" + } + } + } + + template(present) Mcid mw_mcid_response_mcidIndicatorTrue_holdProvIndTrue + modifies mw_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + holdingProvidedIndicator := "1" + } + } + } + + } // end group mcidTemplates + + group pstnTemplates { + + template(value) PSTN_transit m_PSTN_transit_BC1( + template(value) BearerCapabilityType p_bct + ) := { + bearerInfomationElement_list := {p_bct}, + highLayerCompatibility_list := {}, + lowLayerCompatibility := omit, + progressIndicator_list := {}, + display_list := {} + } + + template(value) PSTN_transit m_PSTN_transit_BC2( + template(value) BearerCapabilityType p_bct, + template(value) BearerCapabilityType p_bct2 + ) modifies m_PSTN_transit_BC1 := { + bearerInfomationElement_list := {p_bct, p_bct2} + } + + template(present) PSTN_transit mw_PSTN_transit_bc( + template(present) BearerCapabilityType p_bct := ?, + template(present) BearerCapabilityType p_bct2 := ? + ) := { + bearerInfomationElement_list := {p_bct, p_bct2}, + highLayerCompatibility_list := {*, *}, + lowLayerCompatibility := *, + progressIndicator_list := ?, + display_list := ? + } + + template(value) PSTN_transit m_PSTN_transit_BC1_HLC1( + template(value) BearerCapabilityType p_bct, + template(value) HighLayerCompatibilityType p_hlc + ) modifies m_PSTN_transit_BC1 := { + highLayerCompatibility_list := {p_hlc} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_HLC2( + template(value) BearerCapabilityType p_bct, + template(value) HighLayerCompatibilityType p_hlc, + template(value) HighLayerCompatibilityType p_hlc2 + ) modifies m_PSTN_transit_BC1_HLC1 := { + highLayerCompatibility_list := {p_hlc, p_hlc2} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_LLC( + template(value) BearerCapabilityType p_bct, + template(value) LowLayerCompatibilityType p_llc + ) modifies m_PSTN_transit_BC1 := { + lowLayerCompatibility := p_llc + } + + template(value) PSTN_transit m_PSTN_transit_BC1_PI1( + template(value) BearerCapabilityType p_bct, + template(value) ProgressIndicatorType p_pi1 + ) modifies m_PSTN_transit_BC1 := { + progressIndicator_list := {p_pi1} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_PI2( + template(value) BearerCapabilityType p_bct, + template(value) ProgressIndicatorType p_pi1, + template(value) ProgressIndicatorType p_pi2 + ) modifies m_PSTN_transit_BC1_PI1 := { + progressIndicator_list := {p_pi1, p_pi2} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_PI3( + template(value) BearerCapabilityType p_bct, + template(value) ProgressIndicatorType p_pi1, + template(value) ProgressIndicatorType p_pi2, + template(value) ProgressIndicatorType p_pi3 + ) modifies m_PSTN_transit_BC1_PI2 := { + progressIndicator_list := {p_pi1, p_pi2, p_pi3} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_HLC1_PI1( + template(value) BearerCapabilityType p_bct, + template(value) HighLayerCompatibilityType p_hlc, + template(value) ProgressIndicatorType p_pi1 + ) modifies m_PSTN_transit_BC1_HLC1 := { + progressIndicator_list := {p_pi1} + } + + template(value) BearerCapabilityType m_BearerCapabilityType( + template(value) Bit5 p_InfoTrfCap + ) := { + bCoctet3 := { + codingStandard := "00", // Coding standard = CCITT standardized coding + informationTransferCabability := bit2str(valueof(p_InfoTrfCap)) // Information transfer capability + }, + bCoctet4 := { + transferMode := "00", // Coding standard = CCITT standardized coding + informationTransferRate := "10000" // Information transfer rate = 64 kbit/s + }, + bCoctet4_1 := omit, + bCoctet5 := omit, + bCoctet5a := omit, + bCoctet5bV110 := omit, + bCoctet5bV120 := omit, + bCoctet5c := omit, + bCoctet5d := omit, + bCoctet6 := omit, + bCoctet7 := omit, + bCoctet7a := omit, + bCoctet7b := omit + } + + template(present) BearerCapabilityType mw_BearerCapabilityType( + template(present) BCOctet3Type p_BCOctet3Type := ?, + template(present) BCOctet4Type p_BCOctet4Type := ? + ) := { + bCoctet3 := p_BCOctet3Type, + bCoctet4 := p_BCOctet4Type, + bCoctet4_1 := *, + bCoctet5 := *, + bCoctet5a := *, + bCoctet5bV110 := *, + bCoctet5bV120 := *, + bCoctet5c := *, + bCoctet5d := *, + bCoctet6 := *, + bCoctet7 := *, + bCoctet7a := *, + bCoctet7b := * + } + + template(present) BearerCapabilityType mw_BearerCapabilityType_TrfCap( + template(value) Bit5 p_InfoTrfCap + ) modifies m_BearerCapabilityType := { + bCoctet4_1 := *, + bCoctet5 := *, + bCoctet5a := *, + bCoctet5bV110 := *, + bCoctet5bV120 := *, + bCoctet5c := *, + bCoctet5d := *, + bCoctet6 := *, + bCoctet7 := *, + bCoctet7a := *, + bCoctet7b := * + } + + template(value) ProgressIndicatorType m_ProgressIndicatorType( + template(value) Bit7 p_progDesc + ) := { + progressOctet3 := { + codingStandard := "00", + location := "0000" + }, + progressOctet4 := { + progressDescription := bit2str(valueof(p_progDesc)) + } + } + + template(present) ProgressIndicatorType mw_ProgressIndicatorType( + template(present) ProgressOctet3Type p_ProgressOctet3Type := ?, + template(present) ProgressOctet4Type p_ProgressOctet4Type := ? + ) := { + progressOctet3 := p_ProgressOctet3Type, + progressOctet4 := p_ProgressOctet4Type + } + + template(value) LowLayerCompatibilityType m_LowLayerCompatibilityType( + template(value) Bit5 p_InfoTrfCap + ) := { + lLOctet3 := { + codingStandard := "00", // Coding standard = CCITT standardized coding + informationTransferCapability := bit2str(valueof(p_InfoTrfCap)) // Information transfer capability + }, + lLOctet3a := omit, + lLOctet4 := { + transferMode := "00", // Coding standard = CCITT standardized coding + informationTransferRate := "10000" // Information transfer rate = 64 kbit/s + }, + lLOctet4_1 := omit, + lLOctet5 := omit, + lLOctet5a := omit, + lLOctet5bV110 := omit, + lLOctet5bV120 := omit, + lLOctet5c := omit, + lLOctet5d := omit, + lLOctet6 := omit, + lLOctet6aHDLC := omit, + lLOctet6aUserSpecific := omit, + lLOctet6b := omit, + lLOctet7 := { + layer3Identification := "11", + userInfoLayer3Protocol := "00010" + }, + lLOctet7aUserSpecific := omit, + lLOctet7aX25 := omit, + lLOctet7bX25 := omit, + lLOctet7c := omit, + lLOctet7aTR9577 := omit, + lLOctet7bTR9577 := omit + } + + template(present) LowLayerCompatibilityType mw_LowLayerCompatibilityType( + template(present) LLOctet3Type p_LLOctet3 := ?, + template(present) LLOctet4Type p_LLOctet4 := ?, + template(present) LLOctet7Type p_LLOctet7 := ? + ) := { + lLOctet3 := p_LLOctet3, + lLOctet3a := *, + lLOctet4 := p_LLOctet4, + lLOctet4_1 := *, + lLOctet5 := *, + lLOctet5a := *, + lLOctet5bV110 := *, + lLOctet5bV120 := *, + lLOctet5c := *, + lLOctet5d := *, + lLOctet6 := *, + lLOctet6aHDLC := *, + lLOctet6aUserSpecific := *, + lLOctet6b := *, + lLOctet7 := p_LLOctet7, + lLOctet7aUserSpecific := *, + lLOctet7aX25 := *, + lLOctet7bX25 := *, + lLOctet7c := *, + lLOctet7aTR9577 := *, + lLOctet7bTR9577 := * + } + + template(value) HighLayerCompatibilityType m_HighLayerCompatibilityType( + template(value) Bit7 p_HLOctet4 + ) := { + hLOctet3 := { + codingStandard := "00", + interpretation := "100", + presentationMethod := "01" + }, + hLOctet4 := { + highLayerCharacteristics := bit2str(valueof(p_HLOctet4)) + }, + hLOctet4aMaintenance := omit, + hLOctet4Audio := omit + } + + template(present) HighLayerCompatibilityType mw_HighLayerCompatibilityType( + template(present) HLOctet3Type p_HLOctet3 := ?, + template(present) HLOctet4Type p_HLOctet4 := ? + ) := { + hLOctet3 := p_HLOctet3, + hLOctet4 := p_HLOctet4, + hLOctet4aMaintenance := *, + hLOctet4Audio := * + } + + } // end group pstnTemplates + + group cdivnTemplates { + + /* general CDIVN subscription */ + template(value) Comm_div_info_type m_CDIVN_sub := { + entity := "comm-div-info", + comm_div_subs_info := { + attr := omit, + comm_div_selection_criteria := { + attr := omit, + originating_user_selection_criteria := omit, + diverting_user_selection_criteria := omit, + diverted_to_user_selection_criteria := omit, + diversion_time_selection_criteria := omit, + diversion_reason_selection_criteria := omit, + elem_list := {} + }, + comm_div_ntfy_trigger_criteria := omit, + comm_div_info_selection_criteria := omit, + elem_list := {} + }, + comm_div_ntfy_info := omit, + elem_list := {} + } + + } // end group cdivnTemplates + + group resourceListsTemplates { + + template(value) Resource_lists m_ResourceList_2Users( + template(value) EntryType p_user1, + template(value) EntryType p_user2 + ) := { + sequence_list := { + { + list := { + name := omit, + attr := omit, + display_name := omit, + sequence_list := { + { + choice := { + entry := p_user1 + } + }, + { + choice := { + entry := p_user2 + } + } + }, + elem_list := {} + } + } + } + } + + template(value) EntryType m_EntryUser( + template(value) SipUrl p_user + ) := { + uri := + valueof(p_user.components.sip.userInfo.userOrTelephoneSubscriber) + & "@" + & valueof(p_user.components.sip.hostPort.host), + attr := omit, + display_name := omit, + elem_list := {} + } + + } // end group resourceListsTemplates + + group ims3GppTemplates { + + template(present) TIMS3GPP mw_Ims_3gpp_CW := { + version := 1.0, + attr := *, + choice := { + alternative_service := { + attr := *, + type_ := ?, + reason := ?, + elem_list := ? + } + }, + elem_list := ? + } + + } // end group ims3gppTemplates + + group confTemplates { + + template(value) XSD.Boolean m_boolXSD_true := true; + + template(value) XSD.Boolean m_boolXSD_false := false; + + template(value) urn_ietf_params_xml_ns_conference_info.Media_type m_mediatype_status( + template(value) Media_status_type p_status + ) := { + id := "1", + attr := omit, + display_text := omit, + type_ := omit, + label_ := omit, + src_id := omit, + status := p_status, + elem_list := {} + } + + template(value) Endpoint_type m_endpoint( + template(omit) charstring p_Uri := omit, + template(omit) Endpoint_status_type p_epStatus := omit, + template(omit) Joining_type p_joinMethod := omit, + template(omit) Disconnection_type p_discMethod := omit, + template(value) urn_ietf_params_xml_ns_conference_info.Media_type p_mediastatus + ) := { + entity := p_Uri, + state := full, + attr := omit, + display_text := omit, + referred := omit, + status := p_epStatus, + joining_method := p_joinMethod, + joining_info := omit, + disconnection_method := p_discMethod, + disconnection_info := omit, + media_list := {p_mediastatus}, // optional, + call_info := omit, + elem_list := {} + } + + template(value) User_type m_1user( + template(omit) charstring p_Uri := omit, + template(value) Endpoint_type p_endpoint + ) := { + entity := p_Uri, + state := full, + attr := omit, + display_text := omit, + associated_aors := omit, + roles := omit, + languages := omit, + cascaded_focus := omit, + endpoint_list := {p_endpoint}, // optional, + elem_list := {} + } + + template(value) Users_type m_users_1user_full( + template(value) User_type p_user + ) := { + state := full, + attr := omit, + user_list := {p_user}, + elem_list := {} + } + + template(value) Users_type m_users_2user_full( + template(value) User_type p_user, + template(value) User_type p_user2 + ) modifies m_users_1user_full := { + user_list := {p_user, p_user2} + } + + template(value) Conference_state_type m_conference_state( + template(value) UnsignedInt p_nUsers, + template(value) boolean p_active, + template(value) boolean p_locked + ) := { + attr := omit, + user_count := p_nUsers, + active := p_active, + locked := p_locked, + elem_list := {} + } + + template(value) Conference_type m_ci_cUri_cState_userEntity( + template(value) charstring p_cUri, + template(value) Conference_state_type p_cState, + template(value) Users_type p_users + ) := { + entity := p_cUri, + state := full, + version := 1, + attr := omit, + conference_description := omit, + host_info := omit, + conference_state := p_cState, + users := p_users, + sidebars_by_ref := omit, + sidebars_by_val := omit, + elem_list := {} + } + + template(present) Conference_type mw_conferenceInfo_active := { + entity := ?, + state := *, + version := *, + attr := *, + conference_description := *, + host_info := *, + conference_state := ?, + users := { + state := ?, + attr := *, + user_list := { + { + entity := *, + state := *, + attr := *, + display_text := *, + associated_aors := *, + roles := *, + languages := *, + cascaded_focus := *, + endpoint_list := { + { + entity := *, + state := *, + attr := *, + display_text := *, + referred := *, + status := connected, + joining_method := dialed_in, + joining_info := *, + disconnection_method := *, + disconnection_info := *, + media_list := ?, + call_info := *, + elem_list := ? + } + }, + elem_list := ? + } + }, + elem_list := ? + }, + sidebars_by_ref := *, + sidebars_by_val := *, + elem_list := ? + } + } + + } // end group messageBodyTemplates + + group messageTemplates { + + group modifiedTemplates { + + group requestSend { + + template(value) ACK_Request m_ACK_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_ACK_Request_Base := { + msgHeader := {route := p_route} + } + + template(value) ACK_Request m_ACK_Request_AS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit + ) modifies m_ACK_Request_IMS := { + msgHeader := { + route := p_route, + recordRoute := p_recordRoute + } + } + + template(value) ACK_Request m_ACK_Request_sdp_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb, + template(omit) Route p_route := omit + ) modifies m_ACK_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + route := p_route + }, + messageBody := p_mb + } + + template(value) ACK_Request m_ACK_Request_Mime_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) MessageBody p_mb, + template(omit) Route p_route := omit + ) modifies m_ACK_Request_Base := { + msgHeader := { + contentLength := { + fieldName := CONTENT_LENGTH_E, + len := f_MessageBodyLength(valueof(p_mb)) + }, + contentType := { + fieldName := CONTENT_TYPE_E/*, + mediaType := m_mimeMultipart*/ + }, + route := p_route + }, + messageBody := p_mb + } + + template(value) BYE_Request m_BYE_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit + ) modifies m_BYE_Request_Base := { + msgHeader := { + route := p_route, + recordRoute := p_recordRoute // used in case of AS as TS - for ISC interface + } + } // end of temlate m_BYE_Request_IMS + + template(value) BYE_Request m_BYE_Request_Reason_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(value) GenValue p_cause + ) modifies m_BYE_Request_Base := { + msgHeader := { + reason := mw_Reason(p_cause), + route := p_route + } + } + + template(value) BYE_Request m_BYE_Request_UserToUser_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_BYE_Request_Base := { + msgHeader := { + route := p_route, + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) BYE_Request m_BYE_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_BYE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + route := p_route + } + } + + template(value) CANCEL_Request m_CANCEL_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_CANCEL_Request_Base := { + msgHeader := {route := p_route} + } + + template(value) CANCEL_Request m_CANCEL_Request_Reason_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(value) integer p_cause + ) modifies m_CANCEL_Request_IMS := { + msgHeader := {reason := m_Reason(p_cause)} + } + + template(value) CANCEL_Request m_CANCEL_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_CANCEL_Request_IMS := { + } + + /** + * @desc INFO message + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_mb + */ + template(value) INFO_Request m_INFO_Request_IMS_Base( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)) + }, + messageBody := p_mb + } + + /** + * @desc INFO message + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_mb + */ + template(value) INFO_Request m_INFO_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_IMS_Base := { + msgHeader := { + contentType := m_contentType(c_sdpApplication) + } + } + + /** + * @desc INFO message + * @desc + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_mb + */ + template(value) INFO_Request m_INFO_Request_Mime_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_IMS_Base := { + msgHeader := { + contentType := m_contentType(m_mimeMultipart) + } + } + + template(value) INFO_Request m_INFO_Request_Xml_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_IMS_Base := { + msgHeader := { + contentType := m_contentType(c_xmlApplication) + } + } + + template(value) INVITE_Request m_INVITE_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) LibSip_SIPTypesAndValues.Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_noBody_UE := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) INVITE_Request m_INVITE_Request_noBody_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_INVITE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported + } + } + + template(value) INVITE_Request m_INVITE_Request_Allow_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) LibSip_SIPTypesAndValues.Allow p_allow + ) modifies m_INVITE_Request_UE := { + msgHeader := {allow := p_allow} + } + + template(value) INVITE_Request m_INVITE_Request_noBody_Allow_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) LibSip_SIPTypesAndValues.Allow p_allow + ) modifies m_INVITE_Request_noBody_UE := { + msgHeader := {allow := p_allow} + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_historyInfo + */ + template(value) INVITE_Request m_INVITE_Request_HistoryInfo_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) HistoryInfo p_historyInfo + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_Mime_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + contentType := m_contentType(m_mimeMultipart) + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + */ + template(value) INVITE_Request m_INVITE_Request_IMS_noBody( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit + ) modifies m_INVITE_Request_Base := { + msgHeader := { + require := p_require, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_pAssertedID + * @param p_privacy + */ + template(value) INVITE_Request m_INVITE_Request_Mime_PAsserted_Privacy_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy + ) modifies m_INVITE_Request_Mime_IMS := { + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_acceptContact + * @param p_pAssertedID + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_PAsserted_AcceptContact_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) AcceptContact p_acceptContact, + template(value) PAssertedID p_pAssertedID, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + acceptContact := p_acceptContact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_pAssertedID + * @param p_privacy + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_PAsserted_Privacy_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector, + privacy := p_privacy, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_pAssertedService + */ + template(value) INVITE_Request m_INVITE_Request_PAssertedService_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) PAssertedService p_pAssertedService + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pChargingVector := p_pChargingVector, + route := p_route, + supported := p_supported, + pAssertedService := p_pAssertedService + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_PEarlyMedia_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + pEarlyMedia := m_pEarlyMedia_sup + } + } + + template(value) INVITE_Request m_INVITE_Request_PPreferred_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) PPreferredID p_pPreferredID + ) modifies m_INVITE_Request_UE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) INVITE_Request m_INVITE_Request_PPreferred_Privacy_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) PPreferredID p_pPreferredID, + template(value) Privacy p_privacy + ) modifies m_INVITE_Request_UE := { + msgHeader := { + pPreferredID := p_pPreferredID, + privacy := p_privacy + } + } + + template(value) INVITE_Request m_INVITE_Request_SessionExpires_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) SessionExpires p_se + ) modifies m_INVITE_Request_UE := { + msgHeader := { + sessionExpires := p_se + } + } + + template(value) INVITE_Request m_INVITE_Request_minSE_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) MinSE p_minSE + ) modifies m_INVITE_Request_UE := { + msgHeader := { + minSE := p_minSE + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_minSE + */ + template(value) INVITE_Request m_INVITE_Request_minSE_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) MinSE p_minSE + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pChargingVector := p_pChargingVector, + route := p_route, + supported := p_supported, + minSE := p_minSE + }, + messageBody := p_mb + } + + template(value) INVITE_Request m_INVITE_Request_User2UserData_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_MBody_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb + ) modifies m_MESSAGE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_plainText), + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + template(value) MESSAGE_Request m_MESSAGE_Request_NoBody_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_MESSAGE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PCharging_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) GenValue p_homeDomain + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := m_pChargingVector_origIoi_fixedValue(p_homeDomain) + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PCharging_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pAccessNetworkInfo := omit, + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PMediaAuth_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pMediaAuthorization := m_pMediaAuthorization_fixedValue + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PPreferred_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) PPreferredID p_pPreferredID + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_1300Bytes_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(m_MBody_longPlainText)), + contentType := m_contentType(c_plainText) + }, + messageBody := m_MBody_longPlainText + } + + template(value) NOTIFY_Request m_NOTIFY_Request_Xml_IMS_Conference( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_NOTIFY_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_xmlApplication), + event := { + fieldName := EVENT_E, + eventType := "conference", + eventParams := omit + }, + subscriptionState := { + fieldName := SUBSCRIPTION_STATE_E, + subState := "active", + substateParams := omit + }, + expires := m_expires(3600) + }, + messageBody := p_mb + } + + template(value) NOTIFY_Request m_NOTIFY_Request_Xml_IMS_RegInfo( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_NOTIFY_Request_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_xmlreginfoApplication), + event := m_Event_reg, + subscriptionState := m_SubscriptionState_active, + expires := m_expires(3600) + }, + messageBody := p_mb + } + + template(value) PRACK_Request m_PRACK_Request_sdp( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) RAck p_RAck, + template(value) MessageBody p_mb + ) modifies m_PRACK_Request_Base := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + cSeq := m_cSeq(p_cSeq.seqNumber, "PRACK"), + fromField := p_from, + rAck := p_RAck, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + template(value) PUBLISH_Request m_PUBLISH_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Event p_event := omit, + template(omit) RAck p_RAck := omit, + template(value) MessageBody p_mb, + template(omit) Route p_route := omit + ) modifies m_PUBLISH_Request_Base := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_plainText /*c_sdpApplication*/), + cSeq := m_cSeq(p_cSeq.seqNumber, "PUBLISH"), + event := p_event, + fromField := p_from, + route := p_route, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + template(value) PUBLISH_Request m_PUBLISH_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Event p_event := omit, + template(omit) RAck p_RAck := omit, + template(value) MessageBody p_mb, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) PChargingVector p_pChargingVector := omit + ) modifies m_PUBLISH_Request_UE := { + msgHeader := { + recordRoute := p_recordRoute, + pChargingVector := p_pChargingVector + } + } + + /** + * @desc REFER message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_contact + * @param p_from + * @param p_to + * @param p_via + * @param p_referTo + * @param p_referredBy + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) REFER_Request m_REFER_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) ReferTo p_referTo, + template(omit) ReferredBy p_referredBy := omit, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_REFER_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + referredBy := p_referredBy, + referTo := p_referTo, + require := p_require, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + template(value) REGISTER_Request m_REGISTER_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(omit) ProxyRequire p_proxyRequire := omit, + template(omit) Require p_require := omit, + template(omit) SecurityClient p_securityClient := omit, + template(omit) SecurityVerify p_securityVerify := omit, + template(omit) Supported p_supported := omit + ) modifies m_REGISTER_Request_Base := { + requestLine := { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + proxyRequire := p_proxyRequire, + require := p_require, + securityClient := p_securityClient, + securityVerify := p_securityVerify, + supported := p_supported, + toField := p_to, + via := p_via + } + } + + + template(value) REGISTER_Request m_REGISTER_Request_IMS( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(value) charstring p_host, + template(value) integer p_port + ) modifies m_REGISTER_Request_Base := { + requestLine := { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + path := m_path_TS(p_host, p_port), + pChargingVector := m_pChargingVector_icid_TS, + pVisitedNetworkID := m_pVisitedNetworkID_TS, + require := { + fieldName := REQUIRE_E, + optionsTags := {"path"} + }, + toField := p_to, + via := p_via + } + } + + template(value) REGISTER_Request m_REGISTER_Request_IMS_3party( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(value) charstring p_host, + template(value) integer p_port, + template(omit) Path p_path := omit + ) modifies m_REGISTER_Request_IMS := { + msgHeader := {path := p_path} + } + + template(value) REGISTER_Request m_REGISTER_Request_expires_IMS( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(value) charstring p_host, + template(value) integer p_port, + template(value) DeltaSec p_deltaSec + ) modifies m_REGISTER_Request_IMS := { + msgHeader := { + expires := m_expires(str2int(valueof(p_deltaSec))) + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_UE( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Route p_route := omit + ) modifies m_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + contact := p_contact, + cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), + event := m_Event_reg, + expires := m_Expires_600000, + route := p_route + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_mb_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), + event := m_Event_reg, + expires := m_Expires_600000 + }, + messageBody := p_mb + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_mb_event_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb, + template(value) Event p_event, + template(value) charstring p_contentType + ) modifies m_SUBSCRIBE_Request_mb_UE := { + msgHeader := { + contentType := m_contentType(p_contentType), + event := p_event + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := { + contact := p_contact, + cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), + event := m_Event_reg, + expires := m_Expires_600000 + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_Event( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) Event p_event + ) modifies m_SUBSCRIBE_Request_IMS := { + msgHeader := { + event := p_event + } + } + + } // end group requestSend + + group requestReceive { + + template(present) ACK_Request mw_ACK_Request_noPaccessNetworkInfo( + template CallId p_callId + ) modifies mw_ACK_Request_Base := { + msgHeader := { + pAccessNetworkInfo := omit + } + } + + template(present) ACK_Request mw_ACK_Request_PchargingVector( + template CallId p_callId, + template(present) PChargingVector p_pChargingVector := ? + ) modifies mw_ACK_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector + } + } + + template(present) BYE_Request mw_BYE_Request_noPChargingFunction_UE( + template CallId p_callId + ) modifies mw_BYE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + template(present) BYE_Request mw_BYE_Request_via_PChargingVector_UE( + template CallId p_callId, + template(present) PChargingVector p_pChargingVector := ?, + template(present) Via p_via := ? + ) modifies mw_BYE_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector, + via := p_via + } + } + + template(present) BYE_Request mw_BYE_Request_via_UE( + template CallId p_callId, + template(present) Via p_via := ? + ) modifies mw_BYE_Request_Base := { + msgHeader := { + via := p_via + } + } + + template(present) BYE_Request mw_BYE_Request_route( + template CallId p_callId, + template(present) Route p_route := ? + ) modifies mw_BYE_Request_Base := { + msgHeader := { + route := p_route + } + } + + template(present) INVITE_Request mw_INVITE_Request_noPChargingFunction + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_PChargingFunction + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } + + template(present) INVITE_Request mw_INVITE_Request_NoPCharging + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_NoPChargingPreferred + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit, + pPreferredID := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_PAsserted_noPPreferred( + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_PAsserted_AcceptContact( + template(present) PAssertedID p_pAssertedID := ?, + template(present) AcceptContact p_acceptContact := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + acceptContact := p_acceptContact + } + } + + template(present) INVITE_Request mw_INVITE_Request_RecordRoute_Via( + template(present) RecordRoute p_recordRoute := ?, + template(present) Via p_via := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + recordRoute := p_recordRoute, + via := p_via + } + } + + template(present) INVITE_Request mw_INVITE_Request_route( + template(present) Route p_route := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := p_route + } + } + + template(present) INVITE_Request mw_INVITE_Request_require( + template(present) Require p_require := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + require := p_require + } + } + + template(present) INVITE_Request mw_INVITE_Request_supported( + template(present) Supported p_supported := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + supported := p_supported + } + } + + template(present) INVITE_Request mw_INVITE_Request_SessionExpires( + template(present) SessionExpires p_sessionExpires := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + sessionExpires := p_sessionExpires + } + } + + template(present) INVITE_Request mw_INVITE_Request_User2UserData( + template(present) UserToUser.uuiData p_U2UData := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + userToUser := mw_UserToUserData(p_U2UData) + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_requestLine( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) SipUrl p_requestUri := ? + ) modifies mw_INVITE_Request_IMS := { + requestLine := { + requestUri := p_requestUri + }, + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_PAsserted_noPPreferred( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_INVITE_Request_IMS := { + msgHeader := { + pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_mb( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via + ) modifies mw_INVITE_Request_IMS := { + messageBody := ? + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_cug( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) Cug p_cug := ? + ) modifies mw_INVITE_Request_IMS := { + messageBody := ( + mw_MBody_XML(mw_XmlBody_CUG(p_cug)), + mw_MBody_MIMESdpXml(?, mw_XmlBody_CUG(p_cug)) + ) + } + + /* TITAN compiler error: Restriction on template formal parameter does not allow usage of complemented list match without omit or AnyValueOrNone in the list + template(present) INVITE_Request mw_INVITE_Request_IMS_noCug( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via + ) modifies mw_INVITE_Request_IMS := { + messageBody := ( + mw_MBody_XML(complement(mw_XmlBody_CUG(?))), + mw_MBody_MIMESdpXml(?, complement(mw_XmlBody_CUG(?))) + ) + }*/ + + template(present) INVITE_Request mw_INVITE_Request_IMS_pstn( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) PSTN_transit p_pstn := ? + ) modifies mw_INVITE_Request_IMS := { + messageBody := ( + mw_MBody_XML(mw_XmlBody_PSTNTransit(p_pstn)), + mw_MBody_MIMESdpXml(?, mw_XmlBody_PSTNTransit(p_pstn)) + ) + } + + /** + * @desc Await INVITE using topology hiding + */ + template(present) INVITE_Request mw_INVITE_Request_TH + modifies mw_INVITE_Request_TH_R10 := { + msgHeader := { + pChargingVector := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_TH_R10 + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * @desc Await INVITE without PAsserted and Privacy + * @param p_from + */ + template(present) INVITE_Request mw_INVITE_Request_noPasserted_noPrivacy( + template From p_from + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + pAssertedID := omit, + pPreferredID := omit + } + } + + + /** + * @desc Await INVITE with PAsserted and Privacy + * @param p_from + * @param p_pAssertedID + * @param p_privacy + */ + template(present) INVITE_Request mw_INVITE_Request_PassertedPrivacy( + template From p_from, + template(present) PAssertedID p_pAssertedID := ?, + template(present) Privacy p_privacy := ? + ) modifies mw_INVITE_Request_noPasserted_noPrivacy := { + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy + } + } + + /** + * @desc Await INVITE with PAsserted and Privacy + * @param p_from + * @param p_pAssertedID + * @param p_privacy + */ + template(present) INVITE_Request mw_INVITE_Request_Passerted_ifPrivacy( + template From p_from, + template PAssertedID p_pAssertedID, + template(present) Privacy p_privacy := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + pAssertedID := p_pAssertedID, + privacy := p_privacy ifpresent + } + } + + /** + * @desc Await INVITE with history info + * @param p_historyInfo + */ + template(present) INVITE_Request mw_INVITE_Request_HistoryInfo( + template(present) HistoryInfo p_historyInfo := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_UE + modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunctionPrefId_UE + modifies mw_MESSAGE_Request_noPchargingFunction_UE := { + msgHeader := { + pPreferredID := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_IMS := + mw_MESSAGE_Request_noPchargingFunction_UE; + + template(present) MESSAGE_Request mw_MESSAGE_Request_PAsserted_noPPreferred( + template CallId p_callId, + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + callId := p_callId, + pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_route( + template CallId p_callId, + template(present) Route p_route := ? + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + callId := p_callId, + route := p_route + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_via( + template CallId p_callId, + template(present) Via p_via := ? + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + callId := p_callId, + via := p_via + } + } + + template(present) NOTIFY_Request mw_NOTIFY_Request( + template CallId p_callId, + template(present) charstring p_state := ?, + template(present) charstring p_contentType := ?, + template Event p_event, + template MessageBody p_mb + ) modifies mw_NOTIFY_Request_Base := { + msgHeader := { + subscriptionState := mw_subscriptionState(p_state), + contentType := mw_contentType(p_contentType), + event := p_event + }, + messageBody := p_mb + } + + template(present) PRACK_Request mw_PRACK_Request_sdp( + template CallId p_callId, + template MessageBody p_mb + ) modifies mw_PRACK_Request_Base := { + msgHeader := { + callId := p_callId + }, + messageBody := p_mb + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_PchargingVector( + template(present) charstring p_id := ?, + template GenValue p_paramValue + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingVector := mw_pChargingVector(p_id, p_paramValue) + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPaccessNetworkInfo + modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPMediaAuthorization + modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pMediaAuthorization := omit + } + } + + template(present) PUBLISH_Request mw_PUBLISH_Request_PchargingVector( + template CallId p_callId, + template(present) PChargingVector p_pChargingVector := ? + ) modifies mw_PUBLISH_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector + } + } + + template(present) REGISTER_Request mw_REGISTER_Request_IMS( + template Path p_Path, + template PChargingVector p_pChargingVector, + template PVisitedNetworkID p_pVisitedNetworkID + ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path, + securityClient := omit, + securityVerify := omit + } + } + + template(present) REGISTER_Request mw_REGISTER_authorizedRequest_IMS( + template(present) Authorization p_authorization := ? + ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := p_authorization + } + } + + template(present) REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityclient_IMS( + template(present) Authorization p_authorization := ? + ) modifies mw_REGISTER_authorizedRequest_IMS := { + msgHeader := { + securityClient := omit + } + } + + template(present) REGISTER_Request mw_REGISTER_auth_via_nosecclient_IMS( + template(present) Authorization p_authorization := ?, + template(present) Via p_via + ) modifies mw_REGISTER_authorizedRequest_wo_securityclient_IMS := { + msgHeader := { + via := p_via + } + } + + template(present) REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityheaders_IMS + modifies mw_REGISTER_Request_Base := { + msgHeader := { + securityVerify := omit, + securityClient := omit + } + } + + template(present) REGISTER_Request mw_REGISTER_unauthorizedRequest_IMS + modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := * + } + } + + template(present) SUBSCRIBE_Request mw_SUBSCRIBE_Request_IMS( + template(present) From p_from := ?, + template(present) To p_to := ?, + template PAssertedID p_pAssertedID, + template PChargingVector p_pChargingVector + ) modifies mw_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg, + pAccessNetworkInfo := *, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector + } + } + + template(present) UPDATE_Request mw_UPDATE_Request_fromChange( + template CallId p_callId, + template(present) From p_from := ? + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + callId := p_callId, + fromField := p_from + } + } + + } // end group requestReceive + + group responseSend { + + group responseSend1xx { + + template(value) Response m_Response_18x_Base( + template(value) StatusLine_18x p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_18XonINVITE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact // mandatory field due to 24 229 rel 7.9 + } + } + + template(value) Response m_Response_18XonINVITE_AlertInfo( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) AlertInfo p_alertInfo + ) modifies m_Response_18x_Base := { + msgHeader := { + alertInfo := p_alertInfo + } + } + + template(value) Response m_Response_18XonINVITE_sdp_require( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb, + template(omit) Require p_require := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + rSeq := m_rseq9999 + }, + messageBody := p_mb + } + + template(value) Response m_Response_18XonINVITE_AS( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + recordRoute := p_recordRoute + } + } + + template(value) Response m_Response_18XonINVITE_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + rSeq := m_rseq9999 + } + } + + template(value) Response m_Response_18XonINVITE_HistoryInfo_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) HistoryInfo p_historyInfo + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + template(value) Response m_Response_18XonINVITE_PchargingVector( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + template(value) Response m_Response_18XonINVITE_pEearlyMedia( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PEarlyMedia p_pEarlyMedia + ) modifies m_Response_18x_Base := { + msgHeader := { + pEarlyMedia := p_pEarlyMedia + } + } + + template(value) Response m_Response_18XonINVITE_pPreferred_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PPreferredID p_pPreferredID + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) Response m_Response_18XonINVITE_pAsserted_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PAssertedID p_pAssertedID + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + pAssertedID := p_pAssertedID + } + } + + template(value) Response m_Response_18XonINVITE_pAsserted_privacy_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy + ) modifies m_Response_18XonINVITE_pAsserted_UE := { + msgHeader := { + privacy := p_privacy + } + } + + template(value) Response m_Response_18XonINVITE_privacy_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) Privacy p_privacy + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + privacy := p_privacy + } + } + + // NOTE STF471: changed order of parameter p_supported and p_privacy to be able to modify from m_Response_18XonINVITE_privacy_UE + template(value) Response m_Response_18XonINVITE_supported_privacy_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) Privacy p_privacy, + template(value) Supported p_supported + ) modifies m_Response_18XonINVITE_privacy_UE := { + msgHeader := { + supported := p_supported + } + } + + template(value) Response m_Response_18XonINVITE_recordRoute_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) RecordRoute p_recordRoute + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + recordRoute := p_recordRoute // for INVITE response + } + } + + template(value) Response m_Response_18XonINVITE_Require( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Require p_require + ) modifies m_Response_18x_Base := { + msgHeader := { + require := p_require + } + } + + // NOTE STF471: removed m_Response_18XonINVITE_Require_ifpresent as it is same as m_Response_18XonINVITE_Require + template(value) Response m_Response_18XonINVITE_UserToUser( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_Response_18x_Base := { + msgHeader := { + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) Response m_Response_18XonINVITE_Xml( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_xmlApplication) + }, + messageBody := p_mb + } + + template(value) Response m_Response_18XonINVITE_sdp_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_Response_18XonINVITE_Xml := { + msgHeader := { + contentType := m_contentType(c_sdpApplication) + } + } + + // NOTE STF471: changed order of parameter p_require and p_mb to be able to modify from m_Response_18XonINVITE_sdp_UE + template(value) Response m_Response_18XonINVITE_require_sdp_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb, + template(omit) Require p_require := omit, + template(omit) LibSip_SIPTypesAndValues.Allow p_allow := omit + ) modifies m_Response_18XonINVITE_sdp_UE := { + msgHeader := { + require := p_require, + allow := p_allow + } + } + + } // end group responseSend1xx + + group responseSend2xx { + + template(value) Response m_Response_2xx_Base( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_2xx_ext( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit + ) modifies m_Response_2xx_Base := { + msgHeader := { + route := p_route, // f_route(), + recordRoute := + p_recordroute // f_recordroute() + } + } + + template(value) Response m_Response_2xx_mbody( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xx_ext := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) Response m_Response_2xxonBYE_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_2xxonINVITE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + recordRoute := p_recordRoute // for INVITE response + }, + messageBody := p_mb + } + + // NOTE STF471: changed order of parameter p_historyInfo and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2xxonINVITE_HistoryInfo( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) HistoryInfo p_historyInfo + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + template(value) Response m_Response_2xxonINVITE_Mime( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + contentType := m_contentType(m_mimeMultipart) + } + } + + template(value) Response m_Response_2xxonINVITE_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xxonINVITE := { + } + + template(value) Response m_Response_2xxonINVITE_PchargingVector( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit, + template(value) MessageBody p_mb, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_2xx_mbody := { + msgHeader := { + contact := p_contact, + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + // NOTE STF471: changed order of parameter p_pPreferredID and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2XXonINVITE_pPreferred_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) PPreferredID p_pPreferredID + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + // NOTE STF471: changed order of parameter p_pPreferredID and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2XXonINVITE_pAsserted_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) PAssertedID p_pAssertedID + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + pAssertedID := p_pAssertedID + } + } + + // NOTE STF471: changed order of parameter p_pAssertedID/p_privacy and p_mb to be able to modify from m_Response_2XXonINVITE_pAsserted_UE + template(value) Response m_Response_2XXonINVITE_pAsserted_privacy_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy + ) modifies m_Response_2XXonINVITE_pAsserted_UE := { + msgHeader := { + privacy := p_privacy + } + } + + // NOTE STF471: changed order of parameter p_privacy and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2XXonINVITE_privacy_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) Privacy p_privacy + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + privacy := p_privacy + } + } + + // NOTE STF471: changed order of parameter p_supported/p_privacy and p_mb to be able to modify from m_Response_2XXonINVITE_privacy_UE + template(value) Response m_Response_2XXonINVITE_supported_privacy_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) Privacy p_privacy, + template(value) Supported p_supported + ) modifies m_Response_2XXonINVITE_privacy_UE := { + msgHeader := { + supported := p_supported + } + } + + template(value) Response m_Response_2xxonINVITE_UserToUser( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) Response m_Response_2xxonREGISTER_IMS( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) SipUrl p_serviceroute_sip_url, + template(value) SipUrl p_passociated_uri + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact, + serviceRoute := { + fieldName := SERVICE_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := p_serviceroute_sip_url + }, + rrParam := omit + } + } + }, + pAssociatedURI := + m_pAssociatedURI( + { + displayName := omit, + addrSpec := p_passociated_uri + } + ) // PAssociatedURI RFC3455 + } + } + + template(value) Response m_Response_2xxonSUBSCRIBE_IMS( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_2xxonSUBSCRIBE_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_2xxonSUBSCRIBE_IMS := { + } + + template(value) Response m_Response_2xxonMESSAGE_PAccessNetwInfo_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_2xx_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a + } + } + + template(value) Response m_Response_2xxonMESSAGE_PCharging_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_2xx_Base := { + msgHeader := { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + template(value) Response m_Response_2xxonMESSAGE_PCharging_IMS( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_2xxonMESSAGE_PCharging_UE := { + } + + template(value) Response m_Response_2xxonMESSAGE_PMediaAuth_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_2xx_Base := { + msgHeader := { + pMediaAuthorization := m_pMediaAuthorization_fixedValue + } + } + + template(value) Response m_Response_2xxonMESSAGE_pPreferredID_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PPreferredID p_pPreferredID + ) modifies m_Response_2xx_Base := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) Response m_Response_2xxonUPDATE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + recordRoute := p_recordRoute + }, + messageBody := p_mb + } + + } // end group responseSend2xx + + group responseSend3xx { + + template(value) Response m_Response_3xx_Base( + template(value) StatusLine_3xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_3XXonINVITE( + template(value) StatusLine_3xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_3xx_Base := { + msgHeader := { + contact := p_contact + } + } + + } // end group responseSend3xx + + group responseSend4xx { + + template(value) Response m_Response_4xx_Base( + template(value) StatusLine_4xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_4XXonINVITE( + template(value) StatusLine_4xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_4xx_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_4XXonINVITE_UE( + template(value) StatusLine_4xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_4xx_Base := { + msgHeader := { + contact := p_contact + } + } + + } // end group responseSend4xx + + template(value) Response m_Response_onCANCEL( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Base := { + } + + template(value) Response m_Response_onMESSAGE_IMS( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_onINVITE( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_onINVITE_Reason( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) GenValue p_cause + ) modifies m_Response_onINVITE := { + msgHeader := { + reason := mw_Reason(p_cause) + } + } + + template(value) Response m_Response_WWWauthenticate_IMS( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) WwwAuthenticate p_wwwAuthenticate + ) modifies m_Response_Base := { + msgHeader := { + wwwAuthenticate := p_wwwAuthenticate + } + } + + } // end group responseSend + + group responseReceive { + + group responseReceive2xx { + + // NOTE STF471: removed statusline parameter as it is fixed 200 status code + template(present) Response mw_Response_200onINVITE_noPChargingVector_UE( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ? + ) modifies mw_Response_2xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 200, + reasonPhrase := ? + }, + msgHeader := { + pChargingVector := omit + } + } + + // NOTE STF471: removed statusline parameter as it is fixed 200 status code + template(present) Response mw_Response_200onINVITE_SDP_UE( + template (present) CallId p_callId, + template (present) CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 200, + reasonPhrase := ? + }, + messageBody := { + sdpMessageBody := ? + } + } + + // NOTE STF471: removed statusline parameter as it is a 200.299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPCharging_UE( + template (present) CallId p_callId, + template (present) CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + // NOTE STF471: removed statusline parameter as it is a 200..299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPCharging_IMS( + template (present) CallId p_callId, + template (present) CSeq p_cSeq + ) modifies mw_Response_2xxonMESSAGE_noPCharging_UE := { + } + + // NOTE STF471: removed statusline parameter as it is a 200..299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPAccessNetworkInfo_IMS( + template (present) CallId p_callId, + template (present) CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + msgHeader := { + pAccessNetworkInfo := omit + } + } + + // NOTE STF471: removed statusline parameter as it is a 200..299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPMediaAuthorization_IMS( + template (present) CallId p_callId, + template (present) CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + msgHeader := { + pMediaAuthorization := omit + } + } + + // NOTE STF471: removed statusline parameter as it is a fixed 200 status code + template(present) Response mw_Response_200onREGISTER_IMS( + template (present) CallId p_callId, + template (present) CSeq p_cSeq, + template SipUrl p_ue_uri, + template LibSip_SIPTypesAndValues.Contact p_contact, + template SipUrl p_sut_scscf_uri + ) modifies mw_Response_2xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 200, + reasonPhrase := ? + }, + msgHeader := { + pAssociatedURI := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := { + *, + { + nameAddr := { + displayName := *, + addrSpec := p_ue_uri + }, + genericParams := * + }, + * + } + }, + path := ?, + serviceRoute := { + fieldName := SERVICE_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := p_sut_scscf_uri + }, + rrParam := * + } + } + }, + pChargingFunctionAddresses := ?, + pChargingVector := ?, + contact := p_contact + } + } + + } // end group responseReceive2xx + + group responseReceive4xx { + + // NOTE STF471: removed statusline parameter as it is a fixed 401 status code + template(present) Response mw_Response_401onREGISTER_securityServer_UE( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_4xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 401, + reasonPhrase := ? + }, + msgHeader := { + securityServer := ?, + wwwAuthenticate := ? + } + } + + // NOTE STF471: removed statusline parameter as it is a fixed 400 status code + template(present) Response mw_Response_401onREGISTER_WWWauthenticate_IMS( + template CallId p_callId, + template CSeq p_cSeq, + template(present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_Response_4xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 401, + reasonPhrase := ? + }, + msgHeader := { + wwwAuthenticate := p_wwwAuthenticate + } + } + + } // end group responseReceive4xx + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_SecServer_WWWAuth_UE( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) SecurityServer p_securityServer := ?, + template WwwAuthenticate p_wwwAuthenticate + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + securityServer := p_securityServer, + wwwAuthenticate := p_wwwAuthenticate + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PpreferredID_PassertedID( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PPreferredID p_pPreferredID := ?, + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + pPreferredID := p_pPreferredID + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PAsserted_Privacy_History( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PAssertedID p_pAssertedID := ?, + template(present) Privacy p_privacy := ?, + template(present) HistoryInfo p_historyInfo := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy, + historyInfo := p_historyInfo + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PAsserted_ContentType( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PAssertedID p_pAssertedID := ?, + template(present) ContentType p_contentType := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + contentType := p_contentType + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PchargingVector( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PChargingVector p_chargingVector := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pChargingVector := p_chargingVector + } + } + + // NOTE STF471: changed name from mw_Response_PchargingVecFctadrId + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PchargingVector_PchargingFunctionAddr_PpreferredID( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PChargingVector p_chargingVector := ?, + template(present) PChargingFunctionAddresses p_chargingFunctionAddresses := ?, + template(present) PPreferredID p_preferredID := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pChargingVector := p_chargingVector, + pChargingFunctionAddresses := p_chargingFunctionAddresses, + pPreferredID := p_preferredID + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PchargingFunctionAddr( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PChargingFunctionAddresses p_chargingFunctionAddresses := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pChargingFunctionAddresses := p_chargingFunctionAddresses + } + } + + } // end group responseReceive + + } // end group modifiedTemplates + + } // end group messageTemplates + +} // end module LibIms_Templates diff --git a/ttcn/patch_lib_iot_titan/module.mk b/ttcn/patch_lib_iot_titan/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..f0c1b33a4d9c325335af7d2eb988481d473dbe2c --- /dev/null +++ b/ttcn/patch_lib_iot_titan/module.mk @@ -0,0 +1,13 @@ +sources := \ + LibIot_Functions.ttcn \ + LibIot_TestConfiguration.ttcn \ + LibIot_TypesAndValues.ttcn \ + LibIot_VxLTE_PIXITS.ttcn \ + LibIot_PIXITS.ttcn \ + LibIot_TestInterface.ttcn \ + LibIot_VxLTE_Functions.ttcn \ + LibIot_VxLTE_Templates.ttcn \ + LibIot_5GNR_Functions.ttcn \ + LibIot_5GNR_PIXITS.ttcn \ + LibIot_5GNR_Templates.ttcn \ + diff --git a/ttcn/patch_lib_msrp_titan/module.mk b/ttcn/patch_lib_msrp_titan/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..d0428b335e44fe24ae55294fd715b5a5785b6352 --- /dev/null +++ b/ttcn/patch_lib_msrp_titan/module.mk @@ -0,0 +1,7 @@ +sources := \ + LibMsrp_Functions.ttcn \ + LibMsrp_PIXITS.ttcn \ + LibMsrp_Templates.ttcn \ + LibMsrp_TypesAndValues.ttcn \ + ../patch_lib_msrp_titan/ttcn/LibMsrp_EncDecDeclarations.ttcn \ + diff --git a/ttcn/patch_lib_msrp_titan/ttcn/LibMsrp_EncDecDeclarations.ttcn b/ttcn/patch_lib_msrp_titan/ttcn/LibMsrp_EncDecDeclarations.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..15f416d51ec44f5e4b53aa6810b062039cde54af --- /dev/null +++ b/ttcn/patch_lib_msrp_titan/ttcn/LibMsrp_EncDecDeclarations.ttcn @@ -0,0 +1,16 @@ +/* + * @author TTF T010 + * @version $Id:$ + * @desc This module provides the functions used by the test component + */ +module LibMsrp_EncDecDeclarations { + + // LibMsrp + import from LibMsrp_TypesAndValues all; + + external function fx_enc_MsrpURI(in MsrpURI p_MsrpURI) return bitstring + with {extension "prototype(convert) encode(MSRPCodec)"} + external function fx_dec_MsrpURI(inout bitstring pdu, out MsrpURI p_MsrpURI) return integer + with {extension "prototype(sliding) decode(MSRPCodec)"} + +} // End of module LibMsrp_EncDecDeclarations \ No newline at end of file diff --git a/ttcn/patch_lib_ng112_titan/ttcn/module.mk b/ttcn/patch_lib_ng112_titan/ttcn/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..2c06a3815095881c32e7f4496c117cc95d3e01f8 --- /dev/null +++ b/ttcn/patch_lib_ng112_titan/ttcn/module.mk @@ -0,0 +1,30 @@ +sources := \ + ttcn/LibNg112_EncdecDeclarations.ttcn \ + ttcn/LibNg112_Functions.ttcn \ + ttcn/LibNg112_Pics.ttcn \ + ttcn/LibNg112_Pixits.ttcn \ + ttcn/LibNg112_Steps.ttcn \ + ttcn/LibNg112_Templates.ttcn \ + ttcn/LibNg112_TestSystem.ttcn \ + ttcn/LibNg112_TypesAndValues.ttcn \ + xsd/urn_ietf_params_xml_ns_geopriv_conf.ttcn \ + xsd/urn_ietf_params_xml_ns_geopriv_held_id.ttcn \ + xsd/urn_ietf_params_xml_ns_geopriv_held.ttcn \ + xsd/urn_ietf_params_xml_ns_lost1.ttcn \ + json/LibNg112_SubscriptionPayloads.ttcn \ + json/LibNg112_DequeueRegistration.ttcn + +modules := ../../../titan-test-system-framework/ttcn/LibJson \ + ../../../titan-test-system-framework/ttcn/LibHttp \ + + +# Use titan-test-system-framework +# xsd/http_www_w3_org_XML_1998_namespace.ttcn \ +# Use lib_sip +# xsd/http_www_opengis_net_gml.ttcn \ +# xsd/http_www_opengis_net_pidflo_1_0.ttcn \ +# xsd/urn_ietf_params_xml_ns_pidf.ttcn \ +# xsd/urn_ietf_params_xml_ns_pidf_geopriv10.ttcn \ +# xsd/urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy.ttcn \ +# xsd/urn_ietf_params_xml_ns_pidf_geopriv10_civicAddr.ttcn \ + diff --git a/ttcn/patch_lib_sip_titan/LibSip_Common.ttcn b/ttcn/patch_lib_sip_titan/LibSip_Common.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..e89697b196c4c3c3124fde88473dcfa7f7bc8335 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_Common.ttcn @@ -0,0 +1,39 @@ +/** + * @author STF160, STF471 + * @version $Id: LibSip_Common.ttcn 488 2014-09-18 10:17:19Z rennoch $ + * @desc This module provides the common definitions for SIP messages. + * This module is part of LibSipV3. +*/ +module LibSip_Common { + + type set length (1..infinity) of charstring Charstring_List; + + // [20.1, 20.3, 20.4, 20.7, 20.9, 20.10, 20.11, 20.18, 20.20, 20.27, 20.28, 20.30, 20.31, + // 20.33, 20.34, 20.39, 20.42, 20.44] + + + type union GenValue { + charstring tokenOrHost, + charstring quotedString + } + + type record GenericParam + { + charstring id, + GenValue paramValue optional + } + + // [?] + type set of GenericParam SemicolonParam_List; + + // [?] + type set of GenericParam AmpersandParam_List; + + // [?] + type set of GenericParam CommaParam_List; + //------------------------------------------------------------------------------ + +} +with { + encode "LibSip V3"; +} // end module LibSip_Common diff --git a/ttcn/patch_lib_sip_titan/LibSip_EncdecDeclarations.ttcn b/ttcn/patch_lib_sip_titan/LibSip_EncdecDeclarations.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..13c0f7830536a7010bf1253be42ca12b995dc55c --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_EncdecDeclarations.ttcn @@ -0,0 +1,120 @@ +module LibSip_EncdecDeclarations { + + import from LibSip_SIPTypesAndValues all; + import from LibSip_SMSTypesAndValues all; + import from LibSip_SimpleMsgSummaryTypes all; + import from LibSip_MessageBodyTypes all; + + external function fx_enc_Request (Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_REGISTER_Request (REGISTER_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_INVITE_Request (INVITE_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_OPTIONS_Request (OPTIONS_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_BYE_Request (BYE_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + + external function fx_enc_CANCEL_Request (CANCEL_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_ACK_Request (ACK_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_PRACK_Request (PRACK_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_NOTIFY_Request (NOTIFY_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_SUBSCRIBE_Request (SUBSCRIBE_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_PUBLISH_Request (PUBLISH_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_UPDATE_Request (UPDATE_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_REFER_Request (REFER_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_MESSAGE_Request (MESSAGE_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_INFO_Request (INFO_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_Response (Response p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_Raw (Raw p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_SMS(SimpleMsgSummary pdu) return bitstring + with { extension "prototype(convert) encode(SIPCodec)" }; + + external function fx_enc_MessageBody(in MessageBody pdu) return bitstring + with { extension "prototype(convert) encode(SIPCodec)" }; + + external function fx_dec_Request (inout bitstring pdu, out Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_REGISTER_Request (inout bitstring pdu, out REGISTER_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_INVITE_Request (inout bitstring pdu, out INVITE_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_OPTIONS_Request (inout bitstring pdu, out OPTIONS_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_BYE_Request (inout bitstring pdu, out BYE_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_CANCEL_Request (inout bitstring pdu, out CANCEL_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_ACK_Request (inout bitstring pdu, out ACK_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_PRACK_Request (inout bitstring pdu, out PRACK_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_NOTIFY_Request (inout bitstring pdu, out NOTIFY_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_SUBSCRIBE_Request (inout bitstring pdu, out SUBSCRIBE_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_PUBLISH_Request (inout bitstring pdu, out PUBLISH_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_UPDATE_Request (inout bitstring pdu, out UPDATE_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_REFER_Request (inout bitstring pdu, out REFER_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_MESSAGE_Request (inout bitstring pdu, out MESSAGE_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_INFO_Request (inout bitstring pdu, out INFO_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_Response (inout bitstring pdu, out Response p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_SMS(inout bitstring pdu, out SimpleMsgSummary p) return integer + with { extension "prototype(sliding) decode(SIPCodec)" }; + + external function fx_dec_MessageBody(inout bitstring pdu, out MessageBody p) return integer + with { extension "prototype(sliding) decode(SIPCodec)" }; + +} // End of module module LibSip_EncdecDeclarations diff --git a/ttcn/patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..066a605b7b0b84fb6752159fe53f57ec31258214 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn @@ -0,0 +1,59 @@ +/****************************************************************************** + * @author STF 346, STF366, STF368, STF369, STF450, STF471 + * @version $Id: LibSip_MessageBodyTypes.ttcn 622 2014-07-10 14:50:54Z nikolajev $ + * @desc This module provides the types used for alternative SIP message + * body variants and combinations. + * This module is part of LibSipV3. + */ + +module LibSip_MessageBodyTypes { + import from LibSip_SDPTypes all; + import from LibSip_SimpleMsgSummaryTypes all; + import from LibSip_XMLTypes all; + + /* + * Simple body types that can be used instead of the more detailed XML and SDP + * without codec support + * */ + //type charstring XmlBody; + //type charstring SDP_Message; + type octetstring MsdBody; + + group MIMETypes { + type union MIME_Encapsulated_Parts { + SDP_Message sdpMessageBody, + XmlBody xmlBody, // if there is XML body + MsdBody msdBody // RFC 8147: Minimum Set of Data octets + } + + type record MIME_Encapsulated_Part { + charstring content_type, + charstring content_disposition optional, + charstring content_id optional, + MIME_Encapsulated_Parts mime_encapsulated_part + } + + type record MIME_Message { + charstring boundary, // len: + MimeEncapsulatedList mimeEncapsulatedList + } + + type record of MIME_Encapsulated_Part MimeEncapsulatedList; + + + } // group MIMETypes + + type union MessageBody { + SDP_Message sdpMessageBody, // if there is only SDP part + // XMLMessage xmlMessage, // if there is XML message (with header and body) + XmlBody xmlBody, // if there is XML body + MIME_Message mimeMessageBody, // if there is SDP and encapsulated ISUP part + charstring sipfrag, // if content-Type is message/sipfrag (cp. NOTIFY, cp TS124147 A.4.3.1.2) + charstring textplain, // if content type is text/plain (for testing long messages) + SimpleMsgSummary simpleMsgSummary, // RFC 3842 + octetstring smsMessage // encoded SMS message 3GPP 23.040, 24.011 + } +} +with { + encode "SIPCodec"; variant ""; +} diff --git a/ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn b/ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..506cb03bdab8806435ef0d159b7f3415602bf670 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn @@ -0,0 +1,143 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF450, STF471 + * @version $Id$ + * @desc This module provides module parameters used within the SIP + * protocol for timers, SDP formats etc. + * This module is part of LibSipV3. + */ +module LibSip_PIXITS { + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + // ____________________________ PIXIT-S_______________________________ + group SIP_PIXITparameters { + group SDPParameter { + + /** + * @desc charstring for SDP user name + */ + modulepar charstring PX_SIP_SDP_USER_NAME := "voicesession"; + + /** + * @desc charstring for SDP session identifier + */ + modulepar charstring PX_SIP_SDP_SESSION_ID := "30000"; + + /** + * @desc charstring for SDP dynamic port + */ + modulepar charstring PX_SIP_SDP_DYN := "0"; + + /** + * @desc charstring for SDP bandwidth modifier + */ + modulepar charstring PX_SIP_SDP_B_MODIFIER := "AS"; + + /** + * @desc integer for SDP bandwidth value + */ + modulepar integer PX_SIP_SDP_B_BANDWIDTH := 64; + + /** + * @desc charstring for SDP media attribute encoding supported by the IUT + */ + modulepar charstring PX_SIP_SDP_ENCODING := "PCMU"; + + /** + * @desc charstring for SDP media attribute encoding clockrate supported by the IUT + */ + modulepar charstring PX_SIP_SDP_CLOCKRATE := "8000"; + + } // group SDP Parameter + group XMLCOnfiguration{ + + /** + * @desc boolean for MessageBody length calculation based on encvalue operation result + */ + modulepar boolean PX_MB_LENGTH_FROM_ENCVAL := true; + + /** + * @desc boolean for MessageBody length calculation to be performed by external function + */ + modulepar boolean PX_USE_FX_FOR_XML_LENGTH := false; + } + + group SupportedOptions { + + /** + * @desc charstring for Used Transport in upper case "UDP"/"TCP" + */ + modulepar charstring PX_SIP_TRANSPORT := "UDP"; + + + } // group SupportedOptions{ + + group RegistrationParameters { + + /** + * @desc boolean for the SIP user if it have to register itself before executing a test case + */ + modulepar boolean PX_SIP_REGISTRATION := false; + + /** + * @desc charstring for PX_AUTH_ALGORITHM security algorithm Possible values: MD5 or AKAv1-MD5 + */ + modulepar charstring PX_AUTH_ALGORITHM := "AKAv1-MD5"; + + + } // group Registration parameters + + group SwitchToEnableAuthentication { + /** + * @desc boolean for option controlling if authentication is enabled/disabled for REGISTER messages + */ + modulepar boolean PX_SIP_REGISTER_AUTHENTICATION_ENABLED := true; + + /** + * @desc boolean for option controlling if authentication is enabled/disabled for INVITE messages + */ + modulepar boolean PX_SIP_INVITE_AUTHENTICATION_ENABLED := false; + + + } // group SwitchToEnableAuthentication + + group SIP_Timers { + /** + * @desc float for TWait default value for waiting an operator action + */ + modulepar float PX_SIP_TWAIT := 30.0; + + /** + * @desc float for TAck default value for waiting an acknowledgement + */ + modulepar float PX_SIP_TACK := 8.0; + + /** + * @desc float for TResp default value for waiting for a response from the IUT + */ + modulepar float PX_SIP_TRESP := 15.0; + + /** + * @desc float for TNoAct default value for waiting no message from the IUT Value given for PX_TNOACT should be less than value of SHORT_REGISTRATION constant (which is currently "3" (seconds)) + */ + modulepar float PX_SIP_TNOACT := 1.0; + + } // group SIP_Timers + + group MimePart { + /** + * @desc charstring for delimiter value used in mime multipart message to separate message body parts + */ + modulepar charstring PX_SIP_MIME_BOUNDARY := "boundary1"; + + } // group MimePart + + } // group SIP_PIXITparameters + + /** + * @desc Set to true to force fixed random value (debug mode) + */ + modulepar boolean PX_SEED := false; + +} // end module LibSip_PIXITS diff --git a/ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..a6d121ffa5e52d43af8d7ba320dfe5063c2fd4df --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn @@ -0,0 +1,402 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF450, STF471 + * @version $Id$ + * @desc This module defines message, attribute, structured and simple + * SDP types as well constants used by LipSip constructs.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * This module is part of LibSipV3. + * @remark Adding of new attributes types is ok; Adding of new optional attributes in @see SDP_attribute type is ok; Existing attribute types shall not be changed or removed - change requests shall be made to http://t-ort.etsi.org + */ +module LibSip_SDPTypes { + import from LibSip_Common all; + group Constants { + group SimpleConstants { + // SDP net_type + const charstring c_in := "IN"; + + // SDP addr_type + const charstring c_ip4 := "IP4"; + const charstring c_ip6 := "IP6"; + + // SDP_media_desc: media + const charstring c_audio := "audio"; + const charstring c_image := "image"; + const charstring c_video := "video"; + const charstring c_text := "text"; + const charstring c_msrp := "msrp"; + + // SDP_media_desc: transport + const charstring c_rtpAvp := "RTP/AVP"; + const charstring c_rtpAvpf := "RTP/AVPF"; + const charstring c_msrpTcp := "TCP/MSRP"; + const charstring c_udptl := "Udptl"; + + // SDP_attribute_list constants: + const charstring c_local := "local"; + const charstring c_mandatory := "mandatory"; + const charstring c_optional := "optional"; + const charstring c_none := "none"; + const charstring c_qos := "qos"; + const charstring c_remote := "remote"; + const charstring c_sendrecv := "sendrecv"; + const charstring c_sendonly := "sendonly"; + const charstring c_inactive := "inactive"; + const charstring c_send := "send"; + const charstring c_recv := "recv"; + const charstring c_e2e := "e2e"; + } + } + group Types { + group SubTypes { + group AttributeTypes { + type record SDP_attribute_cat { + charstring attr_value + } + + type record SDP_attribute_keywds { + charstring attr_value + } + + type record SDP_attribute_tool { + charstring attr_value + } + + type record SDP_attribute_ptime { + charstring attr_value + } + + type record SDP_attribute_recvonly { + } + + type record SDP_attribute_sendrecv { + } + + type record SDP_attribute_sendonly { + } + + type record SDP_attribute_inactive { + } + + type record SDP_attribute_orient { + charstring attr_value + } + + type record SDP_attribute_type { + charstring attr_value + } + + type record SDP_attribute_charset { + charstring attr_value + } + + type record SDP_attribute_sdplang { + charstring attr_value + } + + type record SDP_attribute_lang { + charstring attr_value + } + + type record SDP_attribute_framerate { + charstring attr_value + } + + type record SDP_attribute_quality { + charstring attr_value + } + + type union SDP_attribute_fmtp_format_specific_params { + SemicolonParam_List paramList, + charstring unstructured + } + + type record SDP_attribute_fmtp { + charstring format, + SDP_attribute_fmtp_format_specific_params params + } + + type record SDP_attribute_curr { + charstring preconditionType, + charstring statusType, + charstring direction + } + + type record SDP_attribute_des { + charstring preconditionType, + charstring strength, + charstring statusType, + charstring direction + } + + type record SDP_attribute_conf { + charstring preconditionType, + charstring statusType, + charstring direction + } + + type record SDP_attribute_rtpmap_codec { + charstring encoding, + charstring clockrate, + charstring parameters optional + } + + type record SDP_attribute_rtpmap { + charstring payload_type, + SDP_attribute_rtpmap_codec codec + } + + type record SDP_attribute_rtcp { + integer portnumber, + SDP_connection connection optional + } + + type record SDP_attribute_msrp { + charstring attr_value + } + + type record SDP_attribute_unknown { + charstring name, + charstring attr_value optional + } + + type record SDP_attribute_maxptime { + charstring attr_value + } + + type record SDP_attribute_tcap { + integer trpr_cap_num, + Charstring_List proto_list + } + + type record SDP_attribute_pcfg { + integer config_number, + Charstring_List pot_cfg_list optional + } + + type record SDP_attribute_acfg { + integer config_number, + Charstring_List sel_cfg_list optional + } + + type record SDP_attribute_ecn_capable_rtp { + Charstring_List init_list, + Charstring_List parm_list optional + } + + type record SDP_attribute_rtcp_fb { + charstring rtcp_fb_pt, + charstring rtcp_fb_val + } + + type record SDP_attribute_rtcp_xr { + Charstring_List xr_format_list optional + } + + type record SDP_attribute_rtcp_rsize { + } + + type record SDP_attribute_3ge2ae { + charstring indicator + } + + type record SDP_attribute_crypto { + charstring tag, + charstring crypto_suite, + charstring key_params, + Charstring_List session_params optional + } + + type record SDP_attribute_content { + Charstring_List content_params + } + + type record SDP_attribute_keymgmt { + charstring prtcl_id, + charstring data + } + + type union SDP_attribute { + SDP_attribute_cat cat, + SDP_attribute_keywds keywds, + SDP_attribute_tool tool, + SDP_attribute_ptime ptime, + SDP_attribute_recvonly recvonly, + SDP_attribute_sendrecv sendrecv, + SDP_attribute_sendonly sendonly, + SDP_attribute_inactive inactive, + SDP_attribute_orient orient, + SDP_attribute_type sdp_type, + SDP_attribute_charset charset, + SDP_attribute_sdplang sdplang, + SDP_attribute_lang lang, + SDP_attribute_framerate framerate, + SDP_attribute_quality quality, + SDP_attribute_fmtp fmtp, + SDP_attribute_curr curr, + SDP_attribute_des des, + SDP_attribute_conf conf, + SDP_attribute_rtpmap rtpmap, + SDP_attribute_rtcp rtcp, + SDP_attribute_msrp msrp, + SDP_attribute_maxptime maxptime, + SDP_attribute_tcap tcap, + SDP_attribute_pcfg pcfg, + SDP_attribute_acfg acfg, + SDP_attribute_ecn_capable_rtp ecn_capable_rtp, + SDP_attribute_rtcp_fb rtcp_fb, + SDP_attribute_rtcp_xr rtcp_xr, + SDP_attribute_rtcp_rsize rtcp_rsize, + SDP_attribute_3ge2ae e2ae, + SDP_attribute_crypto crypto, + SDP_attribute_content content, + SDP_attribute_keymgmt keymgmt, + //* unknown has to be the last else encoding/decoding won't work! + SDP_attribute_unknown unknown + } + + } //* group AttributeTypes + + type set of SDP_attribute SDP_attribute_list; + + type record SDP_bandwidth { + charstring modifier, + integer bandwidth + } + + type set of SDP_bandwidth SDP_bandwidth_list; + + type record SDP_connection { + charstring net_type, + charstring addr_type, + SDP_conn_addr conn_addr + } + + type record SDP_conn_addr { + charstring addr, + integer ttl optional, + integer num_of_addr optional + } + + type set of SDP_connection SDP_connection_list; + + type record SDP_contact { + charstring addr_or_phone, + charstring disp_name optional + } + + type SDP_contact SDP_contact_tel; + + type SDP_contact SDP_contact_email; + + type set of SDP_contact_email SDP_email_list; + + type record of charstring SDP_fmt_list; + + type record SDP_key { + charstring method, + charstring key optional + } + + type record SDP_media_desc { + SDP_media_field media_field, + charstring information optional, + SDP_connection_list connections optional, + SDP_bandwidth_list bandwidth optional, + SDP_key key optional, + SDP_attribute_list attributes optional + } + + type set of SDP_media_desc SDP_media_desc_list; + + type record SDP_media_port { + integer port_number, + integer num_of_ports optional + } + + type record SDP_media_field { + charstring media, + SDP_media_port ports, + charstring transport, + SDP_fmt_list fmts + } + + type record SDP_time { + SDP_time_field time_field, + SDP_repeat_list time_repeat optional + } + + type record SDP_time_field { + charstring start_time, + //* field is numeric strings that may not fit into 32-bit signed int + charstring + stop_time //* field is numeric strings that may not fit into 32-bit signed int + } + + type record SDP_repeat { + SDP_typed_time repeat_interval, + SDP_typed_time active, + SDP_typed_time_list offsets + } + + type set of SDP_repeat SDP_repeat_list; + + type record SDP_typed_time { + integer time, + charstring unit optional + } + + type set of SDP_typed_time SDP_typed_time_list; + + type set of SDP_time SDP_time_list; + + type record SDP_timezone { + charstring adjustment_time, + SDP_typed_time offset + } + + type set of SDP_timezone SDP_timezone_list; + + type record SDP_Origin { + charstring user_name, + charstring session_id, + //* field is numeric strings that may not fit into 32-bit signed int + charstring session_version, + //* field is numeric strings that may not fit into 32-bit signed int + charstring net_type, + charstring addr_type, + charstring addr + } + + type set of SDP_contact_tel SDP_phone_list; + + } //* group SubTypes + + + group MessageTypes { + type record SDP_Message { + integer protocol_version, + SDP_Origin origin, + charstring session_name, + charstring information optional, + charstring uri optional, + SDP_email_list emails optional, + SDP_phone_list phone_numbers optional, + SDP_connection connection optional, + SDP_bandwidth_list bandwidth optional, + SDP_time_list times, + SDP_timezone_list timezone_adjustments optional, + SDP_key key optional, + SDP_attribute_list attributes optional, + SDP_media_desc_list media_list optional + } + with { + encode "SDPCodec"; + } + + } // group MessageTypes + + } // group Types +} // end module LibSip_SDPTypes diff --git a/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..c3af534ed50fb7bbf05438441451ec7aa342c513 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn @@ -0,0 +1,1984 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF450, STF471, STF160 + * @version $Id$ + * @desc This module defines message, header, structured and simple SIP + * types as well constants used by LipSip constructs.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * This module is part of LibSipV3. + * @remark Adding of new message and header types is ok; Adding of new optional header fields in + * @see MessageHeader type is ok but should be done at same time as dummy template updates; Existing message or header types shall not be changed or removed - change requests shall be made to http://t-ort.etsi.org + */ +module LibSip_SIPTypesAndValues { + import from LibSip_MessageBodyTypes all; + import from LibSip_Common all; + + group Constants { + group SimpleConstants { + // SIP name protocol plus version + const charstring c_sipNameVersion := "SIP/2.0"; + + // SIP name protocol + const charstring c_sipName := "SIP"; + + // SIP version + const charstring c_sipVersion := "2.0"; + + // SIP scheme + const charstring c_sipScheme := "sip"; + + // TEL scheme + const charstring c_telScheme := "tel"; + + // URN schema + const charstring c_urnScheme := "urn"; + + // TAG_ID + const charstring c_tagId := "tag"; + + // BRANCH_ID + const charstring c_branchId := "branch"; + + // BRANCH_COOKIE + const charstring c_branchCookie := "z9hG4bK"; + + // EXPIRES_ID + const charstring c_expiresId := "expires"; + + // MADDR_ID + const charstring c_maddrId := "maddr"; + + // METHOD_ID + const charstring c_methodId := "method"; + + // RECEIVED_ID + const charstring c_receivedId := "received"; + + // TTL_ID + const charstring c_ttlId := "ttl"; + + // USER_ID + const charstring c_userId := "user"; + + // SDP name application + const charstring c_sdpApplication := "application/sdp"; + + // XML name application + const charstring c_xmlApplication := "application/xml"; + + // XML name application + const charstring c_xmlreginfoApplication := "application/reginfo+xml"; + + // XML name resource-list + const charstring c_xmlresourcelistApplication := "application/resource-lists+xml"; + + // IMS 3GPP name application + const charstring c_ims3gppApplication := "application/3gpp-ims+xml"; + + // IMS 3GPP name CW application + const charstring c_ims3gppCwApplication := "application/vnd.3gpp.cw+xml"; + + // IMS ETSI name MCID application + const charstring c_imsEtsiMcidApplication := "application/vnd.etsi.mcid+xml"; + + // IMS ETSI name CUG application + const charstring c_imsEtsiCugApplication := "application/vnd.etsi.cug+xml"; + + // IMS ETSI name Simservs application(TIP/TIR, ACR, CDIV, OIP/OIR, CUG) + const charstring c_imsEtsiSimservsApplication := "application/vnd.etsi.simservs+xml"; + + // OCTET-STREAM name application + const charstring c_octetApplication := "application/octet-stream"; + + // PLAIN-TEXT name application + const charstring c_plainText := "text/plain"; + + // SIP fragment message + const charstring c_sipfragMessage := "message/sipfrag"; + + // text content of 1300 bytes for messages with message body + const charstring c_longMessageContent_1300Bytes := + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & oct2char('0D'O) & oct2char('0A'O); // CRLF + // Default SIP port number : 5060 + const integer c_defaultSipPort := 5060; + + // Default SIP protocol : UDP + const charstring c_defaultSipProt := "UDP"; + + // Fixed IP multicast address + const charstring c_mcastSipIpaddr := "224.0.1.75"; + + // Short delta-second used in expires parameter to acknowledge a registration + const charstring c_shortRegistration := "3600"; + + // ([RFC3891 ] Sec 6.1) + const charstring c_earlyFlag := "early-only"; + + // option tag replaces ([RFC3261 ] ) + const charstring c_replaces := "replaces"; + + // option tag 100rel (reliable provisional response [RFC3262 ] ) + const charstring c_tag100rel := "100rel"; + + // option tag from-change ([RFC4916 ] ) + const charstring c_tagFromChange := "from-change"; + + // option tag precondition (ch.11 [RFC3312 ] ) + const charstring c_tagPrecond := "precondition"; + + // due to problem with TAU compiler because hardcoded return statement constant is created + const HostPort c_hostport_dummy := { + host := "", + portField := c_defaultSipPort + }; + + // CLIP/CLIR information + const PrivacyValue c_privacy_none := "none"; + const PrivacyValue c_privacy_id := "id"; + const PrivacyValue c_privacy_header := "header"; + const PrivacyValue c_privacy_user := "user"; + const PrivacyValue c_privacy_critical := "critical"; + const PrivacyValue c_privacy_session := "session"; + + // + const charstring c_AT := "@"; // MRO + const charstring c_SP := oct2char('20'O); + const charstring c_SLASH := oct2char('2F'O); + const charstring c_LT := oct2char('3C'O); + const charstring c_GT := oct2char('3E'O); + + // * (wildchard) sign + const charstring c_WILDCARD := "*"; + + const integer c_CRlen := 2; + // length of new line (0d0a) + const GenericParam c_Integrity_protected_yes := {"integrity-protected", {tokenOrHost := "yes"}}; + const GenericParam c_Integrity_protected_no := {"integrity-protected", {tokenOrHost := "no"}}; + const GenericParam c_Integrity_protected_ip_assoc_pending := {"integrity-protected", {tokenOrHost := "ip-assoc-pending"}}; + + const charstring c_algorithm := "MD5"; + + } // end group SimpleConstants + + group AuthorizationConstants { + + const charstring c_ik := ""; + const charstring c_ck := ""; + const charstring c_nonce := ""; + const charstring c_nonce_value := "0edff6c521cc3f407f2d9e01cf6ed82b"; + + + } // end group AuthorizationConstants + + group PChargingVectorConstants { + + const charstring c_icid := "icid-value"; + const charstring c_icid_value := "123abc"; + const charstring c_icid_generated_at := "icid-generated-at"; + const charstring c_orig_ioi := "orig-ioi"; + const charstring c_term_ioi := "term-ioi"; + const charstring c_access_network_charging_info := "access-network-charging-info"; + + + } // end group PChargingVectorConstants + + group HeaderFieldConstants { + + const CallId c_empty_CallId := { + fieldName := CALL_ID_E, + callid := "" + }; + + const ContentType c_empty_ContentType := { + fieldName := CONTENT_TYPE_E, + mTypeSubtype := "", + mParams := omit + }; + + const CSeq c_empty_cSeq := { + fieldName := CSEQ_E, + seqNumber := 0, + method := "EMPTY" + }; + + const From c_empty_From := { + fieldName := FROM_E, + addressField := { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := "127.0.0.1", + portField := c_defaultSipPort + } + } + }, + urlParameters := omit, + headers := omit + } + } + }, + fromParams := omit + }; + + const MaxForwards c_maxForwards70 := { + fieldName := MAX_FORWARDS_E, + forwards := 70 + }; + + const SipUrl c_empty_RequestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := "127.0.0.1", + portField := c_defaultSipPort + } + } + }, + urlParameters := omit, + headers := omit + }; + + const SipUrl c_unavailableUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unavailable", + password := omit + }, + hostPort := { + host := "anonymous.invalid", + portField := c_defaultSipPort + } + } + }, + urlParameters := omit, + headers := omit + }; + + const To c_empty_To := { // value of To header + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := "127.0.0.1", + portField := c_defaultSipPort + } + } + }, + urlParameters := omit, + headers := omit + } + } + }, + toParams := omit + }; + + const Via c_empty_Via := { + fieldName := VIA_E, + viaBody := { + { + sentProtocol := { + protocolName := c_sipName, + protocolVersion := c_sipVersion, + transport := c_defaultSipProt + }, + sentBy := { + host := "127.0.0.1", + portField := c_defaultSipPort + }, + viaParams := omit + } + } + }; + + + } + + + group UserProfileConstants { + // number of user profile from 1-10 for SIP profile + const integer c_userProfile_SIP1_home := 1; + const integer c_userProfile_SIP2_home := 2; + + + } // end group UserProfileConstants + + group StatusLines { + const StatusLine c_statusLine100 := {c_sipNameVersion, 100, "Trying"}; + const StatusLine c_statusLine180 := {c_sipNameVersion, 180, "Ringing"}; + const StatusLine c_statusLine181 := {c_sipNameVersion, 181, "Call Is Being Forwarded"}; + const StatusLine c_statusLine182 := {c_sipNameVersion, 182, "Queued"}; + const StatusLine c_statusLine183 := {c_sipNameVersion, 183, "Session Progress"}; + + const StatusLine c_statusLine200 := {c_sipNameVersion, 200, "OK"}; + const StatusLine c_statusLine202 := {c_sipNameVersion, 202, "Accepted"}; + + const StatusLine c_statusLine300 := {c_sipNameVersion, 300, "Multiple Choices"}; + const StatusLine c_statusLine301 := {c_sipNameVersion, 301, "Moved Permanently"}; + const StatusLine c_statusLine302 := {c_sipNameVersion, 302, "Moved Temporarily"}; + const StatusLine c_statusLine305 := {c_sipNameVersion, 305, "Use Proxy"}; + const StatusLine c_statusLine380 := {c_sipNameVersion, 380, "Alternative Service"}; + + const StatusLine c_statusLine400 := {c_sipNameVersion, 400, "Bad Request"}; + const StatusLine c_statusLine401 := {c_sipNameVersion, 401, "Unauthorized"}; + const StatusLine c_statusLine402 := {c_sipNameVersion, 402, "Payment Required"}; + const StatusLine c_statusLine403 := {c_sipNameVersion, 403, "Forbidden"}; + const StatusLine c_statusLine404 := {c_sipNameVersion, 404, "Not Found"}; + const StatusLine c_statusLine405 := {c_sipNameVersion, 405, "Method Not Allowed"}; + const StatusLine c_statusLine406 := {c_sipNameVersion, 406, "Not Acceptable"}; + const StatusLine c_statusLine407 := {c_sipNameVersion, 407, "Proxy Authentication Required"}; + const StatusLine c_statusLine408 := {c_sipNameVersion, 408, "Request Timeout"}; + const StatusLine c_statusLine410 := {c_sipNameVersion, 410, "Gone"}; + const StatusLine c_statusLine413 := {c_sipNameVersion, 413, "Request Entity Too Large"}; + const StatusLine c_statusLine414 := {c_sipNameVersion, 414, "Request-URI Too Long"}; + const StatusLine c_statusLine415 := {c_sipNameVersion, 415, "Unsupported Media Type"}; + const StatusLine c_statusLine416 := {c_sipNameVersion, 416, "Unsupported URI Scheme"}; + const StatusLine c_statusLine420 := {c_sipNameVersion, 420, "Bad Extension"}; + const StatusLine c_statusLine421 := {c_sipNameVersion, 421, "Extension Required"}; + const StatusLine c_statusLine422 := {c_sipNameVersion, 422, "Session Interval Too Small"}; + const StatusLine c_statusLine423 := {c_sipNameVersion, 423, "Interval Too Brief"}; + const StatusLine c_statusLine433 := {c_sipNameVersion, 433, "Anonymity Disallowed"}; + const StatusLine c_statusLine480 := {c_sipNameVersion, 480, "Temporarily Unavailable"}; + const StatusLine c_statusLine481 := {c_sipNameVersion, 481, "Call/Transaction Does Not Exist"}; + const StatusLine c_statusLine482 := {c_sipNameVersion, 482, "Loop Detected"}; + const StatusLine c_statusLine483 := {c_sipNameVersion, 483, "Too Many Hops"}; + const StatusLine c_statusLine484 := {c_sipNameVersion, 484, "Address Incomplete"}; + const StatusLine c_statusLine485 := {c_sipNameVersion, 485, "Ambiguous"}; + const StatusLine c_statusLine486 := {c_sipNameVersion, 486, "Busy Here"}; + const StatusLine c_statusLine487 := {c_sipNameVersion, 487, "Request Terminated"}; + const StatusLine c_statusLine488 := {c_sipNameVersion, 488, "Not Acceptable Here"}; + const StatusLine c_statusLine493 := {c_sipNameVersion, 493, "Undecipherable"}; + const StatusLine c_statusLine500 := {c_sipNameVersion, 500, "Server Internal Error"}; + const StatusLine c_statusLine501 := {c_sipNameVersion, 501, "Not implemented"}; + const StatusLine c_statusLine502 := {c_sipNameVersion, 502, "Bad Gateway"}; + const StatusLine c_statusLine503 := {c_sipNameVersion, 503, "Service Unavailable"}; + const StatusLine c_statusLine504 := {c_sipNameVersion, 504, "Server Time-out"}; + const StatusLine c_statusLine505 := {c_sipNameVersion, 505, "Version Not Supported"}; + const StatusLine c_statusLine513 := {c_sipNameVersion, 513, "Message Too Large"}; + const StatusLine c_statusLine580 := {c_sipNameVersion, 580, "Precondition Failure"}; + const StatusLine c_statusLine600 := {c_sipNameVersion, 600, "Busy Everywhere"}; + const StatusLine c_statusLine603 := {c_sipNameVersion, 603, "Decline"}; + const StatusLine c_statusLine604 := {c_sipNameVersion, 604, "Does Not Exist Anywhere"}; + const StatusLine c_statusLine606 := {c_sipNameVersion, 606, "Not Acceptable"}; + + + } // end StatusLines + + group SIPSyncPointNames { + const charstring c_Ringing := "Ringing"; + const charstring c_uPlane := "uPlane"; + const charstring c_sync1 := "sync1"; + const charstring c_sync2 := "sync2"; + const charstring c_sync3 := "sync3"; + const charstring c_sync4 := "sync4"; + const charstring c_uPlaneStop := "uPlaneStop"; + const charstring c_annoucA := "announcementA"; + const charstring c_annoucB := "announcementB"; + const charstring c_annouc := "announcement"; + const charstring c_voicem := "voiceMessage"; + } + + + } // end group Constants + + group Types { + group SubTypes { + // Subtypes + group TokenTypes // TokensTypes + { + // [20 ] + type enumerated FieldName { + ACCEPT_E, + ACCEPT_ENCODING_E, + ACCEPT_LANGUAGE_E, + ALERT_INFO_E, + ALLOW_E, + AUTHENTICATION_INFO_E, + AUTHORIZATION_E, + CALL_ID_E, + CALL_INFO_E, + CONTACT_E, + CONTENT_DISPOSITION_E, + CONTENT_ENCODING_E, + CONTENT_LANGUAGE_E, + CONTENT_LENGTH_E, + CONTENT_TYPE_E, + CSEQ_E, + DATE_E, + ERROR_INFO_E, + EXPIRES_E, + FROM_E, + IN_REPLY_TO_E, + MAX_FORWARDS_E, + MIME_VERSION_E, + MIN_EXPIRES_E, + ORGANIZATION_E, + PRIORITY_E, + PROXY_AUTHENTICATE_E, + PROXY_AUTHORIZATION_E, + PROXY_REQUIRE_E, + RECORD_ROUTE_E, + REPLY_TO_E, + REQUIRE_E, + RETRY_AFTER_E, + ROUTE_E, + SERVER_E, + SUBJECT_E, + SUPPORTED_E, + TIMESTAMP_E, + TO_E, + UNSUPPORTED_E, + USER_AGENT_E, + VIA_E, + WARNING_E, + WWW_AUTHENTICATE_E, + // [3262/7.1 ] + RACK_E, + RSEQ_E, + // [3265/7.2 ] + ALLOW_EVENTS_E, + EVENT_E, + SUBSCRIPTION_STATE_E, + // [3313 ] + P_MEDIA_AUTHORIZATION_E, + // [3323 ] + PRIVACY_E, + // [3325 ] + P_ASSERTED_ID_E, + P_PREFERRED_ID_E, + P_PREFERRED_SERVICE_E, + // [3326 ] + REASON_E, + // [3515 ] - REFER method + REFER_TO_E, + // [4488 ] - REFER method + REFER_SUB_E, + // [3891 ] + REPLACES_E, + // [3892 ] - REFER method + REFERRED_BY_E, + // [4244 ] + HISTORY_INFO_E, + // [3313 ] + P_MEDIA_AUTH_E, + // [3327 ] + PATH_E, + // [3329 ] + SECURITY_CLIENT_E, + SECURITY_SERVER_E, + SECURITY_VERIFY_E, + // [3455 ] + P_ACCESS_NETWORK_INFO_E, + P_ASSOCIATED_URI_E, + P_CALLED_PARTY_E, + P_CHARGING_FUNCTION_ADDRESSES_E, + P_CHARGING_VECTOR_E, + P_VISITED_NETWORK_E, + // [3608 ] + SERVICE_ROUTE_E, + // [3841 ] + ACCEPT_CONTACT_E, + REQUEST_DISPOSITION_E, + // [4028 ] + MIN_SE_E, + SESSION_EXPIRES_E, + P_ASSERTED_SERVICE_E, + // [5009 ] + P_EARLY_MEDIA_E, + // http://tools.ietf.org/html/draft-johnston-sipping-cc-uui-07 + // Transporting User to User Call Control Information in SIP for ISDN Interworking + USER_TO_USER_E, + // [6442 ] /* + GEOLOCATION_E, + GEOLOCATION_ROUTING_E, + SESSION_ID_E, + SIP_ETAG_E, + SIP_IF_MATCH_E, + FEATURE_CAPS_E, + // 6086 + RECV_INFO_E, + INFO_PACKAGE_E, + // 2616 + HOST_E, + // + RESOURCE_PRIORITY_E, //4412 + ANSWER_MODE_E, //5373 + PRIV_ANSWER_MODE_E, //5373 + TARGET_DIALOG_E, //4538 + P_ANSWER_STATE_E //4964 + } + + // [7.1 ] + type enumerated Method { + ACK_E, + BYE_E, + CANCEL_E, + INVITE_E, + OPTIONS_E, + REGISTER_E, + PRACK_E // Note: this element is not defined in [5 ] + , + SUBSCRIBE_E, + NOTIFY_E // [3265 ] + , + PUBLISH_E // [3903/12 ] + , + REFER_E // [3515 ] + , + UPDATE_E // [3311 ] + , + MESSAGE_E // [3428 ] + , + INFO_E // [2976 ] + , + UNKNOWN_METHOD_E + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39, 20.42, 20.43 ] + type record HostPort { + charstring host optional, // hostname, IPv4 or IPv6 + integer portField optional // represented as an integer + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39 ] + /** + * @desc identifier for user or telephone subscriber + * @member userOrTelephoneSubscriber provides the username or a phone name identifying the subscriber + * @member password related password information + */ + type record UserInfo { + charstring userOrTelephoneSubscriber, + charstring password optional + } + + // [19.1.1 ;used in: 20.10, 20.20, 20.30, 20.31, 20.34, 20.39 ] + /** + * @desc Uniform Resource Identifier (URI) + * @member scheme distinguishes call types, e.g. voice, fax etc. or related address scheme, e.g. tel, sip + * @member userInfo Contains user information (also in non-SIP URLs) with optional parameter as passwords + * @member hostPort Hostname or IP address information and port identifier of the target + * @member urlParameters Contains either SIP or TEL URL parameters, separated by semicolons, e.g. transport=tcp or user=phone + * @member headers Additional information added after the parameters, e.g. priority=urgent + */ + type record SipUriComponents { // sip-uri acc. to RFC 3261 cl. 19.1 + UserInfo userInfo optional, + HostPort hostPort + } + + type record TelUriComponents { // tel-uri acc. to RFC 3966 + charstring subscriber + } + + type record UrnUriComponents { // urn-uri acc. to RFC 2141 + charstring namespaceId, // e.g. "service" as acc. to RFC 5031 + charstring namespaceSpecificString // e.g. "sos" + } + + type union UriComponents { + SipUriComponents sip, // scheme: "sip" or sips" + TelUriComponents tel, // scheme: "tel" + UrnUriComponents urn, // scheme: "urn" + charstring other // scheme: none of the above schemes + } + + type record SipUrl { + charstring scheme, // e.g "sip" or "tel" + UriComponents components, // corresponding to the scheme + SemicolonParam_List urlParameters optional, + AmpersandParam_List headers optional + } + + // [20.1, RFC2616 14.1 ] + type record AcceptBody { + charstring mediaRange, + SemicolonParam_List acceptParam optional + } + + // [20.1, RFC2616 14.1 ] + type set of AcceptBody AcceptBody_List; + + // [20.4 ] + type record AlertInfoBody { + charstring url, // any URI + SemicolonParam_List genericParams optional + } + + // [20.4 ] + type set of AlertInfoBody AlertInfoBody_List; + + // [20.8 ] + type charstring CallidString; + // token [" + // [20.8 ] + type set of CallidString CallidString_List; + + // [20.9 ] + type record CallInfoBody { + charstring url, // any URI + SemicolonParam_List infoParams optional + } + + // [20.9 ] + type set of CallInfoBody CallInfoBody_List; + + // [20.27, 20.44, .......10.32, 10.48; RFC2616 14.33, 14.47; RFC2617 1.2 ] + type union Challenge { + CommaParam_List digestCln, + OtherAuth otherChallenge + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39 ] + type union DisplayName + { + charstring token, + charstring quotedString + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39 ] + type record NameAddr { + DisplayName displayName optional, + SipUrl addrSpec + } + + // [20.10, 20.20, 20.31, 20.39 ] + type union Addr_Union { + NameAddr nameAddr, + SipUrl addrSpecUnion // STS: "Union" added to filed name to avoid dangerous name equivalence with 2nd NameAddr field + } + + // [20.10 ] + type record ContactAddress { + Addr_Union addressField, + SemicolonParam_List contactParams optional + } + + // [20.10 ] + type set of ContactAddress ContactAddress_List; // 1 or more elements + // [20.10 ] + type union ContactBody { + charstring wildcard, + ContactAddress_List contactAddresses + } + + // [20.2, 20.12; RFC2616 14.3, 14.11 ] + type charstring ContentCoding; + + // [20.2, 20.12; RFC2616 14.3, 14.11 ] + type set of ContentCoding ContentCoding_List; + + // [20.7, 20.28; RFC2616 14.35 RFC2617 1.2 ] + type union Credentials { + CommaParam_List digestResponse, + OtherAuth otherResponse + } + + // allow multiple Authorization headers due to RFC3261 ch. 20.7 and 20.28 + type record of Credentials CredentialsList; + + // [20.19, 20.23, 20.33 ] + type charstring DeltaSec; // an external operation can handle this field + // [20.18 ] + type record ErrorInfoBody { + charstring uri, // any URI + SemicolonParam_List genericParams optional + } + + // [20.18 ] + type set of ErrorInfoBody ErrorInfoBody_List; + + // [20.3 RFC2616 14.4 ] + type record LanguageBody { + charstring languageRange, + SemicolonParam_List acceptParam optional + } + + // [20.3 RFC2616 14.4 ] + type set of LanguageBody LanguageBody_List; + + // [20.13; RFC2616 14.12 ] + type charstring LanguageTag; + + // [20.13; RFC2616 14.12 ] + type set of LanguageTag LanguageTag_List; + + // [20.5 ] + type set of charstring Method_List; + + // [20.29, 20.32, 20.37, 20.40 ] + type charstring OptionTag; + + // [20.29, 20.32, 20.37, 20.40 ] + type set of OptionTag OptionTag_List; + + // [20.7, 20.27, 20.28, 20.44 ; RFC2616 14.33, 14.47; RFC2617 1.2 ] + type record OtherAuth { + charstring authScheme, + CommaParam_List authParams + } + + type record Payload { + integer payloadlength, + charstring payloadvalue + } + + // [20.30,20.34 ] + type record RouteBody { + NameAddr nameAddr, + SemicolonParam_List rrParam optional + } + + // [20.30,20.34 ] + type record of RouteBody RouteBody_List; + + // [20.42 ] + type record SentProtocol { + charstring protocolName, + charstring protocolVersion, + charstring transport + } + + // [20.35, 20.41; RFC2616 14.43 ] + type charstring ServerVal; + + // [20.35, 20.41; RFC2616 14.43 ] + type set of ServerVal ServerVal_List; + + // [20.38 ] + type record TimeValue { + integer majorDigit, // represented as an integer + integer minorDigit optional // represented as an integer + } + + // [20.42 ] + type record ViaBody { + SentProtocol sentProtocol, + HostPort sentBy, + SemicolonParam_List viaParams optional + } + + // [20.42 ] + type record of ViaBody ViaBody_List; + + // [20.43 ] + type union WarnAgent { + HostPort hostPort, + charstring pseudonym + } + + // [20.43 ] + type record WarningValue { + integer warnCode, // represented as an integer + WarnAgent warnAgent, + charstring warnText + } + + // [20.43 ] + type set of WarningValue WarningValue_List; + + type Addr_Union PAssertedIDValue; + + type record of PAssertedIDValue PAssertedIDValue_List; + + type charstring PAssertedServiceValue; + + type Addr_Union PPreferredIDValue; + + type record of PPreferredIDValue PPreferredIDValue_List; + + type charstring PrivacyValue; + + type record of PrivacyValue PrivacyValue_List; + + type set of FcValue FcValue_List; + type record FcValue { + charstring wildcard(c_WILDCARD), + SemicolonParam_List fcParams optional + } + + + } // end group TokensType + + + group HeaderFieldTypes // Header Fields + { + group CommonHeaderFieldTypes { + // [20.1, RFC2616 14.1 ] + type record Accept { + FieldName fieldName (ACCEPT_E) , + AcceptBody_List acceptArgs optional + } + + // [20.2, RFC2616 14.3 ] + type record AcceptEncoding { + FieldName fieldName (ACCEPT_ENCODING_E) , + ContentCoding_List contentCoding optional + } + + // [20.3, RFC2616 14.4 ] + type record AcceptLanguage { + FieldName fieldName (ACCEPT_LANGUAGE_E) , + LanguageBody_List languageBody optional + } + + // [20.4 ] + type record AlertInfo { + FieldName fieldName (ALERT_INFO_E) , + AlertInfoBody_List alertInfoBody optional + } + + // [20.5 ] + type record Allow { + FieldName fieldName (ALLOW_E) , + Method_List methods optional + } + + // [20.6 ] + type record AuthenticationInfo { + FieldName fieldName (AUTHENTICATION_INFO_E) , + CommaParam_List ainfo + } + + // [20.7 RFC2617 3.2.2 ] + type record Authorization { + FieldName fieldName (AUTHORIZATION_E) , + CredentialsList body // changed from Credentials to allow multiple Authorization headers + } + + // [20.8 ] + type record CallId { + FieldName fieldName (CALL_ID_E) , + CallidString callid + } + + // [20.9 ] + type record CallInfo { + FieldName fieldName (CALL_INFO_E) , + CallInfoBody_List callInfoBody optional + } + + // [20.10 ] + type record Contact { + FieldName fieldName (CONTACT_E) , + ContactBody contactBody + } + + // [20.11 ] + type record ContentDisposition { + FieldName fieldName (CONTENT_DISPOSITION_E) , + charstring dispositionType, + SemicolonParam_List dispositionParams optional + } + + // [20.12 RFC2616 14.11 ] + type record ContentEncoding { + FieldName fieldName (CONTENT_ENCODING_E) , + ContentCoding_List contentCoding + } + + // [20.13 RFC2616 14.12 ] + type record ContentLanguage { + FieldName fieldName (CONTENT_LANGUAGE_E) , + LanguageTag_List languageTag + } + + // [20.14 ] + type record ContentLength { + FieldName fieldName (CONTENT_LENGTH_E) , + integer len // this field is represented as an integer + } + + // [20.15 ] + type record ContentType { + FieldName fieldName (CONTENT_TYPE_E) , + charstring mTypeSubtype , + SemicolonParam_List mParams optional + } + + // [20.16 ] + type record CSeq { + FieldName fieldName (CSEQ_E) , + integer seqNumber, // this field is represented as an integer + charstring method + } + + // [20.17 ] + type record Date { + FieldName fieldName (DATE_E) , + charstring sipDate + } + + // [20.18 ] + type record ErrorInfo { + FieldName fieldName (ERROR_INFO_E) , + ErrorInfoBody_List errorInfo optional + } + + // [20.19 ] + type record Expires { + FieldName fieldName (EXPIRES_E) , + DeltaSec deltaSec + } + + //[6809] + type record FeatureCaps { + FieldName fieldName(FEATURE_CAPS_E), + FcValue_List fcValues + } + + // [20.20 ] + type record From { + FieldName fieldName (FROM_E) , + Addr_Union addressField, + SemicolonParam_List fromParams optional + } + + // [2616] + type record Host { + FieldName fieldName(HOST_E), + charstring host, // an empty value is represented by the empty charstring "" + integer portField optional + } + + // [20.21 ] + type record InReplyTo { + FieldName fieldName (IN_REPLY_TO_E) , + CallidString_List callids + } + + // [20.22 ] + type record MaxForwards { + FieldName fieldName (MAX_FORWARDS_E) , + integer forwards // this field is represented as an integer + } + + // [20.23 ] + type record MinExpires { + FieldName fieldName (MIN_EXPIRES_E) , + DeltaSec deltaSec + } + + // [20.24 RFC2616 19.4.1 ] + type record MimeVersion { + FieldName fieldName (MIME_VERSION_E) , + integer majorNumber, // this field is represented as an integer + integer minorNumber // this field is represented as an integer + } + + // [20.25 ] + type record Organization { + FieldName fieldName (ORGANIZATION_E) , + charstring organization + } + + // [20.26 ] + type record Priority { + FieldName fieldName (PRIORITY_E) , + charstring priorityValue + } + + // [20.27 RFC2616 14.33 RFC2617 1.2 ] + type record ProxyAuthenticate { + FieldName fieldName (PROXY_AUTHENTICATE_E) , + Challenge challenge + } + + // [20.28 RFC2616 14.35 RFC2617 1.2 ] + type record ProxyAuthorization { + FieldName fieldName (PROXY_AUTHORIZATION_E) , + CredentialsList + credentials // changed from Credentials to allow multiple Authorization headers + } + + // [20.29 ] + type record ProxyRequire { + FieldName fieldName (PROXY_REQUIRE_E) , + OptionTag_List optionsTags + } + + // [20.30 ] + type record RecordRoute { + FieldName fieldName (RECORD_ROUTE_E) , + RouteBody_List routeBody + } + + type set of InfoPackage_Type InfoPackage_List; + + type record InfoPackage_Type { + charstring infoPackageName, + SemicolonParam_List infoPackageParams optional + + } + + //[6086] + type record RecvInfo { + FieldName fieldName(RECV_INFO_E), + InfoPackage_List infoPackageList + } + + //[6086] + type record InfoPackage { + FieldName fieldName(INFO_PACKAGE_E), + InfoPackage_Type infoPackageType + } + + // [20.31 ] + type record ReplyTo { + FieldName fieldName (REPLY_TO_E) , + Addr_Union addressField, + SemicolonParam_List replyToParams optional + } + + // [20.32 ] + type record Require { + FieldName fieldName (REQUIRE_E) , + OptionTag_List optionsTags + } + + // [20.33 ] + type record RetryAfter { + FieldName fieldName (RETRY_AFTER_E) , + DeltaSec deltaSec, + charstring comment optional, + SemicolonParam_List retryParams optional + } + + // [20.34 ] + type record Route { + FieldName fieldName (ROUTE_E) , + RouteBody_List routeBody + } + + // [20.35 RFC2616 14.38 ] + type record Server { + FieldName fieldName (SERVER_E) , + ServerVal_List serverBody + } + + // [20.36 ] + type record Subject { + FieldName fieldName (SUBJECT_E) , + charstring summary + } + + // [20.37 ] + type record Supported { + FieldName fieldName (SUPPORTED_E) , + OptionTag_List optionsTags optional + } + + // [20.38 ] + type record Timestamp { + FieldName fieldName (TIMESTAMP_E) , + TimeValue timeValue optional, + TimeValue delay optional + } + + // [20.39 ] + type record To { + FieldName fieldName (TO_E) , + Addr_Union addressField, + SemicolonParam_List toParams optional + } + + // [20.40 ] + type record Unsupported { + FieldName fieldName (UNSUPPORTED_E) , + OptionTag_List optionsTags + } + + // Undefined header field + type record UndefinedHeader { + charstring headerName, + charstring headerValue + } + + type set of UndefinedHeader UndefinedHeader_List; + + // [20.41 RFC2616 14.43 ] + type record UserAgent { + FieldName fieldName (USER_AGENT_E) , + ServerVal_List userAgentBody + } + + // [20.42 ] + type record Via { + FieldName fieldName (VIA_E) , + ViaBody_List viaBody + } + + // [20.43 ] + type record Warning { + FieldName fieldName (WARNING_E) , + WarningValue_List warningValue + } + + // [20.44 RFC2616 14.47 RFC2617 1.2 ] + type record WwwAuthenticate { + FieldName fieldName (WWW_AUTHENTICATE_E) , + Challenge challenge + } + + } // end group CommonHeaderFieldTypes + group RFC3262HeaderFieldTypes { + // [3262/7.1 ] + type record RSeq { + FieldName fieldName (RSEQ_E) , + integer responseNum + } + + // [3262/7.2 ] + type record RAck { + FieldName fieldName (RACK_E) , + integer responseNum, + integer seqNumber, + charstring method + } + + } // end group RFC3262HeaderFieldTypes + + group RFC3265HeaderFieldTypes { + // [3265/7.2 ] + type record AllowEvents { + FieldName fieldName (ALLOW_EVENTS_E) , + EventType_List eventTypes + } + + type set of EventType EventType_List; + type charstring EventType; + + // [3265/7.2 ] + type record Event { + FieldName fieldName (EVENT_E) , + EventType eventType, + SemicolonParam_List eventParams optional + } + + // [3265/7.2 ] + type record SubscriptionState { + FieldName fieldName (SUBSCRIPTION_STATE_E) , + SubState subState, + SemicolonParam_List substateParams optional + } + + type charstring SubState; + + } // end group RFC3265HeaderFieldTypes + + group RFC3313HeaderFieldTypes { + // [3313/5 ] + type record PMediaAuthorization { + FieldName fieldName (P_MEDIA_AUTHORIZATION_E) , + PMediaAuthorization_List pMediaAuthorizations + } + + type charstring PMediaAuthValue; // HEXDIG "0"-"9", "A"-"F" + type record of PMediaAuthValue PMediaAuthorization_List; + + + } // end group RFC3265HeaderFieldTypes + + group RFC3323HeaderFieldTypes { + // [3323 ] + type record Privacy { + FieldName fieldName (PRIVACY_E) , + PrivacyValue_List privValueList + } + + } // end group RFC3323HeaderFieldTypes + + group RFC3325HeaderFieldTypes { + // [3325 ] + type record PAssertedID { + FieldName fieldName (P_ASSERTED_ID_E) , + PAssertedIDValue_List pAssertedIDValueList + } + + // [3325 ] + type record PPreferredID { + FieldName fieldName (P_PREFERRED_ID_E) , + PPreferredIDValue_List pPreferredIDValueList + } + // draft-drage-sipping-service-identification-01 (July 2007) + type record PPreferredService { + FieldName fieldName (P_PREFERRED_SERVICE_E) , + charstring serviceId + } + + + } // end group RFC3325HeaderFieldTypes + + group RFC3326HeaderFieldTypes { + // [3326 ] + type record of ReasonValue ReasonValues; + + type record ReasonValue { + charstring token, + SemicolonParam_List reasonParams optional + } + + type record Reason { + FieldName fieldName (REASON_E) , + ReasonValues reasonValues + } + + } // end group RFC3326HeaderFieldTypes + + group RFC3327HeaderFieldTypes { + // [3327 ] + type record Path { + FieldName fieldName (PATH_E) , + PathValues pathValues + } + + type record of PathValue PathValues; + + type record PathValue { + NameAddr nameAddr, + SemicolonParam_List rrParam optional + } + + } // end group RFC3515HeaderFieldTypes + + + group RFC4488HeaderFieldTypes { + // [4488 ] + type record ReferSub { + FieldName fieldName (REFER_SUB_E) , + boolean referSubValue, + SemicolonParam_List referSubParams optional + } + + } // end group RFC4488HeaderFieldTypes + + group RFC3329HeaderFieldTypes { + // [RFC3329/2.2 ] + type record SecurityMechanism { + charstring mechName, + SemicolonParam_List mechParams optional + } + + type set of SecurityMechanism SecurityMechanism_List; + + type record SecurityClient { + FieldName fieldName (SECURITY_CLIENT_E) , + SecurityMechanism_List securityMech + } + + type record SecurityServer { + FieldName fieldName (SECURITY_SERVER_E) , + SecurityMechanism_List securityMech + } + + type record SecurityVerify { + FieldName fieldName (SECURITY_VERIFY_E) , + SecurityMechanism_List securityMech + } + + } // end group RFC3329HeaderFieldTypes + + group RFC3455HeaderFieldTypes { + type record of NameAddrParam NameAddrParam_List; + + type record NameAddrParam { + NameAddr nameAddr, + SemicolonParam_List genericParams optional + } + // [3455/5.1 ] + type record PAssociatedURI { + FieldName fieldName (P_ASSOCIATED_URI_E) , + NameAddrParam_List nameAddrList + } + // [3455/5.2 ] + type record PCalledPartyID { + FieldName fieldName (P_CALLED_PARTY_E) , + NameAddrParam nameAddParams + } + + type record of VnetworkSpec VnetworkSpec_List; + + type record VnetworkSpec { + charstring vNetworkSpecToken, + SemicolonParam_List genericParams optional + } + + // [3455/5.3 ] + type record PVisitedNetworkID { + FieldName fieldName (P_VISITED_NETWORK_E) , + VnetworkSpec_List vNetWorkSpec + } + + // [3455/5.4 ] + type record PAccessNetworkInfo { + FieldName fieldName (P_ACCESS_NETWORK_INFO_E) , + charstring accessType, + SemicolonParam_List genericParams optional + } + + // [3455/5.5 ] + type record PChargingFunctionAddresses { + FieldName fieldName (P_CHARGING_FUNCTION_ADDRESSES_E) , + SemicolonParam_List chargeAddrParams optional + } + + // [3455/5.6 ] + type record PChargingVector { + FieldName fieldName (P_CHARGING_VECTOR_E) , + charstring icidValue, + SemicolonParam_List chargeParams optional + } + + } // end group RFC33455HeaderFieldTypes + + group RFC3515HeaderFieldTypes { + // [3515 ] + type record ReferTo { + FieldName fieldName (REFER_TO_E) , + NameAddr nameAddr, + SemicolonParam_List referToParams optional + } + + } // end group RFC3515HeaderFieldTypes + + group RFC3608HeaderFieldTypes { + // [3608 ] + type record ServiceRoute { + FieldName fieldName (SERVICE_ROUTE_E) , + RouteBody_List routeBody + } + + } // end group RFC33608HeaderFieldTypes + + + group RFC3841HeaderFieldTypes { + // [3841 ] + type record AcceptContact { + FieldName fieldName (ACCEPT_CONTACT_E) , + AcRcValue_List acValues + } + + type set of AcRcValue AcRcValue_List; + + type record AcRcValue { + charstring wildcard (c_WILDCARD) , + SemicolonParam_List acRcParams optional + } + // [RFC 3841 ] + type charstring Directive; + type set of Directive Directive_List; + type record RequestDisposition { + FieldName fieldName (REQUEST_DISPOSITION_E) , + Directive_List directives + } + + + } // end group RFC3841HeaderFieldTypes + + group RFC3891HeaderFieldTypes { + // [3891 ] + type record Replaces { + FieldName fieldName (REPLACES_E) , + CallidString callid, + SemicolonParam_List replacesParams optional + } + + } // end group RFC3891HeaderFieldTypes + + group RFC3892HeaderFieldTypes { + // [3892 ] + type record ReferredBy { + FieldName fieldName (REFERRED_BY_E) , + NameAddr nameAddr, + SemicolonParam_List referredbyIdParams optional + } + + } // end group RFC3892HeaderFieldTypes + + group RFC4028HeaderFieldTypes { + // [4028 ] + type record MinSE { + FieldName fieldName (MIN_SE_E) , + DeltaSec deltaSec, + SemicolonParam_List minSeParam optional + } + // [4028 ] + type record SessionExpires { + FieldName fieldName (SESSION_EXPIRES_E) , + DeltaSec deltaSec, + SemicolonParam_List seParam optional + } + + } // end group RFC4028HeaderFieldTypes + + group RFC4244HeaderFieldTypes { + // [4244 ] + type record HistoryInfo { + FieldName fieldName (HISTORY_INFO_E) , + HistoryInfo_List historyInfoList + } + + type record of HistoryInfoEntry HistoryInfo_List; + + type record of integer IntegerList; + + type record HistoryInfoEntry { + NameAddr nameAddr, + IntegerList hiIndex optional, + SemicolonParam_List hiExtention optional + } + + type record of charstring StringList; + + } // end group RFC4244HeaderFieldTypes + + group RFC5009PEarlyMediaHeader { + // [5009 ] + type record PEarlyMedia { + FieldName fieldName (P_EARLY_MEDIA_E) , + EM_Param_List em_param + } + type charstring EM_Param; + type set of EM_Param EM_Param_List; + + } // end group RFC5009PEarlyMediaHeader + + // http://tools.ietf.org/html/draft-johnston-sipping-cc-uui-07, expires 16.Aug.2009 + // Transporting User to User Call Control Information in SIP for ISDN Interworking + // type definition of SIP header mechanism + group UserToUser_PreliminaryRFCDraft { + type record UserToUser { + FieldName fieldName (USER_TO_USER_E) , + charstring uuiData length(256), + /*length limitation due to ISDN, max of allowed 128 hex digits are represented by 256 characters*/ + GenericParam uuiParam + } + + + } // end group UserToUser_PreliminaryRFCDraft + + type record PAssertedService { + FieldName fieldName (P_ASSERTED_SERVICE_E) , + PAssertedServiceValue pAssertedServiceValue + } + + group RFC6442GeolocationConveyance { + // [6442 ] + type record Geolocation { + // RFC6442 clause 4.1 + FieldName fieldName (GEOLOCATION_E) , + SipUrl addrSpec, + SemicolonParam_List geolocParam optional + } + type enumerated GeolocationRoutingState { + GEOLOCATION_ROUTING_YES_E, GEOLOCATION_ROUTING_NO_E, GEOLOCATION_ROUTING_OTHER_E + } + type record GeolocationRouting { + // RFC6442 clause 4.2 + FieldName fieldName (GEOLOCATION_ROUTING_E) , + GeolocationRoutingState state, + GenericParam genericValue optional + } + + } // end group RFC6442GeolocationConveyance + + type charstring SessIdString length(32); + + type record SessionId { + FieldName fieldName (SESSION_ID_E) , + SessIdString sessid, + GenericParam sessidParam optional + } + + type charstring EntityTag; + + type record SIP_ETag { + FieldName fieldName (SIP_ETAG_E) , + EntityTag entityTag + } + + type record SIP_If_Match { + FieldName fieldName (SIP_IF_MATCH_E) , + EntityTag entityTag + } + + // RFC4412 + type record ResourcePriority { + FieldName fieldName (RESOURCE_PRIORITY_E) , + ResourcePriority_List resourcePriorityList + } + type set of R_Value ResourcePriority_List; + type record R_Value { + charstring namespace, + charstring rPriority + } + + // RFC5373 + type record AnswerMode { + FieldName fieldName (ANSWER_MODE_E), + AnswerMode_Value answerMode_Value, + SemicolonParam_List answerModeParams optional + } + type record PrivAnswerMode { + FieldName fieldName (PRIV_ANSWER_MODE_E), + AnswerMode_Value answerMode_Value, + SemicolonParam_List answerModeParams optional + } + type charstring AnswerMode_Value; + + // RFC4538 + type record TargetDialog { + FieldName fieldName (TARGET_DIALOG_E), + CallidString callid, + TdParam tdParam optional + } + type record TdParam { + charstring remoteParam optional, + charstring localParam optional, + SemicolonParam_List genericParams optional + } + + // RFC4964 + type record PAnswerState { + FieldName fieldName (P_ANSWER_STATE_E), + charstring answerType, + SemicolonParam_List genericParams optional + } + + + } // end group HeaderFieldTypes + + group MessageHeaderTypes { + + // Message-Header for all SIP requests and responses [20 ] + type set MessageHeader { + Accept accept optional, + AcceptContact acceptContact optional, + AcceptEncoding acceptEncoding optional, + AcceptLanguage acceptLanguage optional, + AlertInfo alertInfo optional, + Allow allow optional, + AllowEvents allowEvents optional, + // 3265/7.2 + AuthenticationInfo authenticationInfo optional, + // only in responses + Authorization authorization optional, + // only in requests + CallId callId optional, + // optional only in Invalid test cases mandatory otherwise + CallInfo callInfo optional, + Contact contact optional, + // optional in response and all requests except INVITE where mandatory + ContentDisposition contentDisposition optional, + ContentEncoding contentEncoding optional, + ContentLanguage contentLanguage optional, + ContentLength contentLength optional, + // optional in responses and all requests except ACK where mandatory + ContentType contentType optional, + CSeq cSeq optional, + // optional only in Invalid test cases mandatory otherwise + Date date optional, + ErrorInfo errorInfo optional, + // only in responses + Event event optional, + // 3265/7.2 + Expires expires optional, + FeatureCaps featureCaps optional, // 6809 + From fromField, + Geolocation geolocation optional, + // 6442 + GeolocationRouting geolocationRouting optional, + // 6442 + HistoryInfo historyInfo optional, + // 4244 + InfoPackage infoPackage optional, + // 6086 + InReplyTo inReplyTo optional, + // only in requests + MaxForwards maxForwards optional, + // mandatory in requests not required in responses! + MimeVersion mimeVersion optional, + MinExpires minExpires optional, + // only in responses + MinSE minSE optional, + // 4028 + Organization organization optional, + PAccessNetworkInfo pAccessNetworkInfo optional, + // 3455 + PAssertedID pAssertedID optional, + // 3325 + PAssertedService pAssertedService optional, + PAssociatedURI pAssociatedURI optional, + // 3455 + Path path optional, + // 3327 + PCalledPartyID pCalledPartyID optional, + // 3455 + PChargingFunctionAddresses pChargingFunctionAddresses optional, + // 3455 + PChargingVector pChargingVector optional, + // 3455 + PEarlyMedia pEarlyMedia optional, + // 5009 + PMediaAuthorization pMediaAuthorization optional, + // 3313 + PPreferredID pPreferredID optional, + // 3325 + PPreferredService pPreferredService optional, + // draft-drage-sipping-service-identification-01 (July 2007) + Priority priority optional, + // only in requests + Privacy privacy optional, + // 3323 + ProxyAuthenticate proxyAuthenticate optional, + // only in responses + ProxyAuthorization proxyAuthorization optional, + // only in requests + ProxyRequire proxyRequire optional, + // only in requests + PVisitedNetworkID pVisitedNetworkID optional, + // 3455 + RAck rAck optional, + // 3262/7.1 + RSeq rSeq optional, + // 3262/7.1 + Reason reason optional, + // 3326 + RecordRoute recordRoute optional, + RecvInfo recvInfo optional, + // 6086 + RequestDisposition requestDisposition optional, + // 3841 + ReferredBy referredBy optional, + // 3892 - REFER method + ReferTo referTo optional, + // 3515 - REFER method + ReferSub referSub optional, + // 4488 - REFER method + Replaces replaces optional, + // 3891 + ReplyTo replyTo optional, + // optional in responses and INVITE requests + Require require optional, + RetryAfter retryAfter optional, + // only in responses + Route route optional, + // only in requests + SecurityClient securityClient optional, + // 3329 + SecurityServer securityServer optional, + // 3329 + SecurityVerify securityVerify optional, + // 3329 + Server server optional, + // only in responses + ServiceRoute serviceRoute optional, + // 3608 + SessionExpires sessionExpires optional, + // 4028 + SessionId sessionId optional, + SIP_ETag sipETag optional, + SIP_If_Match sipIfMatch optional, + Subject subject optional, + // only in requests + SubscriptionState subscriptionState optional, + // 3265/7.2 + Supported supported optional, + Timestamp timestamp_ optional, + To toField, + Unsupported unsupported optional, + // only in responses + UserToUser userToUser optional, + UserAgent userAgent optional, + Via via, + Warning warning optional, + WwwAuthenticate wwwAuthenticate optional, + ResourcePriority resourcePriority optional, + // RFC4412 + AnswerMode answerMode optional, + // RFC5373 + PrivAnswerMode privAnswerMode optional, + // RFC5373 + TargetDialog targetDialog optional, + // RFC4538 + PAnswerState pAnswerState optional, + // RFC4964 + // only in responses + UndefinedHeader_List undefinedHeader_List optional + } + + + } // end group MessageHeaderTypes + + group StartLineTypes { + // Request-Line [7.1 ] + type record RequestLine { + Method method, + SipUrl requestUri, + charstring sipVersion + } + + // Status-Line [7.2 ] + type record StatusLine { + charstring sipVersion, + integer statusCode, + charstring reasonPhrase + } + + + } // end group StartLineTypes + + + group otherTypes { + + type record SipUserProfile { + /** + * @desc integer for the userprofile identifier + */ + integer id, + /** + * @desc integer for Port number to exchange SIP messages + */ + integer currPort, + /** + * @desc charstring for IP address to exchange SIP messages + */ + charstring currIpaddr, + /** + * @desc integer for Port number to exchange SIP messages + */ + integer contactPort, + /** + * @desc charstring for IP address to exchange SIP messages + */ + charstring contactIpaddr, + /** + * @desc charstring for IP address used by the TS to exchange media streams + */ + charstring bearerIpaddr, + /** + * @desc charstring for identity of the tester local domain + */ + charstring homeDomain, + /** + * @desc charstring for identity of the tester local user + */ + charstring publUsername, + /** + * @desc charstring for RFC 2617 3.2.1 qop options: Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring qop, + /** + * @desc charstring for RFC 2617 3.2.2 username for authentication The name of user in the specified realm + */ + charstring privUsername, + /** + * @desc charstring for RFC 2617 3.2.2.2 passwd: A known shared secret, the password of user of the specified username + */ + charstring passwd, + /** + * @desc charstring for registrar domain for authentication and request line + */ + charstring registrarDomain + } + + + + } // end group otherTypes + + + } // end group Subtypes + + + + group MSGtypes { + + group RequestTypes { + // [7.1 ] + /** + * @desc generic type of a SIP request message + * @member statusLine contains a method name, a Request-URI, and the protocol version + * @member msgHeader include all possible header fields that are allowed to be present according to RFCs and other standards + * @member messageBody depends on the request method, includes e.g. SDP message. + * @member payload contains the whole message as it has been received in its text format + */ + type record Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // Note: the introduction of the following specific types is to enable better means for logging + // on the other side the generic type is useful for functions dealing with multiple SIP message types + type record REGISTER_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record INVITE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record OPTIONS_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record BYE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record CANCEL_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record ACK_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3262/7.1 ] + type record PRACK_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3265/7.1 ] + type record NOTIFY_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3265/7.1 ] + type record SUBSCRIBE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3903/11.1 ] + type record PUBLISH_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3311/7 ] + type record UPDATE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record REFER_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record MESSAGE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record INFO_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type union RequestUnion { + REGISTER_Request Register, + INVITE_Request Invite, + OPTIONS_Request Options, + BYE_Request Bye, + CANCEL_Request Cancel, + ACK_Request Ack, + PRACK_Request Prack, + NOTIFY_Request Notify, + SUBSCRIBE_Request Subscribe, + PUBLISH_Request Publish, + UPDATE_Request Update, + REFER_Request Refer, + MESSAGE_Request Message, + INFO_Request Info// [2976 ] + } + + } // end group RequestTypes + + group ResponseTypes { + // [7.2 ] + /** + * @desc generic type of a SIP response message + * @member statusLine consists of the protocol version followed by a numeric Status-Code and its associated textual phrase + * @member msgHeader include all possible header fields that are allowed to be present according to RFCs and other standards + * @member messageBody depends on the response method, includes e.g. SDP message. + * @member payload contains the whole message as it has been received in its text format + */ + type record Response { + StatusLine statusLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + } // end group ResponseTypes + + // This MSG type is defined for sending synctactic variations, ans syntactically + // erroneous messages, and receving messages failed parsing. + group SyntacticTypes { + type charstring Raw; + + } // end group SyntacticTypes + + + // This type is defined for particular SIP message body types like SDP + } // end group MSGTypes + + } // end group Types +} +with { + encode "SIPCodec"; variant ""; +} // end module LibSip_SIPTypesAndValues diff --git a/ttcn/patch_lib_sip_titan/LibSip_SMSFunctions.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SMSFunctions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..7f1d2b8ca3be68b43d96eb3ac68e02939fd04f53 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SMSFunctions.ttcn @@ -0,0 +1,48 @@ +/** + * @author STF 435, 471 + * @version $Id$ + * @desc This module provides the functions used by the test component + * for SIP-SMS over IMS as specified in 3GPP 24-341 tests. + * This module is part of LibSipV3. + */ +module LibSip_SMSFunctions { + import from LibSip_SMSTypesAndValues all; + + function f_IA5_2oct( + charstring p_ASCII_String + ) return octetstring { + var integer i; + var integer j; + var integer v_Length := lengthof(p_ASCII_String); + var integer v_Temp; + var octetstring v_Noctets := ''O; + var bitstring v_TempBitSrc := ''B; + var bitstring v_TempBitDes := ''B; + + if ((v_Length <= 0) or (v_Length > 160) or (((v_Length * 7) mod 8) != 0)) { + log("*** " & __SCOPE__ & "INFO: Invalid value of input string length ***"); + } + + for (i := 0; i < v_Length; i := i + 1) { + v_Temp := char2int(p_ASCII_String[i]); + v_TempBitSrc := int2bit(v_Temp, 8); + + for (j := 1; j <= 7; j := j + 1) { + + v_TempBitDes := v_TempBitSrc[8 - j] & v_TempBitDes; + + if (((7 * i + j) mod 8) == 0) { + + v_Noctets := v_Noctets & bit2oct(v_TempBitDes); + v_TempBitDes := ''B; + } + } + } + + return v_Noctets; + } // f_IA5_2oct + + external function fx_GetSC_TimeStamp( + integer p_TimeZone + ) return TP_ServiceCentreTimeStamp_Type; +} // End of module LibSip_SMSFunctions \ No newline at end of file diff --git a/ttcn/patch_lib_sip_titan/LibSip_SMSTemplates.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SMSTemplates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..720f5aab0674d9ef35ed3969ecad8ccb58fe6b20 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SMSTemplates.ttcn @@ -0,0 +1,304 @@ +/** + * @author STF 435, STF 471 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-SMS over IMS as specified in 3GPP 24-341 tests. + * This module is part of LibSipV3. + */ +module LibSip_SMSTemplates { + import from LibCommon_DataStrings all; + import from LibSip_SMSTypesAndValues all; + import from LibSip_SMSFunctions all; + + group SMS_Templates_Group { + + /* Non-SMS Type Constraints */ + template(present) TypeOfNumberingPlan mw_TypeOfNumberingPlanAny := { + extBit := ?, + typeOfNumber := ?, + numberingPlanId := ? + } + + template(value) TypeOfNumberingPlan m_TypeOfNumberingPlan := { + extBit := '1'B, + typeOfNumber := '001'B, // international number + numberingPlanId := + '0001'B // ISDN/telephony numbering plan (Rec. E.164/E.163) + } + + template(present) TypeOfNumberingPlan mw_TypeOfNumberingPlan := mw_TypeOfNumberingPlanAny; + + /* End Non-SMS Type Constraints */ + template(value) RP_OriginatorAddress_dl m_RP_OriginatorAddress_dl := { + spare := omit, + iei := omit, + iel := '06'O, // 6 semi-octets + typeOfNumberingPlan := m_TypeOfNumberingPlan, + digits := '001122'O + } + + template(present) RP_OriginatorAddress_ul mw_RP_OriginatorAddress_ul := { + spare := omit, + iei := omit, + iel := '00'O + } + + template(present) RP_DestinationAddress_ul mw_RP_DestinationAddress_ul := { + spare := omit, + iei := omit, + iel := ?, + typeOfNumberingPlan := mw_TypeOfNumberingPlan, + digits := ? + } + template(omit) RP_DestinationAddress_dl m_RP_DestinationAddress_dl := { + spare := omit, + iei := omit, + iel := '00'O + } + + template(omit) RP_UserData m_RP_UserData_DELIVER( + octetstring p_Digits + ) := { + spare := omit, + iei := omit, + iel := int2oct((153 + lengthof(p_Digits)), 1), + tP_PDU := {SMS_DELIVER := m_SMS_DELIVER(p_Digits)} + } + + template(value) RP_UserData m_RP_UserData_SUBMIT_REPORT := { + spare := '0'B, + iei := c_IEI_RP_UserData, + iel := '0A'O, // the TPDU data length is 10 octets + tP_PDU := {SMS_SUBMIT_REPORT := m_SMS_SUBMIT_REPORT} + } + template(value) RP_UserData m_RP_UserData_STATUS_REPORT( + template(value) TP_MessageReference_Type p_MessageRef, + template(value) TP_Address_Type p_RecipientAddress, + template(value) TP_ServiceCentreTimeStamp_Type p_SCTP + ) modifies m_RP_UserData_SUBMIT_REPORT := { + tP_PDU := {SMS_STATUS_REPORT := m_SMS_STATUS_REPORT(p_MessageRef, p_RecipientAddress, p_SCTP)} + } + + template(present) RP_UserData mw_RP_UserData_SUBMIT := { + spare := omit, + iei := omit, + iel := ?, + tP_PDU := {SMS_SUBMIT := mw_SMS_SUBMIT_VPF_REF} + } + + template(present) RP_UserData mw_RP_UserData_DELIVER_REPORT := { + spare := '0'B, + iei := c_IEI_RP_UserData, + iel := ?, + tP_PDU := {SMS_DELIVER_REPORT := mw_SMS_DELIVER_REPORT} + } + + /* End SM-RP Type Constraints */ + /* SM-RP PDU Constraints */ + template(value) RP_DATA_dl_Type m_RP_DATA_dl_base := { + spare5 := '00000'B, + rP_MessageTypeIndicator := c_MT_RP_DATA_dl, + rP_MessageReference := '00'O, + rP_OriginatorAddress := m_RP_OriginatorAddress_dl, + rP_DestinationAddress := m_RP_DestinationAddress_dl, + rP_UserData := m_RP_UserData_DELIVER('0000'O) + } + + template(value) RP_DATA_dl_Type m_RP_DATA_dl_DELIVER( + octetstring p_Digits + ) modifies m_RP_DATA_dl_base := {rP_UserData := m_RP_UserData_DELIVER(p_Digits)} + + template(value) RP_DATA_dl_Type m_RP_DATA_dl_STATUS_REPORT( + template(value) TP_MessageReference_Type p_MessageRef, + template(value) TP_Address_Type p_RecipientAddress, + template(value) TP_ServiceCentreTimeStamp_Type p_SCTP + ) modifies m_RP_DATA_dl_base := { + rP_UserData := m_RP_UserData_STATUS_REPORT(p_MessageRef, p_RecipientAddress, p_SCTP) + } + + + template(present) RP_DATA_ul_Type mw_RP_DATA_ul_SUBMIT := { + spare5 := '00000'B, + rP_MessageTypeIndicator := c_MT_RP_DATA_ul, + rP_MessageReference := ?, + rP_OriginatorAddress := mw_RP_OriginatorAddress_ul, + rP_DestinationAddress := mw_RP_DestinationAddress_ul, + rP_UserData := mw_RP_UserData_SUBMIT + } + + template(value) RP_ACK_Type m_RP_ACK_SUBMIT_REPORT( + template(value) Oct1 p_msgReference := '00'O + ) := { + spare5 := '00000'B, + rP_MessageTypeIndicator := c_MT_RP_ACK_dl, + rP_MessageReference := p_msgReference, + rP_UserData := m_RP_UserData_SUBMIT_REPORT + } + + template(present) RP_ACK_Type mw_RP_ACK_DELIVER_REPORT := { + spare5 := '00000'B, + rP_MessageTypeIndicator := c_MT_RP_ACK_ul, + rP_MessageReference := ?, + rP_UserData := mw_RP_UserData_DELIVER_REPORT + } + + /* End SM-RP PDU Constraints */ + /* SM-TP Type Constraints */ + template(value) TP_ProtocolIdentifier_Type mw_TP_ProtocolIdentifier := { + pidType := '01'B, + interworking := '0'B, + pidValue := '00000'B + } + + template(value) TP_ProtocolIdentifier_Type m_TP_ProtocolIdentifier := { + pidType := '01'B, + interworking := '0'B, + pidValue := '00000'B + } + + template(value) TP_DataCodingScheme_Type m_TP_DataCodingScheme := { + codingGroup := '0000'B, + codeValue := '0000'B + } + + template(present) TP_Address_Type mw_TP_AddressAny := { + iel := ?, + typeOfNumberingPlan := mw_TypeOfNumberingPlanAny, + digits := * + } + + template(value) TP_Address_Type m_TP_Address( + octetstring p_Digits + ) := { + iel := int2oct(2 * lengthof(p_Digits), 1), + // length is number of useful semi-octets + // as p_digits is declared as octetstring the number must be even + typeOfNumberingPlan := m_TypeOfNumberingPlan, + digits := p_Digits + } + + template(value) TP_ParameterIndicator_Type m_TP_ParameterIndicator := { + extBit1 := '0'B, + spare4 := '0000'B, + tP_UDL := '0'B, + tP_DCS := '0'B, + tP_PID := '1'B + } + + /* End SM-TP Type Constraints */ + /* SM-TP PDU Constraints */ + template(value) SMS_DELIVER_Type m_SMS_DELIVER( + octetstring p_Digits + ) := { + tP_ReplyPath := '0'B, + tP_UserDataHeaderIndicator := '0'B, + tP_StatusReportIndication := '1'B, + spare2 := '00'B, + tP_MoreMessagesToSend := '0'B, + tP_MessageTypeIndicator := c_MT_SMS_DELIVER, + tP_OriginatingAddress := m_TP_Address(p_Digits), + tP_ProtocolIdentifier := m_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := m_TP_DataCodingScheme, + tP_ServiceCentreTimeStamp := fx_GetSC_TimeStamp(0), // Time Zone 0 assumed + tP_UserDataLength := int2oct(160, 1), + tP_UserData := f_IA5_2oct(c_Fox) + } + + template(present) SMS_DELIVER_REPORT_Type mw_SMS_DELIVER_REPORT := { + spare1 := '0'B, + tP_UserDataHeaderIndicator := '0'B, + spare4 := '0000'B, + tP_MessageTypeIndicator := c_MT_SMS_DELIVER_REPORT, + tP_FailureCause := omit, + tP_ParameterIndicator := ?, + tP_ProtocolIdentifier := mw_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := *, + tP_UserDataLength := *, + tP_UserData := * + } + + template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT := { + tP_ReplyPath := '0'B, + tP_UserDataHeaderIndicator := '0'B, + tP_StatusReportRequest := '1'B, + tP_ValidityPeriodFormat := '??'B, + tP_RejectDuplicates := '0'B, + tP_MessageTypeIndicator := c_MT_SMS_SUBMIT, + tP_MessageReference := ?, + tP_DestinationAddress := mw_TP_AddressAny, + tP_ProtocolIdentifier := mw_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := ?, + tP_ValidityPeriod := *, + tP_UserDataLength := int2oct(160, 1), + tP_UserData := + ? // any data will do: 140 octets + } + + template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_NP modifies mw_SMS_SUBMIT := { + tP_ValidityPeriodFormat := '00'B, + tP_ValidityPeriod := omit + } + + template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_REF modifies mw_SMS_SUBMIT := { + tP_ValidityPeriodFormat := '10'B, + tP_ValidityPeriod := ? + } + + template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_ENH modifies mw_SMS_SUBMIT := { + tP_ValidityPeriodFormat := '01'B, + tP_ValidityPeriod := ? + } + + template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_ABS modifies mw_SMS_SUBMIT := { + tP_ValidityPeriodFormat := '11'B, + tP_ValidityPeriod := ? + } + + template(value) SMS_SUBMIT_REPORT_Type m_SMS_SUBMIT_REPORT := { + spare1 := '0'B, + tP_UserDataHeaderIndicator := '0'B, + spare4 := '0000'B, + tP_MessageTypeIndicator := c_MT_SMS_SUBMIT_REPORT, + tP_FailureCause := omit, + tP_ParameterIndicator := m_TP_ParameterIndicator, + tP_ServiceCentreTimeStamp := fx_GetSC_TimeStamp(0), // Time Zone 0 assumed + tP_ProtocolIdentifier := m_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := omit, + tP_UserDataLength := omit, + tP_UserData := omit + } + + template(value) SMS_STATUS_REPORT_Type m_SMS_STATUS_REPORT( + template(value) TP_MessageReference_Type p_MessageRef, + template(value) TP_Address_Type p_RA, + template(value) TP_ServiceCentreTimeStamp_Type p_SCTP + ) := { + // TS 34.229-1 clause A.7.5 + spare1 := '0'B, + tP_UserDataHeaderIndicator := '0'B, + tP_StatusReportQualifier := '0'B, + spare2 := '00'B, + tP_MoreMessagesToSend := '0'B, + tP_MessageTypeIndicator := c_MT_SMS_STATUS_REPORT, + tP_MessageReference := p_MessageRef, + tP_RecipientAddress := p_RA, + tP_ServiceCentreTimeStamp := p_SCTP, + tP_DischargeTime := '00000000000000'H, + tP_Status := { + reserved := '0'B, + status := '0000000'B + }, + tP_ParameterIndicator := m_TP_ParameterIndicator, + tP_ProtocolIdentifier := m_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := omit, + tP_UserDataLength := omit, + tP_UserData := omit + } + + + + + + /* End SM-TP PDU Constraints */ + } // group SMS_Templates_Group +} // End of module LibSip_SMSTypesAndValues \ No newline at end of file diff --git a/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..08d05444fe048ae8ab352e72a047bfdacf0d0675 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn @@ -0,0 +1,489 @@ +/****************************************************************************** + * @author STF 435, STF471 + * @version $Id$ + * @desc This module contains the type definitions for SMS messages as specified in + * 3GPP 24-011 and 3GPP 23-040 Rel 8 and 9. + * SMS over IMS is specified in 3GPP 24-341. + * This module is part of LibSipV3. + */ +module LibSip_SMSTypesAndValues { + import from LibCommon_DataStrings all; + + group SMS_Declarations { + + const RP_MessageTypeIndicator_Type c_MT_RP_DATA_ul := '000'B; + /* RP_DATA_ul */ + const RP_MessageTypeIndicator_Type c_MT_RP_DATA_dl := '001'B; + /* RP_DATA_dl */ + const RP_MessageTypeIndicator_Type c_MT_RP_ACK_ul := '010'B; + /* RP_ACK_ul */ + const RP_MessageTypeIndicator_Type c_MT_RP_ACK_dl := '011'B; + /* RP_ACK_dl */ + const RP_MessageTypeIndicator_Type c_MT_RP_ERROR_ul := '100'B; + /* RP_ERROR_ul */ + const RP_MessageTypeIndicator_Type c_MT_RP_ERROR_dl := '101'B; + /* RP_ERROR_dl */ + const RP_MessageTypeIndicator_Type c_MT_RP_SMMA := '110'B; + /* RP_SMMA */ + const TP_MessageTypeIndicator_Type c_MT_SMS_DELIVER := '00'B; + /* SMS DELIVER */ + const TP_MessageTypeIndicator_Type c_MT_SMS_DELIVER_REPORT := '00'B; + /* SMS DELIVER REPORT */ + const TP_MessageTypeIndicator_Type c_MT_SMS_STATUS_REPORT := '10'B; + /* SMS STATUS REPORT */ + const TP_MessageTypeIndicator_Type c_MT_SMS_COMMAND := '10'B; + /* SMS COMMAND */ + const TP_MessageTypeIndicator_Type c_MT_SMS_SUBMIT := '01'B; + /* SMS SUBMIT, SMS SUBMIT REPORT */ + const TP_MessageTypeIndicator_Type c_MT_SMS_SUBMIT_REPORT := '01'B; + /* SMS SUBMIT, SMS SUBMIT REPORT */ + const Bit7 c_IEI_RP_UserData := '1000001'B; + /* 24.011 cl. 8.2.5.3 */ + const charstring c_Fox := "The quick brown fox jumps over the lazy dog's back. Kaufen Sie Ihrer Frau vier bequeme Pelze. - 0123456789 - THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG'S BACK."; + + + + type record TypeOfNumberingPlan { + /* 24.008 cl. 10.5.4.7, 10.5.4.9, 10.5.4.13 */ + Bit1 extBit, + /* Extension Bit */ + Bit3 typeOfNumber, + /* Type Of Number */ + Bit4 numberingPlanId /* Numbering Plan Identification */ + } + /* SM-RP Type Declarations */ + type Bit3 RP_MessageTypeIndicator_Type; + /* 24.011 cl. 8.2.2 */ + type Oct1 RP_MessageReference_Type; + /* 24.011 cl. 8.2.3 */ + type record RP_OriginatorAddress_dl { + /* 24.011 cl. 8.2.5.1 */ + Bit1 spare optional, + /* 0 */ + Bit7 iei optional, + /* 0101 1110 */ + Oct1 iel, + /* min value 2 and max value is 11 */ + TypeOfNumberingPlan typeOfNumberingPlan, + /* */ + octetstring digits length(1 .. 10) + } + + type record RP_OriginatorAddress_ul { + /* 24.011 cl. 8.2.5.1 */ + Bit1 spare optional, + /* 0 */ + Bit7 iei optional, + /* 0101 1110 */ + Oct1 iel /* 0 */ + } + + type record RP_DestinationAddress_ul { + /* 24.011 cl. 8.2.5.2 */ + Bit1 spare optional, + /* 0 */ + Bit7 iei optional, + /* 0101 1110 */ + Oct1 iel, + /* min value 2 and max value is 11 */ + TypeOfNumberingPlan typeOfNumberingPlan, + /* */ + octetstring digits length(1 .. 10) + } + type record RP_DestinationAddress_dl { + /* 24.011 cl. 8.2.5.2 */ + Bit1 spare optional, + /* 0 */ + Bit7 iei optional, + /* 0101 1110 */ + Oct1 iel /* 0 */ + } + + type record RP_UserData { + /* 24.011 cl. 8.2.5.3 */ + Bit1 spare optional, + /* 0, present in case of TLV; omit in case of LV */ + Bit7 iei optional, + /* 1000001, present in case of TLV; omit in case of LV */ + Oct1 iel, + /* */ + TP_PDU_Type tP_PDU /* <= 232 octets */ + } + + type record RP_Cause { + /* 24.011 cl. 8.2.5.4 */ + Bit1 spare optional, + /* present in case of TLV; omit in case of LV */ + Bit7 iei optional, + /* present in case of TLV; omit in case of LV */ + Oct1 iel, + /* 2 or 3 */ + Bit1 extBit1, + /* 0 */ + Bit7 causeValue1, + /* Table 8.4/3GPP TS 24.011 */ + Bit1 extBit2, + /* 0 */ + Bit7 causeValue2, + /* Table 8.4/3GPP TS 24.011 */ + Oct1 diagnostic optional /* Parameters included in the return error from MAP */ + } + + /* End SM-RP Type Declarations */ + /* SM-RP PDU Declarations */ + type record RP_DATA_dl_Type { + /* 24.011 cl. 7.3.1.1 + Direction: n -> ue */ + Bit5 spare5, + /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, + /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, + /* cl. 8.2.3 M LV 1 */ + RP_OriginatorAddress_dl rP_OriginatorAddress, + /* cl. 8.2.5.1 M LV 1-12 octets */ + RP_DestinationAddress_dl rP_DestinationAddress, + /* cl. 8.2.5.2 M LV 1 */ + RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ + } + + type record RP_DATA_ul_Type { + /* 24.011 cl. 7.3.1.2 + Direction: ue -> n */ + Bit5 spare5, + /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, + /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, + /* cl. 8.2.3 M LV 1 */ + RP_OriginatorAddress_ul rP_OriginatorAddress, + /* cl. 8.2.5.1 M LV 1 */ + RP_DestinationAddress_ul rP_DestinationAddress, + /* cl. 8.2.5.2 M LV 1 */ + RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ + } + + type record RP_SMMA_Type { + /* 24.011 cl. 7.3.2 + Direction: ue -> n */ + Bit5 spare5, + /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, + /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference /* cl. 8.2.3 M LV 1 */ + } + + type record RP_ACK_Type { + /* 24.011 cl. 7.3.3 + Direction: ue <-> n */ + Bit5 spare5, + /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, + /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, + /* cl. 8.2.3 M LV 1 */ + RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ + } + + type record RP_ERROR_Type { + /* 24.011 cl. 7.3.4 + Direction: ue <-> n */ + Bit5 spare5, + /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, + /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, + /* cl. 8.2.3 M LV 1 */ + RP_Cause rP_Cause, + /* cl. 8.2.5.4 M LV 2-3 */ + RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ + } + + type union RP_PDU_Type { + RP_DATA_dl_Type RP_DATA_dl, + RP_DATA_ul_Type RP_DATA_ul, + RP_SMMA_Type RP_SMMA, + RP_ACK_Type RP_ACK, + RP_ERROR_Type RP_ERROR + } + + /* End SM-RP PDU Declarations */ + /* SM-TP Type Declarations */ + type record TP_Address_Type { + /* 23.040 cl. 9.1.2.5 */ + Oct1 iel, + /* min value 2 and max value is 11 */ + TypeOfNumberingPlan typeOfNumberingPlan, + octetstring digits length(0 .. 10) optional + } + + type Bit2 TP_MessageTypeIndicator_Type; + /* 23.040 cl. 9.2.3.1 */ + type Oct1 TP_MessageReference_Type; + /* 23.040 cl. 9.2.3.6 */ + type Oct1 TP_UserDataLength_Type; + /* 23.040 cl. 9.2.3.16 */ + type record TP_ProtocolIdentifier_Type { + /* 23.040 cl. 9.2.3.9 */ + Bit2 pidType, + /* */ + Bit1 interworking, + /* */ + Bit5 pidValue /* */ + } + + type record TP_DataCodingScheme_Type { + /* 23.040 cl. 9.2.3.10 + 23.040 cl. 4 */ + Bit4 codingGroup, + /* */ + Bit4 codeValue /* */ + } + + type hexstring TP_ServiceCentreTimeStamp_Type length(14); + /* 23.040 cl. 9.2.3.11 */ + type Oct1 TP_ValidityPeriodRelative_Type; + /* 23.040 cl. 9.2.3.12.1 */ + type hexstring TP_ValidityPeriodAbsolute_Type length(14); + /* 23.040 cl. 9.2.3.12.2 */ + type record TP_ValidityPeriodEnhanced_Type { + /* 23.040 cl. 9.2.3.12.3 */ + Bit1 extBit, + /* */ + Bit1 singleShot, + /* */ + Bit3 spare3, + /* */ + Bit3 validityPeriodFormat, + /* */ + Oct6 validityPeriod /* */ + } + + type union TP_ValidityPeriod_Type { + /* 23.040 cl. 9.2.3.3 */ + TP_ValidityPeriodRelative_Type TP_ValidityPeriodRelative, + /* Relative format */ + TP_ValidityPeriodAbsolute_Type TP_ValidityPeriodAbsolute, + /* Absolute format */ + TP_ValidityPeriodEnhanced_Type TP_ValidityPeriodEnhanced /* Enhanced format */ + } + + type record TP_Status_Type { + /* 23.040 cl. 9.2.3.15 */ + Bit1 reserved, + /* */ + Bit7 status /* */ + } + + type Bit8 TP_Command_Type; + /* 23.040 cl. 9.2.3.19 */ + type record TP_ParameterIndicator_Type { + /* 23.040 cl. 9.2.3.27 */ + Bit1 extBit1, + /* */ + Bit4 spare4, + /* */ + Bit1 tP_UDL, + /* */ + Bit1 tP_DCS, + /* */ + Bit1 tP_PID /* */ + } + + /* End SM-TP Type Declarations */ + /* SM-TP PDU Declarations */ + type record SMS_DELIVER_Type { + /* 23.040 cl. 9.2.2.1 + Direction: n -> ue */ + Bit1 tP_ReplyPath, + /* 23.040 cl. 9.2.3.17 */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit1 tP_StatusReportIndication, + /* 23.040 cl. 9.2.3.4 */ + Bit2 spare2, + /* */ + Bit1 tP_MoreMessagesToSend, + /* 23.040 cl. 9.2.3.2 */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + TP_Address_Type tP_OriginatingAddress, + /* 23.040 cl. 9.1.2.5 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, + /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type, + /* 23.040 cl. 9.2.3.10 */ + TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, + /* 23.040 cl. 9.2.3.11 */ + TP_UserDataLength_Type tP_UserDataLength, + /* 23.040 cl. 9.2.3.16, derived from SUBMIT */ + octetstring tP_UserData length(0 .. 140) optional /* 23.040 cl. 9.2.3.24, derived from SUBMIT */ + } + + type record SMS_DELIVER_REPORT_Type { + /* 23.040 cl. 9.2.2.1a + Direction: ue -> n */ + Bit1 spare1, + /* */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit4 spare4, + /* */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + Oct1 tP_FailureCause optional, + /* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ + TP_ParameterIndicator_Type tP_ParameterIndicator, + /* 23.040 cl. 9.2.3.27 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, + /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, + /* 23.040 cl. 9.2.3.10 */ + TP_UserDataLength_Type tP_UserDataLength optional, + /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length(0 .. 159) optional /* 23.040 cl. 9.2.3.24 */ + } + + type record SMS_SUBMIT_Type { + /* 23.040 cl. 9.2.2.2 + Direction: ue -> n */ + Bit1 tP_ReplyPath, + /* 23.040 cl. 9.2.3.17 */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit1 tP_StatusReportRequest, + /* 23.040 cl. 9.2.3.5 */ + Bit2 tP_ValidityPeriodFormat, + /* 23.040 cl. 9.2.3.3 */ + Bit1 tP_RejectDuplicates, + /* 23.040 cl. 9.2.3.25 */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + TP_MessageReference_Type tP_MessageReference, + /* 23.040 cl. 9.2.3.6 */ + TP_Address_Type tP_DestinationAddress, + /* 23.040 cl. 9.1.2.5 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, + /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type, + /* 23.040 cl. 9.2.3.10 */ + // one of the subsequent ValidityPeriod solutions has be removed + TP_ValidityPeriod_Type tP_ValidityPeriod optional, + /* 23.040 cl. 9.2.3.12 */ + // TP_ValidityPeriodRelative_Type tP_ValidityPeriodRelative optional, /* 23.040 cl. 9.2.3.12.1 */ + // TP_ValidityPeriodAbsolute_Type tP_ValidityPeriodAbsolute optional, /* 23.040 cl. 9.2.3.12.2 */ + // TP_ValidityPeriodEnhanced_Type tP_ValidityPeriodEnhanced optional, /* 23.040 cl. 9.2.3.12.3 */ + TP_UserDataLength_Type tP_UserDataLength, + /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length(0 .. 140) optional /* 23.040 cl. 9.2.3.24 */ + } + type record SMS_SUBMIT_REPORT_Type { + /* 23.040 cl. 9.2.2.2a + Direction: n -> ue */ + Bit1 spare1, + /* */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit4 spare4, + /* */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + Oct1 tP_FailureCause optional, + /* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ + TP_ParameterIndicator_Type tP_ParameterIndicator, + /* 23.040 cl. 9.2.3.27 */ + TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, + /* 23.040 cl. 9.2.3.11 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, + /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, + /* 23.040 cl. 9.2.3.10 */ + TP_UserDataLength_Type tP_UserDataLength optional, + /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length(0 .. 152) optional /* 23.040 cl. 9.2.3.24 */ + } + + type record SMS_STATUS_REPORT_Type { + /* 23.040 cl. 9.2.2.3 + Direction: n -> ue */ + Bit1 spare1, + /* */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit1 tP_StatusReportQualifier, + /* 23.040 cl. 9.2.3.26 */ + Bit2 spare2, + /* */ + Bit1 tP_MoreMessagesToSend, + /* 23.040 cl. 9.2.3.2 */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + TP_MessageReference_Type tP_MessageReference, + /* 23.040 cl. 9.2.3.6 */ + TP_Address_Type tP_RecipientAddress, + /* 23.040 cl. 9.1.2.5 */ + TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, + /* 23.040 cl. 9.2.3.11 */ + TP_ServiceCentreTimeStamp_Type tP_DischargeTime, + /* 23.040 cl. 9.2.3.12 */ + TP_Status_Type tP_Status, + /* 23.040 cl. 9.2.3.15 */ + TP_ParameterIndicator_Type tP_ParameterIndicator optional, + /* 23.040 cl. 9.2.3.27 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, + /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, + /* 23.040 cl. 9.2.3.10 */ + TP_UserDataLength_Type tP_UserDataLength optional, + /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length(0 .. 143) optional /* 23.040 cl. 9.2.3.24 */ + } + + type record SMS_COMMAND_Type { + /* 23.040 cl. 9.2.2.4 + Direction: ue -> n */ + Bit1 spare1, + /* */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit1 tP_StatRptReq, + /* Table 8.4/3GPP TS 24.011 */ + Bit3 spare3, + /* */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + TP_MessageReference_Type tP_MessageReference, + /* 23.040 cl. 9.2.3.6 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, + /* 23.040 cl. 9.2.3.9 */ + TP_Command_Type tP_CommandType, + /* 23.040 cl. 9.2.3.19 */ + TP_MessageReference_Type tP_MessageNumber, + /* 23.040 cl. 9.2.3.18 */ + TP_Address_Type tP_DestinationAddress, + /* 23.040 cl. 9.1.2.5 */ + TP_UserDataLength_Type tP_CommandDataLength, + /* 23.040 cl. 9.2.3.20 (number of octets) */ + octetstring tP_CommandData length(0 .. 156) optional /* 23.040 cl. 9.2.3.21 */ + } + + type union TP_PDU_Type { + SMS_DELIVER_Type SMS_DELIVER, + SMS_DELIVER_REPORT_Type SMS_DELIVER_REPORT, + SMS_SUBMIT_Type SMS_SUBMIT, + SMS_SUBMIT_REPORT_Type SMS_SUBMIT_REPORT, + SMS_STATUS_REPORT_Type SMS_STATUS_REPORT, + SMS_COMMAND_Type SMS_COMMAND + } + + + + /* End SM-TP PDU Declarations */ + } + with { + encode "SMSCodec"; + } // group SMS_Declarations + +} +with { + encode "SIPCodec"; variant ""; +} // End of module LibSip_SMSTypesAndValues diff --git a/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6364931d665a0cfdce1d147d76eeff857a8f69ec --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn @@ -0,0 +1,60 @@ +/** + * @author STF 406, 471 + * @version $Id: LibSip_SimpleMsgSummaryTypes.ttcn 488 2010-11-08 10:17:19Z pintar $ + * @desc This module provides the SMS type system for SIP tests. + * This module is part of LibSipV3. +*/ +module LibSip_SimpleMsgSummaryTypes { + // RFC 3842 + group SMSConstants { + + // IMS ETSI name MWI application + const charstring c_imsEtsiMwiApplication := "application/simple-message-summary"; + + // msg_status line := "Message-Waiting" + const charstring c_messageWaiting := "Message-Waiting"; + + // msg_status line := "Message-Account" + const charstring c_messageAccount := "Message-Account"; + + // msg_summary line := "Voice-Message" + const charstring c_voiceMessage := "Voice-Message"; + + } + + group SMSTypes { + type record SimpleMsgSummary { + // Simple_message_summary + Msg_status_line msg_status_line, + Msg_account msg_account optional, + Msg_summary_line_list msg_summary_line_list optional, + Opt_msg_headers opt_msg_headers optional + } + + type record Msg_status_line { + charstring msg_type, + charstring msg_status + } + + type record Msg_account { + charstring msg_type_account, + charstring account_URI + } + + type set of Msg_summary_line Msg_summary_line_list; + + type record Msg_summary_line { + charstring msg_context_class, + charstring msgs, + charstring urgent_msgs optional + } + + type set of charstring Opt_msg_headers; + + + // type integer msgcount length(1); //msgs and urgent_msgs can be dividet into subtypes + } +} +with { + encode "SIPCodec"; variant ""; +} \ No newline at end of file diff --git a/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn b/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..3515b63f07876464525f2b8d5905f6d561abb90c --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn @@ -0,0 +1,4924 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF450, STF471 + * @version $Id$ + * @desc This module provides the functions, altsteps and external functions used + * for SIP-IMS tests. + * This module is part of LibSipV3. +*/ +module LibSip_Steps { + // LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_Interface all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + import from LibSip_Common all; + + group externalfunctions { + + /** + * @desc External function to return random charstring + */ + external function fx_rndStr( + ) return charstring; + + /** + * @desc External function to return the equivalent string in lower case + */ + external function fx_putInLowercase( + charstring p_string + ) return charstring; + + /** + * @desc External function to get IP address. + */ + external function fx_getIpAddr( + charstring p_host_name + ) return charstring; + + /** + * @desc External function to generate a digest response. + * @reference RFC 2617 HTTP Authentication: Basic and Digest Access Authentication, and RFC 1321 The MD5 Message-Digest Algorithm + * @see RFC 2617, chapter 5 Sample implementation, for example usage, as the signature of calculateDigestResponse is according to the example given in the RFC. + */ + external function fx_calculateDigestResponse( + charstring p_nonce, + charstring p_cnonce, + charstring p_user, + charstring p_realm, + charstring p_passwd, + charstring p_alg, + charstring p_nonceCount, + charstring p_method, + charstring p_qop, + charstring p_URI, + charstring p_HEntity + ) return charstring; + + } + + group ParameterOperations { + + /** + * @desc function to generate a 32 bits random number as a charstring for tag field (used as e.g.: tag in from-header field, or branch parameter in via header) + * @return random value with at least 32 bits of randomness + */ + function f_getRndTag( + ) return charstring { + var charstring v_tag_value; + // tag_value is initialized with a random value with at least 32 bits of randomness + // 4294967296 is a 32 bits integer + v_tag_value := fx_rndStr() & fx_rndStr(); + return (v_tag_value); + } + + /** + * @desc Function to prepare credentials for request that has an empty entity body such as a REGISTER message. + * @param p_userprofile to get important parameters + * @param p_algorithm Algorthm to be used. Default: omit + * @return Credentials field + */ + function f_calculatecCredentials_empty( + in SipUserProfile p_userprofile, + in boolean p_algorithm := false + ) return Credentials { + var Credentials v_result; + + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + var charstring v_realm := p_userprofile.registrarDomain; + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + var CommaParam_List v_digestResponse := {}; + // Construct credentials for an Authorization field of a request. + v_digestResponse := f_addParameter(v_digestResponse, { + id := "username", + paramValue := { quotedString := v_username } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "realm", + paramValue := { quotedString := v_realm } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "uri", + paramValue := { quotedString := v_uri } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "nonce", + paramValue := { quotedString := "" } + }); // already enclosed to " characters + v_digestResponse := f_addParameter(v_digestResponse, { + id := "response", + paramValue := { quotedString := "" } + }); // already enclosed to " characters + + if (p_algorithm) { + v_digestResponse := f_addParameter(v_digestResponse, { + id := "algorithm", + paramValue := { tokenOrHost := PX_AUTH_ALGORITHM } + }); // already enclosed to " characters + } + v_result := {digestResponse := v_digestResponse}; + + return v_result; + } + + + /** + * @desc Function to calculate credentials for request that has an empty entity body such as a REGISTER message. + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentials( + in SipUserProfile p_userprofile, + in charstring p_method, + in CommaParam_List p_challenge + ) return Credentials { + var Credentials v_result; + var charstring v_nonce := ""; + var charstring v_cnonce := int2str(float2int(int2float(13172657659 - 1317266) * rnd()) + 1317265); + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + var charstring v_algorithm; + + // a new pseudo-random cnonce value is used every time + // that assumes it is only used once + const charstring cl_nonceCount := "00000001"; + var charstring v_qop := p_userprofile.qop; + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + // MD5 hash of empty entity body. + const charstring cl_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + var charstring v_response; + var charstring v_opaque; + var CommaParam_List v_digestResponse := {}; + + + // extract nonce, realm, algorithm, and opaque from challenge + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); + + // Construct credentials for an Authorization field of a request. + v_digestResponse := f_addParameter(v_digestResponse, { + id := "username", + paramValue := { quotedString := v_username } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "realm", + paramValue := { quotedString := v_realm } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "nonce", + paramValue := { quotedString := v_nonce } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "uri", + paramValue := { quotedString := v_uri } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "response", + paramValue := { quotedString := v_response } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "algorithm", + paramValue := { tokenOrHost := "md5" } + }); // algorithm is not enclosed to " characters + v_digestResponse := f_addParameter(v_digestResponse, { + id := "cnonce", + paramValue := { quotedString := v_cnonce } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "qop", + paramValue := { tokenOrHost := v_qop } + }); // qop + v_digestResponse := f_addParameter(v_digestResponse, { + id := "nc", + paramValue := { tokenOrHost := cl_nonceCount } + }); // nonceCount + if (v_opaque != "") { + v_digestResponse := f_addParameter(v_digestResponse, { + id := "opaque", + paramValue := { quotedString := v_opaque } + }); // already enclosed to " characters + } + v_result := {digestResponse := v_digestResponse}; + + return v_result; + } + + /** + * @desc Function to calculate credentials for request that has an empty entity body such as a REGISTER message. NO RESPONSE value to cause an error! + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentials_wo_response( + in SipUserProfile p_userprofile, + in charstring p_method, + in CommaParam_List p_challenge + ) return Credentials { + var Credentials v_result; + var charstring v_nonce := ""; + var charstring v_cnonce := int2str(float2int(int2float(13172657659 - 1317266) * rnd()) + 1317265); + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + var charstring v_algorithm; + + + // a new pseudo-random cnonce value is used every time + // that assumes it is only used once + const charstring cl_nonceCount := "00000001"; + var charstring v_qop := p_userprofile.qop; + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + // MD5 hash of empty entity body. + const charstring cl_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + var charstring v_response; + var charstring v_opaque; + var CommaParam_List v_digestResponse := {}; + + // extract nonce, realm, algorithm, and opaque from challenge + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); + + v_digestResponse := f_addParameter(v_digestResponse, { + id := "username", + paramValue := { quotedString := v_username } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "realm", + paramValue := { quotedString := v_realm } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "nonce", + paramValue := { quotedString := v_nonce } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "uri", + paramValue := { quotedString := v_uri } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "algorithm", + paramValue := { tokenOrHost := "md5" } + }); // algorithm is not enclosed to " characters + v_digestResponse := f_addParameter(v_digestResponse, { + id := "cnonce", + paramValue := { quotedString := v_cnonce } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "qop", + paramValue := { tokenOrHost := v_qop } + }); // qop + v_digestResponse := f_addParameter(v_digestResponse, { + id := "nc", + paramValue := { tokenOrHost := cl_nonceCount } + }); // nonceCount + if (v_opaque == "") { + v_digestResponse := f_addParameter(v_digestResponse, { + id := "opaque", + paramValue := { quotedString := v_opaque } + }); // already enclosed to " characters + } + v_result := {digestResponse := v_digestResponse}; + + return v_result; + } + + /** + * @desc Function to calculate credentials for response 401 - WWW-Authorization + * @param p_qop of the peer UE (alternatively ) + * @param p_authorization parameter from 1st REGISTER request + * @return Credentials field + * @verdict + */ + function f_calculatecChallenge_forWWWAuthorizationBody( + in charstring p_qop, + in Authorization p_authorization + ) return Challenge { + var CommaParam_List v_challenge; + + if (ischosen(p_authorization.body[0].digestResponse)) { + v_challenge := p_authorization.body[0].digestResponse; + } + else { + v_challenge := p_authorization.body[0].otherResponse.authParams; + } + + return (f_calculatecChallenge_forWWWAuthorization(p_qop, v_challenge)); + } + + /** + * @desc Function to calculate credentials for response 401 - WWW-Authorization + * @param p_qop of the peer UE (alternatively ) + * @param p_challenge parameter from 1st REGISTER request + * @return Credentials field + * @verdict + */ + function f_calculatecChallenge_forWWWAuthorization( + in charstring p_qop, + in CommaParam_List p_challenge + ) return Challenge { + var Challenge v_result; + + var charstring v_realm; + + var charstring v_qop := p_qop; + + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + + // Construct credentials for an Authorization field of a request. + v_result := { + digestCln := { + { + id := "realm", + paramValue := { quotedString := v_realm } + }, + { + id := "nonce", + paramValue := { quotedString := "0edff6c521cc3f407f2d9e01cf6ed82b" } + }, + { + id := "algorithm", + paramValue := { tokenOrHost := PX_AUTH_ALGORITHM } + }, // algorithm is not enclosed with " characters + { + id := "ck", + paramValue := { quotedString := "00112233445566778899aabbccddeeff" } + }, + { + id := "ik", + paramValue := { quotedString := "ffeeddccbbaa99887766554433221100" } + }, // already enclosed to " characters + { + /** + * This directive is optional, but is made so only for backward compatibility with RFC 2069 + * it SHOULD be used by all implementations compliant with this version of the Digest scheme + */ + id := "qop", + paramValue := { tokenOrHost := v_qop } + } // qop + } + }; + + return v_result; + } + + /** + * @desc Function to calculate credentials for request that has an empty entity body such as a REGISTER message and at the end put different private name + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentialsAndChangeUserName( + in SipUserProfile p_userprofile, + in charstring p_method, + in CommaParam_List p_challenge + ) return Credentials { + var Credentials v_result; + var charstring v_nonce := ""; + var charstring v_cnonce := int2str(float2int(int2float(13172657659 - 1317266) * rnd()) + 1317265); + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + var charstring v_algorithm; + + + // a new pseudo-random cnonce value is used every time + // that assumes it is only used once + const charstring cl_nonceCount := "00000001"; + var charstring v_qop := p_userprofile.qop; + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + + // MD5 hash of empty entity body. + const charstring cl_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + var charstring v_response; + var charstring v_opaque; + var CommaParam_List v_digestResponse := {}; + + + // extract nonce, realm, algorithm, and opaque from challenge + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); + + // Construct credentials for an Authorization field of a request. + v_digestResponse := f_addParameter(v_digestResponse, { + id := "username", + paramValue := { quotedString := "DifferentToPrivateUser" } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "realm", + paramValue := { quotedString := v_realm } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "nonce", + paramValue := { quotedString := v_nonce } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "uri", + paramValue := { quotedString := v_uri } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "response", + paramValue := { quotedString := v_response } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "algorithm", + paramValue := { tokenOrHost := "md5" } + }); // algorithm is not enclosed to " characters + v_digestResponse := f_addParameter(v_digestResponse, { + id := "cnonce", + paramValue := { quotedString := v_cnonce } + }); + v_digestResponse := f_addParameter(v_digestResponse, { + id := "qop", + paramValue := { tokenOrHost := v_qop } + }); // qop + v_digestResponse := f_addParameter(v_digestResponse, { + id := "nc", + paramValue := { tokenOrHost := cl_nonceCount } + }); + if (v_opaque != "") { + v_digestResponse := f_addParameter(v_digestResponse, { + id := "opaque", + paramValue := { quotedString := "" } + }); // already enclosed to " characters + } + v_result := {digestResponse := v_digestResponse}; + + return v_result; + } + + + /** + * @desc Function to check if param related to id from CommanParam_List exist containing challenge. + * @param p_challenge parameter from 4xx response + * @param p_id name of parameter("nonce", "realm", "ck", "ik"...) + * @return parameter p_id value + */ + function f_checkParamValueFromChallengeIfPresent( + in CommaParam_List p_challenge, + in charstring p_id + ) return boolean { + var boolean v_result := false; + var integer v_len := lengthof(p_challenge); + var charstring v_id := fx_putInLowercase(p_id); + var integer i; + + for (i := 0; i < v_len; i := i + 1) { + if (fx_putInLowercase(p_challenge[i].id) == v_id) { + v_result := true; + } + } + + return v_result; + } + + /** + * @desc Function to check if tag is present in SemicolonParam_List + * @param p_param_l SemicolonParam_List + * @return boolean true if tag is present + */ + function f_checkTagPresent( + SemicolonParam_List p_param_l + ) runs on SipComponent + return boolean { + var integer v_numberOfParams; + var integer i := 0; + + v_numberOfParams := lengthof(p_param_l); + while (i < v_numberOfParams) { + if (fx_putInLowercase(p_param_l[i].id) == c_tagId) { + return (true); + } + i := i + 1; + } + return (false); + } + + /** + * @desc Function to remove a parameter from SemicolonParam_List + * @param p_param_l SemicolonParam_List + * @return SemicolonParam_List new parameter list + */ + function f_removeParameter( + SemicolonParam_List p_param_l, + charstring p_id + ) runs on SipComponent + return SemicolonParam_List { + var integer v_numberOfParams; + var integer i := 0; + var integer j := 0; + var SemicolonParam_List v_newParamList; + + v_numberOfParams := lengthof(p_param_l); + while (i < v_numberOfParams) { + if (not fx_putInLowercase(p_param_l[i].id) == p_id) { + v_newParamList[j] := p_param_l[i]; + j := j + 1; + } + i := i + 1; + } + return v_newParamList; + } + + /** + * @desc Function to add a parameter to SemicolonParam_List + * @param p_param_l SemicolonParam_List + * @return SemicolonParam_List new parameter list + */ + function f_addParameter( + SemicolonParam_List p_param_l, + GenericParam p_genparam + ) + return SemicolonParam_List { + var SemicolonParam_List v_newParamList := p_param_l; + var integer v_numberOfParams := lengthof(p_param_l); + v_newParamList[v_numberOfParams] := p_genparam; + return v_newParamList; + } + + /** + * @desc Function to extract paramValue related to id from CommanParam_List containing challenge. + * @param p_challenge parameter from 4xx response + * @param p_id name of parameter("nonce", "realm",...) + * @return parameter p_id value + */ + function f_extractParamValueFromChallenge( + in CommaParam_List p_challenge, + in charstring p_id + ) return charstring { + var charstring v_result := ""; + var integer v_len := lengthof(p_challenge); + var charstring v_id := fx_putInLowercase(p_id); + var integer i; + var charstring v_tmpchar; + + for (i := 0; i < v_len; i := i + 1) { + if (fx_putInLowercase(p_challenge[i].id) == v_id) { + if (isvalue(p_challenge[i].paramValue)) { + if(ischosen(p_challenge[i].paramValue.quotedString)) { + v_result := valueof(p_challenge[i].paramValue.quotedString); + } else { + v_result := valueof(p_challenge[i].paramValue.tokenOrHost); + } + } + } + } + + if (v_result == "") { + if (match(p_id, "algorithm")) { + v_result := "MD5"; + } + else if (match(p_id, "opaque")) { + v_result := ""; + } + else { + v_tmpchar := "Cannot acquire value from credentials."; + log("*** " & __SCOPE__ &": INFO: Cannot acquire value from credentials ***"); + setverdict(inconc); + stop; + } + } + + return v_result; + } + + /** + * @desc Return the updated component variable of via header + * @return component variable of via header + */ + function f_updateViaHeaderAS( + in Via p_via + ) runs on SipComponent + return Via { + var Via v_via; + var ViaBody_List v_viaBody_List := p_via.viaBody; + var integer v_size_via := lengthof(v_viaBody_List); + var integer v_size_via_updated := v_size_via + 1; + var ViaBody_List v_viaBody_List_updated; + var integer i; + vc_branch := c_branchCookie & f_getRndTag(); + v_viaBody_List_updated[0] := valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)); + // p_viaBody_List_updated[0 ] := vc_request.msgHeader.route.routeBody[0 ] ; + for (i := 1; i < v_size_via_updated; i := i + 1) { + v_viaBody_List_updated[i] := v_viaBody_List[i - 1]; + } + v_via.fieldName := p_via.fieldName; + v_via.viaBody := v_viaBody_List_updated; + return (v_via); + } + + /** + * @desc Return the updated component variable of route header + * @return component variable of route header + */ + function f_updateRouteHeaderAS( + in Route p_route + ) runs on SipComponent + return Route { + var Route v_route; + var RouteBody_List v_routeBody_List := p_route.routeBody; + var integer v_size_route := lengthof(v_routeBody_List); + var integer v_size_route_updated := v_size_route - 1; + var RouteBody_List v_routeBody_List_updated; + var integer i; + + for (i := 0; i < v_size_route_updated; i := i + 1) { + v_routeBody_List_updated[i] := v_routeBody_List[i + 1]; + } + v_route.fieldName := p_route.fieldName; + v_route.routeBody := v_routeBody_List_updated; + return (v_route); + } + + /** + * @desc Return the updated component variable of record route header + * @return component variable of record route header + */ + function f_updateRecordRouteHeaderAS( + in template(value) RecordRoute p_recordRoute + ) runs on SipComponent + return RecordRoute { + var + RecordRoute + v_recordRoute := + valueof( + m_recordRoute_currIpAddr_params( + vc_userprofile, + { + { + "lr", + omit + } + } + ) + ); + var integer v_size_recordRoute := 0; + var integer i; + + if (isvalue(p_recordRoute)) { + v_size_recordRoute := lengthof(valueof(p_recordRoute).routeBody); + } + for (i := 1; i < v_size_recordRoute + 1; i := i + 1) { + v_recordRoute.routeBody[i] := valueof(p_recordRoute).routeBody[i - 1]; + } + + return (v_recordRoute); + } + + + + } // end group ParameterOperations + + group FieldOperations { + + /** + * @desc function adds "Tag"-parameter in "To"-headerfield + * @param p_to To header field that should get a Tag parameter + */ + function f_addTagInTo( + inout To p_to + ) runs on SipComponent { + f_addParameterTagIfNotPresent(c_tagId, { tokenOrHost := f_getRndTag() }, p_to); + } + + /** + * @desc addition of a single parameter in the via header field + * @param p_parameter_name name of parameter to be added + * @param p_parameter_value value of parameter to be added + * @param p_viaBody the via parameter to be extended + * @verdict + */ + function f_addParameterIfNotPresent( + in charstring p_parameter_name, + in GenValue p_parameter_value, + inout ViaBody p_viaBody + ) { + if (isvalue(p_viaBody.viaParams)) { + return; + } + p_viaBody.viaParams := { + { + p_parameter_name, + p_parameter_value + } + }; + } + + /** + * @desc function to addd a parameter to the "To" header field (if there is not any parameter) + * @param p_parameter_name name of the parameter to be added + * @param p_parameter_value value of the paramter to be added + * @param p_to "To" header field to be extended + * @verdict + */ + function f_addParameterTagIfNotPresent( + in charstring p_parameter_name, + in GenValue p_parameter_value, + inout To p_to + ) { + if (isvalue(p_to.toParams)) { + return; + } + p_to.toParams := { + { + p_parameter_name, + p_parameter_value + } + }; + } + + /** + * @desc function compares the IP address of two hosts + * @param p_host1 hostname + * @param p_host2 hostname + * @return boolean value that is true if the IP addresses are identical + * @verdict + */ + function f_equivalentHostAddr( + in charstring p_host1, + in charstring p_host2 + ) return boolean { + // A DNS server may be used + return (fx_getIpAddr(p_host1) == fx_getIpAddr(p_host2)); + } + + + /** + * @desc function checks if Require contains Precondition + * @param p_message (request or response) SIP message to be analysed + * @return true if p_id parameter exist + */ + function f_checkRequirePrecondition( + in Request p_message + ) { + var boolean v_precondition_found; + var integer i; + if (isvalue(p_message.msgHeader.require)) { + v_precondition_found := false; + for (i := 0; i < lengthof(p_message.msgHeader.require.optionsTags); i := i + 1) { + if (match(p_message.msgHeader.require.optionsTags[i], c_tagPrecond)) { + v_precondition_found := true; + } + } + if (not (v_precondition_found)) { + setverdict(fail); + log("*** " & __SCOPE__ & ": FAIL: precondition not found in Require options list! ***"); + } + } + else { + setverdict(fail); + log("*** " & __SCOPE__ & ": FAIL: Require options is not present! ***"); + } + } + + /** + * @desc function checks if P-Charging-Vector contains a particular parameter + * @param p_message (request or response) SIP message to be analysed + * @param p_id name of parameter + * @return true if p_id parameter exist + */ + function f_checkPChargingVectorHeaderParamId( + in Request p_message, + charstring p_id + ) return boolean { + var integer i; + + if (isvalue(p_message.msgHeader.pChargingVector)) { + for (i := 0; i < lengthof(p_message.msgHeader.pChargingVector.chargeParams); i := i + 1) { + if (p_message.msgHeader.pChargingVector.chargeParams[i].id == p_id) { + return (true); + } + } + } + return (false); + } + + /** + * @desc function checks if P-Charging-Vector contains a particular parameter + * @param p_message (request or response) SIP message to be analysed + * @param p_id name of parameter + * @return true if p_id parameter exist + */ + function f_checkPChargingVectorHeaderParamIdResponse( + in Response p_message, + charstring p_id + ) return boolean { + var integer i; + + if (isvalue(p_message.msgHeader.pChargingVector)) { + for (i := 0; i < lengthof(p_message.msgHeader.pChargingVector.chargeParams); i := i + 1) { + if (p_message.msgHeader.pChargingVector.chargeParams[i].id == p_id) { + return true; + } + } + } + return (false); + } + + /** + * @desc function returns the Host/Port of a given Contact header field + * @param p_contact contact header field to be analysed + * @return Host/Port record from the contact header field + */ + function f_getContactUri( + in ContactAddress p_contact + ) runs on SipComponent + return SipUrl { + var SipUrl v_SipUrl; + + if (ischosen(p_contact.addressField.nameAddr)) { + v_SipUrl := p_contact.addressField.nameAddr.addrSpec; + } + else { + v_SipUrl := p_contact.addressField.addrSpecUnion; + } + + return (v_SipUrl); + } // end f_getContactUri + + /** + * @desc function returns the Host/Port of a given Contact header field + * @param p_contact contact header field to be analysed + * @return Host/Port record from the contact header field + */ + function f_getContactAddr( + in ContactAddress p_contact + ) runs on SipComponent + return HostPort { + var HostPort v_locAddr; + var SipUrl v_SipUrl; + + if (ischosen(p_contact.addressField.nameAddr)) { + v_SipUrl := p_contact.addressField.nameAddr.addrSpec; + } + else { + v_SipUrl := p_contact.addressField.addrSpecUnion; + } + + v_locAddr.host := v_SipUrl.components.sip.hostPort.host; + + if (isvalue(v_SipUrl.components.sip.hostPort.portField)) { + v_locAddr.portField := v_SipUrl.components.sip.hostPort.portField; + } + else { + v_locAddr.portField := c_defaultSipPort; + } + + return (v_locAddr); + } // end f_getContactAddr + + /** + * @desc function checks if History-Info-Header of the p_message contains a particular URI + * @param p_message (request or response) SIP message to be analysed + * @param p_URI name of parameter + * @return true if p_URI parameter exist + */ + function f_checkHeaderInfoURI( + in Response p_message, + SipUrl p_URI + ) return boolean { + var integer i; + + if (isvalue(p_message.msgHeader.historyInfo)) { + for (i := 0; i < lengthof(p_message.msgHeader.historyInfo.historyInfoList); i := i + 1) { + if (p_message.msgHeader.historyInfo.historyInfoList[i].nameAddr.addrSpec == p_URI) { + return (true); + } + } + } + return (false); + } + + /** + * @desc function returns the Userinfo from a given To header field + * @param p_to To header field to be analysed + * @return Userinfo from the To header field as a charstring + */ + function f_getUserfromTo( + in To p_to + ) runs on SipComponent + return charstring { + var SipUrl v_SipUrl; + + if (ischosen(p_to.addressField.nameAddr)) { + v_SipUrl := p_to.addressField.nameAddr.addrSpec; + } + else { + v_SipUrl := p_to.addressField.addrSpecUnion; + } + + return (v_SipUrl.components.sip.userInfo.userOrTelephoneSubscriber); + } // end f_getUserfromTo + + /** + * @desc function to generate a 32 bits random number as a charstring for tag field + * @param p_cSeq_s CSeq parameter used to modify the tag field value + * @return tag value + */ + function f_getRndCallId( + ) return charstring { + var charstring v_tag_value := fx_rndStr() & fx_rndStr(); + // v_tag_value is initialized with a random value with at least 32 bits of randomness + // 4294967296 is a 32 bits integer + // v_tag_value := int2str(float2int(4294967296.0*rnd()) + loc_CSeq_s.seqNumber ); + return (v_tag_value); + } + + /** + * @desc function give access to the top element of the Path header field. + * @param p_Request SIP message to be analysed + * @return NameAddr (e.g. ) or omit + */ + function f_getPathHeaderTop( + inout Request p_Request + ) return template(omit) NameAddr { + if (isvalue(p_Request.msgHeader.path)) { + if (lengthof(p_Request.msgHeader.path.pathValues) > 0) { + return (p_Request.msgHeader.path.pathValues[0].nameAddr); + } + } + return (omit); + } + + /** + * @desc function updates first element of a Via headerfield list + * @param p_viaBody_List address list of a Via header field + * @param p_source_address address to be inserted in the top element + */ + function f_getViaReplyAddr( + inout ViaBody_List p_viaBody_List, + inout Address4SIP p_source_address + ) runs on SipComponent { + var ViaBody v_viaBody; + // The address to send message shall be updated after getting information + // in the Via header fied and according to 18.2.2 + v_viaBody := p_viaBody_List[0]; + + // received parameter has to be addded to the via hader field + // Be careful it could be an Host name and not an IP Address + // One of the reasons this error can occur is if no DNS server is available. + // As a workaround, it is possible to adapt the configuration on the local machine the test + // suite is running on (e.g. under Windows the following file could be configured: + // C:\WINDOWS\system32\drivers\etc\hosts). + // Check if host address can be rosolved + if (not f_equivalentHostAddr(valueof(v_viaBody.sentBy.host), valueof(p_source_address.host))) { + f_addParameterIfNotPresent(c_receivedId, { tokenOrHost := valueof(p_source_address.host) }, v_viaBody); + } + if (isvalue(v_viaBody.sentBy.portField)) { + p_source_address.portField := valueof(v_viaBody.sentBy.portField); + } + else { + p_source_address.portField := c_defaultSipPort; + } + } + + /** + * @desc functions give access to an element of the Route header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of Route record element to be retrieved + * @return HostPort value of the Route element or omit + */ + function f_getRouteHeaderElementAddressFromRequest( + in Request p_message, + in integer p_index + ) return HostPort { + if (isvalue(p_message.msgHeader.route)) { + if (lengthof(p_message.msgHeader.route.routeBody) > p_index) { + return (p_message.msgHeader.route.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort); + } + } + setverdict(fail); + return (c_hostport_dummy); + } + + /** + * @desc functions give access to an element of the Record-Route header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of recordRoute record element to be retrieved + * @return HostPort value of the Record-Route element or omit + */ + function f_getRecordRouteHeaderElementAddressFromRequest( + in Request p_message, + in integer p_index + ) return HostPort { + if (isvalue(p_message.msgHeader.recordRoute)) { + if (lengthof(p_message.msgHeader.recordRoute.routeBody) > p_index) { + return (p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort); + } + } + setverdict(fail); + return (c_hostport_dummy); + } + + /** + * @desc functions give access to an element of the Record-Route header field (record). + * @param p_message (response) SIP message to be analysed + * @param p_index index of recordRoute record element to be retrieved + * @return HostPort value of the Record-Route element or omit + */ + function f_getRecordRouteHeaderElementAddressFromResponse( + in Response p_message, + in integer p_index + ) return HostPort { + if (isvalue(p_message.msgHeader.recordRoute)) { + if (lengthof(p_message.msgHeader.recordRoute.routeBody) > p_index) { + return (p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort); + } + } + setverdict(fail); + return (c_hostport_dummy); + } + + /** + * @desc functions give access to an element of the Via header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of via record element to be retrieved + * @return HostPort value of the Via element or omit + */ + function f_getViaHeaderElementHostPort( + in Request p_message, + in integer p_index + ) return HostPort { + + if (lengthof(p_message.msgHeader.via.viaBody) > p_index) { + return (p_message.msgHeader.via.viaBody[p_index].sentBy); + } + setverdict(fail); + return (c_hostport_dummy); + } + + /** + * @desc functions give access to an element of the Via header field (record). + * @param p_message (response) SIP message to be analysed + * @param p_index index of via record element to be retrieved + * @return HostPort value of the Via element or omit + */ + function f_getViaHeaderElementHostPortResponse( + in Response p_message, + in integer p_index + ) return HostPort { + + if (lengthof(p_message.msgHeader.via.viaBody) > p_index) { + return (p_message.msgHeader.via.viaBody[p_index].sentBy); + } + setverdict(fail); + return (c_hostport_dummy); + } + + /** + * @desc function checks indicators if topology hiding (TH) has been applied: - second element in via-header record has tokenized-by parameter + * @param p_Request SIP message to be analysed + * @return boolean value (true indicate TH, false otherwise) + */ + function f_topologyHiding( + inout Request p_request + ) runs on SipComponent + return boolean { + var GenericParam v_viaParameter; + + if (lengthof(p_request.msgHeader.via.viaBody) <2 ) { + return (false); + } + v_viaParameter := p_request.msgHeader.via.viaBody[1].viaParams[0]; + // second element + if (not v_viaParameter.id == "tokenized-by") { + return (false); + } + return (true); + } + + /** + * @desc function checks indicators if topology hiding (TH) has been applied: - any element in via-header record has tokenized-by parameter + * @param Response SIP message to be analysed + * @return boolean value (true indicate TH, false otherwise) + */ + function f_topologyHidingResponse( + inout Response p_response + ) runs on SipComponent + return boolean { + var GenericParam v_viaParameter; + var integer i; + + for (i := 0; i < lengthof(p_response.msgHeader.via.viaBody); i := i + 1) { + + v_viaParameter := p_response.msgHeader.via.viaBody[i].viaParams[0]; // first parameter + if (not v_viaParameter.id == "tokenized-by") { + return (false); + } + } + return (true); + } + + + + group SetHeaders { + + + /** + * @desc function for setting of component variables related to message header fields (message type independent: CSeq, contact, via), function uses information from userprofile + * @param p_cSeq_s CSeq parameter + * @param p_method method name for cSeq header field + */ + function f_setHeadersGeneral( + inout CSeq p_cSeq_s, + in charstring p_method + ) runs on SipComponent { + p_cSeq_s.fieldName := CSEQ_E; + p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; + p_cSeq_s.method := p_method; + vc_cSeq := p_cSeq_s; + + vc_contact := valueof(m_Contact(m_SipUrl_contactIpaddr(vc_userprofile))); + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + } // end function f_setHeadersGeneral + + + + /** + * @desc function for setting of component variables related to message header fields (message type independent: CSeq, contact, via), function uses information from userprofile + * @param p_cSeq_s CSeq parameter + * @param p_method method name for cSeq header field + */ + function f_setHeadersACK( + ) runs on SipComponent { + // vc_requestUri.hostPort := vc_reqHostPort; + if (vc_response.statusLine.statusCode >= 200 and vc_response.statusLine.statusCode <= 299) + // ref. RFC3261 8.1.1.7 Via + { + vc_branch := c_branchCookie & f_getRndTag(); + } + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + } // end function f_setHeadersGeneral + + /** + * @desc setting of general and basic Bye header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersBYE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "BYE"); // cseq, contact, branch, via + // vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + f_addTagInTo(vc_to); + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersBYE + + /** + * @desc setting of general and basic CANCEL header fields + * @param p_cSeq_s + */ + function f_setHeadersCANCEL( + inout CSeq p_cSeq_s + ) runs on SipComponent { + + p_cSeq_s.method := "CANCEL"; + // vc_branch := c_branchCookie & f_getRndTag(); // STF 406: CANCEL and ACK should have the same branch as the INVITE + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + } // end function f_setHeadersCANCEL + + /** + * @desc function sets header field for the next outgoing REGISTER message + * @param p_cSeq_s CSeq parameter to be applied + * @param p_emergency Set to true in case of emergency + */ + function f_setHeaders_REGISTER( + inout CSeq p_cSeq_s, + boolean p_emergency := false + ) runs on SipComponent { + var SemicolonParam_List v_params := {}; + + f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via + vc_requestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := vc_userprofile.registrarDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + }; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + vc_callIdReg := vc_callId; // remember callId for de-registration + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + vc_cancel_To := vc_to; + v_params := f_addParameter(v_params, + { + id := c_tagId, + paramValue := { + tokenOrHost := f_getRndTag() + } + }); + vc_from := { + fieldName := FROM_E, + addressField := vc_to.addressField, + fromParams := v_params + }; + + if (not vc_firstREGISTER_sent) { + if (p_emergency) { + v_params := { + { + "sos", + omit + } + }; + vc_contact.contactBody.contactAddresses[0].addressField.addrSpecUnion.urlParameters := v_params; + } + else { + v_params := { + { + id := c_expiresId, + paramValue := { + tokenOrHost := c_shortRegistration + } + } + }; + vc_contact.contactBody.contactAddresses[0].contactParams := v_params; + } + } + + vc_firstREGISTER_sent := true; // f_setHeaders_Register is called in deREGISTER function + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentials_empty(vc_userprofile)} + }; + + vc_via_REG := vc_via; + } // end function setHeaders_REGISTER + + /** + * @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER + * @verdict + */ + function f_setHeaders_2ndREGISTER( + inout CSeq p_cSeq_s + ) runs on SipComponent { + var CommaParam_List v_challenge; + + // Increment CSeq sequence number + p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; + vc_cSeq := p_cSeq_s; + + vc_requestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := vc_userprofile.registrarDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + }; + + // new branch tag due to different branch tag in new REGISTER method + vc_branch := c_branchCookie & f_getRndTag(); + + vc_via_REG := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + // Extract challenge and calculate credentials for a response. + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.digestCln; + + + // Prepair right answer + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentials(vc_userprofile, "REGISTER", v_challenge)} + }; + } // end function f_setHeaders_2ndREGISTER + + /** + * @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER NO response in Authorization header to cause an error + * @verdict + */ + function f_setHeaders_2ndREGISTER_wo_response( + ) runs on SipComponent { + var CommaParam_List v_challenge; + + vc_branch := c_branchCookie & f_getRndTag(); + + vc_via_REG := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + if (ischosen(vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge)) + // Extract challenge and calculate credentials for a response. + { + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; + } + else { + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.digestCln; + } + + // Increment CSeq sequence number + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + + // Prepair right answer + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentials_wo_response(vc_userprofile, "REGISTER", v_challenge)} + }; + } // end function f_setHeaders_2ndREGISTER_wo_response + + /** + * @desc function sets via, cseq and authorization header with different private name for the next outgoing (protected) REGISTER + * @verdict + */ + function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName( + ) runs on SipComponent { + var CommaParam_List v_challenge; + + vc_branch := c_branchCookie & f_getRndTag(); + + vc_requestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := vc_userprofile.registrarDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + }; + + vc_via_REG := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + // Extract challenge and calculate credentials for a response. + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; + + // Increment CSeq sequence number + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + + // Prepair right answer + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentialsAndChangeUserName(vc_userprofile, "REGISTER", v_challenge)} + }; + } // end function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName + + + /** + * @desc function sets header fields for the next outgoing REGISTER (de-registration) + * @param p_cSeq_s cSeq to be used + * @verdict + */ + function f_setHeaders_deREGISTER( + inout CSeq p_cSeq_s + ) runs on SipComponent { + var SemicolonParam_List v_params := {}; + + f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via + // reset authorization header to not use nonce from registration (otherwise we have to increase nc) + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentials_empty(vc_userprofile)} + }; + vc_requestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := vc_userprofile.registrarDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + }; + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + v_params := f_addParameter(v_params, + { + id := c_tagId, + paramValue := { + tokenOrHost := f_getRndTag() + } + }); + vc_from := { + fieldName := FROM_E, + addressField := vc_to.addressField, + fromParams := v_params + }; + + vc_contact := { + fieldName := CONTACT_E, + contactBody := {wildcard := "*"} + }; + } // end function f_setHeaders_deREGISTER + + + /** + * @desc setting of general and basic Invite header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersINVITE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + if (ischosen(vc_requestUri.components.sip)) { + // sip/sips call + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } + else if (ischosen(vc_requestUri.components.urn)) { + // Emergency call + vc_reqUrnUri := vc_requestUri.components.urn; + } + else { + log("*** " & __SCOPE__ &": INFO:f_setHeadersINVITE: unsupported field: ", vc_requestUri," ***"); + setverdict(fail); + } + } + + /** + * @desc setting of general and basic Update header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersUPDATE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "UPDATE"); // cseq, contact, branch, via + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersUPDATE + + /** + * @desc setting of general and basic Message header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersMESSAGE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "MESSAGE"); // cseq, contact, branch, via + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersMESSAGE + + /** + * @desc setting of general and basic Notify header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersNOTIFY( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "NOTIFY"); // cseq, contact, branch, via + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersNOTIFY + + /** + * @desc setting of general and basic Notify header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersOPTIONS( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "OPTIONS"); // cseq, contact, branch, via + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersOPTIONS + + /** + * @desc setting of general and basic Publish header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersPUBLISH( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "PUBLISH"); // cseq, contact, branch, via + // after SUBSCRIBE message callid shall be same + // vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersPUBLISH + + /** + * @desc function sets header field for the next outgoing SUBSCRIBE message + * @param p_cSeq_s CSeq parameter to be applied + */ + function f_setHeaders_SUBSCRIBE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + var SemicolonParam_List v_params := {}; + + f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via + vc_requestUri := valueof(m_SipUrl_currDomain(vc_userprofile)); + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + + // store callId from Subscribe message + vc_callIdSub := vc_callId; + + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + vc_cancel_To := vc_to; + v_params := f_addParameter(v_params, + { + id := c_tagId, + paramValue := { + tokenOrHost := f_getRndTag() + } + }); + vc_from := { + fieldName := FROM_E, + addressField := vc_to.addressField, + fromParams := v_params + }; + } // end function setHeaders_SUBSCRIBE + + /** + * @desc setting of general and basic Subscribe header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersSUBSCRIBE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersMESSAGE + + /** + * @desc setting of general and basic REFER header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersREFER( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "REFER"); // cseq, contact, branch, via + // vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersREFER + + /** + * @desc This function reads all necessary headers from the received REGISTER message and generate the tag for the answer + * @param p_Request REGISTER that has been received + */ + function f_setHeadersOnReceiptOfREGISTER( + Request p_Request + ) runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + vc_caller_From := vc_from; + f_addTagInTo(vc_to); + vc_caller_To := vc_to; + vc_requestUri := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + + if (isvalue(p_Request.msgHeader.contact) and (not ischosen(p_Request.msgHeader.contact.contactBody.wildcard))) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := { + fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams + }; + + vc_callee_From := { + fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams + }; + + if (isvalue(p_Request.msgHeader.authorization)) { + vc_authorization := valueof(p_Request.msgHeader.authorization); + } + } // end f_setHeadersOnReceiptOfREGISTER + + /** + * @desc This function reads all necessary headers from the received SUBSCRIBE message and generate the tag for the answer + * @param p_Request SUBSCRIBE that has been received + */ + function f_setHeadersOnReceiptOfSUBSCRIBE( + Request p_Request + ) runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + vc_caller_From := vc_from; + f_addTagInTo(vc_to); + vc_caller_To := vc_to; + vc_requestUri := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + + if (isvalue(p_Request.msgHeader.contact)) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := { + fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams + }; + + vc_callee_From := { + fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams + }; + } // end f_setHeadersOnReceiptOfSUBSCRIBE + + function f_setHeadersOnReceiptOfREFER( + Request p_Request + ) runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_requestUri := p_Request.requestLine.requestUri; + vc_cancel_To := p_Request.msgHeader.toField; + + if (isvalue(p_Request.msgHeader.contact)) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + vc_requestUri := f_getContactUri(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := { + fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams + }; + + vc_callee_From := { + fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams + }; + } // end f_setHeadersOnReceiptOfREFER + + /** + * @desc function reads all necessary headers from the received INVITE message and generate the tag for the answer + * @param p_Request received INVITE message + * @verdict + */ + function f_setHeadersOnReceiptOfINVITE( + Request p_Request + ) runs on SipComponent { + var integer i, j; + var integer v_length; + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + + vc_requestUri2 := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + f_addTagInTo(vc_to); + vc_caller_From := vc_from; + vc_caller_To := vc_to; + + if (isvalue(p_Request.msgHeader.contact)) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + vc_requestUri := f_getContactUri(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := { + fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams + }; + + vc_callee_From := { + fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams + }; + + if (isvalue(p_Request.msgHeader.privacy)) { + vc_privacy := p_Request.msgHeader.privacy; + } + + if (isvalue(p_Request.messageBody)) { + // cleaning of attributes before assignment + if (isvalue(vc_sdp_remote.media_list)) { + v_length := lengthof(vc_sdp_remote.media_list); + for (i := 0; i < v_length; i := i + 1) { + if (isvalue(vc_sdp_remote.media_list[i].attributes)) { + vc_sdp_remote.media_list[i].attributes := omit; + } + } + } + + // save SDP if present + if (ischosen(p_Request.messageBody.sdpMessageBody)) { + vc_sdp_remote := p_Request.messageBody.sdpMessageBody; + vc_sdp_remote_is_valid := true; + f_prepare_SDP_answer(); + } + + // save XML if present + if (ischosen(p_Request.messageBody.xmlBody)) { + vc_xml_remote := p_Request.messageBody.xmlBody; + } + + if (ischosen(p_Request.messageBody.mimeMessageBody)) { + + for (j := 0; j < lengthof(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList); j := j + 1) { + if (match(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_sdpApplication)) { + vc_sdp_remote := p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.sdpMessageBody; + vc_sdp_remote_is_valid := true; + f_prepare_SDP_answer(); + } + if (match(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_xmlApplication)) { + vc_xml_remote := p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.xmlBody; + } + } + } + } + + if (isvalue(p_Request.msgHeader.supported.optionsTags)) { + for (i := lengthof(p_Request.msgHeader.supported.optionsTags); i > 0; i := i - 1) { + if (p_Request.msgHeader.supported.optionsTags[i - 1] == "100rel") { + vc_supported_100rel := true; + } + if (p_Request.msgHeader.supported.optionsTags[i - 1] == "precondition") { + vc_supported_precondition := true; + } + } + } + } // end f_setHeadersOnReceiptOfINVITE + + /** + * @desc function reads header field of a received BYE message + * @param p_Request received BYE + */ + function f_setHeadersOnReceiptOfBYE( + Request p_BYE_Request + ) runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_BYE_Request); + vc_callId := p_BYE_Request.msgHeader.callId; + } // end f_setHeadersOnReceiptOfBYE + + /** + * @desc function reads header field from an incoming Request message + * @param p_Request received Request message + */ + function f_setHeadersOnReceiptOfRequest( + Request p_Request + ) runs on SipComponent { + vc_request := p_Request; + vc_callId := p_Request.msgHeader.callId; + vc_cSeq := valueof(p_Request.msgHeader.cSeq); // CSeq is mandatory + vc_iut_CSeq := p_Request.msgHeader.cSeq; + vc_from := p_Request.msgHeader.fromField; + vc_caller_From := p_Request.msgHeader.fromField; + vc_to := p_Request.msgHeader.toField; + vc_caller_To := p_Request.msgHeader.toField; + vc_via := p_Request.msgHeader.via; + // update sent_label according to received via header field + f_getViaReplyAddr(vc_via.viaBody, vc_sent_label); + + // Catch route + vc_boo_recordRoute := false; + + // add tag field into To header if tag is not present + if (not (isvalue(p_Request.msgHeader.toField.toParams))) { + vc_to.toParams := { + { + id := c_tagId, + paramValue := { + tokenOrHost := f_getRndTag() + } + } + }; + vc_caller_To := vc_to; + } + if (isvalue(p_Request.msgHeader.recordRoute.fieldName)) {//Due to ES 201 873-1/C.3.3 Better to check if fieldName of Record Route is present + vc_boo_recordRoute := true; + vc_recordRoute := p_Request.msgHeader.recordRoute; + } + } // end f_setHeadersOnReceiptOfRequest + + /** + * @desc functions reads header fields from an incoming Response message + * @param p_cSeq + * @param p_response received response message + * @verdict + */ + function f_setHeadersOnReceiptOfResponse( + Response p_response + ) runs on SipComponent { + var integer i, j, v_nbroute; + var template(omit) Contact v_contact; + // only for local purpose + vc_response := p_response; + // vc_cSeq := p_cSeq; //must not save global c_seq because it can overwrite temporary cSeq + vc_to := p_response.msgHeader.toField; + vc_from := p_response.msgHeader.fromField; + vc_caller_To := vc_to; + vc_caller_From := vc_from; + + if (isvalue(p_response.msgHeader.contact)) { + v_contact := p_response.msgHeader.contact; + if (ischosen(v_contact.contactBody.contactAddresses)) { + vc_reqHostPort := f_getContactAddr(valueof(v_contact.contactBody.contactAddresses[0])); + vc_requestUri := f_getContactUri(valueof(v_contact.contactBody.contactAddresses[0])); + } + } + else { + if (ischosen(vc_to.addressField.addrSpecUnion.components.sip)) { + // sip/sips call + vc_reqHostPort := vc_to.addressField.addrSpecUnion.components.sip.hostPort; + } + else if (ischosen(vc_to.addressField.addrSpecUnion.components.urn)) { + // Emergency call + vc_reqUrnUri := vc_to.addressField.addrSpecUnion.components.urn; + } + else { + log("*** f_setHeadersOnReceiptOfResponse: INFO: unsupported field: ", vc_to, " ***"); + setverdict(fail); + } + vc_requestUri := vc_to.addressField.addrSpecUnion; + } + + vc_callee_To := { + fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams + }; + + vc_callee_From := { + fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams + }; + + vc_via := p_response.msgHeader.via; + + // Route Management + if (isvalue(p_response.msgHeader.recordRoute)) { + vc_recordRoute := p_response.msgHeader.recordRoute; + v_nbroute := lengthof(vc_recordRoute.routeBody); + // copy and reverse the order of the routes in route header + for (i := 0; i <= (v_nbroute - 1); i := i + 1) { + j := v_nbroute - 1 - i; + vc_route.routeBody[j] := vc_recordRoute.routeBody[i]; + } + vc_route.fieldName := ROUTE_E; + vc_boo_recordRoute := true; + vc_boo_route := true; + } + else { + vc_boo_recordRoute := false; + vc_boo_route := false; + } + + + // extentions due to new fields in PRACK and UPDATE messages + if (isvalue(p_response.msgHeader.rSeq)) { + vc_rAck := { + fieldName := RACK_E, + responseNum := valueof(p_response.msgHeader.rSeq.responseNum), + seqNumber := valueof(p_response.msgHeader.cSeq.seqNumber), + method := valueof(p_response.msgHeader.cSeq.method) + }; + } + + // extentions due to new HistoryInfo fields 180 or 200OK messages + if (isvalue(p_response.msgHeader.historyInfo)) { + vc_historyInfoList := valueof(p_response.msgHeader.historyInfo.historyInfoList); + vc_history_is_valid := true; + } + else { + vc_history_is_valid := false; + } + + // sdpMessageBody answer + if (isvalue(p_response.messageBody)) { + if (ischosen(p_response.messageBody.sdpMessageBody)) { + vc_sdp_remote := p_response.messageBody.sdpMessageBody; + vc_sdp_remote_is_valid := true; + } + + if (ischosen(p_response.messageBody.xmlBody)) { + vc_xml_remote := p_response.messageBody.xmlBody; + } + + if (ischosen(p_response.messageBody.mimeMessageBody)) { + + for (j := 0; j < lengthof(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList); j := j + 1) { + if (match(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_sdpApplication)) { + vc_sdp_remote := p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.sdpMessageBody; + } + if (match(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_xmlApplication)) { + vc_xml_remote := p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.xmlBody; + } + } + } + } + } // end function f_setHeadersOnReceiptOfResponse + + /** + * @desc functions reads ServiceRoute header field from an incoming 200 Response message in registration + * @param p_cSeq + * @param p_response received response message + */ + function f_getServiceRouteMapIntoRouteInRegistration( + Response p_response + ) runs on SipComponent { + var integer i, j, v_nbroute; + var template(omit) ServiceRoute v_serviceRoute; + + // Route Management + if (isvalue(p_response.msgHeader.serviceRoute.fieldName)) {////Due to ES 201 873-1/C.3.3 Better to check if fieldName of Record Route is present + v_serviceRoute := p_response.msgHeader.serviceRoute; + v_nbroute := lengthof(v_serviceRoute.routeBody); + // copy and reverse the order of the routes in route header + for (i := 0; i <= (v_nbroute - 1); i := i + 1) { + j := v_nbroute - 1 - i; + vc_route.routeBody[j] := v_serviceRoute.routeBody[i]; + } + vc_route.fieldName := ROUTE_E; + vc_route_REG := vc_route; + vc_boo_route := true; + } + } // end function f_getServiceRouteMapIntoRouteInRegistration + + /** + * @desc functions reads Route header field from an incoming Request message and generate RecordRoute + * @param p_cSeq + * @param p_request received request message + */ + function f_getRouteMapIntoRecordRoute( + Request p_request + ) runs on SipComponent { + var integer i, j, v_nbroute; + var template(omit) Route v_route; + + // Route Management + if (isvalue(p_request.msgHeader.route)) { + v_route := p_request.msgHeader.route; + v_nbroute := lengthof(v_route.routeBody); + // copy and reverse the order of the routes in route header + for (i := 0; i <= (v_nbroute - 1); i := i + 1) { + j := v_nbroute - 1 - i; + vc_recordRoute.routeBody[j] := v_route.routeBody[i]; + } + vc_recordRoute.fieldName := RECORD_ROUTE_E; + + vc_boo_recordRoute := true; + } + } // end function f_getRouteMapIntoRecordRoute + + + } // end group SetHeaders + + + + } // end group FieldOperations + + group SDPOperations { + + /** + * @desc check if message body include SDP attribute (2nd parameter) for any media + */ + function f_check_attribute( + in SDP_Message p_sdp, + in template SDP_attribute p_attribute + ) runs on SipComponent + return boolean { + var integer i, j; + + if (isvalue(p_sdp.media_list)) { + for (j := 0; j < lengthof(p_sdp.media_list); j := j + 1) { + if (isvalue(p_sdp.media_list[j].attributes)) { + for (i := 0; i < lengthof(p_sdp.media_list[j].attributes); i := i + 1) { + if (match(p_sdp.media_list[j].attributes[i], p_attribute)) { + return (true); + } + } + } + } + } + if (isvalue(p_sdp.attributes)) { + for (j := 0; j < lengthof(p_sdp.attributes); j := j + 1) { + if (match(p_sdp.attributes[j], p_attribute)) { + return (true); + } + } + } + + return (false); + } + + /** + * @desc check if message body include SDP (session level) attribute (2nd parameter) for any media + */ + function f_check_session_attribute( + in SDP_Message p_sdp, + in template SDP_attribute p_attribute + ) runs on SipComponent + return boolean { + var integer j; + + if (isvalue(p_sdp.attributes)) { + for (j := 0; j < lengthof(p_sdp.attributes); j := j + 1) { + if (match(p_sdp.attributes[j], p_attribute)) { + return (true); + } + } + } + + return (false); + } + + /** + * @desc identify an SDP direction attribute (session or first media attribute) in a SDP message and return its answer value + * @param p_sdp the SDP message that has been received + * @param p_attribute incoming SDP attribute that need to be used for the SDP direction (answer) + * @return the new attribute (to be send out) derived from the incoming SDP value + * @verdict + */ + function f_get_attribute_answer( + in SDP_Message p_sdp, + in template SDP_attribute p_attribute + ) runs on SipComponent + return SDP_attribute { + var integer i, j; + var template SDP_attribute v_attribute := p_attribute; + + // check if the selected attribute is included in the SDP offer (session attributes) + if (isvalue(p_sdp.attributes)) { + for (j := 0; j < lengthof(p_sdp.attributes); j := j + 1) { + if (match(p_sdp.attributes[j], p_attribute)) { + v_attribute := p_sdp.attributes[j]; + } + } + } + else + // check if the selected attribute is included in the SDP offer (any of the media attributes) + { + if (isvalue(p_sdp.media_list)) { + for (j := 0; j < lengthof(p_sdp.media_list); j := j + 1) { + if (isvalue(p_sdp.media_list[j].attributes)) { + for (i := 0; i < lengthof(p_sdp.media_list[j].attributes); i := i + 1) { + if (match(p_sdp.media_list[j].attributes[i], p_attribute)) { + v_attribute := p_sdp.media_list[j].attributes[i]; + } + } + } + } + } + } + + select (valueof(v_attribute)) { + case (mw_attribute_sendonly) { + return (valueof(m_attribute_recvonly)); + } + case (mw_attribute_sendrecv) { + return (valueof(m_attribute_sendrecv)); + } // MRO + case (mw_attribute_inactive) { + return (valueof(m_attribute_inactive)); + } // MRO + case (mw_attribute_recvonly) { + return (valueof(m_attribute_sendonly)); + } // MRO + } + return (valueof(m_attribute_sendrecv)); // the default return value in case of missing attribute offer + } + + /** + * @desc check if message body include SDP bandwidth (2nd parameter) either for the session or a media description + */ + function f_check_bandwidth( + in SDP_Message p_loc_sdp, + in template SDP_bandwidth p_loc_bandw + ) runs on SipComponent + return boolean { + var integer i, j; + if (isvalue(p_loc_sdp.bandwidth)) { + for (j := 0; j < lengthof(p_loc_sdp.bandwidth); j := j + 1) { + if (match(p_loc_sdp.bandwidth[j], p_loc_bandw)) { + return (true); + } + } + } + if (isvalue(p_loc_sdp.media_list)) { + for (j := 0; j < lengthof(p_loc_sdp.media_list); j := j + 1) { + if (isvalue(p_loc_sdp.media_list[j].bandwidth)) { + for (i := 0; i < lengthof(p_loc_sdp.media_list[j].bandwidth); i := i + 1) { + if (match(p_loc_sdp.media_list[j].bandwidth[i], p_loc_bandw)) { + return (true); + } + } + } + } + } + + return (false); + } + + /** + * @desc check if message body include SDP media (2nd parameter) + */ + function f_check_media( + in SDP_Message p_loc_sdp, + in template(present) SDP_media_desc p_loc_media + ) runs on SipComponent + return boolean { + var integer j; + if (isvalue(p_loc_sdp.media_list)) { + for (j := 0; j < lengthof(p_loc_sdp.media_list); j := j + 1) { + if (match(p_loc_sdp.media_list[j].media_field.transport, p_loc_media.media_field.transport) and match(p_loc_sdp.media_list[j].media_field.fmts, p_loc_media.media_field.fmts)) { + return (true); + } + } + } + return (false); + } + + /** + * @desc check if message body include precondition mechanism (a=des and a=curr) retrun true, else false + * @param loc_sdp SDP message + */ + function f_check_precondition( + in SDP_Message p_loc_sdp + ) runs on SipComponent + return boolean { + if (f_check_attribute(p_loc_sdp, mw_attribute_des) or f_check_attribute(p_loc_sdp, mw_attribute_curr)) { + return (true); + } + + return (false); + } + + + /** + * @desc check if message body include SDP media direction return true, else false + */ + function f_check_media_direction( + in SDP_Message p_loc_sdp + ) runs on SipComponent + return boolean { + + if (f_check_attribute(p_loc_sdp, mw_attribute_sendonly) or f_check_attribute(p_loc_sdp, mw_attribute_recvonly) or f_check_attribute(p_loc_sdp, mw_attribute_sendrecv) or f_check_attribute(p_loc_sdp, mw_attribute_inactive)) { + return (true); + } + + return (false); + } + + /** + * @desc copy media/attribute lines from remote to local SDP variable + */ + function f_check_SDP( + integer p_loc_sdp, + integer p_loc_codec + ) runs on SipComponent + return boolean { + var SDP_media_desc v_media := f_prepare_media(p_loc_sdp, p_loc_codec); + if (vc_sdp_remote.media_list[0].media_field.media != v_media.media_field.media) { + return false; + } + if (vc_sdp_remote.media_list[0].media_field.transport != v_media.media_field.transport) { + return false; + } + if (vc_sdp_remote.media_list[0].media_field.fmts != v_media.media_field.fmts) { + return false; + } + + return true; + } + + /** + * @desc replace the first curr media attribute with the given value. + * @param p_sdp SDP message to modify + * @param p_curr new curr attribute + */ + function f_replace_curr_attribute( + inout SDP_Message p_sdp, + in SDP_attribute_curr p_curr + ) { + var integer i; + var integer v_mn; + if (isvalue(p_sdp.media_list)) { + v_mn := lengthof(p_sdp.media_list[0].attributes); + for (i := 0; i < v_mn; i := i + 1) { + if (ischosen(p_sdp.media_list[0].attributes[i].curr)) { + p_sdp.media_list[0].attributes[i].curr := p_curr; + i := v_mn; + } + } + } + } + + /** + * @desc append new media attribute to the first media description. + * @param p_sdp SDP message to modify + * @param p_att SDP attribute to appand + */ + function f_append_media_attribute( + inout SDP_Message p_sdp, + in SDP_attribute p_att + ) { + var integer v_mn; + if (isvalue(p_sdp.media_list)) { + v_mn := lengthof(p_sdp.media_list[0].attributes); + p_sdp.media_list[0].attributes[v_mn] := p_att; + } + } + + + /** + * @desc append new media to the existing media list in SDP + */ + function f_append_media( + inout SDP_Message p_loc_SDP, + template(value) SDP_media_desc p_loc_media + ) { + var integer v_mn := lengthof(p_loc_SDP.media_list); + p_loc_SDP.media_list[v_mn] := valueof(p_loc_media); + } + + /** + * @desc repare media/attribute lines + */ + function f_prepare_media( + integer p_loc_sdp, + integer p_loc_codec + ) runs on SipComponent + return SDP_media_desc { + var SDP_attribute_rtpmap_codec v_codecs[32] := { + {"PCMU", "8000", omit}, {"GSM", "8000", omit}, {"G723", "8000", omit}, {"DVI4", "8000", omit}, + {"DVI4", "16000", omit}, {"LPC", "8000", omit}, {"PCMA", "8000", omit}, {"G722", "8000", omit}, + {"L16", "44100", "2"}, {"L16", "44100", omit}, {"QCELP", "8000", omit}, {"CN","8000", omit}, + {"MPA", "90000", omit}, {"G728", "8000", omit}, {"DVI4", "11025", omit}, {"DVI4", "22050", omit}, + {"G729", "8000", omit}, {"G726-40", "8000", omit}, {"G726-32", "8000", omit}, {"G726-24", "8000", omit}, + {"G726-16", "8000", omit}, {"G726D", "8000", omit}, {"G726E", "8000", omit}, {"GSM-EFR", "8000", omit}, + {"CelB", "90000", omit}, {"JPEG", "90000", omit}, {"Nv", "90000", omit}, {"H261", "90000", omit}, + {"MPV", "90000", omit}, {"MP2T" ,"90000", omit}, {"H263", "90000", omit}, {"H263-1998", "90000", omit}}; + var SDP_media_desc v_media := { + media_field := { + media := "audio", + ports := { + port_number := 10000, + num_of_ports := omit + }, + transport := "RTP/AVP", + fmts := {"0"} + }, // m=audio + // 8500 + // RTP/AVP + // 0 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := omit + }; + + if (32 < p_loc_codec or p_loc_codec < 1) { + log("*** " & __SCOPE__ & ": INFO: Unexpected SDP variant ***"); + setverdict(inconc); + return (v_media); + } + + if (p_loc_sdp == 1) { + } + else if (p_loc_sdp == 2) { + v_media.media_field.fmts := {PX_SIP_SDP_DYN}; // { "98", "0" }; + v_media.attributes := { + { + rtpmap := { + payload_type := PX_SIP_SDP_DYN, + codec := v_codecs[p_loc_codec - 1] + } + } + }; + } + else if (p_loc_sdp == 3) { + v_media.media_field.fmts := {"8"}; + } + else if (p_loc_sdp == 4) { + v_media.media_field.fmts := {"99", "8"}; + v_media.attributes := { + { + rtpmap := { + payload_type := "99", + codec := v_codecs[p_loc_codec - 1] + } + } + }; + } + else if (p_loc_sdp == 5) { + v_media.media_field.media := "image"; + v_media.media_field.transport := "udptl"; + v_media.media_field.fmts := {"t38"}; + } + else if (p_loc_sdp == 6) { + v_media.media_field.media := "image"; + v_media.media_field.transport := "tcptl"; + v_media.media_field.fmts := {"t38"}; + } + else { + log("*** " & __SCOPE__ & ": INFO: Unexpected SDP variant ***"); + setverdict(inconc); + } + + return (v_media); + } + + /** + * @desc repare media/attribute lines + */ + function f_prepare_SDP( + integer p_loc_sdp, + integer p_loc_codec + ) runs on SipComponent { + + vc_sdp_local.media_list := {f_prepare_media(p_loc_sdp, p_loc_codec)}; + } + + /** + * @desc function that copy media/attribute lines from remote to local SDP variable + */ + function f_prepare_SDP_answer( + ) runs on SipComponent { + var integer v_mn, v_cn := 0, i, j, k := 0; + var charstring v_PT; + var SDP_attribute_rtpmap_codec v_rtpmap := { "", "", omit}; + var SDP_attribute_list v_mediaAttributes := {}; + // increase session version + vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_remote.origin.session_version) + 1); + // if more than one codec, select the firs one + v_mn := lengthof(vc_sdp_remote.media_list); + for (i := 0; i < v_mn; i := i + 1) { + // for every single media + if (isvalue(vc_sdp_remote.media_list[i].attributes)) { + v_cn := lengthof(vc_sdp_remote.media_list[i].attributes); + } + if (lengthof(vc_sdp_remote.media_list[i].media_field.fmts) > 0) { + // select the first one + v_PT := vc_sdp_remote.media_list[i].media_field.fmts[0]; + vc_sdp_local.media_list[i].media_field.fmts := {v_PT}; + for (j := 0; j < v_cn; j := j + 1) { + if (ischosen(vc_sdp_remote.media_list[i].attributes[j].rtpmap)) { + if (v_PT == vc_sdp_remote.media_list[i].attributes[j].rtpmap.payload_type) { + v_rtpmap := vc_sdp_remote.media_list[i].attributes[j].rtpmap.codec; + v_mediaAttributes[k] := {rtpmap := {v_PT, v_rtpmap}}; + k := k + 1; + } // else line is not copied + } + else { + // simple copy of attribute + v_mediaAttributes[k] := vc_sdp_remote.media_list[i].attributes[j]; + k := k + 1; + } + } + vc_sdp_local.media_list[i].attributes := v_mediaAttributes; + + if (isvalue(vc_sdp_local.media_list[i].attributes)) { + v_cn := lengthof(vc_sdp_local.media_list[i].attributes); + for (j := 0; j < v_cn; j := j + 1) { + // simplified handling of status attributes (copy/keep status from peer): + // a) copy/keep SDP_attribute_curr (invert tags if applicable) + if (ischosen(vc_sdp_local.media_list[i].attributes[j].curr)) { + // invert local/remote status tags + if (vc_sdp_local.media_list[i].attributes[j].curr.statusType == "local") { + vc_sdp_local.media_list[i].attributes[j].curr.statusType := "remote"; + } + if (vc_sdp_local.media_list[i].attributes[j].curr.statusType == "remote") { + vc_sdp_local.media_list[i].attributes[j].curr.statusType := "local"; + } + // invert send/recv direction tags + if (vc_sdp_local.media_list[i].attributes[j].curr.direction == "send") { + vc_sdp_local.media_list[i].attributes[j].curr.direction := "recv"; + } + if (vc_sdp_local.media_list[i].attributes[j].curr.direction == "recv") { + vc_sdp_local.media_list[i].attributes[j].curr.direction := "send"; + } + } + else + if ( + // b) copy/keep SDP_attribute_des (keep strength, invert tags if applicable) + ischosen(vc_sdp_local.media_list[i].attributes[j].des) + ) { + // invert local/remote status tags + if (vc_sdp_local.media_list[i].attributes[j].des.statusType == "local") { + vc_sdp_local.media_list[i].attributes[j].des.statusType := "remote"; + } + if (vc_sdp_local.media_list[i].attributes[j].des.statusType == "remote") { + vc_sdp_local.media_list[i].attributes[j].des.statusType := "local"; + } + // invert send/recv direction tags + if (vc_sdp_local.media_list[i].attributes[j].des.direction == "send") { + vc_sdp_local.media_list[i].attributes[j].des.direction := "recv"; + } + if (vc_sdp_local.media_list[i].attributes[j].des.direction == "recv") { + vc_sdp_local.media_list[i].attributes[j].des.direction := "send"; + } + } + else + if ( + // c) simplification: assume no SDP_attribute_conf + ischosen(vc_sdp_local.media_list[i].attributes[j].conf) + ) { + // handle SDP_attribute_conf + } + } + } + } + } + // add handling of prenegotiation, change ports if required etc. + // if prenegotiation... + } + + /** + * @desc reject SDP offer by setting media ports to 0 + */ + function f_reject_SDP_offer( + ) runs on SipComponent { + var integer mn, i; + f_copy_SDP(); // TO BE DONE with more details! + // increase session version + vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_local.origin.session_version) + 1); + // if more than one codec, select the firs one + mn := lengthof(vc_sdp_local.media_list); + for (i := 0; i < mn; i := i + 1) { + vc_sdp_local.media_list[i].media_field.ports := {0, omit}; + vc_sdp_local.media_list[i].attributes := omit; // {}; + } + } + + /** + * @desc copies SDP message elements from remote to local component variable: - bandwidth - session version (will be incremented) - media list modify the direction attribute of an SDP media list entry within an SDP message (vc_sdp_local) + * @param p_medianum list position number of the media (if value 0 identifies first media list element) + * @param p_direction the new direction attribute to be included in the media entry + * @verdict + */ + function f_SIP_modMediaDirection( + integer p_medianum, + template(value) SDP_attribute p_direction + ) runs on SipComponent { + var boolean v_set_direction; + + // flag indicates if direction attribute has been modified + var integer v_mn := 0; + + // length of media list (number of entries) + var integer v_cn := 0; + + // number of attributes of a media entry + var integer i, j, k := 0; + var SDP_attribute_list v_mediaAttributes := {}; + // collect the media attributes (to be assigned at end of function) + f_copy_SDP(); // copy SDP session bandwidth and media list from remote to local component variable + // increment session version + vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_local.origin.session_version) + 1); + + // if more than one codec, select the first one + v_mn := lengthof(vc_sdp_local.media_list); + + if (p_medianum == 0) + // specific media requested + { + p_medianum := 1; // start checking from first media + } + if (p_medianum > 0) + // specific media requested + { + if (not (p_medianum > v_mn)) { + v_mn := p_medianum; + } + } + + // handling of media list elements + for (i := 0; i < v_mn; i := i + 1) { + v_cn := 0; // initialize the number of attributes of the media list entry + if (isvalue(vc_sdp_local.media_list)) + // media_list is optional + { + // log("vc_sdp_local.media_list[i ] ",vc_sdp_local.media_list[i ] ); + if (isvalue(vc_sdp_local.media_list[i].attributes)) { + v_cn := lengthof(vc_sdp_local.media_list[i].attributes); + } + + v_set_direction := false; + + // if (lengthof(vc_sdp_local.media_list[i ] .media_field.fmts)>1) + // select the first one + for (j := 0; j < v_cn; j := j + 1) { + if (ischosen(vc_sdp_local.media_list[i].attributes[j].recvonly) or ischosen(vc_sdp_local.media_list[i].attributes[j].sendonly) or ischosen(vc_sdp_local.media_list[i].attributes[j].inactive) or ischosen(vc_sdp_local.media_list[i].attributes[j].sendrecv)) { + v_mediaAttributes[k] := valueof(p_direction); + v_set_direction := true; + } + else + // non-direction attributes will be copied + { + v_mediaAttributes[k] := vc_sdp_local.media_list[i].attributes[j]; + } + k := k + 1; + } + + if (not v_set_direction) { + v_mediaAttributes[k] := valueof(p_direction); + } + vc_sdp_local.media_list[i].attributes := v_mediaAttributes; + // } + } + } + // add handling of prenegotiation, change ports if required etc. + // if prenegotiation... + } + + /** + * @desc modify session and media attributes direction + */ + function f_SIP_modSessionDirection( + template(value) SDP_attribute p_direction + ) runs on SipComponent { + var boolean v_set_direction := false; + var integer v_mn := 0, i := 0; + + if (isvalue(vc_sdp_local.attributes)) { + v_mn := lengthof(vc_sdp_local.attributes); + + for (i := 0; i < v_mn; i := i + 1) { + // for every single attribute (that is not omit) + if (ischosen(vc_sdp_local.attributes[i].recvonly) or ischosen(vc_sdp_local.attributes[i].sendonly) or ischosen(vc_sdp_local.attributes[i].inactive) or ischosen(vc_sdp_local.attributes[i].sendrecv)) { + vc_sdp_local.attributes[i] := valueof(p_direction); + v_set_direction := true; + } + } + if (not v_set_direction) + // if not sent before + { + vc_sdp_local.attributes[v_mn] := valueof(p_direction); + } + } + else { + vc_sdp_local.attributes[0] := valueof(p_direction); + } + } + + /** + * @desc check (from remote) and set (local) the session/media attribute lines on directions + * @param p_direction_in incoming SDP attribute that need to be checked + * @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) + * @return + * @verdict + */ + function f_SIP_checksetSDPreqDirection( + template(value) SDP_attribute p_direction_in, + template(value) SDP_attribute p_direction_out + ) runs on SipComponent { + var template(value) SDP_attribute v_direction_out := p_direction_out; + // check incoming SDP attribute + if (not (isvalue(vc_request.messageBody) and (f_check_attribute(vc_request.messageBody.sdpMessageBody, p_direction_in)))) { + if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_inactive))) { + log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); + } + else { + setverdict(fail); + } + } + else { + setverdict(pass); + log("*** " &__SCOPE__& ": INFO: attribute found in message body ***"); + } + if (not isbound(p_direction_out)) + // not isvalue(v_direction_out))//MRO + { + v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in); + } + f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description + f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session + } + + /* + * + * @desc check (from remote) and set (local) the session/media attribute lines on directions + * @param p_direction_in incoming SDP attribute that need to be checked + * @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) + * @return + * @verdict + */ + function f_SIP_checkResponsesetSDPreqDirection( + template(value) SDP_attribute p_direction_in, + template(value) SDP_attribute p_direction_out + ) runs on SipComponent { + var template(value) SDP_attribute v_direction_out := p_direction_out; + // check incoming SDP attribute + if (not (isvalue(vc_response.messageBody) and (f_check_attribute(vc_response.messageBody.sdpMessageBody, p_direction_in)))) { + if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_inactive))) { + log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); + } + else { + setverdict(fail); + } + } + else { + setverdict(pass); + log("*** " &__SCOPE__& ": INFO: attribute found in message body ***"); + } + if (not isbound(p_direction_out)) + // not isvalue(v_direction_out))//MRO + { + v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in); + } + f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description + f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session + } + + /* + * + * @desc check (from remote) and set (local) the session attribute lines on directions + * @param p_direction_in incoming SDP attribute that need to be checked + * @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) + * @return + * @verdict + */ + function f_SIP_checksetSDPreqDirectionSession( + template(value) SDP_attribute p_direction_in, + template(value) SDP_attribute p_direction_out + ) runs on SipComponent { + var template(value) SDP_attribute v_direction_out := p_direction_out; + // check incoming SDP attribute + if (not (isvalue(vc_request.messageBody) and (f_check_session_attribute(vc_request.messageBody.sdpMessageBody, p_direction_in)))) { + if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_inactive))) { + log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); + } + else { + setverdict(fail); + } + } + if (not isbound(p_direction_out)) + // not isvalue(v_direction_out))//MRO + { + v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in); + } + f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session + } + + /* + * + * @desc check (from remote) and set (local) the session attribute lines on directions + * @param p_direction_in incoming SDP attribute that need to be checked + * @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) + * @return + * @verdict + */ + function f_SIP_checkResponsesetSDPreqDirectionSession( + template(value) SDP_attribute p_direction_in, + template(value) SDP_attribute p_direction_out + ) runs on SipComponent { + var template(value) SDP_attribute v_direction_out := p_direction_out; + // check incoming SDP attribute + if (not (isvalue(vc_response.messageBody) and (f_check_session_attribute(vc_response.messageBody.sdpMessageBody, p_direction_in)))) { + if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_inactive))) { + log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); + } + else { + setverdict(fail); + } + } + if (not isbound(p_direction_out)) + // not isvalue(v_direction_out))//MRO + { + v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in); + } + f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session + } + + + /* + * + * @desc check (from remote) and set (local)the session/media attribute lines on directions + * @param p_direction_in attribute to be check + * @param p_direction_out attrubyte to be + * @return + * @verdict + */ + function f_SIP_checkSDPrespDirection( + template SDP_attribute p_direction_in + ) runs on SipComponent { + // check incoming SDP attribute + if (not (isvalue(vc_response.messageBody) and f_check_attribute(vc_response.messageBody.sdpMessageBody, p_direction_in))) { + setverdict(fail); + } + } + + /** + * @desc check media/attribute lines from remote + */ + function f_SIP_checkMediaDirection( + integer p_medianum, + template SDP_attribute p_direction + ) runs on SipComponent + return boolean { + var integer v_mn, v_cn := 0, i, j; + var boolean v_result := false; + // increase session version + vc_sdp_remote.origin.session_version := int2str(str2int(vc_sdp_remote.origin.session_version) + 1); + // if more than one codec, select the firs one + v_mn := lengthof(vc_sdp_remote.media_list); + if (p_medianum == 0) + // specific media requested + { + p_medianum := 1; // start checking from first media + } + if (p_medianum > 0) + // specific media requested + { + if (p_medianum > v_mn) { + return false; + } + else { + v_mn := p_medianum; + } + } + for (i := p_medianum - 1; i < v_mn; i := i + 1) { + // for every single media + if (isvalue(vc_sdp_remote.media_list[i].attributes)) { + v_cn := lengthof(vc_sdp_remote.media_list[i].attributes); + } + if (lengthof(vc_sdp_remote.media_list[i].attributes) > 0) { + // select the first one + for (j := 0; j < lengthof(vc_sdp_remote.media_list[i].attributes); j := j + 1) { + if (ischosen(vc_sdp_remote.media_list[i].attributes[j].recvonly) or ischosen(vc_sdp_remote.media_list[i].attributes[j].sendonly) or ischosen(vc_sdp_remote.media_list[i].attributes[j].inactive) or ischosen(vc_sdp_remote.media_list[i].attributes[j].sendrecv)) { + if (match(vc_sdp_remote.media_list[i].attributes[j], p_direction)) { + v_result := true; + } + else { + return false; + } + } + } + } + } + return v_result; + } + + /** + * @desc copy media/attribute lines from remote to local SDP variable + */ + function f_copy_SDP( + ) runs on SipComponent { + if (isvalue(vc_sdp_remote.connection)) { + vc_sdp_local.connection := vc_sdp_remote.connection; + } + else { + vc_sdp_local.connection := omit; + } + + vc_sdp_local.origin := vc_sdp_remote.origin; + vc_sdp_local.session_name := vc_sdp_remote.session_name; + + if (isvalue(vc_sdp_remote.bandwidth)) { + vc_sdp_local.bandwidth := vc_sdp_remote.bandwidth; + } + else { + vc_sdp_local.bandwidth := {}; + } + + if (isvalue(vc_sdp_remote.media_list)) { + // // cleaning of media before assignment + // if (isvalue(vc_sdp_local.media_list)) + // { + // for (var integer i:=0; i value v_request /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfREGISTER(v_request); + } + [] tc_wait.timeout { + setverdict(fail); + f_componentStop(); + } + } + } + + /** + * @desc function awaits SUBSCRIBE + * @param p_register expected SUBSCRIBE request + */ + function f_awaitingSUBSCRIBE( + in template(present) SUBSCRIBE_Request p_subscribe := ? + ) runs on SipComponent { + var SUBSCRIBE_Request v_request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_subscribe) -> value v_request /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfSUBSCRIBE(v_request); + } + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request /*sender vc_sent_label*/ { + tc_wait.stop; + setverdict(fail); + f_setHeadersOnReceiptOfSUBSCRIBE(v_request); + // f_send200OK(); + } + } + } + + /** + * @desc function awaits REGISTER and sends a 200 OK response + * @param p_reply flag used to avoid the 200OK response sending + */ + function f_awaitingREGISTER_sendReply( + in template(present) REGISTER_Request p_register := ?, + in boolean p_reply + ) runs on SipComponent { + var REGISTER_Request v_request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_register) -> value v_request /*sender vc_sent_label*/ { + tc_wait.stop; + vc_request := v_request; + f_setHeadersOnReceiptOfREGISTER(v_request); + // Answer to the Request + if (p_reply) { + f_send200OK(); + } + } + [] tc_wait.timeout { + setverdict(fail); + f_componentStop(); + } + } + } + + + /** + * @desc Function waiting for a 200 OK response + * @param p_cSeq_s current cSeq expectation + */ + function f_awaitingOkResponse( + inout CSeq p_cSeq_s + ) runs on SipComponent { + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + setverdict(pass); + } + } + } // end awaitingOkResponse + + /** + * @desc Function waiting for a response + * @param p_Response expected response message + */ + function f_awaitingResponse( + in template(present) Response p_Response := ? + ) runs on SipComponent { + tc_resp.start; + a_awaitingResponse(p_Response); + } // end f_awaitingResponse + + altstep a_awaitingResponse( + in template(present) Response p_Response := ? + ) runs on SipComponent { + [] SIPP.receive(p_Response) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // setverdict(pass) + } + } // end f_awaitingResponse + + /** + * @desc Function waiting for a response, repeat if 100 Trying is received + * @param p_Response expected response message + */ + function f_awaitingResponseIgnore100Trying( + in template(present) Response p_Response := ? + ) runs on SipComponent { + tc_resp.start; + alt { + [] SIPP.receive(p_Response) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // setverdict(pass) + } + [] SIPP.receive(mw_Response_Base(c_statusLine100, vc_callId, vc_cSeq)) -> value vc_response { + repeat; + } + } + } // end f_awaitingResponseIgnore100Trying + + /** + * @desc Function waiting for a response and send ACK on FailureResponses 4xx,5xx,6xx + * @param p_Response expected response message + */ + function f_awaitingResponseSendACK( + in template(present) Response p_Response := ? + ) runs on SipComponent { + tc_resp.start; + alt { + [] SIPP.receive(p_Response) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + setverdict(pass); + } + } + } // end f_awaitingResponse + + /** + * @desc Function waiting for a response + * @param p_Response expected response message + */ + function f_awaitingResponsePassOnTimeout( + in template(present) Response p_Response := ? + ) runs on SipComponent { + tc_resp.start; + alt { + [] SIPP.receive(p_Response) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + vc_boo_response := true; + // setverdict(pass) + } + [] tc_resp.timeout { + vc_boo_response := false; + // setverdict (pass) + } + } + } // end f_awaitingResponsePassOnTimeout + + /** + * @desc Function waiting for a 200 OK response + * @param p_cSeq_s current cSeq expectation + */ + function f_awaitingOkResponseAndNOTIFY_sendReply( + inout CSeq p_cSeq_s, + in template(present) NOTIFY_Request p_MSG := ? + ) runs on SipComponent { + + var boolean v_received_OK := false; + var boolean v_received_NOTIFY := false; + var NOTIFY_Request v_MSG; + tc_resp.start; + tc_wait.start(PX_SIP_TWAIT); + + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + vc_subscribed := true; + f_setHeadersOnReceiptOfResponse(vc_response); + v_received_OK := true; + setverdict(pass); + if (not (v_received_NOTIFY)) { + repeat; + } + } + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_getRouteMapIntoRecordRoute(v_MSG); + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the NOTIFY + f_send200OK(); + v_received_NOTIFY := true; + if (not (v_received_OK)) { + repeat; + } + } + } + } // end f_awaitingOkResponseAndNOTIFY_sendReply + + /** + * @desc await INFO request reply with 200 OK + */ + function f_awaitingINFO_sendReply( + in template(value) INFO_Request p_info + ) runs on SipComponent { + var INFO_Request v_request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_info) -> value v_request /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_request); + // Answer to the INFO + f_send200OK(); + } + } + } // end of f_awaitingINFO_sendReply + + /** + * @desc function awaiting for an incoming INVITE + * @param p_request expected message + */ + function f_awaitingINVITE( + template(present) INVITE_Request p_request := ? + ) runs on SipComponent { + var INVITE_Request v_INVITE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_request) -> value v_INVITE_Request /*sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_invite := true; + vc_first_recv := true; // communication has started + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + } + [vc_interface_isc] SIPP.receive(mw_INVITE_Request_Base) -> value v_INVITE_Request /*sender vc_sent_label*/ { + tc_wait.stop; + setverdict(fail); + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + // clear session - send 486 and await ACK + f_sendResponse(m_Response_Base(c_statusLine486, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); + f_awaitingACK(mw_ACK_Request_Base(?)); + // await 486 which go towards and send ACK + f_awaitingResponse(mw_Response_Base(c_statusLine486, ?, ?)); + f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + syncPort.send(m_syncClientStop); + stop; + } + } + } // end f_awaitingINVITE + + /** + * @desc function awaiting for an incoming INVITE + * @param p_request expected message + */ + function f_awaitingINVITE_No100Response( + template(present) INVITE_Request p_request := ? + ) runs on SipComponent { + var INVITE_Request v_INVITE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_request) -> value v_INVITE_Request /*sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_invite := true; + vc_first_recv := true; // communication has started + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + // SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + } + } + } // end f_awaitingInviteRequest + + /** + * @desc function awaiting for an incoming INVITE + * @param p_request expected message + */ + function f_awaitingINVITE_PassOnTimeout( + template(present) INVITE_Request p_request := ? + ) runs on SipComponent { + var INVITE_Request v_INVITE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_request) -> value v_INVITE_Request /*sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_invite := true; + vc_first_recv := true; // communication has started + vc_boo_request := true; + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + } + [] tc_wait.timeout { + vc_boo_request := false; + } + } + } // end f_awaitingInviteRequest + + /** + * @desc function awaiting ACK request + */ + function f_awaitingACK( + in template(present) ACK_Request p_ACK := ? + ) runs on SipComponent { + f_awaitingACK_setHeaders(p_ACK, false); + } // end f_awaitingACK + + /** + * @desc function awaiting ACK request + */ + function f_awaitingACK_setHeaders( + in template(present) ACK_Request p_ACK := ?, + in boolean p_setHeaders + ) runs on SipComponent { + var ACK_Request v_ACK_Request; + tc_ack.start; + + alt { + [] SIPP.receive(p_ACK) -> value v_ACK_Request { + tc_ack.stop; + if (p_setHeaders) { + f_setHeadersOnReceiptOfRequest(v_ACK_Request); + } + } + } + } // end f_awaitingACK_setHeaders + + /** + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE( + in template(present) BYE_Request p_BYE := ? + ) runs on SipComponent { + var BYE_Request v_BYE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_BYE) -> value v_BYE_Request /*sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_bye := true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + // f_send200OK(); + } + } + } // end f_awaitingBYE + + /** + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE_sendReply( + in template(present) BYE_Request p_BYE := ? + ) runs on SipComponent { + var BYE_Request v_BYE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_BYE) -> value v_BYE_Request /*sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_bye := true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + f_send200OK(); + } + } + } // end f_awaitingBYE_sendReply + + /** + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE_sendReply_PassOnTimeout( + in template(present) BYE_Request p_BYE := ? + ) runs on SipComponent { + var BYE_Request v_BYE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_BYE) -> value v_BYE_Request /*sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_bye := true; + vc_boo_request := true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + f_send200OK(); + } + [] tc_wait.timeout { + vc_boo_request := false; + } + } + } // end f_awaitingBYE_sendReply_PassOnTimeout + + /** + * @desc function awaiting CANCEL + * @param p_CANCEL expected CANCEL + */ + function f_awaitingCANCEL( + in template(present) CANCEL_Request p_CANCEL := ? + ) runs on SipComponent { + var CANCEL_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_CANCEL) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + } + } + } // end f_awaitingCANCEL + /** + * @desc await MESSAGE request + */ + function f_awaitingMESSAGE( + in template(present) MESSAGE_Request p_MSG := ? + ) runs on SipComponent { + var MESSAGE_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + } + [] SIPP.receive(mw_MESSAGE_Request_Base) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + log("*** " &__SCOPE__& ": INFO: Received MESSAGE not as expected! ***"); + setverdict(fail); + } + } + } // end of f_awaitingMESSAGE + + /** + * @desc await MESSAGE request reply with 200 OK + */ + function f_awaitingMESSAGE_sendReply( + ) runs on SipComponent { + var MESSAGE_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(mw_MESSAGE_Request_Base) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the MESSAGE + f_send200OK(); + } + } + } // end of f_awaitingMESSAGE_sendReply + + /** + * @desc await MESSAGE request + */ + function f_awaitingMESSAGE_sendReply_PassOnTimeout( + in template(present) MESSAGE_Request p_MSG := ? + ) runs on SipComponent { + var MESSAGE_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the MESSAGE + // f_send200OK(); + vc_boo_request := true; + f_send200OK(); + // setverdict (pass); + } + [] tc_wait.timeout { + vc_boo_request := false; + // setverdict (pass); + } + } + } // end of f_awaitingMESSAGE_PassOnTimeout + + /** + * @desc await NOTIFY request + */ + function f_awaitingNOTIFY( + in template(present) NOTIFY_Request p_MSG := ? + ) runs on SipComponent { + var NOTIFY_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_getRouteMapIntoRecordRoute(v_MSG); + f_setHeadersOnReceiptOfRequest(v_MSG); + } + } + } // end of f_awaitingNOTIFY + + /** + * @desc await NOTIFY request reply with 200 OK + */ + function f_awaitingNOTIFY_sendReply( + in template(present) NOTIFY_Request p_MSG := ? + ) runs on SipComponent { + var NOTIFY_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_getRouteMapIntoRecordRoute(v_MSG); + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the NOTIFY + f_send200OK(); + } + } + } // end of f_awaitingNOTIFY_sendReply + + function f_awaitingNOTIFY_sendReply_postamble( + in template(present) NOTIFY_Request p_MSG := ? + ) runs on SipComponent { + var NOTIFY_Request v_MSG; + + tc_wait.start(5.0); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_getRouteMapIntoRecordRoute(v_MSG); + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the NOTIFY + f_send200OK(); + } + [] tc_wait.timeout { + // do nothing as receiving the Notify in de-registration is not part of the test body + } + } + } // end of f_awaitingNOTIFY_sendReply_postamble + + /** + * @desc await PRACK request reply with 200 OK + */ + function f_awaitingPRACK_sendReply( + in template(present) PRACK_Request p_MSG := ? + ) runs on SipComponent { + var PRACK_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the PRACK + if (isvalue(vc_request.messageBody) and ischosen(vc_request.messageBody.sdpMessageBody)) { + f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute(), m_MBody_SDP(vc_sdp_local))); + } + else { + f_sendResponse(m_Response_ext(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute())); + } + } + } + } // end of f_awaitingPRACK_sendReply + + function f_awaitingPRACK( + in template(present) PRACK_Request p_MSG := ? + ) runs on SipComponent { + var PRACK_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + } + } + } // end of f_awaitingPRACK + + /** + * @desc await PUBLISH request reply with 200 OK + */ + function f_awaitingPUBLISH_sendReply( + in template(present) PUBLISH_Request p_MSG := ? + ) runs on SipComponent { + var PUBLISH_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the PUBLISH + f_send200OK(); + } + } + } // end of f_awaitingPUBLISH_sendReply + + /** + * @desc await UPDATE request + */ + function f_awaitingUPDATE( + in template(present) UPDATE_Request p_MSG := ? + ) runs on SipComponent { + var UPDATE_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + } + } + } // end of f_awaitingUPDATE + + /** + * @desc await UPDATE request reply with 200 OK + */ + function f_awaitingUPDATE_sendReply( + in template(present) UPDATE_Request p_MSG := ? + ) runs on SipComponent { + var UPDATE_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the UPDATE + if (isvalue(vc_request.messageBody) and ischosen(vc_request.messageBody.sdpMessageBody)) { + f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute(), m_MBody_SDP(vc_sdp_local))); + } + else { + f_sendResponse(m_Response_ext(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute())); + } + } + } + } // end of f_awaitingUPDATE_sendReply + + + /** + * @desc await REFER request + */ + function f_awaitingREFER( + in template(present) REFER_Request p_MSG := ? + ) runs on SipComponent { + var REFER_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfREFER(v_MSG); + } + } + } // end of f_awaitingUPDATE + + + + } // end AwaitingMessage + + group SendMessage { + + /** + * @desc send ACK message, update the route and recordRoute header fields depending on boolean flags + * @param p_request template of the message to be sent + */ + function f_SendACK( + template(value) ACK_Request p_request + ) runs on SipComponent { + // p_request.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route + // n/a p_request.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send BYE message, update the route and recordRoute header fields depending on boolean flags + * @param p_request template of the message to be sent + */ + function f_SendBYE( + template(value) BYE_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send CANCEL message + * @param p_request template of the message to be sent + */ + function f_SendCANCEL( + template(value) CANCEL_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send INFO message + * @param p_request template of the message to be sent + */ + function f_SendINFO( + template(value) INFO_Request p_request + ) runs on SipComponent { + f_setHeadersGeneral(vc_cSeq, "INFO"); // cseq, contact, branch, via + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send INVITE message + * @param p_request template of the message to be sent + */ + function f_SendINVITE( + template(value) INVITE_Request p_request + ) runs on SipComponent { + vc_requestFor407 := valueof(p_request); + SIPP.send(p_request) to vc_sent_label; + vc_request := vc_requestFor407; + if (PX_SIP_INVITE_AUTHENTICATION_ENABLED) { + a_altstep_401or407(); + } + } + + /** + * @desc send PRACK message + * @param p_request template of the message to be sent + */ + function f_SendPRACK( + ) runs on SipComponent { + var integer responseNum := 1; + var PRACK_Request prackReq; + if (isvalue(vc_response.msgHeader.rSeq) and + isvalue(vc_response.msgHeader.rSeq.responseNum)){ + responseNum := vc_response.msgHeader.rSeq.responseNum; + } + vc_rAck := valueof(m_RAck(vc_response.msgHeader.rSeq.responseNum, vc_cSeq.seqNumber, vc_cSeq.method)); + f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via + prackReq := valueof(m_PRACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_rAck)); + if (isvalue(vc_response.msgHeader.recordRoute)){ + prackReq.msgHeader.route := valueof(f_route()); + } + SIPP.send(prackReq) to vc_sent_label; + } + + /** + * @desc send PUBLISH message + * @param p_request template of the message to be sent + */ + function f_SendPUBLISH( + template(value) PUBLISH_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send REGISTER message + * @param p_request template of the message to be sent + */ + function f_SendREGISTER( + template(value) REGISTER_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send SUBSCRIBE message + * @param p_request template of the message to be sent + */ + function f_SendSUBSCRIBE( + template(value) SUBSCRIBE_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send UPDATE message + * @param p_request template of the message to be sent + */ + function f_SendUPDATE( + template(value) UPDATE_Request p_request + ) runs on SipComponent { + f_setHeadersGeneral(vc_cSeq, "UPDATE"); // cseq, contact, branch, via + p_request.msgHeader.cSeq := vc_cSeq; + p_request.msgHeader.contact := vc_contact; + p_request.msgHeader.via := vc_via; + vc_requestFor407 := valueof(p_request); + SIPP.send(p_request) to vc_sent_label; + if (PX_SIP_INVITE_AUTHENTICATION_ENABLED) { + a_altstep_401or407(); + } + } + + /** + * @desc function send MESSAGE message + * @param p_request template of the message to be sent + */ + function f_SendMESSAGE( + template(value) MESSAGE_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc function send NOTIFY message + * @param p_request template of the notify to be sent + */ + function f_SendNOTIFY( + template(value) NOTIFY_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send REFER message + * @param p_request template of the message to be sent + */ + function f_SendREFER( + template(value) REFER_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send 200 OK + */ + function f_send200OK( + ) runs on SipComponent { + f_sendResponse(m_Response_Base(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); + } + + /** + * @desc send response + * @param p_request template of the message to be sent + */ + function f_sendResponse( + template(value) Response p_response + ) runs on SipComponent { + p_response.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route + p_response.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + SIPP.send(p_response) to vc_sent_label; + } + + + + } // end SendMessage + + group GlobalSteps { + /** + * @desc component initialization + * @param p_cSeq_s cSeq value to be assigned to the component variable + */ + function f_init_component( + inout CSeq p_cSeq_s + ) runs on SipComponent { + // Variables + vc_cSeq := p_cSeq_s; + + // Defaults + vc_def_catchSyncStop := activate(a_Sip_catchSyncStop()); + vc_default := activate(a_clearRegistration()); + } + + /** + * @desc component termination + */ + function f_terminate_component( + ) runs on SipComponent { + log("*** " &__SCOPE__& ": INFO: component terminated - forced! ***"); + deactivate; + stop; + } + + /** + * @desc component termination + */ + function f_componentStop( + ) runs on SipComponent { + syncPort.send(m_syncClientStop); + SIPP.clear; + stop; + } + + /** + * @desc function waits for particular time that allows the SUT to return to idle state + */ + function f_awaitSUTidle( + ) runs on SipComponent { + vc_ignore4xx := true; // allow 4xx in default + tc_noAct.start; + alt { + [] tc_noAct.timeout { + } + } + } + + /** + * @desc function waits for particular time before next expected message + */ + function f_wait( + float p_time + ) runs on SipComponent { + tc_noAct.start(p_time); + alt { + [] tc_noAct.timeout { + } + } + } + + /** + * @desc function cause termination of a PTC + * @param p_syncPoint dummy parameter (copied from the common lib) + */ + function f_check2Null( + in charstring p_syncPoint + ) runs on SipComponent { + // != pass does not work, because in case of "none" execution shall continue + if (getverdict == inconc or getverdict == fail) { + log("*** f_check2Null: INFO: Verdict evaluated to fail or inconc. Stopping test execution now ***"); + f_selfOrClientSyncAndVerdict(p_syncPoint, e_error); + } // end if + } + + /* + * + * @desc original copied from older LibCommon_VerdictControl + */ + function f_getVerdict( + ) return FncRetCode { + var FncRetCode v_ret := e_error; + if (getverdict == pass or getverdict == none) { + v_ret := e_success; + } + return v_ret; + } + + + + } // end group GlobalSteps + + group Registration { + + /** + * @desc registration and authentication with MD5 + * @param p_cSeq_s cseq parameter + * @param p_register register template + * @param p_auth flag indicating if authentication is needed + * @param p_emergency Set to true in case of emergency call + */ + function f_Registration( + inout CSeq p_cSeq_s, + out template(value) REGISTER_Request p_register, + in boolean p_auth, + in boolean p_emergency := false + ) runs on SipComponent { + if (PX_SIP_REGISTRATION) { + f_setHeaders_REGISTER(p_cSeq_s, p_emergency); + p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); + f_SendREGISTER(p_register); // LibSip + // awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER + if (p_auth) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq_s); + p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); + // Re-send protected REGISTER + f_SendREGISTER(p_register); // LibSip + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + log("*** " &__SCOPE__& ": INFO: Authorization was not requested as expected ***"); + } + } + } + else { + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + } + } // end function f_Registration + + /** + * @desc registration and authentication with MD5 + * @param p_cSeq_s cseq parameter + * @param p_register register template + * @param p_auth flag indicating if authentication is needed + */ + function f_Registration_withTemplate( + inout CSeq p_cSeq_s, + inout template(value) REGISTER_Request p_register, + in boolean p_auth + ) runs on SipComponent { + if (PX_SIP_REGISTRATION) { + if(not isbound(p_register)){ + f_setHeaders_REGISTER(p_cSeq_s); + p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); + } + f_SendREGISTER(p_register); // LibSip + // awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER + if (p_auth) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq_s); + // p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, + // vc_authorization); + // Re-send protected REGISTER + p_register.requestLine.requestUri := vc_requestUri; + p_register.msgHeader.cSeq := vc_cSeq; + p_register.msgHeader.via := vc_via_REG; + p_register.msgHeader.authorization := vc_authorization; + f_SendREGISTER(p_register); // LibSip + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + log("*** " &__SCOPE__& ": INFO: Authorization was not requested as expected ***"); + } + } + } + else { + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + } + } // end function f_Registration_withTemplate + + + /** + * @desc remove registration + * @param p_cSeq_s cseq parameter + */ + function f_RemoveRegistration( + inout CSeq p_cSeq + ) runs on SipComponent { + var template(value) REGISTER_Request v_request; + var boolean v_receivedNotify := false; + + // + if (vc_DeregDone) { + f_componentStop(); + } + else { + vc_DeregDone := true; + } + + if (PX_SIP_REGISTRATION) { + f_setHeaders_deREGISTER(p_cSeq); + v_request := m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization, "0"); + + f_SendREGISTER(v_request); + if (PX_SIP_REGISTER_AUTHENTICATION_ENABLED) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callIdReg, p_cSeq)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq); + v_request := m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization, "0"); + // v_request.msgHeader.route := f_route(); + // Re-send protected REGISTER + f_SendREGISTER(v_request); // LibSip + // awaiting 200 OK REGISTER + f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // log ("Authorization was not requested as expected"); + } + [] a_awaitNotify(mw_NOTIFY_Request_Base(vc_callIdSub), v_receivedNotify) { + } + } + } + else { + tc_resp.start; + alt { + [] a_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)) { + } + [] a_awaitNotify(mw_NOTIFY_Request_Base(vc_callIdSub), v_receivedNotify) { + } + } + } + + // await NOTIFY and send reply 200 OK + if (vc_subscribed and v_receivedNotify == false) { + f_awaitingNOTIFY_sendReply_postamble(mw_NOTIFY_Request_Base(vc_callIdReg)); + } + } + } // end f_RemoveRegistration + + /** + * @desc remove registration without authorization + * @param p_cSeq_s cseq parameter + */ + function f_RemoveRegistration_wo_authorization( + inout CSeq p_cSeq + ) runs on SipComponent { + if (PX_SIP_REGISTRATION) { + f_setHeaders_deREGISTER(p_cSeq); + f_SendREGISTER(m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, vc_from, vc_to, vc_via, vc_contact, vc_authorization, "0")); + f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)); + } + } // end f_RemoveRegistration_wo_authorization + + + + } // end group Registration + + group Subscription { + + /** + * @desc UE send subscrbe, await on 200 OK, await notify and send 200 OK + * @param p_cSeq_s cseq parameter + * @param p_subscribe subscribe template + */ + function f_Subscription( + inout CSeq p_cSeq_s, + template(value) SUBSCRIBE_Request p_subscribe + ) runs on SipComponent { + // send SUBSCRIBE + f_SendSUBSCRIBE(p_subscribe); + // awaiting 200 OK SUBSCRIBE + // await NOTIFY and send reply 200 OK + f_awaitingOkResponseAndNOTIFY_sendReply(p_cSeq_s, mw_NOTIFY_Request_Base(vc_callId)); + } // end function f_Subscription + + /** + * @desc UE send subscrbe, await on 200 OK, await notify and send 200 OK + * @param p_cSeq_s cseq parameter + * @param p_subscribe subscribe template + * @param p_notify notify template + */ + function f_SubscriptionWithNotification( + inout CSeq p_cSeq_s, + template(value) SUBSCRIBE_Request p_subscribe, + template(present) NOTIFY_Request p_notify := ? + ) runs on SipComponent { + f_setHeaders_SUBSCRIBE(p_cSeq_s); + // send SUBSCRIBE + f_SendSUBSCRIBE(p_subscribe); + // awaiting 200 OK SUBSCRIBE + // await NOTIFY and send reply 200 OK + f_awaitingOkResponseAndNOTIFY_sendReply(p_cSeq_s, p_notify); + } // end function f_SubscriptionWithNotification + + /** + * @desc UE await subscrbe, send on 200 OK; possibility to handle also other SUBSCRIBE methods where event is different than reg + * @param p_cSeq_s cseq parameter + * @param p_subscribe subscribe template + */ + function f_awaitingSubscription( + template(present) SUBSCRIBE_Request p_subscribe := ? + ) runs on SipComponent { + var SUBSCRIBE_Request v_request; + + tc_wait.start(2.0); // awaiting of all SUBSCRIBES + alt { + [] SIPP.receive(p_subscribe) -> value v_request /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfSUBSCRIBE(v_request); + f_send200OK(); + repeat; + } + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfSUBSCRIBE(v_request); + f_send200OK(); + repeat; + } + [] tc_wait.timeout { + setverdict(pass); + } + } + } // end function f_awaitingSubscription + + + + } // end group Subscription + + group Preambles { + + /** + * @desc Set variables and default initialization for user profile + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + */ + function f_SIP_preamble_woREG( + inout CSeq p_cSeq_s + ) runs on SipComponent { + // varables and altsteps + f_init_component(p_cSeq_s); + + // Preamble + //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); + } + + /** + * @desc Set variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + * @param p_register register template + */ + function f_SIP_preamble_withREG( + inout CSeq p_cSeq_s, + template(value) REGISTER_Request p_register + ) runs on SipComponent { + // preamble + f_SIP_preamble_woREG(p_cSeq_s); + + // Registration, Awaiting + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + } + + + + } // end group Preambles + + group Postambles { + + /** + * @desc function send BYE and awaits reponse + * @param p_CallId parameter for outgoing BYE + * @param p_cSeq parameter for outgoing BYE + * @param p_from parameter for outgoing BYE + * @param p_to parameter for outgoing BYE + * @param p_reqHostPort parameter for outgoing BYE + * @param p_byeCause parameter for Release cause to be used + * in BYE and in Failure messages, former PX_SIP_BYE_CAUSE + */ + function f_terminateCall( + SipUrl p_requestUri, + CallId p_CallId, + inout CSeq p_cSeq, + From p_from, + template(value) To p_to, + integer p_byeCause + ) runs on SipComponent { + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_cause(p_requestUri, p_CallId, p_cSeq, p_from, p_to, vc_via, p_byeCause)); + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_CallId, p_cSeq)) { + repeat; + } + [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_CallId, p_cSeq)) { + tc_resp.stop; + } + } + } // end function f_terminateCall + + function f_cancelCall( + template(value) CANCEL_Request p_request + ) runs on SipComponent { + // This function is called to bring back the IUT in idle condition + // in case of errors or unexpected behaviour. + // Sending of a CANCEL request with the same Cseq + f_setHeadersCANCEL(vc_cSeq); + f_SendCANCEL(p_request); + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)) { + tc_resp.stop; + } + } + } + + function f_cancelCall_await487( + template(value) CANCEL_Request p_request + ) runs on SipComponent { + // This function is called to bring back the IUT in idle condition + // in case of errors or unexpected behaviour. + // Sending of a CANCEL request with the same Cseq + f_cancelCall(p_request); + // set method on INVITE + vc_cSeq.method := "INVITE"; + + // await on 487 response and send ACK + f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, vc_cSeq)); + f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + } + + function f_awaitCancelCall_send487( + template(present) CANCEL_Request p_request := ? + ) runs on SipComponent { + f_awaitingCANCEL(p_request); + f_sendResponse(m_Response_Base(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); + + // set method on INVITE + vc_cSeq.method := "INVITE"; + + // send 487 response and await ACK + f_sendResponse(m_Response_Base(c_statusLine487, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); + // await ACK + f_awaitingACK(mw_ACK_Request_Base(vc_callId)); + } + + altstep a_receiveCANCELorNothing( + in template(present) CANCEL_Request p_CANCEL := ? + ) runs on SipComponent { + var CANCEL_Request v_MSG; + [] SIPP.receive(p_CANCEL) -> value v_MSG /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the CANCEL + f_send200OK(); + } + } + + altstep a_awaitNotify( + in template(present) NOTIFY_Request p_MSG := ?, + inout boolean p_receivedNotify + ) runs on SipComponent { + var NOTIFY_Request v_MSG; + [vc_subscribed] SIPP.receive(p_MSG) -> value v_MSG /*sender vc_sent_label*/ { + p_receivedNotify := true; + f_getRouteMapIntoRecordRoute(v_MSG); + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the NOTIFY + f_send200OK(); + repeat; + } + } + + + + } // end group Postambles + + group SipChecks { + + + /** + * @desc check the presence of conversation at SIP side + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_Conversation( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if conversation at SIP port"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_conversation: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_conversation: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_conversation: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_uPlane, f_getVerdict()); // Note: implemented in test bodies + return; + } // end of f_check_Conversation + + /** + * @desc check the presence of conversation at SIP side + * @param p_checkRinging boolean to perform check if ringing check is implemented. + * former PX_SIP_CHECK_RINGING + */ + function f_check_Ringing( + boolean p_checkRinging := false + ) runs on SipComponent { + var charstring v_question := "confirm if ringing at SIP port"; + + if (p_checkRinging) { + opPort + .call( + s_SIP_ringing: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_ringing: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_ringing: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_Ringing, f_getVerdict()); + return; + } // end of f_check_Ringing + + /** + * @desc check the announcement at SIP side (UE A) + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_AnnouncementUE_A( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if announcement at UE A"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_announcementA: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_announcementA: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_announcementA: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_annoucA, f_getVerdict()); + return; + } // end of f_check_AnnouncementUE_A + + /** + * @desc check the announcement at SIP side (UE B) + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_AnnouncementUE_B( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if announcement at UE B"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_announcementB: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_announcementB: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_announcementB: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_annoucB, f_getVerdict()); + return; + } // end of f_check_AnnouncementUE_B + + /** + * @desc check the announcement at SIP side + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_Announcement( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if announcement at SIP side"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_announcement: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_announcement: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_announcement: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_annouc, f_getVerdict()); + return; + } // end of f_check_Announcement + + /** + * @desc check the Voice message at SIP side + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_VoiceMessage( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if voice message at SIP side"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_voiceMessage: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_voiceMessage: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_voiceMessage: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_voicem, f_getVerdict()); + return; + } // end of f_check_Announcement + + /** + * @desc check the stop of media stream + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_MediaStopped( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if media stream stopped"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_mediastopped: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_mediastopped: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_mediastopped: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_uPlaneStop, f_getVerdict()); + return; + } // end of f_check_MediaStopped + + } + + group DefaultsTestStep { + + + /** + * @desc This default handles receiving of the sync server STOP message and calls the RT HUT postamble. (copy from common lib) + */ + altstep a_Sip_catchSyncStop( + ) runs on SipComponent { + [] syncPort.receive(m_syncServerStop) { + tc_sync.stop; + log("*** a_Sip_catchSyncStop: INFO: Test component received STOP signal from MTC - going to IDLE state *** "); + syncPort.send(m_syncClientStop); + // in case if deregistration was not done + // f_RemoveRegistration(vc_cSeq); + f_terminate_component(); + log("*** a_Sip_catchSyncStop: INFO: TEST COMPONENT NOW STOPPING ITSELF! *** "); + setverdict(inconc); + stop; + } + } + + + /** + * @desc main default altstep to handle unexpected messages and timeout + * @verdict fail for all unexpected branches + */ + altstep a_clearRegistration( + ) runs on SipComponent { + var Response v_response; + var Request v_request; + var INFO_Request v_info_request; + var NOTIFY_Request v_notify_request; + var SUBSCRIBE_Request v_subscribe_request; + var BYE_Request v_bye_request; + var CANCEL_Request v_cancel_request; + var REGISTER_Request v_register_request; + var CSeq v_cSeq; + [] any timer.timeout { + setverdict(fail); + all timer.stop; + // f_SendCANCEL(m_CANCEL_Request(vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_reqHostPort, vc_via )); // difference between registration + // state or transaction state + vc_callId := vc_callIdReg; + f_RemoveRegistration(vc_cSeq); + } + // allow repeated INVITEs + [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) { + repeat; + } + // allow repeated BYEs after ack of the first BYE + [vc_ignore_bye] SIPP.receive(mw_BYE_Request_Base(?)) { + repeat; + } + [] SIPP.receive(mw_ACK_Request_Base(?)) { + repeat; + } + // allow 100 replies + [] SIPP.receive(mw_Response_Base(c_statusLine100, ?, ?)) { + repeat; + } + // ignore 181 if flag is set (following TS 183004 4.5.2.1) + [vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181, vc_callId, vc_cSeq)) -> value v_response /*sender vc_sent_label*/ { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory + repeat; + } + // according to SIP chap.8.1.3.2 + [] SIPP.receive(mw_Response_Base(c_statusLine183, vc_callId, vc_cSeq)) { + repeat; + } + // ignore 484 if flag is set + [vc_ignore484] SIPP.receive(mw_Response_Base(c_statusLine484, vc_callId, vc_cSeq)) { + repeat; + } + [vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response /*sender vc_sent_label*/ { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + repeat; + } + [vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) { + repeat; + } + [] SIPP.receive(mw_INFO_Request_Base(vc_callId)) -> value v_info_request /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfRequest(v_info_request); + f_send200OK(); + repeat; + } + // awaiting of Notify + [] SIPP.receive(mw_NOTIFY_Request_Base(vc_callId)) -> value v_notify_request /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfRequest(v_notify_request); + f_send200OK(); + repeat; + } + // awaiting of subscribe from UE + [vc_ignore_subscribe] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfSUBSCRIBE(v_subscribe_request); + f_send200OK(); + repeat; + } + // awaiting of subscribe on proxy + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request /*sender vc_sent_label*/ { + f_setHeadersOnReceiptOfRequest(v_subscribe_request); + f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); + // f_setHeadersGeneral(vc_cSeq, "NOTIFY"); // cseq, contact, branch, via + // f_SendNOTIFY(m_NOTIFY_Request_contact(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); + f_SendNOTIFY(m_NOTIFY_Request_contact(v_subscribe_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); + f_awaitingOkResponse(vc_cSeq); + repeat; + } + // unexpected BYE is acknowledged to avoid retransmissions + [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request /*sender vc_sent_label*/ { + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_bye_request); + f_send200OK(); + f_RemoveRegistration(vc_cSeq); + } + // unexpected CANCEL is acknowledged to avoid retransmissions + [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request /*sender vc_sent_label*/ { + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_cancel_request); + // Answer to the CANCEL + f_send200OK(); + f_RemoveRegistration(vc_cSeq); + } + // catch 4xx response + [] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response /*sender vc_sent_label*/ { + setverdict(fail); + if (v_response.msgHeader.cSeq.method == "INVITE") { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + } + f_RemoveRegistration(vc_cSeq); + } + // catch 5xx response + [] SIPP.receive(mw_Response_Base(mw_statusLine5xx, vc_callId, ?)) -> value v_response /*sender vc_sent_label*/ { + setverdict(fail); + if (v_response.msgHeader.cSeq.method == "INVITE") { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + } + f_RemoveRegistration(vc_cSeq); + } + // catch invalid REGISTER + [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request /*sender vc_sent_label*/ { + setverdict(fail); + f_componentStop(); + } + // any + [] SIPP.receive { + setverdict(fail); + all timer.stop; + // f_setHeadersCANCEL(vc_cSeq); + // f_SendCANCEL(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_via )); // difference between + // registration state or transaction state + f_RemoveRegistration(vc_cSeq); + } + } + + /** + * @desc altstep handle authentication for INVITE message + */ + altstep a_altstep_401or407( + ) runs on SipComponent { + var CommaParam_List v_challenge; + var Credentials v_Credentials; + var Response v_Response; + var Request v_Request := vc_requestFor407; + [] any port.check(receive) { + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base((c_statusLine401, c_statusLine407), vc_callId, vc_cSeq)) -> value v_Response { + tc_resp.stop; + // get tag from To header if available + vc_to := v_Response.msgHeader.toField; + if (vc_cSeq.method == "INVITE") { + // send ACK + f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + } + // resent the INVITE message with Proxyauthorization header include + // Extract challenge and calculate credentials for a response. + if ( + ischosen( + v_Response.msgHeader.proxyAuthenticate.challenge + .otherChallenge // instead of digestCln (changed by axr to comply to alcatel) + ) + ) { + v_challenge := v_Response.msgHeader.proxyAuthenticate.challenge.otherChallenge.authParams; + v_Credentials := f_calculatecCredentials(vc_userprofile, vc_requestFor407.msgHeader.cSeq.method, v_challenge); + } + else { + log("*** " &__SCOPE__& ": INFO: No scheme in Proxy Authenticate header!!! ***"); + setverdict(inconc); + stop; + } + + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + v_Request.msgHeader.via := vc_via; + // Increment CSeq sequence number of and add the credentials + // to the original saved INVITE message. + vc_cSeq.method := vc_requestFor407.msgHeader.cSeq.method; + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + v_Request.msgHeader.cSeq.seqNumber := vc_cSeq.seqNumber; + v_Request.msgHeader.proxyAuthorization.fieldName := PROXY_AUTHORIZATION_E; + v_Request.msgHeader.proxyAuthorization.credentials := {v_Credentials}; + + // Re-send the saved INVITE with Authorization header + // included. + SIPP.send(v_Request) to vc_sent_label; + } + } + } + } + + } // end of group DefaultsTestStep +} // end module LibSip_Steps diff --git a/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn b/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..2ec8f44dd0212368f94c4403612c6d5b124c36b4 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn @@ -0,0 +1,4648 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF450, STF471 + * @version $Id$ + * @desc This module defines SIP Templates for message, header, and + * structured types.
+ * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions. + * This module is part of LibSipV3. + * @remark Any additions to the templates shall follow the design rules and always modify base templates only; Existing templates shall not be changed or removed - change requests shall be made to http://t-ort.etsi.org + */ +module LibSip_Templates { + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Interface all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + import from LibSip_SimpleMsgSummaryTypes all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Common all; + + import from NoTargetNamespace language "XSD" all + with { + extension "File:../xsd/Ims3gpp.xsd"; + } + + import from urn_ietf_params_xml_ns_conference_info language "XSD" all + with { + extension "File:../xsd/CONF.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all + with { + extension "File:../xsd/PSTN.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all + with { + extension "File:../xsd/SupplementaryServices.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all + with { + extension "File:../xsd/MCID.xsd"; + } + + import from urn_ietf_params_xml_ns_resource_lists language "XSD" all + with { + extension "File:../xsd/ResourceList.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all + with { + extension "File:../xsd/CDIVN.xsd"; + } + + import from urn_3gpp_ns_cw_1_0 language "XSD" all + with { + extension "File:../xsd/cw.xsd"; + } + + group SubFields { + + template(value) Addr_Union m_AddrUnion_NameAddr(template(value) NameAddr p_nameAddr) := {nameAddr := p_nameAddr} + + template(value) Addr_Union m_AddrUnion_DisplayAndSipUrl( + template(value) DisplayName p_displayName, + template(value) SipUrl p_addrSpec + ) := { + nameAddr := m_CallingAddr(p_displayName, p_addrSpec) + } + + template(value) NameAddr m_NameAddr( + template(omit) DisplayName p_displayName := omit, + template(value) SipUrl p_addrSpec + ) := { + displayName := p_displayName, + addrSpec := p_addrSpec + } + + template(value) NameAddr m_CallingAddr( + template(value) DisplayName p_displayName, + template(value) SipUrl p_addrSpec + ) := m_NameAddr(p_displayName, p_addrSpec); + + template(present) NameAddr mw_NameAddr( + template DisplayName p_displayName, + template(present) SipUrl p_addrSpec := ? + ) := { + displayName := p_displayName, + addrSpec := p_addrSpec + } + + template(present) CommaParam_List mw_digestResponse( + template(present) GenericParam p_genericParam := ? + ) := superset(p_genericParam); + + //* c_Integrity_protected_yes + /** + * @desc send template for parameter list with CPC set to a specific value + * @param p_ISUP_CPC_value CPC parameter value + * former PX_SIP_ISUP_CPC_VALUE + */ + template(value) SemicolonParam_List m_cpc( + template(value) charstring p_ISUP_CPC_value := "prison" + ) := { + { + "cpc", + {tokenOrHost := p_ISUP_CPC_value} + } + } + + template(value) SemicolonParam_List m_ReasonParams( + template(omit) GenValue p_cause := omit, + template(value) GenValue p_text + ) := { + m_Cause(p_cause), m_Text(p_text) + } + + template(present) SemicolonParam_List mw_ReasonParams( + template GenValue p_cause, + template GenValue p_text + ) := { + mw_Cause_base(p_cause), mw_Text(p_text) + } + + template(value) ReasonValue m_ReasonValue_Base := { + token := "", + reasonParams := omit + } + + template(present) ReasonValue mw_ReasonValue_Base := { + token := ?, + reasonParams := * + } + + template(value) ReasonValue m_ReasonValue_param( + template(value) GenValue p_cause, + template(value) GenValue p_text + ) modifies m_ReasonValue_Base := { + reasonParams := m_ReasonParams(p_cause, p_text) + } + + template(present) ReasonValue mw_ReasonValue_param( + template GenValue p_cause, + template GenValue p_text + ) modifies mw_ReasonValue_Base := { + reasonParams := mw_ReasonParams(p_cause, p_text) + } + + template(value) ReasonValue m_ReasonValue( + template(value) GenValue p_cause, + template(value) GenValue p_text + ) modifies m_ReasonValue_param := { + token := "Q.850" + } + + template(present) ReasonValue mw_ReasonValue( + template GenValue p_cause, + template GenValue p_text + ) modifies mw_ReasonValue_param := { + token := "Q.850" + } + + template(value) ReasonValue m_ReasonValueSIP( + template(value) GenValue p_cause, + template(value) GenValue p_text + ) modifies m_ReasonValue_param := { + token := "SIP" + } + + template(present) ReasonValue mw_ReasonValueSIP( + template GenValue p_cause, + template GenValue p_text + ) modifies mw_ReasonValue_param := { + token := "SIP" + } + + template(present) RouteBody mw_routeBody( + template(present) SipUrl p_sipurl := ? + ) := { + nameAddr := mw_NameAddr(*, p_sipurl), + rrParam := * + } + + template(value) SentProtocol m_SentProtocol( + template(value) charstring p_protocol + ) := { + protocolName := c_sipName, + protocolVersion := c_sipVersion, + transport := p_protocol + } + + template(value) SipUrl m_BasicSipUrl := { + scheme := (c_sipScheme), + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "", //* charstring + password := + omit //* optional charstring + }, + hostPort := { + host := omit, //* hostname, IPv4 or IPv6 as a charstring + portField := + omit //* p_userprofile.currPort - optional integer + } + } + }, + urlParameters := omit, + headers := omit + } + + template(value) SipUrl m_SipUrl_currDomain_Base( + template(value) SipUserProfile p_userprofile + ) modifies m_BasicSipUrl := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := p_userprofile.publUsername + } + } + } + } + + template(value) SipUrl m_SipUrl_currDomain( + template(value) SipUserProfile p_userprofile + ) modifies m_SipUrl_currDomain_Base := { + components := { + sip := { + hostPort := { + host := + p_userprofile + .homeDomain //* hostname, IPv4 or IPv6 as a charstring + } + } + } + } + + template(value) SipUrl m_SipUrl_contactIpaddr( + template(value) SipUserProfile p_userprofile + ) modifies m_SipUrl_currDomain_Base := { + components := { + sip := { + hostPort := { + host := p_userprofile.contactIpaddr, //* hostname, IPv4 or IPv6 as a charstring + portField := + p_userprofile + .contactPort //* optional integer + } + } + } + } + /** + * @desc send template with SIP userinfo + * @param p_userprofile SIP user profile values + * @param p_ISUP_CPC_value CPC parameter value + * former PX_SIP_ISUP_CPC_VALUE + */ + template(value) SipUrl m_SipUrl_contactIpaddrAndCpc( + template(value) SipUserProfile p_userprofile, + template(value) charstring p_ISUP_CPC_value := "prison" + ) modifies m_SipUrl_contactIpaddr := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := + valueof(p_userprofile.publUsername) & "; cpc=" & + valueof(p_ISUP_CPC_value) + } + } + } + } + + template(value) SipUrl m_SipUrl_currIpaddr( + template(value) SipUserProfile p_userprofile + ) modifies m_SipUrl_currDomain_Base := { + components := { + sip := { + hostPort := { + host := p_userprofile.currIpaddr, //* hostname, IPv4 or IPv6 as a charstring + portField := + p_userprofile + .currPort //* optional integer + } + } + } + } + + template(value) SipUrl m_SipUrl_Anonymous modifies m_BasicSipUrl := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := + "Anonymous" //* charstring + }, + hostPort := { + host := + "Anonymous.invalid" //* hostname, IPv4 or IPv6 as a charstring + } + } + } + } + + template(value) SipUrl m_SipUrl_NumberHostHeader( + template(value) charstring p_number, + template(value) charstring p_host, + template(omit) AmpersandParam_List p_urlParameters := omit + ) modifies m_BasicSipUrl := { + components := { + sip := { + userInfo := {userOrTelephoneSubscriber := p_number}, + hostPort := {host := p_host} + } + }, + urlParameters := p_urlParameters + } + + template(value) SipUrl m_SipUrl_NumberHostParam( + template(value) charstring p_number, + template(value) charstring p_host, + template(omit) AmpersandParam_List p_urlParameters := omit + ) modifies m_SipUrl_NumberHostHeader := { + components := {sip := {hostPort := {portField := c_defaultSipPort}}} + } + + template(value) SipUrl m_SipUrl_NumberHostParam_woPort( + template(value) charstring p_number, + template(value) charstring p_host, + template(omit) AmpersandParam_List p_urlParameters := omit + ) modifies m_SipUrl_NumberHostParam := { + components := {sip := {hostPort := {portField := omit}}} + } + + template(present) SipUrl m_BasicTelUrl := { + scheme := (c_telScheme), + components := {tel := {subscriber := ""}}, + urlParameters := omit, + headers := omit + } + + template(value) SipUrl m_TelUrl_publUser( + template(value) SipUserProfile p_userprofile + ) modifies m_BasicTelUrl := { + components := { + tel := { + subscriber := + p_userprofile + .publUsername //* charstring + } + } + } + + template(present) SipUrl mw_TelUrl := { + scheme := c_telScheme, + components := {tel := {subscriber := ?}}, + urlParameters := *, + headers := * + } + + template(present) SipUrl mw_SipUrl := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := ?, + password := * + }, + hostPort := { + host := *, + portField := * + } + } + }, + urlParameters := *, + headers := * + } + + template(present) SipUrl mw_TelSip_unavailableInvalidUri := (mw_TelSip_unavailableInvalidUri1, mw_TelSip_unavailableInvalidUri2); + + template(present) SipUrl mw_TelSip_unavailableInvalidUri1 modifies mw_SipUrl := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unavailable" + }, + hostPort := { + host := "anonymous.invalid", + portField := c_defaultSipPort + } + } + } + } + template(present) SipUrl mw_TelSip_unavailableInvalidUri2 modifies mw_TelUrl := { + components := {tel := {subscriber := "unavailable"}} + } + + template(present) SipUrl mw_TelSip_unavailableUri( + template(value) charstring p_host + ) := (mw_TelSip_unavailableUri1, mw_TelSip_unavailableUri2(p_host)); + + template(present) SipUrl mw_TelSip_unavailableUri1 modifies mw_TelUrl := { + components := {tel := {subscriber := "unavailable"}} + } + + template(present) SipUrl mw_TelSip_unavailableUri2( + template(value) charstring p_host + ) modifies mw_SipUrl := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unavailable" + }, + hostPort := { + host := p_host, + portField := c_defaultSipPort + } + } + } + } + + template(present) SipUrl mw_SipUrl_Number( + template(present) charstring p_number := ? + ) modifies mw_SipUrl := { + components := { + sip := { + userInfo := {userOrTelephoneSubscriber := p_number}, + hostPort := ? + } + } + } + + template(present) SipUrl mw_TelSipUrl_Number( + template(present) charstring p_number := ? + ) := (mw_SipUrl_Number(p_number), mw_TelSipUrl_Number2(p_number)); + + template(present) SipUrl mw_TelSipUrl_Number1( + template(present) charstring p_number := ? + ) := mw_SipUrl_Number(p_number); + + template(present) SipUrl mw_TelSipUrl_Number2( + template(present) charstring p_number := ? + ) modifies mw_TelUrl := { + components := { + tel := { + subscriber := p_number + } + } + } + + template(present) SipUrl mw_SipUrl_Host( + template(present) charstring p_host := ? + ) modifies mw_SipUrl := { + components := { + sip := { + userInfo := *, + hostPort := {host := p_host} + } + } + } + + template(present) SipUrl mw_SipUrl_User_Host( + template(present) charstring p_user := ?, + template(present) charstring p_host := ? + ) modifies mw_SipUrl := { + components := { + sip := { + userInfo := {userOrTelephoneSubscriber := p_user}, + hostPort := { + host := + p_host //* hostname, IPv4 or IPv6 as a charstring + } + } + }, + urlParameters := * // FSCOM Strange {m_UserPhone} + } + + template(present) SipUrl mw_SipUrl_Anonymous modifies mw_SipUrl := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := pattern "[a,A][n,N][o,O][n,N][y,Y][m,M][o,O][u,U][s,s]" //* charstring + }, + hostPort := { + host := + pattern + "[a,A]nonymous.invalid" //* hostname, IPv4 or IPv6 as a charstring + } + } + } + } + + template(present) SipUrl mw_SipUrl_urlParam( + template SemicolonParam_List p_urlParameters + ) modifies mw_SipUrl := { + urlParameters := p_urlParameters + } + + template(present) ContactAddress mw_ContactAddress := { + addressField := ?, + contactParams := * + } + + template(present) HostPort mw_hostPort( + template charstring p_host, + template integer p_portField + ) := { + host := p_host, + portField := p_portField + } + + template(present) StatusLine mw_statusLine_any := { + sipVersion := c_sipNameVersion, + statusCode := ?, + reasonPhrase := ? + } + + template(present) StatusLine mw_statusLine( + in template(present) integer p_statusCode := ?, + in template(present) charstring p_reasonPhrase := ? + ) modifies mw_statusLine_any := { + statusCode := p_statusCode, + reasonPhrase := p_reasonPhrase + } + + template(present) StatusLine mw_statusLine1xx modifies mw_statusLine_any := {statusCode := (100 .. 199)} + + template(present) StatusLine mw_statusLine2xx modifies mw_statusLine_any := {statusCode := (200 .. 299)} + + template(present) StatusLine mw_statusLine3xx modifies mw_statusLine_any := {statusCode := (300 .. 399)} + + template(present) StatusLine mw_statusLine4xx modifies mw_statusLine_any := {statusCode := (400 .. 499)} + + template(present) StatusLine mw_statusLine5xx modifies mw_statusLine_any := {statusCode := (500 .. 599)} + + template(present) StatusLine mw_statusLine6xx modifies mw_statusLine_any := {statusCode := (600 .. 699)} + + template(present) StatusLine mw_statusLineFinal modifies mw_statusLine_any := {statusCode := (200 .. 699)} + + template(present) NameAddr mw_NameAddr_DispName_User_Host( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + displayName := p_dn, + addrSpec := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := p_user, + password := * + }, + hostPort := { + host := p_host, //* hostname, IPv4 or IPv6 as a charstring + portField := + * //* optional integer + } + } + }, + urlParameters := *, // FSCOM: Strange: {m_UserPhone}, + headers := * + } + } + + template(present) Addr_Union mw_AddrUnion_Nameaddr( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + nameAddr := mw_NameAddr_DispName_User_Host(p_dn, p_user, p_host) + } + + template(present) Addr_Union mw_AddrUnion_SipUrl( + template(present) charstring p_user := ?, + template charstring p_host + ) := { + addrSpecUnion := mw_SipUrl_User_Host(p_user, p_host) + } + + template(present) Addr_Union mw_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + addrSpecUnion := mw_TelSipUrl_Number(p_number) + } + + + } //* end group Subfields + + group HeaderFieldTemplates { + template(value) LibSip_SIPTypesAndValues.Allow m_Allow( + template(value) Method_List p_methods + ) := { + fieldName := ALLOW_E, + methods := p_methods + } + + template(present) LibSip_SIPTypesAndValues.Allow mw_Allow( + template(value) charstring p_method + ) := { + fieldName := ALLOW_E, + methods := superset(p_method) + } + + template(value) GenericParam m_Cause( + template(omit) GenValue p_cause := omit + ) := { + id := "cause", + paramValue := p_cause + } + + template(present) GenericParam mw_Cause_base( + template GenValue p_cause + ) := { + id := "cause", + paramValue := p_cause + } + + template(present) GenericParam mw_Cause( + template(value) charstring p_cause + ) := { + id := ?, + paramValue := { tokenOrHost := pattern "*{p_cause}*" } + } + + template(value) Authorization m_Authorization( + template(value) Credentials p_credentials + ) := { + fieldName := AUTHORIZATION_E, + body := {p_credentials} + } + + template(present) Authorization mw_Authorization( + template(present) Credentials p_credentials := ? + ) := { + fieldName := AUTHORIZATION_E, + body := {p_credentials} + } + + template(value) Authorization m_Authorization_digest( + template(value) CommaParam_List p_commaParam_List + ) := { + fieldName := AUTHORIZATION_E, + body := {{digestResponse := p_commaParam_List}} + } + + template(present) Authorization mw_Authorization_digest( + template(present) CommaParam_List p_commaParam_List := ? + ) := { + fieldName := AUTHORIZATION_E, + body := {{digestResponse := p_commaParam_List}} + } + + template(value) Authorization m_add_Authorization_digest( + template(value) Authorization p_auth, + template(value) CommaParam_List p_commaParam_List + ) := { + fieldName := AUTHORIZATION_E, + body := {{digestResponse := f_merge_CommaParam_List(p_auth.body[0].digestResponse, p_commaParam_List)}} + } + + template(present) Authorization mw_Authorization_other := { + fieldName := AUTHORIZATION_E, + body := {{otherResponse := ?}} + } + + template(value) Contact m_Contact( + template(value) SipUrl p_sipUrl + ) := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := { + { + addressField := {addrSpecUnion := p_sipUrl}, + contactParams := omit + } + } + } //* end contactBody + } //* end m_Contact + + template(value) Contact m_Contact_profile( + template(value) SipUserProfile p_userprofile + ) := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := { + { + addressField := {addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, + contactParams := omit + } + } + } //* end + //* contactBody + } //* end m_Contact + + + template(value) Contact m_Contact_profile_expires( + template(value) SipUserProfile p_userprofile, + template(value) GenValue p_expires + ) := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := { + { + addressField := {addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, + contactParams := { + { + "expires", + p_expires + } + } + } + } + } //* end contactBody + } //* end m_Contact + + template(value) From m_From( + template(value) NameAddr p_nameAddr, + template(value) GenValue p_tag_str + ) := { + fieldName := FROM_E, + addressField := {nameAddr := p_nameAddr}, //* end addressField + fromParams := { + { + id := c_tagId, + paramValue := p_tag_str + } + } + } + + template(value) From m_From_Anonymous( + template(value) GenValue p_tag_str + ) := { + fieldName := FROM_E, + addressField := { + nameAddr := + m_NameAddr( + {token:="Anonymous"}, + //* optional charstring + m_SipUrl_Anonymous //* SipUrl + ) + }, //* end addressField + fromParams := { + { + id := c_tagId, + paramValue := p_tag_str + } + } + } + + template(value) From m_From_SipUrl( + template(value) SipUrl p_sipUrl + ) := { + fieldName := FROM_E, + addressField := { + nameAddr := + m_NameAddr( + omit, + //* optional charstring + p_sipUrl //* SipUrl + ) + }, //* end addressField + fromParams := omit + } + + template(value) Event m_Event_base := { + fieldName := EVENT_E, + eventType := "", + eventParams := omit + } + + template(value) Event m_Event_refer modifies m_Event_base := {eventType := "refer"} + + template(value) Event m_Event_conference modifies m_Event_base := {eventType := "conference"} + + template(value) Event m_Event_presence modifies m_Event_base := {eventType := "presence"} + + template(value) Event m_Event_reg modifies m_Event_base := {eventType := "reg"} + + template(value) Event m_Event_cdiv modifies m_Event_base := {eventType := "comm-div-info"} + + template(value) Event m_Event_mcid := m_Event_cdiv; + + template(value) Expires m_Expires_base := { + fieldName := EXPIRES_E, + deltaSec := "" + } + + template(value) Expires m_Expires_600000 modifies m_Expires_base := {deltaSec := "600000"} + + template(value) Expires m_Expires( + template(value) charstring p_deltaSec + ) modifies m_Expires_base := { + deltaSec := p_deltaSec + } + + template(present) Expires mw_Expires( + template(present) charstring p_deltaSec := ? + ) := { + fieldName := EXPIRES_E, + deltaSec := p_deltaSec + } + + template(value) HistoryInfo m_HistoryInfo( + template(value) HistoryInfo_List p_HistoryInfo_List + ) := { + fieldName := HISTORY_INFO_E, + historyInfoList := p_HistoryInfo_List + } + + template(present) HistoryInfo mw_HistoryInfo( + template(present) HistoryInfo_List p_HistoryInfo_List := ? + ) := { + fieldName := HISTORY_INFO_E, + historyInfoList := p_HistoryInfo_List + } + + template(value) HistoryInfoEntry m_HistoryInfoEntry( + template(value) SipUrl p_Url, + template(omit) IntegerList p_index := omit, + template(omit) SemicolonParam_List p_paramlist := omit + ) := { + nameAddr := m_NameAddr(omit, p_Url), + hiIndex := p_index, + hiExtention := p_paramlist + } + + template(present) HistoryInfoEntry mw_HistoryInfoEntry( + template(present) SipUrl p_Url := ?, + template IntegerList p_index, + template SemicolonParam_List p_paramlist + ) := { + nameAddr := mw_NameAddr(*, p_Url), + hiIndex := p_index, + hiExtention := p_paramlist + } + + template(value) PAssertedID m_PAssertedID( + template(value) Addr_Union p_pAssertedIDValue + ) := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := {p_pAssertedIDValue} + } + + template(value) PAssertedID m_PAssertedID_2x( + template(value) Addr_Union p_pAssertedIDValue, + template(value) Addr_Union p_pAssertedIDValue2 + ) modifies m_PAssertedID := { + pAssertedIDValueList := {p_pAssertedIDValue, p_pAssertedIDValue2} + } + + template(present) PAssertedID mw_PAssertedID( + template(present) PAssertedIDValue p_pAssertedIDValue := ? + ) := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := {p_pAssertedIDValue} + } + + template(present) PAssertedIDValue mw_PAssertedIDValue( + template(present) SipUrl p_SipUrl := ? + ) := { + nameAddr := { + displayName := *, + addrSpec := p_SipUrl + } + } + + template(value) PPreferredID m_PPreferredID( + template(value) Addr_Union p_pPreferredIDValue + ) := { + fieldName := P_PREFERRED_ID_E, + pPreferredIDValueList := {p_pPreferredIDValue} + } + + template(value) Privacy m_Privacy( + template(value) PrivacyValue p_privacy + ) := { + fieldName := PRIVACY_E, + privValueList := {p_privacy} + } + + template(present) Privacy mw_Privacy_Base( + template(present) charstring p_value := ? + ) := { + fieldName := PRIVACY_E, + privValueList := {*, p_value, *} + } + + template(present) Privacy mw_Privacy_id := mw_Privacy_Base("id"); + + template(present) Privacy mw_Privacy_user := mw_Privacy_Base("user"); + + template(value) RAck m_RAck( + integer p_responseNum, + integer p_seqNumber, + charstring p_method + ) := { + fieldName := RACK_E, + responseNum := p_responseNum, + seqNumber := p_seqNumber, + method := p_method + } + + template(value) Reason m_Reason( + template(value) integer p_cause + ) := { + fieldName := REASON_E, + reasonValues := {m_ReasonValue({tokenOrHost := int2str(valueof(p_cause))}, { tokenOrHost := "dummy"})} + } + + template(value) Reason m_Reason21 := { + fieldName := REASON_E, + reasonValues := {m_ReasonValue({tokenOrHost := int2str(21)}, { tokenOrHost := "call reject"})} + } + + template(present) Reason mw_Reason_Base := { + fieldName := REASON_E, + reasonValues := {} + } + + template(present) Reason mw_Reason( + template(value) GenValue p_cause + ) modifies mw_Reason_Base := { + reasonValues := {mw_ReasonValue(p_cause, ?)} + } + + template(present) Reason mw_ReasonSIP( + template(value) GenValue p_cause + ) modifies mw_Reason_Base := { + reasonValues := {mw_ReasonValueSIP(p_cause, ?)} + } + + template(value) RecordRoute m_recordRoute_currIpAddr( + template(value) SipUserProfile p_userprofile + ) := { + fieldName := RECORD_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := omit, + hostPort := { + host := p_userprofile.currIpaddr, + portField := p_userprofile.currPort + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + } + } + + template(value) RecordRoute m_recordRoute_currIpAddr_params( + template(value) SipUserProfile p_userprofile, + template(value) SemicolonParam_List p_urlParameters + ) := { + fieldName := RECORD_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := omit, + hostPort := { + host := p_userprofile.currIpaddr, + portField := p_userprofile.currPort + } + } + }, + urlParameters := p_urlParameters, + headers := omit + } + }, + rrParam := omit + } + } + } + + template(value) RouteBody m_routeBody_currIpAddr( + template(value) SipUserProfile p_userprofile + ) := { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := omit, + hostPort := { + host := p_userprofile.homeDomain, + portField := p_userprofile.currPort + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + + template(value) ReferredBy m_ReferredBy_SipUrl( + template(value) SipUrl p_sipUrl + ) := { + fieldName := REFERRED_BY_E, + nameAddr := + m_NameAddr( + // STF471 {displayName + omit, + // := omit, + p_sipUrl // addrSpec:=p_sipUrl} + ), + referredbyIdParams := omit + } + + template(value) ReferTo m_ReferTo_SipUrl( + template(value) SipUrl p_sipUrl, + template(value) GenValue p_method + ) := { + fieldName := REFER_TO_E, + nameAddr := + m_NameAddr( + // STF471 {displayName + omit, + // := omit, + p_sipUrl // addrSpec:=p_sipUrl} + ), + referToParams := { + { + id := "method", + paramValue := p_method + } + } + } + + template(value) ReferSub m_ReferSub( + template(value) boolean p_value + ) := { + fieldName := REFER_SUB_E, + referSubValue := p_value, + referSubParams := omit + } + + template(value) Replaces m_Replaces( + template(value) charstring p_callId, + template(value) GenValue p_toTag, + template(value) GenValue p_fromTag + ) := { + fieldName := REPLACES_E, + callid := p_callId, + replacesParams := { + { + id := "to-tag", + paramValue := p_toTag + }, + { + id := "from-tag", + paramValue := p_fromTag + } + } + } + + template(value) Require m_Require_empty := { + fieldName := REQUIRE_E, + optionsTags := {""} + } + + template(value) Require m_Require_replaces modifies m_Require_empty := {optionsTags := {c_replaces}} + + template(value) Require m_Require_100rel modifies m_Require_empty := {optionsTags := {c_tag100rel}} + + template(value) Require m_Require_prec modifies m_Require_empty := {optionsTags := {c_tagPrecond}} + + template(value) SubscriptionState m_SubscriptionState_active := { + fieldName := SUBSCRIPTION_STATE_E, + subState := "active", + substateParams := { + { + id := "expires", + paramValue := {tokenOrHost := "60000"} + } + } + } + + template(value) Supported m_Supported_empty := { + fieldName := SUPPORTED_E, + optionsTags := {""} + } + + template(value) Supported m_Supported_fromChange modifies m_Supported_empty := {optionsTags := {c_tagFromChange}} + + template(value) Supported m_Supported_prec modifies m_Supported_empty := {optionsTags := {c_tagPrecond}} + + template(value) Supported m_Supported_100rel modifies m_Supported_empty := {optionsTags := {c_tag100rel}} + + template(value) Supported m_Supported_100rel_prec modifies m_Supported_empty := {optionsTags := {c_tag100rel, c_tagPrecond}} + + template(value) GenericParam m_Text( + template(value) GenValue p_text + ) := { + id := "text", + paramValue := p_text + } + + template(present) GenericParam mw_Text( + template GenValue p_text + ) := { + id := "text", + paramValue := p_text + } + + template(value) GenericParam m_UserPhone := { + id := "user", + paramValue := { quotedString := "phone" } + } + + template(value) GenericParam m_UserToUserEncodingHex := { + id := "encoding", + paramValue := { quotedString := "hex" } + } + + template(value) UserToUser m_UserToUserData( + template(value) UserToUser.uuiData p_U2UData + ) := { + fieldName := USER_TO_USER_E, + uuiData := p_U2UData, + uuiParam := m_UserToUserEncodingHex + } + + template(value) To m_To( + template(value) SipUrl p_sipUrl + ) := { + fieldName := TO_E, + addressField := { + nameAddr := + m_NameAddr( + {token:="ETSI Tester"}, + //* optional charstring + p_sipUrl //* SipUrl + ) + }, //* end addressField + toParams := omit + } + + template(value) To m_To_SipUrl( + template(value) SipUrl p_sipUrl + ) modifies m_To := { + addressField := { + nameAddr := { + displayName := + omit //* optional charstring + } + } //* end addressField + } + + template(present) To mw_To_NameAddr_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host := ? + ) := { + fieldName := TO_E, + addressField := (mw_AddrUnion_Nameaddr(p_dn, p_user, p_host), mw_AddrUnion_SipUrl(p_user, p_host)), + toParams := * + } + + template(present) To mw_To( + template(present) SipUrl p_sipUrl := ? + ) := { + fieldName := TO_E, + addressField := {nameAddr := mw_NameAddr(*, p_sipUrl)}, + toParams := * + } + + template(present) From mw_From( + template(present) SipUrl p_sipUrl := ? + ) := { + fieldName := FROM_E, + addressField := {nameAddr := mw_NameAddr(*, p_sipUrl)}, + fromParams := * + } + + template(present) From mw_From_NameAddr_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := FROM_E, + addressField := (mw_AddrUnion_Nameaddr(p_dn, p_user, p_host), mw_AddrUnion_SipUrl(p_user, p_host)), + fromParams := * + } + template(value) ViaBody m_ViaBody_currIpaddr( + template(value) charstring p_branch_val, + template(value) SipUserProfile p_userprofile + ) := { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy := { + host := p_userprofile.currIpaddr, + portField := p_userprofile.currPort + }, + viaParams := { + { + id := c_branchId, + paramValue := { + tokenOrHost := p_branch_val + } + } + } + } + + template(present) ViaBody mw_ViaBody_interface( + template(present) HostPort p_hostport := ? + ) := { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy := { + host := p_hostport.host, + portField := p_hostport.portField + }, + viaParams := * + } + + template(present) Via mw_Via( + template(present) ViaBody p_viabody := ? + ) := { + fieldName := VIA_E, + viaBody := {*, p_viabody, *} // superset(p_viabody) + } + + template(present) CallId mw_CallId_any := { + fieldName := CALL_ID_E, + callid := ? + } + + template(present) Require mw_Require_Base := { + fieldName := REQUIRE_E, + optionsTags := {} + } + + template(present) Require mw_Require_not_100rel modifies mw_Require_Base := {optionsTags := superset(complement(c_tag100rel))} + + template(present) Require mw_require_100rel modifies mw_Require_Base := {optionsTags := superset(c_tag100rel)} + + template(present) RecordRoute mw_recordroute( + template(present) RouteBody p_routeBody := ? + ) := { + fieldName := RECORD_ROUTE_E, + routeBody := {*, p_routeBody, *} // superset(p_routeBody) + } + + template(present) Route mw_route( + template(present) RouteBody_List p_routeBody := ? + ) := { + fieldName := ROUTE_E, + routeBody := p_routeBody + } + + template(present) Supported mw_Supported_Base := { + fieldName := SUPPORTED_E, + optionsTags := {} + } + + template(present) Supported mw_Supported_100rel_prec modifies mw_Supported_Base := {optionsTags := superset(c_tag100rel, c_tagPrecond)} + + template(present) Supported mw_Supported_100rel modifies mw_Supported_Base := {optionsTags := superset(c_tag100rel)} + + template(present) Supported mw_Supported_fromChange modifies mw_Supported_Base := {optionsTags := superset(c_tagFromChange)} + + template(present) UserToUser mw_UserToUserData( + template(present) UserToUser.uuiData p_U2UData := ? + ) := { + fieldName := USER_TO_USER_E, + uuiData := p_U2UData, + uuiParam := ? + } + + template(present) Contact mw_Contact_conference := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := { + { + addressField := { + nameAddr := { + displayName := *, + addrSpec := { + scheme := ?, + components := ?, + urlParameters := { + { + "isfocus", + * + }, + * + }, + headers := * + } + } + }, + contactParams := * + } + } + } + } + + template(value) AlertInfo m_AlertInfo_Base := { + fieldName := ALERT_INFO_E, + alertInfoBody := {} + } + + template(value) AlertInfo m_AlertInfo( + template(value) charstring p_urn + ) modifies m_AlertInfo_Base := { + alertInfoBody := { + { + p_urn, + omit + } + } + } + + template(present) AlertInfo mw_AlertInfo( + template(present) charstring p_urn := ? + ) modifies m_AlertInfo_Base := { + alertInfoBody := + superset( + { + p_urn, + omit + } + ) + } + + + } //* end of group HeaderFieldTemplates + + + group MessageTemplates { + + group dummy_templates { + + group dummy_parameter_send { + + template(value) RequestLine m_requestLine_dummy( + template(value) Method p_method + ) := { + method := p_method, + requestUri := c_unavailableUri, + sipVersion := c_sipNameVersion + } + + template(value) MessageHeader m_msgHeader_dummy := { + accept := omit, + acceptContact := omit, + acceptEncoding := omit, + acceptLanguage := omit, + alertInfo := omit, + allow := omit, + allowEvents := omit, //* RFC3265 + authenticationInfo := omit, + authorization := omit, + callId := c_empty_CallId, + callInfo := omit, + contact := omit, + contentDisposition := omit, + contentEncoding := omit, + contentLanguage := omit, + contentLength := { + fieldName := CONTENT_LENGTH_E, + len := 0 + }, + contentType := omit, //* if message body present m, + //* else not present + cSeq := c_empty_cSeq, + date := omit, + errorInfo := omit, + event := omit, //* RFC3265 + expires := omit, + featureCaps := omit, + fromField := c_empty_From, + geolocation := omit, + geolocationRouting := omit, + historyInfo := omit, //* RFC4244 + infoPackage := omit, + inReplyTo := omit, + maxForwards := c_maxForwards70, + mimeVersion := omit, + minExpires := omit, + minSE := omit, //* RFC4028 + organization := omit, + pAccessNetworkInfo := omit, //* RFC3455 + pAssertedID := omit, + pAssertedService := omit, + pAssociatedURI := omit, + path := omit, //* RFC3327 + pCalledPartyID := omit, //* RFC3455 + pChargingFunctionAddresses := omit, //* RFC3455 + pChargingVector := omit, //* RFC3455 + pEarlyMedia := omit, //* RFC5009 + pMediaAuthorization := omit, //* RFC3313 + pPreferredID := omit, + pPreferredService := omit, + priority := omit, + privacy := omit, + proxyAuthenticate := omit, + proxyAuthorization := omit, + proxyRequire := omit, + pVisitedNetworkID := omit, //* RFC3455 + rAck := omit, + rSeq := omit, + reason := omit, + recordRoute := omit, + recvInfo := omit, + requestDisposition := omit, + referredBy := omit, //* RFC3892 - REFER method + referTo := omit, //* RFC3515 - REFER method + referSub := omit, //* RFC4488 - REFER method + replaces := omit, //* RFC3891 + replyTo := omit, + require := omit, + retryAfter := omit, + route := omit, + securityClient := omit, //* RFC3329 + securityServer := omit, //* RFC3329 + securityVerify := omit, //* RFC3329 + server := omit, + serviceRoute := omit, //* RFC3608 + sessionExpires := omit, //* RFC4028 + sessionId := omit, + sipETag := omit, + sipIfMatch := omit, + subject := omit, + subscriptionState := omit, //* RFC3265 + supported := omit, + timestamp_ := omit, + toField := c_empty_To, + unsupported := omit, + userToUser := omit, + userAgent := omit, + via := c_empty_Via, + warning := omit, + wwwAuthenticate := omit, + resourcePriority := omit, + answerMode := omit, + privAnswerMode := omit, + targetDialog := omit, + pAnswerState := omit, + undefinedHeader_List := omit + } + + + } //* group dummy_parameter_send + + group dummy_parameter_receive { + + template(present) RequestLine mw_requestLine_dummy( + Method p_method + ) := { + method := p_method, + requestUri := ?, + sipVersion := c_sipNameVersion + } + + template(present) MessageHeader mw_msgHeader_dummy := { + accept := *, + acceptContact := *, + acceptEncoding := *, + acceptLanguage := *, + alertInfo := *, + allow := *, + allowEvents := *, //* RFC3265 + authenticationInfo := *, + authorization := *, + callId := ?, + callInfo := *, + contact := *, + contentDisposition := *, + contentEncoding := *, + contentLanguage := *, + contentLength := ?, + contentType := *, + cSeq := ?, + date := *, + errorInfo := *, + event := *, //* RFC3265 + expires := *, + featureCaps := *, + fromField := ?, + geolocation := *, + geolocationRouting := *, + historyInfo := *, //* RFC4244 + infoPackage := *, + inReplyTo := *, + maxForwards := *, + mimeVersion := *, + minExpires := *, + minSE := *, //* RFC4028 + organization := *, + pAccessNetworkInfo := *, //* RFC3455 + pAssertedID := *, + pAssertedService := *, + pAssociatedURI := *, + path := *, //* RFC3327 + pCalledPartyID := *, //* RFC3455 + pChargingFunctionAddresses := *, //* RFC3455 + pChargingVector := *, //* RFC3455 + pEarlyMedia := *, //* RFC5009 + pMediaAuthorization := *, //* RFC3313 + pPreferredID := *, + pPreferredService := *, + priority := *, + privacy := *, + proxyAuthenticate := *, + proxyAuthorization := *, + proxyRequire := *, + pVisitedNetworkID := *, //* RFC3455 + rAck := *, + rSeq := *, + reason := *, + recordRoute := *, + recvInfo := *, + requestDisposition := *, + referredBy := *, //* RFC3892 - REFER method + referTo := *, //* RFC3515 - REFER method + referSub := *, //* RFC4488 - REFER method + replaces := *, //* RFC 3891 + replyTo := *, + require := *, + retryAfter := *, + route := *, + securityClient := *, //* RFC3329 + securityServer := *, //* RFC3329 + securityVerify := *, //* RFC3329 + server := *, + serviceRoute := *, //* RFC3608 + sessionExpires := *, //* RFC4028 + sessionId := *, + sipETag := *, + sipIfMatch := *, + subject := *, + subscriptionState := *, //* RFC3265 + supported := *, + timestamp_ := *, + toField := ?, + unsupported := *, + userToUser := *, + userAgent := *, + via := ?, + warning := *, + wwwAuthenticate := *, + resourcePriority := *, + answerMode := *, + privAnswerMode := *, + targetDialog := *, + pAnswerState := *, + undefinedHeader_List := * + } + + + } //* end group dummy_parameter_receive + + group dummy_request_templates_send { + + template(value) ACK_Request m_ACK_Dummy := { + requestLine := m_requestLine_dummy(ACK_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) BYE_Request m_BYE_Dummy := { + requestLine := m_requestLine_dummy(BYE_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) CANCEL_Request m_CANCEL_Dummy := { + requestLine := m_requestLine_dummy(CANCEL_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) INFO_Request m_INFO_Dummy := { + requestLine := m_requestLine_dummy(INFO_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) INVITE_Request m_INVITE_Dummy := { + requestLine := m_requestLine_dummy(INVITE_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) MESSAGE_Request m_MESSAGE_Dummy := { + requestLine := m_requestLine_dummy(MESSAGE_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) NOTIFY_Request m_NOTIFY_Dummy := { + requestLine := m_requestLine_dummy(NOTIFY_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) OPTIONS_Request m_OPTIONS_Dummy := { + requestLine := m_requestLine_dummy(OPTIONS_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) PRACK_Request m_PRACK_Dummy := { + requestLine := m_requestLine_dummy(PRACK_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) PUBLISH_Request m_PUBLISH_Dummy := { + requestLine := m_requestLine_dummy(PUBLISH_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) REGISTER_Request m_REGISTER_Dummy := { + requestLine := m_requestLine_dummy(REGISTER_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) REFER_Request m_REFER_Dummy := { + requestLine := m_requestLine_dummy(REFER_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Dummy := { + requestLine := m_requestLine_dummy(SUBSCRIBE_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) UPDATE_Request m_UPDATE_Dummy := { + requestLine := m_requestLine_dummy(UPDATE_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + + } //* end group dummy_request_templates_send + group dummy_request_templates_receive { + + template(present) ACK_Request mw_ACK_Dummy := { + requestLine := mw_requestLine_dummy(ACK_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) BYE_Request mw_BYE_Dummy := { + requestLine := mw_requestLine_dummy(BYE_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) CANCEL_Request mw_CANCEL_Dummy := { + requestLine := mw_requestLine_dummy(CANCEL_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) INFO_Request mw_INFO_Dummy := { + requestLine := mw_requestLine_dummy(INFO_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template INVITE_Request mw_INVITE_Dummy := { + requestLine := mw_requestLine_dummy(INVITE_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) MESSAGE_Request mw_MESSAGE_Dummy := { + requestLine := mw_requestLine_dummy(MESSAGE_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) OPTIONS_Request mw_OPTIONS_Dummy := { + requestLine := mw_requestLine_dummy(OPTIONS_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) NOTIFY_Request mw_NOTIFY_Dummy := { + requestLine := mw_requestLine_dummy(NOTIFY_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) PRACK_Request mw_PRACK_Dummy := { + requestLine := mw_requestLine_dummy(PRACK_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) PUBLISH_Request mw_PUBLISH_Dummy := { + requestLine := mw_requestLine_dummy(PUBLISH_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) REFER_Request mw_REFER_Dummy := { + requestLine := mw_requestLine_dummy(REFER_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) REGISTER_Request mw_REGISTER_Dummy := { + requestLine := mw_requestLine_dummy(REGISTER_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) SUBSCRIBE_Request mw_SUBSCRIBE_Dummy := { + requestLine := mw_requestLine_dummy(SUBSCRIBE_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) UPDATE_Request mw_UPDATE_Dummy := { + requestLine := mw_requestLine_dummy(UPDATE_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + + } //* end group dummy_request_templates_receive + + group dummy_response_templates_send { + + template(value) Response m_Response_Dummy := { + statusLine := c_statusLine100, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + + } //* group dummy_response_templates_send + + group dummy_response_templates_receive { + + template(present) Response mw_Response_Dummy := { + statusLine := ?, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + + } //* group dummy_response_templates_receive + } + + group base_templates { + + template(value) CSeq m_cSeq( + template(value) integer p_seqNumber, + template(value) charstring p_method + ) := { + fieldName := CSEQ_E, + seqNumber := p_seqNumber, + method := p_method + } + + template(value) ContentLength m_contentLength( + template(value) integer p_len + ) := { + fieldName := CONTENT_LENGTH_E, + len := p_len + } + + template(value) ContentType m_contentType( + template(value) charstring p_mTypeSubtype, + template(omit) SemicolonParam_List p_mParams := omit + ) := { + fieldName := CONTENT_TYPE_E, + mTypeSubtype := p_mTypeSubtype, + mParams := p_mParams + } + + template(present) ContentType mw_contentType( + in template(present) charstring p_mTypeSubtype := ?, + in template SemicolonParam_List p_mParams := * + ) := { + fieldName := CONTENT_TYPE_E, + mTypeSubtype := p_mTypeSubtype, + mParams := p_mParams + } + + group request_send { + + template(value) ACK_Request m_ACK_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_ACK_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := m_cSeq(p_cSeq.seqNumber, "ACK"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "ACK"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) ACK_Request m_ACK_Request_withRecordRoute( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Route p_route + ) modifies m_ACK_Request_Base := { + msgHeader := { + route := p_route, + contentLength := m_contentLength(0) + } + } + + template(value) BYE_Request m_BYE_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_BYE_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) CANCEL_Request m_CANCEL_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_CANCEL_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) INFO_Request m_INFO_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_INFO_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) INVITE_Request m_INVITE_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Contact p_contact + ) modifies m_INVITE_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_MESSAGE_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) NOTIFY_Request m_NOTIFY_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_NOTIFY_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := m_cSeq(p_cSeq.seqNumber, "NOTIFY"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "NOTIFY"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) OPTIONS_Request m_OPTIONS_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_OPTIONS_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := m_cSeq(p_cSeq.seqNumber, "OPTIONS"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "OPTIONS"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) PRACK_Request m_PRACK_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) RAck p_RAck + ) modifies m_PRACK_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := m_cSeq(p_cSeq.seqNumber, "PRACK"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "PRACK"}, + fromField := p_from, + rAck := p_RAck, + toField := p_to, + via := p_via + }, + messageBody := omit + } + + template(value) PUBLISH_Request m_PUBLISH_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Event p_event := omit, + template(omit) RAck p_RAck := omit, + template(value) MessageBody p_mb + ) modifies m_PUBLISH_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_plainText), // STF471 + // {fieldName + // := + // CONTENT_TYPE_E, + // mTypeSubType + // := + // c_plainText/*c_sdp*/}, + cSeq := m_cSeq(p_cSeq.seqNumber, "PUBLISH"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "PUBLISH"}, + event := p_event, + rAck := p_RAck, + fromField := p_from, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + template(value) REFER_Request m_REFER_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(omit) Contact p_contact := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) ReferTo p_referTo := omit, + template(omit) ReferredBy p_referredBy := omit + ) modifies m_REFER_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contact := p_contact, + cSeq := m_cSeq(p_cSeq.seqNumber, "REFER"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "REFER"}, + fromField := p_from, + referTo := p_referTo, + referredBy := p_referredBy, + toField := p_to, + via := p_via + } + } + + template(value) REFER_Request m_REFER_Request_replaces( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(omit) Contact p_contact := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) ReferTo p_referTo, + template(value) ReferredBy p_referredBy, + template(value) Replaces p_replaces, + template(omit) Require p_require := omit + ) modifies m_REFER_Request_Base := { + msgHeader := { + replaces := p_replaces, + require := p_require + } + } + + template(value) REGISTER_Request m_REGISTER_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit, + template(omit) Authorization p_authorization := omit + ) modifies m_REGISTER_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + supported := { + fieldName := SUPPORTED_E, + optionsTags := {"path"} + }, + via := p_via + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_SUBSCRIBE_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "SUBSCRIBE"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) UPDATE_Request m_UPDATE_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_UPDATE_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_sdpApplication), // STF471 + // {fieldName + // := + // CONTENT_TYPE_E, + // mTypeSubtype + // := + // c_sdp}, + cSeq := m_cSeq(p_cSeq.seqNumber, "UPDATE"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "UPDATE"}, + fromField := p_from, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + + } //* end of group message_send + + group request_receive { + + template(present) ACK_Request mw_ACK_Request_Base( + template CallId p_callId := ? + ) modifies mw_ACK_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) BYE_Request mw_BYE_Request_Base( + template CallId p_callId := ? + ) modifies mw_BYE_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) CANCEL_Request mw_CANCEL_Request_Base( + template CallId p_callId := ? + ) modifies mw_CANCEL_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) INFO_Request mw_INFO_Request_Base( + template CallId p_callId := ? + ) modifies mw_INFO_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) INVITE_Request mw_INVITE_Request_Base modifies mw_INVITE_Dummy := {requestLine := {method := INVITE_E}} + + template(present) MESSAGE_Request mw_MESSAGE_Request_Base modifies mw_MESSAGE_Dummy := {msgHeader := {contact := *}} + + template(present) NOTIFY_Request mw_NOTIFY_Request_Base( + template CallId p_callId := ? + ) modifies mw_NOTIFY_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) OPTIONS_Request mw_OPTIONS_Request_Base( + template CallId p_callId := ? + ) modifies mw_OPTIONS_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) PRACK_Request mw_PRACK_Request_Base( + template CallId p_callId := ? + ) modifies mw_PRACK_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) PUBLISH_Request mw_PUBLISH_Request_Base( + template CallId p_callId := ? + ) modifies mw_PUBLISH_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) REFER_Request mw_REFER_Request_Base( + template CallId p_callId := ? + ) modifies mw_REFER_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) REFER_Request mw_REFER_Request( + template CallId p_callId := ?, + template(value) SipUrl p_requestUri, + template(value) SipUrl p_referredBy + ) modifies mw_REFER_Request_Base := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + referredBy := { + fieldName := REFERRED_BY_E, + nameAddr := mw_NameAddr(*, p_referredBy), // STF471 + // {displayName + // := + // *, + // addrSpec + // := + // p_referredBy}, + referredbyIdParams := * + } + } + } + + template(present) INVITE_Request mw_INVITE_Request( + template Require p_require, + template(value) SipUrl p_referredBy + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + require := p_require, + referredBy := { + fieldName := REFERRED_BY_E, + nameAddr := mw_NameAddr(*, p_referredBy), // STF471 + // {displayName + // := + // *, + // addrSpec + // := + // p_referredBy}, + referredbyIdParams := * + } + } + } + + template(present) REGISTER_Request mw_REGISTER_Request_Base modifies mw_REGISTER_Dummy := {requestLine := {method := REGISTER_E}} + + template(present) SUBSCRIBE_Request mw_SUBSCRIBE_Request_Base modifies mw_SUBSCRIBE_Dummy := {requestLine := {method := SUBSCRIBE_E}} + + template(present) UPDATE_Request mw_UPDATE_Request_Base(template CallId p_callId) modifies mw_UPDATE_Dummy := {msgHeader := {callId := p_callId}} + + + } //* end group request_receive + + group response_send { + + template(value) Response m_Response_Base( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + + } //* end group response_send + + group response_receive { + + template(present) Response mw_Response_Base( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId := *, + template CSeq p_cSeq := * + ) modifies mw_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + contentLength := *, + cSeq := p_cSeq, + fromField := ?, + maxForwards := *, + toField := ?, + via := ? + } + } + + template(present) Response mw_Response_StatusCode_Base( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_Dummy := { + statusLine := mw_statusLine(p_statusCode, ?), + msgHeader := { + callId := p_callId, + contentLength := *, + cSeq := p_cSeq, + fromField := ?, + maxForwards := *, + toField := ?, + via := ? + } + } + + template(present) Response mw_Response_1xx_Base( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_Dummy := { + statusLine := mw_statusLine1xx, + msgHeader := { + callId := p_callId, + contentLength := *, + cSeq := p_cSeq, + fromField := ?, + maxForwards := *, + toField := ?, + via := ? + } + } + + template (present) Response mw_Response_2xx_Base( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ? + ) modifies mw_Response_1xx_Base := { + statusLine := mw_statusLine2xx + } + + template(present) Response mw_Response_3xx_Base( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_1xx_Base := { + statusLine := mw_statusLine3xx + } + + template(present) Response mw_Response_4xx_Base( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_1xx_Base := { + statusLine := mw_statusLine4xx + } + + template(present) Response mw_Response_5xx_Base( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_1xx_Base := { + statusLine := mw_statusLine5xx + } + + template(present) Response mw_Response_6xx_Base( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_1xx_Base := { + statusLine := mw_statusLine6xx + } + + template(present) Response mw_Response_Algorithm( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) CredentialsList p_credentialsList + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := { + authorization := { + fieldName := AUTHORIZATION_E, + body := p_credentialsList + } + } + } + + + } //* end group message_receive + + + } //* end group full_templates + + group modified_templates { + + group request_send { + + template(value) ACK_Request m_ACK_Request_route( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_ACK_Request_Base := { + msgHeader := {route := p_route} + } + + template(value) ACK_Request m_ACK_Request_sdp( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_ACK_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) BYE_Request m_BYE_Request_cause( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) integer p_cause + ) modifies m_BYE_Request_Base := { + msgHeader := {reason := m_Reason(p_cause)} + } + + template(value) INVITE_Request m_INVITE_Request_sdp( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Contact p_contact, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) INVITE_Request m_INVITE_Request_ResourceList( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Contact p_contact, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(p_mb)}, + contentType := m_contentType(c_xmlresourcelistApplication), // STF471 + // {fieldName + // := + // CONTENT_TYPE_E, + // mTypeSubtype + // := + // "application/resource-lists+xml"}, + contentDisposition := { + fieldName := CONTENT_DISPOSITION_E, + dispositionType := "recipient-list", + dispositionParams := omit + }, + require := { + fieldName := REQUIRE_E, + optionsTags := {"recipient-list-invite"} + } + }, + messageBody := p_mb + } + + template(value) REFER_Request m_REFER_Request_route( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(omit) Contact p_contact := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) ReferTo p_referTo, + template(value) ReferredBy p_referredBy, + template(value) Route p_route + ) modifies m_REFER_Request_Base := { + msgHeader := {route := p_route} + } + + template(value) REGISTER_Request m_REGISTER_Request_expires( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(value) charstring p_expires + ) modifies m_REGISTER_Request_Base := { + msgHeader := { + authorization := p_authorization, + expires := m_Expires(p_expires) + } + } + + template(value) NOTIFY_Request m_NOTIFY_Request_contact( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit + ) modifies m_NOTIFY_Request_Base := { + msgHeader := { + contact := p_contact, + event := m_Event_reg, + subscriptionState := m_SubscriptionState_active + } + } + + template(value) NOTIFY_Request m_NOTIFY_Request_sipfrag( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) charstring p_state, + template(value) charstring p_sipfrag + ) modifies m_NOTIFY_Request_Base := { + requestLine := { + method := NOTIFY_E, + requestUri := { + //scheme := ?, FSCOM Not allowed here + components := { + sip := { + userInfo := omit,//*, FSCOM Not allowed here + hostPort := p_requestUri.components.sip.hostPort + } + } + } + }, + msgHeader := { + contentLength := m_contentLength(lengthof(p_sipfrag)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // lengthof(p_sipfrag)}, + contentType := m_contentType(c_sipfragMessage), // STF471 + // {fieldName + // := + // CONTENT_TYPE_E, + // mTypeSubtype + // := + // "message/sipfrag"}, + subscriptionState := { + fieldName := SUBSCRIPTION_STATE_E, + subState := p_state, + substateParams := omit + }, + event := m_Event_refer + }, + messageBody := {sipfrag := p_sipfrag} + } + + template(value) UPDATE_Request m_UPDATE_Request_route( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit, + template(value) MessageBody p_mb, + template(value) Route p_route + ) modifies m_UPDATE_Request_Base := { + msgHeader := {route := p_route} + } + + + } //* end group request_send + + + group request_receive { + + template(present) BYE_Request mw_BYE_Request_Reason( + template CallId p_callId, + template(value) GenValue p_cause + ) modifies mw_BYE_Request_Base := { + msgHeader := {reason := mw_Reason(p_cause)} + } + + template(present) BYE_Request mw_BYE_Request_ReasonSIP( + template CallId p_callId, + template(value) GenValue p_cause + ) modifies mw_BYE_Request_Base := { + msgHeader := {reason := mw_ReasonSIP(p_cause)} + } + + template(present) BYE_Request mw_BYE_Request_headerfieldlist( + template CallId p_callId, + template(present) SipUrl p_requestUri, + template(present) To p_to := ?, + template(present) From p_from := ?, + template CSeq p_cSeq, + template Route p_route, + template RecordRoute p_recordRoute, + template Reason p_reason + ) modifies mw_BYE_Request_Base := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + toField := p_to, + fromField := p_from, + cSeq := p_cSeq, + route := p_route, + recordRoute := p_recordRoute, + reason := p_reason + } + } + + template(present) BYE_Request mw_BYE_Request_UserToUser( + template CallId p_callId + ) modifies mw_BYE_Request_Base := { + msgHeader := {userToUser := ?} + } + + + template(present) INVITE_Request mw_INVITE_Request_RequestURI( + template(present) SipUrl p_sipUrl := ? + ) modifies mw_INVITE_Dummy := { + requestLine := { + requestUri := p_sipUrl, + sipVersion := c_sipNameVersion + } + } + + template(present) INFO_Request mw_INFO_Request_MB( + template CallId p_callId, + template MessageBody p_mb + ) modifies mw_INFO_Request_Base := { + messageBody := p_mb + } + + template(present) INVITE_Request mw_INVITE_Request_expires modifies mw_INVITE_Request_Base := {msgHeader := {expires := ?}} + + template(present) INVITE_Request mw_INVITE_Request_callid( + template CallId p_callId + ) modifies mw_INVITE_Request_Base := { + msgHeader := {callId := p_callId} + } + + template(present) INVITE_Request mw_INVITE_Request_MB( + template CallId p_callId, + template MessageBody p_mb + ) modifies mw_INVITE_Request_callid := { + messageBody := p_mb + } + + template(present) INVITE_Request mw_INVITE_Request_noPaccessNetworkInfo( + template CallId p_callId + ) modifies mw_INVITE_Request_callid := { + msgHeader := {pAccessNetworkInfo := omit} + } + + template(present) INVITE_Request mw_INVITE_Request_PaccessNetworkInfo( + template CallId p_callId + ) modifies mw_INVITE_Request_callid := { + msgHeader := {pAccessNetworkInfo := ?} + } + + template(present) INVITE_Request mw_INVITE_MSRP_Session( + template(present) SDP_media_field p_media_MSRP := ? + ) modifies mw_INVITE_Request_Base := { + messageBody := { + sdpMessageBody := { + protocol_version := ?, + origin := ?, + session_name := ?, + information := *, + uri := *, + emails := *, + phone_numbers := *, + connection := *, + bandwidth := *, + times := ?, + timezone_adjustments := *, + key := *, + attributes := *, + media_list := { + { + media_field := p_media_MSRP, + information := *, + connections := *, + bandwidth := *, + key := *, + attributes := { + { + msrp := { + attr_value := + pattern + "path:msrp://*" + } + } + } + } + } + } + } + } + + template(present) REGISTER_Request mw_REGISTER_Request_ISC( + template PAccessNetworkInfo p_access, + template PVisitedNetworkID p_visited + ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + pAccessNetworkInfo := p_access, + pVisitedNetworkID := p_visited + } + } + + template(present) UPDATE_Request mw_UPDATE_Request_SDP( + template CallId p_callId, + template MessageBody p_mb + ) modifies mw_UPDATE_Request_Base := { + messageBody := p_mb + } + + template(present) NOTIFY_Request mw_NOTIFY_Request_MB( + template CallId p_callId, + template MessageBody p_mb + ) modifies mw_NOTIFY_Request_Base := { + messageBody := p_mb + } + + + } //* end group request_receive + + group response_send { + + template(value) Response m_Response_AlertInfo( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Contact p_contact, + template(value) AlertInfo p_alertInfo + ) modifies m_Response_Contact := { + msgHeader := {alertInfo := p_alertInfo} + } + + template(value) Response m_Response_Contact( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit + ) modifies m_Response_Base := { + msgHeader := {contact := p_contact} + } + + template(value) Response m_Response_ext( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit + ) modifies m_Response_Base := { + msgHeader := { + route := p_route, // f_route(), + recordRoute := + p_recordroute // f_recordroute() + } + } + + template(value) Response m_Response_mbody( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_ext := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) Response m_Response_mbody_contact ( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit, + template(value) MessageBody p_mb, + template(value) Contact p_contact + ) modifies m_Response_mbody := { + msgHeader := { + contact := p_contact + } + } + + + template(value) Response m_Response_PAsserted_Privacy( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Route p_route, + template(value) RecordRoute p_recordroute, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy + ) modifies m_Response_ext := { + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy + } + } + + template(present) Response mw_Response_PAsserted_Privacy_Supported( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template PAssertedID p_pAssertedID, + template Privacy p_privacy, + template Supported p_supported + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy, + supported := p_supported + } + } + + template(value) Response m_Response_PAsserted_Privacy_mbody( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Route p_route, + template(value) RecordRoute p_recordroute, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy, + template(value) MessageBody p_mb + ) modifies m_Response_ext := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_sdpApplication), // STF471 + // {fieldName + // := + // CONTENT_TYPE_E, + // mTypeSubtype + // := + // c_sdpApplication + // }, + pAssertedID := p_pAssertedID, + privacy := p_privacy + }, + messageBody := p_mb + } + + + } //* end group response_send + + + group response_receive { + + template(present) Response mw_Response_Expires( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) DeltaSec p_deltaSec := ? + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {expires := mw_Expires(p_deltaSec)} + } + + template(present) Response mw_Response_PAsserted_Privacy( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template PAssertedID p_pAssertedID, + template Privacy p_privacy + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy + } + } + + template(present) Response mw_Response_Reason( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(value) GenValue p_cause + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {reason := mw_Reason(p_cause)} + } + + template(present) Response mw_Response_RecordRoute( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template RecordRoute p_recordRoute + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {recordRoute := p_recordRoute} + } + + template(present) Response mw_Response_Via( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) Via p_via := ? + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {via := p_via} + } + + template(present) Response mw_Response_Contact( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template Contact p_contact + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {contact := p_contact} + } + + template(present) Response mw_Response_AlertInfo( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template AlertInfo p_alertInfo + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {alertInfo := p_alertInfo} + } + + template(present) Response mw_Response_HistoryInfo( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template HistoryInfo p_historyInfo + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {historyInfo := p_historyInfo} + } + + template(present) Response mw_Response_messageBody( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template Require p_require, + template MessageBody p_mb + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {require := p_require}, + messageBody := p_mb + } + + template(present) Response mw_Response_Require( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template Require p_require + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {require := p_require} + } + + template(present) Response mw_Response_Require_ifpresent( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) Require p_require + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {require := p_require ifpresent} + } + + template(present) Response mw_Response_Supported( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template Supported p_supported + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {supported := p_supported} + } + + template(present) Response mw_Response_UserToUser( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {userToUser := ?} + } + + + } //* end group response_receive + + + } //* end group modified_templates + + + } //* end group MessageTemplates + + group SDP_Templates { + + group SDP_Messages { + + group base_templates { + + template(value) SDP_Message m_SDP_base := { + protocol_version := 0, //* v=0 + origin := { + user_name := PX_SIP_SDP_USER_NAME, + session_id := PX_SIP_SDP_SESSION_ID, + session_version := "0", + net_type := c_in, + addr_type := c_ip4, + addr := "" + }, + //* o=voicesession 12345 12345 IN IP4 172.27.1.219 + session_name := "Voice Session", //* s=Voice Session + information := omit, + uri := omit, + emails := omit, + phone_numbers := omit, + connection := omit, + bandwidth := omit, + times := { + { + time_field := {"0", "0"}, + time_repeat := omit + } + }, //* t=0 0 + timezone_adjustments := omit, + key := omit, + attributes := omit, + media_list := omit + } + + template(value) SDP_Message m_SDP( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile + ) modifies m_SDP_base := { + origin := { + addr := p_userprofile.contactIpaddr + }, + //* o=voicesession 12345 12345 IN IP4 172.27.1.219 + connection := { + net_type := c_in, + addr_type := c_ip4, + conn_addr := { + addr := p_userprofile.bearerIpaddr, + ttl := omit, + num_of_addr := omit + } + }, //* c=IN + //* IP4 + //* 172.27.1.219 + media_list := {p_media} + } + + template(value) SDP_Message m_SDP_mediaList( + template(value) SDP_media_desc_list p_media_list, + template(value) SipUserProfile p_userprofile + ) modifies m_SDP_base := { + origin := { + addr := p_userprofile.contactIpaddr + }, + //* o=voicesession 12345 12345 IN IP4 172.27.1.219 + connection := { + net_type := c_in, + addr_type := c_ip4, + conn_addr := { + addr := p_userprofile.bearerIpaddr, + ttl := omit, + num_of_addr := omit + } + }, //* c=IN + //* IP4 + //* 172.27.1.219 + media_list := p_media_list + } + + template(value) SDP_Message m_SDP_media_attr_preconditions( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile, + template(value) SDP_attribute_list p_attribute_list + ) modifies m_SDP := { + media_list := { + { + media_field := { + media := c_audio, + ports := { + port_number := 8500, + num_of_ports := omit + }, + transport := c_rtpAvp, + fmts := {"0"} + }, //* m=audio + //* 8500 + //* RTP/AVP + //* 0 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := p_attribute_list + } + } + } + + template(value) SDP_Message m_SDP_attribute( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile, + template(value) SDP_attribute p_loc_attribute + ) modifies m_SDP := { + attributes := {p_loc_attribute} + } + + template(present) SDP_Message mw_SDP := { + protocol_version := 0, //* v=0 + origin := ?, + session_name := ?, + information := omit, + uri := omit, + emails := omit, + phone_numbers := omit, + connection := ?, + bandwidth := omit, + times := { + { + time_field := {"0", "0"}, + time_repeat := omit + } + }, //* t=0 0 + timezone_adjustments := omit, + key := omit, + attributes := omit, + media_list := ? + } + + + } //* end group base_templates + + group modified_templates { + template(value) SDP_Message m_SDP_bandwidth( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile + ) modifies m_SDP := { + bandwidth := { + { + PX_SIP_SDP_B_MODIFIER, + PX_SIP_SDP_B_BANDWIDTH + } + } + } + + template(value) SDP_Message m_SDP_unacceptable( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile + ) modifies m_SDP := { + protocol_version := 1, //* v=1 unacceptable version of + //* SDP + bandwidth := { + { + PX_SIP_SDP_B_MODIFIER, + PX_SIP_SDP_B_BANDWIDTH + } + } + } + + template(value) SDP_Message m_SDP_encrypted( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile + ) modifies m_SDP := { + bandwidth := { + { + PX_SIP_SDP_B_MODIFIER, + PX_SIP_SDP_B_BANDWIDTH + } + }, + key := { + method := "base64", // prompt + key := "blablabla" + } + } + + + } //* end group modified_templates + + + } //* end group SDP_Messages + + group SDP_Fields { + + template(value) SDP_media_desc m_media(template(value) SDP_media_field p_mf) := { + media_field := p_mf, + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := omit + } + + template(value) SDP_media_desc m_mediaFieldBandwdthAttributes( + template(value) SDP_media_field p_mf, + template(omit) SDP_bandwidth_list p_bw_l := omit, + template(omit) SDP_attribute_list p_attributes := omit + ) := { + media_field := p_mf, + information := omit, + connections := omit, + bandwidth := p_bw_l, + key := omit, + attributes := p_attributes + } + + template(value) SDP_media_desc m_media_dynPT( + template(value) charstring p_payloadType, + template(value) charstring p_encoding, + template(value) charstring p_clockrate, + template(omit) charstring p_parameters := omit, + template(omit) SDP_key p_sdpKey := omit + ) := { + media_field := { + media := c_audio, //* "audio", + ports := { + port_number := 8500, + num_of_ports := omit + }, + transport := c_rtpAvp, //* "RTP/AVP", + fmts := { p_payloadType } + }, //* m=audio 8500 RTP/AVP 8 + information := omit, + connections := omit, + bandwidth := omit, + key := p_sdpKey, + attributes := {{rtpmap := { + payload_type := p_payloadType, + codec := { + encoding := p_encoding, + clockrate := p_clockrate, + parameters := p_parameters + } + } + }} //* a=rtpmap:8 PCMA/8000 + } + + /** + * @desc send template with specific media transport and attribute values + * @param p_mediaAttribute parameter for SDP media transport supported by the IUT + * former PX_SIP_SDP_media_transport + * @param p_mediaAttribute parameter for SDP media attribute supported by the IUT, + * former PX_SIP_SDP_media_attribute_Exp & PX_SIP_SDP_media_transport_Exp + * @param p_mTypeSubtype parameter for SDP media type supported by the IUT, + * former PX_SIP_SDP_MEDIA_VIDEO + */ + template(value) SDP_media_desc m_media_unsupported( + template(value) charstring p_mediaTransport, + template(value) SDP_attribute_rtpmap p_mediaAttribute, + template(value) charstring p_mTypeSubtype := "video" + ) := { + media_field := { + media := p_mTypeSubtype, + ports := { + port_number := 11500, + num_of_ports := omit + }, + transport := p_mediaTransport, + fmts := {"99"} + }, //* m=audio 8500 RTP/AVP 0 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := {{rtpmap := p_mediaAttribute}} + } + + template(value) SDP_bandwidth m_bandwidth( + template(value) charstring p_loc_m, + template(value) integer p_loc_b + ) := { + modifier := p_loc_m, + bandwidth := p_loc_b + } + + template(value) SDP_bandwidth m_bandwidth_as_64 := { + modifier := "AS", + bandwidth := 64 + } + + template(present) SDP_bandwidth mw_bandwidth_rs := { + modifier := "RS", + bandwidth := ? + } + + template(present) SDP_bandwidth mw_bandwidth_rr := { + modifier := "RR", + bandwidth := ? + } + + template(value) SDP_media_field m_media_field( + template(value) charstring p_media, + template(value) integer p_portNum, + template(value) charstring p_transport, + template(value) charstring p_fmts + ) := { + media := p_media, + ports := { + port_number := p_portNum, + num_of_ports := omit + }, + transport := p_transport, + fmts := {p_fmts} + } + + template(present) SDP_media_field mw_media_PCMU := { + media := c_audio, + ports := { + port_number := ?, + num_of_ports := * + }, + transport := c_rtpAvp, + fmts := {"0"} + } + + template(present) SDP_media_field mw_media_PCMA := { + media := c_audio, + ports := { + port_number := 8500, + num_of_ports := omit + }, + transport := c_rtpAvp, + fmts := {"8"} + } + + template(present) SDP_media_field mw_media_PCMA_U_DPT := { + media := c_audio, + ports := { + port_number := ?, + num_of_ports := * + }, + transport := c_rtpAvp, + fmts := {*} + } + + template(present) SDP_media_field mw_media_T38 := { + media := c_image, + ports := { + port_number := ?, + num_of_ports := * + }, + transport := pattern "*ptl", //* udptl,tcptl + fmts := {"t38"} + } + + template(present) SDP_media_field mw_media_G722 := { + media := c_audio, + ports := { + port_number := ?, + num_of_ports := * + }, + transport := "RTP/AVP", + fmts := {"9"} + } + + template(present) SDP_media_field mw_media_AMR_DPT := { + media := c_audio, + ports := { + port_number := ?, + num_of_ports := * + }, + transport := c_rtpAvp, + fmts := {*} + } + + template(present) SDP_media_field mw_media_MSRP := { + media := c_msrp, + ports := { + port_number := ?, + num_of_ports := omit + }, + transport := c_msrpTcp, + fmts := {*} + } + + template(value) SDP_attribute m_attribute_sendonly := {sendonly := {}} + template(present) SDP_attribute mw_attribute_sendonly := {sendonly := {}} + // MRO + template(value) SDP_attribute m_attribute_recvonly := {recvonly := {}} + template(present) SDP_attribute mw_attribute_recvonly := {recvonly := {}} + // MRO + template(value) SDP_attribute m_attribute_sendrecv := {sendrecv := {}} + template(present) SDP_attribute mw_attribute_sendrecv := {sendrecv := {}} + // MRO + template(value) SDP_attribute m_attribute_inactive := {inactive := {}} + template(present) SDP_attribute mw_attribute_inactive := {inactive := {}} + // MRO + template(present) SDP_attribute mw_attribute_sendonly_inactive := (mw_attribute_sendonly, mw_attribute_inactive); + template SDP_attribute mw_attribute_sendrecv_recvonly_omit := (mw_attribute_sendrecv, mw_attribute_recvonly/*, omit*/); // FSCOM FIXME error: `omit' value is not allowed in this context + template(value) SDP_attribute m_attribute_base( + template(value) SDP_attribute_rtpmap p_attr_value + ) := { + rtpmap := p_attr_value + } + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_AMR + */ + template(value) SDP_attribute m_attribute_AMR_DPT(//"0 AMR" + template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"AMR", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_CLE + */ + template(value) SDP_attribute m_attribute_CLEARMODE_DPT(//"0 CLEARMODE/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"CLEARMODE", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_G222 + */ + template(value) SDP_attribute m_attribute_G722(//"9 G722/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"9", {"G722", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_PCMU + */ + template(value) SDP_attribute m_attribute_PCMU(//"0 PCMU/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMU", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_PCMU + */ + template(value) SDP_attribute m_attribute_PCMU_DPT(//"0 PCMU/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMU", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_PCMA + */ + template(value) SDP_attribute m_attribute_PCMA(//"8 PCMA/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"8", {"PCMA", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_PCMA + */ + template(value) SDP_attribute m_attribute_PCMA_DPT(//"0 PCMA/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMA", "8000", omit}} + ) := m_attribute_base(p_attr_value); + + template(present) SDP_attribute mw_attribute_T38 := { + unknown := { + name := ?, + attr_value := pattern "*t38*" + } + } + + template(value) SDP_attribute m_attribute_curr( + template(value) charstring p_preconditionType, + template(value) charstring p_statusType, + template(value) charstring p_direction + ) := { + curr := { + preconditionType := p_preconditionType, + statusType := p_statusType, + direction := p_direction + } + } + + template(present) SDP_attribute mw_attribute_curr := {curr := ?} + + template(value) SDP_attribute m_attribute_des( + template(value) charstring p_preconditionType, + template(value) charstring p_strength, + template(value) charstring p_statusType, + template(value) charstring p_direction + ) := { + des := { + preconditionType := p_preconditionType, + strength := p_strength, + statusType := p_statusType, + direction := p_direction + } + } + + template(present) SDP_attribute mw_attribute_des := {des := ?} + + template(value) SDP_attribute m_attribute_conf( + template(value) charstring p_preconditionType, + template(value) charstring p_statusType, + template(value) charstring p_direction + ) := { + conf := { + preconditionType := p_preconditionType, + statusType := p_statusType, + direction := p_direction + } + } + + + } //* end group SDP_Fields + + + } //* end group SDP_Templates + + group SimpleMsgSummary_Templates { + + template(value) SimpleMsgSummary m_SMS( + template(value) Msg_summary_line_list p_summaryLineList, + template(value) charstring p_uri + ) := { + msg_status_line := m_msgStatusLine_yes, + msg_account := m_msgAccount(p_uri), + msg_summary_line_list := p_summaryLineList, + opt_msg_headers := omit + } + + template(present) SimpleMsgSummary mw_SMS := { + msg_status_line := ?, + msg_account := *, + msg_summary_line_list := *, + opt_msg_headers := * + } + + template(present) SimpleMsgSummary mw_SMS_yes modifies mw_SMS := { + msg_status_line := mw_msgStatusLine_yes + } + + template(present) SimpleMsgSummary mw_SMS_yesUri modifies mw_SMS_yes := { + msg_account := mw_msgAccount + } + + template(present) SimpleMsgSummary mw_SMS_yesVoice modifies mw_SMS_yes := { + msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)} + } + + template(present) SimpleMsgSummary mw_SMS_yesUriVoice modifies mw_SMS_yesUri := { + msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)} + } + + template(value) Msg_status_line m_msgStatusLine_yes := { + msg_type := c_messageWaiting, + msg_status := "yes" + } + + template(present) Msg_status_line mw_msgStatusLine_yes := { + msg_type := c_messageWaiting, + msg_status := "yes" + } + + template(value) Msg_account m_msgAccount( + template(value) charstring p_uri + ) := { + msg_type_account := c_messageAccount, + account_URI := + p_uri // m_SipUrl_NumberHostParam(PX_IMS_SUT_UE2_PUBLIC_USER,PX_IMS_SUT_UE2_HOME_DOMAIN,omit) + } + + template(present) Msg_account mw_msgAccount := { + msg_type_account := c_messageAccount, + account_URI := ? + } + + template(value) Msg_summary_line m_msgSummaryLine( + template(value) charstring p_msgContexClass, + template(value) charstring p_msgs, + template(value) charstring p_urgent_msgs + ) := { + msg_context_class := p_msgContexClass, + msgs := p_msgs, + urgent_msgs := p_urgent_msgs + } + + template(present) Msg_summary_line mw_msgSummaryLine( + template(present) charstring p_msgContexClass := ? + ) := { + msg_context_class := p_msgContexClass, + msgs := ?, + urgent_msgs := * + } + + + } // end group Templates_SMS + + group MessageBodies { + + template(value) MessageBody m_MBody_SDP( + template(value) SDP_Message p_SDP + ) := { + sdpMessageBody := p_SDP + } + + template(value) MessageBody m_MBody_XML( + template(value) XmlBody p_xmlBody + ) := { + xmlBody := p_xmlBody + } + + template(value) MessageBody m_mBody_SMS( + template(value) SimpleMsgSummary p_SMS + ) := { + simpleMsgSummary := p_SMS + } + + template(value) MessageBody m_MBody_longPlainText := {textplain := c_longMessageContent_1300Bytes} + + template(value) MessageBody m_mBody_plainText( + template(value) charstring p_plaitext + ) := { + textplain := p_plaitext + } + + template(value) MessageBody m_MBody_sipfrag( + template(value) charstring p_sipfrag + ) := { + sipfrag := p_sipfrag + } + + template(value) MessageBody m_MBody_MIMESdpXml( + template(value) SDP_Message p_sdp, + template(value) XmlBody p_xmlBody + ) := { + mimeMessageBody := { + boundary := "--" & PX_SIP_MIME_BOUNDARY, + mimeEncapsulatedList := { + { + content_type := c_sdpApplication, + content_disposition := omit, + content_id := omit, + mime_encapsulated_part := {sdpMessageBody := p_sdp} + }, + { + content_type := c_ims3gppCwApplication, + content_disposition := omit, + content_id := omit, + mime_encapsulated_part := {xmlBody := p_xmlBody} + } + } + } + } + + template(value) MessageBody m_MBody_MIMESdpEncrypted( + template(value) SDP_Message p_sdp + ) := { + mimeMessageBody := { + boundary := "--" & PX_SIP_MIME_BOUNDARY, + mimeEncapsulatedList := { + { + content_type := "application/sdp", + content_disposition := "attachment;handling=required;filename=smime.p7", + content_id := omit, + mime_encapsulated_part := {sdpMessageBody := p_sdp} + } + } + } + } + + template(present) MessageBody mw_MBody_SDP( + template(present) SDP_Message p_SDP := ? + ) := { + sdpMessageBody := p_SDP + } + + template(present) MessageBody mw_MBody_XML( + template(present) XmlBody p_xmlBody := ? + ) := { + xmlBody := p_xmlBody + } + + template(present) MessageBody mw_mBody_SMS( + template(present) SimpleMsgSummary p_SMS := ? + ) := { + simpleMsgSummary := p_SMS + } + + template(present) MessageBody mw_MBody_MIMESdpXml( + template(present) SDP_Message p_sdp := ?, + template(present) XmlBody p_xmlBody := ? + ) := { + mimeMessageBody := { + boundary := ?, + mimeEncapsulatedList := { + { + content_type := ?, + content_disposition := *, + content_id := *, + mime_encapsulated_part := {sdpMessageBody := p_sdp} + }, + { + content_type := ?, + content_disposition := *, + content_id := *, + mime_encapsulated_part := {xmlBody := p_xmlBody} + } + } + } + } + + template(present) MessageBody mw_MBody_MIME_Ims3gpp( + template charstring p_disposition, + template(present) Ims_3gpp p_ims3gpp := ? + ) := { + mimeMessageBody := { + boundary := ?, + mimeEncapsulatedList := { + *, + { + content_type := c_ims3gppApplication, + content_disposition := p_disposition, + content_id := *, + mime_encapsulated_part := {xmlBody := {ims3gpp := p_ims3gpp}} + }, + * + } + } + } + + template(present) MessageBody mw_MBody_MIME_Ims3gppCW( + template charstring p_disposition, + template(present) Ims_3gpp p_ims3gpp := ? + ) := { + mimeMessageBody := { + boundary := ?, + mimeEncapsulatedList := { + *, + { + content_type := c_ims3gppCwApplication, + content_disposition := p_disposition, + content_id := *, + mime_encapsulated_part := {xmlBody := {ims3gpp := p_ims3gpp}} + }, + * + } + } + } + + } + /* + * + * @desc group TemplatePreparationFunctions contain functions which are used for templates + */ + group TemplatePreparationFunctions { + + group MessageBody_Calculation { + + /** + * @desc Calculation of Message Body length + * @param p_mb_par contain message body part + * @return message body length + */ + function f_MessageBodyLength( + template(value) MessageBody p_mb_par + ) return integer { + + var integer v_result := 0; + if (PX_MB_LENGTH_FROM_ENCVAL) { + // by default it is set to true + // in case the codec encodes the variant selector, this + // needs to be changed to ischosen... + v_result := lengthof(encvalue(p_mb_par)) / 8; // length + // in + // bytes, + // let get + // length + // of + // encoded + // value + } + else { + + // assume SDP_Message ONLY in the message body + if (ischosen(p_mb_par.sdpMessageBody)) { + v_result := f_SDPlength(valueof(p_mb_par.sdpMessageBody)); + } + + // assume XML_Body ONLY in the message body + if (ischosen(p_mb_par.xmlBody)) { + v_result := f_XMLBody_Length(valueof(p_mb_par.xmlBody), PX_USE_FX_FOR_XML_LENGTH); + } + + // assume simpleMsgSummary_Body ONLY in the message body + if (ischosen(p_mb_par.simpleMsgSummary)) { + v_result := f_simpleMsgSummaryBody_Length(valueof(p_mb_par.simpleMsgSummary)); + } + + // assume MIME_Message in the message body + if (ischosen(p_mb_par.mimeMessageBody)) { + v_result := f_MIMElength(valueof(p_mb_par.mimeMessageBody)); + } + + // assume sipfrag in the message body + if (ischosen(p_mb_par.sipfrag)) { + v_result := f_TextPlainLength(p_mb_par); // same + // function + // due to + // same + // type + // with + // textplain + } + + // assume textplain in the message body + if (ischosen(p_mb_par.textplain)) { + v_result := f_TextPlainLength(p_mb_par); + } + } + + return v_result; + } + + + group SDP_Len_calculation { + /** + * @desc Calculation of SDP length + * @param p_mb contain sdp message + * @return sdp_lenght + */ + function f_SDPlength( + SDP_Message p_mb + ) return integer { + var integer i, j, k, v_len_con0, v_len_con1, v_len_con2, v_len_attr; + var integer v_result := 2; + //* due to empty line beginning of message body + var charstring v_auxstring; + + v_result := 2 + c_CRlen + lengthof(int2str(p_mb.protocol_version)); //* "v=" + v_auxstring := p_mb.origin.user_name & " " & p_mb.origin.session_id & " " & p_mb.origin.session_version & " " & p_mb.origin.net_type & " " & p_mb.origin.addr_type & " " & p_mb.origin.addr; + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "o=" + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.session_name); //* "s=" + if (isvalue(p_mb.information)) { + v_auxstring := valueof(p_mb.information); + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); + } //* "i= " + if (isvalue(p_mb.uri)) { + v_auxstring := valueof(p_mb.uri); + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); + } //* "u=" + if (isvalue(p_mb.emails)) { + for (i := 0; i < lengthof(p_mb.emails); i := i + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.emails[i].addr_or_phone); //* "e=" + if (isvalue(p_mb.emails[i].disp_name)) { + v_auxstring := valueof(p_mb.emails[i].disp_name); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + } + + if (isvalue(p_mb.phone_numbers)) { + for (i := 0; i < lengthof(p_mb.phone_numbers); i := i + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.phone_numbers[i].addr_or_phone); //* "p= + //* " + if (isvalue(p_mb.phone_numbers[i].disp_name)) { + v_auxstring := valueof(p_mb.phone_numbers[i].disp_name); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + } + + if (isvalue(p_mb.connection)) { + v_len_con0 := f_SDPlength_connection(valueof(p_mb.connection)); + v_result := v_result + v_len_con0; + } //* "c=" + if (isvalue(p_mb.bandwidth)) { + for (i := 0; i < lengthof(p_mb.bandwidth); i := i + 1) { + //* "b= " + v_auxstring := p_mb.bandwidth[i].modifier & " "; + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring) + lengthof(int2str(p_mb.bandwidth[i].bandwidth)); + } + } + + for (i := 0; i < lengthof(p_mb.times); i := i + 1) { + v_auxstring := p_mb.times[i].time_field.start_time & " " & p_mb.times[i].time_field.stop_time; + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "t=" + if (isvalue(p_mb.times[i].time_repeat)) { + for (j := 0; j < lengthof(p_mb.times[i].time_repeat); j := j + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(int2str(p_mb.times[i].time_repeat[j].repeat_interval.time)); //* "r=" + if (isvalue(p_mb.times[i].time_repeat[j].repeat_interval.unit)) { + v_auxstring := valueof(p_mb.times[i].time_repeat[j].repeat_interval.unit); + v_result := v_result + 1 + lengthof(v_auxstring); + } + + v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].active.time)); + if (isvalue(p_mb.times[i].time_repeat[j].active.unit)) { + v_auxstring := valueof(p_mb.times[i].time_repeat[j].active.unit); + v_result := v_result + 1 + lengthof(v_auxstring); + } + + for (k := 0; k < lengthof(p_mb.times[i].time_repeat[j].offsets); k := k + 1) { + v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].offsets[k].time)); + if (isvalue(p_mb.times[i].time_repeat[j].offsets[k].unit)) { + v_auxstring := valueof(p_mb.times[i].time_repeat[j].offsets[k].unit); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + } + } + } + + if (isvalue(p_mb.timezone_adjustments)) { + log("*** " & __SCOPE__ & ": INFO: timezone adjustments have not been considered in SDP length calculation yet ***"); + } //* "z=" + if (isvalue(p_mb.key)) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.key.method); //* "k= + //* " + if (isvalue(p_mb.key.key)) { + v_auxstring := valueof(p_mb.key.key); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + if (isvalue(p_mb.attributes)) { + for (i := 0; i < lengthof(p_mb.attributes); i := i + 1) { + + + //* "a= " + v_len_con1 := f_SDPlength_attribute(p_mb.attributes[i]); + v_result := v_result + v_len_con1; + } + } //* "a=" + if (isvalue(p_mb.media_list)) { + for (i := 0; i < lengthof(p_mb.media_list); i := i + 1) { + //* "m= " + //* for each media_field + //* log("p_mb.media_list[i ] ",p_mb.media_list[i + //* ] ); + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.media_list[i].media_field.media) + 1 + lengthof(int2str(p_mb.media_list[i].media_field.ports.port_number)); + + + if (isvalue(p_mb.media_list[i].media_field.ports.num_of_ports)) { + v_result := v_result + 1 + lengthof(int2str(valueof(p_mb.media_list[i].media_field.ports.num_of_ports))); + } + v_result := v_result + 1 + lengthof(p_mb.media_list[i].media_field.transport); + for (j := 0; j < lengthof(p_mb.media_list[i].media_field.fmts); j := j + 1) { + v_result := v_result + 1 + lengthof(p_mb.media_list[i].media_field.fmts[j]); + } + + if (isvalue(p_mb.media_list[i].information)) { + v_auxstring := valueof(p_mb.media_list[i].information); + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "i= " + } + if (isvalue(p_mb.media_list[i].connections)) { + for (j := 0; j < lengthof(p_mb.media_list[i].connections); j := j + 1) { + v_len_con2 := f_SDPlength_connection(p_mb.media_list[i].connections[j]); + v_result := v_result + v_len_con2; + } //* end for + } + if (isvalue(p_mb.media_list[i].bandwidth)) { + //* "b= " + for (j := 0; j < lengthof(p_mb.media_list[i].bandwidth); j := j + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.media_list[i].bandwidth[j].modifier) + 1 + lengthof(int2str(p_mb.media_list[i].bandwidth[j].bandwidth)); + } //* end for + } + if (isvalue(p_mb.media_list[i].key)) { + //* "k= " + v_result := v_result + 1 + lengthof(p_mb.media_list[i].key.method); + if (isvalue(p_mb.media_list[i].key.key)) { + v_auxstring := valueof(p_mb.media_list[i].key.key); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + if (isvalue(p_mb.media_list[i].attributes)) { + for (j := 0; j < lengthof(p_mb.media_list[i].attributes); j := j + 1) { + + //* "a= " + v_len_attr := f_SDPlength_attribute(p_mb.media_list[i].attributes[j]); + v_result := v_result + v_len_attr; + } //* end for j + } + } //* end for i + } //* end if media_list + return v_result; + } + //* end function f_SDPlength + function f_SDPlength_connection( + SDP_connection p_element + ) return integer { + //* "c=" + var integer v_result := 0; + v_result := v_result + 2 + c_CRlen + lengthof(p_element.net_type & " " & p_element.addr_type & " " & p_element.conn_addr.addr); + if (isvalue(p_element.conn_addr.ttl) and p_element.conn_addr.ttl > 0) { + v_result := v_result + 1 + lengthof(int2str(valueof(p_element.conn_addr.ttl))); + } + if (isvalue(p_element.conn_addr.num_of_addr) and p_element.conn_addr.num_of_addr > 0) { + v_result := v_result + 1 + lengthof(int2str(valueof(p_element.conn_addr.num_of_addr))); + } + return v_result; + } //* f_SDPlength_connection + + function f_SDPlength_attribute( + SDP_attribute p_element + ) return integer { + //* "a=" + var integer v_result := 0; + if (ischosen(p_element.cat)) { + v_result := v_result + 2 + c_CRlen + lengthof("cat:" & p_element.cat.attr_value); + } + if (ischosen(p_element.keywds)) { + v_result := v_result + 2 + c_CRlen + lengthof("keywds:" & p_element.keywds.attr_value); + } + if (ischosen(p_element.tool)) { + v_result := v_result + 2 + c_CRlen + lengthof("tool:" & p_element.tool.attr_value); + } + if (ischosen(p_element.ptime)) { + v_result := v_result + 2 + c_CRlen + lengthof("ptime:" & p_element.ptime.attr_value); + } + if (ischosen(p_element.recvonly)) { + v_result := v_result + c_CRlen + lengthof("recvonly"); + } + if (ischosen(p_element.sendrecv)) { + v_result := v_result + c_CRlen + lengthof("sendrecv"); + } + if (ischosen(p_element.sendonly)) { + v_result := v_result + c_CRlen + lengthof("sendonly"); + } + if (ischosen(p_element.inactive)) { + v_result := v_result + c_CRlen + lengthof("inactive"); + } + if (ischosen(p_element.orient)) { + v_result := v_result + 2 + c_CRlen + lengthof("orient:" & p_element.orient.attr_value); + } + if (ischosen(p_element.sdp_type)) { + v_result := v_result + 2 + c_CRlen + lengthof("type:" & p_element.sdp_type.attr_value); + } + if (ischosen(p_element.charset)) { + v_result := v_result + 2 + c_CRlen + lengthof("charset" & p_element.charset.attr_value); + } + if (ischosen(p_element.sdplang)) { + v_result := v_result + 2 + c_CRlen + lengthof("sdplang:" & p_element.sdplang.attr_value); + } + if (ischosen(p_element.lang)) { + v_result := v_result + 2 + c_CRlen + lengthof("lang:" & p_element.lang.attr_value); + } + if (ischosen(p_element.framerate)) { + v_result := v_result + 2 + c_CRlen + lengthof("framerate:" & p_element.framerate.attr_value); + } + if (ischosen(p_element.quality)) { + v_result := v_result + 2 + c_CRlen + lengthof("quality:" & p_element.quality.attr_value); + } + if (ischosen(p_element.fmtp)) { + v_result := v_result + 2 + c_CRlen + lengthof("fmtp:" & p_element.fmtp.format & " " & f_fmtpparams_to_charstring(p_element.fmtp.params)); + } + if (ischosen(p_element.curr)) { + v_result := v_result + 2 + c_CRlen + lengthof("curr:" & p_element.curr.preconditionType & " " & p_element.curr.statusType & " " & p_element.curr.direction); + } + if (ischosen(p_element.des)) { + v_result := v_result + 2 + c_CRlen + lengthof("des:" & p_element.des.preconditionType & " " & p_element.des.strength & " " & p_element.des.statusType & " " & p_element.des.direction); + } + if (ischosen(p_element.conf)) { + v_result := v_result + 2 + c_CRlen + lengthof("conf:" & p_element.conf.preconditionType & " " & p_element.conf.statusType & " " & p_element.conf.direction); + } + if (ischosen(p_element.rtpmap)) { + v_result := v_result + 2 + c_CRlen + lengthof("rtpmap:" & f_rtpmap_to_charstring(p_element.rtpmap)); + } + if (ischosen(p_element.rtcp)) { + v_result := v_result + 2 + c_CRlen + lengthof("rtcp:" & f_rtcp_to_charstring(p_element.rtcp)); + } + if (ischosen(p_element.unknown)) { + v_result := v_result + 2 + c_CRlen + lengthof(p_element.unknown.name); + if (isvalue(p_element.unknown.attr_value)) { + v_result := v_result + lengthof(":" & p_element.unknown.attr_value); + } + } + //* log("axr: length attribute=", v_result); + return v_result; + } //* f_SDPlength_attribute + + function f_fmtpparams_to_charstring( + SDP_attribute_fmtp_format_specific_params p_params + ) return charstring { + var charstring v_result := ""; + if(ischosen(p_params.unstructured)){ + v_result := p_params.unstructured; + } + else + { + for(var integer v_idx := 0; v_idx < lengthof(p_params.paramList); v_idx := v_idx + 1) { + if(v_idx != 0) + { + v_result := v_result & "; " + } + v_result := v_result & p_params.paramList[v_idx].id; + if(ispresent(p_params.paramList[v_idx].paramValue)){ + if(ischosen(p_params.paramList[v_idx].paramValue.tokenOrHost)) + { + v_result := v_result & "=" & p_params.paramList[v_idx].paramValue.tokenOrHost; + } + else + { + v_result := v_result & "=""" & p_params.paramList[v_idx].paramValue.quotedString & """"; + } + } + } + } + return v_result; + } + + function f_rtpmap_to_charstring( + SDP_attribute_rtpmap p_rtpmap + ) return charstring { + var charstring v_result := ""; + v_result := p_rtpmap.payload_type & " " & p_rtpmap.codec.encoding & "/" & p_rtpmap.codec.clockrate; + if(ispresent(p_rtpmap.codec.parameters)) + { + v_result := v_result & "/" & p_rtpmap.codec.parameters; + } + return v_result; + } + + function f_rtcp_to_charstring( + SDP_attribute_rtcp p_rtcp + ) return charstring { + var charstring v_result := int2str(p_rtcp.portnumber); + if(ispresent(p_rtcp.connection)) + { + v_result := v_result & " " & p_rtcp.connection.net_type & " " & p_rtcp.connection.addr_type & " " & p_rtcp.connection.conn_addr.addr; + if(ispresent(p_rtcp.connection.conn_addr.ttl)) + { + v_result := v_result & "/" & int2str(p_rtcp.connection.conn_addr.ttl); + if(ispresent(p_rtcp.connection.conn_addr.num_of_addr)) + { + v_result := v_result & "/" & int2str(p_rtcp.connection.conn_addr.num_of_addr); + } + } + } + return v_result; + } + + } //* group SDPlen_calculation + + group XML_Len_calculation { + + /** + * @desc Declaration of external functions to calculate length of message bodies switching of internal or external functions are made by boolean module parameter/PIXIT USE_FX_FOR_XML_LENGTH declared at top of this module + */ + external function fx_calculateXMLBodyLen( + XmlBody p_mb + ) return integer; + + /** + * @desc Calculation of XML body length + * @param p_mb contain XML body + * @return xml_length + */ + function f_XMLBody_Length( + XmlBody p_mb, + boolean p_ext_func + ) return integer { + var integer v_result := 0; + + if (p_ext_func) { + v_result := fx_calculateXMLBodyLen(p_mb); + } + else { + // assume ConferenceInfo ONLY in the XML message + // body + if (ischosen(p_mb.conference)) { + v_result := f_XMLBody_ConferenceInfo_Length(p_mb.conference); + } + + // assume CUG ONLY in the XML message body + if (ischosen(p_mb.cug)) { + v_result := f_XMLBody_Cug_Length(p_mb.cug); + } + + // assume MCID ONLY in the XML message body + if (ischosen(p_mb.mcid)) { + v_result := f_XMLBody_Mcid_Length(p_mb.mcid); + } + + // assume CW ONLY in the XML message body + if (ischosen(p_mb.cw)) { + v_result := f_XMLBody_Cw_Length(p_mb.cw); + } + + // assume CDIV ONLY in the XML message body + if (ischosen(p_mb.cdivn)) { + v_result := f_XMLBody_Cdivn_Length(p_mb.cdivn); + } + + // assume PSTNTransit ONLY in the XML message body + if (ischosen(p_mb.pstnTransit)) { + v_result := f_XMLBody_PSTNTransit_Length(p_mb.pstnTransit); + } + + // assume Simservs ONLY in the XML message body + if (ischosen(p_mb.simservs)) { + v_result := f_XMLBody_Simservs_Length(p_mb.simservs); + } + + // assume ResourceLists ONLY in the XML message body + if (ischosen(p_mb.resourceLists)) { + v_result := f_XMLBody_ResourceList_Length(p_mb.resourceLists); + } + + // assume Ims3GPP ONLY in the XML message body + if (ischosen(p_mb.ims3gpp)) { + v_result := f_XMLBody_Ims3GPP_Length(p_mb.ims3gpp); + } + /** + * Add aditional checks regarding to new variants, also implement appropriate function for calculation + */ + } + return v_result; + } //* f_XMLBodyLength + + group XMLBodies_calculation { + + /** + * @desc Calculation of XML ConferenceInfo element length + * @param p_mb contain XML ConfInfo body + * @return xml_length + */ + function f_XMLBody_ConferenceInfo_Length( + template(value) Conference_type p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_ConferenceInfo_Length + + /** + * @desc Calculation of XML CUG element length + * @param p_mb contain XML CUG body + * @return xml_length + */ + function f_XMLBody_Cug_Length( + template(value) Cug p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_Cug_Length + + /** + * @desc Calculation of XML MCID element length + * @param p_mb contain XML MCID body + * @return xml_length + */ + function f_XMLBody_Mcid_Length( + template(value) Mcid p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + + return v_result; + } //* f_XMLBody_Mcid_Length + + /** + * @desc Calculation of XML CW element length + * @param p_mb contain XML CW body + * @return xml_length + */ + function f_XMLBody_Cw_Length( + template(value) Ims_cw p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + + return v_result; + } //* f_XMLBody_Cw_Length + + /** + * @desc Calculation of XML CDIVN element length + * @param p_mb contain XML CDIVN body + * @return xml_length + */ + function f_XMLBody_Cdivn_Length( + template(value) Comm_div_info_type p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + + return v_result; + } //* f_XMLBody_Cdivn_Length + + /** + * @desc Calculation of XML PSTNTransit element length + * @param p_mb contain XML PSTNTransit body + * @return xml_length + */ + function f_XMLBody_PSTNTransit_Length( + template(value) PSTN_transit p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_PSTNTransit_Length + + /** + * @desc Calculation of XML Simservs element length + * @param p_mb contain XML Simservs body + * @return xml_length + */ + function f_XMLBody_Simservs_Length( + template(value) Simservs p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_Simservs_Length + + /** + * @desc Calculation of XML ResourceList length + * @param p_mb contain XML ResourceList body + * @return xml_length + */ + function f_XMLBody_ResourceList_Length( + template(value) Resource_lists p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_ResourceList_Length + + /** + * @desc Calculation of XML Ims3GPP length + * @param p_mb contain XML Ims3GPP body + * @return xml_length + */ + function f_XMLBody_Ims3GPP_Length( + template(value) TIMS3GPP p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_Ims3GPP_Length + + + } //* XMLBodies_calculation + + + } //* group XMLlen_calculation + + group simpleMsgSummaryBody_Length { + + function f_simpleMsgSummaryBody_Length( + SimpleMsgSummary p_mb + ) return integer { + var integer i; + var integer v_result := 2; + + + //* due to empty line beginning of message body + var charstring v_auxstring; + + v_result := 2 + lengthof(p_mb.msg_status_line.msg_type) + 2 + lengthof(p_mb.msg_status_line.msg_status) + c_CRlen; //* "Message-Waiting: + //* yes" + if (isvalue(p_mb.msg_account)) + //* "Message-Account" + { + v_result := v_result + 2 + lengthof(p_mb.msg_account.msg_type_account) + 2 + lengthof(p_mb.msg_account.account_URI) + c_CRlen; + } + if (isvalue(p_mb.msg_summary_line_list)) { + for (i := 0; i < lengthof(p_mb.msg_summary_line_list); i := i + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.msg_summary_line_list[i].msg_context_class) + 2 + lengthof(p_mb.msg_summary_line_list[i].msgs); + if (isvalue(p_mb.msg_summary_line_list[i].urgent_msgs)) { + v_auxstring := valueof(p_mb.msg_summary_line_list[i].urgent_msgs); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + } + if (isvalue(p_mb.opt_msg_headers)) { + for (i := 0; i < lengthof(p_mb.opt_msg_headers); i := i + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.opt_msg_headers[i]); + } + } + return v_result; + } + } + + group MIME_Len_calculation { + /** + * @desc Calculation of MIME length + * @param p_mb contain MIME message + * @return xml_length + */ + function f_MIMElength( + MIME_Message p_mb + ) return integer { + var integer i; + var integer v_result := 2; + // 0d0a + v_result := v_result + lengthof(p_mb.boundary) + 2 /*0d0a*/; + + for (i := 0; i < lengthof(p_mb.mimeEncapsulatedList); i := i + 1) { + + v_result := v_result + lengthof("Content-Type: ") + lengthof(p_mb.mimeEncapsulatedList[i].content_type) + 2 /*0d0a*/; + + if (isvalue(p_mb.mimeEncapsulatedList[i].content_disposition)) { + v_result := v_result + lengthof("Content-Disposition: ") + lengthof(p_mb.mimeEncapsulatedList[i].content_disposition) + 2 /*0d0a*/; + } + + // v_result := v_result +2/*0d0a*/; ??? to check + // assume SDP_Message ONLY in the message body + if (ischosen(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.sdpMessageBody)) { + v_result := v_result + f_SDPlength(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.sdpMessageBody); + } + + // assume XML_Body ONLY in the message body + if (ischosen(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.xmlBody)) { + v_result := v_result + f_XMLBody_Length(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.xmlBody, PX_USE_FX_FOR_XML_LENGTH); + } + // //assume XML_Message ONLY in the message body + // if (ischosen(p_mb.mimeEncapsulatedList[i ] + // .mime_encapsulated_part.xmlMessage)) + // { + // v_result := v_result + + // f_XMLlength(p_mb.mimeEncapsulatedList[i ] + // .mime_encapsulated_part.xmlMessage, + // USE_FX_FOR_XML_LENGTH ); + // }; + // v_result := v_result +2/*0d0a*/; ??? to check + } + + // v_result := v_result +2/*0d0a*/; ??? to check + return v_result; + } //* f_MIMElength + + + } //* group MIMElen_calculation + + group TextPlain_Len_calculation { + /** + * @desc Calculation of messagebody-textplain type length + * @param p_mb contain textplain message + * @return lenght + */ + function f_TextPlainLength( + template(value) MessageBody p_mb + ) return integer { + var integer v_result := 0; + + v_result := v_result + lengthof(p_mb.textplain); + + return v_result; + } //* end function f_TextPlainLength + + + } //* end group TextPlainLen_calculation + + + } //* group MessageBody_Calculation + + + group GiveHeaders { + /** + * @desc Return component variable of recordRoute header if vc_boo_recordRoute is true + * @return component variable of recordRoute header + */ + function f_recordroute( + ) runs on SipComponent + return template(omit) RecordRoute { + var template(omit) RecordRoute v_recordRoute := omit; + if (vc_boo_recordRoute) { + return vc_recordRoute; + } + else { + return (v_recordRoute); + } + } + + /** + * @desc Return component variable of Route header if vc_boo_route is true + * @return component variable of recordRoute header + */ + function f_route( + ) runs on SipComponent + return template(omit) Route { + var template(omit) Route v_route := omit; + if (vc_boo_route) { + return vc_route; + } + else { + return (v_route); + } + } + + + } //* end group GiveHeaders + + group others { + + /* + * + * @desc function combines two comma parameter lists + * @param p_list1 first list + * @param p_list2 second list + * @return comma parameter list that contains parameters from both input lists + * @verdict + */ + function f_merge_CommaParam_List( + template(value) CommaParam_List p_list1, + template(value) CommaParam_List p_list2 + ) return template(value) CommaParam_List { + var template(value) CommaParam_List p_result; + var integer i, v_limit1 := lengthof(p_list1); + for (i := 0; i < v_limit1; i := i + 1) { + p_result[i] := p_list1[i]; + } + for (i := 0; i < lengthof(p_list2); i := i + 1) { + p_result[i + v_limit1] := p_list2[i]; + } + return p_result; + } + + + } //* end group others + + + } //* group TemplatePreparationFunctions +} //* end module LibSip_Templates diff --git a/ttcn/patch_lib_sip_titan/LibSip_XMLTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_XMLTypes.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..af46476bc01a8dc167078e9705d9662278ab3ca4 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_XMLTypes.ttcn @@ -0,0 +1,113 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF471 + * @version $Id$ + * @desc + * This module provides the XML type system for SIP tests. The types have been generated automatically, followed by manual modifications: - bitType substituted by OneBitType - twobitType substituted by TwoBitType - addition of pattern for: OneBitType, TwoBitType, ThreeBitType, FourBitType, FourBitType, SixBitType - application of enumerated for: State_type, Endpoint_status_type, Joining_type, Disconnection_type, Media_status_type, Originating_identity_presentation_restriction, Terminating_identity_presentation_restriction - addition of length value: NetworkIdentityType, SixteenbitType - addition of value restriction: CugIndexType - substitution of "content" by "choice": Call_type, Mcid - additional type renaming (upper first letter): AbsService, Anonymous, Busy, Communication_diverted, + * Conference_description_type, Conference_info, Conference_media_type, Conference_medium_type, Conference_state_type, Conference_type, Cug, CugRequestType, Empty_element_type, Endpoint_type, Execution_type, Host_type, Keywords_type, Media, Media_type, No_answer, Not_reachable, Not_registered, Originating_identity_presentation, Presence_status, Presence_status_activity_type, RequestType, ResponseType, Roaming, Rule_deactivated, Sidebars_by_val_type, Simservs, SimservType, Terminating_identity_presentation, Uri_type, Uris_type, User_roles_type, User_languages_type, User_type, Users_type - new group CDIV added by STF369 - new group ACR_CD added by STF38 - new types RegInfo and Pidf_Lo added by STF160. + * This module is part of LibSipV3. + */ +module LibSip_XMLTypes { + import from http_www_w3_org_XML_1998_namespace language "XSD" all + with { + extension "File:../xsd/xml.xsd"; + } + + import from urn_ietf_params_xml_ns_common_policy language "XSD" all + with { + extension "File:../xsd/common-policy.xsd"; + } + + import from urn_ietf_params_xml_ns_resource_lists language "XSD" all + with { + extension "File:../xsd/ResourceList.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all + with { + extension "File:../xsd/SupplementaryServices.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all + with { + extension "File:../xsd/MCID.xsd"; + } + + import from NoTargetNamespace language "XSD" all + with { + extension "File:../xsd/Ims3gpp.xsd"; + } + + import from urn_3gpp_ns_cw_1_0 language "XSD" all + with { + extension "File:../xsd/cw.xsd"; + } + + import from urn_ietf_params_xml_ns_conference_info language "XSD" all + with { + extension "File:../xsd/CONF.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all + with { + extension "File:../xsd/PSTN.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all + with { + extension "File:../xsd/CDIVN.xsd"; + } + + import from urn_oma_xml_xdm_common_policy language "XSD" all + with { + extension "File:../xsd/xdm_commonPolicy-v1_0.xsd"; + } + // RFC 3680 Registration Info + import from urn_ietf_params_xml_ns_reginfo language "XSD" all + with { + extension "File:../xsd/regInfo.xsd"; + } + // RFC 3863 Presence Information Data Format + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/pidf.xsd"; + } + // RFC 4119 Presence Information Data Format, Location Object extension + import from urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy language "XSD" all + with { + extension "File:../xsd/geopriv10basic.xsd"; + } + + // RFC 4119 Presence Information Data Format, Location Object extension + import from urn_ietf_params_xml_ns_pidf_geopriv10 language "XSD" all + with { + extension "File:../xsd/pidf_lo.xsd"; + } + + group XmlTypes { + type union XmlBody { + Mcid mcid, + // if there is XML Mcid + Comm_div_info_type cdivn, + // if there is XML cdivn + Simservs simservs, + // if there is XML simservs (Oip/r, Tip/r, Call Diversion, ICB, OCB ...) + Conference_type conference, + // if there is XML conf + Ims_cw cw, + // if there is XML cw (defined in X_3gpp_ns_cw_1_0.ttcn3view) + Cug cug, + // if there is XML cug (defined in org_etsi_uri__ngn_params_xml_simservs_xcap.ttcn3view) + TIMS3GPP ims3gpp, + // if there is XML IMS 3GPP + PSTN_transit pstnTransit, + // if there is XML PSTN_transit + Resource_lists resourceLists, + // if there is XML Resource List data + Reginfo regInfo, + // if it is a NG 112 event + Presence presence, // if it is a Presence Information Data Format Location Object + // if it is a registration event + Geopriv geopriv // if it is a Presence Information Data Format Location Object + } + } +} diff --git a/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..7b45b703def52265d5b7f5d3d66b4dca4bbfccbe --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn @@ -0,0 +1,389 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - CDIVN.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/comm-div-info" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_uri_etsi_org_ngn_params_xml_comm_div_info { + + +import from XSD all; + + +import from http_www_w3_org_XML_1998_namespace all; + + +/* This import brings in the XML language definition */ + + +/* Communication Diversion Information. This is the top-level XML element */ + + +type Comm_div_info_type Comm_div_info +with { + variant "name as 'comm-div-info'"; + variant "element"; +}; + + +/* Communication Diversion Information Type. This is the top-level XML element */ + + +type record Comm_div_info_type +{ + XSD.AnyURI entity, + Comm_div_subs_info_type comm_div_subs_info optional, + Comm_div_ntfy_info_type comm_div_ntfy_info optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-info-type'"; + variant (entity) "attribute"; + variant (comm_div_subs_info) "name as 'comm-div-subs-info'"; + variant (comm_div_ntfy_info) "name as 'comm-div-ntfy-info'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* - + Communication Diversion Subscription Type. + Used at Subscription time to + select Communication Diversions for notification, + when to notify them and + what to notify. */ + + +type record Comm_div_subs_info_type +{ + record of XSD.String attr optional, + Comm_div_selection_criteria_type comm_div_selection_criteria optional, + Comm_div_ntfy_trigger_criteria_type comm_div_ntfy_trigger_criteria optional, + Comm_div_info_selection_criteria_type comm_div_info_selection_criteria optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-subs-info-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (comm_div_selection_criteria) "name as 'comm-div-selection-criteria'"; + variant (comm_div_ntfy_trigger_criteria) "name as 'comm-div-ntfy-trigger-criteria'"; + variant (comm_div_info_selection_criteria) "name as 'comm-div-info-selection-criteria'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* - + Communication Diversion Notification Information Type + Used while notifying the User about the Communication Diversion */ + + +type record Comm_div_ntfy_info_type +{ + record of XSD.String attr optional, + User_info_type originating_user_info optional, + XSD.AnyURI diverting_user_info optional, + XSD.AnyURI diverted_to_user_info optional, + XSD.DateTime diversion_time_info optional, + Diversion_reason_info_type diversion_reason_info optional, + Diversion_rule_info_type diversion_rule_info optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-ntfy-info-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (originating_user_info) "name as 'originating-user-info'"; + variant (diverting_user_info) "name as 'diverting-user-info'"; + variant (diverted_to_user_info) "name as 'diverted-to-user-info'"; + variant (diversion_time_info) "name as 'diversion-time-info'"; + variant (diversion_reason_info) "name as 'diversion-reason-info'"; + variant (diversion_rule_info) "name as 'diversion-rule-info'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* COMMUNICATION DIVERSION SELECTION CRITERIA */ + + +type record Comm_div_selection_criteria_type +{ + record of XSD.String attr optional, + User_selection_criteria_type originating_user_selection_criteria optional, + XSD.AnyURI diverting_user_selection_criteria optional, + XSD.AnyURI diverted_to_user_selection_criteria optional, + Time_range_selection_criteria_type diversion_time_selection_criteria optional, + Diversion_reason_selection_criteria_type diversion_reason_selection_criteria optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (originating_user_selection_criteria) "name as 'originating-user-selection-criteria'"; + variant (diverting_user_selection_criteria) "name as 'diverting-user-selection-criteria'"; + variant (diverted_to_user_selection_criteria) "name as 'diverted-to-user-selection-criteria'"; + variant (diversion_time_selection_criteria) "name as 'diversion-time-selection-criteria'"; + variant (diversion_reason_selection_criteria) "name as 'diversion-reason-selection-criteria'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* COMMUNICATION DIVERSION NOTIFICATION TRIGGER CRITERIA */ + + +type record Comm_div_ntfy_trigger_criteria_type +{ + record of XSD.String attr optional, + Time_range_selection_criteria_type notification_time_selection_criteria optional, + Presence_status_selection_criteria_type presence_status_selection_criteria optional, + XSD.Integer notification_buffer_interval (-infinity .. 86400) optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-ntfy-trigger-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (notification_time_selection_criteria) "name as 'notification-time-selection-criteria'"; + variant (presence_status_selection_criteria) "name as 'presence-status-selection-criteria'"; + variant (notification_buffer_interval) "name as 'notification-buffer-interval'"; + variant (notification_buffer_interval) "defaultForEmpty as '86400'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* COMMUNICATION DIVERSION INFORMATION SELECTION CRITERIA */ + + +type record Comm_div_info_selection_criteria_type +{ + record of XSD.String attr optional, + XSD.Boolean disable_originating_user_info optional, + XSD.Boolean disable_diverting_user_info optional, + XSD.Boolean disable_diverted_to_user_info optional, + XSD.Boolean disable_diversion_time_info optional, + XSD.Boolean disable_diversion_reason_info optional, + XSD.Boolean disable_diversion_rule_info optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-info-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (disable_originating_user_info) "name as 'disable-originating-user-info'"; + variant (disable_originating_user_info) "defaultForEmpty as 'false'"; + //variant (disable_originating_user_info) "text 'true' as '1'"; + //variant (disable_originating_user_info) "text 'false' as '0'"; + variant (disable_diverting_user_info) "name as 'disable-diverting-user-info'"; + variant (disable_diverting_user_info) "defaultForEmpty as 'false'"; + //variant (disable_diverting_user_info) "text 'true' as '1'"; + //variant (disable_diverting_user_info) "text 'false' as '0'"; + variant (disable_diverted_to_user_info) "name as 'disable-diverted-to-user-info'"; + variant (disable_diverted_to_user_info) "defaultForEmpty as 'false'"; + //variant (disable_diverted_to_user_info) "text 'true' as '1'"; + //variant (disable_diverted_to_user_info) "text 'false' as '0'"; + variant (disable_diversion_time_info) "name as 'disable-diversion-time-info'"; + variant (disable_diversion_time_info) "defaultForEmpty as 'false'"; + //variant (disable_diversion_time_info) "text 'true' as '1'"; + //variant (disable_diversion_time_info) "text 'false' as '0'"; + variant (disable_diversion_reason_info) "name as 'disable-diversion-reason-info'"; + variant (disable_diversion_reason_info) "defaultForEmpty as 'false'"; + //variant (disable_diversion_reason_info) "text 'true' as '1'"; + //variant (disable_diversion_reason_info) "text 'false' as '0'"; + variant (disable_diversion_rule_info) "name as 'disable-diversion-rule-info'"; + variant (disable_diversion_rule_info) "defaultForEmpty as 'false'"; + //variant (disable_diversion_rule_info) "text 'true' as '1'"; + //variant (disable_diversion_rule_info) "text 'false' as '0'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* User Info Type */ + + +type record User_info_type +{ + record of XSD.String attr optional, + XSD.String user_name optional, + XSD.AnyURI user_URI +} +with { + variant "name as 'user-info-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (user_name) "name as 'user-name'"; + variant (user_URI) "name as 'user-URI'"; +}; + + +/* DIVERSION REASON INFO */ + + +type record of Diversion_reason_info_type Diversion_reason_info_types +with { + variant "name as 'diversion-reason-info-types'"; + variant "list"; +}; + + +type enumerated Diversion_reason_info_type +{ + int302(302), + int404(404), + int408(408), + int480(480), + int486(486), + int487(487), + int503(503) +} +with { + variant "useNumber"; + variant "name as 'diversion-reason-info-type'"; +}; + + +/* DIVERSION RULE INFO */ + + +type record Diversion_rule_info_type +{ + record of XSD.String attr optional, + XSD.String diversion_rule +} +with { + variant "name as 'diversion-rule-info-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (diversion_rule) "name as 'diversion-rule'"; +}; + + +/* ORIGINATING USER SELECTION CRITERIA */ + + +type record User_selection_criteria_type +{ + record of XSD.String attr optional, + record of User_info_type user_info_list +} +with { + variant "name as 'user-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (user_info_list) "untagged"; + variant (user_info_list[-]) "name as 'user-info'"; +}; + + +/* DIVERSION REASON SELECTION CRITERIA */ + + +type record Diversion_reason_selection_criteria_type +{ + record of XSD.String attr optional, + Diversion_reason_info_types diversion_reason_info +} +with { + variant "name as 'diversion-reason-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (diversion_reason_info) "name as 'diversion-reason-info'"; +}; + + +/* TIME RANGE SELECTION CRITERIA */ + + +type record Time_range_selection_criteria_type +{ + record of XSD.String attr optional, + record of Time_range_type time_range_list +} +with { + variant "name as 'time-range-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (time_range_list) "untagged"; + variant (time_range_list[-]) "name as 'time-range'"; +}; + + +/* TIME RANGE INFO */ + + +type record Time_range_type +{ + record of XSD.String attr optional, + XSD.DateTime start_time, + XSD.DateTime end_time +} +with { + variant "name as 'time-range-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (start_time) "name as 'start-time'"; + variant (end_time) "name as 'end-time'"; +}; + + +/* PRESENCE STATUS SELECTION CRITERIA */ + + +type record Presence_status_selection_criteria_type +{ + record of XSD.String attr optional, + record of Presence_status_info_type presence_status_info_list +} +with { + variant "name as 'presence-status-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (presence_status_info_list) "untagged"; + variant (presence_status_info_list[-]) "name as 'presence-status-info'"; +}; + + +/* PRESENCE STATUS INFo */ + + +type record Presence_status_info_type +{ + record of XSD.String attr optional, + XSD.String presence_status +} +with { + variant "name as 'presence-status-info-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (presence_status) "name as 'presence-status'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://uri.etsi.org/ngn/params/xml/comm-div-info' prefix 'tns'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..050f79154249d52cbe72e60b41e741bca888381e --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn @@ -0,0 +1,105 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - MCID.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/mcid" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_uri_etsi_org_ngn_params_xml_simservs_mcid { + + +import from XSD all; + + +/* XML Schema Definition to the mcid request-response to the Malicious Communication */ +/* Identification simulation service */ + + +/* Definition of simple types */ + + +type XSD.String BitType (pattern "[0-1]") +with { + variant "name as uncapitalized"; +}; + + +/* Definition of complex types */ + + +type record RequestType +{ + BitType mcidRequestIndicator, + BitType holdingIndicator +} +with { + variant "name as uncapitalized"; + variant (mcidRequestIndicator) "name as capitalized"; + variant (holdingIndicator) "name as capitalized"; +}; + + +type record ResponseType +{ + BitType mcidResponseIndicator, + BitType holdingProvidedIndicator +} +with { + variant "name as uncapitalized"; + variant (mcidResponseIndicator) "name as capitalized"; + variant (holdingProvidedIndicator) "name as capitalized"; +}; + + +/* Definition of document structure */ + + +type record Mcid +{ + union { + RequestType request, + ResponseType response + } choice +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (choice) "untagged"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://uri.etsi.org/ngn/params/xml/simservs/mcid'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..3d6f1fdeea7a208db46f8b05bb66adccf5c42df5 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn @@ -0,0 +1,689 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - PSTN.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/pstn" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_uri_etsi_org_ngn_params_xml_simservs_pstn { + + +import from XSD all; + + +/* XML Schema definition for mapping of some PSTN into SIP MIME Bodies */ + + +/* Definition of simple types */ + + +type XSD.String OneBitType (pattern "[0-1]"); + + +type XSD.String TwoBitType (pattern "[0-1][0-1]"); + + +type XSD.String ThreeBitType (pattern "[0-1][0-1][0-1]"); + + +type XSD.String FourBitType (pattern "[0-1][0-1][0-1][0-1]"); + + +type XSD.String FiveBitType (pattern "[0-1][0-1][0-1][0-1][0-1]"); + + +type XSD.String SixBitType (pattern "[0-1][0-1][0-1][0-1][0-1][0-1]"); + + +type XSD.String SevenBitType (pattern "[0-1][0-1][0-1][0-1][0-1][0-1][0-1]"); + + +/* Definition of complex types */ + + +/* Definition of BearerCapability Octets */ + + +type record BCOctet3Type +{ + TwoBitType codingStandard, + FiveBitType informationTransferCabability +} +with { + variant (codingStandard) "name as capitalized"; + variant (informationTransferCabability) "name as capitalized"; +}; + + +type record BCOctet4Type +{ + TwoBitType transferMode, + FiveBitType informationTransferRate +} +with { + variant (transferMode) "name as capitalized"; + variant (informationTransferRate) "name as capitalized"; +}; + + +type record BCOctet4_1Type +{ + SevenBitType rateMultiplier +} +with { + variant "name as 'BCOctet4-1Type'"; + variant (rateMultiplier) "name as capitalized"; +}; + + +type record BCOctet5Type +{ + TwoBitType layer1Identification, + FiveBitType userInfoLayer1Protocol +} +with { + variant (layer1Identification) "name as capitalized"; + variant (userInfoLayer1Protocol) "name as capitalized"; +}; + + +type record BCOctet5aType +{ + OneBitType synchronousAsynchronous, + OneBitType negotiation, + FiveBitType userRate +} +with { + variant (synchronousAsynchronous) "name as capitalized"; + variant (negotiation) "name as capitalized"; + variant (userRate) "name as capitalized"; +}; + + +type record BCOctet5bV110Type +{ + TwoBitType intermediateRate, + OneBitType nIConTX, + OneBitType nIConRX, + OneBitType flowControlOnTX, + OneBitType flowControlOnRX +} +with { + variant (intermediateRate) "name as capitalized"; + variant (nIConTX) "name as capitalized"; + variant (nIConRX) "name as capitalized"; + variant (flowControlOnTX) "name as capitalized"; + variant (flowControlOnRX) "name as capitalized"; +}; + + +type record BCOctet5bV120Type +{ + OneBitType rateAdaptionHeader, + OneBitType multipleFrameEstablishmentSupport, + OneBitType modeOfOperation, + OneBitType logicalLinkIdentifier, + OneBitType assignor, + OneBitType inbandOutbandNegotiation +} +with { + variant (rateAdaptionHeader) "name as capitalized"; + variant (multipleFrameEstablishmentSupport) "name as capitalized"; + variant (modeOfOperation) "name as capitalized"; + variant (logicalLinkIdentifier) "name as capitalized"; + variant (assignor) "name as capitalized"; + variant (inbandOutbandNegotiation) "name as capitalized"; +}; + + +type record BCOctet5cType +{ + TwoBitType numberOfStopBits, + TwoBitType numberOfDataBits, + ThreeBitType parity +} +with { + variant (numberOfStopBits) "name as capitalized"; + variant (numberOfDataBits) "name as capitalized"; + variant (parity) "name as capitalized"; +}; + + +type record BCOctet5dType +{ + OneBitType duplexMode, + SixBitType modemType +} +with { + variant (duplexMode) "name as capitalized"; + variant (modemType) "name as capitalized"; +}; + + +type record BCOctet6Type +{ + TwoBitType layer2Identification, + FiveBitType userInfoLayer2Protocol +} +with { + variant (layer2Identification) "name as capitalized"; + variant (userInfoLayer2Protocol) "name as capitalized"; +}; + + +type record BCOctet7Type +{ + TwoBitType layer3Identification, + FiveBitType userInfoLayer3Protocol +} +with { + variant (layer3Identification) "name as capitalized"; + variant (userInfoLayer3Protocol) "name as capitalized"; +}; + + +type record BCOctet7aType +{ + FourBitType additionalLayer3Info +} +with { + variant (additionalLayer3Info) "name as capitalized"; +}; + + +type record BCOctet7bType +{ + FourBitType additionalLayer3Info +} +with { + variant (additionalLayer3Info) "name as capitalized"; +}; + + +/* Definition of High Layer Compatibility Octets */ + + +type record HLOctet3Type +{ + TwoBitType codingStandard, + ThreeBitType interpretation, + TwoBitType presentationMethod +} +with { + variant (codingStandard) "name as capitalized"; + variant (interpretation) "name as capitalized"; + variant (presentationMethod) "name as capitalized"; +}; + + +type record HLOctet4Type +{ + SevenBitType highLayerCharacteristics +} +with { + variant (highLayerCharacteristics) "name as capitalized"; +}; + + +type record HLOctet4aMaintenanceType +{ + SevenBitType highLayerCharacteristics +} +with { + variant (highLayerCharacteristics) "name as capitalized"; +}; + + +type record HLOctet4aAudioType +{ + SevenBitType videoTelephonyCharacteristics +} +with { + variant (videoTelephonyCharacteristics) "name as capitalized"; +}; + + +/* Definition of Low Layer Compatibility Octets */ + + +type record LLOctet3Type +{ + TwoBitType codingStandard, + FiveBitType informationTransferCapability +} +with { + variant (codingStandard) "name as capitalized"; + variant (informationTransferCapability) "name as capitalized"; +}; + + +type record LLOctet3aType +{ + OneBitType negotiationIndicator +} +with { + variant (negotiationIndicator) "name as capitalized"; +}; + + +type record LLOctet4Type +{ + TwoBitType transferMode, + FiveBitType informationTransferRate +} +with { + variant (transferMode) "name as capitalized"; + variant (informationTransferRate) "name as capitalized"; +}; + + +type record LLOctet4_1Type +{ + SevenBitType rateMultiplier +} +with { + variant "name as 'LLOctet4-1Type'"; + variant (rateMultiplier) "name as capitalized"; +}; + + +type record LLOctet5Type +{ + TwoBitType layer1Identification, + FiveBitType userInfoLayer1Protocol +} +with { + variant (layer1Identification) "name as capitalized"; + variant (userInfoLayer1Protocol) "name as capitalized"; +}; + + +type record LLOctet5aType +{ + OneBitType synchronousAsynchronous, + OneBitType negotiation, + FiveBitType userRate +} +with { + variant (synchronousAsynchronous) "name as capitalized"; + variant (negotiation) "name as capitalized"; + variant (userRate) "name as capitalized"; +}; + + +type record LLOctet5bV110Type +{ + TwoBitType intermediateRate, + OneBitType nIConTX, + OneBitType nIConRX, + OneBitType flowControlOnTX, + OneBitType flowControlOnRX +} +with { + variant (intermediateRate) "name as capitalized"; + variant (nIConTX) "name as capitalized"; + variant (nIConRX) "name as capitalized"; + variant (flowControlOnTX) "name as capitalized"; + variant (flowControlOnRX) "name as capitalized"; +}; + + +type record LLOctet5bV120Type +{ + OneBitType rateAdaptionHeader, + OneBitType multipleFrameEstablishmentSupport, + OneBitType modeOfOperation, + OneBitType logicalLinkIdentifier, + OneBitType assignor, + OneBitType inbandOutbandNegotiation +} +with { + variant (rateAdaptionHeader) "name as capitalized"; + variant (multipleFrameEstablishmentSupport) "name as capitalized"; + variant (modeOfOperation) "name as capitalized"; + variant (logicalLinkIdentifier) "name as capitalized"; + variant (assignor) "name as capitalized"; + variant (inbandOutbandNegotiation) "name as capitalized"; +}; + + +type record LLOctet5cType +{ + TwoBitType numberOfStopBits, + TwoBitType numberOfDataBits, + ThreeBitType parity +} +with { + variant (numberOfStopBits) "name as capitalized"; + variant (numberOfDataBits) "name as capitalized"; + variant (parity) "name as capitalized"; +}; + + +type record LLOctet5dType +{ + OneBitType duplexMode, + SixBitType modemType +} +with { + variant (duplexMode) "name as capitalized"; + variant (modemType) "name as capitalized"; +}; + + +type record LLOctet6Type +{ + TwoBitType layer2Identification, + FiveBitType userInfoLayer2Protocol +} +with { + variant (layer2Identification) "name as capitalized"; + variant (userInfoLayer2Protocol) "name as capitalized"; +}; + + +type record LLOctet6aHDLCType +{ + TwoBitType mode +} +with { + variant (mode) "name as capitalized"; +}; + + +type record LLOctet6aUserSpecificType +{ + SevenBitType userSpecificLayer2Information +} +with { + variant (userSpecificLayer2Information) "name as capitalized"; +}; + + +type record LLOctet6bType +{ + SevenBitType windowSize +} +with { + variant (windowSize) "name as capitalized"; +}; + + +type record LLOctet7Type +{ + TwoBitType layer3Identification, + FiveBitType userInfoLayer3Protocol +} +with { + variant (layer3Identification) "name as capitalized"; + variant (userInfoLayer3Protocol) "name as capitalized"; +}; + + +type record LLOctet7aUserSpecificType +{ + SevenBitType optionalLayer3Information +} +with { + variant (optionalLayer3Information) "name as capitalized"; +}; + + +type record LLOctet7aX25Type +{ + TwoBitType mode +} +with { + variant (mode) "name as capitalized"; +}; + + +type record LLOctet7bX25Type +{ + FourBitType defaultPacketSize +} +with { + variant (defaultPacketSize) "name as capitalized"; +}; + + +type record LLOctet7cType +{ + SevenBitType packetWindowSize +} +with { + variant (packetWindowSize) "name as capitalized"; +}; + + +type record LLOctet7aTR9577Type +{ + FourBitType additionalLayer3Info +} +with { + variant (additionalLayer3Info) "name as capitalized"; +}; + + +type record LLOctet7bTR9577Type +{ + FourBitType additionalLayer3Info +} +with { + variant (additionalLayer3Info) "name as capitalized"; +}; + + +type record DispOctet3Type +{ + SevenBitType displayInformation +} +with { + variant (displayInformation) "name as capitalized"; +}; + + +/* Definition of the information elements */ + + +type record BearerCapabilityType +{ + BCOctet3Type bCoctet3, + BCOctet4Type bCoctet4, + BCOctet4_1Type bCoctet4_1 optional, + BCOctet5Type bCoctet5 optional, + BCOctet5aType bCoctet5a optional, + BCOctet5bV110Type bCoctet5bV110 optional, + BCOctet5bV120Type bCoctet5bV120 optional, + BCOctet5cType bCoctet5c optional, + BCOctet5dType bCoctet5d optional, + BCOctet6Type bCoctet6 optional, + BCOctet7Type bCoctet7 optional, + BCOctet7aType bCoctet7a optional, + BCOctet7bType bCoctet7b optional +} +with { + variant (bCoctet3) "name as capitalized"; + variant (bCoctet4) "name as capitalized"; + variant (bCoctet4_1) "name as 'BCoctet4-1'"; + variant (bCoctet5) "name as capitalized"; + variant (bCoctet5a) "name as capitalized"; + variant (bCoctet5bV110) "name as capitalized"; + variant (bCoctet5bV120) "name as capitalized"; + variant (bCoctet5c) "name as capitalized"; + variant (bCoctet5d) "name as capitalized"; + variant (bCoctet6) "name as capitalized"; + variant (bCoctet7) "name as capitalized"; + variant (bCoctet7a) "name as capitalized"; + variant (bCoctet7b) "name as capitalized"; +}; + + +type record HighLayerCompatibilityType +{ + HLOctet3Type hLOctet3, + HLOctet4Type hLOctet4, + HLOctet4aMaintenanceType hLOctet4aMaintenance optional, + HLOctet4aAudioType hLOctet4Audio optional +} +with { + variant (hLOctet3) "name as capitalized"; + variant (hLOctet4) "name as capitalized"; + variant (hLOctet4aMaintenance) "name as capitalized"; + variant (hLOctet4Audio) "name as capitalized"; +}; + + +type record LowLayerCompatibilityType +{ + LLOctet3Type lLOctet3, + LLOctet3aType lLOctet3a optional, + LLOctet4Type lLOctet4, + LLOctet4_1Type lLOctet4_1 optional, + LLOctet5Type lLOctet5 optional, + LLOctet5aType lLOctet5a optional, + LLOctet5bV110Type lLOctet5bV110 optional, + LLOctet5bV120Type lLOctet5bV120 optional, + LLOctet5cType lLOctet5c optional, + LLOctet5dType lLOctet5d optional, + LLOctet6Type lLOctet6 optional, + LLOctet6aHDLCType lLOctet6aHDLC optional, + LLOctet6aUserSpecificType lLOctet6aUserSpecific optional, + LLOctet6bType lLOctet6b optional, + LLOctet7Type lLOctet7, + LLOctet7aUserSpecificType lLOctet7aUserSpecific optional, + LLOctet7aX25Type lLOctet7aX25 optional, + LLOctet7bX25Type lLOctet7bX25 optional, + LLOctet7cType lLOctet7c optional, + LLOctet7aTR9577Type lLOctet7aTR9577 optional, + LLOctet7bTR9577Type lLOctet7bTR9577 optional +} +with { + variant (lLOctet3) "name as capitalized"; + variant (lLOctet3a) "name as capitalized"; + variant (lLOctet4) "name as capitalized"; + variant (lLOctet4_1) "name as 'LLOctet4-1'"; + variant (lLOctet5) "name as capitalized"; + variant (lLOctet5a) "name as capitalized"; + variant (lLOctet5bV110) "name as capitalized"; + variant (lLOctet5bV120) "name as capitalized"; + variant (lLOctet5c) "name as capitalized"; + variant (lLOctet5d) "name as capitalized"; + variant (lLOctet6) "name as capitalized"; + variant (lLOctet6aHDLC) "name as capitalized"; + variant (lLOctet6aUserSpecific) "name as capitalized"; + variant (lLOctet6b) "name as capitalized"; + variant (lLOctet7) "name as capitalized"; + variant (lLOctet7aUserSpecific) "name as capitalized"; + variant (lLOctet7aX25) "name as capitalized"; + variant (lLOctet7bX25) "name as capitalized"; + variant (lLOctet7c) "name as capitalized"; + variant (lLOctet7aTR9577) "name as capitalized"; + variant (lLOctet7bTR9577) "name as capitalized"; +}; + + +type record DisplayType +{ + DispOctet3Type dispOctet3 +} +with { + variant (dispOctet3) "name as capitalized"; +}; + + +/* Definition of progress indicator */ + + +type record ProgressOctet3Type +{ + TwoBitType codingStandard, + FourBitType location +} +with { + variant (codingStandard) "name as capitalized"; + variant (location) "name as capitalized"; +}; + + +type record ProgressOctet4Type +{ + SevenBitType progressDescription +} +with { + variant (progressDescription) "name as capitalized"; +}; + + +type record ProgressIndicatorType +{ + ProgressOctet3Type progressOctet3, + ProgressOctet4Type progressOctet4 +} +with { + variant (progressOctet3) "name as capitalized"; + variant (progressOctet4) "name as capitalized"; +}; + + +/* Definition of document structure */ + + +type record PSTN_transit +{ + record length(1 .. 2) of BearerCapabilityType bearerInfomationElement_list, + record length(0 .. 2) of HighLayerCompatibilityType highLayerCompatibility_list, + LowLayerCompatibilityType lowLayerCompatibility optional, + record of ProgressIndicatorType progressIndicator_list, + record of DisplayType display_list +} +with { + variant "name as 'PSTN-transit'"; + variant "element"; + variant (bearerInfomationElement_list) "untagged"; + variant (bearerInfomationElement_list[-]) "name as 'BearerInfomationElement'"; + variant (highLayerCompatibility_list) "untagged"; + variant (highLayerCompatibility_list[-]) "name as 'HighLayerCompatibility'"; + variant (lowLayerCompatibility) "name as capitalized"; + variant (progressIndicator_list) "untagged"; + variant (progressIndicator_list[-]) "name as 'ProgressIndicator'"; + variant (display_list) "untagged"; + variant (display_list[-]) "name as 'Display'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://uri.etsi.org/ngn/params/xml/simservs/pstn'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..230df4ed31db3008125236a22d1fd5132e0c4ffd --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn @@ -0,0 +1,621 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - ACR_CB.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - CDIV.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - OIP-OIR.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - SupplementaryServices.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - TIP-TIR.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - cug.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - simservs.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_uri_etsi_org_ngn_params_xml_simservs_xcap { + + +import from XSD all; + + +import from urn_ietf_params_xml_ns_common_policy all; + + +import from urn_oma_xml_xdm_common_policy all; + + +/* import common policy definitions */ + + +/* import OMA common policy extensions */ + + +/* incoming communication barring rule set based on the common policy rule set. */ + + +/* This is the incoming communication barring configuration */ +/* document. */ +/* add service specific elements here */ +/* service specific attributes can be defined here */ +type record Incoming_communication_barring +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + Ruleset ruleset optional +} +with { + variant "name as 'incoming-communication-barring'"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; + variant (ruleset) "namespace as 'urn:ietf:params:xml:ns:common-policy' prefix 'cp'"; +}; + + +/* outgoing communication barring rule set based on the common policy rule set. */ + + +/* This is the outgoing communication barring configuration */ +/* document. */ +/* add service specific elements here */ +/* service specific attributes can be defined here */ +type record Outgoing_communication_barring +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + Ruleset ruleset optional +} +with { + variant "name as 'outgoing-communication-barring'"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; + variant (ruleset) "namespace as 'urn:ietf:params:xml:ns:common-policy' prefix 'cp'"; +}; + + +/* communication barring specific extensions to IETF common policy actions */ + + +type Allow_action_type Allow +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +/* communication barring specific type declarations */ + + +/* */ + + +type XSD.Boolean Allow_action_type +with { + variant "name as 'allow-action-type'"; + //variant "text 'true' as '1'"; + //variant "text 'false' as '0'"; +}; + + +/* import common policy definitions */ + + +/* import OMA common policy extensions */ + + +/* communication diversion specific extensions to IETF common policy conditions. The +cp:conditionsType is expanded with the elements: ss:not-registered, ss:busy, ss:no-answer, ss:notreachable, +ss:media as optional elements */ + + +/* communication diversion rule set based on the common policy rule set. */ + + +/* This is the communication diversion configuration */ +/* document. */ +/* add service specific elements here */ +/* service specific attributes can be defined here */ +type record Communication_diversion +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + Ruleset ruleset optional +} +with { + variant "name as 'communication-diversion'"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; + variant (ruleset) "namespace as 'urn:ietf:params:xml:ns:common-policy' prefix 'cp'"; +}; + + +/* communication diversion specific extensions to IETF common policy actions */ + + +type Forward_to_type Forward_to +with { + variant "name as 'forward-to'"; + variant "element"; +}; + + +type enumerated Reveal_URIoptions_type +{ + false_, + not_reveal_GRUU, + true_ +} +with { + variant "text 'false_' as 'false'"; + variant "text 'not_reveal_GRUU' as 'not-reveal-GRUU'"; + variant "text 'true_' as 'true'"; + variant "name as 'reveal-URIoptions-type'"; +}; + + +/* communication diversion specific type declarations */ + + +type record Forward_to_type +{ + XSD.AnyURI target, + XSD.Boolean notify_caller optional, + Reveal_URIoptions_type reveal_identity_to_caller optional, + Reveal_URIoptions_type reveal_served_user_identity_to_caller optional, + XSD.Boolean notify_served_user optional, + XSD.Boolean notify_served_user_on_outbound_call optional, + Reveal_URIoptions_type reveal_identity_to_target optional, + NoReplyTimer noReplyTimer optional +} +with { + variant "name as 'forward-to-type'"; + variant (notify_caller) "name as 'notify-caller'"; + variant (notify_caller) "defaultForEmpty as 'true'"; + //variant (notify_caller) "text 'true' as '1'"; + //variant (notify_caller) "text 'false' as '0'"; + variant (reveal_identity_to_caller) "name as 'reveal-identity-to-caller'"; + variant (reveal_identity_to_caller) "defaultForEmpty as 'true'"; + variant (reveal_served_user_identity_to_caller) "name as 'reveal-served-user-identity-to-caller'"; + variant (reveal_served_user_identity_to_caller) "defaultForEmpty as 'true'"; + variant (notify_served_user) "name as 'notify-served-user'"; + variant (notify_served_user) "defaultForEmpty as 'false'"; + //variant (notify_served_user) "text 'true' as '1'"; + //variant (notify_served_user) "text 'false' as '0'"; + variant (notify_served_user_on_outbound_call) "name as 'notify-served-user-on-outbound-call'"; + variant (notify_served_user_on_outbound_call) "defaultForEmpty as 'false'"; + //variant (notify_served_user_on_outbound_call) "text 'true' as '1'"; + //variant (notify_served_user_on_outbound_call) "text 'false' as '0'"; + variant (reveal_identity_to_target) "name as 'reveal-identity-to-target'"; + variant (reveal_identity_to_target) "defaultForEmpty as 'true'"; + variant (noReplyTimer) "name as capitalized"; +}; + + +type XSD.PositiveInteger NoReplyTimer (5 .. 180) +with { + variant "element"; +}; + + +/* Originating Identity presentation Restriction */ +type record Originating_identity_presentation_restriction +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + enumerated { + presentation_restricted, + presentation_not_restricted + } default_behaviour optional +} +with { + variant "name as 'originating--identity--presentation--restriction'"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; + variant (default_behaviour) "name as 'default--behaviour'"; + variant (default_behaviour) "defaultForEmpty as 'presentation--restricted'"; + variant (default_behaviour) "text 'presentation_not_restricted' as 'presentation--not--restricted'"; + variant (default_behaviour) "text 'presentation_restricted' as 'presentation--restricted'"; +}; + + +/* Originating Identity Presentation */ +type SimservType Originating_identity_presentation +with { + variant "name as 'originating--identity--presentation'"; + variant "element"; +}; + + +/* Terminating Identity presentation Restriction */ +type record Terminating_identity_presentation_restriction +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + enumerated { + presentation_restricted, + presentation_not_restricted + } default_behaviour optional +} +with { + variant "name as 'terminating-identity-presentation-restriction'"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; + variant (default_behaviour) "name as 'default-behaviour'"; + variant (default_behaviour) "defaultForEmpty as 'presentation-restricted'"; + variant (default_behaviour) "text 'presentation_not_restricted' as 'presentation-not-restricted'"; + variant (default_behaviour) "text 'presentation_restricted' as 'presentation-restricted'"; +}; + + +/* Terminating Identity Presentation */ +type SimservType Terminating_identity_presentation +with { + variant "name as 'terminating-identity-presentation'"; + variant "element"; +}; + + +/* XML Schema Definition for the closed user group */ +/* parameter */ + + +/* Definition of simple types */ + + +type XSD.String TwobitType (pattern "[0-1][0-1]") +with { + variant "name as uncapitalized"; +}; + + +type XSD.HexBinary NetworkIdentityType length(1) +with { + variant "name as uncapitalized"; +}; + + +type XSD.HexBinary SixteenbitType length(2) +with { + variant "name as uncapitalized"; +}; + + +type XSD.Integer CugIndexType (0 .. 32767) +with { + variant "name as uncapitalized"; +}; + + +/* Definition of complex types */ + + +type record CugRequestType +{ + XSD.Boolean outgoingAccessRequest, + CugIndexType cugIndex +} +with { + variant "name as uncapitalized"; + //variant (outgoingAccessRequest) "text 'true' as '1'"; + //variant (outgoingAccessRequest) "text 'false' as '0'"; +}; + + +/* Definition of document structure */ + + +type record Cug +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + CugRequestType cugCallOperation optional, + NetworkIdentityType networkIndicator optional, + SixteenbitType cugInterlockBinaryCode optional, + TwobitType cugCommunicationIndicator optional +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; +}; + + +/* The element "simservs" maps to the Common Parts of an NGN PSTN/ISDN Simulation services document */ + + +/* XML Schema for data manipulation of ETSI */ +/* NGN PSTN/ISDN Simulation Services */ +/* xs:group ref="ss:absServiceGroup" minOccurs="0" maxOccurs="unbounded" / */ +type record Simservs +{ + record of XSD.String attr optional, + record of AbsService_group absService_list, + record { + record of XSD.String elem_list + } extensions optional +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (attr) "anyAttributes"; + variant (absService_list) "untagged"; + variant (extensions.elem_list) "untagged"; + variant (extensions.elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/simservs/xcap'"; +}; + + +type record SimservType +{ + XSD.Boolean active optional, + record of XSD.String attr optional +} +with { + variant "name as uncapitalized"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; +}; + + +/* service specific IETF common policy condition elements */ + + +type Empty_element_type Anonymous +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type Presence_status_activity_type Presence_status +with { + variant "name as 'presence-status'"; + variant "element"; +}; + + +type Media_type1 Media +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type Empty_element_type Communication_diverted +with { + variant "name as 'communication-diverted'"; + variant "element"; +}; + + +type Empty_element_type Rule_deactivated +with { + variant "name as 'rule-deactivated'"; + variant "element"; +}; + + +type Empty_element_type Not_registered +with { + variant "name as 'not-registered'"; + variant "element"; +}; + + +type Empty_element_type Busy +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type Empty_element_type No_answer +with { + variant "name as 'no-answer'"; + variant "element"; +}; + + +type Empty_element_type Not_reachable +with { + variant "name as 'not-reachable'"; + variant "element"; +}; + + +type Empty_element_type Roaming +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +/* service specific type declarations */ + + +type XSD.String Media_type1 +with { + variant "name as 'media-type1'"; +}; + + +type XSD.String Presence_status_activity_type +with { + variant "name as 'presence-status-activity-type'"; +}; + + +type record Empty_element_type +{ + +} +with { + variant "name as 'empty-element-type'"; +}; + + +/* ETSI substitutionGroup workaround, because TTCN-3 does not support mapping of substitutionGroup */ + + +/* xs:group name="absServiceGroup"> + + + + */ + + +/* /xs:choice */ + + +/* /xs:group */ + + +type union AbsService_group +{ + SimservType absService, + /* This is the communication diversion configuration */ + /* document. */ + /* add service specific elements here */ + /* service specific attributes can be defined here */ + Communication_diversion communication_diversion, + Cug cug, + /* This is the incoming communication barring configuration */ + /* document. */ + /* add service specific elements here */ + /* service specific attributes can be defined here */ + Incoming_communication_barring incoming_communication_barring, + /* Originating Identity Presentation */ + Originating_identity_presentation originating_identity_presentation, + /* Originating Identity presentation Restriction */ + Originating_identity_presentation_restriction originating_identity_presentation_restriction, + /* This is the outgoing communication barring configuration */ + /* document. */ + /* add service specific elements here */ + /* service specific attributes can be defined here */ + Outgoing_communication_barring outgoing_communication_barring, + /* Terminating Identity Presentation */ + Terminating_identity_presentation terminating_identity_presentation, + /* Terminating Identity presentation Restriction */ + Terminating_identity_presentation_restriction terminating_identity_presentation_restriction +} +with { + variant "untagged"; + variant (absService) "form as qualified"; + variant (absService) "abstract"; + variant (communication_diversion) "name as 'communication-diversion'"; + variant (incoming_communication_barring) "name as 'incoming-communication-barring'"; + variant (originating_identity_presentation) "name as 'originating--identity--presentation'"; + variant (originating_identity_presentation_restriction) "name as 'originating--identity--presentation--restriction'"; + variant (outgoing_communication_barring) "name as 'outgoing-communication-barring'"; + variant (terminating_identity_presentation) "name as 'terminating-identity-presentation'"; + variant (terminating_identity_presentation_restriction) "name as 'terminating-identity-presentation-restriction'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://uri.etsi.org/ngn/params/xml/simservs/xcap' prefix 'ss'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/http_www_opengis_net_gml.ttcn b/ttcn/patch_lib_sip_titan/http_www_opengis_net_gml.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..169c8c830fc35fd091f93590ba244d68f4862f22 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_www_opengis_net_gml.ttcn @@ -0,0 +1,1008 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4A +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: http_www_opengis_net_gml.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Jul 3 08:58:44 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - basicTypes.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - gmlBase.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - measures.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - geometryBasic0d1d.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - geometryBasic2d.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - geometryPrimitives.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_opengis_net_gml { + + +import from XSD all; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type enumerated SignType +{ + x, + x_1 +} +with { + variant "text 'x' as '-'"; + variant "text 'x_1' as '+'"; +}; + + +type record of XSD.Boolean BooleanList +with { + variant "name as uncapitalized"; + variant "list"; + //variant "text 'true' as '1'"; + //variant "text 'false' as '0'"; +}; + + +type record of XSD.Name NameList +with { + variant "list"; +}; + + +type record of XSD.Double DoubleList +with { + variant "name as uncapitalized"; + variant "list"; +}; + + +type record of XSD.Integer IntegerList +with { + variant "name as uncapitalized"; + variant "list"; +}; + + +type record MeasureType +{ + XSD.AnyURI uom, + XSD.Double base +} +with { + variant (uom) "attribute"; + variant (base) "untagged"; +}; + + +type record of XSD.NCName NCNameList +with { + variant "list"; +}; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type record AbstractGMLType +{ + Id id optional +} +with { + variant "abstract"; + variant (id) "attribute"; +}; + + +type XSD.ID Id +with { + variant "name as uncapitalized"; + variant "attribute"; +}; +/* + +type union Object_group +{ + XSD.AnyType object, + GML_group gML +} +with { + variant "untagged"; + variant (object) "name as '_Object'"; + variant (object) "form as qualified"; + variant (object) "abstract"; + variant (gML) "name as '_GML'"; +}; + + +type union GML_group +{ + AbstractGMLType gML, + Geometry_group geometry +} +with { + variant "untagged"; + variant (gML) "name as '_GML'"; + variant (gML) "form as qualified"; + variant (gML) "abstract"; + variant (geometry) "name as '_Geometry'"; +}; + +*/ +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type MeasureType Measure +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type MeasureType LengthType; + + +type MeasureType Angle +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type MeasureType AngleType; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ +/* + +type record GeometryPropertyType +{ + Geometry_group geometry +} +with { + variant (geometry) "name as '_Geometry'"; +}; + + + +type record GeometryArrayPropertyType +{ + record of Geometry_group geometry_list +} +with { + variant (geometry_list) "untagged"; + variant (geometry_list[-]) "name as '_Geometry'"; +}; +*/ + +type record AbstractGeometryType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional +} +with { + variant "abstract"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type AbstractGeometryType AbstractGeometricPrimitiveType +with { + variant "abstract"; +}; + + +type PointType Point +with { + variant "name as 'Point'"; + variant "element"; +}; + + +type record PointType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Pos pos +} +with { + variant "name as uncapitalized"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type PointPropertyType PointProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record PointPropertyType +{ + Point point +} +with { + variant (point) "name as capitalized"; +}; + + +type AbstractGeometricPrimitiveType AbstractCurveType +with { + variant "abstract"; +}; + + +type CurvePropertyType CurveProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record CurvePropertyType +{ + Curve_group curve +} +with { + variant (curve) "name as '_Curve'"; +}; + + +type LineStringType LineString +with { + variant "name as 'LinearRing'"; + variant "element"; +}; + + +type record LineStringType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + union { + record length(2 .. infinity) of union { + Pos pos, + PointProperty pointProperty + } choice_list, + PosList posList + } choice +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; + variant (choice) "untagged"; + variant (choice.choice_list) "untagged"; + variant (choice.choice_list[-]) "untagged"; +}; + + +type DirectPositionType Pos +with { + variant "name as 'pos'"; + variant "element"; +}; + + +type DoubleList DirectPositionType; + + +type DirectPositionListType PosList +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record DirectPositionListType +{ + XSD.PositiveInteger count optional, + DoubleList base +} +with { + variant (count) "attribute"; + variant (base) "untagged"; +}; + + +type EnvelopeType Envelope +with { + variant "element"; +}; + + +type record EnvelopeType +{ + NCNameList axisLabels optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + union { + record { + DirectPositionType lowerCorner, + DirectPositionType upperCorner + } sequence, + record length(2) of Pos pos_list + } choice +} +with { + variant (axisLabels) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; + variant (choice) "untagged"; + variant (choice.sequence) "untagged"; + variant (choice.pos_list) "untagged"; + variant (choice.pos_list[-]) "name as 'pos'"; +}; + +/* + +type union Geometry_group +{ + AbstractGeometryType geometry, + GeometricPrimitive_group geometricPrimitive, + Ring_group ring +} +with { + variant "untagged"; + variant (geometry) "name as '_Geometry'"; + variant (geometry) "form as qualified"; + variant (geometry) "abstract"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (ring) "name as '_Ring'"; +}; + + +type union GeometricPrimitive_group +{ + AbstractGeometricPrimitiveType geometricPrimitive, + Curve_group curve, + Point point, + Solid_group solid, + Surface_group_1 surface +} +with { + variant "untagged"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (geometricPrimitive) "form as qualified"; + variant (geometricPrimitive) "abstract"; + variant (curve) "name as '_Curve'"; + variant (point) "name as capitalized"; + variant (solid) "name as '_Solid'"; + variant (surface) "name as '_Surface'"; +}; + +*/ +type union Curve_group +{ + AbstractCurveType curve, + Curve curve_1, + LineString lineString +} +with { + variant "untagged"; + variant (curve) "name as '_Curve'"; + variant (curve) "form as qualified"; + variant (curve) "abstract"; + variant (curve_1) "name as 'Curve'"; + variant (lineString) "name as capitalized"; +}; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type AbstractGeometricPrimitiveType AbstractSurfaceType; + +/* +type SurfacePropertyType SurfaceProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record SurfacePropertyType +{ + Surface_group_1 surface +} +with { + variant (surface) "name as '_Surface'"; +}; + +*/ + + +type PolygonType Polygon +with { + variant "element"; +}; + + +type record PolygonType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Exterior exterior optional +} +with { + variant "name as 'Polygon'"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type AbstractGeometryType AbstractRingType +with { + variant "abstract"; +}; + + +type AbstractRingPropertyType Exterior +with { + variant "name as 'exterior'"; + variant "element"; +}; + + +type record AbstractRingPropertyType +{ + Ring_group ring +} +with { + variant "name as 'exterior'"; + variant (ring) "name as '_Ring'"; +}; + + +type LinearRingType LinearRing +with { + variant "name as 'LinearRing'"; + variant "element"; +}; + + +type record LinearRingType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + union { + record length(4 .. infinity) of union { + Pos pos, + PointProperty pointProperty + } choice_list, + PosList posList + } choice +} +with { + variant "name as 'LinearRing'"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; + variant (choice) "untagged"; + variant (choice.choice_list) "untagged"; + variant (choice.choice_list[-]) "untagged"; + variant (choice.choice_list[-].pos[-]) "name as 'pos'"; +}; + +/* +type union Surface_group_1 +{ + AbstractSurfaceType surface, + ArcBand arcBand, + Circle circle, + Ellipse ellipse, + Polygon polygon, + Surface_group surface_1 +} +with { + variant "untagged"; + variant (surface) "name as '_Surface'"; + variant (surface) "form as qualified"; + variant (surface) "abstract"; + variant (arcBand) "name as capitalized"; + variant (circle) "name as capitalized"; + variant (ellipse) "name as capitalized"; + variant (polygon) "name as capitalized"; + variant (surface_1) "name as 'Surface'"; +}; + +*/ +type union Ring_group +{ + AbstractRingType ring, + LinearRing linearRing +} +with { + variant "untagged"; + variant (ring) "name as '_Ring'"; + variant (ring) "form as qualified"; + variant (ring) "abstract"; + variant (linearRing) "name as capitalized"; +}; + + +const XSD.Integer c_defaultForEmpty_1 := 0; + + +const CurveInterpolationType c_defaultForEmpty_2 := linear; + + +const CurveInterpolationType c_defaultForEmpty_3 := circularArcCenterPointWithRadius; + + +const XSD.Integer c_defaultForEmpty_4 := 1; + + +const SurfaceInterpolationType c_defaultForEmpty_5 := planar; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type CurveType Curve +with { + variant "element"; +}; + + +type record CurveType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Segments segments +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type record AbstractCurveSegmentType +{ + XSD.Integer numDerivativeInterior optional, + XSD.Integer numDerivativesAtEnd optional, + XSD.Integer numDerivativesAtStart optional +} +with { + variant "abstract"; + variant (numDerivativeInterior) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativeInterior) "attribute"; + variant (numDerivativesAtEnd) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtEnd) "attribute"; + variant (numDerivativesAtStart) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtStart) "attribute"; +}; + + +type CurveSegmentArrayPropertyType Segments +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record CurveSegmentArrayPropertyType +{ + record of CurveSegment_group curveSegment_list +} +with { + variant (curveSegment_list) "untagged"; + variant (curveSegment_list[-]) "name as '_CurveSegment'"; +}; + + +type LineStringSegmentType LineStringSegment +with { + variant "element"; +}; + + +type record LineStringSegmentType +{ + CurveInterpolationType interpolation (c_defaultForEmpty_2) optional, + XSD.Integer numDerivativeInterior optional, + XSD.Integer numDerivativesAtEnd optional, + XSD.Integer numDerivativesAtStart optional, + union { + record length(2 .. infinity) of union { + Pos pos, + PointProperty pointProperty + } choice_list, + PosList posList + } choice +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_2"; + variant (interpolation) "attribute"; + variant (numDerivativeInterior) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativeInterior) "attribute"; + variant (numDerivativesAtEnd) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtEnd) "attribute"; + variant (numDerivativesAtStart) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtStart) "attribute"; + variant (choice) "untagged"; + variant (choice.choice_list) "untagged"; + variant (choice.choice_list[-]) "untagged"; +}; + + +type record ArcByCenterPointType +{ + CurveInterpolationType interpolation (c_defaultForEmpty_3) optional, + XSD.Integer numArc (c_defaultForEmpty_4), + XSD.Integer numDerivativeInterior optional, + XSD.Integer numDerivativesAtEnd optional, + XSD.Integer numDerivativesAtStart optional, + union { + Pos pos, + PointProperty pointProperty + } choice, + LengthType radius, + AngleType startAngle optional, + AngleType endAngle optional +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_3"; + variant (interpolation) "attribute"; + variant (numArc) "defaultForEmpty as c_defaultForEmpty_4"; + variant (numArc) "attribute"; + variant (numDerivativeInterior) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativeInterior) "attribute"; + variant (numDerivativesAtEnd) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtEnd) "attribute"; + variant (numDerivativesAtStart) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtStart) "attribute"; + variant (choice) "untagged"; +}; + + +type CircleByCenterPointType CircleByCenterPoint +with { + variant "element"; +}; + + +type ArcByCenterPointType CircleByCenterPointType; + + +type record SurfaceType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Patches_group patches +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type record AbstractSurfacePatchType +{ + +} +with { + variant "abstract"; +}; + + +type record SurfacePatchArrayPropertyType +{ + record of record { + SurfacePatch_group surfacePatch + } sequence_list +} +with { + variant (sequence_list) "untagged"; + variant (sequence_list[-]) "untagged"; + variant (sequence_list[-].surfacePatch) "name as '_SurfacePatch'"; +}; + + +type PolygonPatchType PolygonPatch +with { + variant "element"; +}; + + +type record PolygonPatchType +{ + SurfaceInterpolationType interpolation (c_defaultForEmpty_5) optional, + Exterior exterior optional +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_5"; + variant (interpolation) "attribute"; +}; + + +type RectangleType Rectangle +with { + variant "element"; +}; + + +type record RectangleType +{ + SurfaceInterpolationType interpolation (c_defaultForEmpty_5) optional, + Exterior exterior +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_5"; + variant (interpolation) "attribute"; +}; + + +type PolyhedralSurfaceType PolyhedralSurface +with { + variant "element"; +}; + + +type record PolyhedralSurfaceType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type PolygonPatchArrayPropertyType PolygonPatches +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type SurfacePatchArrayPropertyType PolygonPatchArrayPropertyType; + + +type AbstractGeometricPrimitiveType AbstractSolidType; + +/* +type SolidType Solid +with { + variant "element"; +}; + + +type record SolidType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + SurfacePropertyType exterior optional +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + +*/ +type enumerated CurveInterpolationType +{ + circularArc3Points, + circularArcCenterPointWithRadius, + geodesic, + linear +}; + + +type enumerated SurfaceInterpolationType +{ + planar +}; + + +type union CurveSegment_group +{ + AbstractCurveSegmentType curveSegment, + ArcByCenterPoint_group arcByCenterPoint, + LineStringSegment lineStringSegment +} +with { + variant "untagged"; + variant (curveSegment) "name as '_CurveSegment'"; + variant (curveSegment) "form as qualified"; + variant (curveSegment) "abstract"; + variant (arcByCenterPoint) "name as capitalized"; + variant (lineStringSegment) "name as capitalized"; +}; + + +type union ArcByCenterPoint_group +{ + ArcByCenterPointType arcByCenterPoint, + CircleByCenterPoint circleByCenterPoint +} +with { + variant "untagged"; + variant (arcByCenterPoint) "name as capitalized"; + variant (arcByCenterPoint) "form as qualified"; + variant (circleByCenterPoint) "name as capitalized"; +}; + + +type union SurfacePatch_group +{ + AbstractSurfacePatchType surfacePatch, + PolygonPatch polygonPatch, + Rectangle rectangle +} +with { + variant "untagged"; + variant (surfacePatch) "name as '_SurfacePatch'"; + variant (surfacePatch) "form as qualified"; + variant (surfacePatch) "abstract"; + variant (polygonPatch) "name as capitalized"; + variant (rectangle) "name as capitalized"; +}; + + +type union Surface_group +{ + SurfaceType surface, + PolyhedralSurface polyhedralSurface +} +with { + variant "untagged"; + variant (surface) "name as capitalized"; + variant (surface) "form as qualified"; + variant (polyhedralSurface) "name as capitalized"; +}; + + +type union Patches_group +{ + SurfacePatchArrayPropertyType patches, + PolygonPatches polygonPatches +} +with { + variant "untagged"; + variant (patches) "form as qualified"; +}; + +/* +type union Solid_group +{ + AbstractSolidType solid, + Ellipsoid ellipsoid, + Prism prism, + Solid solid_1, + Sphere sphere +} +with { + variant "untagged"; + variant (solid) "name as '_Solid'"; + variant (solid) "form as qualified"; + variant (solid) "abstract"; + variant (ellipsoid) "name as capitalized"; + variant (prism) "name as capitalized"; + variant (solid_1) "name as 'Solid'"; + variant (sphere) "name as capitalized"; +}; +*/ + +} +with { + encode "XML"; + variant "namespace as 'http://www.opengis.net/gml' prefix 'gml'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/http_www_opengis_net_pidflo_1_0.ttcn b/ttcn/patch_lib_sip_titan/http_www_opengis_net_pidflo_1_0.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..dbdcb7d542eff17e90cac78e430783e1331df964 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_www_opengis_net_pidflo_1_0.ttcn @@ -0,0 +1,409 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4A +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: http_www_opengis_net_pidflo_1_0.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Jul 3 08:58:44 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - GML-pidf-lo-shape.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/pidflo/1.0" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_opengis_net_pidflo_1_0 { + + +import from XSD all; + + +import from http_www_opengis_net_gml all; + + +/* This document defines geodetic shape types for PIDF-LO. + + Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type CircleType Circle +with { + variant "name as 'Circle'"; + variant "element"; +}; + + +type record CircleType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType radius +} +with { + variant "name as uncapitalized"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type EllipseType Ellipse +with { + variant "element"; +}; + + +type record EllipseType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType semiMajorAxis, + LengthType semiMinorAxis, + AngleType orientation +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type ArcBandType ArcBand +with { + variant "element"; +}; + + +type record ArcBandType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType innerRadius, + LengthType outerRadius, + AngleType startAngle, + AngleType openingAngle +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type PrismType Prism +with { + variant "element"; +}; + + +type record PrismType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + SurfacePropertyType base, + LengthType height +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type SphereType Sphere +with { + variant "element"; +}; + + +type record SphereType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType radius +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type EllipsoidType Ellipsoid +with { + variant "element"; +}; + + +type record EllipsoidType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType semiMajorAxis, + LengthType semiMinorAxis, + LengthType verticalAxis, + AngleType orientation +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type union CenterGroup +{ + Pos pos, + PointProperty pointProperty +} +with { + variant "untagged"; + variant (pos) "namespace as 'http://www.opengis.net/gml' prefix 'gml'"; + variant (pointProperty) "namespace as 'http://www.opengis.net/gml' prefix 'gml'"; +}; + + + + + +type union Object_group +{ + XSD.AnyType object, + GML_group gML +} +with { + variant "untagged"; + variant (object) "name as '_Object'"; + variant (object) "form as qualified"; + variant (object) "abstract"; + variant (gML) "name as '_GML'"; +}; + + +type union GML_group +{ + AbstractGMLType gML, + Geometry_group geometry +} +with { + variant "untagged"; + variant (gML) "name as '_GML'"; + variant (gML) "form as qualified"; + variant (gML) "abstract"; + variant (geometry) "name as '_Geometry'"; +}; + + +type record GeometryPropertyType +{ + Geometry_group geometry +} +with { + variant (geometry) "name as '_Geometry'"; +}; + + +type record GeometryArrayPropertyType +{ + record of Geometry_group geometry_list +} +with { + variant (geometry_list) "untagged"; + variant (geometry_list[-]) "name as '_Geometry'"; +}; + +type union Geometry_group +{ + AbstractGeometryType geometry, + GeometricPrimitive_group geometricPrimitive, + Ring_group ring +} +with { + variant "untagged"; + variant (geometry) "name as '_Geometry'"; + variant (geometry) "form as qualified"; + variant (geometry) "abstract"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (ring) "name as '_Ring'"; +}; + + +type union GeometricPrimitive_group +{ + AbstractGeometricPrimitiveType geometricPrimitive, + Curve_group curve, + Point point, + Solid_group solid, + Surface_group_1 surface +} +with { + variant "untagged"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (geometricPrimitive) "form as qualified"; + variant (geometricPrimitive) "abstract"; + variant (curve) "name as '_Curve'"; + variant (point) "name as capitalized"; + variant (solid) "name as '_Solid'"; + variant (surface) "name as '_Surface'"; +}; + +type SolidType Solid +with { + variant "element"; +}; + + +type record SolidType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + SurfacePropertyType exterior optional +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type union Solid_group +{ + AbstractSolidType solid, + Ellipsoid ellipsoid, + Prism prism, + Solid solid_1, + Sphere sphere +} +with { + variant "untagged"; + variant (solid) "name as '_Solid'"; + variant (solid) "form as qualified"; + variant (solid) "abstract"; + variant (ellipsoid) "name as capitalized"; + variant (prism) "name as capitalized"; + variant (solid_1) "name as 'Solid'"; + variant (sphere) "name as capitalized"; +}; + + +type SurfacePropertyType SurfaceProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record SurfacePropertyType +{ + Surface_group_1 surface +} +with { + variant (surface) "name as '_Surface'"; +}; + + +type union Surface_group_1 +{ + AbstractSurfaceType surface, + ArcBand arcBand, + Circle circle, + Ellipse ellipse, + Polygon polygon, + Surface_group surface_1 +} +with { + variant "untagged"; + variant (surface) "name as '_Surface'"; + variant (surface) "form as qualified"; + variant (surface) "abstract"; + variant (arcBand) "name as capitalized"; + variant (circle) "name as capitalized"; + variant (ellipse) "name as capitalized"; + variant (polygon) "name as capitalized"; + variant (surface_1) "name as 'Surface'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://www.opengis.net/pidflo/1.0' prefix 'gs'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/module.mk b/ttcn/patch_lib_sip_titan/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..fd0780a061afafb968bb95ef15ce7f64161f89a4 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/module.mk @@ -0,0 +1,35 @@ +sources := \ + ttcn/LibSip_Library.ttcn \ + ttcn/LibSip_Interface.ttcn \ + ../patch_lib_sip_titan/LibSip_SDPTypes.ttcn \ + ../patch_lib_sip_titan/LibSip_XMLTypes.ttcn \ + ../patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn \ + ../patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn \ + ../patch_lib_sip_titan/LibSip_SMSFunctions.ttcn \ + ../patch_lib_sip_titan/LibSip_Common.ttcn \ + ../patch_lib_sip_titan/LibSip_SMSTemplates.ttcn \ + ../patch_lib_sip_titan/LibSip_EncdecDeclarations.ttcn \ + ../patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn \ + ../patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn \ + ../patch_lib_sip_titan/LibSip_Steps.ttcn \ + ../patch_lib_sip_titan/LibSip_PIXITS.ttcn \ + ../patch_lib_sip_titan/LibSip_Templates.ttcn \ + ../patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn \ + ../patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn \ + ../patch_lib_sip_titan/urn_3gpp_ns_cw_1_0.ttcn \ + ../patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_common_policy.ttcn \ + ../patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_conference_info.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_reginfo.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_resource_lists.ttcn \ + ../patch_lib_sip_titan/urn_oma_xml_xdm_common_policy.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf_geopriv10.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf_geopriv10_civicAddr.ttcn \ + ../patch_lib_sip_titan/http_www_opengis_net_gml.ttcn \ + ../patch_lib_sip_titan/http_www_opengis_net_pidflo_1_0.ttcn \ + + +modules := ../../titan-test-system-framework/ttcn/LibXsd diff --git a/ttcn/patch_lib_sip_titan/urn_3gpp_ns_cw_1_0.ttcn b/ttcn/patch_lib_sip_titan/urn_3gpp_ns_cw_1_0.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..4b4458fbd225f976e2dd37e96f2ddac2a508e2a6 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/urn_3gpp_ns_cw_1_0.ttcn @@ -0,0 +1,79 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: urn_3gpp_ns_cw_1_0.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - cw.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "urn:3gpp:ns:cw:1.0" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_3gpp_ns_cw_1_0 { + + +import from XSD all; + + +type record TEmptyType +{ + +} +with { + variant "name as uncapitalized"; +}; + + +type record TCWtype +{ + record of XSD.String attr optional, + TEmptyType communication_waiting_indication optional, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (attr) "anyAttributes except unqualified, 'urn:3gpp:ns:cw:1.0'"; + variant (communication_waiting_indication) "name as 'communication-waiting-indication'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:3gpp:ns:cw:1.0'"; +}; + + +type TCWtype Ims_cw +with { + variant "name as 'ims-cw'"; + variant "element"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:3gpp:ns:cw:1.0' prefix 'cw10'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_common_policy.ttcn b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_common_policy.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..3d7b018cea2ff06621f44db537292adb261623cf --- /dev/null +++ b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_common_policy.ttcn @@ -0,0 +1,223 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: urn_ietf_params_xml_ns_common_policy.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - common-policy.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:common-policy" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_common_policy { + + +import from XSD all; + + +/* /ruleset */ + + +type record Ruleset +{ + record of RuleType rule_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (rule_list) "untagged"; + variant (rule_list[-]) "name as 'rule'"; +}; + + +/* /ruleset/rule */ + + +type record RuleType +{ + XSD.ID id, + ConditionsType conditions optional, + ExtensibleType actions optional, + ExtensibleType transformations optional +} +with { + variant "name as uncapitalized"; + variant (id) "attribute"; +}; + + +/* //rule/conditions */ + + +type record ConditionsType +{ + record length(1 .. infinity) of union { + record length(0 .. 1) of IdentityType identity_list, + record length(1) of SphereType sphere_list, + record length(1) of ValidityType validity_list, + record length(1 .. infinity) of XSD.String elem_list + } choice_list +} +with { + variant "name as uncapitalized"; + variant (choice_list) "untagged"; + variant (choice_list[-]) "untagged"; + variant (choice_list[-].identity_list) "untagged"; + variant (choice_list[-].identity_list[-]) "name as 'identity'"; + variant (choice_list[-].sphere_list) "untagged"; + variant (choice_list[-].sphere_list[-]) "name as 'sphere'"; + variant (choice_list[-].validity_list) "untagged"; + variant (choice_list[-].validity_list[-]) "name as 'validity'"; + variant (choice_list[-].elem_list) "untagged"; + variant (choice_list[-].elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:common-policy'"; +}; + + +/* //conditions/identity */ + + +type record IdentityType +{ + record length(1 .. infinity) of union { + OneType one, + ManyType many, + XSD.String elem + } choice_list +} +with { + variant "name as uncapitalized"; + variant (choice_list) "untagged"; + variant (choice_list[-]) "untagged"; + variant (choice_list[-].elem) "anyElement except unqualified, 'urn:ietf:params:xml:ns:common-policy'"; +}; + + +/* //identity/one */ + + +type record OneType +{ + XSD.AnyURI id, + XSD.String elem optional +} +with { + variant "name as uncapitalized"; + variant (id) "attribute"; + variant (elem) "anyElement except unqualified, 'urn:ietf:params:xml:ns:common-policy'"; +}; + + +/* //identity/many */ + + +type record ManyType +{ + XSD.String domain optional, + record of union { + ExceptType except_, + record length(0 .. 1) of XSD.String elem_list + } choice_list +} +with { + variant "name as uncapitalized"; + variant (domain) "attribute"; + variant (choice_list) "untagged"; + variant (choice_list[-]) "untagged"; + variant (choice_list[-].except_) "name as 'except'"; + variant (choice_list[-].elem_list) "untagged"; + variant (choice_list[-].elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:common-policy'"; +}; + + +/* //many/except */ + + +type record ExceptType +{ + XSD.String domain optional, + XSD.AnyURI id optional +} +with { + variant "name as uncapitalized"; + variant (domain) "attribute"; + variant (id) "attribute"; +}; + + +/* //conditions/sphere */ + + +type record SphereType +{ + XSD.String value_ +} +with { + variant "name as uncapitalized"; + variant (value_) "name as 'value'"; + variant (value_) "attribute"; +}; + + +/* //conditions/validity */ + + +type record ValidityType +{ + record length(1 .. infinity) of record { + XSD.DateTime from_, + XSD.DateTime until + } sequence_list +} +with { + variant "name as uncapitalized"; + variant (sequence_list) "untagged"; + variant (sequence_list[-]) "untagged"; + variant (sequence_list[-].from_) "name as 'from'"; +}; + + +/* //rule/actions or //rule/transformations */ + + +type record ExtensibleType +{ + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:common-policy'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:ietf:params:xml:ns:common-policy' prefix 'cp'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_conference_info.ttcn b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_conference_info.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..bfa546577eea3d4d147f4ebca5c286ae662237f6 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_conference_info.ttcn @@ -0,0 +1,572 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +*******************************************************************************/ +// +// File: urn_ietf_params_xml_ns_conference_info.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - CONF.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:conference-info" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_conference_info { + + +import from XSD all; + + +import from http_www_w3_org_XML_1998_namespace all; + + +/* This imports the xml:language definition */ + + +/* CONFERENCE ELEMENT */ + + +type Conference_type Conference_info +with { + variant "name as 'conference-info'"; + variant "element"; +}; + + +/* CONFERENCE TYPE */ + + +type record Conference_type +{ + XSD.AnyURI entity, + State_type state optional, + XSD.UnsignedInt version optional, + record of XSD.String attr optional, + Conference_description_type conference_description optional, + Host_type host_info optional, + Conference_state_type conference_state optional, + Users_type users optional, + Uris_type sidebars_by_ref optional, + Sidebars_by_val_type sidebars_by_val optional, + record of XSD.String elem_list +} +with { + variant "name as 'conference-type'"; + variant (entity) "attribute"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (version) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (conference_description) "name as 'conference-description'"; + variant (host_info) "name as 'host-info'"; + variant (conference_state) "name as 'conference-state'"; + variant (sidebars_by_ref) "name as 'sidebars-by-ref'"; + variant (sidebars_by_val) "name as 'sidebars-by-val'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* STATE TYPE */ + + +type enumerated State_type +{ + deleted, + full, + partial +} +with { + variant "name as 'state-type'"; +}; + + +/* CONFERENCE DESCRIPTION TYPE */ + + +type record Conference_description_type +{ + record of XSD.String attr optional, + XSD.String display_text optional, + XSD.String subject optional, + XSD.String free_text optional, + Keywords_type keywords optional, + Uris_type conf_uris optional, + Uris_type service_uris optional, + XSD.UnsignedInt maximum_user_count optional, + Conference_media_type available_media optional, + record of XSD.String elem_list +} +with { + variant "name as 'conference-description-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (free_text) "name as 'free-text'"; + variant (conf_uris) "name as 'conf-uris'"; + variant (service_uris) "name as 'service-uris'"; + variant (maximum_user_count) "name as 'maximum-user-count'"; + variant (available_media) "name as 'available-media'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* HOST TYPE */ + + +type record Host_type +{ + record of XSD.String attr optional, + XSD.String display_text optional, + XSD.AnyURI web_page optional, + Uris_type uris optional, + record of XSD.String elem_list +} +with { + variant "name as 'host-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (web_page) "name as 'web-page'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* CONFERENCE STATE TYPE */ + + +type record Conference_state_type +{ + record of XSD.String attr optional, + XSD.UnsignedInt user_count optional, + XSD.Boolean active optional, + XSD.Boolean locked optional, + record of XSD.String elem_list +} +with { + variant "name as 'conference-state-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (user_count) "name as 'user-count'"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + //variant (locked) "text 'true' as '1'"; + //variant (locked) "text 'false' as '0'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* CONFERENCE MEDIA TYPE */ + + +type record Conference_media_type +{ + record of XSD.String attr optional, + record length(1 .. infinity) of Conference_medium_type entry_list +} +with { + variant "name as 'conference-media-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (entry_list) "untagged"; + variant (entry_list[-]) "name as 'entry'"; +}; + + +/* CONFERENCE MEDIUM TYPE */ + + +type record Conference_medium_type +{ + XSD.String label_, + record of XSD.String attr optional, + XSD.String display_text optional, + XSD.String type_, + Media_status_type status optional, + record of XSD.String elem_list +} +with { + variant "name as 'conference-medium-type'"; + variant (label_) "name as 'label'"; + variant (label_) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (type_) "name as 'type'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* URIs TYPE */ + + +type record Uris_type +{ + State_type state optional, + record of XSD.String attr optional, + record length(1 .. infinity) of Uri_type entry_list +} +with { + variant "name as 'uris-type'"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (entry_list) "untagged"; + variant (entry_list[-]) "name as 'entry'"; +}; + + +/* URI TYPE */ + + +type record Uri_type +{ + record of XSD.String attr optional, + XSD.AnyURI uri, + XSD.String display_text optional, + XSD.String purpose optional, + Execution_type modified optional, + record of XSD.String elem_list +} +with { + variant "name as 'uri-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* KEYWORDS TYPE */ + + +type record of XSD.String Keywords_type +with { + variant "name as 'keywords-type'"; + variant "list"; +}; + + +/* USERS TYPE */ + + +type record Users_type +{ + State_type state optional, + record of XSD.String attr optional, + record of User_type user_list, + record of XSD.String elem_list +} +with { + variant "name as 'users-type'"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (user_list) "untagged"; + variant (user_list[-]) "name as 'user'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* USER TYPE */ + + +type record User_type +{ + XSD.AnyURI entity optional, + State_type state optional, + record of XSD.String attr optional, + XSD.String display_text optional, + Uris_type associated_aors optional, + User_roles_type roles optional, + User_languages_type languages optional, + XSD.AnyURI cascaded_focus optional, + record of Endpoint_type endpoint_list, + record of XSD.String elem_list +} +with { + variant "name as 'user-type'"; + variant (entity) "attribute"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (associated_aors) "name as 'associated-aors'"; + variant (cascaded_focus) "name as 'cascaded-focus'"; + variant (endpoint_list) "untagged"; + variant (endpoint_list[-]) "name as 'endpoint'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* USER ROLES TYPE */ + + +type record User_roles_type +{ + record of XSD.String attr optional, + record length(1 .. infinity) of XSD.String entry_list +} +with { + variant "name as 'user-roles-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (entry_list) "untagged"; + variant (entry_list[-]) "name as 'entry'"; +}; + + +/* USER LANGUAGES TYPE */ + + +type record of XSD.Language User_languages_type +with { + variant "name as 'user-languages-type'"; + variant "list"; +}; + + +/* ENDPOINT TYPE */ + + +type record Endpoint_type +{ + XSD.String entity optional, + State_type state optional, + record of XSD.String attr optional, + XSD.String display_text optional, + Execution_type referred optional, + Endpoint_status_type status optional, + Joining_type joining_method optional, + Execution_type joining_info optional, + Disconnection_type disconnection_method optional, + Execution_type disconnection_info optional, + record of Media_type media_list, + Call_type call_info optional, + record of XSD.String elem_list +} +with { + variant "name as 'endpoint-type'"; + variant (entity) "attribute"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (joining_method) "name as 'joining-method'"; + variant (joining_info) "name as 'joining-info'"; + variant (disconnection_method) "name as 'disconnection-method'"; + variant (disconnection_info) "name as 'disconnection-info'"; + variant (media_list) "untagged"; + variant (media_list[-]) "name as 'media'"; + variant (call_info) "name as 'call-info'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* ENDPOINT STATUS TYPE */ + + +type enumerated Endpoint_status_type +{ + alerting, + connected, + dialing_in, + dialing_out, + disconnected, + disconnecting, + muted_via_focus, + on_hold, + pending +} +with { + variant "text 'dialing_in' as 'dialing-in'"; + variant "text 'dialing_out' as 'dialing-out'"; + variant "text 'muted_via_focus' as 'muted-via-focus'"; + variant "text 'on_hold' as 'on-hold'"; + variant "name as 'endpoint-status-type'"; +}; + + +/* JOINING TYPE */ + + +type enumerated Joining_type +{ + dialed_in, + dialed_out, + focus_owner +} +with { + variant "text 'dialed_in' as 'dialed-in'"; + variant "text 'dialed_out' as 'dialed-out'"; + variant "text 'focus_owner' as 'focus-owner'"; + variant "name as 'joining-type'"; +}; + + +/* DISCONNECTION TYPE */ + + +type enumerated Disconnection_type +{ + booted, + busy, + departed, + failed +} +with { + variant "name as 'disconnection-type'"; +}; + + +/* EXECUTION TYPE */ + + +type record Execution_type +{ + record of XSD.String attr optional, + XSD.DateTime when optional, + XSD.String reason optional, + XSD.AnyURI by optional +} +with { + variant "name as 'execution-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* CALL TYPE */ + + +type record Call_type +{ + record of XSD.String attr optional, + union { + Sip_dialog_id_type sip, + record of XSD.String elem_list + } choice +} +with { + variant "name as 'call-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (choice) "untagged"; + variant (choice.elem_list) "untagged"; + variant (choice.elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* SIP DIALOG ID TYPE */ + + +type record Sip_dialog_id_type +{ + record of XSD.String attr optional, + XSD.String display_text optional, + XSD.String call_id, + XSD.String from_tag, + XSD.String to_tag, + record of XSD.String elem_list +} +with { + variant "name as 'sip-dialog-id-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (call_id) "name as 'call-id'"; + variant (from_tag) "name as 'from-tag'"; + variant (to_tag) "name as 'to-tag'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* MEDIA TYPE */ + + +type record Media_type +{ + XSD.String id, + record of XSD.String attr optional, + XSD.String display_text optional, + XSD.String type_ optional, + XSD.String label_ optional, + XSD.String src_id optional, + Media_status_type status optional, + record of XSD.String elem_list +} +with { + variant "name as 'media-type'"; + variant (id) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (type_) "name as 'type'"; + variant (label_) "name as 'label'"; + variant (src_id) "name as 'src-id'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* MEDIA STATUS TYPE */ + + +type enumerated Media_status_type +{ + inactive, + recvonly, + sendonly, + sendrecv +} +with { + variant "name as 'media-status-type'"; +}; + + +/* SIDEBARS BY VAL TYPE */ + + +type record Sidebars_by_val_type +{ + State_type state optional, + record of XSD.String attr optional, + record of Conference_type entry_list +} +with { + variant "name as 'sidebars-by-val-type'"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (entry_list) "untagged"; + variant (entry_list[-]) "name as 'entry'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:ietf:params:xml:ns:conference-info' prefix 'tns'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf.ttcn b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..916fdca0cf96cb9ab5c0cf7ae745b32ee541012a --- /dev/null +++ b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf.ttcn @@ -0,0 +1,177 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B +* +* 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: urn_ietf_params_xml_ns_pidf.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Aug 7 08:36:53 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - RFC3863_pidf.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:pidf" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_pidf { + + +import from XSD all; + +import from urn_ietf_params_xml_ns_pidf_geopriv10 all; + +import from http_www_w3_org_XML_1998_namespace all; + + +const XSD.Boolean c_defaultForEmpty_1 := false; + + +/* This import brings in the XML language attribute xml:lang */ + + +type Presence_1 Presence +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record Presence_1 +{ + XSD.AnyURI entity, + record of Tuple tuple_list, + record of Note note_list, + record of XSD.String elem_list +} +with { + variant "name as 'presence'"; + variant (entity) "attribute"; + variant (tuple_list) "untagged"; + variant (tuple_list[-]) "name as 'tuple'"; + variant (note_list) "untagged"; + variant (note_list[-]) "name as 'note'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified"; // , 'urn:ietf:params:xml:ns:pidf' +}; + + +type record Tuple +{ + XSD.ID id, + Status status, + record of XSD.String elem_list, + Contact contact optional, + record of Note note_list, + XSD.DateTime timestamp_ optional +} +with { + variant "name as uncapitalized"; + variant (id) "attribute"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified"; // , 'urn:ietf:params:xml:ns:pidf' + variant (note_list) "untagged"; + variant (note_list[-]) "name as 'note'"; +}; + + +type record Status +{ + Basic basic optional, + Geopriv_1 geopriv, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (geopriv) "namespace as 'urn:ietf:params:xml:ns:pidf:geopriv10'" + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:pidf'"; +}; + + +type enumerated Basic +{ + closed, + open +} +with { + variant "name as uncapitalized"; +}; + + +type record Contact +{ + Qvalue priority optional, + XSD.AnyURI base +} +with { + variant "name as uncapitalized"; + variant (priority) "attribute"; + variant (base) "untagged"; +}; + + +type record Note +{ + Lang lang optional, + XSD.String base +} +with { + variant "name as uncapitalized"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "attribute"; + variant (base) "untagged"; +}; + + +/* xs:pattern value="0(.[0-9]{0,3})?"/> + /etc/hostname \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + autoconf \ + bison \ + build-essential \ + cmake \ + curl \ + dos2unix \ + doxygen \ + emacs \ + expect \ + flex \ + g++-9 \ + gcc-9 \ + git \ + gnutls-bin \ + graphviz \ + iputils-ping \ + libedit2 \ + libedit-dev \ + libffi-dev \ + libglib2.0-dev \ + libgcrypt-dev \ + libjsoncpp-dev \ + libncurses5-dev \ + libpcap-dev \ + libssl-dev \ + libtool-bin \ + libtool \ + libxml2-dev \ + libxml2-utils \ + libyaml-dev \ + lsof \ + ntp \ + openssh-server \ + pkg-config \ + python3-dev \ + python3-pip \ + python3-setuptools \ + sudo \ + sshpass \ + tcpdump \ + texlive-font-utils \ + texlive-latex-extra \ + tzdata \ + valgrind \ + xutils-dev \ + xsltproc \ + && DEBIAN_FRONTEND=noninteractive apt-get autoremove --purge -y \ + && DEBIAN_FRONTEND=noninteractive apt-get autoclean \ + && pip3 install --upgrade setuptools pip \ + && useradd --create-home --shell /bin/bash etsi \ + && echo "etsi:etsi" | chpasswd \ + && adduser etsi sudo \ + && echo "" >> /etc/profile \ + && echo 'export HOME=/home/etsi' >> /etc/profile \ + && echo 'export LD_LIBRARY_PATH=${HOME}/lib:$LD_LIBRARY_PATH' >> /etc/profile \ + && echo 'export PATH=${HOME}/bin:$PATH' >> /etc/profile \ + && echo 'cd ${HOME}' >> /etc/profile \ + && echo ". ./devenv.bash" >> /etc/profile \ + && cd /home/etsi \ + && echo "" >> ./.profile \ + && echo 'export HOME=/home/etsi' >> ./.profile \ + && echo 'export LD_LIBRARY_PATH=${HOME}/lib:$LD_LIBRARY_PATH' >> ./.profile \ + && echo 'export PATH=${HOME}/bin:$PATH' >> ./.profile \ + && echo 'cd ${HOME}' >> ./.profile \ + && echo ". ./devenv.bash" >> ./.profile \ + && mkdir -p bin lib include tmp frameworks docs man dev \ + && chown -R etsi:etsi * + +EXPOSE 22 + +CMD ["/bin/bash"] + +# That's all Floks diff --git a/virtualization/docker-dev/README.md b/virtualization/docker-dev/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1bd104880b2d49c750e4c97a7d098bfdbd478bef --- /dev/null +++ b/virtualization/docker-dev/README.md @@ -0,0 +1,99 @@ +# HOWTO build docker images + +## General imformation + +Pre-requisites on your host machine: + +- Install [Docker](https://docs.docker.com/install/) + +#### From Windows host: + +- Install [Virtualbox](https://www.virtualbox.org/manual/ch01.html) +- Install any X Server. For example [VcXsrv](https://sourceforge.net/projects/vcxsrv/) + +#### From Mac host: + +- Install [Virtualbox](https://www.virtualbox.org/manual/ch01.html) +- Install [XQuartz](https://www.xquartz.org) + +#### From Linux host: + +- No other requirements + +## Build docker image + +For Windows host, rename ```build.cmd.a``` and ```run.cmd.a``` to ```build.cmd``` and ```run.cmd``` respectivelly. + +Special scrips ```build.sh``` (or ```build.cmd```) can be executed to automatically build all necessary images. + +There are several build stages: + +1. Build STF Ubuntu 18.04 image +2. Install Titan from Github +3. Install Eclipse and Titan Eclipse plugin into ~/frameworks/titan +4. Install asn1c into ~/frameworks/asn1c +5. Checkout STF569 sources from ETSI svn repository using default credentials +6. Build ASN.1 recoder library +7. Build certificate generation tool + +## Import and build ETSI AtsImsIot project + +### Run Docker image + +#### From Windows host: + +1. Authorize Docker container to interact with the XServer: +Go to the X Server installation directory and add the Docker container ip address to the file ```X0.hosts```: +``` +localhost +inet6:localhost +192.168.99.100 +``` + +Execute ```run.cmd``` or launch a command line window and run the command + +```docker run -it --net=host -e DISPLAY=192.168.99.1:0 AtsImsIot:latest``` + +NOTE: Modify the IP address in the command for the address of 'VirtualBox Hot-Only Network'. + +#### From Linux host: + +Execute ```run.sh``` or launch a command line window and run the command + +```sh +docker run -it --net=host -e DISPLAY=$DISPLAY \ +-v /tmp/.X11-unix:/tmp/.X11-unix AtsImsIot:latest +``` + +### Import eclipse project + +1. Whithin the docker container, on the linux command prompt type: + + ```eclipse -data ~/dev/Workspace``` + + Eclipse IDE shall be shown on the hosts Screen. + Possible problems: + - eclipse not found: check the PATH environment variable. It shall contain $HOME/bin path. Otherwise add it: + ```export PATH=$HOME/bin:$PATH``` + +2. Run "File -> Import" and import the ```~/dev/AtsImsIot/AtsImsIot.tpd``` file. + + This can take a time, be patient. + **Do not run build in eclipse**, we don't have enough time. + +### Build the project + +```cd ~/Workspace/AtsImsIot/bin``` + +```make``` + +Possible problems: + - Error in AbstractSocket build: Build it explicitly: + ```cd ~/Workspace/Abstract_Socket_CNL113384/bin_ssl && make``` + +### Execute tests +1. Launch eclipse: ```eclipse -data ~/dev/Workspace``` +2. Select configuration from the /etc/folder: + - AtsImsIot.cfg - Default ETSI AtsImsIot test suite. +3. Right-click on the configuration file and select **Run As -> TITAN Parallel launcher** + diff --git a/virtualization/docker-dev/build.sh b/virtualization/docker-dev/build.sh new file mode 100755 index 0000000000000000000000000000000000000000..b5069aa51c2e5adba533355898de0d1d5894c29b --- /dev/null +++ b/virtualization/docker-dev/build.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Copyright ETSI 2020-2021 +# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt + +set -e +set -vx + +# Force removing stfubuntu docker image +if [ "$1" == "--force-stfubuntu" ]; then + if [ -n `docker images -q stfubuntu` ]; then + docker rmi --force `docker images -q stfubuntu` || exit 1 + fi +fi +# Check and build stfubuntu image +if [ -z `docker images -q stfubuntu` ]; then + docker build --no-cache --tag stfubuntu:20.04 -f Dockerfile.stfubuntu --force-rm . || exit 1 +fi + +docker build --no-cache --tag etsiforge/AtsImsIot --force-rm . || ( echo "Docker build failed: $?"; exit 1 ) + +docker images +docker inspect etsiforge/AtsImsIot:latest || ( echo "Docker inspect failed: $?"; exit 1 ) + +# That's all Floks +exit 0 diff --git a/virtualization/docker-dev/home/etc/init.d/10-titan.sh b/virtualization/docker-dev/home/etc/init.d/10-titan.sh new file mode 100755 index 0000000000000000000000000000000000000000..c7d2c4c6f367431d394fdf79c19a07913f68341b --- /dev/null +++ b/virtualization/docker-dev/home/etc/init.d/10-titan.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +#set -e +set -vx + +echo -e "*****************************\n* Install titan\n*****************************\n" +SRC_DIR=${HOME}/frameworks/titan/titan.core +export TTCN3_DIR=$HOME/frameworks/titan/Install + +[ -f /usr/bin/java ] && export JAVA_HOME=`readlink -f /usr/bin/java | sed "s:bin/java::"` +TITAN_REPO=`cat ${HOME}/etc/titan_repos.txt | grep 'titan\.core\.git' | head -n 1` +export PATH=$PATH:$TTCN3_DIR/bin + +mkdir -p "$SRC_DIR" +cd "$SRC_DIR/.." || exit 1 + +# Install titan core +git clone --progress "$TITAN_REPO" || exit 1 + +cd titan.core || exit 1 +cat >Makefile.personal <> $HOME/.bashrc +echo "export PATH=\$PATH:\$TTCN3_DIR/bin" >> $HOME/.bashrc + +# Install other repos +cd $SRC_DIR/.. || exit 1 +cat ${HOME}/etc/titan_repos.txt | grep -v -e '^\s*#' -e 'titan\.core' | while read REPO; do + [ -z $ $REPO ] && continue + WS=`echo $REPO | sed -e 's|.*/||g' -e 's|\.git||g'` + if git clone --progress "${REPO}" "${WS}"; then + [ -f "$WS/Makefile" ] && make -C "$WS" + fi +done + +cd $HOME diff --git a/virtualization/docker-dev/home/etc/init.d/30-osip.sh b/virtualization/docker-dev/home/etc/init.d/30-osip.sh new file mode 100755 index 0000000000000000000000000000000000000000..db8c15286251690788a8263eff90b32f286d2eae --- /dev/null +++ b/virtualization/docker-dev/home/etc/init.d/30-osip.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +#set -e +set -vx + +echo -e "*****************************\n* Install osip\n*****************************\n" +cd ${HOME}/frameworks +git clone https://git.savannah.gnu.org/git/osip.git ./osip +cd osip +./autogen.sh +./configure --prefix=/home/etsi +make && make install + +cd ${HOME} diff --git a/virtualization/docker-dev/home/etc/init.d/40-etsi_AtsImsIot.sh b/virtualization/docker-dev/home/etc/init.d/40-etsi_AtsImsIot.sh new file mode 100755 index 0000000000000000000000000000000000000000..758a6c46d7e61a3e29235d1e7e4f52a18efd7c16 --- /dev/null +++ b/virtualization/docker-dev/home/etc/init.d/40-etsi_AtsImsIot.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +#set -e +set -vx + +echo -e "*****************************\n* Checkout TTF T012 sources\n*****************************\n" +mkdir -p ${HOME}/dev && cd ${HOME}/dev || exit 1 + +git clone --branch devel --recurse-submodules --single-branch https://forge.etsi.org/rep/int/vxlte/emergency-5g-iop.git || exit 1 + +echo -e "*****************************\n* Set up environment\n*****************************\n" +cd /home/etsi/dev/emergency-5g-iop/scripts || exit 1 +ln -sf /home/etsi/dev/emergency-5g-iop/scripts/devenv.bash.ubuntu /home/etsi/devenv.bash || exit 1 +. /home/etsi/devenv.bash || exit 1 + +echo -e "*****************************\n* Apply patched \n*****************************\n" +cd /home/etsi/dev/emergency-5g-iop || exit 1 +./install.sh || exit 1 + +echo -e "*****************************\n* Build test suites\n*****************************\n" +ATS_LIST="AtsLIS AtsECRF AtsESRP AtsPSAP AtsBCF" +for i in ${ATS_LIST} +do + export ATS=$i + make +done + +echo -e "*****************************\n* Init Eclipse Workspace\n*****************************\n" + +echo -e "*****************************\n* Setup a configuration file\n*****************************\n" +cd ./etc/AtsImsIot +ln -sf AtsImsIot.cfg_ AtsImsIot.cfg +cd - + +echo -e "*****************************\n* Change sudo in command line\n*****************************\n" +cd /home/etsi/dev/emergency-5g-iop/scripts +export ATS=AtsLIS +#sed --in-place 's/sudo/echo "etsi" \| sudo -S/' ./run_all.bash + +cd /home/etsi/dev/emergency-5g-iop + diff --git a/virtualization/docker-dev/home/etc/init.d/50-doxygen.sh b/virtualization/docker-dev/home/etc/init.d/50-doxygen.sh new file mode 100755 index 0000000000000000000000000000000000000000..541907f761a8348523afe2ad71ad9b192a6ee5eb --- /dev/null +++ b/virtualization/docker-dev/home/etc/init.d/50-doxygen.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +#set -e +set -vx + +echo -e "*****************************\n* Build docs \n*****************************\n" +. /home/etsi/devenv.bash +cd ${HOME}/dev/emergency-5g-iop/docs || exit 1 +doxygen ./o2.cfg || exit 1 + +# Generate PDF file +cd ${HOME}/dev/emergency-5g-iop/docs/AtsImsIotDocs/latex +make && mv refman.pdf ${HOME}/docs/AtsImsIot_help.pdf + +cd ${HOME} + +exit 0 diff --git a/virtualization/docker-dev/home/etc/titan_repos.txt b/virtualization/docker-dev/home/etc/titan_repos.txt new file mode 100644 index 0000000000000000000000000000000000000000..8842f4e0283928a94ebbbd37aff6b25fe27c2279 --- /dev/null +++ b/virtualization/docker-dev/home/etc/titan_repos.txt @@ -0,0 +1,56 @@ +https://gitlab.eclipse.org/eclipse/titan/titan.core.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Abstract_Socket.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.HTTPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LANL2asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PCAPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PIPEasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SCTPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SIPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SQLasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TCPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TELNETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UDPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.COMMON.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DIAMETER_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DNS.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTSP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SNMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.TCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.UDP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.XMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.misc.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPasp_RFC4511.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Socket-API.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SSHCLIENTasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.STDINOUTmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SUNRPCasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UNIX_DOMAIN_SOCKETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.IPL4asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.FrameRelay.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.H248_v2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IMAP_4rev1.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICAP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IKEv2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IPsec.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IUA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.JSON_v07_2006.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.L2TP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.M3UA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MIME.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MSRP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.PPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ProtoBuff.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RADIUS_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SRTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.WebSocket.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.HTTP2.0.git +https://gitlab.eclipse.org/eclipse/titan/titan.Libraries.TCCUsefulFunctions.git diff --git a/virtualization/docker-dev/run.sh b/virtualization/docker-dev/run.sh new file mode 100755 index 0000000000000000000000000000000000000000..babf174a0dad8b456522b4bd8854ca1ebf97cfa4 --- /dev/null +++ b/virtualization/docker-dev/run.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Copyright ETSI 2018-2020 +# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt + +#set -e +set -vx + +docker run --interactive --tty --rm --publish 2222:22 --env DISPLAY=$DISPLAY --volume /tmp/.X11-unix:/tmp/.X11-unix --cap-add=NET_RAW --cap-add=NET_ADMIN etsiforge/AtsImsIot:latest + +# That's all Floks +exit 0 diff --git a/virtualization/docker/Dockerfile b/virtualization/docker/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..f8ef5f50528af5dd10a7bb11450f3ab08b0a5393 --- /dev/null +++ b/virtualization/docker/Dockerfile @@ -0,0 +1,60 @@ +FROM alpine:latest + +# Install dependencies +RUN apk update && \ + apk add --no-cache autoconf automake sudo make git g++ diffutils expect openssl-dev libxml2-dev libxml2-utils libxslt-dev libtool ncurses-dev jsoncpp-dev readline-dev flex bison perl libexecinfo-dev bash libedit libedit-dev lksctp-tools lksctp-tools-dev libpcap-dev + +# Create user and sudouser +RUN \ + addgroup -g 1000 etsi && \ + adduser -S -D -u 1000 -G etsi -h /home/etsi -s /bin/bash etsi && \ + echo "etsi:etsi" | chpasswd && \ + echo "etsi ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers || exit 1 +USER etsi + +# Setup Hosts file at the boot time +RUN \ + echo 'sudo sh -c "cp /etc/hosts /etc/append && (echo \"127.0.1.1 $HOSTNAME\"; cat /etc/append) > /etc/hosts"' >> /home/etsi/.bashrc \ + echo 'sh' >> /home/etsi/.bashrc || exit 1 + +# Clone OSIP +WORKDIR /home/etsi +RUN \ + mkdir -p frameworks dev tmp && cd frameworks \ + && cd ${HOME}/frameworks \ + && git clone https://git.savannah.gnu.org/git/osip.git ./osip \ + && cd osip \ + && ./autogen.sh \ + && ./configure --prefix=/home/etsi \ + && make && make install \ + && cd - || exit 1 + +# Clone Titan +RUN git clone https://github.com/eclipse/titan.core.git || exit 1 +WORKDIR /home/etsi/frameworks/titan.core/ + +# Setup ENV variables +ENV TTCN3_DIR=/home/etsi/frameworks/titan.core/Install +ENV PATH=$TTCN3_DIR/bin:$PATH \ + LD_LIBRARY_PATH=$TTCN3_DIR/lib:$LD_LIBRARY_PATH + +# Set flags +RUN \ + echo "ALPINE_LINUX=yes" > Makefile.personal && \ + echo "TTCN3_DIR=$TTCN3_DIR" >> Makefile.personal && \ + echo "JNI=no" >> Makefile.personal && \ + echo "GUI=no" >> Makefile.personal && \ + echo "DEBUG=no" >> Makefile.personal || exit 1 + +# Build Titan +RUN \ + sed --in-place 's/LINUX_LIBS := -lxml2/LINUX_LIBS := -lxml2 -lpthread/g' ./core/Makefile && \ + make install && make clean || exit 1 + +WORKDIR /home/etsi/dev + +EXPOSE 443/tcp +EXPOSE 5060/udp +EXPOSE 5061/udp + +ENTRYPOINT /home/yann/dev/cise/virtualization/docker/docker-entrypoint.sh diff --git a/virtualization/docker/docker-entrypoint.sh b/virtualization/docker/docker-entrypoint.sh new file mode 100755 index 0000000000000000000000000000000000000000..590d1381c52f4244cb0269228be98d2f5c684489 --- /dev/null +++ b/virtualization/docker/docker-entrypoint.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +set -euo pipefail + +usage() { + echo "No command specified. Available commands:" + for i in $(echo $commands | sed "s/,/ /g") + do + echo " $i" + done +} + +commands="help,build,clean,list,modulepar,rebuild,run,version" + +if [ $# == 0 ]; then + usage + exit 1 +fi + +if [ $# == 2 ]; then + if [ "$2" != "" ]; then + export ATS=Ats$2 + cli="${GEN_DIR}/bin/$ATS" + echo "cli: $cli" + fi +fi + + +case "$1" in + build) + cd ${GEN_DIR} && make + ;; + clean) + cd ${GEN_DIR} && make clean + ;; + list) + ${cli} -l + ;; + modulepar) + ${cli} -p + ;; + rebuild) + cd ${GEN_DIR} && rm -fr ./bin ./build ; make + ;; + run) + cd ${GEN_DIR}/scripts && ./run_all.bash + ;; + version) + compiler -v + ;; + *) + usage + exit 1 + ;; +esac + +unset ATS +exit 0 \ No newline at end of file diff --git a/virtualization/docker/docker-run.sh b/virtualization/docker/docker-run.sh new file mode 100755 index 0000000000000000000000000000000000000000..6a5d1e71ee2a8f4833d94b01eaf92317c268b27d --- /dev/null +++ b/virtualization/docker/docker-run.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -exo pipefail + +cd "$(dirname ${BASH_SOURCE})" + +docker run --rm -it \ + -w /home/yann/dev/AtsImsIot \ + -e GEN_DIR=/home/yann/dev/AtsImsIot \ + -p 0.0.0.0:443:443 \ + -p 0.0.0.0:5060:5060/udp \ + -p 0.0.0.0:5061:5061/udp \ + -u "$(id -u):$(id -g)" \ + -v "${PWD}/../..:/home/yann/dev/AtsImsIot" \ + --entrypoint /home/yann/dev/AtsImsIot/virtualization/docker/docker-entrypoint.sh \ + alpine-AtsImsIot:latest "$@" diff --git a/virtualization/vagrant/Vagrantfile b/virtualization/vagrant/Vagrantfile new file mode 100644 index 0000000000000000000000000000000000000000..86b03597a1ad00b02b0d0c17cae665e8bc792911 --- /dev/null +++ b/virtualization/vagrant/Vagrantfile @@ -0,0 +1,73 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://atlas.hashicorp.com/search. + config.vm.box = "bento/ubuntu-18.04" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + config.vm.boot_timeout = 900 + + # Use this hostname to force provisioner script to using SVN instead of external HDD + #config.vm.hostname = "vagrant-prov" + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + #config.vm.network "private_network", ip: "192.168.4.94" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + #config.vm.network "public_network" + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + config.vm.provider "virtualbox" do |vb| + # Display the VirtualBox GUI when booting the machine + #vb.gui = true + vb.customize ["modifyvm", :id, "--monitorcount", "1"] + vb.customize ["modifyvm", :id, "--vram", "12"] + # Customize the amount of memory on the VM: + vb.memory = "4096" + end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies + # such as FTP and Heroku are also available. See the documentation at + # https://docs.vagrantup.com/v2/push/atlas.html for more information. + # config.push.define "atlas" do |push| + # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" + # end + + # Enable provisioning with a shell script. Additional provisioners such as + # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the + # documentation for more information about their specific syntax and use. + config.vm.provision "shell", path: "provisioner.bash", privileged: false +end diff --git a/virtualization/vagrant/provisioner.bash b/virtualization/vagrant/provisioner.bash new file mode 100755 index 0000000000000000000000000000000000000000..1e9cdb2cb9c50e6b7b2e18ae681786b064a34b04 --- /dev/null +++ b/virtualization/vagrant/provisioner.bash @@ -0,0 +1,132 @@ +#!/bin/bash +# Prepare environment for the build +#set -e # Exit with non 0 if any command fails +#set -vx + +# Update system +sudo DEBIAN_FRONTEND=noninteractive apt-get update +sudo DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y +sudo DEBIAN_FRONTEND=noninteractive apt-get install software-properties-common -y +sudo DEBIAN_FRONTEND=noninteractive apt-get update +sudo DEBIAN_FRONTEND=noninteractive apt-get --allow-unauthenticated install emacs openjdk-11-jre gcc-9 g++-9 git subversion lsof ntp gdb make cmake flex bison autoconf doxygen graphviz libedit2 libedit-dev libtool libncurses5-dev expect libssl-dev libgcrypt-dev libxml2-dev xutils-dev tcpdump libpcap-dev libwireshark-dev wget tree unzip sshpass kubuntu-desktop valgrind qt5-default qttools5-dev qtmultimedia5-dev libqt5svg5-dev vim tzdata dos2unix xsltproc -y +#sudo DEBIAN_FRONTEND=noninteractive apt --fix-broken install -y +sudo DEBIAN_FRONTEND=noninteractive apt-get autoremove --purge -y +sudo DEBIAN_FRONTEND=noninteractive apt-get clean + +gcc --version +g++ --version +valgrind --version + +export HOME=/home/vagrant + +export PATH_DEV=${HOME}/dev +export HOME_FRAMEWORKS=${HOME}/frameworks +export HOME_LIB=${HOME}/lib +export HOME_BIN=${HOME}/bin +export HOME_ETC=${HOME}/etc +export HOME_INC=${HOME}/include +export HOME_TMP=${HOME}/tmp +export HOME_DOCS=${HOME}/docs +export PATH=${HOME_BIN}:${PATH} +export LD_LIBRARY_PATH=${HOME_LIB}:/usr/local/lib:${LD_LIBRARY_PATH} + +OLD_PWD=`pwd` +# Create directories +mkdir -p ${HOME_LIB} +if [ ! -d ${HOME_LIB} ] +then + exit -1 +fi +mkdir -p ${HOME_INC} +if [ ! -d ${HOME_INC} ] +then + exit -1 +fi +mkdir -p ${HOME_BIN} +if [ ! -d ${HOME_BIN} ] +then + exit -1 +fi +mkdir -p ${HOME_TMP} +if [ ! -d ${HOME_TMP} ] +then + exit -1 +fi +mkdir -p ${HOME_DOCS} +if [ ! -d ${HOME_DOCS} ] +then + exit -1 +fi +mkdir -p ${HOME_FRAMEWORKS} +if [ ! -d ${HOME_FRAMEWORKS} ] +then + exit -1 +fi +mkdir -p ${PATH_DEV} +if [ ! -d ${PATH_DEV} ] +then + exit -1 +fi + +cd /home/vagrant +echo "" >> /home/vagrant/.bashrc +echo "export LD_LIBRARY_PATH=/home/vagrant/dev/emergency-5g-iop/lib:$LD_LIBRARY_PATH" >> /home/vagrant/.bashrc +echo "export PATH=/home/vagrant/bin:$PATH" >> /home/vagrant/.bashrc +echo ". ~/devenv.bash" >> /home/vagrant/.bashrc + +cd /home/vagrant/dev +git clone --recurse-submodules --branch=devel https://forge.etsi.org/rep/int/vxlte/emergency-5g-iop.git +cd /home/vagrant/dev/emergency-5g-iop +./install.sh + +# Install all frameworks + +# Install osip +cd ${HOME_FRAMEWORKS} +git clone git://git.savannah.gnu.org/osip.git ./osip +cd ./osip +./autogen.sh +./configure --prefix=/home/vagrant +make && make install + +# Install GoogleTest +cd ${HOME_FRAMEWORKS} +git clone https://github.com/google/googletest.git googletest +cd ${HOME_FRAMEWORKS}/googletest/ +cmake . +make CXX=g++ +sudo make install + +# Install latest LCOV +cd ${HOME_FRAMEWORKS} +mkdir -p ${HOME_FRAMEWORKS}/lcov +cd ${HOME_FRAMEWORKS}/lcov +wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.13.orig.tar.gz +tar xf lcov_1.13.orig.tar.gz +sudo make -C lcov-1.13/ install + +# Install lcov to coveralls conversion +sudo gem install coveralls-lcov + +lcov --version +coveralls-lcov -h + +# Build TITAN +cd /home/vagrant/dev/emergency-5g-iop/scripts +./build_titan.bash +. /home/vagrant/devenv.bash + +# Build the AtsLIS +cd /home/vagrant/dev/emergency-5g-iop +export ATS=AtsLIS +make + +# Change user in cfg files +cd ${HOME}/dev/emergency-5g-iop/scripts +./update_user_name.sh emergency-5g-iop + +cd ${OLD_PWD} + +sudo init 6 + +exit 0