Harald Welte has submitted this change and it was merged.

Change subject: GSUP Support and first test against OsmoHLR
......................................................................


GSUP Support and first test against OsmoHLR

Change-Id: Idd7a6aca1ab193da39294f49a3adc4c1cd7cecff
---
M bsc-nat/gen_links.sh
M bsc/gen_links.sh
A hlr/GSUP_Test.ttcn
A hlr/Makefile
A hlr/gen_links.sh
A hlr/regen_makefile.sh
A library/GSUP_Types.ttcn
M library/IPA_Emulation.ttcn
M selftest/gen_links.sh
9 files changed, 518 insertions(+), 3 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/bsc-nat/gen_links.sh b/bsc-nat/gen_links.sh
index 9a45c89..65b1602 100755
--- a/bsc-nat/gen_links.sh
+++ b/bsc-nat/gen_links.sh
@@ -55,5 +55,5 @@
 gen_links $DIR $FILES
 
 DIR=../library
-FILES="General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn 
IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc 
IPA_Emulation.ttcn L3_Templates.ttcn BSSMAP_Templates.ttcn 
BSSMAP_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn 
MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc RSL_Types.ttcn 
Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn BSSAP_CodecPort.ttcn"
+FILES="General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn 
IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc 
IPA_Emulation.ttcn L3_Templates.ttcn BSSMAP_Templates.ttcn 
BSSMAP_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn 
MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc RSL_Types.ttcn 
Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn BSSAP_CodecPort.ttcn 
GSUP_Types.ttcn"
 gen_links $DIR $FILES
diff --git a/bsc/gen_links.sh b/bsc/gen_links.sh
index 4316966..14771a7 100755
--- a/bsc/gen_links.sh
+++ b/bsc/gen_links.sh
@@ -76,5 +76,5 @@
 gen_links $DIR $FILES
 
 DIR=../library
-FILES="General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn 
IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc 
IPA_Emulation.ttcn L3_Templates.ttcn BSSMAP_Templates.ttcn 
BSSMAP_Emulation.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn 
RSL_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn 
MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc 
BSSAP_CodecPort.ttcn Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn 
RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc 
RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_EncDec.cc IuUP_Emulation.ttcn"
+FILES="General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn 
IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc 
IPA_Emulation.ttcn L3_Templates.ttcn BSSMAP_Templates.ttcn 
BSSMAP_Emulation.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn 
RSL_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn 
MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc 
BSSAP_CodecPort.ttcn Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn 
RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc 
RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_EncDec.cc IuUP_Emulation.ttcn 
GSUP_Types.ttcn"
 gen_links $DIR $FILES
