GSUP Support and first test against OsmoHLR
Change-Id: Idd7a6aca1ab193da39294f49a3adc4c1cd7cecff
This commit is contained in:
parent
2e1a1da674
commit
df32723446
|
@ -55,5 +55,5 @@ FILES="RTP_EncDec.cc RTP_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 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
|
||||
|
|
|
@ -76,5 +76,5 @@ FILES="RTP_EncDec.cc RTP_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 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
|
||||
|
|
|
@ -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() );
|
||||
};
|
||||
|
||||
};
|
|
@ -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...
|
||||
#
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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)" }
|
|
@ -17,6 +17,7 @@ import from MTP3asp_PortType all;
|
|||
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 @@ type port IPA_CTRL_PT message {
|
|||
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 @@ type component IPA_Emulation_CT {
|
|||
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;
|
||||
|
||||
|
@ -193,6 +203,9 @@ private function f_send_IPA_EVT(template ASP_IPA_Event evt) runs on IPA_Emulatio
|
|||
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 @@ private function f_ctrl_to_user(octetstring msg) runs on IPA_Emulation_CT {
|
|||
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 @@ private function ScanEvents() runs on IPA_Emulation_CT {
|
|||
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 @@ private function ScanEvents() runs on IPA_Emulation_CT {
|
|||
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 @@ private function ScanEvents() runs on IPA_Emulation_CT {
|
|||
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));
|
||||
|
|
|
@ -52,5 +52,5 @@ SDP_parser.y lex.SDP_parse_.c"
|
|||
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
|
||||
|
|
Loading…
Reference in New Issue