diff --git a/hlr/GSUP_Test.ttcn b/hlr/GSUP_Test.ttcn
new file mode 100644
index 0000000..1118369
--- /dev/null
+++ b/hlr/GSUP_Test.ttcn
@@ -0,0 +1,54 @@
+module GSUP_Test {
+
+import from GSUP_Types all;
+import from IPA_Emulation all;
+
+type component test_CT {
+       var IPA_Emulation_CT vc_IPA;
+       var IPA_CCM_Parameters ccm_pars;
+       port IPA_GSUP_PT GSUP;
+};
+
+modulepar {
+       charstring mp_hlr_ip := "127.0.0.1";
+       integer mp_hlr_gsup_port := 4222;
+       integer mp_hlr_ctrl_port := 4259;
+};
+
+function f_init() runs on test_CT {
+       ccm_pars := c_IPA_default_ccm_pars;
+       ccm_pars.name := "Osmocom TTCN-3 GSUP Simulator";
+
+       vc_IPA := IPA_Emulation_CT.create("IPA");
+       map(vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
+       connect(vc_IPA:IPA_GSUP_PORT, self:GSUP);
+       vc_IPA.start(IPA_Emulation.main_client(mp_hlr_ip, mp_hlr_gsup_port, "", 
-1, ccm_pars));
+}
+
+testcase TC_gsup_sai_err_invalid_imsi() runs on test_CT {
+       var hexstring imsi;
+       timer T := 10.0;
+
+       f_init();
+
+       imsi := '01234'H;
+       GSUP.send(valueof(ts_GSUP_SAI_REQ(imsi)));
+       T.start;
+       alt {
+               [] GSUP.receive(tr_GSUP_SAI_ERR(imsi, 17)) {
+                       setverdict(pass);
+               }
+               [] GSUP.receive(tr_GSUP_SAI_RES(imsi)) {
+                       setverdict(fail);
+               }
+               [] T.timeout {
+                       setverdict(inconc);
+               }
+       }
+}
+
+control {
+       execute( TC_gsup_sai_err_invalid_imsi() );
+};
+
+};
diff --git a/hlr/Makefile b/hlr/Makefile
new file mode 100644
index 0000000..3f0952a
--- /dev/null
+++ b/hlr/Makefile
@@ -0,0 +1,193 @@
+# This Makefile was generated by the Makefile Generator
+# of the TTCN-3 Test Executor version CRL 113 200/6 R3A
+# for Harald Welte (laforge@nataraja) on Thu Dec 28 17:35:00 2017
+
+# Copyright (c) 2000-2017 Ericsson Telecom AB
+
+# The following make commands are available:
+# - make, make all      Builds the executable test suite.
+# - make archive        Archives all source files.
+# - make check          Checks the semantics of TTCN-3 and ASN.1modules.
+# - make port           Generates port skeletons.
+# - make clean          Removes all generated files.
+# - make compile        Translates TTCN-3 and ASN.1 modules to C++.
+# - make dep            Creates/updates dependency list.
+# - make executable     Builds the executable test suite.
+# - make library        Builds the library archive.
+# - make objects        Builds the object files without linking the executable.
+# - make shared_objects Builds the shared object files without linking the 
executable.
+#
+# Set these variables...
+#
+
+# The path of your TTCN-3 Test Executor installation:
+# Uncomment this line to override the environment variable.
+ifndef TTCN3_DIR
+TTCN3_DIR = /usr
+endif
+
+# Your platform: (SOLARIS, SOLARIS8, LINUX, FREEBSD or WIN32)
+PLATFORM = LINUX
+
+# Your C++ compiler:
+# (if you change the platform, you may need to change the compiler)
+CXX = g++ 
+
+# Flags for the C++ preprocessor (and makedepend as well):
+CPPFLAGS = -D$(PLATFORM) -DMAKEDEPEND_RUN -I$(TTCN3_DIR)/include 
-I/usr/include/titan
+
+# Flags for the C++ compiler:
+CXXFLAGS = -Wall -fPIC  
+
+# Flags for the linker:
+LDFLAGS = -L /usr/lib/titan -fPIC
+
+ifeq ($(PLATFORM), WIN32)
+# Silence linker warnings.
+LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc
+endif
+
+# Utility to create library files
+AR = ar
+ARFLAGS = 
+
+# Flags for the TTCN-3 and ASN.1 compiler:
+COMPILER_FLAGS = -L 
+
+# Execution mode: (either ttcn3 or ttcn3-parallel)
+TTCN3_LIB = ttcn3-parallel-dynamic
+
+# The path of your libxml2 installation:
+# If you do not have your own one, leave it unchanged.
+XMLDIR = $(TTCN3_DIR)
+
+# Directory to store the archived source files:
+# Note: you can set any directory except ./archive
+ARCHIVE_DIR = backup
+
+#
+# You may change these variables. Add your files if necessary...
+#
+
+# TTCN-3 modules of this project:
+TTCN3_MODULES = GSUP_Test.ttcn GSM_Types.ttcn GSUP_Types.ttcn 
General_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn 
IPA_Emulation.ttcn IPA_Types.ttcn IPL4asp_Functions.ttcn IPL4asp_PortType.ttcn 
IPL4asp_Types.ttcn MGCP_CodecPort.ttcn MGCP_Types.ttcn MTP3asp_PortType.ttcn 
MTP3asp_Types.ttcn Osmocom_CTRL_Types.ttcn Osmocom_Types.ttcn RSL_Types.ttcn 
SDP_Types.ttcn Socket_API_Definitions.ttcn TCCConversion_Functions.ttcn 
TCCInterface_Functions.ttcn
+
+# ASN.1 modules of this project:
+ASN1_MODULES =
+
+# C++ source & header files generated from the TTCN-3 & ASN.1 modules of
+# this project:
+GENERATED_SOURCES = GSUP_Test.cc GSM_Types.cc GSUP_Types.cc General_Types.cc 
IPA_CodecPort.cc IPA_CodecPort_CtrlFunct.cc IPA_Emulation.cc IPA_Types.cc 
IPL4asp_Functions.cc IPL4asp_PortType.cc IPL4asp_Types.cc MGCP_CodecPort.cc 
MGCP_Types.cc MTP3asp_PortType.cc MTP3asp_Types.cc Osmocom_CTRL_Types.cc 
Osmocom_Types.cc RSL_Types.cc SDP_Types.cc Socket_API_Definitions.cc 
TCCConversion_Functions.cc TCCInterface_Functions.cc
+GENERATED_HEADERS = GSUP_Test.hh GSM_Types.hh GSUP_Types.hh General_Types.hh 
IPA_CodecPort.hh IPA_CodecPort_CtrlFunct.hh IPA_Emulation.hh IPA_Types.hh 
IPL4asp_Functions.hh IPL4asp_PortType.hh IPL4asp_Types.hh MGCP_CodecPort.hh 
MGCP_Types.hh MTP3asp_PortType.hh MTP3asp_Types.hh Osmocom_CTRL_Types.hh 
Osmocom_Types.hh RSL_Types.hh SDP_Types.hh Socket_API_Definitions.hh 
TCCConversion_Functions.hh TCCInterface_Functions.hh
+
+# C/C++ Source & header files of Test Ports, external functions and
+# other modules:
+USER_SOURCES = IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc 
IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc SDP_EncDec.cc 
MGCP_CodecPort_CtrlFunctDef.cc SDP_parse_.tab.c lex.SDP_parse_.c
+USER_HEADERS = IPL4asp_PT.hh SDP_parse_.tab.h
+
+# Shared object files of this project:
+SHARED_OBJECTS = GSUP_Test.so GSM_Types.so GSUP_Types.so General_Types.so 
IPA_CodecPort.so IPA_CodecPort_CtrlFunct.so IPA_Emulation.so IPA_Types.so 
IPL4asp_Functions.so IPL4asp_PortType.so IPL4asp_Types.so MGCP_CodecPort.so 
MGCP_Types.so MTP3asp_PortType.so MTP3asp_Types.so Osmocom_CTRL_Types.so 
Osmocom_Types.so RSL_Types.so SDP_Types.so Socket_API_Definitions.so 
TCCConversion_Functions.so TCCInterface_Functions.so 
IPA_CodecPort_CtrlFunctDef.so IPL4asp_PT.so IPL4asp_discovery.so 
TCCConversion.so TCCInterface.so SDP_EncDec.so MGCP_CodecPort_CtrlFunctDef.so 
SDP_parse_.tab.so lex.SDP_parse_.so
+
+# Object files of this project that are needed for the executable test suite:
+OBJECTS = $(GENERATED_OBJECTS) $(USER_OBJECTS)
+
+GENERATED_OBJECTS = GSUP_Test.o GSM_Types.o GSUP_Types.o General_Types.o 
IPA_CodecPort.o IPA_CodecPort_CtrlFunct.o IPA_Emulation.o IPA_Types.o 
IPL4asp_Functions.o IPL4asp_PortType.o IPL4asp_Types.o MGCP_CodecPort.o 
MGCP_Types.o MTP3asp_PortType.o MTP3asp_Types.o Osmocom_CTRL_Types.o 
Osmocom_Types.o RSL_Types.o SDP_Types.o Socket_API_Definitions.o 
TCCConversion_Functions.o TCCInterface_Functions.o
+
+USER_OBJECTS = IPA_CodecPort_CtrlFunctDef.o IPL4asp_PT.o IPL4asp_discovery.o 
TCCConversion.o TCCInterface.o SDP_EncDec.o MGCP_CodecPort_CtrlFunctDef.o 
SDP_parse_.tab.o lex.SDP_parse_.o
+
+# Other files of the project (Makefile, configuration files, etc.)
+# that will be added to the archived source files:
+OTHER_FILES = Makefile
+
+# The name of the executable test suite:
+EXECUTABLE = GSUP_Test
+
+
+
+LIBRARY = lib$(EXECUTABLE).so
+
+TARGET = $(EXECUTABLE)
+
+#
+# Do not modify these unless you know what you are doing...
+# Platform specific additional libraries:
+#
+SOLARIS_LIBS = -lsocket -lnsl -lxml2
+SOLARIS8_LIBS = -lsocket -lnsl -lxml2
+LINUX_LIBS = -lxml2
+FREEBSD_LIBS = -lxml2
+WIN32_LIBS = -lxml2
+
+#
+# Rules for building the executable...
+#
+
+all: $(TARGET) ;
+
+shared_objects: $(SHARED_OBJECTS) ;
+
+executable: $(EXECUTABLE) ;
+
+library: $(LIBRARY) ;
+
+objects: $(OBJECTS) compile;
+
+$(EXECUTABLE): $(SHARED_OBJECTS)
+       if $(CXX) $(LDFLAGS) -o $@ -Wl,--no-as-needed $(SHARED_OBJECTS) \
+       -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \
+       -L$(OPENSSL_DIR)/lib -lcrypto \
+       -L$(XMLDIR)/lib $($(PLATFORM)_LIBS); \
+       then : ; else $(TTCN3_DIR)/bin/titanver $(OBJECTS); exit 1; fi
+
+$(LIBRARY): $(OBJECTS)
+       $(CXX) -shared -o $@ $(OBJECTS)
+
+.cc.o .c.o:
+       $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
+
+%.so: %.o
+       $(CXX) -shared -o $@ $<
+
+$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile
+       @if [ ! -f $@ ]; then rm -f compile; $(MAKE) compile; fi
+
+check: $(TTCN3_MODULES) $(ASN1_MODULES)
+       $(TTCN3_DIR)/bin/ttcn3_compiler -s $(COMPILER_FLAGS) \
+       $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES)
+
+port: $(TTCN3_MODULES)  $(ASN1_MODULES)
+       $(TTCN3_DIR)/bin/ttcn3_compiler -t $(COMPILER_FLAGS) \
+       $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES)
+
+compile: $(TTCN3_MODULES)  $(ASN1_MODULES)
+       $(TTCN3_DIR)/bin/ttcn3_compiler $(COMPILER_FLAGS) \
+       $(TTCN3_MODULES) $(ASN1_MODULES) - $?
+       touch $@
+
+clean:
+       -rm -f $(EXECUTABLE) $(LIBRARY) $(OBJECTS) $(GENERATED_HEADERS) \
+       $(GENERATED_SOURCES) $(SHARED_OBJECTS) compile \
+       tags *.log
+
+dep: $(GENERATED_SOURCES) $(USER_SOURCES) ;
+       makedepend $(CPPFLAGS) -DMAKEDEPEND_RUN $(GENERATED_SOURCES) 
$(USER_SOURCES)
+
+archive:
+       mkdir -p $(ARCHIVE_DIR)
+       tar -cvhf - $(TTCN3_MODULES) $(ASN1_MODULES) \
+       $(USER_HEADERS) $(USER_SOURCES) $(OTHER_FILES) \
+       | gzip >$(ARCHIVE_DIR)/`basename $(TARGET) .exe`-`date 
'+%y%m%d-%H%M'`.tgz
+
+diag:
+       $(TTCN3_DIR)/bin/ttcn3_compiler -v 2>&1
+       $(TTCN3_DIR)/bin/mctr_cli -v 2>&1
+       $(CXX) -v 2>&1
+       @echo TTCN3_DIR=$(TTCN3_DIR)
+       @echo OPENSSL_DIR=$(OPENSSL_DIR)
+       @echo XMLDIR=$(XMLDIR)
+       @echo PLATFORM=$(PLATFORM)
+
+#
+# Add your rules here if necessary...
+#
+
diff --git a/hlr/gen_links.sh b/hlr/gen_links.sh
new file mode 100755
index 0000000..6d83882
--- /dev/null
+++ b/hlr/gen_links.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+BASEDIR=../deps
+
+gen_links() {
+       DIR=$1
+       FILES=$*
+       for f in $FILES; do
+               echo "Linking $f"
+               ln -sf $DIR/$f $f
+       done
+}
+
+DIR=$BASEDIR/titan.Libraries.TCCUsefulFunctions/src
+FILES="TCCInterface_Functions.ttcn TCCConversion_Functions.ttcn 
TCCConversion.cc TCCConversion.hh
+TCCInterface.cc TCCInterface_ip.h"
+gen_links $DIR $FILES
+
+DIR=$BASEDIR/titan.TestPorts.Common_Components.Socket-API/src
+FILES="Socket_API_Definitions.ttcn"
+gen_links $DIR $FILES
+
+DIR=$BASEDIR/titan.TestPorts.IPL4asp/src
+FILES="IPL4asp_Functions.ttcn  IPL4asp_PT.cc  IPL4asp_PT.hh 
IPL4asp_PortType.ttcn  IPL4asp_Types.ttcn  IPL4asp_discovery.cc 
IPL4asp_protocol_L234.hh"
+gen_links $DIR $FILES
+
+DIR=$BASEDIR/titan.ProtocolModules.SDP/src
+FILES="SDP_EncDec.cc SDP_Types.ttcn SDP_parse_.tab.c SDP_parse_.tab.h 
SDP_parse_parser.h SDP_parser.l
+SDP_parser.y lex.SDP_parse_.c"
+gen_links $DIR $FILES
+
+DIR=../MTP3asp_CNL113337/src
+FILES="MTP3asp_PortType.ttcn  MTP3asp_Types.ttcn"
+gen_links $DIR $FILES
+
+DIR=../library
+FILES="General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn 
IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc 
IPA_Emulation.ttcn RSL_Types.ttcn MGCP_Types.ttcn MGCP_CodecPort.ttcn 
MGCP_CodecPort_CtrlFunctDef.cc Osmocom_CTRL_Types.ttcn GSUP_Types.ttcn"
+gen_links $DIR $FILES
diff --git a/hlr/regen_makefile.sh b/hlr/regen_makefile.sh
new file mode 100755
index 0000000..37991a6
--- /dev/null
+++ b/hlr/regen_makefile.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+MAIN="GSUP_Test.ttcn"
+
+FILES="*.ttcn IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc 
TCCConversion.cc TCCInterface.cc SDP_EncDec.cc MGCP_CodecPort_CtrlFunctDef.cc 
*.c"
+
+../regen-makefile.sh $MAIN $FILES
diff --git a/library/GSUP_Types.ttcn b/library/GSUP_Types.ttcn
new file mode 100644
index 0000000..b994d1f
--- /dev/null
+++ b/library/GSUP_Types.ttcn
@@ -0,0 +1,197 @@
+module GSUP_Types {
+
+import from General_Types all;
+import from Osmocom_Types all;
+
+type enumerated GSUP_IEI {
+       OSMO_GSUP_IMSI_IE               ('01'O),
+       OSMO_GSUP_CAUSE_IE              ('02'O),
+       OSMO_GSUP_AUTH_TUPLE_IE         ('03'O),
+       OSMO_GSUP_PDP_INFO_COMPL_IE     ('04'O),
+       OSMO_GSUP_PDP_INFO_IE           ('05'O),
+       OSMO_GSUP_CANCEL_TYPE_IE        ('06'O),
+       OSMO_GSUP_FREEZE_PTMSI_IE       ('07'O),
+       OSMO_GSUP_MSISDN_IE             ('08'O),
+       OSMO_GSUP_HLR_NUMBER_IE         ('09'O),
+       OSMO_GSUP_PDP_CONTEXT_ID_IE     ('10'O),
+       OSMO_GSUP_PDP_TYPE_IE           ('11'O),
+       OSMO_GSUP_ACCESS_POINT_NAME_IE  ('12'O),
+       OSMO_GSUP_PDP_QOS_IE            ('13'O),
+       OSMO_GSUP_CHARG_CHAR_IE         ('14'O),
+
+       OSMO_GSUP_RAND_IE               ('20'O),
+       OSMO_GSUP_SRES_IE               ('21'O),
+       OSMO_GSUP_KC_IE                 ('22'O),
+       OSMO_GSUP_IK_IE                 ('23'O),
+       OSMO_GSUP_CK_IE                 ('24'O),
+       OSMO_GSUP_AUTN_IE               ('25'O),
+       OSMO_GSUP_AUTS_IE               ('26'O),
+       OSMO_GSUP_RES_IE                ('27'O),
+       OSMO_GSUP_CN_DOMAIN_IE          ('28'O)
+} with { variant "FIELDLENGTH(8)" };
+
+type enumerated GSUP_MessageType {
+       OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST  ('00000100'B),
+       OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR    ('00000101'B),
+       OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT   ('00000110'B),
+
+       OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST   ('00001000'B),
+       OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR     ('00001001'B),
+       OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT    ('00001010'B),
+
+       OSMO_GSUP_MSGT_AUTH_FAIL_REPORT         ('00001011'B),
+
+       OSMO_GSUP_MSGT_PURGE_MS_REQUEST         ('00001100'B),
+       OSMO_GSUP_MSGT_PURGE_MS_ERROR           ('00001101'B),
+       OSMO_GSUP_MSGT_PURGE_MS_RESULT          ('00001110'B),
+
+       OSMO_GSUP_MSGT_INSERT_DATA_REQUEST      ('00010000'B),
+       OSMO_GSUP_MSGT_INSERT_DATA_ERROR        ('00010001'B),
+       OSMO_GSUP_MSGT_INSERT_DATA_RESULT       ('00010010'B),
+
+       OSMO_GSUP_MSGT_DELETE_DATA_REQUEST      ('00010100'B),
+       OSMO_GSUP_MSGT_DELETE_DATA_ERROR        ('00010101'B),
+       OSMO_GSUP_MSGT_DELETE_DATA_RESULT       ('00010110'B),
+
+       OSMO_GSUP_MSGT_LOCATION_CANCEL_REQUEST  ('00011100'B),
+       OSMO_GSUP_MSGT_LOCATION_CANCEL_ERROR    ('00011101'B),
+       OSMO_GSUP_MSGT_LOCATION_CANCEL_RESULT   ('00011110'B)
+} with { variant "FIELDLENGTH(8)" };
+
+type enumerated GSUP_CancelType {
+       OSMO_GSUP_CANCEL_TYPE_UPDATE            (1),
+       OSMO_GSUP_CANCEL_TYPE_WITHDRAW          (2)
+} with { variant "FIELDLENGTH(8)" };
+
+type enumerated GSUP_CnDomain {
+       OSMO_GSUP_CN_DOMAIN_PS                  (1),
+       OSMO_GSUP_CN_DOMAIN_CS                  (2)
+} with { variant "FIELDLENGTH(8)" };
+
+type record GSUP_IE {
+       GSUP_IEI        tag,
+       uint8_t         len,
+       GSUP_IeValue    val
+} with { variant (len) "LENGTHTO(val)"
+        variant (val) "CROSSTAG(imsi, tag = OSMO_GSUP_IMSI_IE;
+                                cause, tag = OSMO_GSUP_CAUSE_IE;
+                                cancel_type, tag = OSMO_GSUP_CANCEL_TYPE_IE;
+                                auts, tag = OSMO_GSUP_AUTS_IE;
+                                rand, tag = OSMO_GSUP_RAND_IE;
+                                msisdn, tag = OSMO_GSUP_MSISDN_IE;
+                                hlr_number, tag = OSMO_GSUP_HLR_NUMBER_IE;
+                                cn_domain, tag = OSMO_GSUP_CN_DOMAIN_IE;
+                                charg_char, tag = OSMO_GSUP_CHARG_CHAR_IE)"
+};
+
+type record of GSUP_IE GSUP_IEs;
+
+type union GSUP_IeValue {
+       hexstring       imsi,
+       integer         cause,
+       GSUP_CancelType cancel_type,
+       //boolean               pdp_info_compl,
+       //boolean               freeze_ptmsi,
+       GSUP_IEs        pdp_info,
+       GSUP_IEs        auth_tuple,
+       octetstring     auts,
+       octetstring     rand,
+       hexstring       msisdn,
+       octetstring     hlr_number,
+       GSUP_CnDomain   cn_domain,
+       octetstring     charg_char
+};
+
+type record GSUP_PDU {
+       GSUP_MessageType        msg_type,
+       GSUP_IEs                ies
+};
+
+external function enc_GSUP_PDU(in GSUP_PDU msg) return octetstring
+       with { extension "prototype(convert) encode(RAW)" };
+
+external function dec_GSUP_PDU(in octetstring msg) return GSUP_PDU
+       with { extension "prototype(convert) decode(RAW)" };
+
+
+template GSUP_PDU tr_GSUP(template GSUP_MessageType msgt := ?, template 
GSUP_IEs ies := *) := {
+       msg_type := msgt,
+       ies := ies
+}
+
+template GSUP_PDU ts_GSUP(GSUP_MessageType msgt, GSUP_IEs ies := {}) := {
+       msg_type := msgt,
+       ies := ies
+}
+
+template GSUP_PDU ts_GSUP_SAI_REQ(hexstring imsi) :=
+       ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, { 
valueof(ts_GSUP_IE_IMSI(imsi)) });
+
+template GSUP_PDU tr_GSUP_SAI_ERR(template hexstring imsi, template integer 
cause) :=
+       tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
+                       tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
+
+template GSUP_PDU tr_GSUP_SAI_RES(template hexstring imsi) :=
+       tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
+                       tr_GSUP_IE_IMSI(imsi), *, 
tr_GSUP_IE(OSMO_GSUP_AUTH_TUPLE_IE), * });
+
+
+
+template GSUP_IE tr_GSUP_IE(template GSUP_IEI iei, template GSUP_IeValue val 
:= ?) := {
+       tag := iei,
+       len := ?,
+       val := val
+}
+
+template (value) GSUP_IE ts_GSUP_IE_IMSI(hexstring imsi) := {
+       tag := OSMO_GSUP_IMSI_IE,
+       len := 0, /* overwritten */
+       val := {
+               imsi := imsi
+       }
+}
+
+template GSUP_IE tr_GSUP_IE_IMSI(template hexstring imsi) := {
+       tag := OSMO_GSUP_IMSI_IE,
+       len := ?,
+       val := {
+               imsi := imsi
+       }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_Cause(integer cause) := {
+       tag := OSMO_GSUP_CAUSE_IE,
+       len := 0, /* overwritten */
+       val := {
+               cause := cause
+       }
+}
+
+template GSUP_IE tr_GSUP_IE_Cause(template integer cause) := {
+       tag := OSMO_GSUP_CAUSE_IE,
+       len := ?,
+       val := {
+               cause := cause
+       }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_AUTS(octetstring auts) := {
+       tag := OSMO_GSUP_AUTS_IE,
+       len := 0, /* overwritten */
+       val := {
+               auts := auts
+       }
+}
+
+template (value) GSUP_IE ts_GSUP_IE_RAND(octetstring rand) := {
+       tag := OSMO_GSUP_RAND_IE,
+       len := 0, /* overwritten */
+       val := {
+               rand := rand
+       }
+}
+
+
+
+
+} with { encode "RAW"; variant "FIELDORDER(msb)" }
diff --git a/library/IPA_Emulation.ttcn b/library/IPA_Emulation.ttcn
index ddedb39..9bad69f 100644
--- a/library/IPA_Emulation.ttcn
+++ b/library/IPA_Emulation.ttcn
@@ -17,6 +17,7 @@
 import from RSL_Types all;
 
 import from MGCP_Types all;
+import from GSUP_Types all;
 
 import from Osmocom_CTRL_Types all;
 
@@ -99,6 +100,12 @@
        inout CtrlMessage, ASP_IPA_Event;
 } with { extension "internal" }
 
+/* Client port for CTRL inside IPA */
+type port IPA_GSUP_PT message {
+       inout GSUP_PDU, ASP_IPA_Event;
+} with { extension "internal" }
+
+
 type component IPA_Emulation_CT {
        /* down-facing port to IPA codec port */
        port IPA_CODEC_PT IPA_PORT;
@@ -110,6 +117,9 @@
        port IPA_RSL_PT IPA_RSL_PORT;
        /* up-facing port for CTRL */
        port IPA_CTRL_PT IPA_CTRL_PORT;
+       /* up-facing port for GSUP */
+       port IPA_GSUP_PT IPA_GSUP_PORT;
+
        /* up-facing port for other streams */
        port IPA_SP_PT IPA_SP_PORT;
 
@@ -192,6 +202,9 @@
        }
        if (IPA_CTRL_PORT.checkstate("Connected")) {
                IPA_CTRL_PORT.send(evt);
+       }
+       if (IPA_GSUP_PORT.checkstate("Connected")) {
+               IPA_GSUP_PORT.send(evt);
        }
        /* FIXME: to other ports */
 }
@@ -348,6 +361,10 @@
        IPA_CTRL_PORT.send(dec_CtrlMessage(msg_ch));
 }
 
+private function f_gsup_to_user(octetstring msg) runs on IPA_Emulation_CT {
+       IPA_GSUP_PORT.send(dec_GSUP_PDU(msg));
+}
+
 private function f_mgcp_to_ud(octetstring payload) runs on IPA_Emulation_CT 
return ASP_IPA_Unitdata {
        if (mp_ipa_mgcp_uses_osmo_ext) {
                return valueof(t_ASP_IPA_UD(IPAC_PROTO_MGCP_OLD, payload));
@@ -365,6 +382,7 @@
        var MgcpCommand mgcp_cmd;
        var MgcpResponse mgcp_rsp;
        var CtrlMessage ctrl_msg;
+       var GSUP_PDU gsup_msg;
        var octetstring payload;
        var ASP_RSL_Unitdata rsl;
 
@@ -399,6 +417,8 @@
                                                f_mgcp_to_user(ipa_rx.msg);
                                        } case (IPAC_PROTO_EXT_CTRL) {
                                                f_ctrl_to_user(ipa_rx.msg);
+                                       } case (IPAC_PROTO_EXT_GSUP) {
+                                               f_gsup_to_user(ipa_rx.msg);
                                        } case else {
                                                
IPA_SP_PORT.send(f_to_asp(ipa_rx));
                                        }
@@ -451,6 +471,12 @@
                        IPA_PORT.send(f_from_asp(g_ipa_conn_id, ipa_ud));
                }
 
+               [] IPA_GSUP_PORT.receive(GSUP_PDU:?) -> value gsup_msg {
+                       payload := enc_GSUP_PDU(gsup_msg);
+                       ipa_ud := valueof(t_ASP_IPA_UD(IPAC_PROTO_OSMO, 
payload, IPAC_PROTO_EXT_GSUP));
+                       IPA_PORT.send(f_from_asp(g_ipa_conn_id, ipa_ud));
+               }
+
                /* Received RSL -> down into IPA */
                [] IPA_RSL_PORT.receive(ASP_RSL_Unitdata:?) -> value rsl {
                        IPA_PORT.send(f_from_rsl(g_ipa_conn_id, rsl));
diff --git a/selftest/gen_links.sh b/selftest/gen_links.sh
index 0dd6ea0..5f53e44 100755
--- a/selftest/gen_links.sh
+++ b/selftest/gen_links.sh
@@ -52,5 +52,5 @@
 gen_links $DIR $FILES
 
 DIR=../library
-FILES="General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn 
IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc 
IPA_Emulation.ttcn L3_Templates.ttcn BSSMAP_Templates.ttcn 
RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn MGCP_Types.ttcn 
MGCP_Templates.ttcn BSSAP_CodecPort.ttcn Osmocom_CTRL_Types.ttcn 
Osmocom_CTRL_Functions.ttcn"
+FILES="General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn 
IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc 
IPA_Emulation.ttcn L3_Templates.ttcn BSSMAP_Templates.ttcn 
RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn MGCP_Types.ttcn 
MGCP_Templates.ttcn BSSAP_CodecPort.ttcn Osmocom_CTRL_Types.ttcn 
Osmocom_CTRL_Functions.ttcn GSUP_Types.ttcn"
 gen_links $DIR $FILES

-- 
To view, visit https://gerrit.osmocom.org/5617
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Idd7a6aca1ab193da39294f49a3adc4c1cd7cecff
Gerrit-PatchSet: 1
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <[email protected]>
Gerrit-Reviewer: Harald Welte <[email protected]>
Gerrit-Reviewer: Jenkins Builder

Reply via email to