Commit 4c100a29 authored by Rohit Gupta's avatar Rohit Gupta

add license to autotest framework + delete files not used in project

parent b481bfd9
#!/bin/bash
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.0 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
# \author Navid Nikaein, Rohit Gupta
if [ -s $OPENAIR_DIR/cmake_targets/tools/build_helper ] ; then
source $OPENAIR_DIR/cmake_targets/tools/build_helper
......
#!/usr/bin/python
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.0 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
# \author Navid Nikaein, Rohit Gupta
import time
import serial
......
#!/bin/bash
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.0 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
# \author Navid Nikaein, Rohit Gupta
#Simple script to retry git clone in case of failure
......
#!/bin/bash
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.0 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
# \author Navid Nikaein, Rohit Gupta
#arg0 -> Name of executable
#args[1...N] -> arguments to be passed to executable
......
#!/bin/bash
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements. See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
# * the OAI Public License, Version 1.0 (the "License"); you may not use this file
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# * http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# * contact@openairinterface.org
# */
# \author Navid Nikaein, Rohit Gupta
echo "This script stops exmimo2 as it might be transmitting signal by itself if lte-softmodem terminates incorrectly"
......
PLATFORM = linux-x86-32
NUM_PROC = $(shell echo `cat /proc/cpuinfo | grep processor | wc -l`)
NUM_PROC = 1
LIBS = -L/usr/local/lib -Llib -lSockets -lasn1rrc -lpthread -lssl -lcrypto -lssl -lxml2
#------------------------------------------------
# DIRS
#------------------------------------------------
UPDIR := $(shell /bin/pwd)
BIN_DIR = bin
SRC_DIR = $(UPDIR)/src
COM_DIR = $(SRC_DIR)/com
FOREIGN_DIR = $(SRC_DIR)/foreign
SOCKETS_DIR = $(FOREIGN_DIR)/sockets-2.3.9.4
TCPIP_DIR = $(FOREIGN_DIR)/tcpip
SQL_DIR = $(FOREIGN_DIR)/sql
ASN1_RRC_SPEC_DIR = $(FOREIGN_DIR)/generated_c_asn1_rrc/ASN1_files
RRC_RRM_ASN1_DIR = $(COM_DIR)/asn1
RADIO_RESOURCES_DIR = $(SRC_DIR)/radio_resources
RRC_DIR = ../RRC/LITE
TEST_DIR = $(SRC_DIR)/test
#------------------------------------------------
# INCLUDES
#------------------------------------------------
include Makefile.objs
include Makefile.Defines.$(PLATFORM)
INCLUDE = -I$(SRC_DIR) -I$(SOCKETS_DIR) -I$(SQL_DIR) -I$(COM_DIR) -I$(COM_DIR)/rrc -I$(COM_DIR)/rrm \
-I$(TCPIP_DIR) -I$(RADIO_RESOURCES_DIR) -I$(RRC_RRM_ASN1_DIR) -I$(TEST_DIR)
#------------------------------------------------
# CFLAGS
#------------------------------------------------
CPPFLAGS = $(CFLAGS)
#CPPFLAGS += -fpermissive -std=gnu++98
#------------------------------------------------
# LIBS
#------------------------------------------------
libasn1rrc: libasn1rrc.a
mv libasn1rrc.a lib
libsqlite: libsqlite.a
mv libsqlite.a lib
libSockets: libSockets.a
mv libSockets.a lib
libasn1rrc.a: $(ASN1RRC_OBJS)
ar cru $@ $^
ranlib $@
libSockets.a: $(SOCKETS_OBJS)
ar cru $@ $^
ranlib $@
libsqlite.a: $(SQLITE_OBJS)
ar cru $@ $^
ranlib $@
LDFLAGS += -rdynamic
#------------------------------------------------
# PROGS
#------------------------------------------------
PROGS = rrm_exe test_exe
gen-c-from-asn1:
#-fbless-SIZE
# Allow SIZE() constraint for INTEGER, ENUMERATED, and other types
# for which this constraint is normally prohibited by the stan-
# dard. This is a violation of ASN.1 standard, and the compiler
# may fail to produce a meaningful code.
#-fcompound-names
# Using this option prevents name collisions in the target source
# code by using complex names for target language structures.
# (Name collisions may occur if the ASN.1 module reuses the same
# identifiers in multiple contexts).
#-findirect-choice
# When generating code for a CHOICE type, compile the CHOICE mem-
# bers as indirect pointers instead of declaring them inline. Con-
# sider using this option together with -fno-include-deps to pre-
# vent circular references.
#-fknown-extern-type=<name>
# Pretend the specified type is known. The compiler will assume
# the target language source files for the given type have been
# provided manually.
#-fno-constraints
# Do not generate ASN.1 subtype constraint checking code. This may
# make a shorter executable.
#-fno-include-deps
# Do not generate courtesy #include lines for non-critical type
# dependencies. Helps prevent namespace collisions.
#-funnamed-unions
# Enable unnamed unions in the definitions of target language's
# structures.
#cd $(RRC_RRM_ASN1_DIR);asn1c -gen-PER -fcompound-names -fnative-types -fskeletons-copy $(ASN1_RRC_SPEC_DIR)/EUTRA-RRC-Definitions.asn $(RRC_RRM_ASN1_DIR)/rrc-rrm.asn; cd -
cd $(RRC_RRM_ASN1_DIR);asn1c -gen-PER -fno-include-deps -fcompound-names -fnative-types -fskeletons-copy $(ASN1_RRC_SPEC_DIR)/EUTRA-RRC-Definitions.asn $(RRC_RRM_ASN1_DIR)/rrc-rrm.asn; cd -
libs:
make -j$(NUM_PROC) libasn1rrc libsqlite libSockets
all: libs
make -j$(NUM_PROC) $(PROGS)
rrm: $(RRM_OBJS) lib/libSockets.a lib/libasn1rrc.a
g++ -o $@ $^ $(LIBS)
mv rrm $(BIN_DIR)
rrm_exe: clean_test_objs
make -j$(NUM_PROC) rrm
clean_test_objs:
find $(COM_DIR)/rrc/ -name '*Response.o' -delete -print;
find $(COM_DIR)/rrc/ -name '*Reconfiguration.o' -delete -print;
dummy_rrc: CFLAGS += -DTEST_SCENARIO=1
dummy_rrc: $(TEST_OBJS) lib/libSockets.a lib/libasn1rrc.a
g++ -o $@ $^ $(LIBS)
mv dummy_rrc $(BIN_DIR)
test_exe: clean_test_objs
make -j$(NUM_PROC) dummy_rrc
clean:
find -name '*.o' -delete -print; \
find -name '*.bak' -delete -print; \
find -name '*.d' -delete -print; \
find -name '*~' -delete -print; \
rm -f bin/*; \
rm -f lib/*
cleanrrm:
find src/com/rrc -name '*.o' -delete -print; \
find src/com/rrm -name '*.o' -delete -print; \
find src/com -name 'Message.o' -delete -print; \
find src/radio_resources -name '*.o' -delete -print; \
find src/com -name '*.bak' -delete -print; \
find src/radio_resources -name '*.bak' -delete -print; \
find src/com -name '*.d' -delete -print; \
find src/radio_resources -name '*.d' -delete -print; \
find src/com -name '*~' -delete -print; \
find src/radio_resources -name '*~' -delete -print; \
rm -f bin/*; \
-include *.d
CXX = g++-4.3
CFLAGS += -Wall -g $(INCLUDE) -MD -D_VERSION='"$(VERSION)"'
# turn off optimization if compiling with gcc 2.9.x:
#CFLAGS += -O0
#CFLAGS += -O2
CFLAGS += -DLINUX
#LG TEST REMOVECFLAGS += -fPIC
LIBS += \
-lssl -lcrypto \
-lpthread
LDFLAGSSO = -shared \
-Wl,-lssl \
-Wl,-lcrypto \
-Wl,-lxml2 \
-Wl,-lpthread \
-Wl,-h$(SONAME) \
-Wl,-call_shared
CXX = g++
CFLAGS += -Wall -g $(INCLUDE) -MD -D_VERSION='"$(VERSION)"'
# turn off optimization if compiling with gcc 2.9.x:
#CFLAGS += -O0
CFLAGS += -O2
CFLAGS += -DLINUX -m64
CFLAGS += -fPIC
LIBS += \
-lssl -lcrypto \
-lpthread
OBJS += Semaphore.o
LDFLAGSSO = -shared \
-Wl,-lssl \
-Wl,-lcrypto \
-Wl,-lxml2 \
-Wl,-lpthread \
-Wl,-h$(SONAME) \
-Wl,-call_shared
SUBDIRS = src
EXTRA_DIST = README ChangeLog AUTHORS COPYING INSTALL NEWS
rrm$(EXEEXT):
$(MAKE) -C src $@
default: all
all:
autoreconf -i
clean:
rm -r aclocal.m4 autom4te.cache/ config.* configure depcomp install-sh missing src/config.h.in ltmain.sh INSTALL ; \
find . -name Makefile.in -exec rm '{}' ';'
ASN1RRC_OBJS= $(RRC_RRM_ASN1_DIR)/AC-BarringConfig.o \
$(RRC_RRM_ASN1_DIR)/AccessStratumRelease.o \
$(RRC_RRM_ASN1_DIR)/AdditionalSpectrumEmission.o \
$(RRC_RRM_ASN1_DIR)/AllowedMeasBandwidth.o \
$(RRC_RRM_ASN1_DIR)/AntennaInfoCommon.o \
$(RRC_RRM_ASN1_DIR)/AntennaInfoDedicated.o \
$(RRC_RRM_ASN1_DIR)/ARFCN-ValueCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/ARFCN-ValueEUTRA.o \
$(RRC_RRM_ASN1_DIR)/ARFCN-ValueGERAN.o \
$(RRC_RRM_ASN1_DIR)/ARFCN-ValueUTRA.o \
$(RRC_RRM_ASN1_DIR)/asn_codecs_prim.o \
$(RRC_RRM_ASN1_DIR)/asn_SEQUENCE_OF.o \
$(RRC_RRM_ASN1_DIR)/asn_SET_OF.o \
$(RRC_RRM_ASN1_DIR)/BandclassCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/BandClassInfoCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/BandClassListCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/BandClassPriority1XRTT.o \
$(RRC_RRM_ASN1_DIR)/BandClassPriorityHRPD.o \
$(RRC_RRM_ASN1_DIR)/BandClassPriorityList1XRTT.o \
$(RRC_RRM_ASN1_DIR)/BandClassPriorityListHRPD.o \
$(RRC_RRM_ASN1_DIR)/BandIndicatorGERAN.o \
$(RRC_RRM_ASN1_DIR)/BandInfoEUTRA.o \
$(RRC_RRM_ASN1_DIR)/BandListEUTRA.o \
$(RRC_RRM_ASN1_DIR)/BCCH-BCH-Message.o \
$(RRC_RRM_ASN1_DIR)/BCCH-BCH-MessageType.o \
$(RRC_RRM_ASN1_DIR)/BCCH-Config.o \
$(RRC_RRM_ASN1_DIR)/BCCH-DL-SCH-Message.o \
$(RRC_RRM_ASN1_DIR)/BCCH-DL-SCH-MessageType.o \
$(RRC_RRM_ASN1_DIR)/ber_decoder.o \
$(RRC_RRM_ASN1_DIR)/ber_tlv_length.o \
$(RRC_RRM_ASN1_DIR)/ber_tlv_tag.o \
$(RRC_RRM_ASN1_DIR)/BIT_STRING.o \
$(RRC_RRM_ASN1_DIR)/BlackCellsToAddModList.o \
$(RRC_RRM_ASN1_DIR)/BlackCellsToAddMod.o \
$(RRC_RRM_ASN1_DIR)/BOOLEAN.o \
$(RRC_RRM_ASN1_DIR)/CarrierBandwidthEUTRA.o \
$(RRC_RRM_ASN1_DIR)/CarrierFreqCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/CarrierFreqEUTRA.o \
$(RRC_RRM_ASN1_DIR)/CarrierFreqGERAN.o \
$(RRC_RRM_ASN1_DIR)/CarrierFreqListUTRA-FDD.o \
$(RRC_RRM_ASN1_DIR)/CarrierFreqListUTRA-TDD.o \
$(RRC_RRM_ASN1_DIR)/CarrierFreqsGERAN.o \
$(RRC_RRM_ASN1_DIR)/CarrierFreqsInfoGERAN.o \
$(RRC_RRM_ASN1_DIR)/CarrierFreqsInfoListGERAN.o \
$(RRC_RRM_ASN1_DIR)/CarrierFreqUTRA-FDD.o \
$(RRC_RRM_ASN1_DIR)/CarrierFreqUTRA-TDD.o \
$(RRC_RRM_ASN1_DIR)/CDMA2000-Type.o \
$(RRC_RRM_ASN1_DIR)/CellChangeOrder.o \
$(RRC_RRM_ASN1_DIR)/CellGlobalIdCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/CellGlobalIdEUTRA.o \
$(RRC_RRM_ASN1_DIR)/CellGlobalIdGERAN.o \
$(RRC_RRM_ASN1_DIR)/CellGlobalIdUTRA.o \
$(RRC_RRM_ASN1_DIR)/CellIdentity.o \
$(RRC_RRM_ASN1_DIR)/CellIndexList.o \
$(RRC_RRM_ASN1_DIR)/CellIndex.o \
$(RRC_RRM_ASN1_DIR)/CellReselectionParametersCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/CellReselectionPriority.o \
$(RRC_RRM_ASN1_DIR)/CellsToAddModCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/CellsToAddModListCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/CellsToAddModList.o \
$(RRC_RRM_ASN1_DIR)/CellsToAddModListUTRA-FDD.o \
$(RRC_RRM_ASN1_DIR)/CellsToAddModListUTRA-TDD.o \
$(RRC_RRM_ASN1_DIR)/CellsToAddMod.o \
$(RRC_RRM_ASN1_DIR)/CellsToAddModUTRA-FDD.o \
$(RRC_RRM_ASN1_DIR)/CellsToAddModUTRA-TDD.o \
$(RRC_RRM_ASN1_DIR)/constraints.o \
$(RRC_RRM_ASN1_DIR)/constr_CHOICE.o \
$(RRC_RRM_ASN1_DIR)/constr_SEQUENCE.o \
$(RRC_RRM_ASN1_DIR)/constr_SEQUENCE_OF.o \
$(RRC_RRM_ASN1_DIR)/constr_SET_OF.o \
$(RRC_RRM_ASN1_DIR)/constr_TYPE.o \
$(RRC_RRM_ASN1_DIR)/CounterCheck.o \
$(RRC_RRM_ASN1_DIR)/CounterCheck-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/CounterCheckResponse.o \
$(RRC_RRM_ASN1_DIR)/CounterCheckResponse-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/CQI-ReportConfig.o \
$(RRC_RRM_ASN1_DIR)/CQI-ReportPeriodic.o \
$(RRC_RRM_ASN1_DIR)/C-RNTI.o \
$(RRC_RRM_ASN1_DIR)/CSFBParametersRequestCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/CSFBParametersRequestCDMA2000-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/CSFBParametersResponseCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/CSFBParametersResponseCDMA2000-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/CSFB-RegistrationParam1XRTT.o \
$(RRC_RRM_ASN1_DIR)/DedicatedInfoCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/DedicatedInfoNAS.o \
$(RRC_RRM_ASN1_DIR)/DeltaFList-PUCCH.o \
$(RRC_RRM_ASN1_DIR)/der_encoder.o \
$(RRC_RRM_ASN1_DIR)/DL-AM-RLC.o \
$(RRC_RRM_ASN1_DIR)/DL-CCCH-Message.o \
$(RRC_RRM_ASN1_DIR)/DL-CCCH-MessageType.o \
$(RRC_RRM_ASN1_DIR)/DL-DCCH-Message.o \
$(RRC_RRM_ASN1_DIR)/DL-DCCH-MessageType.o \
$(RRC_RRM_ASN1_DIR)/DLInformationTransfer.o \
$(RRC_RRM_ASN1_DIR)/DLInformationTransfer-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/DL-UM-RLC.o \
$(RRC_RRM_ASN1_DIR)/DRB-CountInfoList.o \
$(RRC_RRM_ASN1_DIR)/DRB-CountInfo.o \
$(RRC_RRM_ASN1_DIR)/DRB-CountMSB-InfoList.o \
$(RRC_RRM_ASN1_DIR)/DRB-CountMSB-Info.o \
$(RRC_RRM_ASN1_DIR)/DRB-Identity.o \
$(RRC_RRM_ASN1_DIR)/DRB-ToAddModList.o \
$(RRC_RRM_ASN1_DIR)/DRB-ToAddMod.o \
$(RRC_RRM_ASN1_DIR)/DRB-ToReleaseList.o \
$(RRC_RRM_ASN1_DIR)/DRX-Config.o \
$(RRC_RRM_ASN1_DIR)/EstablishmentCause.o \
$(RRC_RRM_ASN1_DIR)/ExplicitListOfARFCNs.o \
$(RRC_RRM_ASN1_DIR)/FilterCoefficient.o \
$(RRC_RRM_ASN1_DIR)/FreqPriorityEUTRA.o \
$(RRC_RRM_ASN1_DIR)/FreqPriorityListEUTRA.o \
$(RRC_RRM_ASN1_DIR)/FreqPriorityListUTRA-FDD.o \
$(RRC_RRM_ASN1_DIR)/FreqPriorityListUTRA-TDD.o \
$(RRC_RRM_ASN1_DIR)/FreqPriorityUTRA-FDD.o \
$(RRC_RRM_ASN1_DIR)/FreqPriorityUTRA-TDD.o \
$(RRC_RRM_ASN1_DIR)/FreqsPriorityGERAN.o \
$(RRC_RRM_ASN1_DIR)/FreqsPriorityListGERAN.o \
$(RRC_RRM_ASN1_DIR)/HandoverFromEUTRAPreparationRequest.o \
$(RRC_RRM_ASN1_DIR)/HandoverFromEUTRAPreparationRequest-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/Handover.o \
$(RRC_RRM_ASN1_DIR)/Hysteresis.o \
$(RRC_RRM_ASN1_DIR)/IdleModeMobilityControlInfo.o \
$(RRC_RRM_ASN1_DIR)/IMSI-Digit.o \
$(RRC_RRM_ASN1_DIR)/IMSI.o \
$(RRC_RRM_ASN1_DIR)/InitialUE-Identity.o \
$(RRC_RRM_ASN1_DIR)/INTEGER.o \
$(RRC_RRM_ASN1_DIR)/InterFreqBandInfo.o \
$(RRC_RRM_ASN1_DIR)/InterFreqBandList.o \
$(RRC_RRM_ASN1_DIR)/InterFreqBlackCellList.o \
$(RRC_RRM_ASN1_DIR)/InterFreqCarrierFreqInfo.o \
$(RRC_RRM_ASN1_DIR)/InterFreqCarrierFreqList.o \
$(RRC_RRM_ASN1_DIR)/InterFreqNeighCellInfo.o \
$(RRC_RRM_ASN1_DIR)/InterFreqNeighCellList.o \
$(RRC_RRM_ASN1_DIR)/InterRAT-BandInfo.o \
$(RRC_RRM_ASN1_DIR)/InterRAT-BandList.o \
$(RRC_RRM_ASN1_DIR)/IntraFreqBlackCellList.o \
$(RRC_RRM_ASN1_DIR)/IntraFreqNeighCellInfo.o \
$(RRC_RRM_ASN1_DIR)/IntraFreqNeighCellList.o \
$(RRC_RRM_ASN1_DIR)/IRAT-ParametersCDMA2000-1XRTT.o \
$(RRC_RRM_ASN1_DIR)/IRAT-ParametersCDMA2000-HRPD.o \
$(RRC_RRM_ASN1_DIR)/IRAT-ParametersGERAN.o \
$(RRC_RRM_ASN1_DIR)/IRAT-ParametersUTRA-FDD.o \
$(RRC_RRM_ASN1_DIR)/IRAT-ParametersUTRA-TDD128.o \
$(RRC_RRM_ASN1_DIR)/IRAT-ParametersUTRA-TDD384.o \
$(RRC_RRM_ASN1_DIR)/IRAT-ParametersUTRA-TDD768.o \
$(RRC_RRM_ASN1_DIR)/LogicalChannelConfig.o \
$(RRC_RRM_ASN1_DIR)/MAC-MainConfig.o \
$(RRC_RRM_ASN1_DIR)/MasterInformationBlock.o \
$(RRC_RRM_ASN1_DIR)/MBSFN-SubframeConfigList.o \
$(RRC_RRM_ASN1_DIR)/MBSFN-SubframeConfig.o \
$(RRC_RRM_ASN1_DIR)/MCC-MNC-Digit.o \
$(RRC_RRM_ASN1_DIR)/MCC.o \
$(RRC_RRM_ASN1_DIR)/MeasConfig.o \
$(RRC_RRM_ASN1_DIR)/MeasGapConfig.o \
$(RRC_RRM_ASN1_DIR)/MeasId.o \
$(RRC_RRM_ASN1_DIR)/MeasIdToAddModList.o \
$(RRC_RRM_ASN1_DIR)/MeasIdToAddMod.o \
$(RRC_RRM_ASN1_DIR)/MeasIdToRemoveList.o \
$(RRC_RRM_ASN1_DIR)/MeasObjectCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/MeasObjectEUTRA.o \
$(RRC_RRM_ASN1_DIR)/MeasObjectGERAN.o \
$(RRC_RRM_ASN1_DIR)/MeasObjectId.o \
$(RRC_RRM_ASN1_DIR)/MeasObjectToAddModList.o \
$(RRC_RRM_ASN1_DIR)/MeasObjectToAddMod.o \
$(RRC_RRM_ASN1_DIR)/MeasObjectToRemoveList.o \
$(RRC_RRM_ASN1_DIR)/MeasObjectUTRA.o \
$(RRC_RRM_ASN1_DIR)/MeasParameters.o \
$(RRC_RRM_ASN1_DIR)/MeasResultCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/MeasResultEUTRA.o \
$(RRC_RRM_ASN1_DIR)/MeasResultGERAN.o \
$(RRC_RRM_ASN1_DIR)/MeasResultListCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/MeasResultListEUTRA.o \
$(RRC_RRM_ASN1_DIR)/MeasResultListGERAN.o \
$(RRC_RRM_ASN1_DIR)/MeasResultListUTRA.o \
$(RRC_RRM_ASN1_DIR)/MeasResultsCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/MeasResults.o \
$(RRC_RRM_ASN1_DIR)/MeasResultUTRA.o \
$(RRC_RRM_ASN1_DIR)/MeasurementReport.o \
$(RRC_RRM_ASN1_DIR)/MeasurementReport-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/MMEC.o \
$(RRC_RRM_ASN1_DIR)/MNC.o \
$(RRC_RRM_ASN1_DIR)/MobilityControlInfo.o \
$(RRC_RRM_ASN1_DIR)/MobilityFromEUTRACommand.o \
$(RRC_RRM_ASN1_DIR)/MobilityFromEUTRACommand-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/MobilityParametersCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/MobilityStateParameters.o \
$(RRC_RRM_ASN1_DIR)/N1-PUCCH-AN-PersistentList.o \
$(RRC_RRM_ASN1_DIR)/NativeEnumerated.o \
$(RRC_RRM_ASN1_DIR)/NativeInteger.o \
$(RRC_RRM_ASN1_DIR)/NeighCellCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/NeighCellConfig.o \
$(RRC_RRM_ASN1_DIR)/NeighCellListCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/NeighCellsPerBandclassCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/NeighCellsPerBandclassListCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/NextHopChainingCount.o \
$(RRC_RRM_ASN1_DIR)/NULL.o \
$(RRC_RRM_ASN1_DIR)/OCTET_STRING.o \
$(RRC_RRM_ASN1_DIR)/Paging.o \
$(RRC_RRM_ASN1_DIR)/PagingRecordList.o \
$(RRC_RRM_ASN1_DIR)/PagingRecord.o \
$(RRC_RRM_ASN1_DIR)/PagingUE-Identity.o \
$(RRC_RRM_ASN1_DIR)/PCCH-Config.o \
$(RRC_RRM_ASN1_DIR)/PCCH-Message.o \
$(RRC_RRM_ASN1_DIR)/PCCH-MessageType.o \
$(RRC_RRM_ASN1_DIR)/PDCP-Config.o \
$(RRC_RRM_ASN1_DIR)/PDCP-Parameters.o \
$(RRC_RRM_ASN1_DIR)/PDSCH-ConfigCommon.o \
$(RRC_RRM_ASN1_DIR)/PDSCH-ConfigDedicated.o \
$(RRC_RRM_ASN1_DIR)/per_decoder.o \
$(RRC_RRM_ASN1_DIR)/per_encoder.o \
$(RRC_RRM_ASN1_DIR)/per_opentype.o \
$(RRC_RRM_ASN1_DIR)/per_support.o \
$(RRC_RRM_ASN1_DIR)/PHICH-Config.o \
$(RRC_RRM_ASN1_DIR)/PhyLayerParameters.o \
$(RRC_RRM_ASN1_DIR)/PhysCellIdCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/PhysCellIdGERAN.o \
$(RRC_RRM_ASN1_DIR)/PhysCellIdListCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/PhysCellId.o \
$(RRC_RRM_ASN1_DIR)/PhysCellIdRange.o \
$(RRC_RRM_ASN1_DIR)/PhysCellIdUTRA-FDD.o \
$(RRC_RRM_ASN1_DIR)/PhysCellIdUTRA-TDD.o \
$(RRC_RRM_ASN1_DIR)/PhysicalConfigDedicated.o \
$(RRC_RRM_ASN1_DIR)/PLMN-IdentityInfo.o \
$(RRC_RRM_ASN1_DIR)/PLMN-IdentityList2.o \
$(RRC_RRM_ASN1_DIR)/PLMN-IdentityList.o \
$(RRC_RRM_ASN1_DIR)/PLMN-Identity.o \
$(RRC_RRM_ASN1_DIR)/P-Max.o \
$(RRC_RRM_ASN1_DIR)/PollByte.o \
$(RRC_RRM_ASN1_DIR)/PollPDU.o \
$(RRC_RRM_ASN1_DIR)/PRACH-ConfigInfo.o \
$(RRC_RRM_ASN1_DIR)/PRACH-Config.o \
$(RRC_RRM_ASN1_DIR)/PRACH-ConfigSIB.o \
$(RRC_RRM_ASN1_DIR)/PreRegistrationInfoHRPD.o \
$(RRC_RRM_ASN1_DIR)/PreRegistrationZoneIdHRPD.o \
$(RRC_RRM_ASN1_DIR)/PresenceAntennaPort1.o \
$(RRC_RRM_ASN1_DIR)/PUCCH-ConfigCommon.o \
$(RRC_RRM_ASN1_DIR)/PUCCH-ConfigDedicated.o \
$(RRC_RRM_ASN1_DIR)/PUSCH-ConfigCommon.o \
$(RRC_RRM_ASN1_DIR)/PUSCH-ConfigDedicated.o \
$(RRC_RRM_ASN1_DIR)/Q-OffsetRangeInterRAT.o \
$(RRC_RRM_ASN1_DIR)/Q-OffsetRange.o \
$(RRC_RRM_ASN1_DIR)/Q-RxLevMin.o \
$(RRC_RRM_ASN1_DIR)/QuantityConfigCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/QuantityConfigEUTRA.o \
$(RRC_RRM_ASN1_DIR)/QuantityConfigGERAN.o \
$(RRC_RRM_ASN1_DIR)/QuantityConfig.o \
$(RRC_RRM_ASN1_DIR)/QuantityConfigUTRA.o \
$(RRC_RRM_ASN1_DIR)/RACH-ConfigCommon.o \
$(RRC_RRM_ASN1_DIR)/RACH-ConfigDedicated.o \
$(RRC_RRM_ASN1_DIR)/RadioResourceConfigCommon.o \
$(RRC_RRM_ASN1_DIR)/RadioResourceConfigCommonSIB.o \
$(RRC_RRM_ASN1_DIR)/RadioResourceConfigDedicated.o \
$(RRC_RRM_ASN1_DIR)/RAND-CDMA2000.o \
$(RRC_RRM_ASN1_DIR)/RAT-Type.o \
$(RRC_RRM_ASN1_DIR)/RedirectedCarrierInfo.o \
$(RRC_RRM_ASN1_DIR)/ReestablishmentCause.o \
$(RRC_RRM_ASN1_DIR)/ReestabUE-Identity.o \
$(RRC_RRM_ASN1_DIR)/RegisteredMME.o \
$(RRC_RRM_ASN1_DIR)/ReleaseCause.o \
$(RRC_RRM_ASN1_DIR)/ReportConfigEUTRA.o \
$(RRC_RRM_ASN1_DIR)/ReportConfigId.o \
$(RRC_RRM_ASN1_DIR)/ReportConfigInterRAT.o \
$(RRC_RRM_ASN1_DIR)/ReportConfigToAddModList.o \
$(RRC_RRM_ASN1_DIR)/ReportConfigToAddMod.o \
$(RRC_RRM_ASN1_DIR)/ReportConfigToRemoveList.o \
$(RRC_RRM_ASN1_DIR)/ReportInterval.o \
$(RRC_RRM_ASN1_DIR)/ReselectionThreshold.o \
$(RRC_RRM_ASN1_DIR)/RF-Parameters.o \
$(RRC_RRM_ASN1_DIR)/RLC-Config.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReconfigurationComplete.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReconfigurationComplete-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReconfiguration.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReconfiguration-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReestablishmentComplete.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReestablishmentComplete-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReestablishment.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReestablishment-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReestablishmentReject.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReestablishmentReject-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReestablishmentRequest.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReestablishmentRequest-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReject.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionReject-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionRelease.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionRelease-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionRequest.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionRequest-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionSetupComplete.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionSetupComplete-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionSetup.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionSetup-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/RRC-TransactionIdentifier.o \
$(RRC_RRM_ASN1_DIR)/RSRP-Range.o \
$(RRC_RRM_ASN1_DIR)/RSRQ-Range.o \
$(RRC_RRM_ASN1_DIR)/SchedulingInfoList.o \
$(RRC_RRM_ASN1_DIR)/SchedulingInfo.o \
$(RRC_RRM_ASN1_DIR)/SchedulingRequestConfig.o \
$(RRC_RRM_ASN1_DIR)/SecondaryPreRegistrationZoneIdListHRPD.o \
$(RRC_RRM_ASN1_DIR)/SecurityAlgorithmConfig.o \
$(RRC_RRM_ASN1_DIR)/SecurityConfigHO.o \
$(RRC_RRM_ASN1_DIR)/SecurityConfigSMC.o \
$(RRC_RRM_ASN1_DIR)/SecurityModeCommand.o \
$(RRC_RRM_ASN1_DIR)/SecurityModeCommand-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/SecurityModeComplete.o \
$(RRC_RRM_ASN1_DIR)/SecurityModeComplete-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/SecurityModeFailure.o \
$(RRC_RRM_ASN1_DIR)/SecurityModeFailure-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/ShortMAC-I.o \
$(RRC_RRM_ASN1_DIR)/SIB-MappingInfo.o \
$(RRC_RRM_ASN1_DIR)/SIB-Type.o \
$(RRC_RRM_ASN1_DIR)/SI-OrPSI-GERAN.o \
$(RRC_RRM_ASN1_DIR)/SN-FieldLength.o \
$(RRC_RRM_ASN1_DIR)/SoundingRS-UL-ConfigCommon.o \
$(RRC_RRM_ASN1_DIR)/SoundingRS-UL-ConfigDedicated.o \
$(RRC_RRM_ASN1_DIR)/SpeedStateScaleFactors.o \
$(RRC_RRM_ASN1_DIR)/SPS-ConfigDL.o \
$(RRC_RRM_ASN1_DIR)/SPS-Config.o \
$(RRC_RRM_ASN1_DIR)/SPS-ConfigUL.o \
$(RRC_RRM_ASN1_DIR)/SRB-ToAddModList.o \
$(RRC_RRM_ASN1_DIR)/SRB-ToAddMod.o \
$(RRC_RRM_ASN1_DIR)/S-TMSI.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandEUTRA.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandGERAN.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandList1XRTT.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandListEUTRA.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandListGERAN.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandListHRPD.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandListUTRA-FDD.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandListUTRA-TDD128.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandListUTRA-TDD384.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandListUTRA-TDD768.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandUTRA-FDD.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandUTRA-TDD128.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandUTRA-TDD384.o \
$(RRC_RRM_ASN1_DIR)/SupportedBandUTRA-TDD768.o \
$(RRC_RRM_ASN1_DIR)/SystemInfoListGERAN.o \
$(RRC_RRM_ASN1_DIR)/SystemInformationBlockType10.o \
$(RRC_RRM_ASN1_DIR)/SystemInformationBlockType11.o \
$(RRC_RRM_ASN1_DIR)/SystemInformationBlockType1.o \
$(RRC_RRM_ASN1_DIR)/SystemInformationBlockType2.o \
$(RRC_RRM_ASN1_DIR)/SystemInformationBlockType3.o \
$(RRC_RRM_ASN1_DIR)/SystemInformationBlockType4.o \
$(RRC_RRM_ASN1_DIR)/SystemInformationBlockType5.o \
$(RRC_RRM_ASN1_DIR)/SystemInformationBlockType6.o \
$(RRC_RRM_ASN1_DIR)/SystemInformationBlockType7.o \
$(RRC_RRM_ASN1_DIR)/SystemInformationBlockType8.o \
$(RRC_RRM_ASN1_DIR)/SystemInformationBlockType9.o \
$(RRC_RRM_ASN1_DIR)/SystemInformation.o \
$(RRC_RRM_ASN1_DIR)/SystemInformation-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/SystemTimeInfoCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/TDD-Config.o \
$(RRC_RRM_ASN1_DIR)/ThresholdCDMA2000.o \
$(RRC_RRM_ASN1_DIR)/ThresholdEUTRA.o \
$(RRC_RRM_ASN1_DIR)/ThresholdGERAN.o \
$(RRC_RRM_ASN1_DIR)/ThresholdUTRA.o \
$(RRC_RRM_ASN1_DIR)/TimeAlignmentTimer.o \
$(RRC_RRM_ASN1_DIR)/TimeToTrigger.o \
$(RRC_RRM_ASN1_DIR)/TPC-Index.o \
$(RRC_RRM_ASN1_DIR)/TPC-PDCCH-Config.o \
$(RRC_RRM_ASN1_DIR)/T-PollRetransmit.o \
$(RRC_RRM_ASN1_DIR)/TrackingAreaCode.o \
$(RRC_RRM_ASN1_DIR)/T-Reordering.o \
$(RRC_RRM_ASN1_DIR)/T-Reselection.o \
$(RRC_RRM_ASN1_DIR)/T-StatusProhibit.o \
$(RRC_RRM_ASN1_DIR)/UECapabilityEnquiry.o \
$(RRC_RRM_ASN1_DIR)/UECapabilityEnquiry-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/UECapabilityInformation.o \
$(RRC_RRM_ASN1_DIR)/UECapabilityInformation-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/UE-CapabilityRAT-ContainerList.o \
$(RRC_RRM_ASN1_DIR)/UE-CapabilityRAT-Container.o \
$(RRC_RRM_ASN1_DIR)/UE-CapabilityRequest.o \
$(RRC_RRM_ASN1_DIR)/UE-EUTRA-Capability.o \
$(RRC_RRM_ASN1_DIR)/UE-TimersAndConstants.o \
$(RRC_RRM_ASN1_DIR)/UL-AM-RLC.o \
$(RRC_RRM_ASN1_DIR)/UL-CCCH-Message.o \
$(RRC_RRM_ASN1_DIR)/UL-CCCH-MessageType.o \
$(RRC_RRM_ASN1_DIR)/UL-CyclicPrefixLength.o \
$(RRC_RRM_ASN1_DIR)/UL-DCCH-Message.o \
$(RRC_RRM_ASN1_DIR)/UL-DCCH-MessageType.o \
$(RRC_RRM_ASN1_DIR)/ULHandoverPreparationTransfer.o \
$(RRC_RRM_ASN1_DIR)/ULHandoverPreparationTransfer-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/ULInformationTransfer.o \
$(RRC_RRM_ASN1_DIR)/ULInformationTransfer-r8-IEs.o \
$(RRC_RRM_ASN1_DIR)/UL-ReferenceSignalsPUSCH.o \
$(RRC_RRM_ASN1_DIR)/UL-UM-RLC.o \
$(RRC_RRM_ASN1_DIR)/UplinkPowerControlCommon.o \
$(RRC_RRM_ASN1_DIR)/UplinkPowerControlDedicated.o \
$(RRC_RRM_ASN1_DIR)/xer_decoder.o \
$(RRC_RRM_ASN1_DIR)/xer_encoder.o \
$(RRC_RRM_ASN1_DIR)/xer_support.o \
$(RRC_RRM_ASN1_DIR)/E-NodeB-Identity.o \
$(RRC_RRM_ASN1_DIR)/OpenAir-Application-TrafficClass.o \
$(RRC_RRM_ASN1_DIR)/OpenAir-Application-ms-PacketDelay.o \
$(RRC_RRM_ASN1_DIR)/OpenAir-ApplicationKBitRate.o \
$(RRC_RRM_ASN1_DIR)/OpenAir-C-RNTI.o \
$(RRC_RRM_ASN1_DIR)/OpenAir-RRM-Response-Status.o \
$(RRC_RRM_ASN1_DIR)/OpenAir-RRM-Response-Reason.o \
$(RRC_RRM_ASN1_DIR)/TransactionId.o \
$(RRC_RRM_ASN1_DIR)/RRCAddDataRadioBearerConfirm.o \
$(RRC_RRM_ASN1_DIR)/RRCAddDataRadioBearerRequest.o \
$(RRC_RRM_ASN1_DIR)/RRCAddDataRadioBearerResponse.o \
$(RRC_RRM_ASN1_DIR)/RRCRemoveDataRadioBearerConfirm.o \
$(RRC_RRM_ASN1_DIR)/RRCAddUserConfirm.o \
$(RRC_RRM_ASN1_DIR)/RRCRemoveDataRadioBearerRequest.o \
$(RRC_RRM_ASN1_DIR)/RRCAddUserRequest.o \
$(RRC_RRM_ASN1_DIR)/RRCRemoveDataRadioBearerResponse.o \
$(RRC_RRM_ASN1_DIR)/RRCAddUserResponse.o \
$(RRC_RRM_ASN1_DIR)/RRCRemoveUserRequest.o \
$(RRC_RRM_ASN1_DIR)/RRCRemoveUserResponse.o \
$(RRC_RRM_ASN1_DIR)/RRCConnectionRelease.o \
$(RRC_RRM_ASN1_DIR)/RRCUserReconfiguration.o \
$(RRC_RRM_ASN1_DIR)/RRCUserReconfigurationComplete.o \
$(RRC_RRM_ASN1_DIR)/RRM-RRC-Message.o \
$(RRC_RRM_ASN1_DIR)/RRM-RRC-MessageType.o \
$(RRC_RRM_ASN1_DIR)/RRC-RRM-Message.o \
$(RRC_RRM_ASN1_DIR)/RRC-RRM-MessageType.o \
$(RRC_RRM_ASN1_DIR)/RRCSystemConfigurationRequest.o \
$(RRC_RRM_ASN1_DIR)/RRCSystemConfigurationResponse.o
SQLITE_OBJS= $(SQL_DIR)/sqlite3.o
# Sockets
SOCKETS_OBJS = \
$(SOCKETS_DIR)/Ajp13Socket.o \
$(SOCKETS_DIR)/AjpBaseSocket.o \
$(SOCKETS_DIR)/Base64.o \
$(SOCKETS_DIR)/Debug.o \
$(SOCKETS_DIR)/Event.o \
$(SOCKETS_DIR)/EventHandler.o \
$(SOCKETS_DIR)/EventTime.o \
$(SOCKETS_DIR)/Exception.o \
$(SOCKETS_DIR)/File.o \
$(SOCKETS_DIR)/FileStream.o \
$(SOCKETS_DIR)/HTTPSocket.o \
$(SOCKETS_DIR)/HttpBaseSocket.o \
$(SOCKETS_DIR)/HttpClientSocket.o \
$(SOCKETS_DIR)/HttpDebugSocket.o \
$(SOCKETS_DIR)/HttpGetSocket.o \
$(SOCKETS_DIR)/HttpPostSocket.o \
$(SOCKETS_DIR)/HttpPutSocket.o \
$(SOCKETS_DIR)/HttpRequest.o \
$(SOCKETS_DIR)/HttpResponse.o \
$(SOCKETS_DIR)/HttpTransaction.o \
$(SOCKETS_DIR)/HttpdCookies.o \
$(SOCKETS_DIR)/HttpdForm.o \
$(SOCKETS_DIR)/HttpdSocket.o \
$(SOCKETS_DIR)/IEventOwner.o \
$(SOCKETS_DIR)/Ipv4Address.o \
$(SOCKETS_DIR)/Ipv6Address.o \
$(SOCKETS_DIR)/Json.o \
$(SOCKETS_DIR)/Lock.o \
$(SOCKETS_DIR)/MemFile.o \
$(SOCKETS_DIR)/Mutex.o \
$(SOCKETS_DIR)/Parse.o \
$(SOCKETS_DIR)/ResolvServer.o \
$(SOCKETS_DIR)/ResolvSocket.o \
$(SOCKETS_DIR)/SSLInitializer.o \
$(SOCKETS_DIR)/SctpSocket.o \
$(SOCKETS_DIR)/Semaphore.o \
$(SOCKETS_DIR)/SmtpdSocket.o \
$(SOCKETS_DIR)/Socket.o \
$(SOCKETS_DIR)/SocketHandler.o \
$(SOCKETS_DIR)/SocketHandlerEp.o \
$(SOCKETS_DIR)/SocketHandlerThread.o \
$(SOCKETS_DIR)/SocketStream.o \
$(SOCKETS_DIR)/SocketThread.o \
$(SOCKETS_DIR)/StdoutLog.o \
$(SOCKETS_DIR)/StreamSocket.o \
$(SOCKETS_DIR)/StreamWriter.o \
$(SOCKETS_DIR)/TcpSocket.o \
$(SOCKETS_DIR)/Thread.o \
$(SOCKETS_DIR)/UdpSocket.o \
$(SOCKETS_DIR)/Utility.o \
$(SOCKETS_DIR)/XmlDocument.o \
$(SOCKETS_DIR)/XmlNode.o \
$(SOCKETS_DIR)/XmlException.o
# RRM
RRM_OBJS = \
$(SRC_DIR)/rrm.o \
$(COM_DIR)/Message.o \
$(COM_DIR)/rrc/RRCMessageHandler.o \
$(COM_DIR)/rrc/RRC2RRMMessageConnectionRequest.o \
$(COM_DIR)/rrc/RRM2RRCMessageConnectionResponse.o \
$(COM_DIR)/rrc/RRC2RRMMessageAddUserRequest.o \
$(COM_DIR)/rrc/RRC2RRMMessageAddUserConfirm.o \
$(COM_DIR)/rrc/RRM2RRCMessageAddUserResponse.o \
$(COM_DIR)/rrc/RRC2RRMMessageRemoveUserRequest.o \
$(COM_DIR)/rrc/RRM2RRCMessageRemoveUserResponse.o \
$(COM_DIR)/rrc/RRC2RRMMessageAddRadioAccessBearerRequest.o \
$(COM_DIR)/rrc/RRC2RRMMessageAddRadioAccessBearerConfirm.o \
$(COM_DIR)/rrc/RRM2RRCMessageAddRadioAccessBearerResponse.o \
$(COM_DIR)/rrc/RRC2RRMMessageRemoveRadioAccessBearerRequest.o \
$(COM_DIR)/rrc/RRM2RRCMessageRemoveRadioAccessBearerResponse.o \
$(COM_DIR)/rrc/RRM2RRCMessageUserReconfiguration.o \
$(COM_DIR)/rrc/RRC2RRMMessageUserReconfigurationComplete.o \
$(COM_DIR)/rrc/RRCUdpSocket.o \
$(TCPIP_DIR)/storage.o \
$(RADIO_RESOURCES_DIR)/Asn1Utils.o \
$(RADIO_RESOURCES_DIR)/ENodeB.o \
$(RADIO_RESOURCES_DIR)/Mobile.o \
$(RADIO_RESOURCES_DIR)/RadioBearer.o \
$(RADIO_RESOURCES_DIR)/DataRadioBearer.o \
$(RADIO_RESOURCES_DIR)/SignallingRadioBearer.o \
$(RADIO_RESOURCES_DIR)/LogicalChannel.o \
$(RADIO_RESOURCES_DIR)/Command.o \
$(RADIO_RESOURCES_DIR)/RadioResources.o \
$(RADIO_RESOURCES_DIR)/Transaction.o \
$(RADIO_RESOURCES_DIR)/Transactions.o
# RRM
TEST_OBJS = \
$(SRC_DIR)/test/test.o \
$(SRC_DIR)/test/TestScenario.o \
$(COM_DIR)/Message.o \
$(COM_DIR)/rrm/RRMMessageHandler.o \
$(COM_DIR)/rrc/RRCMessageHandler.o \
$(COM_DIR)/rrc/RRC2RRMMessageConnectionRequest.o \
$(COM_DIR)/rrc/RRM2RRCMessageConnectionResponse.o \
$(COM_DIR)/rrc/RRC2RRMMessageAddUserRequest.o \
$(COM_DIR)/rrc/RRC2RRMMessageAddUserConfirm.o \
$(COM_DIR)/rrc/RRM2RRCMessageAddUserResponse.o \
$(COM_DIR)/rrc/RRC2RRMMessageRemoveUserRequest.o \
$(COM_DIR)/rrc/RRM2RRCMessageRemoveUserResponse.o \
$(COM_DIR)/rrc/RRC2RRMMessageAddRadioAccessBearerRequest.o \
$(COM_DIR)/rrc/RRC2RRMMessageAddRadioAccessBearerConfirm.o \
$(COM_DIR)/rrc/RRM2RRCMessageAddRadioAccessBearerResponse.o \
$(COM_DIR)/rrc/RRC2RRMMessageRemoveRadioAccessBearerRequest.o \
$(COM_DIR)/rrc/RRM2RRCMessageRemoveRadioAccessBearerResponse.o \
$(COM_DIR)/rrc/RRM2RRCMessageUserReconfiguration.o \
$(COM_DIR)/rrc/RRC2RRMMessageUserReconfigurationComplete.o \
$(COM_DIR)/rrc/RRCUdpSocket.o \
$(COM_DIR)/rrm/RRMUdpSocket.o \
$(TCPIP_DIR)/storage.o \
$(RADIO_RESOURCES_DIR)/Asn1Utils.o \
$(RADIO_RESOURCES_DIR)/ENodeB.o \
$(RADIO_RESOURCES_DIR)/Mobile.o \
$(RADIO_RESOURCES_DIR)/RadioBearer.o \
$(RADIO_RESOURCES_DIR)/LogicalChannel.o \
$(RADIO_RESOURCES_DIR)/Transaction.o \
$(RADIO_RESOURCES_DIR)/Transactions.o \
$(RADIO_RESOURCES_DIR)/Command.o \
$(RADIO_RESOURCES_DIR)/RadioResources.o
###################################
To compile rrm
###################################
cd in this directory
make libs
make rrm_exe
rrm executable is in ./bin
###################################
To compile dummy_rrc
###################################
cd in this directory
make libs
make test_exe
dummy_rrc executable is in ./bin
dnl Process this file with autoconf to produce a configure script.
AC_INIT(Radio Resource Manager, 0.1.0)
AC_CONFIG_SRCDIR(src/rrm.cpp)
AC_CANONICAL_SYSTEM
dnl create an config-header
AC_CONFIG_HEADER(src/config.h)
dnl enable automake-support
AM_INIT_AUTOMAKE([gnu dist-zip tar-ustar dist-bzip2])
AC_DEFINE([OUTPUT_ACCURACY], [2], [defines the number of digits after the comma in output])
dnl Checks for programs.
AC_PROG_CC
AC_PROG_CPP
AC_PROG_CXX
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
dnl enable libtool-support
dnl gives a deprecated warning for RANLIB with newer libtools
AC_PROG_RANLIB
AM_PROG_LIBTOOL
dnl Check for enable-features that shall go into config.h
dnl ... for xerces 3.0
PKG_CHECK_MODULES([XERCES], [xerces-c >= 3.0],
[AC_DEFINE([XERCES3_SIZE_t],[XMLSize_t],[Define length for Xerces 3.])],
[AC_DEFINE([XERCES3_SIZE_t],[unsigned int],[Define length for Xerces 2.])])
AM_CONDITIONAL([WITH_VERSION_H], test -f .svn/entries)
if test -f .svn/entries; then
AC_DEFINE([HAVE_VERSION_H], [1], [Define if auto-generated version.h should be used.])
else
AC_DEFINE_UNQUOTED(VERSION_STRING, "$PACKAGE_VERSION", [Defined if auto-generated version.h is unavailable.])
fi
dnl ---------------------------------------------
dnl check for libraries...
dnl - - - - - - - - - - - - - - - - - - - - - - -
dnl ... for xerces
AC_ARG_WITH([xerces], [AS_HELP_STRING([--with-xerces=DIR],[where Xerces-C is installed (libraries in DIR/lib, headers in DIR/include).])])
if test x"$with_xerces" != x; then
if test x"$with_xerces_libraries" = x; then
with_xerces_libraries=$with_xerces/lib
fi
if test x"$with_xerces_includes" = x; then
with_xerces_includes=$with_xerces/include
fi
fi
dnl ... for libs
LIB_XERCES="xerces-c"
AC_ARG_WITH([xerces-libraries], [AS_HELP_STRING([--with-xerces-libraries=DIR],[where the Xerces-C library is installed.])])
if test x"$with_xerces_libraries" = x; then
AC_CHECK_LIB([$LIB_XERCES], [main], [true],
[AC_MSG_ERROR([xerces-lib not found. Specify path with option --with-xerces-libraries=DIR.])])
else
save_ldflags=$LDFLAGS
LDFLAGS="-L$with_xerces_libraries"
export LDFLAGS
AC_CHECK_LIB([$LIB_XERCES], [main], [XERCES_LDFLAGS=$LDFLAGS],
[AC_MSG_ERROR([xerces-lib not found in "$with_xerces_libraries".])])
LDFLAGS=$save_ldflags
AC_SUBST(XERCES_LDFLAGS)
fi
AC_SUBST(LIB_XERCES)
dnl ... for includes
AC_ARG_WITH([xerces-includes], [AS_HELP_STRING([--with-xerces-includes=DIR],[where the Xerces-C includes are.])])
save_cppflags=$CPPFLAGS
if test x"$with_xerces_includes" = x; then
CPPFLAGS="$CPPFLAGS -I/usr/local/include -I/usr/include"
export CPPFLAGS
AC_CHECK_HEADER([xercesc/util/XercesVersion.hpp], [AM_CPPFLAGS="$CPPFLAGS $AM_CPPFLAGS"],
[AC_MSG_ERROR([xerces-includes not found. Specify path with option --with-xerces-includes=DIR.])])
else
CPPFLAGS="-I$with_xerces_includes"
export CPPFLAGS
AC_CHECK_HEADER([xercesc/util/XercesVersion.hpp], [AM_CPPFLAGS="$CPPFLAGS $AM_CPPFLAGS"],
[AC_MSG_ERROR([xerces-includes not found in "$with_xerces_includes".])])
fi
CPPFLAGS=$save_cppflags
AM_CPPFLAGS="-I$PWD/$srcdir/src $AM_CPPFLAGS"
AC_SUBST(AM_CPPFLAGS)
AC_SUBST(AM_CXXFLAGS)
dnl ---------------------------------------------
dnl Checks proposed by autoscan.
dnl Checks for header files.
AC_FUNC_ALLOCA
AC_HEADER_STDC
AC_CHECK_HEADERS([float.h limits.h malloc.h math.h stddef.h stdlib.h string.h sys/time.h unistd.h wchar.h])
dnl Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_STRUCT_TM
AC_C_VOLATILE
dnl Checks for library functions.
AC_FUNC_ERROR_AT_LINE
AC_FUNC_MALLOC
AC_FUNC_SELECT_ARGTYPES
AC_TYPE_SIGNAL
AC_FUNC_STAT
AC_CHECK_FUNCS([floor getcwd gettimeofday memset pow select socket sqrt])
dnl ---------------------------------------------
dnl add here all your Makefiles. These will be created by configure
AC_CONFIG_FILES([
src/Makefile
src/com/Makefile
src/foreign/Makefile
src/foreign/sockets-2.3.9.4/Makefile
src/foreign/sql/Makefile
src/foreign/tcpip/Makefile
src/utils/Makefile
src/utils/options/Makefile
Makefile])
AC_OUTPUT
dnl ---------------------------------------------
dnl Summary
AC_MSG_RESULT()
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <cassert>
#include <string.h>
#include <arpa/inet.h>
//-----------------------------------------------------------------
#include "Message.h"
#include "RRC-RRM-Message.h"
#include "RRM-RRC-Message.h"
#include "Utility.h"
#include "RRC2RRMMessageConnectionRequest.h"
#include "RRC2RRMMessageAddUserRequest.h"
#include "RRC2RRMMessageAddUserConfirm.h"
#include "RRC2RRMMessageAddRadioAccessBearerRequest.h"
#include "RRC2RRMMessageRemoveRadioAccessBearerRequest.h"
#include "RRC2RRMMessageRemoveUserRequest.h"
#include "RRC2RRMMessageAddRadioAccessBearerConfirm.h"
#include "RRM2RRCMessageConnectionResponse.h"
#include "RRM2RRCMessageAddUserResponse.h"
#include "RRM2RRCMessageAddRadioAccessBearerResponse.h"
#include "RRM2RRCMessageRemoveRadioAccessBearerResponse.h"
#include "RRM2RRCMessageRemoveUserResponse.h"
#include "RRM2RRCMessageUserReconfiguration.h"
#include "RRC2RRMMessageUserReconfigurationComplete.h"
#include "storage.h"
uint8_t Message::s_buffer[MESSAGE_DESERIALIZE_BUFFER_SIZE];
//-----------------------------------------------------------------
#define TRACE_RRM_MESSAGES
#define LOOP_TEST
//-----------------------------------------------------------------
using namespace std;
using namespace tcpip;
//-----------------------------------------------------------------
Message::Message()
//-----------------------------------------------------------------
{
m_message_buffer = NULL;
m_ip_char_src = new char(INET6_ADDRSTRLEN);
}
//-----------------------------------------------------------------
Message::Message(tcpip::Storage& in_messageP): m_message_storage(in_messageP)
//-----------------------------------------------------------------
{
m_message_buffer = NULL;
m_ip_char_src = new char(INET6_ADDRSTRLEN);
}
//-----------------------------------------------------------------
Message* Message::DeserializeRRCMessage(const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP)
//-----------------------------------------------------------------
{
Message* message = NULL;
asn_dec_rval_t rval;
asn_codec_ctx_t *opt_codec_ctx = 0;
RRC_RRM_Message_t *asn1_message = 0;
#ifdef LOOP_TEST
for (int i=0; i<10000; i++) {
message = NULL;
opt_codec_ctx = 0;
asn1_message = 0;
rval = uper_decode(opt_codec_ctx,
&asn_DEF_RRC_RRM_Message,/* Type to decode */
(void **)&asn1_message, /* Pointer to a target structure's pointer */
in_bufferP, /* Data to be decoded */
size_dataP, /* Size of data buffer */
0, /* Number of unused leading bits, 0..7 */
0); /* Number of unused tailing bits, 0..7 */
ASN_STRUCT_FREE(asn_DEF_RRC_RRM_Message, asn1_message);
}
cout << "Message::DeserializeRRCMessage(): LOOP TEST END" << endl;
opt_codec_ctx = 0;
asn1_message = 0;
#endif
rval = uper_decode(opt_codec_ctx,
&asn_DEF_RRC_RRM_Message,/* Type to decode */
(void **)&asn1_message, /* Pointer to a target structure's pointer */
in_bufferP, /* Data to be decoded */
size_dataP, /* Size of data buffer */
0, /* Number of unused leading bits, 0..7 */
0); /* Number of unused tailing bits, 0..7 */
xer_fprint(stdout, &asn_DEF_RRC_RRM_Message, (void*)asn1_message);
if (rval.code != RC_OK) {
cerr << " DeserializeRRCMessage ERROR IN ASN1 DECODING" << endl;
return NULL;
}
if (asn1_message->message.present == RRC_RRM_MessageType_PR_c1) {
switch (asn1_message->message.choice.c1.present) {
//-------------------------------
case RRC_RRM_MessageType__c1_PR_NOTHING:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_NOTHING" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageConnectionRequest(asn1_message);
break;
//-------------------------------
case RRC_RRM_MessageType__c1_PR_rrcSystemConfigurationRequest:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_SYSTEM_CONFIGURATION_REQUEST" << endl;
cout << dec;
#endif
message = new RRC2RRMMessageConnectionRequest(sa_fromP, sa_lenP, asn1_message);
break;
//-------------------------------
case RRC_RRM_MessageType__c1_PR_rrcAddUserRequest:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_ADD_USER_REQUEST" << endl;
cout << dec;
#endif
message = new RRC2RRMMessageAddUserRequest(sa_fromP, sa_lenP, asn1_message);
break;
//-------------------------------
case RRC_RRM_MessageType__c1_PR_rrcAddUserConfirm:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_ADD_USER_CONFIRM" << endl;
cout << dec;
#endif
message = new RRC2RRMMessageAddUserConfirm(sa_fromP, sa_lenP, asn1_message);
break;
//-------------------------------
case RRC_RRM_MessageType__c1_PR_rrcUserReconfigurationComplete:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_USER_RECONFIGURATION_COMPLETE" << endl;
cout << dec;
#endif
message = new RRC2RRMMessageUserReconfigurationComplete(sa_fromP, sa_lenP, asn1_message);
break;
//-------------------------------
case RRC_RRM_MessageType__c1_PR_rrcAddDataRadioBearerRequest:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_ADD_DATA_RADIO_BEARER_REQUEST" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageConnectionRequest(asn1_message);
break;
//-------------------------------
case RRC_RRM_MessageType__c1_PR_rrcAddDataRadioBearerConfirm:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_ADD_DATA_RADIO_BEARER_CONFIRM" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageConnectionRequest(asn1_message);
break;
//-------------------------------
case RRC_RRM_MessageType__c1_PR_rrcRemoveUserRequest:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_REMOVE_USER_REQUEST" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageConnectionRequest(asn1_message);
break;
//-------------------------------
case RRC_RRM_MessageType__c1_PR_rrcRemoveDataRadioBearerRequest:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_REMOVE_DATA_RADIO_BEARER_REQUEST" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageConnectionRequest(asn1_message);
break;
//-------------------------------
case RRC_RRM_MessageType__c1_PR_rrcRemoveDataRadioBearerConfirm:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_REMOVE_DATA_RADIO_BEARER_CONFIRM" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageConnectionRequest(asn1_message);
break;
}
} else {
cerr << " DeserializeRRMMessage ERROR IN message.present field" << endl;
return NULL;
}
return message;
}
//-----------------------------------------------------------------
Message* Message::DeserializeRRMMessage(const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP)
//-----------------------------------------------------------------
{
Message* message = NULL;
asn_dec_rval_t rval;
asn_codec_ctx_t *opt_codec_ctx = 0;
RRM_RRC_Message_t *asn1_message = 0;
#ifdef LOOP_TEST
for (int i=0; i<10000; i++) {
message = NULL;
opt_codec_ctx = 0;
asn1_message = 0;
rval = uper_decode(opt_codec_ctx,
&asn_DEF_RRM_RRC_Message,/* Type to decode */
(void **)&asn1_message, /* Pointer to a target structure's pointer */
in_bufferP, /* Data to be decoded */
size_dataP, /* Size of data buffer */
0, /* Number of unused leading bits, 0..7 */
0); /* Number of unused tailing bits, 0..7 */
ASN_STRUCT_FREE(asn_DEF_RRM_RRC_Message, asn1_message);
}
cout << "Message::DeserializeRRMMessage(): LOOP TEST END" << endl;
opt_codec_ctx = 0;
asn1_message = 0;
#endif
rval = uper_decode(opt_codec_ctx,
&asn_DEF_RRM_RRC_Message,/* Type to decode */
(void **)&asn1_message, /* Pointer to a target structure's pointer */
in_bufferP, /* Data to be decoded */
size_dataP, /* Size of data buffer */
0, /* Number of unused leading bits, 0..7 */
0); /* Number of unused tailing bits, 0..7 */
xer_fprint(stdout, &asn_DEF_RRM_RRC_Message, (void*)asn1_message);
if (rval.code != RC_OK) {
cerr << " DeserializeRRMMessage ERROR IN ASN1 DECODING" << endl;
return NULL;
}
if (asn1_message->message.present == RRM_RRC_MessageType_PR_c1) {
switch (asn1_message->message.choice.c1.present) {
//-------------------------------
case RRM_RRC_MessageType__c1_PR_NOTHING:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_NOTHING" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageConnectionRequest(asn1_message);
break;
//-------------------------------
case RRM_RRC_MessageType__c1_PR_rrcSystemConfigurationResponse:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_SYSTEM_CONFIGURATION_RESPONSE" << endl;
cout << dec;
#endif
message = new RRM2RRCMessageConnectionResponse(sa_fromP, sa_lenP, asn1_message);
break;
//-------------------------------
case RRM_RRC_MessageType__c1_PR_rrcAddUserResponse:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_ADD_USER_RESPONSE" << endl;
cout << dec;
#endif
message = new RRM2RRCMessageAddUserResponse(sa_fromP, sa_lenP, asn1_message);
break;
//-------------------------------
case RRM_RRC_MessageType__c1_PR_rrcUserReconfiguration:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_USER_RECONFIGURATION" << endl;
cout << dec;
#endif
message = new RRM2RRCMessageUserReconfiguration(sa_fromP, sa_lenP, asn1_message);
break;
//-------------------------------
case RRM_RRC_MessageType__c1_PR_rrcAddDataRadioBearerResponse:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_ADD_DATA_RADIO_BEARER_RESPONSE" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageConnectionResponse(asn1_message);
break;
//-------------------------------
case RRM_RRC_MessageType__c1_PR_rrcRemoveUserResponse:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_REMOVE_USER_RESPONSE" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageConnectionResponse(asn1_message);
break;
//-------------------------------
case RRM_RRC_MessageType__c1_PR_rrcRemoveDataRadioBearerResponse:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize(): MESSAGE_REMOVE_DATA_RADIO_BEARER_RESPONSE" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageConnectionResponse(asn1_message);
break;
}
} else {
cerr << " DeserializeRRMMessage ERROR IN message.present field" << endl;
return NULL;
}
return message;
}
//-----------------------------------------------------------------
Message* Message::Deserialize(const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP)
//-----------------------------------------------------------------
{
msg_type_t msg_type;
msg_length_t msg_length;
frame_t msg_frame;
Storage in_message(const_cast<unsigned char*>(reinterpret_cast<const unsigned char *>(in_bufferP)), size_dataP);
msg_type = in_message.readChar();
msg_length = in_message.readShort();
//msg_frame = in_message.readInt();
assert(msg_length == size_dataP);
msg_length = msg_length - 1 - 2;
Message* message = NULL;
switch (msg_type) {
//-------------------------------
case MESSAGE_CONNECTION_REQUEST:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_CONNECTION_REQUEST" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageConnectionRequest(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
case MESSAGE_CONNECTION_RESPONSE:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_CONNECTION_RESPONSE" << endl;
cout << dec;
#endif
//message = new RRM2RRCMessageConnectionResponse(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
case MESSAGE_ADD_USER_REQUEST:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_ADD_USER_REQUEST" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageAddUserRequest(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
case MESSAGE_ADD_USER_CONFIRM:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_ADD_USER_CONFIRM" << endl;
cout << dec;
#endif
//message = new RRC2RRMMessageAddUserConfirm(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
case MESSAGE_ADD_USER_RESPONSE:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_ADD_USER_RESPONSE" << endl;
cout << dec;
#endif
//message = new RRM2RRCMessageAddUserResponse(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
case MESSAGE_ADD_RADIO_ACCESS_BEARER_REQUEST:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_ADD_RADIO_ACCESS_BEARER_REQUEST" << endl;
cout << dec;
#endif
message = new RRC2RRMMessageAddRadioAccessBearerRequest(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
case MESSAGE_ADD_RADIO_ACCESS_BEARER_CONFIRM:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_ADD_RADIO_ACCESS_BEARER_CONFIRM" << endl;
cout << dec;
#endif
message = new RRC2RRMMessageAddRadioAccessBearerConfirm(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
case MESSAGE_ADD_RADIO_ACCESS_BEARER_RESPONSE:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_ADD_RADIO_ACCESS_BEARER_RESPONSE" << endl;
cout << dec;
#endif
message = new RRM2RRCMessageAddRadioAccessBearerResponse(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
case MESSAGE_REMOVE_RADIO_ACCESS_BEARER_REQUEST:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_REMOVE_RADIO_ACCESS_BEARER_REQUEST" << endl;
cout << dec;
#endif
message = new RRC2RRMMessageRemoveRadioAccessBearerRequest(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
case MESSAGE_REMOVE_RADIO_ACCESS_BEARER_RESPONSE:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_REMOVE_RADIO_ACCESS_BEARER_RESPONSE" << endl;
cout << dec;
#endif
message = new RRM2RRCMessageRemoveRadioAccessBearerResponse(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
case MESSAGE_REMOVE_USER_REQUEST:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_REMOVE_USER_REQUEST" << endl;
cout << dec;
#endif
message = new RRC2RRMMessageRemoveUserRequest(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
case MESSAGE_REMOVE_USER_RESPONSE:
//-------------------------------
#ifdef TRACE_RRM_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type : MESSAGE_REMOVE_USER_RESPONSE" << endl;
cout << dec;
#endif
message = new RRM2RRCMessageRemoveUserResponse(in_message, msg_length, msg_frame, sa_fromP, sa_lenP);
break;
//-------------------------------
default:
//-------------------------------
#ifdef TRACE_RRM_UMTS_MESSAGES
cout << hex;
cout << "Message::deserialize():" << endl;
cout << " Type NOT HANDLED : 0x" << static_cast<unsigned int>(msg_type) << endl;
cout << dec;
#endif
;
}
return message;
}
//-----------------------------------------------------------------
void Message::ParseIpParameters(struct sockaddr *sa_fromP,socklen_t sa_lenP)
//-----------------------------------------------------------------
{
if (sa_lenP == sizeof(struct sockaddr_in6)) {
m_is_ipv6 = true;
memcpy(&m_sockaddr_in6_src,sa_fromP,sa_lenP);
Utility::l2ip(m_sockaddr_in6_src.sin6_addr, m_ip_str_src,0);
//const char* result = inet_ntop(AF_INET6, &m_sockaddr_in6_src, m_ip_char_src, sa_lenP);
//cout << "inet_ntop returned" << result << endl;
m_port_src = ntohs(m_sockaddr_in6_src.sin6_port);
cout << "Message::ParseIpParameters: m_ip_str_src6 = " << m_ip_str_src << endl;
cout << "Message::ParseIpParameters: m_port_src6 = " << m_port_src << endl;
} else if (sa_lenP == sizeof(struct sockaddr_in)) {
m_is_ipv6 = false;
memcpy(&m_sockaddr_in4_src,sa_fromP,sa_lenP);
ipaddr_t a;
memcpy(&a,&m_sockaddr_in4_src.sin_addr,4);
Utility::l2ip(a,m_ip_str_src);
m_port_src = ntohs(m_sockaddr_in4_src.sin_port);
cout << "Message::ParseIpParameters: m_ip_str_src = " << m_ip_str_src << endl;
cout << "Message::ParseIpParameters: m_port_src = " << m_port_src << endl;
}
}
//----------------------------------------------------------------------------
msg_length_t Message::GetSerializedMessageSize()
//----------------------------------------------------------------------------
{
return m_msg_length;
}
//----------------------------------------------------------------------------
const char* Message::GetSerializedMessageBuffer()
//----------------------------------------------------------------------------
{
return const_cast<const char*>(reinterpret_cast<char*>(m_message_serialize_buffer));
}
//----------------------------------------------------------------------------
std::string Message::StatusToString(msg_response_status_t statusP)
//----------------------------------------------------------------------------
{
stringstream result;
switch (statusP) {
//-------------------------------
case STATUS_CONNECTION_ACCEPTED:
//-------------------------------
result << "CONNECTION_ACCEPTED"; return result.str();
break;
//-------------------------------
case STATUS_CONNECTION_FAILED:
//-------------------------------
result << "CONNECTION_FAILED"; return result.str();
break;
//-------------------------------
case STATUS_ADD_USER_SUCCESSFULL:
//-------------------------------
result << "ADD_USER_SUCCESSFULL"; return result.str();
break;
//-------------------------------
case STATUS_ADD_USER_FAILED:
//-------------------------------
result << "ADD_USER_FAILED"; return result.str();
break;
//-------------------------------
case STATUS_REMOVE_USER_SUCCESSFULL:
//-------------------------------
result << "REMOVE_USER_SUCCESSFULL"; return result.str();
break;
//-------------------------------
case STATUS_REMOVE_USER_FAILED:
//-------------------------------
result << "REMOVE_USER_FAILED"; return result.str();
break;
//-------------------------------
case STATUS_ADD_RADIO_ACCESS_BEARER_SUCCESSFULL:
//-------------------------------
result << "ADD_RADIO_ACCESS_BEARER_SUCCESSFULL"; return result.str();
break;
//-------------------------------
case STATUS_ADD_RADIO_ACCESS_BEARER_FAILED:
//-------------------------------
result << "ADD_RADIO_ACCESS_BEARER_FAILED"; return result.str();
break;
//-------------------------------
case STATUS_REMOVE_RADIO_ACCESS_BEARER_SUCCESSFULL:
//-------------------------------
result << "REMOVE_RADIO_ACCESS_BEARER_SUCCESSFULL"; return result.str();
break;
//-------------------------------
case STATUS_REMOVE_RADIO_ACCESS_BEARER_FAILED:
//-------------------------------
result << "REMOVE_RADIO_ACCESS_BEARER_FAILED"; return result.str();
break;
default:
result << "UNKNOWN STATUS " << statusP; return result.str();
}
return result.str();
}
//----------------------------------------------------------------------------
std::string Message::ReasonToString(msg_response_reason_t reasonP)
//----------------------------------------------------------------------------
{
stringstream result;
switch (reasonP) {
//-------------------------------
case MSG_RESP_OK:
//-------------------------------
result << "RESP_OK"; return result.str();
break;
//-------------------------------
case MSG_RESP_PROTOCOL_ERROR:
//-------------------------------
result << "RESP_PROTOCOL_ERROR"; return result.str();
break;
//-------------------------------
case MSG_RESP_RESSOURCES_UNAVAILABLE:
//-------------------------------
result << "RESP_RESSOURCES_UNAVAILABLE"; return result.str();
break;
//-------------------------------
case MSG_RESP_UNKNOWN_MESSAGE:
//-------------------------------
result << "RESP_UNKNOWN_MESSAGE"; return result.str();
break;
//-------------------------------
case MSG_RESP_INTERNAL_ERROR:
//-------------------------------
result << "RESP_INTERNAL_ERROR"; return result.str();
break;
default:
result << "UNKNOWN REASON " << reasonP; return result.str();
}
return result.str();
}
//-----------------------------------------------------------------
Message::~Message()
//-----------------------------------------------------------------
{
if (m_message_buffer != NULL) {
delete [] m_message_buffer;
}
if (m_ip_char_src != NULL) {
delete [] m_ip_char_src;
}
m_message_storage.reset();
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _MESSAGE_H_
# define _MESSAGE_H_
# include <string>
# include <cstring>
# include "socket_include.h"
# include "storage.h"
# include "platform.h"
#define MESSAGE_DESERIALIZE_BUFFER_SIZE 2048
#define MESSAGE_SERIALIZE_BUFFER_SIZE 2048
class Message
{
public:
typedef std::pair<std::string,int> e_nodeb_internet_address_id_t;
//============ STATUS ======================
static const msg_response_status_t STATUS_CONNECTION_ACCEPTED = 1;
static const msg_response_status_t STATUS_CONNECTION_FAILED = -1;
static const msg_response_status_t STATUS_ADD_USER_SUCCESSFULL = 2;
static const msg_response_status_t STATUS_ADD_USER_FAILED = -2;
static const msg_response_status_t STATUS_REMOVE_USER_SUCCESSFULL = 3;
static const msg_response_status_t STATUS_REMOVE_USER_FAILED = -3;
static const msg_response_status_t STATUS_ADD_RADIO_ACCESS_BEARER_SUCCESSFULL = 4;
static const msg_response_status_t STATUS_ADD_RADIO_ACCESS_BEARER_FAILED = -4;
static const msg_response_status_t STATUS_REMOVE_RADIO_ACCESS_BEARER_SUCCESSFULL = 5;
static const msg_response_status_t STATUS_REMOVE_RADIO_ACCESS_BEARER_FAILED = -5;
//============ MESSAGES ======================
static const msg_type_t MESSAGE_CONNECTION_REQUEST = 0;
static const msg_type_t MESSAGE_CONNECTION_RESPONSE = 1;
static const msg_type_t MESSAGE_CONNECTION_CLOSE = 2;
static const msg_type_t MESSAGE_CONNECTION_CLOSE_ACK = 3;
static const msg_type_t MESSAGE_ADD_USER_REQUEST = 4;
static const msg_type_t MESSAGE_ADD_USER_RESPONSE = 5;
static const msg_type_t MESSAGE_ADD_USER_CONFIRM = 6;
static const msg_type_t MESSAGE_REMOVE_USER_REQUEST = 7;
static const msg_type_t MESSAGE_REMOVE_USER_RESPONSE = 8;
static const msg_type_t MESSAGE_ADD_RADIO_ACCESS_BEARER_REQUEST = 9;
static const msg_type_t MESSAGE_ADD_RADIO_ACCESS_BEARER_RESPONSE = 10;
static const msg_type_t MESSAGE_ADD_RADIO_ACCESS_BEARER_CONFIRM = 11;
static const msg_type_t MESSAGE_REMOVE_RADIO_ACCESS_BEARER_REQUEST = 12;
static const msg_type_t MESSAGE_REMOVE_RADIO_ACCESS_BEARER_RESPONSE = 13;
static const msg_type_t MESSAGE_MEASUREMENT_REQUEST = 14;
static const msg_type_t MESSAGE_L1_MEASUREMENT_RG_INTERNAL_REPORT = 15;
static const msg_type_t MESSAGE_L1_MEASUREMENT_RG_QUALITY_REPORT = 16;
static const msg_type_t MESSAGE_L1_MEASUREMENT_RG_TRAFFIC_VOLUME_REPORT = 17;
static const msg_type_t MESSAGE_L1_MEASUREMENT_RG_PHYSICAL_CHANNEL_DATA_AMP_REPORT = 18;
static const msg_type_t MESSAGE_L1_MEASUREMENT_MT_INTERNAL_REPORT = 19;
static const msg_type_t MESSAGE_L1_MEASUREMENT_MT_QUALITY_REPORT = 20;
static const msg_type_t MESSAGE_L1_MEASUREMENT_MT_TRAFFIC_VOLUME_REPORT = 21;
static const msg_type_t MESSAGE_L1_MEASUREMENT_MT_INTRA_FREQUENCY_REPORT = 22;
static const msg_type_t MESSAGE_UPLINK_PHYSICAL_CHANNEL_CONTROL = 23;
static const msg_type_t MESSAGE_CONFIG_REQUEST = 24;
static const msg_type_t MESSAGE_ACK = 25;
static const msg_type_t MESSAGE_UPDATE_DSCH = 26;
//============ REASONS ======================
static const msg_response_reason_t MSG_RESP_OK = 0;
static const msg_response_reason_t MSG_RESP_PROTOCOL_ERROR = 1;
static const msg_response_reason_t MSG_RESP_RESSOURCES_UNAVAILABLE = 2;
static const msg_response_reason_t MSG_RESP_UNKNOWN_MESSAGE = 128;
static const msg_response_reason_t MSG_RESP_INTERNAL_ERROR = 255;
static uint8_t s_buffer[MESSAGE_DESERIALIZE_BUFFER_SIZE];
Message ();
Message(tcpip::Storage&);
virtual void Serialize () {};
virtual void Forward () {};
virtual void Serialize (char *out_bufferP, size_t* size_dataP) {};
static Message *DeserializeRRCMessage(const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP);
static Message *DeserializeRRMMessage(const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP);
static Message *Deserialize (const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP);
void ParseIpParameters(struct sockaddr *sa_fromP,socklen_t sa_lenP);
msg_length_t GetSerializedMessageSize();
const char* GetSerializedMessageBuffer();
const int GetSrcPort() {
return m_port_src;
};
const char* GetSrcAddress() {
return m_ip_char_src;
};
virtual ~ Message ();
static std::string StatusToString(msg_response_status_t);
static std::string ReasonToString(msg_response_reason_t);
protected:
msg_type_t m_type;
bool m_is_ipv6;
struct sockaddr_in m_sockaddr_in4_src;
struct sockaddr_in6 m_sockaddr_in6_src;
std::string m_ip_str_src;
char* m_ip_char_src;
int m_port_src;
tcpip::Storage m_message_storage;
unsigned char* m_message_buffer;
msg_length_t m_msg_length;
uint8_t m_message_serialize_buffer[MESSAGE_SERIALIZE_BUFFER_SIZE];
//uint8_t m_message_serialize_buffer[MESSAGE_DESERIALIZE_BUFFER_SIZE];
};
# endif
\ No newline at end of file
ASN_MODULE_SOURCES= \
BCCH-BCH-Message.c \
BCCH-BCH-MessageType.c \
BCCH-DL-SCH-Message.c \
BCCH-DL-SCH-MessageType.c \
PCCH-Message.c \
PCCH-MessageType.c \
DL-CCCH-Message.c \
DL-CCCH-MessageType.c \
DL-DCCH-Message.c \
DL-DCCH-MessageType.c \
UL-CCCH-Message.c \
UL-CCCH-MessageType.c \
UL-DCCH-Message.c \
UL-DCCH-MessageType.c \
CounterCheck.c \
CounterCheck-r8-IEs.c \
DRB-CountMSB-InfoList.c \
DRB-CountMSB-Info.c \
CounterCheckResponse.c \
CounterCheckResponse-r8-IEs.c \
DRB-CountInfoList.c \
DRB-CountInfo.c \
CSFBParametersRequestCDMA2000.c \
CSFBParametersRequestCDMA2000-r8-IEs.c \
CSFBParametersResponseCDMA2000.c \
CSFBParametersResponseCDMA2000-r8-IEs.c \
DLInformationTransfer.c \
DLInformationTransfer-r8-IEs.c \
HandoverFromEUTRAPreparationRequest.c \
HandoverFromEUTRAPreparationRequest-r8-IEs.c \
MasterInformationBlock.c \
MeasurementReport.c \
MeasurementReport-r8-IEs.c \
MobilityFromEUTRACommand.c \
MobilityFromEUTRACommand-r8-IEs.c \
Handover.c \
CellChangeOrder.c \
SI-OrPSI-GERAN.c \
SystemInfoListGERAN.c \
Paging.c \
PagingRecordList.c \
PagingRecord.c \
PagingUE-Identity.c \
IMSI.c \
IMSI-Digit.c \
RRCConnectionReconfiguration.c \
RRCConnectionReconfiguration-r8-IEs.c \
SecurityConfigHO.c \
RRCConnectionReconfigurationComplete.c \
RRCConnectionReconfigurationComplete-r8-IEs.c \
RRCConnectionReestablishment.c \
RRCConnectionReestablishment-r8-IEs.c \
RRCConnectionReestablishmentComplete.c \
RRCConnectionReestablishmentComplete-r8-IEs.c \
RRCConnectionReestablishmentReject.c \
RRCConnectionReestablishmentReject-r8-IEs.c \
RRCConnectionReestablishmentRequest.c \
RRCConnectionReestablishmentRequest-r8-IEs.c \
ReestabUE-Identity.c \
ReestablishmentCause.c \
RRCConnectionReject.c \
RRCConnectionReject-r8-IEs.c \
RRCConnectionRelease.c \
RRCConnectionRelease-r8-IEs.c \
ReleaseCause.c \
RedirectedCarrierInfo.c \
IdleModeMobilityControlInfo.c \
FreqPriorityListEUTRA.c \
FreqPriorityEUTRA.c \
FreqsPriorityListGERAN.c \
FreqsPriorityGERAN.c \
FreqPriorityListUTRA-FDD.c \
FreqPriorityUTRA-FDD.c \
FreqPriorityListUTRA-TDD.c \
FreqPriorityUTRA-TDD.c \
BandClassPriorityListHRPD.c \
BandClassPriorityHRPD.c \
BandClassPriorityList1XRTT.c \
BandClassPriority1XRTT.c \
RRCConnectionRequest.c \
RRCConnectionRequest-r8-IEs.c \
InitialUE-Identity.c \
EstablishmentCause.c \
RRCConnectionSetup.c \
RRCConnectionSetup-r8-IEs.c \
RRCConnectionSetupComplete.c \
RRCConnectionSetupComplete-r8-IEs.c \
RegisteredMME.c \
SecurityModeCommand.c \
SecurityModeCommand-r8-IEs.c \
SecurityConfigSMC.c \
SecurityModeComplete.c \
SecurityModeComplete-r8-IEs.c \
SecurityModeFailure.c \
SecurityModeFailure-r8-IEs.c \
SystemInformation.c \
SystemInformation-r8-IEs.c \
SystemInformationBlockType1.c \
PLMN-IdentityList.c \
PLMN-IdentityInfo.c \
SchedulingInfoList.c \
SchedulingInfo.c \
SIB-MappingInfo.c \
SIB-Type.c \
UECapabilityEnquiry.c \
UECapabilityEnquiry-r8-IEs.c \
UE-CapabilityRequest.c \
UECapabilityInformation.c \
UECapabilityInformation-r8-IEs.c \
ULHandoverPreparationTransfer.c \
ULHandoverPreparationTransfer-r8-IEs.c \
ULInformationTransfer.c \
ULInformationTransfer-r8-IEs.c \
SystemInformationBlockType2.c \
AC-BarringConfig.c \
MBSFN-SubframeConfigList.c \
MBSFN-SubframeConfig.c \
SystemInformationBlockType3.c \
SystemInformationBlockType4.c \
IntraFreqNeighCellList.c \
IntraFreqNeighCellInfo.c \
IntraFreqBlackCellList.c \
SystemInformationBlockType5.c \
InterFreqCarrierFreqList.c \
InterFreqCarrierFreqInfo.c \
InterFreqNeighCellList.c \
InterFreqNeighCellInfo.c \
InterFreqBlackCellList.c \
SystemInformationBlockType6.c \
CarrierFreqListUTRA-FDD.c \
CarrierFreqUTRA-FDD.c \
CarrierFreqListUTRA-TDD.c \
CarrierFreqUTRA-TDD.c \
SystemInformationBlockType7.c \
CarrierFreqsInfoListGERAN.c \
CarrierFreqsInfoGERAN.c \
SystemInformationBlockType8.c \
CellReselectionParametersCDMA2000.c \
NeighCellListCDMA2000.c \
NeighCellCDMA2000.c \
NeighCellsPerBandclassListCDMA2000.c \
NeighCellsPerBandclassCDMA2000.c \
PhysCellIdListCDMA2000.c \
BandClassListCDMA2000.c \
BandClassInfoCDMA2000.c \
SystemInformationBlockType9.c \
SystemInformationBlockType10.c \
SystemInformationBlockType11.c \
AntennaInfoCommon.c \
AntennaInfoDedicated.c \
CQI-ReportConfig.c \
CQI-ReportPeriodic.c \
DRB-Identity.c \
LogicalChannelConfig.c \
MAC-MainConfig.c \
DRX-Config.c \
PDCP-Config.c \
PDSCH-ConfigCommon.c \
PDSCH-ConfigDedicated.c \
PHICH-Config.c \
PhysicalConfigDedicated.c \
P-Max.c \
PRACH-ConfigSIB.c \
PRACH-Config.c \
PRACH-ConfigInfo.c \
PresenceAntennaPort1.c \
PUCCH-ConfigCommon.c \
PUCCH-ConfigDedicated.c \
PUSCH-ConfigCommon.c \
PUSCH-ConfigDedicated.c \
UL-ReferenceSignalsPUSCH.c \
RACH-ConfigCommon.c \
RACH-ConfigDedicated.c \
RadioResourceConfigCommonSIB.c \
RadioResourceConfigCommon.c \
BCCH-Config.c \
PCCH-Config.c \
UL-CyclicPrefixLength.c \
RadioResourceConfigDedicated.c \
SRB-ToAddModList.c \
SRB-ToAddMod.c \
DRB-ToAddModList.c \
DRB-ToAddMod.c \
DRB-ToReleaseList.c \
RLC-Config.c \
UL-AM-RLC.c \
DL-AM-RLC.c \
UL-UM-RLC.c \
DL-UM-RLC.c \
SN-FieldLength.c \
T-PollRetransmit.c \
PollPDU.c \
PollByte.c \
T-Reordering.c \
T-StatusProhibit.c \
SchedulingRequestConfig.c \
SoundingRS-UL-ConfigCommon.c \
SoundingRS-UL-ConfigDedicated.c \
SPS-Config.c \
SPS-ConfigDL.c \
SPS-ConfigUL.c \
N1-PUCCH-AN-PersistentList.c \
TDD-Config.c \
TimeAlignmentTimer.c \
TPC-PDCCH-Config.c \
TPC-Index.c \
UplinkPowerControlCommon.c \
UplinkPowerControlDedicated.c \
DeltaFList-PUCCH.c \
NextHopChainingCount.c \
SecurityAlgorithmConfig.c \
ShortMAC-I.c \
AdditionalSpectrumEmission.c \
ARFCN-ValueCDMA2000.c \
ARFCN-ValueEUTRA.c \
ARFCN-ValueGERAN.c \
ARFCN-ValueUTRA.c \
BandclassCDMA2000.c \
BandIndicatorGERAN.c \
CarrierFreqCDMA2000.c \
CarrierFreqGERAN.c \
CarrierFreqsGERAN.c \
ExplicitListOfARFCNs.c \
CDMA2000-Type.c \
CellIdentity.c \
CellIndexList.c \
CellIndex.c \
CellReselectionPriority.c \
CSFB-RegistrationParam1XRTT.c \
CellGlobalIdEUTRA.c \
CellGlobalIdUTRA.c \
CellGlobalIdGERAN.c \
CellGlobalIdCDMA2000.c \
MobilityControlInfo.c \
CarrierBandwidthEUTRA.c \
CarrierFreqEUTRA.c \
MobilityParametersCDMA2000.c \
MobilityStateParameters.c \
PhysCellId.c \
PhysCellIdRange.c \
PhysCellIdCDMA2000.c \
PhysCellIdGERAN.c \
PhysCellIdUTRA-FDD.c \
PhysCellIdUTRA-TDD.c \
PLMN-Identity.c \
MCC.c \
MNC.c \
MCC-MNC-Digit.c \
PreRegistrationInfoHRPD.c \
SecondaryPreRegistrationZoneIdListHRPD.c \
PreRegistrationZoneIdHRPD.c \
Q-RxLevMin.c \
Q-OffsetRange.c \
Q-OffsetRangeInterRAT.c \
ReselectionThreshold.c \
SpeedStateScaleFactors.c \
SystemTimeInfoCDMA2000.c \
TrackingAreaCode.c \
T-Reselection.c \
AllowedMeasBandwidth.c \
Hysteresis.c \
MeasConfig.c \
MeasIdToRemoveList.c \
MeasObjectToRemoveList.c \
ReportConfigToRemoveList.c \
MeasGapConfig.c \
MeasId.c \
MeasIdToAddModList.c \
MeasIdToAddMod.c \
MeasObjectCDMA2000.c \
CellsToAddModListCDMA2000.c \
CellsToAddModCDMA2000.c \
MeasObjectEUTRA.c \
CellsToAddModList.c \
CellsToAddMod.c \
BlackCellsToAddModList.c \
BlackCellsToAddMod.c \
MeasObjectGERAN.c \
MeasObjectId.c \
MeasObjectToAddModList.c \
MeasObjectToAddMod.c \
MeasObjectUTRA.c \
CellsToAddModListUTRA-FDD.c \
CellsToAddModUTRA-FDD.c \
CellsToAddModListUTRA-TDD.c \
CellsToAddModUTRA-TDD.c \
MeasResults.c \
MeasResultListEUTRA.c \
MeasResultEUTRA.c \
MeasResultListUTRA.c \
MeasResultUTRA.c \
MeasResultListGERAN.c \
MeasResultGERAN.c \
MeasResultsCDMA2000.c \
MeasResultListCDMA2000.c \
MeasResultCDMA2000.c \
PLMN-IdentityList2.c \
QuantityConfig.c \
QuantityConfigEUTRA.c \
QuantityConfigUTRA.c \
QuantityConfigGERAN.c \
QuantityConfigCDMA2000.c \
ReportConfigEUTRA.c \
ThresholdEUTRA.c \
ReportConfigId.c \
ReportConfigInterRAT.c \
ThresholdUTRA.c \
ThresholdGERAN.c \
ThresholdCDMA2000.c \
ReportConfigToAddModList.c \
ReportConfigToAddMod.c \
ReportInterval.c \
RSRP-Range.c \
RSRQ-Range.c \
TimeToTrigger.c \
C-RNTI.c \
DedicatedInfoCDMA2000.c \
DedicatedInfoNAS.c \
FilterCoefficient.c \
MMEC.c \
NeighCellConfig.c \
RAND-CDMA2000.c \
RAT-Type.c \
RRC-TransactionIdentifier.c \
S-TMSI.c \
UE-CapabilityRAT-ContainerList.c \
UE-CapabilityRAT-Container.c \
UE-EUTRA-Capability.c \
AccessStratumRelease.c \
PDCP-Parameters.c \
PhyLayerParameters.c \
RF-Parameters.c \
SupportedBandListEUTRA.c \
SupportedBandEUTRA.c \
MeasParameters.c \
BandListEUTRA.c \
BandInfoEUTRA.c \
InterFreqBandList.c \
InterFreqBandInfo.c \
InterRAT-BandList.c \
InterRAT-BandInfo.c \
IRAT-ParametersUTRA-FDD.c \
SupportedBandListUTRA-FDD.c \
SupportedBandUTRA-FDD.c \
IRAT-ParametersUTRA-TDD128.c \
SupportedBandListUTRA-TDD128.c \
SupportedBandUTRA-TDD128.c \
IRAT-ParametersUTRA-TDD384.c \
SupportedBandListUTRA-TDD384.c \
SupportedBandUTRA-TDD384.c \
IRAT-ParametersUTRA-TDD768.c \
SupportedBandListUTRA-TDD768.c \
SupportedBandUTRA-TDD768.c \
IRAT-ParametersGERAN.c \
SupportedBandListGERAN.c \
SupportedBandGERAN.c \
IRAT-ParametersCDMA2000-HRPD.c \
SupportedBandListHRPD.c \
IRAT-ParametersCDMA2000-1XRTT.c \
SupportedBandList1XRTT.c \
UE-TimersAndConstants.c \
RRC-RRM-Message.c \
RRC-RRM-MessageType.c \
RRCSystemConfigurationRequest.c \
RRCAddUserRequest.c \
RRCAddUserConfirm.c \
RRCAddDataRadioBearerRequest.c \
RRCAddDataRadioBearerConfirm.c \
RRCRemoveUserRequest.c \
RRCRemoveDataRadioBearerRequest.c \
RRCRemoveDataRadioBearerConfirm.c \
RRCUserReconfigurationComplete.c \
RRM-RRC-Message.c \
RRM-RRC-MessageType.c \
RRCSystemConfigurationResponse.c \
RRCAddUserResponse.c \
RRCAddDataRadioBearerResponse.c \
RRCRemoveUserResponse.c \
RRCRemoveDataRadioBearerResponse.c \
RRCUserReconfiguration.c \
E-NodeB-Identity.c \
TransactionId.c \
OpenAir-C-RNTI.c \
OpenAir-ApplicationKBitRate.c \
OpenAir-Application-ms-PacketDelay.c \
OpenAir-Application-TrafficClass.c \
OpenAir-RRM-Response-Reason.c \
OpenAir-RRM-Response-Status.c
ASN_MODULE_HEADERS= \
BCCH-BCH-Message.h \
BCCH-BCH-MessageType.h \
BCCH-DL-SCH-Message.h \
BCCH-DL-SCH-MessageType.h \
PCCH-Message.h \
PCCH-MessageType.h \
DL-CCCH-Message.h \
DL-CCCH-MessageType.h \
DL-DCCH-Message.h \
DL-DCCH-MessageType.h \
UL-CCCH-Message.h \
UL-CCCH-MessageType.h \
UL-DCCH-Message.h \
UL-DCCH-MessageType.h \
CounterCheck.h \
CounterCheck-r8-IEs.h \
DRB-CountMSB-InfoList.h \
DRB-CountMSB-Info.h \
CounterCheckResponse.h \
CounterCheckResponse-r8-IEs.h \
DRB-CountInfoList.h \
DRB-CountInfo.h \
CSFBParametersRequestCDMA2000.h \
CSFBParametersRequestCDMA2000-r8-IEs.h \
CSFBParametersResponseCDMA2000.h \
CSFBParametersResponseCDMA2000-r8-IEs.h \
DLInformationTransfer.h \
DLInformationTransfer-r8-IEs.h \
HandoverFromEUTRAPreparationRequest.h \
HandoverFromEUTRAPreparationRequest-r8-IEs.h \
MasterInformationBlock.h \
MeasurementReport.h \
MeasurementReport-r8-IEs.h \
MobilityFromEUTRACommand.h \
MobilityFromEUTRACommand-r8-IEs.h \
Handover.h \
CellChangeOrder.h \
SI-OrPSI-GERAN.h \
SystemInfoListGERAN.h \
Paging.h \
PagingRecordList.h \
PagingRecord.h \
PagingUE-Identity.h \
IMSI.h \
IMSI-Digit.h \
RRCConnectionReconfiguration.h \
RRCConnectionReconfiguration-r8-IEs.h \
SecurityConfigHO.h \
RRCConnectionReconfigurationComplete.h \
RRCConnectionReconfigurationComplete-r8-IEs.h \
RRCConnectionReestablishment.h \
RRCConnectionReestablishment-r8-IEs.h \
RRCConnectionReestablishmentComplete.h \
RRCConnectionReestablishmentComplete-r8-IEs.h \
RRCConnectionReestablishmentReject.h \
RRCConnectionReestablishmentReject-r8-IEs.h \
RRCConnectionReestablishmentRequest.h \
RRCConnectionReestablishmentRequest-r8-IEs.h \
ReestabUE-Identity.h \
ReestablishmentCause.h \
RRCConnectionReject.h \
RRCConnectionReject-r8-IEs.h \
RRCConnectionRelease.h \
RRCConnectionRelease-r8-IEs.h \
ReleaseCause.h \
RedirectedCarrierInfo.h \
IdleModeMobilityControlInfo.h \
FreqPriorityListEUTRA.h \
FreqPriorityEUTRA.h \
FreqsPriorityListGERAN.h \
FreqsPriorityGERAN.h \
FreqPriorityListUTRA-FDD.h \
FreqPriorityUTRA-FDD.h \
FreqPriorityListUTRA-TDD.h \
FreqPriorityUTRA-TDD.h \
BandClassPriorityListHRPD.h \
BandClassPriorityHRPD.h \
BandClassPriorityList1XRTT.h \
BandClassPriority1XRTT.h \
RRCConnectionRequest.h \
RRCConnectionRequest-r8-IEs.h \
InitialUE-Identity.h \
EstablishmentCause.h \
RRCConnectionSetup.h \
RRCConnectionSetup-r8-IEs.h \
RRCConnectionSetupComplete.h \
RRCConnectionSetupComplete-r8-IEs.h \
RegisteredMME.h \
SecurityModeCommand.h \
SecurityModeCommand-r8-IEs.h \
SecurityConfigSMC.h \
SecurityModeComplete.h \
SecurityModeComplete-r8-IEs.h \
SecurityModeFailure.h \
SecurityModeFailure-r8-IEs.h \
SystemInformation.h \
SystemInformation-r8-IEs.h \
SystemInformationBlockType1.h \
PLMN-IdentityList.h \
PLMN-IdentityInfo.h \
SchedulingInfoList.h \
SchedulingInfo.h \
SIB-MappingInfo.h \
SIB-Type.h \
UECapabilityEnquiry.h \
UECapabilityEnquiry-r8-IEs.h \
UE-CapabilityRequest.h \
UECapabilityInformation.h \
UECapabilityInformation-r8-IEs.h \
ULHandoverPreparationTransfer.h \
ULHandoverPreparationTransfer-r8-IEs.h \
ULInformationTransfer.h \
ULInformationTransfer-r8-IEs.h \
SystemInformationBlockType2.h \
AC-BarringConfig.h \
MBSFN-SubframeConfigList.h \
MBSFN-SubframeConfig.h \
SystemInformationBlockType3.h \
SystemInformationBlockType4.h \
IntraFreqNeighCellList.h \
IntraFreqNeighCellInfo.h \
IntraFreqBlackCellList.h \
SystemInformationBlockType5.h \
InterFreqCarrierFreqList.h \
InterFreqCarrierFreqInfo.h \
InterFreqNeighCellList.h \
InterFreqNeighCellInfo.h \
InterFreqBlackCellList.h \
SystemInformationBlockType6.h \
CarrierFreqListUTRA-FDD.h \
CarrierFreqUTRA-FDD.h \
CarrierFreqListUTRA-TDD.h \
CarrierFreqUTRA-TDD.h \
SystemInformationBlockType7.h \
CarrierFreqsInfoListGERAN.h \
CarrierFreqsInfoGERAN.h \
SystemInformationBlockType8.h \
CellReselectionParametersCDMA2000.h \
NeighCellListCDMA2000.h \
NeighCellCDMA2000.h \
NeighCellsPerBandclassListCDMA2000.h \
NeighCellsPerBandclassCDMA2000.h \
PhysCellIdListCDMA2000.h \
BandClassListCDMA2000.h \
BandClassInfoCDMA2000.h \
SystemInformationBlockType9.h \
SystemInformationBlockType10.h \
SystemInformationBlockType11.h \
AntennaInfoCommon.h \
AntennaInfoDedicated.h \
CQI-ReportConfig.h \
CQI-ReportPeriodic.h \
DRB-Identity.h \
LogicalChannelConfig.h \
MAC-MainConfig.h \
DRX-Config.h \
PDCP-Config.h \
PDSCH-ConfigCommon.h \
PDSCH-ConfigDedicated.h \
PHICH-Config.h \
PhysicalConfigDedicated.h \
P-Max.h \
PRACH-ConfigSIB.h \
PRACH-Config.h \
PRACH-ConfigInfo.h \
PresenceAntennaPort1.h \
PUCCH-ConfigCommon.h \
PUCCH-ConfigDedicated.h \
PUSCH-ConfigCommon.h \
PUSCH-ConfigDedicated.h \
UL-ReferenceSignalsPUSCH.h \
RACH-ConfigCommon.h \
RACH-ConfigDedicated.h \
RadioResourceConfigCommonSIB.h \
RadioResourceConfigCommon.h \
BCCH-Config.h \
PCCH-Config.h \
UL-CyclicPrefixLength.h \
RadioResourceConfigDedicated.h \
SRB-ToAddModList.h \
SRB-ToAddMod.h \
DRB-ToAddModList.h \
DRB-ToAddMod.h \
DRB-ToReleaseList.h \
RLC-Config.h \
UL-AM-RLC.h \
DL-AM-RLC.h \
UL-UM-RLC.h \
DL-UM-RLC.h \
SN-FieldLength.h \
T-PollRetransmit.h \
PollPDU.h \
PollByte.h \
T-Reordering.h \
T-StatusProhibit.h \
SchedulingRequestConfig.h \
SoundingRS-UL-ConfigCommon.h \
SoundingRS-UL-ConfigDedicated.h \
SPS-Config.h \
SPS-ConfigDL.h \
SPS-ConfigUL.h \
N1-PUCCH-AN-PersistentList.h \
TDD-Config.h \
TimeAlignmentTimer.h \
TPC-PDCCH-Config.h \
TPC-Index.h \
UplinkPowerControlCommon.h \
UplinkPowerControlDedicated.h \
DeltaFList-PUCCH.h \
NextHopChainingCount.h \
SecurityAlgorithmConfig.h \
ShortMAC-I.h \
AdditionalSpectrumEmission.h \
ARFCN-ValueCDMA2000.h \
ARFCN-ValueEUTRA.h \
ARFCN-ValueGERAN.h \
ARFCN-ValueUTRA.h \
BandclassCDMA2000.h \
BandIndicatorGERAN.h \
CarrierFreqCDMA2000.h \
CarrierFreqGERAN.h \
CarrierFreqsGERAN.h \
ExplicitListOfARFCNs.h \
CDMA2000-Type.h \
CellIdentity.h \
CellIndexList.h \
CellIndex.h \
CellReselectionPriority.h \
CSFB-RegistrationParam1XRTT.h \
CellGlobalIdEUTRA.h \
CellGlobalIdUTRA.h \
CellGlobalIdGERAN.h \
CellGlobalIdCDMA2000.h \
MobilityControlInfo.h \
CarrierBandwidthEUTRA.h \
CarrierFreqEUTRA.h \
MobilityParametersCDMA2000.h \
MobilityStateParameters.h \
PhysCellId.h \
PhysCellIdRange.h \
PhysCellIdCDMA2000.h \
PhysCellIdGERAN.h \
PhysCellIdUTRA-FDD.h \
PhysCellIdUTRA-TDD.h \
PLMN-Identity.h \
MCC.h \
MNC.h \
MCC-MNC-Digit.h \
PreRegistrationInfoHRPD.h \
SecondaryPreRegistrationZoneIdListHRPD.h \
PreRegistrationZoneIdHRPD.h \
Q-RxLevMin.h \
Q-OffsetRange.h \
Q-OffsetRangeInterRAT.h \
ReselectionThreshold.h \
SpeedStateScaleFactors.h \
SystemTimeInfoCDMA2000.h \
TrackingAreaCode.h \
T-Reselection.h \
AllowedMeasBandwidth.h \
Hysteresis.h \
MeasConfig.h \
MeasIdToRemoveList.h \
MeasObjectToRemoveList.h \
ReportConfigToRemoveList.h \
MeasGapConfig.h \
MeasId.h \
MeasIdToAddModList.h \
MeasIdToAddMod.h \
MeasObjectCDMA2000.h \
CellsToAddModListCDMA2000.h \
CellsToAddModCDMA2000.h \
MeasObjectEUTRA.h \
CellsToAddModList.h \
CellsToAddMod.h \
BlackCellsToAddModList.h \
BlackCellsToAddMod.h \
MeasObjectGERAN.h \
MeasObjectId.h \
MeasObjectToAddModList.h \
MeasObjectToAddMod.h \
MeasObjectUTRA.h \
CellsToAddModListUTRA-FDD.h \
CellsToAddModUTRA-FDD.h \
CellsToAddModListUTRA-TDD.h \
CellsToAddModUTRA-TDD.h \
MeasResults.h \
MeasResultListEUTRA.h \
MeasResultEUTRA.h \
MeasResultListUTRA.h \
MeasResultUTRA.h \
MeasResultListGERAN.h \
MeasResultGERAN.h \
MeasResultsCDMA2000.h \
MeasResultListCDMA2000.h \
MeasResultCDMA2000.h \
PLMN-IdentityList2.h \
QuantityConfig.h \
QuantityConfigEUTRA.h \
QuantityConfigUTRA.h \
QuantityConfigGERAN.h \
QuantityConfigCDMA2000.h \
ReportConfigEUTRA.h \
ThresholdEUTRA.h \
ReportConfigId.h \
ReportConfigInterRAT.h \
ThresholdUTRA.h \
ThresholdGERAN.h \
ThresholdCDMA2000.h \
ReportConfigToAddModList.h \
ReportConfigToAddMod.h \
ReportInterval.h \
RSRP-Range.h \
RSRQ-Range.h \
TimeToTrigger.h \
C-RNTI.h \
DedicatedInfoCDMA2000.h \
DedicatedInfoNAS.h \
FilterCoefficient.h \
MMEC.h \
NeighCellConfig.h \
RAND-CDMA2000.h \
RAT-Type.h \
RRC-TransactionIdentifier.h \
S-TMSI.h \
UE-CapabilityRAT-ContainerList.h \
UE-CapabilityRAT-Container.h \
UE-EUTRA-Capability.h \
AccessStratumRelease.h \
PDCP-Parameters.h \
PhyLayerParameters.h \
RF-Parameters.h \
SupportedBandListEUTRA.h \
SupportedBandEUTRA.h \
MeasParameters.h \
BandListEUTRA.h \
BandInfoEUTRA.h \
InterFreqBandList.h \
InterFreqBandInfo.h \
InterRAT-BandList.h \
InterRAT-BandInfo.h \
IRAT-ParametersUTRA-FDD.h \
SupportedBandListUTRA-FDD.h \
SupportedBandUTRA-FDD.h \
IRAT-ParametersUTRA-TDD128.h \
SupportedBandListUTRA-TDD128.h \
SupportedBandUTRA-TDD128.h \
IRAT-ParametersUTRA-TDD384.h \
SupportedBandListUTRA-TDD384.h \
SupportedBandUTRA-TDD384.h \
IRAT-ParametersUTRA-TDD768.h \
SupportedBandListUTRA-TDD768.h \
SupportedBandUTRA-TDD768.h \
IRAT-ParametersGERAN.h \
SupportedBandListGERAN.h \
SupportedBandGERAN.h \
IRAT-ParametersCDMA2000-HRPD.h \
SupportedBandListHRPD.h \
IRAT-ParametersCDMA2000-1XRTT.h \
SupportedBandList1XRTT.h \
UE-TimersAndConstants.h \
RRC-RRM-Message.h \
RRC-RRM-MessageType.h \
RRCSystemConfigurationRequest.h \
RRCAddUserRequest.h \
RRCAddUserConfirm.h \
RRCAddDataRadioBearerRequest.h \
RRCAddDataRadioBearerConfirm.h \
RRCRemoveUserRequest.h \
RRCRemoveDataRadioBearerRequest.h \
RRCRemoveDataRadioBearerConfirm.h \
RRCUserReconfigurationComplete.h \
RRM-RRC-Message.h \
RRM-RRC-MessageType.h \
RRCSystemConfigurationResponse.h \
RRCAddUserResponse.h \
RRCAddDataRadioBearerResponse.h \
RRCRemoveUserResponse.h \
RRCRemoveDataRadioBearerResponse.h \
RRCUserReconfiguration.h \
E-NodeB-Identity.h \
TransactionId.h \
OpenAir-C-RNTI.h \
OpenAir-ApplicationKBitRate.h \
OpenAir-Application-ms-PacketDelay.h \
OpenAir-Application-TrafficClass.h \
OpenAir-RRM-Response-Reason.h \
OpenAir-RRM-Response-Status.h
ASN_MODULE_HEADERS+=BOOLEAN.h
ASN_MODULE_SOURCES+=BOOLEAN.c
ASN_MODULE_HEADERS+=INTEGER.h
ASN_MODULE_HEADERS+=NativeEnumerated.h
ASN_MODULE_SOURCES+=INTEGER.c
ASN_MODULE_HEADERS+=NULL.h
ASN_MODULE_SOURCES+=NULL.c
ASN_MODULE_SOURCES+=NativeEnumerated.c
ASN_MODULE_HEADERS+=NativeInteger.h
ASN_MODULE_SOURCES+=NativeInteger.c
ASN_MODULE_HEADERS+=asn_SEQUENCE_OF.h
ASN_MODULE_SOURCES+=asn_SEQUENCE_OF.c
ASN_MODULE_HEADERS+=asn_SET_OF.h
ASN_MODULE_SOURCES+=asn_SET_OF.c
ASN_MODULE_HEADERS+=constr_CHOICE.h
ASN_MODULE_SOURCES+=constr_CHOICE.c
ASN_MODULE_HEADERS+=constr_SEQUENCE.h
ASN_MODULE_SOURCES+=constr_SEQUENCE.c
ASN_MODULE_HEADERS+=constr_SEQUENCE_OF.h
ASN_MODULE_SOURCES+=constr_SEQUENCE_OF.c
ASN_MODULE_HEADERS+=constr_SET_OF.h
ASN_MODULE_SOURCES+=constr_SET_OF.c
ASN_MODULE_HEADERS+=asn_application.h
ASN_MODULE_HEADERS+=asn_system.h
ASN_MODULE_HEADERS+=asn_codecs.h
ASN_MODULE_HEADERS+=asn_internal.h
ASN_MODULE_HEADERS+=OCTET_STRING.h
ASN_MODULE_SOURCES+=OCTET_STRING.c
ASN_MODULE_HEADERS+=BIT_STRING.h
ASN_MODULE_SOURCES+=BIT_STRING.c
ASN_MODULE_SOURCES+=asn_codecs_prim.c
ASN_MODULE_HEADERS+=asn_codecs_prim.h
ASN_MODULE_HEADERS+=ber_tlv_length.h
ASN_MODULE_SOURCES+=ber_tlv_length.c
ASN_MODULE_HEADERS+=ber_tlv_tag.h
ASN_MODULE_SOURCES+=ber_tlv_tag.c
ASN_MODULE_HEADERS+=ber_decoder.h
ASN_MODULE_SOURCES+=ber_decoder.c
ASN_MODULE_HEADERS+=der_encoder.h
ASN_MODULE_SOURCES+=der_encoder.c
ASN_MODULE_HEADERS+=constr_TYPE.h
ASN_MODULE_SOURCES+=constr_TYPE.c
ASN_MODULE_HEADERS+=constraints.h
ASN_MODULE_SOURCES+=constraints.c
ASN_MODULE_HEADERS+=xer_support.h
ASN_MODULE_SOURCES+=xer_support.c
ASN_MODULE_HEADERS+=xer_decoder.h
ASN_MODULE_SOURCES+=xer_decoder.c
ASN_MODULE_HEADERS+=xer_encoder.h
ASN_MODULE_SOURCES+=xer_encoder.c
ASN_MODULE_HEADERS+=per_support.h
ASN_MODULE_SOURCES+=per_support.c
ASN_MODULE_HEADERS+=per_decoder.h
ASN_MODULE_SOURCES+=per_decoder.c
ASN_MODULE_HEADERS+=per_encoder.h
ASN_MODULE_SOURCES+=per_encoder.c
ASN_MODULE_HEADERS+=per_opentype.h
ASN_MODULE_SOURCES+=per_opentype.c
ASN_CONVERTER_SOURCES+=converter-sample.c
lib_LTLIBRARIES=libsomething.la
libsomething_la_SOURCES=$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)
# This file may be used as an input for make(3)
# Remove the lines below to convert it into a pure .am file
TARGET = progname
CFLAGS += -I.
OBJS=${ASN_MODULE_SOURCES:.c=.o} ${ASN_CONVERTER_SOURCES:.c=.o}
all: $(TARGET)
$(TARGET): ${OBJS}
$(CC) $(CFLAGS) -o $(TARGET) ${OBJS} $(LDFLAGS) $(LIBS)
.SUFFIXES:
.SUFFIXES: .c .o
.c.o:
$(CC) $(CFLAGS) -o $@ -c $<
clean:
rm -f $(TARGET)
rm -f $(OBJS)
regen: regenerate-from-asn1-source
regenerate-from-asn1-source:
asn1c -gen-PER -fno-include-deps -fcompound-names -fnative-types -fskeletons-copy /homes/gauthier/PROJETS/trunk/openair2/RRM_4_RRC_LITE/src/foreign/generated_c_asn1_rrc/ASN1_files/EUTRA-RRC-Definitions.asn /homes/gauthier/PROJETS/trunk/openair2/RRM_4_RRC_LITE/src/com/asn1/rrc-rrm.asn
RRM-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
IMPORTS
DRB-Identity,
PhysCellId,
RadioResourceConfigDedicated,
RRCConnectionReconfiguration-r8-IEs,
RRCConnectionReconfigurationComplete-r8-IEs,
SystemInformation,
SystemInformationBlockType1,
SystemInformationBlockType2 FROM EUTRA-RRC-Definitions;
RRC-RRM-Message ::= SEQUENCE {
message RRC-RRM-MessageType
}
RRC-RRM-MessageType ::= CHOICE {
c1 CHOICE {
rrcSystemConfigurationRequest RRCSystemConfigurationRequest,
rrcAddUserRequest RRCAddUserRequest,
rrcAddUserConfirm RRCAddUserConfirm,
rrcAddDataRadioBearerRequest RRCAddDataRadioBearerRequest,
rrcAddDataRadioBearerConfirm RRCAddDataRadioBearerConfirm,
rrcRemoveUserRequest RRCRemoveUserRequest,
rrcRemoveDataRadioBearerRequest RRCRemoveDataRadioBearerRequest,
rrcRemoveDataRadioBearerConfirm RRCRemoveDataRadioBearerConfirm,
rrcUserReconfigurationComplete RRCUserReconfigurationComplete
},
messageClassExtension SEQUENCE {}
}
RRCSystemConfigurationRequest ::= SEQUENCE {
transactionId TransactionId
}
RRCAddUserRequest ::= SEQUENCE {
transactionId TransactionId,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI
}
RRCAddUserConfirm ::= SEQUENCE {
transactionId TransactionId,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI
}
RRCAddDataRadioBearerRequest ::= SEQUENCE {
transactionId TransactionId,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI,
drb-Identity DRB-Identity,
applicationTrafficClass OpenAir-Application-TrafficClass,
applicationPacketDelay OpenAir-Application-ms-PacketDelay,
guaranted-bit-rate-uplink OpenAir-ApplicationKBitRate,
max-bit-rate-uplink OpenAir-ApplicationKBitRate,
guaranted-bit-rate-downlink OpenAir-ApplicationKBitRate,
max-bit-rate-downlink OpenAir-ApplicationKBitRate
}
RRCAddDataRadioBearerConfirm ::= SEQUENCE {
transactionId TransactionId,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI,
drb-Identity DRB-Identity
}
RRCRemoveUserRequest ::= SEQUENCE {
transactionId TransactionId,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI
}
RRCRemoveDataRadioBearerRequest ::= SEQUENCE {
transactionId TransactionId,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI,
drb-Identity DRB-Identity
}
RRCRemoveDataRadioBearerConfirm ::= SEQUENCE {
transactionId TransactionId,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI,
drb-Identity DRB-Identity
}
RRCUserReconfigurationComplete ::= SEQUENCE {
transactionId TransactionId,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI
}
RRM-RRC-Message ::= SEQUENCE {
message RRM-RRC-MessageType
}
RRM-RRC-MessageType ::= CHOICE {
c1 CHOICE {
rrcSystemConfigurationResponse RRCSystemConfigurationResponse,
rrcAddUserResponse RRCAddUserResponse,
rrcAddDataRadioBearerResponse RRCAddDataRadioBearerResponse,
rrcRemoveUserResponse RRCRemoveUserResponse,
rrcRemoveDataRadioBearerResponse RRCRemoveDataRadioBearerResponse,
rrcUserReconfiguration RRCUserReconfiguration
},
messageClassExtension SEQUENCE {}
}
RRCSystemConfigurationResponse ::= SEQUENCE {
transactionId TransactionId,
rrm-Response-Status OpenAir-RRM-Response-Status,
rrm-Response-Reason OpenAir-RRM-Response-Reason,
e-NodeB-Identity E-NodeB-Identity,
systemInformationBlockType1 SystemInformationBlockType1 OPTIONAL,
systemInformation SystemInformation OPTIONAL
}
RRCAddUserResponse ::= SEQUENCE {
transactionId TransactionId,
rrm-Response-Status OpenAir-RRM-Response-Status,
rrm-Response-Reason OpenAir-RRM-Response-Reason,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI,
radioResourceConfigDedicatedE-NodeB RadioResourceConfigDedicated OPTIONAL,
radioResourceConfigDedicatedMobile RadioResourceConfigDedicated OPTIONAL
}
RRCAddDataRadioBearerResponse ::= SEQUENCE {
transactionId TransactionId,
rrm-Response-Status OpenAir-RRM-Response-Status,
rrm-Response-Reason OpenAir-RRM-Response-Reason,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI,
-- MAY BE USELESS SINCE INCLUDED IN RadioResourceConfigDedicated drb-Identity DRB-Identity,
radioResourceConfigDedicatedE-NodeB RadioResourceConfigDedicated OPTIONAL,
radioResourceConfigDedicatedMobile RadioResourceConfigDedicated OPTIONAL
}
RRCRemoveUserResponse ::= SEQUENCE {
transactionId TransactionId,
rrm-Response-Status OpenAir-RRM-Response-Status,
rrm-Response-Reason OpenAir-RRM-Response-Reason,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI,
radioResourceConfigDedicatedE-NodeB RadioResourceConfigDedicated OPTIONAL,
radioResourceConfigDedicatedMobile RadioResourceConfigDedicated OPTIONAL
}
RRCRemoveDataRadioBearerResponse ::= SEQUENCE {
transactionId TransactionId,
rrm-Response-Status OpenAir-RRM-Response-Status,
rrm-Response-Reason OpenAir-RRM-Response-Reason,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI,
radioResourceConfigDedicatedE-NodeB RadioResourceConfigDedicated OPTIONAL,
radioResourceConfigDedicatedMobile RadioResourceConfigDedicated OPTIONAL
}
RRCUserReconfiguration ::= SEQUENCE {
transactionId TransactionId,
rrm-Response-Status OpenAir-RRM-Response-Status,
rrm-Response-Reason OpenAir-RRM-Response-Reason,
e-NodeB-Identity E-NodeB-Identity,
c-RNTI OpenAir-C-RNTI,
radioResourceConfigDedicatedE-NodeB RadioResourceConfigDedicated OPTIONAL,
radioResourceConfigDedicatedMobile RadioResourceConfigDedicated OPTIONAL
}
E-NodeB-Identity ::= SEQUENCE {
physCellId PhysCellId
}
TransactionId ::= INTEGER (0..255)
OpenAir-C-RNTI ::= INTEGER (0..255)
OpenAir-ApplicationKBitRate ::= INTEGER (0..100000)
OpenAir-Application-ms-PacketDelay ::= INTEGER (0..10000)
OpenAir-Application-TrafficClass ::= INTEGER (0..255)
OpenAir-RRM-Response-Reason ::= ENUMERATED {
ok, protocolError, ressourcesUnavailable, malformedMessage, unknownMessage, internalError }
OpenAir-RRM-Response-Status ::= ENUMERATED {
success, warning, failure }
END
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdio.h>
#include "RRC2RRMMessageAddRadioAccessBearerConfirm.h"
#include "RRCMessageHandler.h"
#include "RadioResources.h"
#include "Exceptions.h"
//----------------------------------------------------------------------------
RRC2RRMMessageAddRadioAccessBearerConfirm::RRC2RRMMessageAddRadioAccessBearerConfirm(std::string ip_dest_strP, int port_destP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
rb_id_t radio_bearer_idP,
transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_is_ipv6 = Utility::isipv6(ip_dest_strP);
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_radio_bearer_id = radio_bearer_idP;
m_transaction_id = transaction_idP;
}
//----------------------------------------------------------------------------
RRC2RRMMessageAddRadioAccessBearerConfirm::RRC2RRMMessageAddRadioAccessBearerConfirm(tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP):
Message(in_messageP)
//----------------------------------------------------------------------------
{
ParseIpParameters(sa_fromP, sa_lenP);
/* if (m_is_ipv6) {
printf("[RRM][RRC2RRMMessageAddRadioAccessBearerConfirm] (IPv6) Received %d bytes from: %s:%d\n", msg_lengthP, m_ip_char_src, m_port_src);
} else {
printf("[RRM][RRC2RRMMessageAddRadioAccessBearerConfirm] (IPv4) Received %d bytes from: %s:%d\n", msg_lengthP, m_ip_char_src, m_port_src);
}*/
m_cell_id = m_message_storage.readChar();
m_mobile_id = m_message_storage.readChar();
m_radio_bearer_id = m_message_storage.readChar();
m_transaction_id = m_message_storage.readChar();
printf("----------------------------------------------------------------------------------------------------------\n");
printf("RRC\t-------ADD DATA RADIO BEARER CONFIRM------->\tRRM\n");
printf("----------------------------------------------------------------------------------------------------------\n");
printf("cell id = %d mobile id = %d radio bearer id = %d transaction id = %d \n", m_cell_id, m_mobile_id, m_radio_bearer_id, m_transaction_id);
}
//----------------------------------------------------------------------------
void RRC2RRMMessageAddRadioAccessBearerConfirm::Forward()
//----------------------------------------------------------------------------
{
try {
Transaction* tx = RadioResources::Instance()->Request(*this);
if (tx != NULL) {
delete tx;
}
} catch (std::exception const& e ) {
}
}
//----------------------------------------------------------------------------
void RRC2RRMMessageAddRadioAccessBearerConfirm::Serialize()
//----------------------------------------------------------------------------
{
m_message_storage.reset();
m_message_storage.writeChar(Message::MESSAGE_ADD_RADIO_ACCESS_BEARER_CONFIRM);
m_message_storage.writeShort(7u);
m_message_storage.writeChar(m_cell_id);
m_message_storage.writeChar(m_mobile_id);
m_message_storage.writeChar(m_radio_bearer_id);
m_message_storage.writeChar(m_transaction_id);
}
//----------------------------------------------------------------------------
RRC2RRMMessageAddRadioAccessBearerConfirm::~RRC2RRMMessageAddRadioAccessBearerConfirm()
//----------------------------------------------------------------------------
{
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRC2RRMMESSAGEADDRADIOACCESSBEARERCONFIRM_H
# define _RRC2RRMMESSAGEADDRADIOACCESSBEARERCONFIRM_H
# include "Message.h"
# include "storage.h"
# include "platform.h"
class RRC2RRMMessageAddRadioAccessBearerConfirm: public Message
{
public:
RRC2RRMMessageAddRadioAccessBearerConfirm(std::string ip_dest_strP, int port_destP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
rb_id_t radio_bearer_idP,
transaction_id_t transaction_idP);
RRC2RRMMessageAddRadioAccessBearerConfirm (tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP);
~RRC2RRMMessageAddRadioAccessBearerConfirm ();
void Serialize ();
void Forward();
const unsigned int GetENodeBId() {
return m_cell_id;
}
const mobile_id_t GetMobileId() {
return m_mobile_id;
}
const rb_id_t GetRadioBearerId() {
return m_radio_bearer_id;
}
const transaction_id_t GetTransactionId() {
return m_transaction_id;
}
private:
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
rb_id_t m_radio_bearer_id;
transaction_id_t m_transaction_id;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdio.h>
#include "RRC2RRMMessageAddRadioAccessBearerRequest.h"
#include "RRM2RRCMessageAddRadioAccessBearerResponse.h"
#include "RRCMessageHandler.h"
#include "RadioResources.h"
#include "Exceptions.h"
//----------------------------------------------------------------------------
RRC2RRMMessageAddRadioAccessBearerRequest::RRC2RRMMessageAddRadioAccessBearerRequest(std::string ip_dest_strP, int port_destP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
rb_id_t radio_bearer_idP,
unsigned short traffic_classP,
unsigned short delayP,
unsigned int guaranted_bit_rate_uplinkP,
unsigned int max_bit_rate_uplinkP,
unsigned int guaranted_bit_rate_downlinkP,
unsigned int max_bit_rate_downlinkP,
transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_is_ipv6 = Utility::isipv6(ip_dest_strP);
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_radio_bearer_id = radio_bearer_idP;
m_traffic_class = traffic_classP;
m_delay = delayP;
m_guaranted_bit_rate_uplink = guaranted_bit_rate_uplinkP;
m_max_bit_rate_uplink = max_bit_rate_uplinkP;
m_guaranted_bit_rate_downlink = guaranted_bit_rate_downlinkP;
m_max_bit_rate_downlink = max_bit_rate_downlinkP;
m_transaction_id = transaction_idP;
}
//----------------------------------------------------------------------------
RRC2RRMMessageAddRadioAccessBearerRequest::RRC2RRMMessageAddRadioAccessBearerRequest(tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP):
Message(in_messageP)
//----------------------------------------------------------------------------
{
ParseIpParameters(sa_fromP, sa_lenP);
m_cell_id = m_message_storage.readChar();
m_mobile_id = m_message_storage.readChar();
m_radio_bearer_id = m_message_storage.readChar();
m_traffic_class = m_message_storage.readShort();
m_delay = m_message_storage.readShort();
m_guaranted_bit_rate_uplink = m_message_storage.readInt();
m_max_bit_rate_uplink = m_message_storage.readInt();
m_guaranted_bit_rate_downlink = m_message_storage.readInt();
m_max_bit_rate_downlink = m_message_storage.readInt();
m_transaction_id = m_message_storage.readChar();
printf("----------------------------------------------------------------------------------------------------------\n");
printf("RRC\t-------ADD DATA RADIO BEARER REQUEST------->\tRRM\n");
printf("----------------------------------------------------------------------------------------------------------\n");
printf("cell id = %d mobile id = %d radio bearer id = %d transaction id = %d \n", m_cell_id, m_mobile_id, m_radio_bearer_id, m_transaction_id);
}
//----------------------------------------------------------------------------
void RRC2RRMMessageAddRadioAccessBearerRequest::Forward()
//----------------------------------------------------------------------------
{
try {
Transaction* tx = RadioResources::Instance()->Request(*this);
RRM2RRCMessageAddRadioAccessBearerResponse response(Message::STATUS_ADD_RADIO_ACCESS_BEARER_SUCCESSFULL, Message::MSG_RESP_OK, m_cell_id, m_mobile_id, m_radio_bearer_id, m_transaction_id, tx);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
} catch (mobile_already_connected_error & x ) {
RRM2RRCMessageAddRadioAccessBearerResponse response(Message::STATUS_ADD_RADIO_ACCESS_BEARER_FAILED, Message::MSG_RESP_PROTOCOL_ERROR, m_cell_id, m_mobile_id, m_radio_bearer_id, m_transaction_id);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
} catch (std::exception const& e ) {
RRM2RRCMessageAddRadioAccessBearerResponse response(Message::STATUS_ADD_RADIO_ACCESS_BEARER_FAILED, Message::MSG_RESP_INTERNAL_ERROR, m_cell_id, m_mobile_id, m_radio_bearer_id, m_transaction_id);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
}
}
//----------------------------------------------------------------------------
void RRC2RRMMessageAddRadioAccessBearerRequest::Serialize()
//----------------------------------------------------------------------------
{
m_message_storage.reset();
m_message_storage.writeChar(Message::MESSAGE_ADD_RADIO_ACCESS_BEARER_REQUEST);
m_message_storage.writeShort(27u);
m_message_storage.writeChar(m_cell_id);
m_message_storage.writeChar(m_mobile_id);
m_message_storage.writeChar(m_radio_bearer_id);
m_message_storage.writeShort(m_traffic_class);
m_message_storage.writeShort(m_delay);
m_message_storage.writeInt(m_guaranted_bit_rate_uplink);
m_message_storage.writeInt(m_max_bit_rate_uplink);
m_message_storage.writeInt(m_guaranted_bit_rate_downlink);
m_message_storage.writeInt( m_max_bit_rate_downlink);
m_message_storage.writeChar(m_transaction_id);
}
//----------------------------------------------------------------------------
RRC2RRMMessageAddRadioAccessBearerRequest::~RRC2RRMMessageAddRadioAccessBearerRequest()
//----------------------------------------------------------------------------
{
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRC2RRMMESSAGEADDRADIOACCESSBEARERREQUEST_H
# define _RRC2RRMMESSAGEADDRADIOACCESSBEARERREQUEST_H
# include "Message.h"
# include "storage.h"
# include "platform.h"
class RRC2RRMMessageAddRadioAccessBearerRequest: public Message
{
public:
RRC2RRMMessageAddRadioAccessBearerRequest(std::string ip_dest_strP, int port_destP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
rb_id_t radio_bearer_idP,
unsigned short traffic_classP,
unsigned short delayP,
unsigned int guaranted_bit_rate_uplinkP,
unsigned int max_bit_rate_uplinkP,
unsigned int guaranted_bit_rate_downlinkP,
unsigned int max_bit_rate_downlinkP,
transaction_id_t transaction_idP);
RRC2RRMMessageAddRadioAccessBearerRequest (tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP);
~RRC2RRMMessageAddRadioAccessBearerRequest ();
void Serialize ();
void Forward();
const unsigned int GetENodeBId() {
return m_cell_id;
}
const mobile_id_t GetMobileId() {
return m_mobile_id;
}
const rb_id_t GetRadioBearerId() {
return m_radio_bearer_id;
}
const transaction_id_t GetTransactionId() {
return m_transaction_id;
}
const unsigned short GetTrafficClass() {
return m_traffic_class;
}
const unsigned short GetDelay() {
return m_delay;
}
const unsigned int GetGuarantedBitRateUplink() {
return m_guaranted_bit_rate_uplink;
}
const unsigned int GetMaxBitRateUplink() {
return m_max_bit_rate_uplink;
}
const unsigned int GetGuarantedBitRateDownlink() {
return m_guaranted_bit_rate_downlink;
}
const unsigned int GetMaxBitRateDownlink() {
return m_max_bit_rate_downlink;
}
private:
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
rb_id_t m_radio_bearer_id;
unsigned short m_traffic_class;
unsigned short m_delay;
unsigned int m_guaranted_bit_rate_uplink;
unsigned int m_max_bit_rate_uplink;
unsigned int m_guaranted_bit_rate_downlink;
unsigned int m_max_bit_rate_downlink;
transaction_id_t m_transaction_id;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRC2RRMMessageAddUserConfirm.h"
#include "RRM2RRCMessageUserReconfiguration.h"
#include "RRCMessageHandler.h"
#include "RadioResources.h"
#include "Exceptions.h"
//----------------------------------------------------------------------------
RRC2RRMMessageAddUserConfirm::RRC2RRMMessageAddUserConfirm(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRC_RRM_Message_t* asn1_messageP)
//----------------------------------------------------------------------------
{
Message();
ParseIpParameters(sa_fromP, sa_lenP);
m_asn1_message = asn1_messageP;
m_transaction_id = m_asn1_message->message.choice.c1.choice.rrcAddUserConfirm.transactionId;
m_cell_id = m_asn1_message->message.choice.c1.choice.rrcAddUserConfirm.e_NodeB_Identity.physCellId;
m_mobile_id = m_asn1_message->message.choice.c1.choice.rrcAddUserConfirm.c_RNTI;
}
//----------------------------------------------------------------------------
RRC2RRMMessageAddUserConfirm::RRC2RRMMessageAddUserConfirm(std::string ip_dest_strP, int port_destP, cell_id_t cell_idP, mobile_id_t mobile_idP, transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_asn1_message = static_cast<RRC_RRM_Message_t*>(CALLOC(1,sizeof(RRC_RRM_Message_t)));
memset(m_asn1_message, 0, sizeof(RRC_RRM_Message_t));
m_asn1_message->message.present = RRC_RRM_MessageType_PR_c1;
m_asn1_message->message.choice.c1.present = RRC_RRM_MessageType__c1_PR_rrcAddUserConfirm;
m_asn1_message->message.choice.c1.choice.rrcAddUserConfirm.transactionId = transaction_idP;
m_asn1_message->message.choice.c1.choice.rrcAddUserConfirm.e_NodeB_Identity.physCellId = cell_idP;
m_asn1_message->message.choice.c1.choice.rrcAddUserConfirm.c_RNTI = mobile_idP;
m_transaction_id = transaction_idP;
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_is_ipv6 = Utility::isipv6(ip_dest_strP);
m_msg_length = 0;
Serialize();
}
//----------------------------------------------------------------------------
void RRC2RRMMessageAddUserConfirm::Forward()
//----------------------------------------------------------------------------
{
try {
RRM2RRCMessageUserReconfiguration* user_reconfiguration = RadioResources::Instance()->Request(*this);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, user_reconfiguration->GetSerializedMessageBuffer(), user_reconfiguration->GetSerializedMessageSize());
delete user_reconfiguration;
} catch (std::exception const& e ) {
RRM2RRCMessageUserReconfiguration response(OpenAir_RRM_Response_Status_failure, OpenAir_RRM_Response_Reason_internalError, m_cell_id, m_mobile_id, m_transaction_id);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
}
}
//----------------------------------------------------------------------------
void RRC2RRMMessageAddUserConfirm::Serialize ()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
asn_enc_rval_t enc_rval;
memset(&m_message_serialize_buffer[0], 0, MESSAGE_SERIALIZE_BUFFER_SIZE);
enc_rval = uper_encode_to_buffer(&asn_DEF_RRC_RRM_Message,
(void*)m_asn1_message,
&m_message_serialize_buffer[0],
MESSAGE_SERIALIZE_BUFFER_SIZE);
cout << "[RRM][RRC2RRMMessageAddUserConfirm] asn_DEF_RRC_RRM_Message Encoded " << enc_rval.encoded << " bits (" << (enc_rval.encoded+7)/8 << " bytes)" << endl;
m_msg_length = (enc_rval.encoded+7)/8;
if (enc_rval.encoded==-1) {
cerr << "[RRM][RRC2RRMMessageAddUserConfirm] ASN1 : asn_DEF_RRC_RRM_Message encoding FAILED, EXITING" << endl;
throw asn1_encoding_error();
}
}
}
//----------------------------------------------------------------------------
RRC2RRMMessageAddUserConfirm::~RRC2RRMMessageAddUserConfirm()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
cout << "[RRM][RRC2RRMMessageAddUserConfirm::~RRC2RRMMessageAddUserConfirm()] free asn1_message start" << endl;
ASN_STRUCT_FREE( asn_DEF_RRC_RRM_Message, m_asn1_message);
cout << "[RRM][RRC2RRMMessageAddUserConfirm::~RRC2RRMMessageAddUserConfirm()] free asn1_message end" << endl;
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRC2RRMMESSAGEADDUSERCONFIRM_H
# define _RRC2RRMMESSAGEADDUSERCONFIRM_H
# include "RRC-RRM-Message.h"
# include "Message.h"
# include "platform.h"
class RRC2RRMMessageAddUserConfirm: public Message
{
public:
RRC2RRMMessageAddUserConfirm(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRC_RRM_Message_t* asn1_messageP);
RRC2RRMMessageAddUserConfirm(std::string ip_dest_strP, int port_destP, cell_id_t cell_idP, mobile_id_t mobile_idP, transaction_id_t transaction_idP);
~RRC2RRMMessageAddUserConfirm ();
void Serialize ();
void Forward();
const cell_id_t GetENodeBId() {
return m_cell_id;
}
const mobile_id_t GetMobileId() {
return m_mobile_id;
}
const transaction_id_t GetTransactionId() {
return m_transaction_id;
}
private:
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
transaction_id_t m_transaction_id;
RRC_RRM_Message_t *m_asn1_message;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRC2RRMMessageAddUserRequest.h"
#include "RRM2RRCMessageAddUserResponse.h"
#include "RRCMessageHandler.h"
#include "RadioResources.h"
#include "Exceptions.h"
//----------------------------------------------------------------------------
RRC2RRMMessageAddUserRequest::RRC2RRMMessageAddUserRequest(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRC_RRM_Message_t* asn1_messageP)
//----------------------------------------------------------------------------
{
Message();
ParseIpParameters(sa_fromP, sa_lenP);
m_asn1_message = asn1_messageP;
m_transaction_id = m_asn1_message->message.choice.c1.choice.rrcAddUserRequest.transactionId;
m_cell_id = m_asn1_message->message.choice.c1.choice.rrcAddUserRequest.e_NodeB_Identity.physCellId;
m_mobile_id = m_asn1_message->message.choice.c1.choice.rrcAddUserRequest.c_RNTI;
}
//----------------------------------------------------------------------------
RRC2RRMMessageAddUserRequest::RRC2RRMMessageAddUserRequest(std::string ip_dest_strP, int port_destP, cell_id_t cell_idP, mobile_id_t mobile_idP, transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_asn1_message = static_cast<RRC_RRM_Message_t*>(CALLOC(1,sizeof(RRC_RRM_Message_t)));
memset(m_asn1_message, 0, sizeof(RRC_RRM_Message_t));
m_asn1_message->message.present = RRC_RRM_MessageType_PR_c1;
m_asn1_message->message.choice.c1.present = RRC_RRM_MessageType__c1_PR_rrcAddUserRequest;
m_asn1_message->message.choice.c1.choice.rrcAddUserRequest.transactionId = transaction_idP;
m_asn1_message->message.choice.c1.choice.rrcAddUserRequest.e_NodeB_Identity.physCellId = cell_idP;
m_asn1_message->message.choice.c1.choice.rrcAddUserRequest.c_RNTI = mobile_idP;
m_transaction_id = transaction_idP;
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_is_ipv6 = Utility::isipv6(ip_dest_strP);
m_msg_length = 0;
Serialize();
}
//----------------------------------------------------------------------------
void RRC2RRMMessageAddUserRequest::Forward()
//----------------------------------------------------------------------------
{
try {
RRM2RRCMessageAddUserResponse* add_user_response = RadioResources::Instance()->Request(*this);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, add_user_response->GetSerializedMessageBuffer(), add_user_response->GetSerializedMessageSize());
delete add_user_response;
} catch (mobile_already_connected_error & x ) {
RRM2RRCMessageAddUserResponse response(OpenAir_RRM_Response_Status_failure, OpenAir_RRM_Response_Reason_protocolError, m_cell_id, m_mobile_id, m_transaction_id);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
} catch (std::exception const& e ) {
RRM2RRCMessageAddUserResponse response(OpenAir_RRM_Response_Status_failure, OpenAir_RRM_Response_Reason_internalError, m_cell_id, m_mobile_id, m_transaction_id);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
}
}
//----------------------------------------------------------------------------
void RRC2RRMMessageAddUserRequest::Serialize ()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
asn_enc_rval_t enc_rval;
memset(&m_message_serialize_buffer[0], 0, MESSAGE_SERIALIZE_BUFFER_SIZE);
enc_rval = uper_encode_to_buffer(&asn_DEF_RRC_RRM_Message,
(void*)m_asn1_message,
&m_message_serialize_buffer[0],
MESSAGE_SERIALIZE_BUFFER_SIZE);
printf("[RRM][RRC2RRMMessageConnectionRequest] asn_DEF_RRC_RRM_Message Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
m_msg_length = (enc_rval.encoded+7)/8;
if (enc_rval.encoded==-1) {
printf("[RRM][RRC2RRMMessageConnectionRequest] ASN1 : asn_DEF_RRC_RRM_Message encoding FAILED, EXITING\n");
throw asn1_encoding_error();
}
}
}
//----------------------------------------------------------------------------
RRC2RRMMessageAddUserRequest::~RRC2RRMMessageAddUserRequest()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
ASN_STRUCT_FREE( asn_DEF_RRC_RRM_Message, m_asn1_message);
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRC2RRMMESSAGEADDUSERREQUEST_H
# define _RRC2RRMMESSAGEADDUSERREQUEST_H
# include "RRC-RRM-Message.h"
# include "Message.h"
# include "platform.h"
class RRC2RRMMessageAddUserRequest: public Message
{
public:
RRC2RRMMessageAddUserRequest(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRC_RRM_Message_t* asn1_messageP);
RRC2RRMMessageAddUserRequest(std::string ip_dest_strP, int port_destP, cell_id_t cell_idP, mobile_id_t mobile_idP, transaction_id_t transaction_idP);
~RRC2RRMMessageAddUserRequest ();
void Serialize ();
void Forward();
const cell_id_t GetENodeBId() {
return m_cell_id;
}
const mobile_id_t GetMobileId() {
return m_mobile_id;
}
const transaction_id_t GetTransactionId() {
return m_transaction_id;
}
private:
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
transaction_id_t m_transaction_id;
RRC_RRM_Message_t *m_asn1_message;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <stdio.h>
#include <string.h>
#include "RRC2RRMMessageConnectionRequest.h"
#include "RRM2RRCMessageConnectionResponse.h"
#include "RRCMessageHandler.h"
#include "RadioResources.h"
#include "Exceptions.h"
#include "Utility.h"
using namespace std;
//----------------------------------------------------------------------------
RRC2RRMMessageConnectionRequest::RRC2RRMMessageConnectionRequest(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRC_RRM_Message_t* asn1_messageP)
//----------------------------------------------------------------------------
{
Message();
ParseIpParameters(sa_fromP, sa_lenP);
cout << "RRC2RRMMessageConnectionRequest(): m_ip_str_src = " << m_ip_str_src.c_str() << endl;
m_asn1_message = asn1_messageP;
m_transaction_id = m_asn1_message->message.choice.c1.choice.rrcSystemConfigurationRequest.transactionId;
}
//----------------------------------------------------------------------------
RRC2RRMMessageConnectionRequest::RRC2RRMMessageConnectionRequest(std::string ip_dest_strP, int port_destP, transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_asn1_message = static_cast<RRC_RRM_Message_t*>(CALLOC(1,sizeof(RRC_RRM_Message_t)));
m_asn1_message->message.present = RRC_RRM_MessageType_PR_c1;
m_asn1_message->message.choice.c1.present = RRC_RRM_MessageType__c1_PR_rrcSystemConfigurationRequest;
m_asn1_message->message.choice.c1.choice.rrcSystemConfigurationRequest.transactionId = transaction_idP;
m_transaction_id = transaction_idP;
m_is_ipv6 = Utility::isipv6(ip_dest_strP);
m_msg_length = 0;
Serialize();
}
//----------------------------------------------------------------------------
void RRC2RRMMessageConnectionRequest::Forward()
//----------------------------------------------------------------------------
{
try {
RRM2RRCMessageConnectionResponse* connection_response = RadioResources::Instance()->Request(*this);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, connection_response->GetSerializedMessageBuffer(), connection_response->GetSerializedMessageSize());
delete connection_response;
} catch (enodeb_already_connected_error & x ) {
RRM2RRCMessageConnectionResponse connection_response(OpenAir_RRM_Response_Status_failure, OpenAir_RRM_Response_Reason_protocolError);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, connection_response.GetSerializedMessageBuffer(), connection_response.GetSerializedMessageSize());
} catch (std::exception const& e ) {
RRM2RRCMessageConnectionResponse connection_response(OpenAir_RRM_Response_Status_failure, OpenAir_RRM_Response_Reason_internalError);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, connection_response.GetSerializedMessageBuffer(), connection_response.GetSerializedMessageSize());
}
}
//----------------------------------------------------------------------------
void RRC2RRMMessageConnectionRequest::Serialize()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
asn_enc_rval_t enc_rval;
memset(&m_message_serialize_buffer[0], 0, MESSAGE_SERIALIZE_BUFFER_SIZE);
enc_rval = uper_encode_to_buffer(&asn_DEF_RRC_RRM_Message,
(void*)m_asn1_message,
&m_message_serialize_buffer[0],
MESSAGE_SERIALIZE_BUFFER_SIZE);
printf("[RRM][RRC2RRMMessageConnectionRequest] asn_DEF_RRM_RRC_Message Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
m_msg_length = (enc_rval.encoded+7)/8;
if (enc_rval.encoded==-1) {
printf("[RRM][RRC2RRMMessageConnectionRequest] ASN1 : asn_DEF_RRC_RRM_Message encoding FAILED, EXITING\n");
throw asn1_encoding_error();
}
}
}
//----------------------------------------------------------------------------
RRC2RRMMessageConnectionRequest::~RRC2RRMMessageConnectionRequest()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
ASN_STRUCT_FREE( asn_DEF_RRC_RRM_Message, m_asn1_message);
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRC2RRMMESSAGECONNECTIONREQUEST_H
# define _RRC2RRMMESSAGECONNECTIONREQUEST_H
# include "RRC-RRM-Message.h"
# include "Message.h"
# include "storage.h"
# include "platform.h"
class RRC2RRMMessageConnectionRequest: public Message
{
public:
RRC2RRMMessageConnectionRequest(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRC_RRM_Message_t* asn1_messageP);
RRC2RRMMessageConnectionRequest (std::string ip_dest_strP, int port_destP, transaction_id_t transaction_idP);
~RRC2RRMMessageConnectionRequest ();
void Serialize ();
void Forward();
const transaction_id_t GetTransactionId() {
return m_transaction_id;
}
private:
//cell_id_t m_cell_id;
transaction_id_t m_transaction_id;
RRC_RRM_Message_t *m_asn1_message;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRC2RRMMessageRemoveRadioAccessBearerRequest.h"
#include "RRM2RRCMessageRemoveRadioAccessBearerResponse.h"
#include "RRCMessageHandler.h"
#include "RadioResources.h"
#include "Exceptions.h"
//----------------------------------------------------------------------------
RRC2RRMMessageRemoveRadioAccessBearerRequest::RRC2RRMMessageRemoveRadioAccessBearerRequest(std::string ip_dest_strP, int port_destP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
rb_id_t radio_bearer_idP,
transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_is_ipv6 = Utility::isipv6(ip_dest_strP);
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_radio_bearer_id = radio_bearer_idP;
m_transaction_id = transaction_idP;
}
//----------------------------------------------------------------------------
RRC2RRMMessageRemoveRadioAccessBearerRequest::RRC2RRMMessageRemoveRadioAccessBearerRequest(tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP):
Message(in_messageP)
//----------------------------------------------------------------------------
{
ParseIpParameters(sa_fromP, sa_lenP);
m_cell_id = m_message_storage.readChar();
m_mobile_id = m_message_storage.readChar();
m_radio_bearer_id = m_message_storage.readChar();
m_transaction_id = m_message_storage.readChar();
printf("----------------------------------------------------------------------------------------------------------\n");
printf("RRC\t-------REMOVE DATA RADIO BEARER REQUEST------->\tRRM\n");
printf("----------------------------------------------------------------------------------------------------------\n");
printf("cell id = %d mobile id = %d radio bearer id = %d transaction id = %d \n", m_cell_id, m_mobile_id, m_radio_bearer_id, m_transaction_id);
}
//----------------------------------------------------------------------------
void RRC2RRMMessageRemoveRadioAccessBearerRequest::Forward()
//----------------------------------------------------------------------------
{
try {
Transaction* tx = RadioResources::Instance()->Request(*this);
RRM2RRCMessageRemoveRadioAccessBearerResponse response(Message::STATUS_REMOVE_RADIO_ACCESS_BEARER_SUCCESSFULL, Message::MSG_RESP_OK, m_cell_id, m_mobile_id, m_radio_bearer_id, m_transaction_id, tx);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
} catch (mobile_already_connected_error & x ) {
RRM2RRCMessageRemoveRadioAccessBearerResponse response(Message::STATUS_REMOVE_RADIO_ACCESS_BEARER_FAILED, Message::MSG_RESP_PROTOCOL_ERROR, m_cell_id, m_mobile_id, m_radio_bearer_id, m_transaction_id);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
} catch (std::exception const& e ) {
RRM2RRCMessageRemoveRadioAccessBearerResponse response(Message::STATUS_REMOVE_RADIO_ACCESS_BEARER_FAILED, Message::MSG_RESP_INTERNAL_ERROR, m_cell_id, m_mobile_id, m_radio_bearer_id, m_transaction_id);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
}
}
//----------------------------------------------------------------------------
void RRC2RRMMessageRemoveRadioAccessBearerRequest::Serialize()
//----------------------------------------------------------------------------
{
m_message_storage.reset();
m_message_storage.writeChar(Message::MESSAGE_REMOVE_RADIO_ACCESS_BEARER_REQUEST);
m_message_storage.writeShort(7u);
m_message_storage.writeChar(m_cell_id);
m_message_storage.writeChar(m_mobile_id);
m_message_storage.writeChar(m_radio_bearer_id);
m_message_storage.writeChar(m_transaction_id);
}
//----------------------------------------------------------------------------
RRC2RRMMessageRemoveRadioAccessBearerRequest::~RRC2RRMMessageRemoveRadioAccessBearerRequest()
//----------------------------------------------------------------------------
{
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRC2RRMMESSAGEREMOVERADIOACCESSBEARERREQUEST_H
# define _RRC2RRMMESSAGEREMOVERADIOACCESSBEARERREQUEST_H
# include "Message.h"
# include "storage.h"
# include "platform.h"
class RRC2RRMMessageRemoveRadioAccessBearerRequest: public Message
{
public:
RRC2RRMMessageRemoveRadioAccessBearerRequest(std::string ip_dest_strP,
int port_destP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
rb_id_t radio_bearer_idP,
transaction_id_t transaction_idP);
RRC2RRMMessageRemoveRadioAccessBearerRequest (tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP);
~RRC2RRMMessageRemoveRadioAccessBearerRequest ();
void Serialize ();
void Forward();
const unsigned int GetENodeBId() {
return m_cell_id;
}
const mobile_id_t GetMobileId() {
return m_mobile_id;
}
const rb_id_t GetRadioBearerId() {
return m_radio_bearer_id;
}
const transaction_id_t GetTransactionId() {
return m_transaction_id;
}
private:
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
transaction_id_t m_transaction_id;
rb_id_t m_radio_bearer_id;
unsigned short m_traffic_class;
unsigned short m_delay;
unsigned int m_guaranted_bit_rate_uplink;
unsigned int m_max_bit_rate_uplink;
unsigned int m_guaranted_bit_rate_downlink;
unsigned int m_max_bit_rate_downlink;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRC2RRMMessageRemoveUserRequest.h"
#include "RRM2RRCMessageRemoveUserResponse.h"
#include "RRCMessageHandler.h"
#include "RadioResources.h"
#include "Exceptions.h"
//----------------------------------------------------------------------------
RRC2RRMMessageRemoveUserRequest::RRC2RRMMessageRemoveUserRequest(std::string ip_dest_strP, int port_destP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_is_ipv6 = Utility::isipv6(ip_dest_strP);
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_transaction_id = transaction_idP;
}
//----------------------------------------------------------------------------
RRC2RRMMessageRemoveUserRequest::RRC2RRMMessageRemoveUserRequest(tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP):
Message(in_messageP)
//----------------------------------------------------------------------------
{
ParseIpParameters(sa_fromP, sa_lenP);
m_cell_id = m_message_storage.readChar();
m_mobile_id = m_message_storage.readChar();
m_transaction_id = m_message_storage.readChar();
printf("----------------------------------------------------------------------------------------------------------\n");
printf("RRC\t-------REMOVE USER REQUEST------->\tRRM\n");
printf("----------------------------------------------------------------------------------------------------------\n");
printf("cell id = %d mobile id = %d transaction id = %d \n", m_cell_id, m_mobile_id, m_transaction_id);
}
//----------------------------------------------------------------------------
void RRC2RRMMessageRemoveUserRequest::Forward()
//----------------------------------------------------------------------------
{
try {
Transaction* tx = RadioResources::Instance()->Request(*this);
RRM2RRCMessageRemoveUserResponse response(Message::STATUS_REMOVE_USER_SUCCESSFULL, Message::MSG_RESP_OK, m_cell_id, m_mobile_id, m_transaction_id, tx);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
} catch (mobile_already_connected_error & x ) {
RRM2RRCMessageRemoveUserResponse response(Message::STATUS_REMOVE_USER_FAILED, Message::MSG_RESP_PROTOCOL_ERROR, m_cell_id, m_mobile_id, m_transaction_id);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
} catch (std::exception const& e ) {
RRM2RRCMessageRemoveUserResponse response(Message::STATUS_REMOVE_USER_FAILED, Message::MSG_RESP_INTERNAL_ERROR, m_cell_id, m_mobile_id, m_transaction_id);
RRCMessageHandler::Instance()->Send2Peer(this->m_ip_str_src, this->m_port_src, response.GetSerializedMessageBuffer(), response.GetSerializedMessageSize());
}
}
//----------------------------------------------------------------------------
void RRC2RRMMessageRemoveUserRequest::Serialize()
//----------------------------------------------------------------------------
{
m_message_storage.reset();
m_message_storage.writeChar(Message::MESSAGE_REMOVE_USER_REQUEST);
m_message_storage.writeShort(6u);
m_message_storage.writeChar(m_cell_id);
m_message_storage.writeChar(m_mobile_id);
m_message_storage.writeChar(m_transaction_id);
}
//----------------------------------------------------------------------------
RRC2RRMMessageRemoveUserRequest::~RRC2RRMMessageRemoveUserRequest()
//----------------------------------------------------------------------------
{
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRC2RRMMESSAGEREMOVEUSERREQUEST_H
# define _RRC2RRMMESSAGEREMOVEUSERREQUEST_H
# include "Message.h"
# include "storage.h"
# include "platform.h"
class RRC2RRMMessageRemoveUserRequest: public Message
{
public:
RRC2RRMMessageRemoveUserRequest(std::string ip_dest_strP, int port_destP,
cell_id_t ,
mobile_id_t ,
transaction_id_t );
RRC2RRMMessageRemoveUserRequest (tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP);
~RRC2RRMMessageRemoveUserRequest ();
void Serialize ();
void Forward();
const unsigned int GetENodeBId() {
return 1u;
}
const mobile_id_t GetMobileId() {
return m_mobile_id;
}
const transaction_id_t GetTransactionId() {
return m_transaction_id;
}
protected:
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
transaction_id_t m_transaction_id;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRC2RRMMessageUserReconfigurationComplete.h"
#include "RadioResources.h"
#include "Exceptions.h"
#include "Utility.h"
//----------------------------------------------------------------------------
RRC2RRMMessageUserReconfigurationComplete::RRC2RRMMessageUserReconfigurationComplete(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRC_RRM_Message_t* asn1_messageP)
//----------------------------------------------------------------------------
{
Message();
ParseIpParameters(sa_fromP, sa_lenP);
cout << "RRC2RRMMessageUserReconfigurationComplete(): m_ip_str_src = " << m_ip_str_src.c_str() << endl;
m_asn1_message = asn1_messageP;
m_transaction_id = m_asn1_message->message.choice.c1.choice.rrcUserReconfigurationComplete.transactionId;
m_cell_id = m_asn1_message->message.choice.c1.choice.rrcUserReconfigurationComplete.e_NodeB_Identity.physCellId;
m_mobile_id = m_asn1_message->message.choice.c1.choice.rrcUserReconfigurationComplete.c_RNTI;
}
//----------------------------------------------------------------------------
RRC2RRMMessageUserReconfigurationComplete::RRC2RRMMessageUserReconfigurationComplete(std::string ip_dest_strP, int port_destP, cell_id_t cell_idP, mobile_id_t mobile_idP, transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_asn1_message = static_cast<RRC_RRM_Message_t*>(CALLOC(1,sizeof(RRC_RRM_Message_t)));
memset(m_asn1_message, 0, sizeof(RRC_RRM_Message_t));
m_asn1_message->message.present = RRC_RRM_MessageType_PR_c1;
m_asn1_message->message.choice.c1.present = RRC_RRM_MessageType__c1_PR_rrcUserReconfigurationComplete;
m_asn1_message->message.choice.c1.choice.rrcUserReconfigurationComplete.transactionId = transaction_idP;
m_asn1_message->message.choice.c1.choice.rrcUserReconfigurationComplete.e_NodeB_Identity.physCellId = cell_idP;
m_asn1_message->message.choice.c1.choice.rrcUserReconfigurationComplete.c_RNTI = mobile_idP;
m_transaction_id = transaction_idP;
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_is_ipv6 = Utility::isipv6(ip_dest_strP);
m_msg_length = 0;
Serialize();
}
//----------------------------------------------------------------------------
void RRC2RRMMessageUserReconfigurationComplete::Forward()
//----------------------------------------------------------------------------
{
try {
RadioResources::Instance()->Request(*this);
} catch (std::exception const& e ) {
}
}
//----------------------------------------------------------------------------
void RRC2RRMMessageUserReconfigurationComplete::Serialize()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
//xer_fprint(stdout, &asn_DEF_RRC_RRM_Message, (void*)m_asn1_message);
char errbuf[256];
size_t errlen = sizeof(errbuf);
int ret = asn_check_constraints(&asn_DEF_RRC_RRM_Message, m_asn1_message, errbuf, &errlen);
if (ret) {
fprintf(stderr, "CONSTRAINT VALIDATION FAILED FOR RRM-RRC Message: %s\n", errbuf);
exit (-1);
}
asn_enc_rval_t enc_rval;
memset(&m_message_serialize_buffer[0], 0, MESSAGE_SERIALIZE_BUFFER_SIZE);
enc_rval = uper_encode_to_buffer(&asn_DEF_RRC_RRM_Message,
(void*)m_asn1_message,
&m_message_serialize_buffer[0],
MESSAGE_SERIALIZE_BUFFER_SIZE);
printf("[RRM][RRC2RRMMessageUserReconfigurationComplete] asn_DEF_RRC_RRM_Message Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
m_msg_length = (enc_rval.encoded+7)/8;
if (enc_rval.encoded==-1) {
cerr << "[RRM][RRC2RRMMessageUserReconfigurationComplete] ASN1 : asn_DEF_RRC_RRM_Message encoding FAILED, EXITING" << endl;
cerr << "[RRM][RRC2RRMMessageUserReconfigurationComplete] Cannot encode "<< enc_rval.failed_type->name <<" " << strerror(errno) << endl;
throw asn1_encoding_error();
}
//xer_fprint(stdout, &asn_DEF_RRC_RRM_Message, (void*)m_asn1_message);
}
}
//----------------------------------------------------------------------------
RRC2RRMMessageUserReconfigurationComplete::~RRC2RRMMessageUserReconfigurationComplete()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
cout << "[RRM][RRC2RRMMessageUserReconfigurationComplete::~RRC2RRMMessageUserReconfigurationComplete()] free asn1_message start" << endl;
ASN_STRUCT_FREE( asn_DEF_RRC_RRM_Message, m_asn1_message);
m_asn1_message = NULL;
cout << "[RRM][RRC2RRMMessageUserReconfigurationComplete::~RRC2RRMMessageUserReconfigurationComplete()] free asn1_message end " << endl;
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRC2RRMMESSAGEUSERRECONFIGURATIONCOMPLETE_H
# define _RRC2RRMMESSAGEUSERRECONFIGURATIONCOMPLETE_H
# include "RRC-RRM-Message.h"
# include "Message.h"
# include "platform.h"
class RRC2RRMMessageUserReconfigurationComplete: public Message
{
public:
RRC2RRMMessageUserReconfigurationComplete(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRC_RRM_Message_t* asn1_messageP);
RRC2RRMMessageUserReconfigurationComplete(std::string ip_dest_strP, int port_destP, cell_id_t cell_idP, mobile_id_t mobile_idP, transaction_id_t transaction_idP);
~RRC2RRMMessageUserReconfigurationComplete ();
void Serialize ();
void Forward();
const cell_id_t GetENodeBId() {
return m_cell_id;
}
mobile_id_t GetMobileId() {
return m_mobile_id;
};
transaction_id_t GetTransactionId() {
return m_transaction_id;
};
protected:
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
transaction_id_t m_transaction_id;
RRC_RRM_Message_t* m_asn1_message;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdio.h>
#include "RRCMessageHandler.h"
RRCMessageHandler* RRCMessageHandler::s_instance = 0;
//----------------------------------------------------------------------------
void* RRCMessageHandlerThreadLoop(void *arg)
//----------------------------------------------------------------------------
{
return RRCMessageHandler::Instance()->ThreadLoop(arg);
}
//-----------------------------------------------------------------
RRCMessageHandler* RRCMessageHandler::Instance()
//-----------------------------------------------------------------
{
if (RRCMessageHandler::s_instance == 0) {
RRCMessageHandler::s_instance = new RRCMessageHandler;
}
return s_instance;
}
//-----------------------------------------------------------------
RRCMessageHandler::RRCMessageHandler()
//-----------------------------------------------------------------
{
m_socket_handler = new SocketHandler();
m_log = new StdoutLog() ;
m_socket_handler->RegStdLog(m_log);
m_socket = new RRCUdpSocket(*m_socket_handler, 16384, true);
port_t port = 33333;
Ipv6Address ad("0::1", port);
if (m_socket->Bind(ad, 1) == -1) {
printf("Exiting...\n");
exit(-1);
} else {
printf("Ready to receive on port %d\n",port);
}
m_socket_handler->Add(m_socket);
if (pthread_create(&m_thread, NULL, RRCMessageHandlerThreadLoop, (void *) NULL) != 0) {
fprintf(stderr, "\nRRCMessageHandler::RRCMessageHandler() ERROR pthread_create...\n");
} else {
pthread_setname_np( m_thread, "RRCMsgHandler" );
}
}
//----------------------------------------------------------------------------
void* RRCMessageHandler::ThreadLoop(void *arg)
//----------------------------------------------------------------------------
{
m_socket_handler->Select(1,0);
while (m_socket_handler->GetCount() && !*m_quit) {
m_socket_handler->Select(1,0);
}
fprintf(stderr, "\nRRCMessageHandler::ThreadLoop Exiting...\n");
return NULL;
}
//----------------------------------------------------------------------------
void RRCMessageHandler::Join(bool *quitP)
//----------------------------------------------------------------------------
{
m_quit = quitP;
pthread_join(m_thread, NULL);
fprintf(stderr, "\nRRCMessageHandler::Join Done\n");
}
//----------------------------------------------------------------------------
void RRCMessageHandler::NotifyRxData(const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP)
//----------------------------------------------------------------------------
{
Message* message;
do {
//message = Message::Deserialize(in_bufferP, size_dataP, sa_fromP, sa_lenP);
message = Message::DeserializeRRCMessage(in_bufferP, size_dataP, sa_fromP, sa_lenP);
if (message != NULL) {
//fprintf(stderr, "RRCMessageHandler::notifyRxData GOT MESSAGE\n");
message->Forward();
delete message;
message = NULL;
} else {
// TO DO
}
} while (message != NULL);
}
//-----------------------------------------------------------------
void RRCMessageHandler::Send2Peer(Message* messageP)
//-----------------------------------------------------------------
{
Send2Peer(messageP->GetSrcAddress(), messageP->GetSrcPort(), messageP->GetSerializedMessageBuffer(), messageP->GetSerializedMessageSize());
delete messageP;
}
//-----------------------------------------------------------------
void RRCMessageHandler::Send2Peer(std::string ip_dest_strP, int port_destP, const char *in_bufferP, msg_length_t size_dataP)
//-----------------------------------------------------------------
{
std::string lo_bad_address("1");
std::string lo_good_address("0::1");
if (ip_dest_strP.compare(lo_bad_address) != 0) {
m_socket->SendToBuf(ip_dest_strP, port_destP, in_bufferP, size_dataP, 0);
} else {
m_socket->SendToBuf(lo_good_address, port_destP, in_bufferP, size_dataP, 0);
}
}
//-----------------------------------------------------------------
RRCMessageHandler::~RRCMessageHandler()
//-----------------------------------------------------------------
{
if (m_socket_handler != 0)
{
delete m_socket_handler;
}
if (m_log != 0)
{
delete m_log;
}
// m_socket should be closed and deleted by m_socket_handler
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
# ifndef _RRCMESSAGEHANDLER_H
# define _RRCMESSAGEHANDLER_H
# include <pthread.h>
# include "StdoutLog.h"
# include "SocketHandlerEp.h"
# include "RRCUdpSocket.h"
# include "ListenSocket.h"
# include "Message.h"
# include "platform.h"
class RRCMessageHandler
{
public:
static RRCMessageHandler *Instance ();
void NotifyRxData (const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP);
void Send2Peer (Message *);
void Send2Peer(std::string ip_dest_strP, int port_destP, const char *in_bufferP, msg_length_t size_dataP);
void* ThreadLoop(void *arg);
void Join(bool *quitP);
~RRCMessageHandler ();
private:
RRCMessageHandler ();
SocketHandler *m_socket_handler;
RRCUdpSocket *m_socket;
StdoutLog *m_log;
pthread_t m_thread;
bool *m_quit;
static RRCMessageHandler *s_instance;
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdio.h>
#include "RRCUdpSocket.h"
#include "RRCMessageHandler.h"
RRCUdpSocket::RRCUdpSocket(ISocketHandler& h,int ibufsz, bool ipv6)
:UdpSocket(h, ibufsz, ipv6)
{
}
void RRCUdpSocket::OnRawData(const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP)
{
RRCMessageHandler::Instance()->NotifyRxData(in_bufferP, size_dataP, sa_fromP, sa_lenP);
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRCUDPSOCKET_H
#define _RRCUDPSOCKET_H
#include "UdpSocket.h"
class RRCUdpSocket : public UdpSocket
{
public:
RRCUdpSocket(ISocketHandler&,int ibufsz, bool ipv6);
void OnRawData(const char *,size_t,struct sockaddr *,socklen_t);
};
#endif // _RRCUDPSOCKET_H
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRM2RRCMessageAddRadioAccessBearerResponse.h"
#include "RadioResources.h"
#include "Exceptions.h"
#include "TestScenario.h"
//----------------------------------------------------------------------------
RRM2RRCMessageAddRadioAccessBearerResponse::RRM2RRCMessageAddRadioAccessBearerResponse(tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP):Message(in_messageP)
//----------------------------------------------------------------------------
{
ParseIpParameters(sa_fromP, sa_lenP);
m_status = m_message_storage.readChar();
m_reason = m_message_storage.readChar();
m_cell_id = m_message_storage.readChar();
m_mobile_id = m_message_storage.readChar();
m_radio_bearer_id= m_message_storage.readChar();
m_transaction_id = m_message_storage.readChar();
m_transaction_result = NULL;
cout << "----------------------------------------------------------------------------------------------------------" << endl;
cout << "RRC\t<-------ADD DATA RADIO BEARER RESPONSE-------\tRRM STATUS: "<< Message::StatusToString(m_status).c_str() << " REASON: "<< Message::ReasonToString(m_reason).c_str() << endl;
cout << "----------------------------------------------------------------------------------------------------------" << endl;
cout << "cell id = " << m_cell_id << " mobile id = " << m_mobile_id << " radio bearer id = "<< m_radio_bearer_id << " transaction id = "<< m_transaction_id << endl;
if ((msg_lengthP - 6) > 0 ) {
m_transaction_result = new Transaction(m_transaction_id, m_message_storage, msg_lengthP - 6);
cout << m_transaction_result->ToString().c_str() << endl;
}
}
//----------------------------------------------------------------------------
RRM2RRCMessageAddRadioAccessBearerResponse::RRM2RRCMessageAddRadioAccessBearerResponse(msg_response_status_t statusP,
msg_response_reason_t reasonP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
rb_id_t radio_bearer_idP,
transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_radio_bearer_id = radio_bearer_idP;
m_transaction_id = transaction_idP;
}
//----------------------------------------------------------------------------
RRM2RRCMessageAddRadioAccessBearerResponse::RRM2RRCMessageAddRadioAccessBearerResponse(msg_response_status_t statusP,
msg_response_reason_t reasonP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
rb_id_t radio_bearer_idP,
transaction_id_t transaction_idP,
Transaction* transactionP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_radio_bearer_id = radio_bearer_idP;
m_transaction_id = transaction_idP;
m_transaction_result = transactionP;
}
//----------------------------------------------------------------------------
void RRM2RRCMessageAddRadioAccessBearerResponse::Serialize ()
//----------------------------------------------------------------------------
{
//printf("[RRM][RRM2RRCMessageAddRadioAccessBearerResponse] Serialize () status = %d reason = %d cell id = %d mobile id = %d radio bearer id = %d transaction id = %d \n", m_status, m_reason, m_cell_id, m_mobile_id, m_radio_bearer_id, m_transaction_id);
int tx_packet_size = 0;
if (m_transaction_result != NULL) {
tx_packet_size = m_transaction_result->Size();
}
m_message_storage.reset();
m_message_storage.writeChar(Message::MESSAGE_ADD_RADIO_ACCESS_BEARER_RESPONSE);
m_message_storage.writeShort(9u+tx_packet_size);
m_message_storage.writeChar(m_status);
m_message_storage.writeChar(m_reason);
m_message_storage.writeChar(m_cell_id);
m_message_storage.writeChar(m_mobile_id);
m_message_storage.writeChar(m_radio_bearer_id);
m_message_storage.writeChar(m_transaction_id);
if (m_transaction_result != NULL) {
unsigned char packet[tx_packet_size];
m_transaction_result->Serialize(&packet[0]);
m_message_storage.writePacket(&packet[0], tx_packet_size);
}
}
//----------------------------------------------------------------------------
void RRM2RRCMessageAddRadioAccessBearerResponse::Forward()
//----------------------------------------------------------------------------
{
#ifdef TEST_SCENARIO
TestScenario::notifyRxMessage(this);
#endif
}
//----------------------------------------------------------------------------
RRM2RRCMessageAddRadioAccessBearerResponse::~RRM2RRCMessageAddRadioAccessBearerResponse()
//----------------------------------------------------------------------------
{
if (m_transaction_result != NULL) {
delete m_transaction_result;
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRM2RRCMESSAGEADDRADIOACCESSBEARERRESPONSE_H
# define _RRM2RRCMESSAGEADDRADIOACCESSBEARERRESPONSE_H
# include "Message.h"
# include "platform.h"
# include "Transaction.h"
class RRM2RRCMessageAddRadioAccessBearerResponse: public Message
{
public:
RRM2RRCMessageAddRadioAccessBearerResponse(tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP);
RRM2RRCMessageAddRadioAccessBearerResponse(msg_response_status_t ,
msg_response_reason_t ,
cell_id_t ,
mobile_id_t ,
rb_id_t ,
transaction_id_t );
RRM2RRCMessageAddRadioAccessBearerResponse(msg_response_status_t ,
msg_response_reason_t ,
cell_id_t ,
mobile_id_t ,
rb_id_t ,
transaction_id_t ,
Transaction*);
~RRM2RRCMessageAddRadioAccessBearerResponse ();
void Serialize ();
void Forward();
msg_response_status_t GetStatus() {
return m_status;
};
msg_response_reason_t GetReason() {
return m_reason;
};
cell_id_t GetENodeBId() {
return m_cell_id;
};
mobile_id_t GetMobileId() {
return m_mobile_id;
};
rb_id_t GetRadioBearerId() {
return m_radio_bearer_id;
};
transaction_id_t GetTransactionId() {
return m_transaction_id;
};
protected:
msg_response_status_t m_status;
msg_response_reason_t m_reason;
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
rb_id_t m_radio_bearer_id;
transaction_id_t m_transaction_id;
Transaction* m_transaction_result;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRM2RRCMessageAddUserResponse.h"
#include "RadioResources.h"
#include "Exceptions.h"
#include "TestScenario.h"
//----------------------------------------------------------------------------
RRM2RRCMessageAddUserResponse::RRM2RRCMessageAddUserResponse(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRM_RRC_Message_t* asn1_messageP)
//----------------------------------------------------------------------------
{
Message();
ParseIpParameters(sa_fromP, sa_lenP);
cout << "RRM2RRCMessageAddUserResponse(): m_ip_str_src = " << m_ip_str_src.c_str() << endl;
m_asn1_message = asn1_messageP;
m_status = m_asn1_message->message.choice.c1.choice.rrcAddUserResponse.rrm_Response_Status;
m_reason = m_asn1_message->message.choice.c1.choice.rrcAddUserResponse.rrm_Response_Reason;
m_transaction_id = m_asn1_message->message.choice.c1.choice.rrcAddUserResponse.transactionId;
m_cell_id = m_asn1_message->message.choice.c1.choice.rrcAddUserResponse.e_NodeB_Identity.physCellId;
m_mobile_id = m_asn1_message->message.choice.c1.choice.rrcAddUserResponse.c_RNTI;
}
//----------------------------------------------------------------------------
RRM2RRCMessageAddUserResponse::RRM2RRCMessageAddUserResponse(transaction_id_t transaction_idP, msg_response_status_t statusP, msg_response_reason_t reasonP, RRM_RRC_Message_t* asn1_messageP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_transaction_id = transaction_idP;
m_asn1_message = asn1_messageP;
m_asn1_message->message.choice.c1.choice.rrcAddUserResponse.transactionId = transaction_idP;
m_asn1_message->message.choice.c1.choice.rrcAddUserResponse.rrm_Response_Status = statusP;
m_asn1_message->message.choice.c1.choice.rrcAddUserResponse.rrm_Response_Reason = reasonP;
m_cell_id = m_asn1_message->message.choice.c1.choice.rrcAddUserResponse.e_NodeB_Identity.physCellId;
m_mobile_id = m_asn1_message->message.choice.c1.choice.rrcAddUserResponse.c_RNTI;
Serialize();
}
//----------------------------------------------------------------------------
RRM2RRCMessageAddUserResponse::RRM2RRCMessageAddUserResponse(msg_response_status_t statusP, msg_response_reason_t reasonP, cell_id_t cell_idP, mobile_id_t mobile_idP, transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_transaction_id = transaction_idP;
}
//----------------------------------------------------------------------------
void RRM2RRCMessageAddUserResponse::Forward()
//----------------------------------------------------------------------------
{
#ifdef TEST_SCENARIO
TestScenario::notifyRxMessage(this);
#endif
}
//----------------------------------------------------------------------------
void RRM2RRCMessageAddUserResponse::Serialize()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
//xer_fprint(stdout, &asn_DEF_RRM_RRC_Message, (void*)m_asn1_message);
char errbuf[128];
size_t errlen = sizeof(errbuf);
int ret = asn_check_constraints(&asn_DEF_RRM_RRC_Message, m_asn1_message, errbuf, &errlen);
if (ret) {
fprintf(stderr, "CONSTRAINT VALIDATION FAILED FOR RRM-RRC Message: %s\n", errbuf);
exit (-1);
}
asn_enc_rval_t enc_rval;
memset(&m_message_serialize_buffer[0], 0, MESSAGE_SERIALIZE_BUFFER_SIZE);
enc_rval = uper_encode_to_buffer(&asn_DEF_RRM_RRC_Message,
(void*)m_asn1_message,
&m_message_serialize_buffer[0],
MESSAGE_SERIALIZE_BUFFER_SIZE);
printf("[RRM][RRM2RRCMessageAddUserResponse] asn_DEF_RRM_RRC_Message Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
m_msg_length = (enc_rval.encoded+7)/8;
if (enc_rval.encoded==-1) {
printf("[RRM][RRM2RRCMessageAddUserResponse] ASN1 : asn_DEF_RRM_RRC_Message encoding FAILED, EXITING\n");
throw asn1_encoding_error();
}
//xer_fprint(stdout, &asn_DEF_RRM_RRC_Message, (void*)m_asn1_message);
}
}
//----------------------------------------------------------------------------
RRM2RRCMessageAddUserResponse::~RRM2RRCMessageAddUserResponse()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
ASN_STRUCT_FREE( asn_DEF_RRM_RRC_Message, m_asn1_message);
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRM2RRCMESSAGEADDUSERRESPONSE_H
# define _RRM2RRCMESSAGEADDUSERRESPONSE_H
# include "RRM-RRC-Message.h"
# include "Message.h"
# include "platform.h"
class RRM2RRCMessageAddUserResponse: public Message
{
public:
RRM2RRCMessageAddUserResponse(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRM_RRC_Message_t* asn1_messageP);
RRM2RRCMessageAddUserResponse(transaction_id_t transaction_idP, msg_response_status_t statusP, msg_response_reason_t reasonP, RRM_RRC_Message_t* asn1_messageP);
RRM2RRCMessageAddUserResponse(msg_response_status_t statusP, msg_response_reason_t reasonP, cell_id_t cell_idP, mobile_id_t mobile_idP, transaction_id_t transaction_idP);
~RRM2RRCMessageAddUserResponse ();
void Serialize ();
void Forward();
msg_response_status_t GetStatus() {
return m_status;
};
msg_response_reason_t GetReason() {
return m_reason;
};
const cell_id_t GetENodeBId() {
return m_cell_id;
}
const mobile_id_t GetMobileId() {
return m_mobile_id;
};
const transaction_id_t GetTransactionId() {
return m_transaction_id;
};
protected:
msg_response_status_t m_status;
msg_response_reason_t m_reason;
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
transaction_id_t m_transaction_id;
RRM_RRC_Message_t* m_asn1_message;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRM2RRCMessageConnectionResponse.h"
#include "RadioResources.h"
#include "Exceptions.h"
#include "TestScenario.h"
//----------------------------------------------------------------------------
RRM2RRCMessageConnectionResponse::RRM2RRCMessageConnectionResponse(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRM_RRC_Message_t* asn1_messageP)
//----------------------------------------------------------------------------
{
Message();
ParseIpParameters(sa_fromP, sa_lenP);
cout << "RRM2RRCMessageConnectionResponse(): m_ip_str_src = " << m_ip_str_src.c_str() << endl;
m_asn1_message = asn1_messageP;
m_status = m_asn1_message->message.choice.c1.choice.rrcSystemConfigurationResponse.rrm_Response_Status;
m_reason = m_asn1_message->message.choice.c1.choice.rrcSystemConfigurationResponse.rrm_Response_Reason;
m_transaction_id = m_asn1_message->message.choice.c1.choice.rrcSystemConfigurationResponse.transactionId;
m_cell_id = m_asn1_message->message.choice.c1.choice.rrcSystemConfigurationResponse.e_NodeB_Identity.physCellId;
}
//----------------------------------------------------------------------------
RRM2RRCMessageConnectionResponse::RRM2RRCMessageConnectionResponse(transaction_id_t transaction_idP, msg_response_status_t statusP, msg_response_reason_t reasonP, RRM_RRC_Message_t* asn1_messageP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_transaction_id = transaction_idP;
m_asn1_message = asn1_messageP;
m_asn1_message->message.choice.c1.choice.rrcSystemConfigurationResponse.transactionId = transaction_idP;
m_asn1_message->message.choice.c1.choice.rrcSystemConfigurationResponse.rrm_Response_Status = statusP;
m_asn1_message->message.choice.c1.choice.rrcSystemConfigurationResponse.rrm_Response_Reason = reasonP;
m_cell_id = m_asn1_message->message.choice.c1.choice.rrcSystemConfigurationResponse.e_NodeB_Identity.physCellId;
Serialize();
}
//----------------------------------------------------------------------------
RRM2RRCMessageConnectionResponse::RRM2RRCMessageConnectionResponse(msg_response_status_t statusP, msg_response_reason_t reasonP, cell_id_t cell_idP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_cell_id = cell_idP;
}
//----------------------------------------------------------------------------
void RRM2RRCMessageConnectionResponse::Forward()
//----------------------------------------------------------------------------
{
cout << "[RRM][RRM2RRCMessageConnectionResponse] status = " << m_status << " reason = " << m_reason << " cell id = " << m_cell_id << endl;
#ifdef TEST_SCENARIO
TestScenario::notifyRxMessage(this);
#endif
}
//----------------------------------------------------------------------------
void RRM2RRCMessageConnectionResponse::Serialize()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
//xer_fprint(stdout, &asn_DEF_RRM_RRC_Message, (void*)m_asn1_message);
char errbuf[128];
size_t errlen = sizeof(errbuf);
int ret = asn_check_constraints(&asn_DEF_RRM_RRC_Message, m_asn1_message, errbuf, &errlen);
if (ret) {
cerr << "[RRM][RRM2RRCMessageConnectionResponse] CONSTRAINT VALIDATION FAILED FOR RRM-RRC Message: " << errbuf << endl;
exit (-1);
}
asn_enc_rval_t enc_rval;
memset(&m_message_serialize_buffer[0], 0, MESSAGE_SERIALIZE_BUFFER_SIZE);
enc_rval = uper_encode_to_buffer(&asn_DEF_RRM_RRC_Message,
(void*)m_asn1_message,
&m_message_serialize_buffer[0],
MESSAGE_SERIALIZE_BUFFER_SIZE);
cout << "[RRM][RRM2RRCMessageConnectionResponse] asn_DEF_RRM_RRC_Message Encoded " << enc_rval.encoded << " bits (" << (enc_rval.encoded+7)/8 << " bytes)" << endl;
m_msg_length = (enc_rval.encoded+7)/8;
if (enc_rval.encoded==-1) {
cout << "[RRM][RRM2RRCMessageConnectionResponse] ASN1 : asn_DEF_RRM_RRC_Message encoding FAILED, EXITING" << endl;
throw asn1_encoding_error();
}
//xer_fprint(stdout, &asn_DEF_RRM_RRC_Message, (void*)m_asn1_message);
}
}
//----------------------------------------------------------------------------
RRM2RRCMessageConnectionResponse::~RRM2RRCMessageConnectionResponse()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
ASN_STRUCT_FREE( asn_DEF_RRM_RRC_Message, m_asn1_message);
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRM2RRCMESSAGECONNECTIONRESPONSE_H
# define _RRM2RRCMESSAGECONNECTIONRESPONSE_H
# include "RRM-RRC-Message.h"
# include "Message.h"
# include "platform.h"
class RRM2RRCMessageConnectionResponse: public Message
{
public:
RRM2RRCMessageConnectionResponse(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRM_RRC_Message_t* asn1_messageP);
RRM2RRCMessageConnectionResponse(transaction_id_t transaction_idP, msg_response_status_t statusP, msg_response_reason_t reasonP, RRM_RRC_Message_t* asn1_messageP);
RRM2RRCMessageConnectionResponse (msg_response_status_t statusP, msg_response_reason_t reasonP, cell_id_t cell_idP=-1);
~RRM2RRCMessageConnectionResponse ();
void Serialize ();
void Forward();
const msg_response_status_t GetStatus() {
return m_status;
};
const msg_response_reason_t GetReason() {
return m_reason;
};
const cell_id_t GetENodeBId() {
return m_cell_id;
}
const transaction_id_t GetTransactionId() {
return m_transaction_id;
};
protected:
msg_response_status_t m_status;
msg_response_reason_t m_reason;
cell_id_t m_cell_id;
transaction_id_t m_transaction_id;
RRM_RRC_Message_t* m_asn1_message;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRM2RRCMessageRemoveRadioAccessBearerResponse.h"
#include "RadioResources.h"
#include "Exceptions.h"
#include "TestScenario.h"
//----------------------------------------------------------------------------
RRM2RRCMessageRemoveRadioAccessBearerResponse::RRM2RRCMessageRemoveRadioAccessBearerResponse(tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP):Message(in_messageP)
//----------------------------------------------------------------------------
{
ParseIpParameters(sa_fromP, sa_lenP);
m_status = m_message_storage.readChar();
m_reason = m_message_storage.readChar();
m_cell_id = m_message_storage.readChar();
m_mobile_id = m_message_storage.readChar();
m_radio_bearer_id = m_message_storage.readChar();
m_transaction_id = m_message_storage.readChar();
m_transaction_result = NULL;
cout << "----------------------------------------------------------------------------------------------------------" << endl;
cout << "RRC\t<-------REMOVE DATA RADIO BEARER RESPONSE-------\tRRM STATUS: "<< Message::StatusToString(m_status).c_str() << " REASON: "<< Message::ReasonToString(m_reason).c_str() << endl;
cout << "----------------------------------------------------------------------------------------------------------" << endl;
cout << "cell id = " << m_cell_id << " mobile id = " << m_mobile_id << " radio bearer id = "<< m_radio_bearer_id << " transaction id = "<< m_transaction_id << endl;
if ((msg_lengthP - 6) > 0 ) {
m_transaction_result = new Transaction(m_transaction_id, m_message_storage, msg_lengthP - 6);
cout << m_transaction_result->ToString().c_str() << endl;
}
}
//----------------------------------------------------------------------------
RRM2RRCMessageRemoveRadioAccessBearerResponse::RRM2RRCMessageRemoveRadioAccessBearerResponse(msg_response_status_t statusP,
msg_response_reason_t reasonP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
rb_id_t radio_bearer_idP,
transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_radio_bearer_id = radio_bearer_idP;
m_transaction_id = transaction_idP;
}
//----------------------------------------------------------------------------
RRM2RRCMessageRemoveRadioAccessBearerResponse::RRM2RRCMessageRemoveRadioAccessBearerResponse(msg_response_status_t statusP,
msg_response_reason_t reasonP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
rb_id_t radio_bearer_idP,
transaction_id_t transaction_idP,
Transaction* transactionP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_radio_bearer_id = radio_bearer_idP;
m_transaction_id = transaction_idP;
m_transaction_result = transactionP;
}
//----------------------------------------------------------------------------
void RRM2RRCMessageRemoveRadioAccessBearerResponse::Serialize ()
//----------------------------------------------------------------------------
{
// printf("[RRM][RRM2RRCMessageRemoveRadioAccessBearerResponse] Serialize () status = %d reason = %d cell id = %d mobile id = %d radio bearer id = %d transaction id = %d \n", m_status, m_reason, m_cell_id, m_mobile_id, m_radio_bearer_id, m_transaction_id);
int tx_packet_size = 0;
if (m_transaction_result != NULL) {
tx_packet_size = m_transaction_result->Size();
}
m_message_storage.reset();
m_message_storage.writeChar(Message::MESSAGE_REMOVE_RADIO_ACCESS_BEARER_RESPONSE);
m_message_storage.writeShort(9u+tx_packet_size);
m_message_storage.writeChar(m_status);
m_message_storage.writeChar(m_reason);
m_message_storage.writeChar(m_cell_id);
m_message_storage.writeChar(m_mobile_id);
m_message_storage.writeChar(m_radio_bearer_id);
m_message_storage.writeChar(m_transaction_id);
if (m_transaction_result != NULL) {
unsigned char packet[tx_packet_size];
m_transaction_result->Serialize(&packet[0]);
m_message_storage.writePacket(&packet[0], tx_packet_size);
}
}
//----------------------------------------------------------------------------
void RRM2RRCMessageRemoveRadioAccessBearerResponse::Forward()
//----------------------------------------------------------------------------
{
#ifdef TEST_SCENARIO
TestScenario::notifyRxMessage(this);
#endif
}
//----------------------------------------------------------------------------
RRM2RRCMessageRemoveRadioAccessBearerResponse::~RRM2RRCMessageRemoveRadioAccessBearerResponse()
//----------------------------------------------------------------------------
{
if (m_transaction_result != NULL) {
delete m_transaction_result;
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRM2RRCMESSAGEREMOVERADIOACCESSBEARERRESPONSE_H
# define _RRM2RRCMESSAGEREMOVERADIOACCESSBEARERRESPONSE_H
# include "Message.h"
# include "platform.h"
# include "Transaction.h"
class RRM2RRCMessageRemoveRadioAccessBearerResponse: public Message
{
public:
RRM2RRCMessageRemoveRadioAccessBearerResponse(tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP);
RRM2RRCMessageRemoveRadioAccessBearerResponse(msg_response_status_t ,
msg_response_reason_t ,
cell_id_t ,
mobile_id_t ,
rb_id_t ,
transaction_id_t );
RRM2RRCMessageRemoveRadioAccessBearerResponse(msg_response_status_t ,
msg_response_reason_t ,
cell_id_t ,
mobile_id_t ,
rb_id_t ,
transaction_id_t ,
Transaction* );
~RRM2RRCMessageRemoveRadioAccessBearerResponse ();
void Serialize ();
void Forward();
msg_response_status_t GetStatus() {
return m_status;
};
msg_response_reason_t GetReason() {
return m_reason;
};
cell_id_t GetENodeBId() {
return m_cell_id;
};
mobile_id_t GetMobileId() {
return m_mobile_id;
};
rb_id_t GetRadioBearerId() {
return m_radio_bearer_id;
};
transaction_id_t GetTransactionId() {
return m_transaction_id;
};
protected:
msg_response_status_t m_status;
msg_response_reason_t m_reason;
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
rb_id_t m_radio_bearer_id;
transaction_id_t m_transaction_id;
Transaction* m_transaction_result;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRM2RRCMessageRemoveUserResponse.h"
#include "RadioResources.h"
#include "Exceptions.h"
#include "TestScenario.h"
//----------------------------------------------------------------------------
RRM2RRCMessageRemoveUserResponse::RRM2RRCMessageRemoveUserResponse(tcpip::Storage& in_messageP, msg_length_t msg_lengthP, frame_t msg_frameP, struct sockaddr *sa_fromP, socklen_t sa_lenP):Message(in_messageP)
//----------------------------------------------------------------------------
{
ParseIpParameters(sa_fromP, sa_lenP);
m_status = m_message_storage.readChar();
m_reason = m_message_storage.readChar();
m_cell_id = m_message_storage.readChar();
m_mobile_id = m_message_storage.readChar();
m_transaction_id = m_message_storage.readChar();
m_transaction_result = NULL;
cout << "----------------------------------------------------------------------------------------------------------" << endl;
cout << "RRC\t<-------REMOVE USER RESPONSE-------\tRRM STATUS: " << Message::StatusToString(m_status).c_str() << " REASON: " << Message::ReasonToString(m_reason).c_str() << endl;
cout << "----------------------------------------------------------------------------------------------------------"<< endl;
cout << "cell id = "<< m_cell_id << " mobile id = " << m_mobile_id << " transaction id = " << m_transaction_id << endl;
if ((msg_lengthP - 5) > 0 ) {
m_transaction_result = new Transaction(m_transaction_id, m_message_storage, msg_lengthP - 5);
printf("%s\n",m_transaction_result->ToString().c_str());
}
}
//----------------------------------------------------------------------------
RRM2RRCMessageRemoveUserResponse::RRM2RRCMessageRemoveUserResponse(msg_response_status_t statusP,
msg_response_reason_t reasonP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_transaction_id = transaction_idP;
}
//----------------------------------------------------------------------------
RRM2RRCMessageRemoveUserResponse::RRM2RRCMessageRemoveUserResponse(msg_response_status_t statusP,
msg_response_reason_t reasonP,
cell_id_t cell_idP,
mobile_id_t mobile_idP,
transaction_id_t transaction_idP,
Transaction* transactionP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_transaction_id = transaction_idP;
m_transaction_result = transactionP;
}
//----------------------------------------------------------------------------
void RRM2RRCMessageRemoveUserResponse::Serialize ()
//----------------------------------------------------------------------------
{
// printf("[RRM][RRM2RRCMessageRemoveUserResponse] Serialize () status = %d reason = %d cell id = %d mobile id = %d transaction id = %d \n", m_status, m_reason, m_cell_id, m_mobile_id, m_transaction_id);
int tx_packet_size = 0;
if (m_transaction_result != NULL) {
tx_packet_size = m_transaction_result->Size();
}
m_message_storage.reset();
m_message_storage.writeChar(Message::MESSAGE_REMOVE_USER_RESPONSE);
m_message_storage.writeShort(8u+tx_packet_size);
m_message_storage.writeChar(m_status);
m_message_storage.writeChar(m_reason);
m_message_storage.writeChar(m_cell_id);
m_message_storage.writeChar(m_mobile_id);
m_message_storage.writeChar(m_transaction_id);
if (m_transaction_result != NULL) {
unsigned char packet[tx_packet_size];
m_transaction_result->Serialize(&packet[0]);
m_message_storage.writePacket(&packet[0], tx_packet_size);
}
}
//----------------------------------------------------------------------------
void RRM2RRCMessageRemoveUserResponse::Forward()
//----------------------------------------------------------------------------
{
#ifdef TEST_SCENARIO
TestScenario::notifyRxMessage(this);
#endif
}
//----------------------------------------------------------------------------
RRM2RRCMessageRemoveUserResponse::~RRM2RRCMessageRemoveUserResponse()
//----------------------------------------------------------------------------
{
if (m_transaction_result != NULL) {
delete m_transaction_result;
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRM2RRCMESSAGEREMOVEUSERRESPONSE_H
# define _RRM2RRCMESSAGEREMOVEUSERRESPONSE_H
# include "Message.h"
# include "platform.h"
# include "Transaction.h"
class RRM2RRCMessageRemoveUserResponse: public Message
{
public:
RRM2RRCMessageRemoveUserResponse(tcpip::Storage& in_messageP,
msg_length_t msg_lengthP,
frame_t msg_frameP,
struct sockaddr *sa_fromP,
socklen_t sa_lenP);
RRM2RRCMessageRemoveUserResponse(msg_response_status_t ,
msg_response_reason_t ,
cell_id_t ,
mobile_id_t ,
transaction_id_t );
RRM2RRCMessageRemoveUserResponse(msg_response_status_t ,
msg_response_reason_t ,
cell_id_t ,
mobile_id_t ,
transaction_id_t ,
Transaction* );
~RRM2RRCMessageRemoveUserResponse ();
void Serialize ();
void Forward();
msg_response_status_t GetStatus() {
return m_status;
};
msg_response_reason_t GetReason() {
return m_reason;
};
cell_id_t GetENodeBId() {
return m_cell_id;
};
mobile_id_t GetMobileId() {
return m_mobile_id;
};
transaction_id_t GetTransactionId() {
return m_transaction_id;
};
private:
msg_response_status_t m_status;
msg_response_reason_t m_reason;
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
transaction_id_t m_transaction_id;
Transaction* m_transaction_result;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRM2RRCMessageUserReconfiguration.h"
#include "RadioResources.h"
#include "Exceptions.h"
#include "TestScenario.h"
//----------------------------------------------------------------------------
RRM2RRCMessageUserReconfiguration::RRM2RRCMessageUserReconfiguration(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRM_RRC_Message_t* asn1_messageP)
//----------------------------------------------------------------------------
{
Message();
ParseIpParameters(sa_fromP, sa_lenP);
cout << "RRM2RRCMessageUserReconfiguration(): m_ip_str_src = " << m_ip_str_src.c_str() << endl;
m_asn1_message = asn1_messageP;
m_status = m_asn1_message->message.choice.c1.choice.rrcUserReconfiguration.rrm_Response_Status;
m_reason = m_asn1_message->message.choice.c1.choice.rrcUserReconfiguration.rrm_Response_Reason;
m_transaction_id = m_asn1_message->message.choice.c1.choice.rrcUserReconfiguration.transactionId;
m_cell_id = m_asn1_message->message.choice.c1.choice.rrcUserReconfiguration.e_NodeB_Identity.physCellId;
m_mobile_id = m_asn1_message->message.choice.c1.choice.rrcUserReconfiguration.c_RNTI;
}
//----------------------------------------------------------------------------
RRM2RRCMessageUserReconfiguration::RRM2RRCMessageUserReconfiguration(transaction_id_t transaction_idP, msg_response_status_t statusP, msg_response_reason_t reasonP, RRM_RRC_Message_t* asn1_messageP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_transaction_id = transaction_idP;
m_asn1_message = asn1_messageP;
m_asn1_message->message.choice.c1.choice.rrcUserReconfiguration.transactionId = transaction_idP;
m_asn1_message->message.choice.c1.choice.rrcUserReconfiguration.rrm_Response_Status = statusP;
m_asn1_message->message.choice.c1.choice.rrcUserReconfiguration.rrm_Response_Reason = reasonP;
m_cell_id = m_asn1_message->message.choice.c1.choice.rrcUserReconfiguration.e_NodeB_Identity.physCellId;
m_mobile_id = m_asn1_message->message.choice.c1.choice.rrcUserReconfiguration.c_RNTI;
Serialize();
}
//----------------------------------------------------------------------------
RRM2RRCMessageUserReconfiguration::RRM2RRCMessageUserReconfiguration(msg_response_status_t statusP, msg_response_reason_t reasonP, cell_id_t cell_idP, mobile_id_t mobile_idP, transaction_id_t transaction_idP)
//----------------------------------------------------------------------------
{
Message();
m_status = statusP;
m_reason = reasonP;
m_cell_id = cell_idP;
m_mobile_id = mobile_idP;
m_transaction_id = transaction_idP;
}
//----------------------------------------------------------------------------
void RRM2RRCMessageUserReconfiguration::Forward()
//----------------------------------------------------------------------------
{
#ifdef TEST_SCENARIO
TestScenario::notifyRxMessage(this);
#endif
}
//----------------------------------------------------------------------------
void RRM2RRCMessageUserReconfiguration::Serialize()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
//xer_fprint(stdout, &asn_DEF_RRM_RRC_Message, (void*)m_asn1_message);
char errbuf[256];
size_t errlen = sizeof(errbuf);
int ret = asn_check_constraints(&asn_DEF_RRM_RRC_Message, m_asn1_message, errbuf, &errlen);
if (ret) {
fprintf(stderr, "CONSTRAINT VALIDATION FAILED FOR RRM-RRC Message: %s\n", errbuf);
exit (-1);
}
asn_enc_rval_t enc_rval;
memset(&m_message_serialize_buffer[0], 0, MESSAGE_SERIALIZE_BUFFER_SIZE);
enc_rval = uper_encode_to_buffer(&asn_DEF_RRM_RRC_Message,
(void*)m_asn1_message,
&m_message_serialize_buffer[0],
MESSAGE_SERIALIZE_BUFFER_SIZE);
printf("[RRM][RRM2RRCMessageUserReconfiguration] asn_DEF_RRM_RRC_Message Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
m_msg_length = (enc_rval.encoded+7)/8;
if (enc_rval.encoded==-1) {
cerr << "[RRM][RRM2RRCMessageUserReconfiguration] ASN1 : asn_DEF_RRM_RRC_Message encoding FAILED, EXITING" << endl;
cerr << "[RRM][RRM2RRCMessageUserReconfiguration] Cannot encode "<< enc_rval.failed_type->name <<" " << strerror(errno) << endl;
throw asn1_encoding_error();
}
//xer_fprint(stdout, &asn_DEF_RRM_RRC_Message, (void*)m_asn1_message);
}
}
//----------------------------------------------------------------------------
RRM2RRCMessageUserReconfiguration::~RRM2RRCMessageUserReconfiguration()
//----------------------------------------------------------------------------
{
if (m_asn1_message != NULL) {
cout << "[RRM][RRM2RRCMessageUserReconfiguration::~RRM2RRCMessageUserReconfiguration()] free asn1_message start" << endl;
ASN_STRUCT_FREE( asn_DEF_RRM_RRC_Message, m_asn1_message);
m_asn1_message = NULL;
cout << "[RRM][RRM2RRCMessageUserReconfiguration::~RRM2RRCMessageUserReconfiguration()] free asn1_message end " << endl;
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRM2RRCMESSAGEUSERRECONFIGURATION_H
# define _RRM2RRCMESSAGEUSERRECONFIGURATION_H
# include "RRM-RRC-Message.h"
# include "Message.h"
# include "platform.h"
class RRM2RRCMessageUserReconfiguration: public Message
{
public:
RRM2RRCMessageUserReconfiguration(struct sockaddr *sa_fromP, socklen_t sa_lenP, RRM_RRC_Message_t* asn1_messageP);
RRM2RRCMessageUserReconfiguration(transaction_id_t transaction_idP, msg_response_status_t statusP, msg_response_reason_t reasonP, RRM_RRC_Message_t* asn1_messageP);
RRM2RRCMessageUserReconfiguration(msg_response_status_t statusP, msg_response_reason_t reasonP, cell_id_t cell_idP, mobile_id_t mobile_idP, transaction_id_t transaction_idP);
~RRM2RRCMessageUserReconfiguration ();
void Serialize ();
void Forward();
msg_response_status_t GetStatus() {
return m_status;
};
msg_response_reason_t GetReason() {
return m_reason;
};
const cell_id_t GetENodeBId() {
return m_cell_id;
}
const mobile_id_t GetMobileId() {
return m_mobile_id;
};
const transaction_id_t GetTransactionId() {
return m_transaction_id;
};
protected:
msg_response_status_t m_status;
msg_response_reason_t m_reason;
cell_id_t m_cell_id;
mobile_id_t m_mobile_id;
transaction_id_t m_transaction_id;
RRM_RRC_Message_t* m_asn1_message;
};
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdio.h>
#include "RRMMessageHandler.h"
RRMMessageHandler* RRMMessageHandler::s_instance = 0;
//----------------------------------------------------------------------------
void* RRMMessageHandlerThreadLoop(void *arg)
//----------------------------------------------------------------------------
{
return RRMMessageHandler::Instance()->ThreadLoop(arg);
}
//-----------------------------------------------------------------
RRMMessageHandler* RRMMessageHandler::Instance()
//-----------------------------------------------------------------
{
if (RRMMessageHandler::s_instance == 0) {
RRMMessageHandler::s_instance = new RRMMessageHandler;
}
return s_instance;
}
//-----------------------------------------------------------------
RRMMessageHandler::RRMMessageHandler()
//-----------------------------------------------------------------
{
m_socket_handler = new SocketHandler();
m_log = new StdoutLog() ;
m_socket_handler->RegStdLog(m_log);
m_socket = new RRMUdpSocket(*m_socket_handler, 16384, true);
port_t port = 33334;
Ipv6Address ad("0::1",port);
if (m_socket->Bind(ad, 1) == -1) {
printf("Exiting...\n");
exit(-1);
} else {
printf("Ready to receive on port %d\n",port);
}
m_socket_handler->Add(m_socket);
if (pthread_create(&m_thread, NULL, RRMMessageHandlerThreadLoop, (void *) NULL) != 0) {
fprintf(stderr, "\nRRMMessageHandler::RRMMessageHandler() ERROR pthread_create...\n");
} else {
pthread_setname_np( m_thread, "RRMMsgHandler" );
}
}
//----------------------------------------------------------------------------
void* RRMMessageHandler::ThreadLoop(void *arg)
//----------------------------------------------------------------------------
{
m_socket_handler->Select(1,0);
while (m_socket_handler->GetCount() && !*m_quit) {
m_socket_handler->Select(1,0);
}
fprintf(stderr, "\nRRMMessageHandler::ThreadLoop Exiting...\n");
return NULL;
}
//----------------------------------------------------------------------------
void RRMMessageHandler::Join(bool *quitP)
//----------------------------------------------------------------------------
{
m_quit = quitP;
pthread_join(m_thread, NULL);
fprintf(stderr, "\nRRMMessageHandler::Join Done\n");
}
//----------------------------------------------------------------------------
void RRMMessageHandler::NotifyRxData(const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP)
//----------------------------------------------------------------------------
{
Message* message;
do {
fprintf(stderr, "RRMMessageHandler::notifyRxData GOT MESSAGE %d bytes\n", size_dataP);
message = Message::DeserializeRRMMessage(in_bufferP, size_dataP, sa_fromP, sa_lenP);
if (message != NULL) {
message->Forward();
delete message;
message = NULL;
} else {
// TO DO
}
} while (message != NULL);
}
//-----------------------------------------------------------------
void RRMMessageHandler::Send2Peer(Message* messageP)
//-----------------------------------------------------------------
{
Send2Peer(messageP->GetSrcAddress(), messageP->GetSrcPort(), messageP->GetSerializedMessageBuffer(), messageP->GetSerializedMessageSize());
delete messageP;
}
//-----------------------------------------------------------------
void RRMMessageHandler::Send2Peer(std::string ip_dest_strP, int port_destP, const char *in_bufferP, size_t size_dataP)
//-----------------------------------------------------------------
{
m_socket->SendToBuf(ip_dest_strP, port_destP, in_bufferP, size_dataP, 0);
}
//-----------------------------------------------------------------
RRMMessageHandler::~RRMMessageHandler()
//-----------------------------------------------------------------
{
if (m_socket_handler != 0)
{
delete m_socket_handler;
}
if (m_log != 0)
{
delete m_log;
}
// m_socket should be closed and deleted by m_socket_handler
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRMMESSAGEHANDLER_H
# define _RRMMESSAGEHANDLER_H
# include <pthread.h>
# include "StdoutLog.h"
# include "SocketHandlerEp.h"
# include "RRMUdpSocket.h"
# include "ListenSocket.h"
# include "Message.h"
# include "platform.h"
class RRMMessageHandler
{
public:
static RRMMessageHandler *Instance ();
void NotifyRxData (const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP);
void Send2Peer (Message *);
void Send2Peer(std::string ip_dest_strP, int port_destP, const char *in_bufferP, size_t size_dataP);
void* ThreadLoop(void *arg);
void Join(bool *quitP);
~RRMMessageHandler ();
private:
RRMMessageHandler ();
SocketHandler *m_socket_handler;
RRMUdpSocket *m_socket;
StdoutLog *m_log;
pthread_t m_thread;
bool *m_quit;
static RRMMessageHandler *s_instance;
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdio.h>
//----------------------------------------------------------------------------
#include "RRMUdpSocket.h"
#include "RRMMessageHandler.h"
//----------------------------------------------------------------------------
RRMUdpSocket::RRMUdpSocket(ISocketHandler& h,int ibufsz, bool ipv6):UdpSocket(h, ibufsz, ipv6)
//----------------------------------------------------------------------------
{
}
//----------------------------------------------------------------------------
void RRMUdpSocket::OnRawData(const char *in_bufferP,size_t size_dataP,struct sockaddr *sa_fromP,socklen_t sa_lenP)
//----------------------------------------------------------------------------
{
RRMMessageHandler::Instance()->NotifyRxData(in_bufferP, size_dataP, sa_fromP, sa_lenP);
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRMUDPSOCKET_H
# define _RRMUDPSOCKET_H
# include "UdpSocket.h"
class RRMUdpSocket : public UdpSocket
{
public:
RRMUdpSocket(ISocketHandler&,int ibufsz, bool ipv6);
void OnRawData(const char *,size_t,struct sockaddr *,socklen_t);
};
#endif // _RRMUDPSOCKET_H
This source diff could not be displayed because it is too large. You can view the blob instead.
EUTRA-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
HandoverCommand ::= SEQUENCE {
criticalExtensions CHOICE {
c1 CHOICE{
handoverCommand-r8 HandoverCommand-r8-IEs,
spare7 NULL,
spare6 NULL, spare5 NULL, spare4 NULL,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
HandoverCommand-r8-IEs ::= SEQUENCE {
handoverCommandMessage OCTET STRING (CONTAINING DL-DCCH-Message),
nonCriticalExtension SEQUENCE {} OPTIONAL
}
HandoverPreparationInformation ::= SEQUENCE {
criticalExtensions CHOICE {
c1 CHOICE{
handoverPreparationInformation-r8 HandoverPreparationInformation-r8-IEs,
spare7 NULL,
spare6 NULL, spare5 NULL, spare4 NULL,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
HandoverPreparationInformation-r8-IEs ::= SEQUENCE {
ue-RadioAccessCapabilityInfo UE-CapabilityRAT-ContainerList,
as-Config AS-Config OPTIONAL, -- Cond HO
rrm-Config RRM-Config OPTIONAL,
as-Context AS-Context OPTIONAL, -- Cond HO
nonCriticalExtension SEQUENCE {} OPTIONAL
}
UERadioAccessCapabilityInformation ::= SEQUENCE {
criticalExtensions CHOICE {
c1 CHOICE{
ueRadioAccessCapabilityInformation-r8
UERadioAccessCapabilityInformation-r8-IEs,
spare7 NULL,
spare6 NULL, spare5 NULL, spare4 NULL,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
UERadioAccessCapabilityInformation-r8-IEs ::= SEQUENCE {
ue-RadioAccessCapabilityInfo OCTET STRING (CONTAINING UECapabilityInformation),
nonCriticalExtension SEQUENCE {} OPTIONAL
}
AS-Config ::= SEQUENCE {
sourceMeasConfig MeasConfig,
sourceRadioResourceConfig RadioResourceConfigDedicated,
sourceSecurityAlgorithmConfig SecurityAlgorithmConfig,
sourceUE-Identity C-RNTI,
sourceMasterInformationBlock MasterInformationBlock,
sourceSystemInformationBlockType1 SystemInformationBlockType1,
sourceSystemInformationBlockType2 SystemInformationBlockType2,
antennaInfoCommon AntennaInfoCommon,
sourceDl-CarrierFreq ARFCN-ValueEUTRA,
...
}
AS-Context ::= SEQUENCE {
reestablishmentInfo ReestablishmentInfo OPTIONAL -- Cond HO
}
ReestablishmentInfo ::= SEQUENCE {
sourcePhysCellId PhysCellId,
targetCellShortMAC-I ShortMAC-I,
additionalReestabInfoList AdditionalReestabInfoList OPTIONAL,
...
}
AdditionalReestabInfoList ::= SEQUENCE ( SIZE (1..maxReestabInfo) ) OF AdditionalReestabInfo
AdditionalReestabInfo ::= SEQUENCE{
cellIdentity CellIdentity,
key-eNodeB-Star Key-eNodeB-Star,
shortMAC-I ShortMAC-I
}
Key-eNodeB-Star ::= BIT STRING (SIZE (256))
RRM-Config ::= SEQUENCE {
ue-InactiveTime ENUMERATED {
s1, s2, s3, s5, s7, s10, s15, s20,
s25, s30, s40, s50, min1, min1s20c, min1s40,
min2, min2s30, min3, min3s30, min4, min5, min6,
min7, min8, min9, min10, min12, min14, min17, min20,
min24, min28, min33, min38, min44, min50, hr1,
hr1min30, hr2, hr2min30, hr3, hr3min30, hr4, hr5, hr6,
hr8, hr10, hr13, hr16, hr20, day1, day1hr12, day2,
day2hr12, day3, day4, day5, day7, day10, day14, day19,
day24, day30, dayMoreThan30} OPTIONAL,
...
}
maxReestabInfo INTEGER ::= 32 -- Maximum number of KeNB* and shortMAC-I forwarded
-- at handover for re-establishment preparation
END
EUTRA-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
BCCH-BCH-Message ::= SEQUENCE {
message BCCH-BCH-MessageType
}
BCCH-BCH-MessageType ::= MasterInformationBlock
BCCH-DL-SCH-Message ::= SEQUENCE {
message BCCH-DL-SCH-MessageType
}
BCCH-DL-SCH-MessageType ::= CHOICE {
c1 CHOICE {
systemInformation SystemInformation,
systemInformationBlockType1 SystemInformationBlockType1
},
messageClassExtension SEQUENCE {}
}
PCCH-Message ::= SEQUENCE {
message PCCH-MessageType
}
PCCH-MessageType ::= CHOICE {
c1 CHOICE {
paging Paging
},
messageClassExtension SEQUENCE {}
}
DL-CCCH-Message ::= SEQUENCE {
message DL-CCCH-MessageType
}
DL-CCCH-MessageType ::= CHOICE {
c1 CHOICE {
rrcConnectionReestablishment RRCConnectionReestablishment,
rrcConnectionReestablishmentReject RRCConnectionReestablishmentReject,
rrcConnectionReject RRCConnectionReject,
rrcConnectionSetup RRCConnectionSetup
},
messageClassExtension SEQUENCE {}
}
DL-DCCH-Message ::= SEQUENCE {
message DL-DCCH-MessageType
}
DL-DCCH-MessageType ::= CHOICE {
c1 CHOICE {
csfbParametersResponseCDMA2000 CSFBParametersResponseCDMA2000,
dlInformationTransfer DLInformationTransfer,
handoverFromEUTRAPreparationRequest HandoverFromEUTRAPreparationRequest,
mobilityFromEUTRACommand MobilityFromEUTRACommand,
rrcConnectionReconfiguration RRCConnectionReconfiguration,
rrcConnectionRelease RRCConnectionRelease,
securityModeCommand SecurityModeCommand,
ueCapabilityEnquiry UECapabilityEnquiry,
counterCheck CounterCheck,
spare7 NULL,
spare6 NULL, spare5 NULL, spare4 NULL,
spare3 NULL, spare2 NULL, spare1 NULL
},
messageClassExtension SEQUENCE {}
}
UL-CCCH-Message ::= SEQUENCE {
message UL-CCCH-MessageType
}
UL-CCCH-MessageType ::= CHOICE {
c1 CHOICE {
rrcConnectionReestablishmentRequest RRCConnectionReestablishmentRequest,
rrcConnectionRequest RRCConnectionRequest
},
messageClassExtension SEQUENCE {}
}
UL-DCCH-Message ::= SEQUENCE {
message UL-DCCH-MessageType
}
UL-DCCH-MessageType ::= CHOICE {
c1 CHOICE {
csfbParametersRequestCDMA2000 CSFBParametersRequestCDMA2000,
measurementReport MeasurementReport,
rrcConnectionReconfigurationComplete RRCConnectionReconfigurationComplete,
rrcConnectionReestablishmentComplete RRCConnectionReestablishmentComplete,
rrcConnectionSetupComplete RRCConnectionSetupComplete,
securityModeComplete SecurityModeComplete,
securityModeFailure SecurityModeFailure,
ueCapabilityInformation UECapabilityInformation,
ulHandoverPreparationTransfer ULHandoverPreparationTransfer,
ulInformationTransfer ULInformationTransfer,
counterCheckResponse CounterCheckResponse,
spare5 NULL, spare4 NULL,
spare3 NULL, spare2 NULL, spare1 NULL
},
messageClassExtension SEQUENCE {}
}
CounterCheck ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE {
counterCheck-r8 CounterCheck-r8-IEs,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
CounterCheck-r8-IEs ::= SEQUENCE {
drb-CountMSB-InfoList DRB-CountMSB-InfoList,
nonCriticalExtension SEQUENCE {} OPTIONAL --Need OP
}
DRB-CountMSB-InfoList::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-CountMSB-Info
DRB-CountMSB-Info ::= SEQUENCE {
drb-Identity DRB-Identity,
countMSB-Uplink INTEGER(0..33554431),
countMSB-Downlink INTEGER(0..33554431)
}
CounterCheckResponse ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
counterCheckResponse-r8 CounterCheckResponse-r8-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
CounterCheckResponse-r8-IEs ::= SEQUENCE {
drb-CountInfoList DRB-CountInfoList,
nonCriticalExtension SEQUENCE {} OPTIONAL
}
DRB-CountInfoList ::= SEQUENCE (SIZE (0..maxDRB)) OF DRB-CountInfo
DRB-CountInfo ::= SEQUENCE {
drb-Identity DRB-Identity,
count-Uplink INTEGER(0..4294967295),
count-Downlink INTEGER(0..4294967295)
}
CSFBParametersRequestCDMA2000 ::= SEQUENCE {
criticalExtensions CHOICE {
csfbParametersRequestCDMA2000-r8 CSFBParametersRequestCDMA2000-r8-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
CSFBParametersRequestCDMA2000-r8-IEs ::= SEQUENCE {
nonCriticalExtension SEQUENCE {} OPTIONAL
}
CSFBParametersResponseCDMA2000 ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
csfbParametersResponseCDMA2000-r8 CSFBParametersResponseCDMA2000-r8-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
CSFBParametersResponseCDMA2000-r8-IEs ::= SEQUENCE {
rand RAND-CDMA2000,
mobilityParameters MobilityParametersCDMA2000,
nonCriticalExtension SEQUENCE {} OPTIONAL --Need OP
}
DLInformationTransfer ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE {
dlInformationTransfer-r8 DLInformationTransfer-r8-IEs,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
DLInformationTransfer-r8-IEs ::= SEQUENCE {
dedicatedInfoType CHOICE {
dedicatedInfoNAS DedicatedInfoNAS,
dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000,
dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000
},
nonCriticalExtension SEQUENCE {} OPTIONAL --Need OP
}
HandoverFromEUTRAPreparationRequest ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE {
handoverFromEUTRAPreparationRequest-r8
HandoverFromEUTRAPreparationRequest-r8-IEs,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
HandoverFromEUTRAPreparationRequest-r8-IEs ::= SEQUENCE {
cdma2000-Type CDMA2000-Type,
rand RAND-CDMA2000 OPTIONAL, -- Cond cdma2000-Type
mobilityParameters MobilityParametersCDMA2000 OPTIONAL, -- Cond cdma2000-Type
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
MasterInformationBlock ::= SEQUENCE {
dl-Bandwidth ENUMERATED {
n6, n15, n25, n50, n75, n100},
phich-Config PHICH-Config,
systemFrameNumber BIT STRING (SIZE (8)),
spare BIT STRING (SIZE (10))
}
MeasurementReport ::= SEQUENCE {
criticalExtensions CHOICE {
c1 CHOICE{
measurementReport-r8 MeasurementReport-r8-IEs,
spare7 NULL,
spare6 NULL, spare5 NULL, spare4 NULL,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
MeasurementReport-r8-IEs ::= SEQUENCE {
measResults MeasResults,
nonCriticalExtension SEQUENCE {} OPTIONAL
}
MobilityFromEUTRACommand ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE{
mobilityFromEUTRACommand-r8 MobilityFromEUTRACommand-r8-IEs,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
MobilityFromEUTRACommand-r8-IEs ::= SEQUENCE {
cs-FallbackIndicator BOOLEAN,
purpose CHOICE{
handover Handover,
cellChangeOrder CellChangeOrder
},
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
Handover ::= SEQUENCE {
targetRAT-Type ENUMERATED {
utra, geran, cdma2000-1XRTT, cdma2000-HRPD,
spare4, spare3, spare2, spare1, ...},
targetRAT-MessageContainer OCTET STRING,
nas-SecurityParamFromEUTRA OCTET STRING (SIZE (1)) OPTIONAL, -- Cond UTRAGERAN
systemInformation SI-OrPSI-GERAN OPTIONAL -- Cond PSHO
}
CellChangeOrder ::= SEQUENCE {
t304 ENUMERATED {
ms100, ms200, ms500, ms1000,
ms2000, ms4000, ms8000, spare1},
targetRAT-Type CHOICE {
geran SEQUENCE {
physCellId PhysCellIdGERAN,
carrierFreq CarrierFreqGERAN,
networkControlOrder BIT STRING (SIZE (2)) OPTIONAL, -- Need OP
systemInformation SI-OrPSI-GERAN OPTIONAL -- Need OP
},
...
}
}
SI-OrPSI-GERAN ::= CHOICE {
si SystemInfoListGERAN,
psi SystemInfoListGERAN
}
SystemInfoListGERAN ::= SEQUENCE (SIZE (1..maxGERAN-SI)) OF
OCTET STRING (SIZE (1..23))
Paging ::= SEQUENCE {
pagingRecordList PagingRecordList OPTIONAL, -- Need ON
systemInfoModification ENUMERATED {true} OPTIONAL, -- Need ON
etws-Indication ENUMERATED {true} OPTIONAL, -- Need ON
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
PagingRecordList ::= SEQUENCE (SIZE (1..maxPageRec)) OF PagingRecord
PagingRecord ::= SEQUENCE {
ue-Identity PagingUE-Identity,
cn-Domain ENUMERATED {ps, cs},
...
}
PagingUE-Identity ::= CHOICE {
s-TMSI S-TMSI,
imsi IMSI,
...
}
IMSI ::= SEQUENCE (SIZE (6..21)) OF IMSI-Digit
IMSI-Digit::= INTEGER (0..9)
RRCConnectionReconfiguration ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE{
rrcConnectionReconfiguration-r8 RRCConnectionReconfiguration-r8-IEs,
spare7 NULL,
spare6 NULL, spare5 NULL, spare4 NULL,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionReconfiguration-r8-IEs ::= SEQUENCE {
measConfig MeasConfig OPTIONAL, -- Need ON
mobilityControlInfo MobilityControlInfo OPTIONAL, -- Cond HO
dedicatedInfoNASList SEQUENCE (SIZE(1..maxDRB)) OF
DedicatedInfoNAS OPTIONAL, -- Cond nonHO
radioResourceConfigDedicated RadioResourceConfigDedicated OPTIONAL, -- Cond HO-toEUTRA
securityConfigHO SecurityConfigHO OPTIONAL, -- Cond HO
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
SecurityConfigHO ::= SEQUENCE {
handoverType CHOICE {
intraLTE SEQUENCE {
securityAlgorithmConfig SecurityAlgorithmConfig OPTIONAL, -- Need OP
keyChangeIndicator BOOLEAN,
nextHopChainingCount NextHopChainingCount
},
interRAT SEQUENCE {
securityAlgorithmConfig SecurityAlgorithmConfig,
nas-SecurityParamToEUTRA OCTET STRING (SIZE(6))
}
},
...
}
RRCConnectionReconfigurationComplete ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
rrcConnectionReconfigurationComplete-r8
RRCConnectionReconfigurationComplete-r8-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionReconfigurationComplete-r8-IEs ::= SEQUENCE {
nonCriticalExtension SEQUENCE {} OPTIONAL
}
RRCConnectionReestablishment ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE{
rrcConnectionReestablishment-r8 RRCConnectionReestablishment-r8-IEs,
spare7 NULL,
spare6 NULL, spare5 NULL, spare4 NULL,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionReestablishment-r8-IEs ::= SEQUENCE {
radioResourceConfigDedicated RadioResourceConfigDedicated,
nextHopChainingCount NextHopChainingCount,
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
RRCConnectionReestablishmentComplete ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
rrcConnectionReestablishmentComplete-r8
RRCConnectionReestablishmentComplete-r8-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionReestablishmentComplete-r8-IEs ::= SEQUENCE {
nonCriticalExtension SEQUENCE {} OPTIONAL
}
RRCConnectionReestablishmentReject ::= SEQUENCE {
criticalExtensions CHOICE {
rrcConnectionReestablishmentReject-r8
RRCConnectionReestablishmentReject-r8-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionReestablishmentReject-r8-IEs ::= SEQUENCE {
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
RRCConnectionReestablishmentRequest ::= SEQUENCE {
criticalExtensions CHOICE {
rrcConnectionReestablishmentRequest-r8
RRCConnectionReestablishmentRequest-r8-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionReestablishmentRequest-r8-IEs ::= SEQUENCE {
ue-Identity ReestabUE-Identity,
reestablishmentCause ReestablishmentCause,
spare BIT STRING (SIZE (2))
}
ReestabUE-Identity ::= SEQUENCE {
c-RNTI C-RNTI,
physCellId PhysCellId,
shortMAC-I ShortMAC-I
}
ReestablishmentCause ::= ENUMERATED {
reconfigurationFailure, handoverFailure,
otherFailure, spare1}
RRCConnectionReject ::= SEQUENCE {
criticalExtensions CHOICE {
c1 CHOICE {
rrcConnectionReject-r8 RRCConnectionReject-r8-IEs,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionReject-r8-IEs ::= SEQUENCE {
waitTime INTEGER (1..16),
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
RRCConnectionRelease ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE {
rrcConnectionRelease-r8 RRCConnectionRelease-r8-IEs,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionRelease-r8-IEs ::= SEQUENCE {
releaseCause ReleaseCause,
redirectedCarrierInfo RedirectedCarrierInfo OPTIONAL, -- Need ON
idleModeMobilityControlInfo IdleModeMobilityControlInfo OPTIONAL, -- Need OP
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
ReleaseCause ::= ENUMERATED {loadBalancingTAUrequired,
other,spare2, spare1 }
RedirectedCarrierInfo ::= CHOICE {
eutra ARFCN-ValueEUTRA,
geran CarrierFreqsGERAN,
utra-FDD ARFCN-ValueUTRA,
utra-TDD ARFCN-ValueUTRA,
cdma2000-HRPD CarrierFreqCDMA2000,
cdma2000-1xRTT CarrierFreqCDMA2000,
...
}
IdleModeMobilityControlInfo ::= SEQUENCE {
freqPriorityListEUTRA FreqPriorityListEUTRA OPTIONAL, -- Need ON
freqPriorityListGERAN FreqsPriorityListGERAN OPTIONAL, -- Need ON
freqPriorityListUTRA-FDD FreqPriorityListUTRA-FDD OPTIONAL, -- Need ON
freqPriorityListUTRA-TDD FreqPriorityListUTRA-TDD OPTIONAL, -- Need ON
bandClassPriorityListHRPD BandClassPriorityListHRPD OPTIONAL, -- Need ON
bandClassPriorityList1XRTT BandClassPriorityList1XRTT OPTIONAL, -- Need ON
t320 ENUMERATED {
min5, min10, min20, min30, min60, min120, min180,
spare1} OPTIONAL, -- Need OR
...
}
FreqPriorityListEUTRA ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA
FreqPriorityEUTRA ::= SEQUENCE {
carrierFreq ARFCN-ValueEUTRA,
cellReselectionPriority CellReselectionPriority
}
FreqsPriorityListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF FreqsPriorityGERAN
FreqsPriorityGERAN ::= SEQUENCE {
carrierFreqs CarrierFreqsGERAN,
cellReselectionPriority CellReselectionPriority
}
FreqPriorityListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF FreqPriorityUTRA-FDD
FreqPriorityUTRA-FDD ::= SEQUENCE {
carrierFreq ARFCN-ValueUTRA,
cellReselectionPriority CellReselectionPriority
}
FreqPriorityListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF FreqPriorityUTRA-TDD
FreqPriorityUTRA-TDD ::= SEQUENCE {
carrierFreq ARFCN-ValueUTRA,
cellReselectionPriority CellReselectionPriority
}
BandClassPriorityListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriorityHRPD
BandClassPriorityHRPD ::= SEQUENCE {
bandClass BandclassCDMA2000,
cellReselectionPriority CellReselectionPriority
}
BandClassPriorityList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriority1XRTT
BandClassPriority1XRTT ::= SEQUENCE {
bandClass BandclassCDMA2000,
cellReselectionPriority CellReselectionPriority
}
RRCConnectionRequest ::= SEQUENCE {
criticalExtensions CHOICE {
rrcConnectionRequest-r8 RRCConnectionRequest-r8-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionRequest-r8-IEs ::= SEQUENCE {
ue-Identity InitialUE-Identity,
establishmentCause EstablishmentCause,
spare BIT STRING (SIZE (1))
}
InitialUE-Identity ::= CHOICE {
s-TMSI S-TMSI,
randomValue BIT STRING (SIZE (40))
}
EstablishmentCause ::= ENUMERATED {
emergency, highPriorityAccess, mt-Access, mo-Signalling,
mo-Data, spare3, spare2, spare1}
RRCConnectionSetup ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE {
rrcConnectionSetup-r8 RRCConnectionSetup-r8-IEs,
spare7 NULL,
spare6 NULL, spare5 NULL, spare4 NULL,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionSetup-r8-IEs ::= SEQUENCE {
radioResourceConfigDedicated RadioResourceConfigDedicated,
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
RRCConnectionSetupComplete ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE{
rrcConnectionSetupComplete-r8 RRCConnectionSetupComplete-r8-IEs,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionSetupComplete-r8-IEs ::= SEQUENCE {
selectedPLMN-Identity INTEGER (1..6),
registeredMME RegisteredMME OPTIONAL,
dedicatedInfoNAS DedicatedInfoNAS,
nonCriticalExtension SEQUENCE {} OPTIONAL
}
RegisteredMME ::= SEQUENCE {
plmn-Identity PLMN-Identity OPTIONAL,
mmegi BIT STRING (SIZE (16)),
mmec MMEC
}
SecurityModeCommand ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE{
securityModeCommand-r8 SecurityModeCommand-r8-IEs,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
SecurityModeCommand-r8-IEs ::= SEQUENCE {
securityConfigSMC SecurityConfigSMC,
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
SecurityConfigSMC ::= SEQUENCE {
securityAlgorithmConfig SecurityAlgorithmConfig,
...
}
SecurityModeComplete ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
securityModeComplete-r8 SecurityModeComplete-r8-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
SecurityModeComplete-r8-IEs ::= SEQUENCE {
nonCriticalExtension SEQUENCE {} OPTIONAL
}
SecurityModeFailure ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
securityModeFailure-r8 SecurityModeFailure-r8-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
SecurityModeFailure-r8-IEs ::= SEQUENCE {
nonCriticalExtension SEQUENCE {} OPTIONAL
}
SystemInformation ::= SEQUENCE {
criticalExtensions CHOICE {
systemInformation-r8 SystemInformation-r8-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
SystemInformation-r8-IEs ::= SEQUENCE {
sib-TypeAndInfo SEQUENCE (SIZE (1..maxSIB)) OF CHOICE {
sib2 SystemInformationBlockType2,
sib3 SystemInformationBlockType3,
sib4 SystemInformationBlockType4,
sib5 SystemInformationBlockType5,
sib6 SystemInformationBlockType6,
sib7 SystemInformationBlockType7,
sib8 SystemInformationBlockType8,
sib9 SystemInformationBlockType9,
sib10 SystemInformationBlockType10,
sib11 SystemInformationBlockType11,
...
},
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
SystemInformationBlockType1 ::= SEQUENCE {
cellAccessRelatedInfo SEQUENCE {
plmn-IdentityList PLMN-IdentityList,
trackingAreaCode TrackingAreaCode,
cellIdentity CellIdentity,
cellBarred ENUMERATED {barred, notBarred},
intraFreqReselection ENUMERATED {allowed, notAllowed},
csg-Indication BOOLEAN,
csg-Identity BIT STRING (SIZE (27)) OPTIONAL -- Need OR
},
cellSelectionInfo SEQUENCE {
q-RxLevMin Q-RxLevMin,
q-RxLevMinOffset INTEGER (1..8) OPTIONAL -- Need OP
},
p-Max P-Max OPTIONAL, -- Need OP
freqBandIndicator INTEGER (1..64),
schedulingInfoList SchedulingInfoList,
tdd-Config TDD-Config OPTIONAL, -- Cond TDD
si-WindowLength ENUMERATED {
ms1, ms2, ms5, ms10, ms15, ms20,
ms40},
systemInfoValueTag INTEGER (0..31),
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
PLMN-IdentityList ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo
PLMN-IdentityInfo ::= SEQUENCE {
plmn-Identity PLMN-Identity,
cellReservedForOperatorUse ENUMERATED {reserved, notReserved}
}
SchedulingInfoList ::= SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo
SchedulingInfo ::= SEQUENCE {
si-Periodicity ENUMERATED {
rf8, rf16, rf32, rf64, rf128, rf256, rf512},
sib-MappingInfo SIB-MappingInfo
}
SIB-MappingInfo ::= SEQUENCE (SIZE (0..maxSIB-1)) OF SIB-Type
SIB-Type ::= ENUMERATED {
sibType3, sibType4, sibType5, sibType6,
sibType7, sibType8, sibType9, sibType10,
sibType11, spare7, spare6, spare5,
spare4, spare3, spare2, spare1, ...}
UECapabilityEnquiry ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE {
ueCapabilityEnquiry-r8 UECapabilityEnquiry-r8-IEs,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
UECapabilityEnquiry-r8-IEs ::= SEQUENCE {
ue-CapabilityRequest UE-CapabilityRequest,
nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP
}
UE-CapabilityRequest ::= SEQUENCE (SIZE (1..maxRAT-Capabilities)) OF RAT-Type
UECapabilityInformation ::= SEQUENCE {
rrc-TransactionIdentifier RRC-TransactionIdentifier,
criticalExtensions CHOICE {
c1 CHOICE{
ueCapabilityInformation-r8 UECapabilityInformation-r8-IEs,
spare7 NULL,
spare6 NULL, spare5 NULL, spare4 NULL,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
UECapabilityInformation-r8-IEs ::= SEQUENCE {
ue-CapabilityRAT-ContainerList UE-CapabilityRAT-ContainerList,
nonCriticalExtension SEQUENCE {} OPTIONAL
}
ULHandoverPreparationTransfer ::= SEQUENCE {
criticalExtensions CHOICE {
c1 CHOICE {
ulHandoverPreparationTransfer-r8 ULHandoverPreparationTransfer-r8-IEs,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
ULHandoverPreparationTransfer-r8-IEs ::= SEQUENCE {
cdma2000-Type CDMA2000-Type,
meid BIT STRING (SIZE (56)) OPTIONAL,
dedicatedInfo DedicatedInfoCDMA2000,
nonCriticalExtension SEQUENCE {} OPTIONAL
}
ULInformationTransfer ::= SEQUENCE {
criticalExtensions CHOICE {
c1 CHOICE {
ulInformationTransfer-r8 ULInformationTransfer-r8-IEs,
spare3 NULL, spare2 NULL, spare1 NULL
},
criticalExtensionsFuture SEQUENCE {}
}
}
ULInformationTransfer-r8-IEs ::= SEQUENCE {
dedicatedInfoType CHOICE {
dedicatedInfoNAS DedicatedInfoNAS,
dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000,
dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000
},
nonCriticalExtension SEQUENCE {} OPTIONAL
}
SystemInformationBlockType2 ::= SEQUENCE {
ac-BarringInfo SEQUENCE {
ac-BarringForEmergency BOOLEAN,
ac-BarringForMO-Signalling AC-BarringConfig OPTIONAL, -- Need OP
ac-BarringForMO-Data AC-BarringConfig OPTIONAL -- Need OP
} OPTIONAL, -- Need OP
radioResourceConfigCommon RadioResourceConfigCommonSIB,
ue-TimersAndConstants UE-TimersAndConstants,
freqInfo SEQUENCE {
ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL, -- Need OP
ul-Bandwidth ENUMERATED {n6, n15, n25, n50, n75, n100}
OPTIONAL, -- Need OP
additionalSpectrumEmission AdditionalSpectrumEmission
},
mbsfn-SubframeConfigList MBSFN-SubframeConfigList OPTIONAL, -- Need OR
timeAlignmentTimerCommon TimeAlignmentTimer,
...
}
AC-BarringConfig ::= SEQUENCE {
ac-BarringFactor ENUMERATED {
p00, p05, p10, p15, p20, p25, p30, p40,
p50, p60, p70, p75, p80, p85, p90, p95},
ac-BarringTime ENUMERATED {s4, s8, s16, s32, s64, s128, s256, s512},
ac-BarringForSpecialAC BIT STRING (SIZE(5))
}
MBSFN-SubframeConfigList ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig
MBSFN-SubframeConfig ::= SEQUENCE {
radioframeAllocationPeriod ENUMERATED {n1, n2, n4, n8, n16, n32},
radioframeAllocationOffset INTEGER (0..7),
subframeAllocation CHOICE {
oneFrame BIT STRING (SIZE(6)),
fourFrames BIT STRING (SIZE(24))
}
}
SystemInformationBlockType3 ::= SEQUENCE {
cellReselectionInfoCommon SEQUENCE {
q-Hyst ENUMERATED {
dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10,
dB12, dB14, dB16, dB18, dB20, dB22, dB24},
speedStateReselectionPars SEQUENCE {
mobilityStateParameters MobilityStateParameters,
q-HystSF SEQUENCE {
sf-Medium ENUMERATED {
dB-6, dB-4, dB-2, dB0},
sf-High ENUMERATED {
dB-6, dB-4, dB-2, dB0}
}
} OPTIONAL -- Need OP
},
cellReselectionServingFreqInfo SEQUENCE {
s-NonIntraSearch ReselectionThreshold OPTIONAL, -- Need OP
threshServingLow ReselectionThreshold,
cellReselectionPriority CellReselectionPriority
},
intraFreqCellReselectionInfo SEQUENCE {
q-RxLevMin Q-RxLevMin,
p-Max P-Max OPTIONAL, -- Need OP
s-IntraSearch ReselectionThreshold OPTIONAL, -- Need OP
allowedMeasBandwidth AllowedMeasBandwidth OPTIONAL, -- Need OP
presenceAntennaPort1 PresenceAntennaPort1,
neighCellConfig NeighCellConfig,
t-ReselectionEUTRA T-Reselection,
t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL -- Need OP
},
...
}
SystemInformationBlockType4 ::= SEQUENCE {
intraFreqNeighCellList IntraFreqNeighCellList OPTIONAL, -- Need OR
intraFreqBlackCellList IntraFreqBlackCellList OPTIONAL, -- Need OR
csg-PhysCellIdRange PhysCellIdRange OPTIONAL, -- Cond CSG
...
}
IntraFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellIntra)) OF IntraFreqNeighCellInfo
IntraFreqNeighCellInfo ::= SEQUENCE {
physCellId PhysCellId,
q-OffsetCell Q-OffsetRange,
...
}
IntraFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange
SystemInformationBlockType5 ::= SEQUENCE {
interFreqCarrierFreqList InterFreqCarrierFreqList,
...
}
InterFreqCarrierFreqList ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo
InterFreqCarrierFreqInfo ::= SEQUENCE {
dl-CarrierFreq ARFCN-ValueEUTRA,
q-RxLevMin Q-RxLevMin,
p-Max P-Max OPTIONAL, -- Need OP
t-ReselectionEUTRA T-Reselection,
t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP
threshX-High ReselectionThreshold,
threshX-Low ReselectionThreshold,
allowedMeasBandwidth AllowedMeasBandwidth,
presenceAntennaPort1 PresenceAntennaPort1,
cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP
neighCellConfig NeighCellConfig,
q-OffsetFreq Q-OffsetRange DEFAULT dB0,
interFreqNeighCellList InterFreqNeighCellList OPTIONAL, -- Need OR
interFreqBlackCellList InterFreqBlackCellList OPTIONAL, -- Need OR
...
}
InterFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellInter)) OF InterFreqNeighCellInfo
InterFreqNeighCellInfo ::= SEQUENCE {
physCellId PhysCellId,
q-OffsetCell Q-OffsetRange
}
InterFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange
SystemInformationBlockType6 ::= SEQUENCE {
carrierFreqListUTRA-FDD CarrierFreqListUTRA-FDD OPTIONAL, -- Need OR
carrierFreqListUTRA-TDD CarrierFreqListUTRA-TDD OPTIONAL, -- Need OR
t-ReselectionUTRA T-Reselection,
t-ReselectionUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP
...
}
CarrierFreqListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqUTRA-FDD
CarrierFreqUTRA-FDD ::= SEQUENCE {
carrierFreq ARFCN-ValueUTRA,
cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP
threshX-High ReselectionThreshold,
threshX-Low ReselectionThreshold,
q-RxLevMin INTEGER (-60..-13),
p-MaxUTRA INTEGER (-50..33),
q-QualMin INTEGER (-24..0),
...
}
CarrierFreqListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF CarrierFreqUTRA-TDD
CarrierFreqUTRA-TDD ::= SEQUENCE {
carrierFreq ARFCN-ValueUTRA,
cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP
threshX-High ReselectionThreshold,
threshX-Low ReselectionThreshold,
q-RxLevMin INTEGER (-60..-13),
p-MaxUTRA INTEGER (-50..33),
...
}
SystemInformationBlockType7 ::= SEQUENCE {
t-ReselectionGERAN T-Reselection,
t-ReselectionGERAN-SF SpeedStateScaleFactors OPTIONAL, -- Need OR
carrierFreqsInfoList CarrierFreqsInfoListGERAN OPTIONAL, -- Need OR
...
}
CarrierFreqsInfoListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF CarrierFreqsInfoGERAN
CarrierFreqsInfoGERAN ::= SEQUENCE {
carrierFreqs CarrierFreqsGERAN,
commonInfo SEQUENCE {
cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP
ncc-Permitted BIT STRING (SIZE (8)),
q-RxLevMin INTEGER (0..45),
p-MaxGERAN INTEGER (0..39) OPTIONAL, -- Need OP
threshX-High ReselectionThreshold,
threshX-Low ReselectionThreshold
},
...
}
SystemInformationBlockType8 ::= SEQUENCE {
systemTimeInfo SystemTimeInfoCDMA2000 OPTIONAL, -- Need OR
searchWindowSize INTEGER (0..15) OPTIONAL, -- Need OR
parametersHRPD SEQUENCE {
preRegistrationInfoHRPD PreRegistrationInfoHRPD,
cellReselectionParametersHRPD CellReselectionParametersCDMA2000 OPTIONAL -- Need OR
} OPTIONAL, -- Need OR
parameters1XRTT SEQUENCE {
csfb-RegistrationParam1XRTT CSFB-RegistrationParam1XRTT OPTIONAL, -- Need OP
longCodeState1XRTT BIT STRING (SIZE (42)) OPTIONAL, -- Need OR
cellReselectionParameters1XRTT CellReselectionParametersCDMA2000 OPTIONAL -- Need OR
} OPTIONAL, -- Need OR
...
}
CellReselectionParametersCDMA2000 ::= SEQUENCE {
bandClassList BandClassListCDMA2000,
neighCellList NeighCellListCDMA2000,
t-ReselectionCDMA2000 T-Reselection,
t-ReselectionCDMA2000-SF SpeedStateScaleFactors OPTIONAL -- Need OP
}
NeighCellListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000
NeighCellCDMA2000 ::= SEQUENCE {
bandClass BandclassCDMA2000,
neighCellsPerFreqList NeighCellsPerBandclassListCDMA2000
}
NeighCellsPerBandclassListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000
NeighCellsPerBandclassCDMA2000 ::= SEQUENCE {
arfcn ARFCN-ValueCDMA2000,
physCellIdList PhysCellIdListCDMA2000
}
PhysCellIdListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdCDMA2000
BandClassListCDMA2000 ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassInfoCDMA2000
BandClassInfoCDMA2000 ::= SEQUENCE {
bandClass BandclassCDMA2000,
cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP
threshX-High INTEGER (0..63),
threshX-Low INTEGER (0..63),
...
}
SystemInformationBlockType9 ::= SEQUENCE {
hnb-Name OCTET STRING (SIZE(1..48)) OPTIONAL, -- Need OR
...
}
SystemInformationBlockType10 ::= SEQUENCE {
messageIdentifier BIT STRING (SIZE (16)),
serialNumber BIT STRING (SIZE (16)),
warningType OCTET STRING (SIZE (2)),
warningSecurityInfo OCTET STRING (SIZE (50)) OPTIONAL, -- Need OP
...
}
SystemInformationBlockType11 ::= SEQUENCE {
messageIdentifier BIT STRING (SIZE (16)),
serialNumber BIT STRING (SIZE (16)),
warningMessageSegmentType ENUMERATED {notLastSegment, lastSegment},
warningMessageSegmentNumber INTEGER (0..63),
warningMessageSegment OCTET STRING,
dataCodingScheme OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1
...
}
AntennaInfoCommon ::= SEQUENCE {
antennaPortsCount ENUMERATED {an1, an2, an4, spare1}
}
AntennaInfoDedicated ::= SEQUENCE {
transmissionMode ENUMERATED {
tm1, tm2, tm3, tm4, tm5, tm6,
tm7, spare1},
codebookSubsetRestriction CHOICE {
n2TxAntenna-tm3 BIT STRING (SIZE (2)),
n4TxAntenna-tm3 BIT STRING (SIZE (4)),
n2TxAntenna-tm4 BIT STRING (SIZE (6)),
n4TxAntenna-tm4 BIT STRING (SIZE (64)),
n2TxAntenna-tm5 BIT STRING (SIZE (4)),
n4TxAntenna-tm5 BIT STRING (SIZE (16)),
n2TxAntenna-tm6 BIT STRING (SIZE (4)),
n4TxAntenna-tm6 BIT STRING (SIZE (16))
} OPTIONAL, -- Cond TM
ue-TransmitAntennaSelection CHOICE{
release NULL,
setup ENUMERATED {closedLoop, openLoop}
}
}
CQI-ReportConfig ::= SEQUENCE {
cqi-ReportModeAperiodic ENUMERATED {
rm12, rm20, rm22, rm30, rm31,
spare3, spare2, spare1} OPTIONAL, -- Need OR
nomPDSCH-RS-EPRE-Offset INTEGER (-1..6),
cqi-ReportPeriodic CQI-ReportPeriodic OPTIONAL -- Need ON
}
CQI-ReportPeriodic ::= CHOICE {
release NULL,
setup SEQUENCE {
cqi-PUCCH-ResourceIndex INTEGER (0.. 1185),
cqi-pmi-ConfigIndex INTEGER (0..1023),
cqi-FormatIndicatorPeriodic CHOICE {
widebandCQI NULL,
subbandCQI SEQUENCE {
k INTEGER (1..4)
}
},
ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR
simultaneousAckNackAndCQI BOOLEAN
}
}
DRB-Identity ::= INTEGER (1..32)
LogicalChannelConfig ::= SEQUENCE {
ul-SpecificParameters SEQUENCE {
priority INTEGER (1..16),
prioritisedBitRate ENUMERATED {
kBps0, kBps8, kBps16, kBps32, kBps64, kBps128,
kBps256, infinity, spare8, spare7, spare6,
spare5, spare4, spare3, spare2, spare1},
bucketSizeDuration ENUMERATED {
ms50, ms100, ms150, ms300, ms500, ms1000, spare2,
spare1},
logicalChannelGroup INTEGER (0..3) OPTIONAL -- Need OR
} OPTIONAL, -- Cond UL
...
}
MAC-MainConfig ::= SEQUENCE {
ul-SCH-Config SEQUENCE {
maxHARQ-Tx ENUMERATED {
n1, n2, n3, n4, n5, n6, n7, n8,
n10, n12, n16, n20, n24, n28,
spare2, spare1} OPTIONAL, -- Need ON
periodicBSR-Timer ENUMERATED {
sf5, sf10, sf16, sf20, sf32, sf40, sf64, sf80,
sf128, sf160, sf320, sf640, sf1280, sf2560,
infinity, spare1} OPTIONAL, -- Need ON
retxBSR-Timer ENUMERATED {
sf320, sf640, sf1280, sf2560, sf5120,
sf10240, spare2, spare1},
ttiBundling BOOLEAN
} OPTIONAL, -- Need ON
drx-Config DRX-Config OPTIONAL, -- Need ON
timeAlignmentTimerDedicated TimeAlignmentTimer,
phr-Config CHOICE {
release NULL,
setup SEQUENCE {
periodicPHR-Timer ENUMERATED {sf10, sf20, sf50, sf100, sf200,
sf500, sf1000, infinity},
prohibitPHR-Timer ENUMERATED {sf0, sf10, sf20, sf50, sf100,
sf200, sf500, sf1000},
dl-PathlossChange ENUMERATED {dB1, dB3, dB6, infinity}
}
} OPTIONAL, -- Need ON
...
}
DRX-Config ::= CHOICE {
release NULL,
setup SEQUENCE {
onDurationTimer ENUMERATED {
psf1, psf2, psf3, psf4, psf5, psf6,
psf8, psf10, psf20, psf30, psf40,
psf50, psf60, psf80, psf100,
psf200},
drx-InactivityTimer ENUMERATED {
psf1, psf2, psf3, psf4, psf5, psf6,
psf8, psf10, psf20, psf30, psf40,
psf50, psf60, psf80, psf100,
psf200, psf300, psf500, psf750,
psf1280, psf1920, psf2560, spare10,
spare9, spare8, spare7, spare6,
spare5, spare4, spare3, spare2,
spare1},
drx-RetransmissionTimer ENUMERATED {
psf1, psf2, psf4, psf6, psf8, psf16,
psf24, psf33},
longDRX-CycleStartOffset CHOICE {
sf10 INTEGER(0..9),
sf20 INTEGER(0..19),
sf32 INTEGER(0..31),
sf40 INTEGER(0..39),
sf64 INTEGER(0..63),
sf80 INTEGER(0..79),
sf128 INTEGER(0..127),
sf160 INTEGER(0..159),
sf256 INTEGER(0..255),
sf320 INTEGER(0..319),
sf512 INTEGER(0..511),
sf640 INTEGER(0..639),
sf1024 INTEGER(0..1023),
sf1280 INTEGER(0..1279),
sf2048 INTEGER(0..2047),
sf2560 INTEGER(0..2559)
},
shortDRX SEQUENCE {
shortDRX-Cycle ENUMERATED {
sf2, sf5, sf8, sf10, sf16, sf20,
sf32, sf40, sf64, sf80, sf128, sf160,
sf256, sf320, sf512, sf640},
drxShortCycleTimer INTEGER (1..16)
} OPTIONAL -- Need OR
}
}
PDCP-Config ::= SEQUENCE {
discardTimer ENUMERATED {
ms50, ms100, ms150, ms300, ms500,
ms750, ms1500, infinity
} OPTIONAL, -- Cond Setup
rlc-AM SEQUENCE {
statusReportRequired BOOLEAN
} OPTIONAL, -- Cond Rlc-AM
rlc-UM SEQUENCE {
pdcp-SN-Size ENUMERATED {len7bits, len12bits}
} OPTIONAL, -- Cond Rlc-UM
headerCompression CHOICE {
notUsed NULL,
rohc SEQUENCE {
maxCID INTEGER (1..16383) DEFAULT 15,
profiles SEQUENCE {
profile0x0001 BOOLEAN,
profile0x0002 BOOLEAN,
profile0x0003 BOOLEAN,
profile0x0004 BOOLEAN,
profile0x0006 BOOLEAN,
profile0x0101 BOOLEAN,
profile0x0102 BOOLEAN,
profile0x0103 BOOLEAN,
profile0x0104 BOOLEAN
},
...
}
},
...
}
PDSCH-ConfigCommon::= SEQUENCE {
referenceSignalPower INTEGER (-60..50),
p-b INTEGER (0..3)
}
PDSCH-ConfigDedicated::= SEQUENCE {
p-a ENUMERATED {
dB-6, dB-4dot77, dB-3, dB-1dot77,
dB0, dB1, dB2, dB3 }
}
PHICH-Config ::= SEQUENCE {
phich-Duration ENUMERATED {normal, extended},
phich-Resource ENUMERATED {oneSixth, half, one, two}
}
PhysicalConfigDedicated ::= SEQUENCE {
pdsch-ConfigDedicated PDSCH-ConfigDedicated OPTIONAL, -- Need ON
pucch-ConfigDedicated PUCCH-ConfigDedicated OPTIONAL, -- Need ON
pusch-ConfigDedicated PUSCH-ConfigDedicated OPTIONAL, -- Need ON
uplinkPowerControlDedicated UplinkPowerControlDedicated OPTIONAL, -- Need ON
tpc-PDCCH-ConfigPUCCH TPC-PDCCH-Config OPTIONAL, -- Need ON
tpc-PDCCH-ConfigPUSCH TPC-PDCCH-Config OPTIONAL, -- Need ON
cqi-ReportConfig CQI-ReportConfig OPTIONAL, -- Need ON
soundingRS-UL-ConfigDedicated SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON
antennaInfo CHOICE {
explicitValue AntennaInfoDedicated,
defaultValue NULL
} OPTIONAL, -- Need ON
schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need ON
...
}
P-Max ::= INTEGER (-30..33)
PRACH-ConfigSIB ::= SEQUENCE {
rootSequenceIndex INTEGER (0..837),
prach-ConfigInfo PRACH-ConfigInfo
}
PRACH-Config ::= SEQUENCE {
rootSequenceIndex INTEGER (0..837),
prach-ConfigInfo PRACH-ConfigInfo OPTIONAL -- Need ON
}
PRACH-ConfigInfo ::= SEQUENCE {
prach-ConfigIndex INTEGER (0..63),
highSpeedFlag BOOLEAN,
zeroCorrelationZoneConfig INTEGER (0..15),
prach-FreqOffset INTEGER (0..94)
}
PresenceAntennaPort1 ::= BOOLEAN
PUCCH-ConfigCommon ::= SEQUENCE {
deltaPUCCH-Shift ENUMERATED {ds1, ds2, ds3},
nRB-CQI INTEGER (0..98),
nCS-AN INTEGER (0..7),
n1PUCCH-AN INTEGER (0..2047)
}
PUCCH-ConfigDedicated ::= SEQUENCE {
ackNackRepetition CHOICE{
release NULL,
setup SEQUENCE {
repetitionFactor ENUMERATED { n2, n4, n6, spare1},
n1PUCCH-AN-Rep INTEGER (0..2047)
}
},
tdd-AckNackFeedbackMode ENUMERATED {bundling, multiplexing} OPTIONAL -- Cond TDD
}
PUSCH-ConfigCommon ::= SEQUENCE {
pusch-ConfigBasic SEQUENCE {
n-SB INTEGER (1..4),
hoppingMode ENUMERATED {interSubFrame, intraAndInterSubFrame},
pusch-HoppingOffset INTEGER (0..98),
enable64QAM BOOLEAN
},
ul-ReferenceSignalsPUSCH UL-ReferenceSignalsPUSCH
}
PUSCH-ConfigDedicated ::= SEQUENCE {
betaOffset-ACK-Index INTEGER (0..15),
betaOffset-RI-Index INTEGER (0..15),
betaOffset-CQI-Index INTEGER (0..15)
}
UL-ReferenceSignalsPUSCH ::= SEQUENCE {
groupHoppingEnabled BOOLEAN,
groupAssignmentPUSCH INTEGER (0..29),
sequenceHoppingEnabled BOOLEAN,
cyclicShift INTEGER (0..7)
}
RACH-ConfigCommon ::= SEQUENCE {
preambleInfo SEQUENCE {
numberOfRA-Preambles ENUMERATED {
n4, n8, n12, n16 ,n20, n24, n28,
n32, n36, n40, n44, n48, n52, n56,
n60, n64},
preamblesGroupAConfig SEQUENCE {
sizeOfRA-PreamblesGroupA ENUMERATED {
n4, n8, n12, n16 ,n20, n24, n28,
n32, n36, n40, n44, n48, n52, n56,
n60},
messageSizeGroupA ENUMERATED {b56, b144, b208, b256},
messagePowerOffsetGroupB ENUMERATED {
minusinfinity, dB0, dB5, dB8, dB10, dB12,
dB15, dB18},
...
} OPTIONAL -- Need OP
},
powerRampingParameters SEQUENCE {
powerRampingStep ENUMERATED {dB0, dB2,dB4, dB6},
preambleInitialReceivedTargetPower ENUMERATED {
dBm-120, dBm-118, dBm-116, dBm-114, dBm-112,
dBm-110, dBm-108, dBm-106, dBm-104, dBm-102,
dBm-100, dBm-98, dBm-96, dBm-94,
dBm-92, dBm-90}
},
ra-SupervisionInfo SEQUENCE {
preambleTransMax ENUMERATED {
n3, n4, n5, n6, n7, n8, n10, n20, n50,
n100, n200},
ra-ResponseWindowSize ENUMERATED {
sf2, sf3, sf4, sf5, sf6, sf7,
sf8, sf10},
mac-ContentionResolutionTimer ENUMERATED {
sf8, sf16, sf24, sf32, sf40, sf48,
sf56, sf64}
},
maxHARQ-Msg3Tx INTEGER (1..8),
...
}
RACH-ConfigDedicated ::= SEQUENCE {
ra-PreambleIndex INTEGER (0..63),
ra-PRACH-MaskIndex INTEGER (0..15)
}
RadioResourceConfigCommonSIB ::= SEQUENCE {
rach-ConfigCommon RACH-ConfigCommon,
bcch-Config BCCH-Config,
pcch-Config PCCH-Config,
prach-Config PRACH-ConfigSIB,
pdsch-ConfigCommon PDSCH-ConfigCommon,
pusch-ConfigCommon PUSCH-ConfigCommon,
pucch-ConfigCommon PUCCH-ConfigCommon,
soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon,
uplinkPowerControlCommon UplinkPowerControlCommon,
ul-CyclicPrefixLength UL-CyclicPrefixLength,
...
}
RadioResourceConfigCommon ::= SEQUENCE {
rach-ConfigCommon RACH-ConfigCommon OPTIONAL, -- Need ON
prach-Config PRACH-Config,
pdsch-ConfigCommon PDSCH-ConfigCommon OPTIONAL, -- Need ON
pusch-ConfigCommon PUSCH-ConfigCommon,
phich-Config PHICH-Config OPTIONAL, -- Need ON
pucch-ConfigCommon PUCCH-ConfigCommon OPTIONAL, -- Need ON
soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon OPTIONAL, -- Need ON
uplinkPowerControlCommon UplinkPowerControlCommon OPTIONAL, -- Need ON
antennaInfoCommon AntennaInfoCommon OPTIONAL, -- Need ON
p-Max P-Max OPTIONAL, -- Need OP
tdd-Config TDD-Config OPTIONAL, -- Cond TDD
ul-CyclicPrefixLength UL-CyclicPrefixLength,
...
}
BCCH-Config ::= SEQUENCE {
modificationPeriodCoeff ENUMERATED {n2, n4, n8, n16}
}
PCCH-Config ::= SEQUENCE {
defaultPagingCycle ENUMERATED {
rf32, rf64, rf128, rf256},
nB ENUMERATED {
fourT, twoT, oneT, halfT, quarterT, oneEighthT,
oneSixteenthT, oneThirtySecondT}
}
UL-CyclicPrefixLength ::= ENUMERATED {len1, len2}
RadioResourceConfigDedicated ::= SEQUENCE {
srb-ToAddModList SRB-ToAddModList OPTIONAL, -- Cond HO-Conn
drb-ToAddModList DRB-ToAddModList OPTIONAL, -- Cond HO-toEUTRA
drb-ToReleaseList DRB-ToReleaseList OPTIONAL, -- Need ON
mac-MainConfig CHOICE {
explicitValue MAC-MainConfig,
defaultValue NULL
} OPTIONAL, -- Cond HO-toEUTRA2
sps-Config SPS-Config OPTIONAL, -- Need ON
physicalConfigDedicated PhysicalConfigDedicated OPTIONAL, -- Need ON
...
}
SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod
SRB-ToAddMod ::= SEQUENCE {
srb-Identity INTEGER (1..2),
rlc-Config CHOICE {
explicitValue RLC-Config,
defaultValue NULL
} OPTIONAL, -- Cond Setup
logicalChannelConfig CHOICE {
explicitValue LogicalChannelConfig,
defaultValue NULL
} OPTIONAL, -- Cond Setup
...
}
DRB-ToAddModList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddMod
DRB-ToAddMod ::= SEQUENCE {
eps-BearerIdentity INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup
drb-Identity DRB-Identity,
pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP
rlc-Config RLC-Config OPTIONAL, -- Cond Setup
logicalChannelIdentity INTEGER (3..10) OPTIONAL, -- Cond DRB-Setup
logicalChannelConfig LogicalChannelConfig OPTIONAL, -- Cond Setup
...
}
DRB-ToReleaseList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity
RLC-Config ::= CHOICE {
am SEQUENCE {
ul-AM-RLC UL-AM-RLC,
dl-AM-RLC DL-AM-RLC
},
um-Bi-Directional SEQUENCE {
ul-UM-RLC UL-UM-RLC,
dl-UM-RLC DL-UM-RLC
},
um-Uni-Directional-UL SEQUENCE {
ul-UM-RLC UL-UM-RLC
},
um-Uni-Directional-DL SEQUENCE {
dl-UM-RLC DL-UM-RLC
},
...
}
UL-AM-RLC ::= SEQUENCE {
t-PollRetransmit T-PollRetransmit,
pollPDU PollPDU,
pollByte PollByte,
maxRetxThreshold ENUMERATED {
t1, t2, t3, t4, t6, t8, t16, t32}
}
DL-AM-RLC ::= SEQUENCE {
t-Reordering T-Reordering,
t-StatusProhibit T-StatusProhibit
}
UL-UM-RLC ::= SEQUENCE {
sn-FieldLength SN-FieldLength
}
DL-UM-RLC ::= SEQUENCE {
sn-FieldLength SN-FieldLength,
t-Reordering T-Reordering
}
SN-FieldLength ::= ENUMERATED {size5, size10}
T-PollRetransmit ::= ENUMERATED {
ms5, ms10, ms15, ms20, ms25, ms30, ms35,
ms40, ms45, ms50, ms55, ms60, ms65, ms70,
ms75, ms80, ms85, ms90, ms95, ms100, ms105,
ms110, ms115, ms120, ms125, ms130, ms135,
ms140, ms145, ms150, ms155, ms160, ms165,
ms170, ms175, ms180, ms185, ms190, ms195,
ms200, ms205, ms210, ms215, ms220, ms225,
ms230, ms235, ms240, ms245, ms250, ms300,
ms350, ms400, ms450, ms500, spare9, spare8,
spare7, spare6, spare5, spare4, spare3,
spare2, spare1}
PollPDU ::= ENUMERATED {
p4, p8, p16, p32, p64, p128, p256, pInfinity}
PollByte ::= ENUMERATED {
kB25, kB50, kB75, kB100, kB125, kB250, kB375,
kB500, kB750, kB1000, kB1250, kB1500, kB2000,
kB3000, kBinfinity, spare1}
T-Reordering ::= ENUMERATED {
ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35,
ms40, ms45, ms50, ms55, ms60, ms65, ms70,
ms75, ms80, ms85, ms90, ms95, ms100, ms110,
ms120, ms130, ms140, ms150, ms160, ms170,
ms180, ms190, ms200, spare1}
T-StatusProhibit ::= ENUMERATED {
ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35,
ms40, ms45, ms50, ms55, ms60, ms65, ms70,
ms75, ms80, ms85, ms90, ms95, ms100, ms105,
ms110, ms115, ms120, ms125, ms130, ms135,
ms140, ms145, ms150, ms155, ms160, ms165,
ms170, ms175, ms180, ms185, ms190, ms195,
ms200, ms205, ms210, ms215, ms220, ms225,
ms230, ms235, ms240, ms245, ms250, ms300,
ms350, ms400, ms450, ms500, spare8, spare7,
spare6, spare5, spare4, spare3, spare2,
spare1}
SchedulingRequestConfig ::= CHOICE {
release NULL,
setup SEQUENCE {
sr-PUCCH-ResourceIndex INTEGER (0..2047),
sr-ConfigIndex INTEGER (0..155),
dsr-TransMax ENUMERATED {
n4, n8, n16, n32, n64, spare3, spare2, spare1}
}
}
SoundingRS-UL-ConfigCommon ::= CHOICE {
release NULL,
setup SEQUENCE {
srs-BandwidthConfig ENUMERATED {bw0, bw1, bw2, bw3, bw4, bw5, bw6, bw7},
srs-SubframeConfig ENUMERATED {
sc0, sc1, sc2, sc3, sc4, sc5, sc6, sc7,
sc8, sc9, sc10, sc11, sc12, sc13, sc14, sc15},
ackNackSRS-SimultaneousTransmission BOOLEAN,
srs-MaxUpPts ENUMERATED {true} OPTIONAL -- Cond TDD
}
}
SoundingRS-UL-ConfigDedicated ::= CHOICE{
release NULL,
setup SEQUENCE {
srs-Bandwidth ENUMERATED {bw0, bw1, bw2, bw3},
srs-HoppingBandwidth ENUMERATED {hbw0, hbw1, hbw2, hbw3},
freqDomainPosition INTEGER (0..23),
duration BOOLEAN,
srs-ConfigIndex INTEGER (0..1023),
transmissionComb INTEGER (0..1),
cyclicShift ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7}
}
}
SPS-Config ::= SEQUENCE {
semiPersistSchedC-RNTI C-RNTI OPTIONAL, -- Need OR
sps-ConfigDL SPS-ConfigDL OPTIONAL, -- Need ON
sps-ConfigUL SPS-ConfigUL OPTIONAL -- Need ON
}
SPS-ConfigDL ::= CHOICE{
release NULL,
setup SEQUENCE {
semiPersistSchedIntervalDL ENUMERATED {
sf10, sf20, sf32, sf40, sf64, sf80,
sf128, sf160, sf320, sf640, spare6,
spare5, spare4, spare3, spare2,
spare1},
numberOfConfSPS-Processes INTEGER (1..8),
n1-PUCCH-AN-PersistentList N1-PUCCH-AN-PersistentList,
...
}
}
SPS-ConfigUL ::= CHOICE {
release NULL,
setup SEQUENCE {
semiPersistSchedIntervalUL ENUMERATED {
sf10, sf20, sf32, sf40, sf64, sf80,
sf128, sf160, sf320, sf640, spare6,
spare5, spare4, spare3, spare2,
spare1},
implicitReleaseAfter ENUMERATED {e2, e3, e4, e8},
p0-Persistent SEQUENCE {
p0-NominalPUSCH-Persistent INTEGER (-126..24),
p0-UE-PUSCH-Persistent INTEGER (-8..7)
} OPTIONAL, -- Need OP
twoIntervalsConfig ENUMERATED {true} OPTIONAL, -- Cond TDD
...
}
}
N1-PUCCH-AN-PersistentList ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047)
TDD-Config ::= SEQUENCE {
subframeAssignment ENUMERATED {
sa0, sa1, sa2, sa3, sa4, sa5, sa6},
specialSubframePatterns ENUMERATED {
ssp0, ssp1, ssp2, ssp3, ssp4,ssp5, ssp6, ssp7,
ssp8}
}
TimeAlignmentTimer ::= ENUMERATED {
sf500, sf750, sf1280, sf1920, sf2560, sf5120,
sf10240, infinity}
TPC-PDCCH-Config::= CHOICE {
release NULL,
setup SEQUENCE {
tpc-RNTI BIT STRING (SIZE (16)),
tpc-Index TPC-Index
}
}
TPC-Index ::= CHOICE {
indexOfFormat3 INTEGER (1..15),
indexOfFormat3A INTEGER (1..31)
}
UplinkPowerControlCommon ::= SEQUENCE {
p0-NominalPUSCH INTEGER (-126..24),
alpha ENUMERATED {al0, al04, al05, al06, al07, al08, al09, al1},
p0-NominalPUCCH INTEGER (-127..-96),
deltaFList-PUCCH DeltaFList-PUCCH,
deltaPreambleMsg3 INTEGER (-1..6)
}
UplinkPowerControlDedicated ::= SEQUENCE {
p0-UE-PUSCH INTEGER (-8..7),
deltaMCS-Enabled ENUMERATED {en0, en1},
accumulationEnabled BOOLEAN,
p0-UE-PUCCH INTEGER (-8..7),
pSRS-Offset INTEGER (0..15),
filterCoefficient FilterCoefficient DEFAULT fc4
}
DeltaFList-PUCCH ::= SEQUENCE {
deltaF-PUCCH-Format1 ENUMERATED {deltaF-2, deltaF0, deltaF2},
deltaF-PUCCH-Format1b ENUMERATED {deltaF1, deltaF3, deltaF5},
deltaF-PUCCH-Format2 ENUMERATED {deltaF-2, deltaF0, deltaF1, deltaF2},
deltaF-PUCCH-Format2a ENUMERATED {deltaF-2, deltaF0, deltaF2},
deltaF-PUCCH-Format2b ENUMERATED {deltaF-2, deltaF0, deltaF2}
}
NextHopChainingCount ::= INTEGER (0..7)
SecurityAlgorithmConfig ::= SEQUENCE {
cipheringAlgorithm ENUMERATED {
eea0, eea1, eea2, spare5, spare4, spare3,
spare2, spare1, ...},
integrityProtAlgorithm ENUMERATED {
reserved, eia1, eia2, spare5, spare4, spare3,
spare2, spare1, ...}
}
ShortMAC-I ::= BIT STRING (SIZE (16))
AdditionalSpectrumEmission ::= INTEGER (1..32)
ARFCN-ValueCDMA2000 ::= INTEGER (0..2047)
ARFCN-ValueEUTRA ::= INTEGER (0..maxEARFCN)
ARFCN-ValueGERAN ::= INTEGER (0..1023)
ARFCN-ValueUTRA ::= INTEGER (0..16383)
BandclassCDMA2000 ::= ENUMERATED {
bc0, bc1, bc2, bc3, bc4, bc5, bc6, bc7, bc8,
bc9, bc10, bc11, bc12, bc13, bc14, bc15, bc16,
bc17, spare14, spare13, spare12, spare11, spare10,
spare9, spare8, spare7, spare6, spare5, spare4,
spare3, spare2, spare1, ...}
BandIndicatorGERAN ::= ENUMERATED {dcs1800, pcs1900}
CarrierFreqCDMA2000 ::= SEQUENCE {
bandClass BandclassCDMA2000,
arfcn ARFCN-ValueCDMA2000
}
CarrierFreqGERAN ::= SEQUENCE {
arfcn ARFCN-ValueGERAN,
bandIndicator BandIndicatorGERAN
}
CarrierFreqsGERAN ::= SEQUENCE {
startingARFCN ARFCN-ValueGERAN,
bandIndicator BandIndicatorGERAN,
followingARFCNs CHOICE {
explicitListOfARFCNs ExplicitListOfARFCNs,
equallySpacedARFCNs SEQUENCE {
arfcn-Spacing INTEGER (1..8),
numberOfFollowingARFCNs INTEGER (0..31)
},
variableBitMapOfARFCNs OCTET STRING (SIZE (1..16))
}
}
ExplicitListOfARFCNs ::= SEQUENCE (SIZE (0..31)) OF ARFCN-ValueGERAN
CDMA2000-Type ::= ENUMERATED {type1XRTT, typeHRPD}
CellIdentity ::= BIT STRING (SIZE (28))
CellIndexList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellIndex
CellIndex ::= INTEGER (1..maxCellMeas)
CellReselectionPriority ::= INTEGER (0..7)
CSFB-RegistrationParam1XRTT ::= SEQUENCE {
sid BIT STRING (SIZE (15)),
nid BIT STRING (SIZE (16)),
multipleSID BOOLEAN,
multipleNID BOOLEAN,
homeReg BOOLEAN,
foreignSIDReg BOOLEAN,
foreignNIDReg BOOLEAN,
parameterReg BOOLEAN,
powerUpReg BOOLEAN,
registrationPeriod BIT STRING (SIZE (7)),
registrationZone BIT STRING (SIZE (12)),
totalZone BIT STRING (SIZE (3)),
zoneTimer BIT STRING (SIZE (3))
}
CellGlobalIdEUTRA ::= SEQUENCE {
plmn-Identity PLMN-Identity,
cellIdentity CellIdentity
}
CellGlobalIdUTRA ::= SEQUENCE {
plmn-Identity PLMN-Identity,
cellIdentity BIT STRING (SIZE (28))
}
CellGlobalIdGERAN ::= SEQUENCE {
plmn-Identity PLMN-Identity,
locationAreaCode BIT STRING (SIZE (16)),
cellIdentity BIT STRING (SIZE (16))
}
CellGlobalIdCDMA2000 ::= CHOICE {
cellGlobalId1XRTT BIT STRING (SIZE (47)),
cellGlobalIdHRPD BIT STRING (SIZE (128))
}
MobilityControlInfo ::= SEQUENCE {
targetPhysCellId PhysCellId,
carrierFreq CarrierFreqEUTRA OPTIONAL, -- Cond HO-toEUTRA
carrierBandwidth CarrierBandwidthEUTRA OPTIONAL, -- Cond HO-toEUTRA
additionalSpectrumEmission AdditionalSpectrumEmission OPTIONAL, -- Cond HO-toEUTRA
t304 ENUMERATED {
ms50, ms100, ms150, ms200, ms500, ms1000,
ms2000, spare1},
newUE-Identity C-RNTI,
radioResourceConfigCommon RadioResourceConfigCommon,
rach-ConfigDedicated RACH-ConfigDedicated OPTIONAL, -- Need OP
...
}
CarrierBandwidthEUTRA ::= SEQUENCE {
dl-Bandwidth ENUMERATED {
n6, n15, n25, n50, n75, n100, spare10,
spare9, spare8, spare7, spare6, spare5,
spare4, spare3, spare2, spare1},
ul-Bandwidth ENUMERATED {
n6, n15, n25, n50, n75, n100, spare10,
spare9, spare8, spare7, spare6, spare5,
spare4, spare3, spare2, spare1} OPTIONAL -- Need OP
}
CarrierFreqEUTRA ::= SEQUENCE {
dl-CarrierFreq ARFCN-ValueEUTRA,
ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL -- Cond FDD
}
MobilityParametersCDMA2000 ::= OCTET STRING
MobilityStateParameters ::= SEQUENCE {
t-Evaluation ENUMERATED {
s30, s60, s120, s180, s240, spare3, spare2, spare1},
t-HystNormal ENUMERATED {
s30, s60, s120, s180, s240, spare3, spare2, spare1},
n-CellChangeMedium INTEGER (1..16),
n-CellChangeHigh INTEGER (1..16)
}
PhysCellId ::= INTEGER (0..503)
PhysCellIdRange ::= SEQUENCE {
start PhysCellId,
range ENUMERATED {
n4, n8, n12, n16, n24, n32, n48, n64, n84,
n96, n128, n168, n252, n504, spare2,
spare1} OPTIONAL -- Need OP
}
PhysCellIdCDMA2000 ::= INTEGER (0..maxPNOffset)
PhysCellIdGERAN ::= SEQUENCE {
networkColourCode BIT STRING (SIZE (3)),
baseStationColourCode BIT STRING (SIZE (3))
}
PhysCellIdUTRA-FDD ::= INTEGER (0..511)
PhysCellIdUTRA-TDD ::= INTEGER (0..127)
PLMN-Identity ::= SEQUENCE {
mcc MCC OPTIONAL, -- Cond MCC
mnc MNC
}
MCC ::= SEQUENCE (SIZE (3)) OF
MCC-MNC-Digit
MNC ::= SEQUENCE (SIZE (2..3)) OF
MCC-MNC-Digit
MCC-MNC-Digit ::= INTEGER (0..9)
PreRegistrationInfoHRPD ::= SEQUENCE {
preRegistrationAllowed BOOLEAN,
preRegistrationZoneId PreRegistrationZoneIdHRPD OPTIONAL, -- cond PreRegAllowed
secondaryPreRegistrationZoneIdList SecondaryPreRegistrationZoneIdListHRPD OPTIONAL -- Need OR
}
SecondaryPreRegistrationZoneIdListHRPD ::= SEQUENCE (SIZE (1..2)) OF PreRegistrationZoneIdHRPD
PreRegistrationZoneIdHRPD ::= INTEGER (0..255)
Q-RxLevMin ::= INTEGER (-70..-22)
Q-OffsetRange ::= ENUMERATED {
dB-24, dB-22, dB-20, dB-18, dB-16, dB-14,
dB-12, dB-10, dB-8, dB-6, dB-5, dB-4, dB-3,
dB-2, dB-1, dB0, dB1, dB2, dB3, dB4, dB5,
dB6, dB8, dB10, dB12, dB14, dB16, dB18,
dB20, dB22, dB24}
Q-OffsetRangeInterRAT ::= INTEGER (-15..15)
ReselectionThreshold ::= INTEGER (0..31)
SpeedStateScaleFactors ::= SEQUENCE {
sf-Medium ENUMERATED {oDot25, oDot5, oDot75, lDot0},
sf-High ENUMERATED {oDot25, oDot5, oDot75, lDot0}
}
SystemTimeInfoCDMA2000 ::= SEQUENCE {
cdma-EUTRA-Synchronisation BOOLEAN,
cdma-SystemTime CHOICE {
synchronousSystemTime BIT STRING (SIZE (39)),
asynchronousSystemTime BIT STRING (SIZE (49))
}
}
TrackingAreaCode ::= BIT STRING (SIZE (16))
T-Reselection ::= INTEGER (0..7)
AllowedMeasBandwidth ::= ENUMERATED {mbw6, mbw15, mbw25, mbw50, mbw75, mbw100}
Hysteresis ::= INTEGER (0..30)
MeasConfig ::= SEQUENCE {
-- Measurement objects
measObjectToRemoveList MeasObjectToRemoveList OPTIONAL, -- Need ON
measObjectToAddModList MeasObjectToAddModList OPTIONAL, -- Need ON
-- Reporting configurations
reportConfigToRemoveList ReportConfigToRemoveList OPTIONAL, -- Need ON
reportConfigToAddModList ReportConfigToAddModList OPTIONAL, -- Need ON
-- Measurement identities
measIdToRemoveList MeasIdToRemoveList OPTIONAL, -- Need ON
measIdToAddModList MeasIdToAddModList OPTIONAL, -- Need ON
-- Other parameters
quantityConfig QuantityConfig OPTIONAL, -- Need ON
measGapConfig MeasGapConfig OPTIONAL, -- Need ON
s-Measure RSRP-Range OPTIONAL, -- Need ON
preRegistrationInfoHRPD PreRegistrationInfoHRPD OPTIONAL, -- Need OP
speedStatePars CHOICE {
release NULL,
setup SEQUENCE {
mobilityStateParameters MobilityStateParameters,
timeToTrigger-SF SpeedStateScaleFactors
}
} OPTIONAL, -- Need ON
...
}
MeasIdToRemoveList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasId
MeasObjectToRemoveList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectId
ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigId
MeasGapConfig ::= CHOICE {
release NULL,
setup SEQUENCE {
gapOffset CHOICE {
gp0 INTEGER (0..39),
gp1 INTEGER (0..79),
...
}
}
}
MeasId ::= INTEGER (1..maxMeasId)
MeasIdToAddModList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddMod
MeasIdToAddMod ::= SEQUENCE {
measId MeasId,
measObjectId MeasObjectId,
reportConfigId ReportConfigId
}
MeasObjectCDMA2000 ::= SEQUENCE {
cdma2000-Type CDMA2000-Type,
carrierFreq CarrierFreqCDMA2000,
searchWindowSize INTEGER (0..15) OPTIONAL, -- Need ON
offsetFreq Q-OffsetRangeInterRAT DEFAULT 0,
cellsToRemoveList CellIndexList OPTIONAL, -- Need ON
cellsToAddModList CellsToAddModListCDMA2000 OPTIONAL, -- Need ON
cellForWhichToReportCGI PhysCellIdCDMA2000 OPTIONAL, -- Need ON
...
}
CellsToAddModListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModCDMA2000
CellsToAddModCDMA2000 ::= SEQUENCE {
cellIndex INTEGER (1..maxCellMeas),
physCellId PhysCellIdCDMA2000
}
MeasObjectEUTRA ::= SEQUENCE {
carrierFreq ARFCN-ValueEUTRA,
allowedMeasBandwidth AllowedMeasBandwidth,
presenceAntennaPort1 PresenceAntennaPort1,
neighCellConfig NeighCellConfig,
offsetFreq Q-OffsetRange DEFAULT dB0,
-- Neighbour cell list
cellsToRemoveList CellIndexList OPTIONAL, -- Need ON
cellsToAddModList CellsToAddModList OPTIONAL, -- Need ON
-- Black list
blackCellsToRemoveList CellIndexList OPTIONAL, -- Need ON
blackCellsToAddModList BlackCellsToAddModList OPTIONAL, -- Need ON
cellForWhichToReportCGI PhysCellId OPTIONAL, -- Need ON
...
}
CellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddMod
CellsToAddMod ::= SEQUENCE {
cellIndex INTEGER (1..maxCellMeas),
physCellId PhysCellId,
cellIndividualOffset Q-OffsetRange
}
BlackCellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF BlackCellsToAddMod
BlackCellsToAddMod ::= SEQUENCE {
cellIndex INTEGER (1..maxCellMeas),
physCellIdRange PhysCellIdRange
}
MeasObjectGERAN ::= SEQUENCE {
carrierFreqs CarrierFreqsGERAN,
offsetFreq Q-OffsetRangeInterRAT DEFAULT 0,
ncc-Permitted BIT STRING(SIZE (8)) DEFAULT '11111111'B,
cellForWhichToReportCGI PhysCellIdGERAN OPTIONAL, -- Need ON
...
}
MeasObjectId ::= INTEGER (1..maxObjectId)
MeasObjectToAddModList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod
MeasObjectToAddMod ::= SEQUENCE {
measObjectId MeasObjectId,
measObject CHOICE {
measObjectEUTRA MeasObjectEUTRA,
measObjectUTRA MeasObjectUTRA,
measObjectGERAN MeasObjectGERAN,
measObjectCDMA2000 MeasObjectCDMA2000,
...
}
}
MeasObjectUTRA ::= SEQUENCE {
carrierFreq ARFCN-ValueUTRA,
offsetFreq Q-OffsetRangeInterRAT DEFAULT 0,
cellsToRemoveList CellIndexList OPTIONAL, -- Need ON
cellsToAddModList CHOICE {
cellsToAddModListUTRA-FDD CellsToAddModListUTRA-FDD,
cellsToAddModListUTRA-TDD CellsToAddModListUTRA-TDD
} OPTIONAL, -- Need ON
cellForWhichToReportCGI CHOICE {
utra-FDD PhysCellIdUTRA-FDD,
utra-TDD PhysCellIdUTRA-TDD
} OPTIONAL, -- Need ON
...
}
CellsToAddModListUTRA-FDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-FDD
CellsToAddModUTRA-FDD ::= SEQUENCE {
cellIndex INTEGER (1..maxCellMeas),
physCellId PhysCellIdUTRA-FDD
}
CellsToAddModListUTRA-TDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-TDD
CellsToAddModUTRA-TDD ::= SEQUENCE {
cellIndex INTEGER (1..maxCellMeas),
physCellId PhysCellIdUTRA-TDD
}
MeasResults ::= SEQUENCE {
measId MeasId,
measResultServCell SEQUENCE {
rsrpResult RSRP-Range,
rsrqResult RSRQ-Range
},
measResultNeighCells CHOICE {
measResultListEUTRA MeasResultListEUTRA,
measResultListUTRA MeasResultListUTRA,
measResultListGERAN MeasResultListGERAN,
measResultsCDMA2000 MeasResultsCDMA2000,
...
} OPTIONAL,
...
}
MeasResultListEUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultEUTRA
MeasResultEUTRA ::= SEQUENCE {
physCellId PhysCellId,
cgi-Info SEQUENCE {
cellGlobalId CellGlobalIdEUTRA,
trackingAreaCode TrackingAreaCode,
plmn-IdentityList PLMN-IdentityList2 OPTIONAL
} OPTIONAL,
measResult SEQUENCE {
rsrpResult RSRP-Range OPTIONAL,
rsrqResult RSRQ-Range OPTIONAL,
...
}
}
MeasResultListUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultUTRA
MeasResultUTRA ::= SEQUENCE {
physCellId CHOICE {
fdd PhysCellIdUTRA-FDD,
tdd PhysCellIdUTRA-TDD
},
cgi-Info SEQUENCE {
cellGlobalId CellGlobalIdUTRA,
locationAreaCode BIT STRING (SIZE (16)) OPTIONAL,
routingAreaCode BIT STRING (SIZE (8)) OPTIONAL,
plmn-IdentityList PLMN-IdentityList2 OPTIONAL
} OPTIONAL,
measResult SEQUENCE {
utra-RSCP INTEGER (-5..91) OPTIONAL,
utra-EcN0 INTEGER (0..49) OPTIONAL,
...
}
}
MeasResultListGERAN ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultGERAN
MeasResultGERAN ::= SEQUENCE {
carrierFreq CarrierFreqGERAN,
physCellId PhysCellIdGERAN,
cgi-Info SEQUENCE {
cellGlobalId CellGlobalIdGERAN,
routingAreaCode BIT STRING (SIZE (8)) OPTIONAL
} OPTIONAL,
measResult SEQUENCE {
rssi INTEGER (0..63),
...
}
}
MeasResultsCDMA2000 ::= SEQUENCE {
preRegistrationStatusHRPD BOOLEAN,
measResultListCDMA2000 MeasResultListCDMA2000
}
MeasResultListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultCDMA2000
MeasResultCDMA2000 ::= SEQUENCE {
physCellId PhysCellIdCDMA2000,
cgi-Info CellGlobalIdCDMA2000 OPTIONAL,
measResult SEQUENCE {
pilotPnPhase INTEGER (0..32767) OPTIONAL,
pilotStrength INTEGER (0..63),
...
}
}
PLMN-IdentityList2 ::= SEQUENCE (SIZE (1..5)) OF PLMN-Identity
QuantityConfig ::= SEQUENCE {
quantityConfigEUTRA QuantityConfigEUTRA OPTIONAL, -- Need ON
quantityConfigUTRA QuantityConfigUTRA OPTIONAL, -- Need ON
quantityConfigGERAN QuantityConfigGERAN OPTIONAL, -- Need ON
quantityConfigCDMA2000 QuantityConfigCDMA2000 OPTIONAL, -- Need ON
...
}
QuantityConfigEUTRA ::= SEQUENCE {
filterCoefficientRSRP FilterCoefficient DEFAULT fc4,
filterCoefficientRSRQ FilterCoefficient DEFAULT fc4
}
QuantityConfigUTRA ::= SEQUENCE {
measQuantityUTRA-FDD ENUMERATED {cpich-RSCP, cpich-EcN0},
measQuantityUTRA-TDD ENUMERATED {pccpch-RSCP},
filterCoefficient FilterCoefficient DEFAULT fc4
}
QuantityConfigGERAN ::= SEQUENCE {
measQuantityGERAN ENUMERATED {rssi},
filterCoefficient FilterCoefficient DEFAULT fc2
}
QuantityConfigCDMA2000 ::= SEQUENCE {
measQuantityCDMA2000 ENUMERATED {pilotStrength, pilotPnPhaseAndPilotStrength}
}
ReportConfigEUTRA ::= SEQUENCE {
triggerType CHOICE {
event SEQUENCE {
eventId CHOICE {
eventA1 SEQUENCE {
a1-Threshold ThresholdEUTRA
},
eventA2 SEQUENCE {
a2-Threshold ThresholdEUTRA
},
eventA3 SEQUENCE {
a3-Offset INTEGER (-30..30),
reportOnLeave BOOLEAN
},
eventA4 SEQUENCE {
a4-Threshold ThresholdEUTRA
},
eventA5 SEQUENCE {
a5-Threshold1 ThresholdEUTRA,
a5-Threshold2 ThresholdEUTRA
},
...
},
hysteresis Hysteresis,
timeToTrigger TimeToTrigger
},
periodical SEQUENCE {
purpose ENUMERATED {
reportStrongestCells, reportCGI}
}
},
triggerQuantity ENUMERATED {rsrp, rsrq},
reportQuantity ENUMERATED {sameAsTriggerQuantity, both},
maxReportCells INTEGER (1..maxCellReport),
reportInterval ReportInterval,
reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
...
}
ThresholdEUTRA ::= CHOICE{
threshold-RSRP RSRP-Range,
threshold-RSRQ RSRQ-Range
}
ReportConfigId ::= INTEGER (1..maxReportConfigId)
ReportConfigInterRAT ::= SEQUENCE {
triggerType CHOICE {
event SEQUENCE {
eventId CHOICE {
eventB1 SEQUENCE {
b1-Threshold CHOICE {
b1-ThresholdUTRA ThresholdUTRA,
b1-ThresholdGERAN ThresholdGERAN,
b1-ThresholdCDMA2000 ThresholdCDMA2000
}
},
eventB2 SEQUENCE {
b2-Threshold1 ThresholdEUTRA,
b2-Threshold2 CHOICE {
b2-Threshold2UTRA ThresholdUTRA,
b2-Threshold2GERAN ThresholdGERAN,
b2-Threshold2CDMA2000 ThresholdCDMA2000
}
},
...
},
hysteresis Hysteresis,
timeToTrigger TimeToTrigger
},
periodical SEQUENCE {
purpose ENUMERATED {
reportStrongestCells,
reportStrongestCellsForSON,
reportCGI}
}
},
maxReportCells INTEGER (1..maxCellReport),
reportInterval ReportInterval,
reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity},
...
}
ThresholdUTRA ::= CHOICE{
utra-RSCP INTEGER (-5..91),
utra-EcN0 INTEGER (0..49)
}
ThresholdGERAN ::= INTEGER (0..63)
ThresholdCDMA2000 ::= INTEGER (0..63)
ReportConfigToAddModList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigToAddMod
ReportConfigToAddMod ::= SEQUENCE {
reportConfigId ReportConfigId,
reportConfig CHOICE {
reportConfigEUTRA ReportConfigEUTRA,
reportConfigInterRAT ReportConfigInterRAT
}
}
ReportInterval ::= ENUMERATED {
ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240,
min1, min6, min12, min30, min60, spare3, spare2, spare1}
RSRP-Range ::= INTEGER(0..97)
RSRQ-Range ::= INTEGER(0..34)
TimeToTrigger ::= ENUMERATED {
ms0, ms40, ms64, ms80, ms100, ms128, ms160, ms256,
ms320, ms480, ms512, ms640, ms1024, ms1280, ms2560,
ms5120}
C-RNTI ::= BIT STRING (SIZE (16))
DedicatedInfoCDMA2000 ::= OCTET STRING
DedicatedInfoNAS ::= OCTET STRING
FilterCoefficient ::= ENUMERATED {
fc0, fc1, fc2, fc3, fc4, fc5,
fc6, fc7, fc8, fc9, fc11, fc13,
fc15, fc17, fc19, spare1, ...}
MMEC ::= BIT STRING (SIZE (8))
NeighCellConfig ::= BIT STRING (SIZE (2))
RAND-CDMA2000 ::= BIT STRING (SIZE (32))
RAT-Type ::= ENUMERATED {
eutra, utra, geran-cs, geran-ps, cdma2000-1XRTT,
spare3, spare2, spare1, ...}
RRC-TransactionIdentifier ::= INTEGER (0..3)
S-TMSI ::= SEQUENCE {
mmec MMEC,
m-TMSI BIT STRING (SIZE (32))
}
UE-CapabilityRAT-ContainerList ::=SEQUENCE (SIZE (0..maxRAT-Capabilities)) OF UE-CapabilityRAT-Container
UE-CapabilityRAT-Container ::= SEQUENCE {
rat-Type RAT-Type,
ueCapabilityRAT-Container OCTET STRING
}
UE-EUTRA-Capability ::= SEQUENCE {
accessStratumRelease AccessStratumRelease,
ue-Category INTEGER (1..5),
pdcp-Parameters PDCP-Parameters,
phyLayerParameters PhyLayerParameters,
rf-Parameters RF-Parameters,
measParameters MeasParameters,
featureGroupIndicators BIT STRING (SIZE (32)) OPTIONAL,
interRAT-Parameters SEQUENCE {
utraFDD IRAT-ParametersUTRA-FDD OPTIONAL,
utraTDD128 IRAT-ParametersUTRA-TDD128 OPTIONAL,
utraTDD384 IRAT-ParametersUTRA-TDD384 OPTIONAL,
utraTDD768 IRAT-ParametersUTRA-TDD768 OPTIONAL,
geran IRAT-ParametersGERAN OPTIONAL,
cdma2000-HRPD IRAT-ParametersCDMA2000-HRPD OPTIONAL,
cdma2000-1xRTT IRAT-ParametersCDMA2000-1XRTT OPTIONAL
},
nonCriticalExtension SEQUENCE {} OPTIONAL
}
AccessStratumRelease ::= ENUMERATED {
rel8, spare7, spare6, spare5, spare4, spare3,
spare2, spare1, ...}
PDCP-Parameters ::= SEQUENCE {
supportedROHC-Profiles SEQUENCE {
profile0x0001 BOOLEAN,
profile0x0002 BOOLEAN,
profile0x0003 BOOLEAN,
profile0x0004 BOOLEAN,
profile0x0006 BOOLEAN,
profile0x0101 BOOLEAN,
profile0x0102 BOOLEAN,
profile0x0103 BOOLEAN,
profile0x0104 BOOLEAN
},
maxNumberROHC-ContextSessions ENUMERATED {
cs2, cs4, cs8, cs12, cs16, cs24, cs32,
cs48, cs64, cs128, cs256, cs512, cs1024,
cs16384, spare2, spare1} DEFAULT cs16,
...
}
PhyLayerParameters ::= SEQUENCE {
ue-TxAntennaSelectionSupported BOOLEAN,
ue-SpecificRefSigsSupported BOOLEAN
}
RF-Parameters ::= SEQUENCE {
supportedBandListEUTRA SupportedBandListEUTRA
}
SupportedBandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA
SupportedBandEUTRA ::= SEQUENCE {
bandEUTRA INTEGER (1..64),
halfDuplex BOOLEAN
}
MeasParameters ::= SEQUENCE {
bandListEUTRA BandListEUTRA
}
BandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF BandInfoEUTRA
BandInfoEUTRA ::= SEQUENCE {
interFreqBandList InterFreqBandList,
interRAT-BandList InterRAT-BandList OPTIONAL
}
InterFreqBandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterFreqBandInfo
InterFreqBandInfo ::= SEQUENCE {
interFreqNeedForGaps BOOLEAN
}
InterRAT-BandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterRAT-BandInfo
InterRAT-BandInfo ::= SEQUENCE {
interRAT-NeedForGaps BOOLEAN
}
IRAT-ParametersUTRA-FDD ::= SEQUENCE {
supportedBandListUTRA-FDD SupportedBandListUTRA-FDD
}
SupportedBandListUTRA-FDD ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-FDD
SupportedBandUTRA-FDD ::= ENUMERATED {
bandI, bandII, bandIII, bandIV, bandV, bandVI,
bandVII, bandVIII, bandIX, bandX, bandXI,
bandXII, bandXIII, bandXIV, bandXV, bandXVI, ...}
IRAT-ParametersUTRA-TDD128 ::= SEQUENCE {
supportedBandListUTRA-TDD128 SupportedBandListUTRA-TDD128
}
SupportedBandListUTRA-TDD128 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD128
SupportedBandUTRA-TDD128 ::= ENUMERATED {
a, b, c, d, e, f, g, h, i, j, k, l, m, n,
o, p, ...}
IRAT-ParametersUTRA-TDD384 ::= SEQUENCE {
supportedBandListUTRA-TDD384 SupportedBandListUTRA-TDD384
}
SupportedBandListUTRA-TDD384 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD384
SupportedBandUTRA-TDD384 ::= ENUMERATED {
a, b, c, d, e, f, g, h, i, j, k, l, m, n,
o, p, ...}
IRAT-ParametersUTRA-TDD768 ::= SEQUENCE {
supportedBandListUTRA-TDD768 SupportedBandListUTRA-TDD768
}
SupportedBandListUTRA-TDD768 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD768
SupportedBandUTRA-TDD768 ::= ENUMERATED {
a, b, c, d, e, f, g, h, i, j, k, l, m, n,
o, p, ...}
IRAT-ParametersGERAN ::= SEQUENCE {
supportedBandListGERAN SupportedBandListGERAN,
interRAT-PS-HO-ToGERAN BOOLEAN
}
SupportedBandListGERAN ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandGERAN
SupportedBandGERAN ::= ENUMERATED {
gsm450, gsm480, gsm710, gsm750, gsm810, gsm850,
gsm900P, gsm900E, gsm900R, gsm1800, gsm1900,
spare5, spare4, spare3, spare2, spare1, ...}
IRAT-ParametersCDMA2000-HRPD ::= SEQUENCE {
supportedBandListHRPD SupportedBandListHRPD,
tx-ConfigHRPD ENUMERATED {single, dual},
rx-ConfigHRPD ENUMERATED {single, dual}
}
SupportedBandListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000
IRAT-ParametersCDMA2000-1XRTT ::= SEQUENCE {
supportedBandList1XRTT SupportedBandList1XRTT,
tx-Config1XRTT ENUMERATED {single, dual},
rx-Config1XRTT ENUMERATED {single, dual}
}
SupportedBandList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000
UE-TimersAndConstants ::= SEQUENCE {
t300 ENUMERATED {
ms100, ms200, ms300, ms400, ms600, ms1000, ms1500,
ms2000},
t301 ENUMERATED {
ms100, ms200, ms300, ms400, ms600, ms1000, ms1500,
ms2000},
t310 ENUMERATED {
ms0, ms50, ms100, ms200, ms500, ms1000, ms2000},
n310 ENUMERATED {
n1, n2, n3, n4, n6, n8, n10, n20},
t311 ENUMERATED {
ms1000, ms3000, ms5000, ms10000, ms15000,
ms20000, ms30000},
n311 ENUMERATED {
n1, n2, n3, n4, n5, n6, n8, n10},
...
}
maxBands INTEGER ::= 64 -- Maximum number of bands listed in EUTRA UE caps
maxCDMA-BandClass INTEGER ::= 32 -- Maximum value of the CDMA band classes
maxCellBlack INTEGER ::= 16 -- Maximum number of blacklisted cells
-- listed in SIB type 4 and 5
maxCellInter INTEGER ::= 16 -- Maximum number of neighbouring inter-frequency
-- cells listed in SIB type 5
maxCellIntra INTEGER ::= 16 -- Maximum number of neighbouring intra-frequency
-- cells listed in SIB type 4
maxCellMeas INTEGER ::= 32 -- Maximum number of neighbouring cells within a
-- measurement object (incl blacklisted cells)
maxCellReport INTEGER ::= 8 -- Maximum number of reported cells
maxDRB INTEGER ::= 11 -- Maximum number of Data Radio Bearers
maxEARFCN INTEGER ::= 65535 -- Maximum value of EUTRA carrier fequency
maxFreq INTEGER ::= 8 -- Maximum number of EUTRA carrier frequencies
maxGERAN-SI INTEGER ::= 10 -- Maximum number of GERAN SI blocks that can be
-- provided as part of NACC information
maxGNFG INTEGER ::= 16 -- Maximum number of GERAN neighbour freq groups
maxMBSFN-Allocations INTEGER ::= 8 -- Maximum number of MBSFN frame allocations with
-- different offset
maxMCS-1 INTEGER ::= 16 -- Maximum number of PUCCH formats (MCS)
maxMeasId INTEGER ::= 32
maxObjectId INTEGER ::= 32
maxPageRec INTEGER ::= 16 --
maxPNOffset INTEGER ::= 511 -- Maximum number of CDMA2000 PNOffsets
maxRAT-Capabilities INTEGER ::= 8 -- Maximum number of interworking RATs (incl EUTRA)
maxReportConfigId INTEGER ::= 32
maxSIB INTEGER ::= 32 -- Maximum number of SIBs
maxSIB-1 INTEGER ::= 31
maxSI-Message INTEGER ::= 32 -- Maximum number of SI messages
maxUTRA-FDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA FDD carrier frequencies
maxUTRA-TDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA TDD carrier frequencies
END
EUTRA-UE-Variables DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
VarMeasConfig ::= SEQUENCE {
-- Measurement identities
measIdList MeasIdToAddModList OPTIONAL,
-- Measurement objects
measObjectList MeasObjectToAddModList OPTIONAL,
-- Reporting configurations
reportConfigList ReportConfigToAddModList OPTIONAL,
-- Other parameters
quantityConfig QuantityConfig OPTIONAL,
s-Measure RSRP-Range OPTIONAL,
speedStatePars CHOICE {
release NULL,
setup SEQUENCE {
mobilityStateParameters MobilityStateParameters,
timeToTrigger-SF SpeedStateScaleFactors
}
} OPTIONAL
}
VarMeasReportList ::= SEQUENCE (SIZE (1..maxMeasId)) OF VarMeasReport
VarMeasReport ::= SEQUENCE {
-- List of measurement that have been triggered
measId MeasId,
cellsTriggeredList CellsTriggeredList OPTIONAL,
numberOfReportsSent INTEGER
}
CellsTriggeredList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF PhysCellId
VarShortMAC-Input ::= SEQUENCE {
cellIdentity CellIdentity,
physCellId PhysCellId,
c-RNTI C-RNTI
}
END
ASN_MODULE_SOURCES= \
BCCH-BCH-Message.c \
BCCH-BCH-MessageType.c \
BCCH-DL-SCH-Message.c \
BCCH-DL-SCH-MessageType.c \
PCCH-Message.c \
PCCH-MessageType.c \
DL-CCCH-Message.c \
DL-CCCH-MessageType.c \
DL-DCCH-Message.c \
DL-DCCH-MessageType.c \
UL-CCCH-Message.c \
UL-CCCH-MessageType.c \
UL-DCCH-Message.c \
UL-DCCH-MessageType.c \
CounterCheck.c \
CounterCheck-r8-IEs.c \
DRB-CountMSB-InfoList.c \
DRB-CountMSB-Info.c \
CounterCheckResponse.c \
CounterCheckResponse-r8-IEs.c \
DRB-CountInfoList.c \
DRB-CountInfo.c \
CSFBParametersRequestCDMA2000.c \
CSFBParametersRequestCDMA2000-r8-IEs.c \
CSFBParametersResponseCDMA2000.c \
CSFBParametersResponseCDMA2000-r8-IEs.c \
DLInformationTransfer.c \
DLInformationTransfer-r8-IEs.c \
HandoverFromEUTRAPreparationRequest.c \
HandoverFromEUTRAPreparationRequest-r8-IEs.c \
MasterInformationBlock.c \
MeasurementReport.c \
MeasurementReport-r8-IEs.c \
MobilityFromEUTRACommand.c \
MobilityFromEUTRACommand-r8-IEs.c \
Handover.c \
CellChangeOrder.c \
SI-OrPSI-GERAN.c \
SystemInfoListGERAN.c \
Paging.c \
PagingRecordList.c \
PagingRecord.c \
PagingUE-Identity.c \
IMSI.c \
IMSI-Digit.c \
RRCConnectionReconfiguration.c \
RRCConnectionReconfiguration-r8-IEs.c \
SecurityConfigHO.c \
RRCConnectionReconfigurationComplete.c \
RRCConnectionReconfigurationComplete-r8-IEs.c \
RRCConnectionReestablishment.c \
RRCConnectionReestablishment-r8-IEs.c \
RRCConnectionReestablishmentComplete.c \
RRCConnectionReestablishmentComplete-r8-IEs.c \
RRCConnectionReestablishmentReject.c \
RRCConnectionReestablishmentReject-r8-IEs.c \
RRCConnectionReestablishmentRequest.c \
RRCConnectionReestablishmentRequest-r8-IEs.c \
ReestabUE-Identity.c \
ReestablishmentCause.c \
RRCConnectionReject.c \
RRCConnectionReject-r8-IEs.c \
RRCConnectionRelease.c \
RRCConnectionRelease-r8-IEs.c \
ReleaseCause.c \
RedirectedCarrierInfo.c \
IdleModeMobilityControlInfo.c \
FreqPriorityListEUTRA.c \
FreqPriorityEUTRA.c \
FreqsPriorityListGERAN.c \
FreqsPriorityGERAN.c \
FreqPriorityListUTRA-FDD.c \
FreqPriorityUTRA-FDD.c \
FreqPriorityListUTRA-TDD.c \
FreqPriorityUTRA-TDD.c \
BandClassPriorityListHRPD.c \
BandClassPriorityHRPD.c \
BandClassPriorityList1XRTT.c \
BandClassPriority1XRTT.c \
RRCConnectionRequest.c \
RRCConnectionRequest-r8-IEs.c \
InitialUE-Identity.c \
EstablishmentCause.c \
RRCConnectionSetup.c \
RRCConnectionSetup-r8-IEs.c \
RRCConnectionSetupComplete.c \
RRCConnectionSetupComplete-r8-IEs.c \
RegisteredMME.c \
SecurityModeCommand.c \
SecurityModeCommand-r8-IEs.c \
SecurityConfigSMC.c \
SecurityModeComplete.c \
SecurityModeComplete-r8-IEs.c \
SecurityModeFailure.c \
SecurityModeFailure-r8-IEs.c \
SystemInformation.c \
SystemInformation-r8-IEs.c \
SystemInformationBlockType1.c \
PLMN-IdentityList.c \
PLMN-IdentityInfo.c \
SchedulingInfoList.c \
SchedulingInfo.c \
SIB-MappingInfo.c \
SIB-Type.c \
UECapabilityEnquiry.c \
UECapabilityEnquiry-r8-IEs.c \
UE-CapabilityRequest.c \
UECapabilityInformation.c \
UECapabilityInformation-r8-IEs.c \
ULHandoverPreparationTransfer.c \
ULHandoverPreparationTransfer-r8-IEs.c \
ULInformationTransfer.c \
ULInformationTransfer-r8-IEs.c \
SystemInformationBlockType2.c \
AC-BarringConfig.c \
MBSFN-SubframeConfigList.c \
MBSFN-SubframeConfig.c \
SystemInformationBlockType3.c \
SystemInformationBlockType4.c \
IntraFreqNeighCellList.c \
IntraFreqNeighCellInfo.c \
IntraFreqBlackCellList.c \
SystemInformationBlockType5.c \
InterFreqCarrierFreqList.c \
InterFreqCarrierFreqInfo.c \
InterFreqNeighCellList.c \
InterFreqNeighCellInfo.c \
InterFreqBlackCellList.c \
SystemInformationBlockType6.c \
CarrierFreqListUTRA-FDD.c \
CarrierFreqUTRA-FDD.c \
CarrierFreqListUTRA-TDD.c \
CarrierFreqUTRA-TDD.c \
SystemInformationBlockType7.c \
CarrierFreqsInfoListGERAN.c \
CarrierFreqsInfoGERAN.c \
SystemInformationBlockType8.c \
CellReselectionParametersCDMA2000.c \
NeighCellListCDMA2000.c \
NeighCellCDMA2000.c \
NeighCellsPerBandclassListCDMA2000.c \
NeighCellsPerBandclassCDMA2000.c \
PhysCellIdListCDMA2000.c \
BandClassListCDMA2000.c \
BandClassInfoCDMA2000.c \
SystemInformationBlockType9.c \
SystemInformationBlockType10.c \
SystemInformationBlockType11.c \
AntennaInfoCommon.c \
AntennaInfoDedicated.c \
CQI-ReportConfig.c \
CQI-ReportPeriodic.c \
DRB-Identity.c \
LogicalChannelConfig.c \
MAC-MainConfig.c \
DRX-Config.c \
PDCP-Config.c \
PDSCH-ConfigCommon.c \
PDSCH-ConfigDedicated.c \
PHICH-Config.c \
PhysicalConfigDedicated.c \
P-Max.c \
PRACH-ConfigSIB.c \
PRACH-Config.c \
PRACH-ConfigInfo.c \
PresenceAntennaPort1.c \
PUCCH-ConfigCommon.c \
PUCCH-ConfigDedicated.c \
PUSCH-ConfigCommon.c \
PUSCH-ConfigDedicated.c \
UL-ReferenceSignalsPUSCH.c \
RACH-ConfigCommon.c \
RACH-ConfigDedicated.c \
RadioResourceConfigCommonSIB.c \
RadioResourceConfigCommon.c \
BCCH-Config.c \
PCCH-Config.c \
UL-CyclicPrefixLength.c \
RadioResourceConfigDedicated.c \
SRB-ToAddModList.c \
SRB-ToAddMod.c \
DRB-ToAddModList.c \
DRB-ToAddMod.c \
DRB-ToReleaseList.c \
RLC-Config.c \
UL-AM-RLC.c \
DL-AM-RLC.c \
UL-UM-RLC.c \
DL-UM-RLC.c \
SN-FieldLength.c \
T-PollRetransmit.c \
PollPDU.c \
PollByte.c \
T-Reordering.c \
T-StatusProhibit.c \
SchedulingRequestConfig.c \
SoundingRS-UL-ConfigCommon.c \
SoundingRS-UL-ConfigDedicated.c \
SPS-Config.c \
SPS-ConfigDL.c \
SPS-ConfigUL.c \
N1-PUCCH-AN-PersistentList.c \
TDD-Config.c \
TimeAlignmentTimer.c \
TPC-PDCCH-Config.c \
TPC-Index.c \
UplinkPowerControlCommon.c \
UplinkPowerControlDedicated.c \
DeltaFList-PUCCH.c \
NextHopChainingCount.c \
SecurityAlgorithmConfig.c \
ShortMAC-I.c \
AdditionalSpectrumEmission.c \
ARFCN-ValueCDMA2000.c \
ARFCN-ValueEUTRA.c \
ARFCN-ValueGERAN.c \
ARFCN-ValueUTRA.c \
BandclassCDMA2000.c \
BandIndicatorGERAN.c \
CarrierFreqCDMA2000.c \
CarrierFreqGERAN.c \
CarrierFreqsGERAN.c \
ExplicitListOfARFCNs.c \
CDMA2000-Type.c \
CellIdentity.c \
CellIndexList.c \
CellIndex.c \
CellReselectionPriority.c \
CSFB-RegistrationParam1XRTT.c \
CellGlobalIdEUTRA.c \
CellGlobalIdUTRA.c \
CellGlobalIdGERAN.c \
CellGlobalIdCDMA2000.c \
MobilityControlInfo.c \
CarrierBandwidthEUTRA.c \
CarrierFreqEUTRA.c \
MobilityParametersCDMA2000.c \
MobilityStateParameters.c \
PhysCellId.c \
PhysCellIdRange.c \
PhysCellIdCDMA2000.c \
PhysCellIdGERAN.c \
PhysCellIdUTRA-FDD.c \
PhysCellIdUTRA-TDD.c \
PLMN-Identity.c \
MCC.c \
MNC.c \
MCC-MNC-Digit.c \
PreRegistrationInfoHRPD.c \
SecondaryPreRegistrationZoneIdListHRPD.c \
PreRegistrationZoneIdHRPD.c \
Q-RxLevMin.c \
Q-OffsetRange.c \
Q-OffsetRangeInterRAT.c \
ReselectionThreshold.c \
SpeedStateScaleFactors.c \
SystemTimeInfoCDMA2000.c \
TrackingAreaCode.c \
T-Reselection.c \
AllowedMeasBandwidth.c \
Hysteresis.c \
MeasConfig.c \
MeasIdToRemoveList.c \
MeasObjectToRemoveList.c \
ReportConfigToRemoveList.c \
MeasGapConfig.c \
MeasId.c \
MeasIdToAddModList.c \
MeasIdToAddMod.c \
MeasObjectCDMA2000.c \
CellsToAddModListCDMA2000.c \
CellsToAddModCDMA2000.c \
MeasObjectEUTRA.c \
CellsToAddModList.c \
CellsToAddMod.c \
BlackCellsToAddModList.c \
BlackCellsToAddMod.c \
MeasObjectGERAN.c \
MeasObjectId.c \
MeasObjectToAddModList.c \
MeasObjectToAddMod.c \
MeasObjectUTRA.c \
CellsToAddModListUTRA-FDD.c \
CellsToAddModUTRA-FDD.c \
CellsToAddModListUTRA-TDD.c \
CellsToAddModUTRA-TDD.c \
MeasResults.c \
MeasResultListEUTRA.c \
MeasResultEUTRA.c \
MeasResultListUTRA.c \
MeasResultUTRA.c \
MeasResultListGERAN.c \
MeasResultGERAN.c \
MeasResultsCDMA2000.c \
MeasResultListCDMA2000.c \
MeasResultCDMA2000.c \
PLMN-IdentityList2.c \
QuantityConfig.c \
QuantityConfigEUTRA.c \
QuantityConfigUTRA.c \
QuantityConfigGERAN.c \
QuantityConfigCDMA2000.c \
ReportConfigEUTRA.c \
ThresholdEUTRA.c \
ReportConfigId.c \
ReportConfigInterRAT.c \
ThresholdUTRA.c \
ThresholdGERAN.c \
ThresholdCDMA2000.c \
ReportConfigToAddModList.c \
ReportConfigToAddMod.c \
ReportInterval.c \
RSRP-Range.c \
RSRQ-Range.c \
TimeToTrigger.c \
C-RNTI.c \
DedicatedInfoCDMA2000.c \
DedicatedInfoNAS.c \
FilterCoefficient.c \
MMEC.c \
NeighCellConfig.c \
RAND-CDMA2000.c \
RAT-Type.c \
RRC-TransactionIdentifier.c \
S-TMSI.c \
UE-CapabilityRAT-ContainerList.c \
UE-CapabilityRAT-Container.c \
UE-EUTRA-Capability.c \
AccessStratumRelease.c \
PDCP-Parameters.c \
PhyLayerParameters.c \
RF-Parameters.c \
SupportedBandListEUTRA.c \
SupportedBandEUTRA.c \
MeasParameters.c \
BandListEUTRA.c \
BandInfoEUTRA.c \
InterFreqBandList.c \
InterFreqBandInfo.c \
InterRAT-BandList.c \
InterRAT-BandInfo.c \
IRAT-ParametersUTRA-FDD.c \
SupportedBandListUTRA-FDD.c \
SupportedBandUTRA-FDD.c \
IRAT-ParametersUTRA-TDD128.c \
SupportedBandListUTRA-TDD128.c \
SupportedBandUTRA-TDD128.c \
IRAT-ParametersUTRA-TDD384.c \
SupportedBandListUTRA-TDD384.c \
SupportedBandUTRA-TDD384.c \
IRAT-ParametersUTRA-TDD768.c \
SupportedBandListUTRA-TDD768.c \
SupportedBandUTRA-TDD768.c \
IRAT-ParametersGERAN.c \
SupportedBandListGERAN.c \
SupportedBandGERAN.c \
IRAT-ParametersCDMA2000-HRPD.c \
SupportedBandListHRPD.c \
IRAT-ParametersCDMA2000-1XRTT.c \
SupportedBandList1XRTT.c \
UE-TimersAndConstants.c
ASN_MODULE_HEADERS= \
BCCH-BCH-Message.h \
BCCH-BCH-MessageType.h \
BCCH-DL-SCH-Message.h \
BCCH-DL-SCH-MessageType.h \
PCCH-Message.h \
PCCH-MessageType.h \
DL-CCCH-Message.h \
DL-CCCH-MessageType.h \
DL-DCCH-Message.h \
DL-DCCH-MessageType.h \
UL-CCCH-Message.h \
UL-CCCH-MessageType.h \
UL-DCCH-Message.h \
UL-DCCH-MessageType.h \
CounterCheck.h \
CounterCheck-r8-IEs.h \
DRB-CountMSB-InfoList.h \
DRB-CountMSB-Info.h \
CounterCheckResponse.h \
CounterCheckResponse-r8-IEs.h \
DRB-CountInfoList.h \
DRB-CountInfo.h \
CSFBParametersRequestCDMA2000.h \
CSFBParametersRequestCDMA2000-r8-IEs.h \
CSFBParametersResponseCDMA2000.h \
CSFBParametersResponseCDMA2000-r8-IEs.h \
DLInformationTransfer.h \
DLInformationTransfer-r8-IEs.h \
HandoverFromEUTRAPreparationRequest.h \
HandoverFromEUTRAPreparationRequest-r8-IEs.h \
MasterInformationBlock.h \
MeasurementReport.h \
MeasurementReport-r8-IEs.h \
MobilityFromEUTRACommand.h \
MobilityFromEUTRACommand-r8-IEs.h \
Handover.h \
CellChangeOrder.h \
SI-OrPSI-GERAN.h \
SystemInfoListGERAN.h \
Paging.h \
PagingRecordList.h \
PagingRecord.h \
PagingUE-Identity.h \
IMSI.h \
IMSI-Digit.h \
RRCConnectionReconfiguration.h \
RRCConnectionReconfiguration-r8-IEs.h \
SecurityConfigHO.h \
RRCConnectionReconfigurationComplete.h \
RRCConnectionReconfigurationComplete-r8-IEs.h \
RRCConnectionReestablishment.h \
RRCConnectionReestablishment-r8-IEs.h \
RRCConnectionReestablishmentComplete.h \
RRCConnectionReestablishmentComplete-r8-IEs.h \
RRCConnectionReestablishmentReject.h \
RRCConnectionReestablishmentReject-r8-IEs.h \
RRCConnectionReestablishmentRequest.h \
RRCConnectionReestablishmentRequest-r8-IEs.h \
ReestabUE-Identity.h \
ReestablishmentCause.h \
RRCConnectionReject.h \
RRCConnectionReject-r8-IEs.h \
RRCConnectionRelease.h \
RRCConnectionRelease-r8-IEs.h \
ReleaseCause.h \
RedirectedCarrierInfo.h \
IdleModeMobilityControlInfo.h \
FreqPriorityListEUTRA.h \
FreqPriorityEUTRA.h \
FreqsPriorityListGERAN.h \
FreqsPriorityGERAN.h \
FreqPriorityListUTRA-FDD.h \
FreqPriorityUTRA-FDD.h \
FreqPriorityListUTRA-TDD.h \
FreqPriorityUTRA-TDD.h \
BandClassPriorityListHRPD.h \
BandClassPriorityHRPD.h \
BandClassPriorityList1XRTT.h \
BandClassPriority1XRTT.h \
RRCConnectionRequest.h \
RRCConnectionRequest-r8-IEs.h \
InitialUE-Identity.h \
EstablishmentCause.h \
RRCConnectionSetup.h \
RRCConnectionSetup-r8-IEs.h \
RRCConnectionSetupComplete.h \
RRCConnectionSetupComplete-r8-IEs.h \
RegisteredMME.h \
SecurityModeCommand.h \
SecurityModeCommand-r8-IEs.h \
SecurityConfigSMC.h \
SecurityModeComplete.h \
SecurityModeComplete-r8-IEs.h \
SecurityModeFailure.h \
SecurityModeFailure-r8-IEs.h \
SystemInformation.h \
SystemInformation-r8-IEs.h \
SystemInformationBlockType1.h \
PLMN-IdentityList.h \
PLMN-IdentityInfo.h \
SchedulingInfoList.h \
SchedulingInfo.h \
SIB-MappingInfo.h \
SIB-Type.h \
UECapabilityEnquiry.h \
UECapabilityEnquiry-r8-IEs.h \
UE-CapabilityRequest.h \
UECapabilityInformation.h \
UECapabilityInformation-r8-IEs.h \
ULHandoverPreparationTransfer.h \
ULHandoverPreparationTransfer-r8-IEs.h \
ULInformationTransfer.h \
ULInformationTransfer-r8-IEs.h \
SystemInformationBlockType2.h \
AC-BarringConfig.h \
MBSFN-SubframeConfigList.h \
MBSFN-SubframeConfig.h \
SystemInformationBlockType3.h \
SystemInformationBlockType4.h \
IntraFreqNeighCellList.h \
IntraFreqNeighCellInfo.h \
IntraFreqBlackCellList.h \
SystemInformationBlockType5.h \
InterFreqCarrierFreqList.h \
InterFreqCarrierFreqInfo.h \
InterFreqNeighCellList.h \
InterFreqNeighCellInfo.h \
InterFreqBlackCellList.h \
SystemInformationBlockType6.h \
CarrierFreqListUTRA-FDD.h \
CarrierFreqUTRA-FDD.h \
CarrierFreqListUTRA-TDD.h \
CarrierFreqUTRA-TDD.h \
SystemInformationBlockType7.h \
CarrierFreqsInfoListGERAN.h \
CarrierFreqsInfoGERAN.h \
SystemInformationBlockType8.h \
CellReselectionParametersCDMA2000.h \
NeighCellListCDMA2000.h \
NeighCellCDMA2000.h \
NeighCellsPerBandclassListCDMA2000.h \
NeighCellsPerBandclassCDMA2000.h \
PhysCellIdListCDMA2000.h \
BandClassListCDMA2000.h \
BandClassInfoCDMA2000.h \
SystemInformationBlockType9.h \
SystemInformationBlockType10.h \
SystemInformationBlockType11.h \
AntennaInfoCommon.h \
AntennaInfoDedicated.h \
CQI-ReportConfig.h \
CQI-ReportPeriodic.h \
DRB-Identity.h \
LogicalChannelConfig.h \
MAC-MainConfig.h \
DRX-Config.h \
PDCP-Config.h \
PDSCH-ConfigCommon.h \
PDSCH-ConfigDedicated.h \
PHICH-Config.h \
PhysicalConfigDedicated.h \
P-Max.h \
PRACH-ConfigSIB.h \
PRACH-Config.h \
PRACH-ConfigInfo.h \
PresenceAntennaPort1.h \
PUCCH-ConfigCommon.h \
PUCCH-ConfigDedicated.h \
PUSCH-ConfigCommon.h \
PUSCH-ConfigDedicated.h \
UL-ReferenceSignalsPUSCH.h \
RACH-ConfigCommon.h \
RACH-ConfigDedicated.h \
RadioResourceConfigCommonSIB.h \
RadioResourceConfigCommon.h \
BCCH-Config.h \
PCCH-Config.h \
UL-CyclicPrefixLength.h \
RadioResourceConfigDedicated.h \
SRB-ToAddModList.h \
SRB-ToAddMod.h \
DRB-ToAddModList.h \
DRB-ToAddMod.h \
DRB-ToReleaseList.h \
RLC-Config.h \
UL-AM-RLC.h \
DL-AM-RLC.h \
UL-UM-RLC.h \
DL-UM-RLC.h \
SN-FieldLength.h \
T-PollRetransmit.h \
PollPDU.h \
PollByte.h \
T-Reordering.h \
T-StatusProhibit.h \
SchedulingRequestConfig.h \
SoundingRS-UL-ConfigCommon.h \
SoundingRS-UL-ConfigDedicated.h \
SPS-Config.h \
SPS-ConfigDL.h \
SPS-ConfigUL.h \
N1-PUCCH-AN-PersistentList.h \
TDD-Config.h \
TimeAlignmentTimer.h \
TPC-PDCCH-Config.h \
TPC-Index.h \
UplinkPowerControlCommon.h \
UplinkPowerControlDedicated.h \
DeltaFList-PUCCH.h \
NextHopChainingCount.h \
SecurityAlgorithmConfig.h \
ShortMAC-I.h \
AdditionalSpectrumEmission.h \
ARFCN-ValueCDMA2000.h \
ARFCN-ValueEUTRA.h \
ARFCN-ValueGERAN.h \
ARFCN-ValueUTRA.h \
BandclassCDMA2000.h \
BandIndicatorGERAN.h \
CarrierFreqCDMA2000.h \
CarrierFreqGERAN.h \
CarrierFreqsGERAN.h \
ExplicitListOfARFCNs.h \
CDMA2000-Type.h \
CellIdentity.h \
CellIndexList.h \
CellIndex.h \
CellReselectionPriority.h \
CSFB-RegistrationParam1XRTT.h \
CellGlobalIdEUTRA.h \
CellGlobalIdUTRA.h \
CellGlobalIdGERAN.h \
CellGlobalIdCDMA2000.h \
MobilityControlInfo.h \
CarrierBandwidthEUTRA.h \
CarrierFreqEUTRA.h \
MobilityParametersCDMA2000.h \
MobilityStateParameters.h \
PhysCellId.h \
PhysCellIdRange.h \
PhysCellIdCDMA2000.h \
PhysCellIdGERAN.h \
PhysCellIdUTRA-FDD.h \
PhysCellIdUTRA-TDD.h \
PLMN-Identity.h \
MCC.h \
MNC.h \
MCC-MNC-Digit.h \
PreRegistrationInfoHRPD.h \
SecondaryPreRegistrationZoneIdListHRPD.h \
PreRegistrationZoneIdHRPD.h \
Q-RxLevMin.h \
Q-OffsetRange.h \
Q-OffsetRangeInterRAT.h \
ReselectionThreshold.h \
SpeedStateScaleFactors.h \
SystemTimeInfoCDMA2000.h \
TrackingAreaCode.h \
T-Reselection.h \
AllowedMeasBandwidth.h \
Hysteresis.h \
MeasConfig.h \
MeasIdToRemoveList.h \
MeasObjectToRemoveList.h \
ReportConfigToRemoveList.h \
MeasGapConfig.h \
MeasId.h \
MeasIdToAddModList.h \
MeasIdToAddMod.h \
MeasObjectCDMA2000.h \
CellsToAddModListCDMA2000.h \
CellsToAddModCDMA2000.h \
MeasObjectEUTRA.h \
CellsToAddModList.h \
CellsToAddMod.h \
BlackCellsToAddModList.h \
BlackCellsToAddMod.h \
MeasObjectGERAN.h \
MeasObjectId.h \
MeasObjectToAddModList.h \
MeasObjectToAddMod.h \
MeasObjectUTRA.h \
CellsToAddModListUTRA-FDD.h \
CellsToAddModUTRA-FDD.h \
CellsToAddModListUTRA-TDD.h \
CellsToAddModUTRA-TDD.h \
MeasResults.h \
MeasResultListEUTRA.h \
MeasResultEUTRA.h \
MeasResultListUTRA.h \
MeasResultUTRA.h \
MeasResultListGERAN.h \
MeasResultGERAN.h \
MeasResultsCDMA2000.h \
MeasResultListCDMA2000.h \
MeasResultCDMA2000.h \
PLMN-IdentityList2.h \
QuantityConfig.h \
QuantityConfigEUTRA.h \
QuantityConfigUTRA.h \
QuantityConfigGERAN.h \
QuantityConfigCDMA2000.h \
ReportConfigEUTRA.h \
ThresholdEUTRA.h \
ReportConfigId.h \
ReportConfigInterRAT.h \
ThresholdUTRA.h \
ThresholdGERAN.h \
ThresholdCDMA2000.h \
ReportConfigToAddModList.h \
ReportConfigToAddMod.h \
ReportInterval.h \
RSRP-Range.h \
RSRQ-Range.h \
TimeToTrigger.h \
C-RNTI.h \
DedicatedInfoCDMA2000.h \
DedicatedInfoNAS.h \
FilterCoefficient.h \
MMEC.h \
NeighCellConfig.h \
RAND-CDMA2000.h \
RAT-Type.h \
RRC-TransactionIdentifier.h \
S-TMSI.h \
UE-CapabilityRAT-ContainerList.h \
UE-CapabilityRAT-Container.h \
UE-EUTRA-Capability.h \
AccessStratumRelease.h \
PDCP-Parameters.h \
PhyLayerParameters.h \
RF-Parameters.h \
SupportedBandListEUTRA.h \
SupportedBandEUTRA.h \
MeasParameters.h \
BandListEUTRA.h \
BandInfoEUTRA.h \
InterFreqBandList.h \
InterFreqBandInfo.h \
InterRAT-BandList.h \
InterRAT-BandInfo.h \
IRAT-ParametersUTRA-FDD.h \
SupportedBandListUTRA-FDD.h \
SupportedBandUTRA-FDD.h \
IRAT-ParametersUTRA-TDD128.h \
SupportedBandListUTRA-TDD128.h \
SupportedBandUTRA-TDD128.h \
IRAT-ParametersUTRA-TDD384.h \
SupportedBandListUTRA-TDD384.h \
SupportedBandUTRA-TDD384.h \
IRAT-ParametersUTRA-TDD768.h \
SupportedBandListUTRA-TDD768.h \
SupportedBandUTRA-TDD768.h \
IRAT-ParametersGERAN.h \
SupportedBandListGERAN.h \
SupportedBandGERAN.h \
IRAT-ParametersCDMA2000-HRPD.h \
SupportedBandListHRPD.h \
IRAT-ParametersCDMA2000-1XRTT.h \
SupportedBandList1XRTT.h \
UE-TimersAndConstants.h
ASN_MODULE_HEADERS+=BOOLEAN.h
ASN_MODULE_SOURCES+=BOOLEAN.c
ASN_MODULE_HEADERS+=INTEGER.h
ASN_MODULE_HEADERS+=NativeEnumerated.h
ASN_MODULE_SOURCES+=INTEGER.c
ASN_MODULE_HEADERS+=NULL.h
ASN_MODULE_SOURCES+=NULL.c
ASN_MODULE_SOURCES+=NativeEnumerated.c
ASN_MODULE_HEADERS+=NativeInteger.h
ASN_MODULE_SOURCES+=NativeInteger.c
ASN_MODULE_HEADERS+=asn_SEQUENCE_OF.h
ASN_MODULE_SOURCES+=asn_SEQUENCE_OF.c
ASN_MODULE_HEADERS+=asn_SET_OF.h
ASN_MODULE_SOURCES+=asn_SET_OF.c
ASN_MODULE_HEADERS+=constr_CHOICE.h
ASN_MODULE_SOURCES+=constr_CHOICE.c
ASN_MODULE_HEADERS+=constr_SEQUENCE.h
ASN_MODULE_SOURCES+=constr_SEQUENCE.c
ASN_MODULE_HEADERS+=constr_SEQUENCE_OF.h
ASN_MODULE_SOURCES+=constr_SEQUENCE_OF.c
ASN_MODULE_HEADERS+=constr_SET_OF.h
ASN_MODULE_SOURCES+=constr_SET_OF.c
ASN_MODULE_HEADERS+=asn_application.h
ASN_MODULE_HEADERS+=asn_system.h
ASN_MODULE_HEADERS+=asn_codecs.h
ASN_MODULE_HEADERS+=asn_internal.h
ASN_MODULE_HEADERS+=OCTET_STRING.h
ASN_MODULE_SOURCES+=OCTET_STRING.c
ASN_MODULE_HEADERS+=BIT_STRING.h
ASN_MODULE_SOURCES+=BIT_STRING.c
ASN_MODULE_SOURCES+=asn_codecs_prim.c
ASN_MODULE_HEADERS+=asn_codecs_prim.h
ASN_MODULE_HEADERS+=ber_tlv_length.h
ASN_MODULE_SOURCES+=ber_tlv_length.c
ASN_MODULE_HEADERS+=ber_tlv_tag.h
ASN_MODULE_SOURCES+=ber_tlv_tag.c
ASN_MODULE_HEADERS+=ber_decoder.h
ASN_MODULE_SOURCES+=ber_decoder.c
ASN_MODULE_HEADERS+=der_encoder.h
ASN_MODULE_SOURCES+=der_encoder.c
ASN_MODULE_HEADERS+=constr_TYPE.h
ASN_MODULE_SOURCES+=constr_TYPE.c
ASN_MODULE_HEADERS+=constraints.h
ASN_MODULE_SOURCES+=constraints.c
ASN_MODULE_HEADERS+=xer_support.h
ASN_MODULE_SOURCES+=xer_support.c
ASN_MODULE_HEADERS+=xer_decoder.h
ASN_MODULE_SOURCES+=xer_decoder.c
ASN_MODULE_HEADERS+=xer_encoder.h
ASN_MODULE_SOURCES+=xer_encoder.c
ASN_MODULE_HEADERS+=per_support.h
ASN_MODULE_SOURCES+=per_support.c
ASN_MODULE_HEADERS+=per_decoder.h
ASN_MODULE_SOURCES+=per_decoder.c
ASN_MODULE_HEADERS+=per_encoder.h
ASN_MODULE_SOURCES+=per_encoder.c
ASN_MODULE_HEADERS+=per_opentype.h
ASN_MODULE_SOURCES+=per_opentype.c
ASN_CONVERTER_SOURCES+=converter-sample.c
lib_LTLIBRARIES=libsomething.la
libsomething_la_SOURCES=$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)
# This file may be used as an input for make(3)
# Remove the lines below to convert it into a pure .am file
TARGET = progname
CFLAGS += -I.
OBJS=${ASN_MODULE_SOURCES:.c=.o} ${ASN_CONVERTER_SOURCES:.c=.o}
all: $(TARGET)
$(TARGET): ${OBJS}
$(CC) $(CFLAGS) -o $(TARGET) ${OBJS} $(LDFLAGS) $(LIBS)
.SUFFIXES:
.SUFFIXES: .c .o
.c.o:
$(CC) $(CFLAGS) -o $@ -c $<
clean:
rm -f $(TARGET)
rm -f $(OBJS)
regen: regenerate-from-asn1-source
regenerate-from-asn1-source:
asn1c -gen-PER -fcompound-names -fnative-types -fskeletons-copy ./ASN1_files/EUTRA-RRC-Definitions.asn
noinst_LIBRARIES = libsqlite.a
libsqlite_a_SOURCES = sqlite3.c sqlite3.h
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
noinst_LIBRARIES = libtcpip.a
libtcpip_a_SOURCES = storage.h storage.cpp
/************************************************************************
** This file is part of the network simulator Shawn. **
** Copyright (C) 2004-2007 by the SwarmNet (www.swarmnet.de) project **
** Shawn is free software; you can redistribute it and/or modify it **
** under the terms of the BSD License. Refer to the shawn-licence.txt **
** file in the root of the Shawn source tree for further details. **
************************************************************************/
#ifdef SHAWN
#include <apps/tcpip/socket.h>
#include <sys/simulation/simulation_controller.h>
#else
#include "socket.h"
#endif
#ifdef BUILD_TCPIP
#ifndef WIN32
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#include <fcntl.h>
#else
#ifdef ERROR
#undef ERROR
#endif
#include <winsock2.h>
#ifndef vsnprintf
#define vsnprintf _vsnprintf
#endif
#endif
#include <cstdio>
#include <cstring>
#include <cstdarg>
#include <string>
#include <vector>
#include <string>
#include <algorithm>
#include <string.h>
using namespace std;
#ifdef SHAWN
extern "C" void init_tcpip( shawn::SimulationController& sc )
{
// std::cout << "tcpip init" << std::endl;
}
#endif
namespace tcpip
{
#ifdef WIN32
bool Socket::init_windows_sockets_ = true;
bool Socket::windows_sockets_initialized_ = false;
int Socket::instance_count_ = 0;
#endif
// ----------------------------------------------------------------------
Socket::
Socket(std::string host, int port)
: host_( host ),
port_( port ),
socket_(-1),
server_socket_(-1),
blocking_(true)
{
verbose_ = false;
init();
}
// ----------------------------------------------------------------------
Socket::
Socket(int port)
: host_(""),
port_( port ),
socket_(-1),
server_socket_(-1),
blocking_(true)
{
verbose_ = false;
init();
}
// ----------------------------------------------------------------------
void
Socket::
init()
{
#ifdef WIN32
instance_count_++;
if( init_windows_sockets_ && !windows_sockets_initialized_ )
{
WSAData wsaData;
if( WSAStartup(MAKEWORD(1, 1), &wsaData) != 0 )
BailOnSocketError("Unable to init WSA Sockets");
windows_sockets_initialized_ = true;
}
#endif
}
// ----------------------------------------------------------------------
Socket::
~Socket()
{
// Close first an existing client connection ...
close();
#ifdef WIN32
instance_count_--;
#endif
// ... then the server socket
if( server_socket_ >= 0 )
{
#ifdef WIN32
::closesocket( server_socket_ );
#else
::close( server_socket_ );
#endif
server_socket_ = -1;
}
#ifdef WIN32
if( server_socket_ == -1 && socket_ == -1
&& init_windows_sockets_ && instance_count_ == 0 )
WSACleanup();
windows_sockets_initialized_ = false;
#endif
}
// ----------------------------------------------------------------------
void
Socket::
BailOnSocketError( std::string context)
const throw( SocketException )
{
#ifdef WIN32
int e = WSAGetLastError();
std::string msg = GetWinsockErrorString( e );
#else
std::string msg = strerror( errno );
#endif
throw SocketException( context + ": " + msg );
}
// ----------------------------------------------------------------------
int
Socket::
port()
{
return port_;
}
// ----------------------------------------------------------------------
bool
Socket::
datawaiting(int sock)
const throw()
{
fd_set fds;
FD_ZERO( &fds );
FD_SET( sock, &fds );
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 0;
int r = select( sock+1, &fds, NULL, NULL, &tv);
if (r < 0)
BailOnSocketError("tcpip::Socket::datawaiting @ select");
if( FD_ISSET( sock, &fds ) )
return true;
else
return false;
}
// ----------------------------------------------------------------------
bool
Socket::
atoaddr( std::string address, struct in_addr& addr)
{
struct hostent* host;
struct in_addr saddr;
// First try nnn.nnn.nnn.nnn form
saddr.s_addr = inet_addr(address.c_str());
if (saddr.s_addr != static_cast<unsigned int>(-1))
{
addr = saddr;
return true;
}
host = gethostbyname(address.c_str());
if( host ) {
addr = *((struct in_addr*)host->h_addr_list[0]);
return true;
}
return false;
}
// ----------------------------------------------------------------------
void
Socket::
accept()
throw( SocketException )
{
if( socket_ >= 0 )
return;
struct sockaddr_in client_addr;
#ifdef WIN32
int addrlen = sizeof(client_addr);
#else
socklen_t addrlen = sizeof(client_addr);
#endif
if( server_socket_ < 0 )
{
struct sockaddr_in self;
//Create the server socket
server_socket_ = static_cast<int>(socket( AF_INET, SOCK_STREAM, 0 ));
if( server_socket_ < 0 )
BailOnSocketError("tcpip::Socket::accept() @ socket");
//"Address already in use" error protection
{
int reuseaddr = 1;
#ifdef WIN32
//setsockopt(server_socket_, SOL_SOCKET, SO_REUSEADDR, (const char*)&reuseaddr, sizeof(reuseaddr));
// No address reuse in Windows!!!
#else
setsockopt(server_socket_, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr));
#endif
}
// Initialize address/port structure
memset(&self, 0, sizeof(self));
self.sin_family = AF_INET;
self.sin_port = htons(port_);
self.sin_addr.s_addr = htonl(INADDR_ANY);
// Assign a port number to the socket
if ( bind(server_socket_, (struct sockaddr*)&self, sizeof(self)) != 0 )
BailOnSocketError("tcpip::Socket::accept() Unable to create listening socket");
// Make it a "listening socket"
if ( listen(server_socket_, 10) == -1 )
BailOnSocketError("tcpip::Socket::accept() Unable to listen on server socket");
// Make the newly created socket blocking or not
set_blocking(blocking_);
}
socket_ = static_cast<int>(::accept(server_socket_, (struct sockaddr*)&client_addr, &addrlen));
if( socket_ >= 0 )
{
int x = 1;
setsockopt(socket_, IPPROTO_TCP, TCP_NODELAY, (const char*)&x, sizeof(x));
}
}
// ----------------------------------------------------------------------
void
Socket::
set_blocking(bool blocking)
throw(SocketException )
{
blocking_ = blocking;
if( server_socket_ > 0 )
{
#ifdef WIN32
ULONG NonBlock = blocking_ ? 0 : 1;
if (ioctlsocket(server_socket_, FIONBIO, &NonBlock) == SOCKET_ERROR)
BailOnSocketError("tcpip::Socket::set_blocking() Unable to initialize non blocking I/O");
#else
long arg = fcntl(server_socket_, F_GETFL, NULL);
if (blocking_)
{
arg &= ~O_NONBLOCK;
} else {
arg |= O_NONBLOCK;
}
fcntl(server_socket_, F_SETFL, arg);
#endif
}
}
// ----------------------------------------------------------------------
void
Socket::
connect()
throw( SocketException )
{
in_addr addr;
if( !atoaddr( host_.c_str(), addr) )
BailOnSocketError("tcpip::Socket::connect() @ Invalid network address");
sockaddr_in address;
memset( (char*)&address, 0, sizeof(address) );
address.sin_family = AF_INET;
address.sin_port = htons( port_ );
address.sin_addr.s_addr = addr.s_addr;
socket_ = static_cast<int>(socket( PF_INET, SOCK_STREAM, 0 ));
if( socket_ < 0 )
BailOnSocketError("tcpip::Socket::connect() @ socket");
if( ::connect( socket_, (sockaddr const*)&address, sizeof(address) ) < 0 )
BailOnSocketError("tcpip::Socket::connect() @ connect");
if( socket_ >= 0 )
{
int x = 1;
setsockopt(socket_, IPPROTO_TCP, TCP_NODELAY, (const char*)&x, sizeof(x));
}
}
// ----------------------------------------------------------------------
void
Socket::
close()
{
// Close client-connection
if( socket_ >= 0 )
{
#ifdef WIN32
::closesocket( socket_ );
#else
::close( socket_ );
#endif
socket_ = -1;
}
}
// ----------------------------------------------------------------------
void
Socket::
send( std::vector<unsigned char> b)
throw( SocketException )
{
if( socket_ < 0 ) return;
size_t numbytes = b.size();
unsigned char *const buf = new unsigned char[numbytes];
for(size_t i = 0; i < numbytes; ++i)
{
buf[i] = b[i];
}
if (verbose_)
{
cerr << "Send " << numbytes << " bytes via tcpip::Socket: [";
for(size_t i = 0; i < numbytes; ++i)
{
buf[i] = b[i];
cerr << " " << (int)b[i] << " ";
}
cerr << "]" << endl;
}
unsigned char const *buf_ptr = buf;
while( numbytes > 0 )
{
#ifdef WIN32
int n = ::send( socket_, (const char*)buf_ptr, static_cast<int>(numbytes), 0 );
#else
int n = ::send( socket_, buf_ptr, numbytes, 0 );
#endif
if( n<0 )
{
// BailOnSocketError definitely throws an exception so clear up heap
delete[] buf;
BailOnSocketError( "send failed" );
}
numbytes -= n;
buf_ptr += n;
}
delete[] buf;
}
// ----------------------------------------------------------------------
void
Socket::
sendExact( const Storage &b)
throw( SocketException )
{
int length = static_cast<int>(b.size());
Storage length_storage;
length_storage.writeInt(length + 4);
vector<unsigned char> msg;
msg.insert(msg.end(), length_storage.begin(), length_storage.end());
msg.insert(msg.end(), b.begin(), b.end());
send(msg);
}
// ----------------------------------------------------------------------
vector<unsigned char>
Socket::
receive(int bufSize)
throw( SocketException )
{
vector<unsigned char> b;
if( socket_ < 0 )
connect();
if( !datawaiting( socket_) )
return b;
unsigned char const * const buf = new unsigned char[bufSize];
int a = recv( socket_, (char*)buf, bufSize, 0 );
if( a <= 0 )
{
// BailOnSocketError definitely throws an exception so clear up heap
delete[] buf;
BailOnSocketError( "tcpip::Socket::receive() @ recv" );
}
b.resize(a);
for(int i = 0; i < a; ++i)
{
b[i] = buf[i];
}
if (verbose_)
{
cerr << "Rcvd " << a << " bytes via tcpip::Socket: [";
for(int i = 0; i < a; ++i)
{
cerr << " " << (int)b[i] << " ";
}
cerr << "]" << endl;
}
delete[] buf;
return b;
}
// ----------------------------------------------------------------------
bool
Socket::
receiveExact( Storage &msg )
throw( SocketException )
{
/* receive length of vector */
unsigned char * const bufLength = new unsigned char[4];
int bytesRead = 0;
int readThisTime = 0;
while (bytesRead<4)
{
readThisTime = recv( socket_, (char*)(bufLength + bytesRead), 4-bytesRead, 0 );
if( readThisTime <= 0 )
{
// BailOnSocketError definitely throws an exception so clear up heap
delete[] bufLength;
BailOnSocketError( "tcpip::Socket::receive() @ recv" );
}
bytesRead += readThisTime;
}
Storage length_storage(bufLength,4);
int NN = length_storage.readInt() - 4;
/* receive vector */
unsigned char * const buf = new unsigned char[NN];
bytesRead = 0;
readThisTime = 0;
while (bytesRead<NN)
{
readThisTime = recv( socket_, (char*)(buf + bytesRead), NN-bytesRead, 0 );
if( readThisTime <= 0 )
{
// BailOnSocketError definitely throws an exception so clear up heap
delete[] bufLength;
delete[] buf;
BailOnSocketError( "tcpip::Socket::receive() @ recv" );
}
bytesRead += readThisTime;
}
msg.reset();
msg.writePacket(buf, NN);
if (verbose_)
{
cerr << "Rcvd Storage with " << 4 + NN << " bytes via tcpip::Socket: [";
for (int i=0; i < 4; ++i)
{
cerr << " " << (int)bufLength[i] << " ";
}
for (int i=0; i < NN; ++i)
{
cerr << " " << (int)buf[i] << " ";
}
cerr << "]" << endl;
}
delete[] buf;
delete[] bufLength;
return true;
}
// ----------------------------------------------------------------------
bool
Socket::
has_client_connection()
const
{
return socket_ >= 0;
}
// ----------------------------------------------------------------------
bool
Socket::
is_blocking()
throw()
{
return blocking_;
}
#ifdef WIN32
// ----------------------------------------------------------------------
std::string
Socket::
GetWinsockErrorString(int err)
const
{
switch( err)
{
case 0: return "No error";
case WSAEINTR: return "Interrupted system call";
case WSAEBADF: return "Bad file number";
case WSAEACCES: return "Permission denied";
case WSAEFAULT: return "Bad address";
case WSAEINVAL: return "Invalid argument";
case WSAEMFILE: return "Too many open sockets";
case WSAEWOULDBLOCK: return "Operation would block";
case WSAEINPROGRESS: return "Operation now in progress";
case WSAEALREADY: return "Operation already in progress";
case WSAENOTSOCK: return "Socket operation on non-socket";
case WSAEDESTADDRREQ: return "Destination address required";
case WSAEMSGSIZE: return "Message too long";
case WSAEPROTOTYPE: return "Protocol wrong type for socket";
case WSAENOPROTOOPT: return "Bad protocol option";
case WSAEPROTONOSUPPORT: return "Protocol not supported";
case WSAESOCKTNOSUPPORT: return "Socket type not supported";
case WSAEOPNOTSUPP: return "Operation not supported on socket";
case WSAEPFNOSUPPORT: return "Protocol family not supported";
case WSAEAFNOSUPPORT: return "Address family not supported";
case WSAEADDRINUSE: return "Address already in use";
case WSAEADDRNOTAVAIL: return "Can't assign requested address";
case WSAENETDOWN: return "Network is down";
case WSAENETUNREACH: return "Network is unreachable";
case WSAENETRESET: return "Net Socket reset";
case WSAECONNABORTED: return "Software caused tcpip::Socket abort";
case WSAECONNRESET: return "Socket reset by peer";
case WSAENOBUFS: return "No buffer space available";
case WSAEISCONN: return "Socket is already connected";
case WSAENOTCONN: return "Socket is not connected";
case WSAESHUTDOWN: return "Can't send after socket shutdown";
case WSAETOOMANYREFS: return "Too many references, can't splice";
case WSAETIMEDOUT: return "Socket timed out";
case WSAECONNREFUSED: return "Socket refused";
case WSAELOOP: return "Too many levels of symbolic links";
case WSAENAMETOOLONG: return "File name too long";
case WSAEHOSTDOWN: return "Host is down";
case WSAEHOSTUNREACH: return "No route to host";
case WSAENOTEMPTY: return "Directory not empty";
case WSAEPROCLIM: return "Too many processes";
case WSAEUSERS: return "Too many users";
case WSAEDQUOT: return "Disc quota exceeded";
case WSAESTALE: return "Stale NFS file handle";
case WSAEREMOTE: return "Too many levels of remote in path";
case WSASYSNOTREADY: return "Network system is unavailable";
case WSAVERNOTSUPPORTED: return "Winsock version out of range";
case WSANOTINITIALISED: return "WSAStartup not yet called";
case WSAEDISCON: return "Graceful shutdown in progress";
case WSAHOST_NOT_FOUND: return "Host not found";
case WSANO_DATA: return "No host data of that type was found";
}
return "unknown";
}
#endif // WIN32
} // namespace tcpip
#endif // BUILD_TCPIP
/*-----------------------------------------------------------------------
* Source $Source: $
* Version $Revision: 385 $
* Date $Date: 2010-01-13 16:10:20 +0100 (Wed, 13 Jan 2010) $
*-----------------------------------------------------------------------
* $Log: $
*-----------------------------------------------------------------------*/
/************************************************************************
** This file is part of the network simulator Shawn. **
** Copyright (C) 2004-2007 by the SwarmNet (www.swarmnet.de) project **
** Shawn is free software; you can redistribute it and/or modify it **
** under the terms of the BSD License. Refer to the shawn-licence.txt **
** file in the root of the Shawn source tree for further details. **
************************************************************************/
#ifndef __SHAWN_APPS_TCPIP_SOCKET_H
#define __SHAWN_APPS_TCPIP_SOCKET_H
#ifdef SHAWN
#include <shawn_config.h>
#include "_apps_enable_cmake.h"
#ifdef ENABLE_TCPIP
#define BUILD_TCPIP
#endif
#else
#define BUILD_TCPIP
#endif
#ifdef BUILD_TCPIP
// Get Storage
#ifdef SHAWN
#include <apps/tcpip/storage.h>
#else
#include "storage.h"
#endif
#ifdef SHAWN
namespace shawn
{
class SimulationController;
}
// Dummy function is called when Shawn Simulation starts. Does nothing up to now.
extern "C" void init_tcpip( shawn::SimulationController& );
#endif
// Disable exception handling warnings
#ifdef WIN32
#pragma warning( disable : 4290 )
#endif
#include <string>
#include <map>
#include <vector>
#include <list>
#include <deque>
#include <iostream>
struct in_addr;
namespace tcpip
{
class SocketException: public std::exception
{
private:
std::string what_;
public:
SocketException( std::string what ) throw() {
what_ = what;
//std::cerr << "tcpip::SocketException: " << what << std::endl << std::flush;
}
virtual const char* what() const throw() {
return what_.c_str();
}
~SocketException() throw() {}
};
class Socket
{
friend class Response;
public:
/// Constructor that prepare to connect to host:port
Socket(std::string host, int port);
/// Constructor that prepare for accepting a connection on given port
Socket(int port);
/// Destructor
~Socket();
/// Connects to host_:port_
void connect() throw( SocketException );
/// Wait for a incoming connection to port_
void accept() throw( SocketException );
void send( const std::vector<unsigned char> ) throw( SocketException );
void sendExact( const Storage & ) throw( SocketException );
std::vector<unsigned char> receive( int bufSize = 2048 ) throw( SocketException );
bool receiveExact( Storage &) throw( SocketException );
void close();
int port();
void set_blocking(bool) throw( SocketException );
bool is_blocking() throw();
bool has_client_connection() const;
// If verbose, each send and received data is written to stderr
bool verbose() {
return verbose_;
}
void set_verbose(bool newVerbose) {
verbose_ = newVerbose;
}
private:
void init();
void BailOnSocketError( std::string ) const throw( SocketException );
#ifdef WIN32
std::string GetWinsockErrorString(int err) const;
#endif
bool atoaddr(std::string, struct in_addr& addr);
bool datawaiting(int sock) const throw();
std::string host_;
int port_;
int socket_;
int server_socket_;
bool blocking_;
bool verbose_;
#ifdef WIN32
static bool init_windows_sockets_;
static bool windows_sockets_initialized_;
static int instance_count_;
#endif
};
} // namespace tcpip
#endif // BUILD_TCPIP
#endif
/*-----------------------------------------------------------------------
* Source $Source: $
* Version $Revision: 197 $
* Date $Date: 2008-04-29 17:40:51 +0200 (Tue, 29 Apr 2008) $
*-----------------------------------------------------------------------
* $Log:$
*-----------------------------------------------------------------------*/
#ifdef UNITTESTS
#include "MiniCppUnit.hxx"
#include "storage.h"
#include "socket.h"
#include <math.h>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <limits.h>
#include <float.h>
#define ADDRINUSE
#define PORT 8888
#define TEST_CHAR UCHAR_MAX
#define TEST_BYTE UCAHR_MAX
#define TEST_STRING "Test-String(?&%$!+#~*')"
#define TEST_SHORT SHRT_MAX
#define TEST_INT INT_MAX
#define TEST_FLOAT FLT_MAX
#define TEST_DOUBLE DBL_MAX
class socketUnitTests : public TestFixture<socketUnitTests>
{
public:
TEST_FIXTURE( socketUnitTests )
, currentMode_(undefined),
server_socket_( PORT ) ,
client_socket_( "localhost" , PORT )
{
TEST_CASE( openConnection );
TEST_CASE( receiveStorage );
TEST_CASE( sendStorage );
TEST_CASE( closeConnection );
}
void openConnection()
{
try {
server_socket_.set_blocking(false);
server_socket_.accept();
currentMode_ = server;
}
catch(tcpip::SocketException e) {
if (e.what() == "tcpip::Socket::accept() Unable to create listening socket: Address already in use"){
currentMode_ = client;
}else{
FAIL( "Server socket accept() failed!" );
}
}
if (currentMode_ == server)
{
server_socket_.set_blocking(true);
std::cout << Assert::yellow() << "Listening on port " << PORT << ". Please start another instance of this program on host.\n" << Assert::normal();
server_socket_.accept();
}
if (currentMode_ == client){
try {
client_socket_.connect();
}
catch (tcpip::SocketException e){
FAIL( "Client socket.connect() failed!" );
}
}
}
void closeConnection()
{
try {
if (currentMode_ == client) client_socket_.close();
}
catch (tcpip::SocketException e){
FAIL( "Client socket close() failed!" );
}
try {
if (currentMode_ == server) server_socket_.close();
}
catch (tcpip::SocketException e){
FAIL( "Server socket close() failed!" );
}
}
void receiveStorage()
{
if (currentMode_ == client) return;
tcpip::Storage received_message;
try {
server_socket_.receiveExact(received_message);
ASSERT_EQUALS( static_cast<int>(TEST_CHAR),
static_cast<int>(received_message.readChar()) );
ASSERT_EQUALS( TEST_STRING, received_message.readString() );
ASSERT_EQUALS( TEST_SHORT, received_message.readShort() );
ASSERT_EQUALS( TEST_INT, received_message.readInt() );
ASSERT_EQUALS( TEST_FLOAT, received_message.readFloat() );
ASSERT_EQUALS( TEST_DOUBLE, received_message.readDouble() );
}
catch (tcpip::SocketException e) {
FAIL( "Server socket receiveExact() failed!" );
}
}
void sendStorage()
{
if (currentMode_ == server) return;
tcpip::Storage send_message;
try {
send_message.writeChar( TEST_CHAR );
send_message.writeString( TEST_STRING );
send_message.writeShort( TEST_SHORT );
send_message.writeInt( TEST_INT );
send_message.writeFloat( TEST_FLOAT );
send_message.writeDouble( TEST_DOUBLE );
client_socket_.sendExact(send_message);
}
catch (tcpip::SocketException e) {
FAIL( "Client socket sendExact() failed!" );
}
}
//...
private:
enum mode{undefined = -1, client, server};
mode currentMode_;
tcpip::Socket server_socket_;
tcpip::Socket client_socket_;
};
//Register fixture
REGISTER_FIXTURE( socketUnitTests );
#endif
/************************************************************************
** This file is part of the network simulator Shawn. **
** Copyright (C) 2004-2007 by the SwarmNet (www.swarmnet.de) project **
** Shawn is free software; you can redistribute it and/or modify it **
** under the terms of the BSD License. Refer to the shawn-licence.txt **
** file in the root of the Shawn source tree for further details. **
************************************************************************
** **
** \author Axel Wegener <wegener@itm.uni-luebeck.de> **
** \author Bjoern Hendriks <hendriks@ibr.cs.tu-bs.de> **
** **
************************************************************************/
#include "storage.h"
#ifdef BUILD_TCPIP
#include <iostream>
#include <iterator>
#include <sstream>
#include <cassert>
using namespace std;
//#define NULLITER static_cast<list<unsigned char>::iterator>(0)
namespace tcpip
{
// ----------------------------------------------------------------------
Storage::Storage()
{
init();
}
// ----------------------------------------------------------------------
Storage::Storage(unsigned char packet[], int length)
{
// Length is calculated, if -1, or given
if (length == -1) length = sizeof(packet) / sizeof(unsigned char);
store.reserve(length);
// Get the content
for(int i = 0; i < length; ++i) store.push_back(packet[i]);
init();
}
// ----------------------------------------------------------------------
void Storage::init()
{
// Initialize local variables
iter_ = store.begin();
short a = 0x0102;
unsigned char *p_a = reinterpret_cast<unsigned char*>(&a);
bigEndian_ = (p_a[0] == 0x01); // big endian?
}
// ----------------------------------------------------------------------
Storage::~Storage()
{}
// ----------------------------------------------------------------------
bool Storage::valid_pos()
{
return (iter_ != store.end()); // this implies !store.empty()
}
// ----------------------------------------------------------------------
unsigned int Storage::position() const
{
// According to C++ standard std::distance will simply compute the iterators
// difference for random access iterators as std::vector provides.
return std::distance(store.begin(), iter_);
}
// ----------------------------------------------------------------------
void Storage::reset()
{
store.clear();
iter_ = store.begin();
}
// ----------------------------------------------------------------------
/**
* Reads a char form the array
* @return The read char (between 0 and 255)
*/
unsigned char Storage::readChar() throw(std::invalid_argument)
{
if ( !valid_pos() )
{
throw std::invalid_argument("Storage::readChar(): invalid position");
}
return readCharUnsafe();
}
// ----------------------------------------------------------------------
/**
*
*/
void Storage::writeChar(unsigned char value) throw()
{
store.push_back(value);
iter_ = store.begin();
}
// ----------------------------------------------------------------------
/**
* Reads a byte form the array
* @return The read byte (between -128 and 127)
*/
int Storage::readByte() throw(std::invalid_argument)
{
int i = static_cast<int>(readChar());
if (i < 128) return i;
else return (i - 256);
}
// ----------------------------------------------------------------------
/**
*
*/
void Storage::writeByte(int value) throw(std::invalid_argument)
{
if (value < -128 || value > 127)
{
throw std::invalid_argument("Storage::writeByte(): Invalid value, not in [-128, 127]");
}
writeChar( static_cast<unsigned char>( (value+256) % 256 ) );
}
// ----------------------------------------------------------------------
/**
* Reads an unsigned byte form the array
* @return The read byte (between 0 and 255)
*/
int Storage::readUnsignedByte() throw(std::invalid_argument)
{
return static_cast<int>(readChar());
}
// ----------------------------------------------------------------------
/**
*
*/
void Storage::writeUnsignedByte(int value) throw(std::invalid_argument)
{
if (value < 0 || value > 255)
{
throw std::invalid_argument("Storage::writeUnsignedByte(): Invalid value, not in [0, 255]");
}
writeChar( static_cast<unsigned char>( value ));
}
// -----------------------------------------------------------------------
/**
* Reads a string form the array
* @return The read string
*/
std::string Storage::readString() throw(std::invalid_argument)
{
int len = readInt();
checkReadSafe(len);
StorageType::const_iterator end = iter_;
std::advance(end, len);
const string tmp(iter_, end);
iter_ = end;
return tmp;
}
// ----------------------------------------------------------------------
/**
* Writes a string into the array;
* @param s The string to be written
*/
void Storage::writeString(const std::string &s) throw()
{
writeInt(static_cast<int>(s.length()));
store.insert(store.end(), s.begin(), s.end());
iter_ = store.begin();
}
// -----------------------------------------------------------------------
/**
* Reads a string list form the array
* @return The read string
*/
std::vector<std::string> Storage::readStringList() throw(std::invalid_argument)
{
std::vector<std::string> tmp;
const int len = readInt();
tmp.reserve(len);
for (int i = 0; i < len; i++)
{
tmp.push_back(readString());
}
return tmp;
}
// ----------------------------------------------------------------------
/**
* Writes a string into the array;
* @param s The string to be written
*/
void Storage::writeStringList(const std::vector<std::string> &s) throw()
{
writeInt(static_cast<int>(s.size()));
for (std::vector<std::string>::const_iterator it = s.begin(); it!=s.end() ; it++)
{
writeString(*it);
}
}
// ----------------------------------------------------------------------
/**
* Restores an integer, which was split up in two bytes according to the
* specification, it must have been split by its row byte representation
* with MSBF-order
*
* @return the unspoiled integer value (between -32768 and 32767)
*/
int Storage::readShort() throw(std::invalid_argument)
{
short value = 0;
unsigned char *p_value = reinterpret_cast<unsigned char*>(&value);
readByEndianess(p_value, 2);
return value;
}
// ----------------------------------------------------------------------
void Storage::writeShort( int value ) throw(std::invalid_argument)
{
if (value < -32768 || value > 32767)
{
throw std::invalid_argument("Storage::writeShort(): Invalid value, not in [-32768, 32767]");
}
short svalue = static_cast<short>(value);
unsigned char *p_svalue = reinterpret_cast<unsigned char*>(&svalue);
writeByEndianess(p_svalue, 2);
}
// ----------------------------------------------------------------------
/**
* restores an integer, which was split up in four bytes acording to the
* specification, it must have been split by its row byte representation
* with MSBF-order
*
* @return the unspoiled integer value (between -2.147.483.648 and 2.147.483.647)
*/
int Storage::readInt() throw(std::invalid_argument)
{
int value = 0;
unsigned char *p_value = reinterpret_cast<unsigned char*>(&value);
readByEndianess(p_value, 4);
return value;
}
// ----------------------------------------------------------------------
void Storage::writeInt( int value ) throw()
{
unsigned char *p_value = reinterpret_cast<unsigned char*>(&value);
writeByEndianess(p_value, 4);
}
// ----------------------------------------------------------------------
/**
* restores a float , which was split up in four bytes acording to the
* specification, it must have been split by its row byte representation
* with MSBF-order
*
* @return the unspoiled float value
*/
float Storage::readFloat() throw(std::invalid_argument)
{
float value = 0;
unsigned char *p_value = reinterpret_cast<unsigned char*>(&value);
readByEndianess(p_value, 4);
return value;
}
// ----------------------------------------------------------------------
void Storage::writeFloat( float value ) throw()
{
unsigned char *p_value = reinterpret_cast<unsigned char*>(&value);
writeByEndianess(p_value, 4);
}
// ----------------------------------------------------------------------
void Storage::writeDouble( double value ) throw ()
{
unsigned char *p_value = reinterpret_cast<unsigned char*>(&value);
writeByEndianess(p_value, 8);
}
// ----------------------------------------------------------------------
double Storage::readDouble( ) throw (std::invalid_argument)
{
double value = 0;
unsigned char *p_value = reinterpret_cast<unsigned char*>(&value);
readByEndianess(p_value, 8);
return value;
}
// ----------------------------------------------------------------------
void Storage::writePacket(unsigned char* packet, int length)
{
store.insert(store.end(), &(packet[0]), &(packet[length]));
iter_ = store.begin(); // reserve() invalidates iterators
}
// ----------------------------------------------------------------------
void Storage::readPacket(unsigned char* packet)
{
for (unsigned int i = 0; i < store.size(); i++) {
packet[i] = readCharUnsafe();
}
}
// ----------------------------------------------------------------------
void Storage::writeStorage(tcpip::Storage& other)
{
// the compiler cannot deduce to use a const_iterator as source
store.insert<StorageType::const_iterator>(store.end(), other.iter_, other.store.end());
iter_ = store.begin();
}
// ----------------------------------------------------------------------
void Storage::checkReadSafe(unsigned int num) const throw(std::invalid_argument)
{
if (std::distance(iter_, store.end()) < num)
{
std::ostringstream msg;
msg << "tcpip::Storage::readIsSafe: want to read " << num << " bytes from Storage, "
<< "but only " << std::distance(iter_, store.end()) << " remaining";
throw std::invalid_argument(msg.str());
}
}
// ----------------------------------------------------------------------
unsigned char Storage::readCharUnsafe()
{
char hb = *iter_;
++iter_;
return hb;
}
// ----------------------------------------------------------------------
void Storage::writeByEndianess(const unsigned char * begin, unsigned int size)
{
const unsigned char * end = &(begin[size]);
if (bigEndian_)
store.insert(store.end(), begin, end);
else
store.insert(store.end(), std::reverse_iterator<const unsigned char *>(end), std::reverse_iterator<const unsigned char *>(begin));
iter_ = store.begin();
}
// ----------------------------------------------------------------------
void Storage::readByEndianess(unsigned char * array, int size)
{
checkReadSafe(size);
if (bigEndian_)
{
for (int i = 0; i < size; ++i)
array[i] = readCharUnsafe();
}
else
{
for (int i = size - 1; i >= 0; --i)
array[i] = readCharUnsafe();
}
}
}
#endif // BUILD_TCPIP
/*-----------------------------------------------------------------------
* Source $Source: $
* Version $Revision: 426 $
* Date $Date: 2010-05-31 12:05:13 +0200 (Mon, 31 May 2010) $
*-----------------------------------------------------------------------
* $Log: $
*-----------------------------------------------------------------------*/
/************************************************************************
** This file is part of the network simulator Shawn. **
** Copyright (C) 2004-2007 by the SwarmNet (www.swarmnet.de) project **
** Shawn is free software; you can redistribute it and/or modify it **
** under the terms of the BSD License. Refer to the shawn-licence.txt **
** file in the root of the Shawn source tree for further details. **
************************************************************************
** **
** \author Axel Wegener <wegener@itm.uni-luebeck.de> **
** \author Bjoern Hendriks <hendriks@ibr.cs.tu-bs.de> **
** **
************************************************************************/
#ifndef __SHAWN_APPS_TCPIP_STORAGE_H
#define __SHAWN_APPS_TCPIP_STORAGE_H
#ifdef SHAWN
#include <shawn_config.h>
#include "_apps_enable_cmake.h"
#ifdef ENABLE_TCPIP
#define BUILD_TCPIP
#endif
#else
#define BUILD_TCPIP
#endif
#ifdef BUILD_TCPIP
#include <vector>
#include <string>
#include <stdexcept>
namespace tcpip
{
class Storage
{
public:
typedef std::vector<unsigned char> StorageType;
private:
StorageType store;
StorageType::const_iterator iter_;
// sortation of bytes forwards or backwards?
bool bigEndian_;
/// Used in constructors to initialize local variables
void init();
/// Check if the next \p num bytes can be read safely
void checkReadSafe(unsigned int num) const throw(std::invalid_argument);
/// Read a byte \em without validity check
unsigned char readCharUnsafe();
/// Write \p size elements of array \p begin according to endianess
void writeByEndianess(const unsigned char * begin, unsigned int size);
/// Read \p size elements into \p array according to endianess
void readByEndianess(unsigned char * array, int size);
public:
/// Standard Constructor
Storage();
/// Constructor, that fills the storage with an char array. If length is -1, the whole array is handed over
Storage(unsigned char[], int length=-1);
// Destructor
virtual ~Storage();
virtual bool valid_pos();
virtual unsigned int position() const;
void reset();
virtual unsigned char readChar() throw(std::invalid_argument);
virtual void writeChar(unsigned char) throw();
virtual int readByte() throw(std::invalid_argument);
virtual void writeByte(int) throw(std::invalid_argument);
// virtual void writeByte(unsigned char) throw();
virtual int readUnsignedByte() throw(std::invalid_argument);
virtual void writeUnsignedByte(int) throw(std::invalid_argument);
virtual std::string readString() throw(std::invalid_argument);
virtual void writeString(const std::string& s) throw();
virtual std::vector<std::string> readStringList() throw(std::invalid_argument);
virtual void writeStringList(const std::vector<std::string> &s) throw();
virtual int readShort() throw(std::invalid_argument);
virtual void writeShort(int) throw(std::invalid_argument);
virtual int readInt() throw(std::invalid_argument);
virtual void writeInt(int) throw();
virtual float readFloat() throw(std::invalid_argument);
virtual void writeFloat( float ) throw();
virtual double readDouble() throw(std::invalid_argument);
virtual void writeDouble( double ) throw();
virtual void writePacket(unsigned char* packet, int length);
virtual void readPacket(unsigned char* packet);
virtual void writeStorage(tcpip::Storage& store);
// Some enabled functions of the underlying std::list
StorageType::size_type size() const {
return store.size();
}
StorageType::const_iterator begin() const {
return store.begin();
}
StorageType::const_iterator end() const {
return store.end();
}
};
} // namespace tcpip
#endif // BUILD_TCPIP
#endif
/*-----------------------------------------------------------------------
* Source $Source: $
* Version $Revision: 426 $
* Date $Date: 2010-05-31 12:05:13 +0200 (Mon, 31 May 2010) $
*-----------------------------------------------------------------------
* $Log: $
*-----------------------------------------------------------------------*/
/*
* This file provides test cases for the tcpip package, that can be executed by MiniCppUnit
*
* Author: Axel Wegener
*/
#ifdef UNITTESTS
#include "MiniCppUnit.hxx"
#include "storage.h"
//#include "socket.h"
#include <math.h>
class tcpipUnitTests : public TestFixture<tcpipUnitTests>
{
public:
TEST_FIXTURE( tcpipUnitTests )
{
TEST_CASE( testStorageChar );
TEST_CASE( testStorageByte );
TEST_CASE( testStorageString );
TEST_CASE( testStorageShort );
TEST_CASE( testStorageInt );
TEST_CASE( testStorageFloat );
TEST_CASE( testStorageDouble );
TEST_CASE( testStorageMixed );
TEST_CASE( testStorageReset );
TEST_CASE( testStorageValidPos );
TEST_CASE( testStorageLoadCharArray );
TEST_CASE( testStorageCharToInt );
TEST_CASE( testStorageByteShortInt );
}
void testStorageChar()
{
tcpip::Storage s1;
s1.writeChar('\0');
s1.writeChar('');
s1.writeChar('\n');
ASSERT_EQUALS( true, s1.valid_pos() );
ASSERT( s1.readChar() == '\0' );
ASSERT( (char) s1.readChar() == '' );
ASSERT( s1.readChar() == '\n' );
ASSERT_EQUALS( false, s1.valid_pos() );
}
void testStorageByte()
{
tcpip::Storage s1;
s1.writeByte(0);
s1.writeByte(-128);
s1.writeByte(127);
/*
bool err = false;
try
{
s1.writeByte(128);
}
catch (std::invalid_argument e)
{
err = true;
}
catch ( ... ) {}
if (!err) FAIL("Storage::writeByte allowed an input value of 128");
err = false;
try
{
s1.writeByte(-129);
}
catch (std::invalid_argument e)
{
err = true;
}
if (!err) FAIL("Storage::writeByte allowed an input value of -129");
*/
ASSERT_EQUALS( true, s1.valid_pos() );
ASSERT_EQUALS( 0, s1.readByte() );
ASSERT_EQUALS( -128, s1.readByte() );
ASSERT_EQUALS( 127, s1.readByte() );
ASSERT_EQUALS( false, s1.valid_pos() );
}
void testStorageString()
{
tcpip::Storage s1;
s1.writeString("Dies ist ein TestString");
s1.writeString("");
s1.writeString("2. Text mit Sonderzeichen \n\0");
ASSERT_EQUALS( true, s1.valid_pos() );
ASSERT_EQUALS( "Dies ist ein TestString", s1.readString() );
ASSERT_EQUALS( "", s1.readString() );
ASSERT_EQUALS( "2. Text mit Sonderzeichen \n\0", s1.readString() );
ASSERT_EQUALS( false, s1.valid_pos() );
}
void testStorageShort()
{
tcpip::Storage s1;
s1.writeShort(0);
s1.writeShort(32767);
s1.writeShort(-32768);
ASSERT_EQUALS( true, s1.valid_pos() );
ASSERT_EQUALS( 0, s1.readShort() );
ASSERT_EQUALS( 32767, s1.readShort() );
ASSERT_EQUALS( -32768, s1.readShort() );
ASSERT_EQUALS( false, s1.valid_pos() );
}
void testStorageInt()
{
tcpip::Storage s1;
s1.writeInt(0);
s1.writeInt(-32768);
s1.writeInt(32767);
s1.writeInt(INT_MIN);
s1.writeInt(INT_MAX);
ASSERT_EQUALS( true, s1.valid_pos() );
ASSERT_EQUALS( 0, s1.readInt() );
ASSERT_EQUALS( -32768, s1.readInt() );
ASSERT_EQUALS( 32767, s1.readInt() );
ASSERT_EQUALS( INT_MIN, s1.readInt() );
ASSERT_EQUALS( INT_MAX, s1.readInt() );
ASSERT_EQUALS( false, s1.valid_pos() );
}
void testStorageFloat()
{
tcpip::Storage s1;
float f1 = (float) 0.000002;
float f2 = (float) 0.000001;
s1.writeFloat(0.0);
s1.writeFloat(f1);
s1.writeFloat(f2);
ASSERT_EQUALS( true, s1.valid_pos() );
ASSERT_EQUALS( (float) 0.0, s1.readFloat() );
ASSERT_EQUALS( f1, s1.readFloat() );
ASSERT_EQUALS( f2, s1.readFloat() );
ASSERT_EQUALS( false, s1.valid_pos() );
}
void testStorageDouble()
{
tcpip::Storage s1;
double d1 = 0.000002;
double d2 = 0.000001;
s1.writeDouble(0.0);
s1.writeDouble(d1);
s1.writeDouble(d2);
ASSERT_EQUALS( true, s1.valid_pos() );
ASSERT_EQUALS( 0.0, s1.readDouble() );
ASSERT_EQUALS( d1, s1.readDouble() );
ASSERT_EQUALS( d2, s1.readDouble() );
ASSERT_EQUALS( false, s1.valid_pos() );
}
void testStorageMixed()
{
tcpip::Storage s1;
double d1 = 0.000002;
s1.writeFloat(0.0);
s1.writeDouble(d1);
s1.writeString("\0");
s1.writeShort(42);
ASSERT_EQUALS( true, s1.valid_pos() );
ASSERT_EQUALS( (float) 0.0, s1.readFloat() );
ASSERT_EQUALS( d1, s1.readDouble() );
ASSERT_EQUALS( "\0", s1.readString() );
ASSERT_EQUALS( 42, s1.readShort() );
ASSERT_EQUALS( false, s1.valid_pos() );
}
void testStorageReset()
{
tcpip::Storage s1;
double d1 = 0.000002;
s1.reset();
ASSERT_EQUALS( false, s1.valid_pos() );
s1.writeFloat(0.0);
s1.writeDouble(d1);
s1.writeString("\0");
s1.writeShort(42);
ASSERT_EQUALS( true, s1.valid_pos() );
s1.reset();
ASSERT_EQUALS( false, s1.valid_pos() );
s1.writeString("Test");
ASSERT_EQUALS( true, s1.valid_pos() );
ASSERT_EQUALS( "Test", s1.readString() );
ASSERT_EQUALS( false, s1.valid_pos() );
s1.reset();
ASSERT( 0 == s1.size() );
}
void testSocketConnect()
{
}
void testStorageValidPos()
{
tcpip::Storage s1;
ASSERT_EQUALS( false, s1.valid_pos() );
tcpip::Storage s2;
s2.writeFloat(1.0);
ASSERT_EQUALS( true, s2.valid_pos() );
s2.reset();
ASSERT_EQUALS( false, s2.valid_pos() );
}
void testStorageLoadCharArray()
{
tcpip::Storage sHallo;
sHallo.writeString("Hallo du!");
unsigned char cBuffer[100];
unsigned int i=0;
while ( sHallo.valid_pos() && i < sizeof(cBuffer) )
{
cBuffer[i] = sHallo.readChar();
i++;
}
tcpip::Storage s1(cBuffer, i);
ASSERT_EQUALS( "Hallo du!", s1.readString() );
}
void testStorageCharToInt()
{
tcpip::Storage s;
ASSERT_EQUALS(0, (int)s.position());
ASSERT_EQUALS(0, (int)s.size());
s.writeChar(0);
ASSERT_EQUALS(0, (int)s.position());
ASSERT_EQUALS(1, (int)s.size());
s.writeChar(0);
ASSERT_EQUALS(0, (int)s.position());
ASSERT_EQUALS(2, (int)s.size());
s.writeChar(0);
ASSERT_EQUALS(0, (int)s.position());
ASSERT_EQUALS(3, (int)s.size());
s.writeChar(4);
ASSERT_EQUALS(0, (int)s.position());
ASSERT_EQUALS(4, (int)s.size());
int n = s.readInt();
ASSERT_EQUALS(4, (int)s.position());
ASSERT_EQUALS(4, (int)s.size());
ASSERT_EQUALS(4, n);
s.reset();
ASSERT_EQUALS(0, (int)s.position());
ASSERT_EQUALS(0, (int)s.size());
s.writeChar(0);
ASSERT_EQUALS(0, (int)s.position());
ASSERT_EQUALS(1, (int)s.size());
s.writeChar(0);
ASSERT_EQUALS(0, (int)s.position());
ASSERT_EQUALS(2, (int)s.size());
s.writeChar(0);
ASSERT_EQUALS(0, (int)s.position());
ASSERT_EQUALS(3, (int)s.size());
s.writeChar(4);
ASSERT_EQUALS(0, (int)s.position());
ASSERT_EQUALS(4, (int)s.size());
n = s.readInt();
ASSERT_EQUALS(4, (int)s.position());
ASSERT_EQUALS(4, (int)s.size());
ASSERT_EQUALS(4, n);
}
void testStorageByteShortInt()
{
tcpip::Storage s;
return;
try {
// s.writeByte(-128);
s.writeByte(127);
// ASSERT_EQUALS(-128, s.readByte());
ASSERT_EQUALS(127, s.readByte());
}
catch (std::string s)
{
std::cerr << s << std::endl;
}
/* int max = 255;
int min = 0;
byte b;
int i;
b = (byte) min;
i = b;
ASSERT_EQUALS(0, i);
b = (byte) max;
i = b;
ASSERT_EQUALS(255, i);
*/
}
};
REGISTER_FIXTURE( tcpipUnitTests );
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*
platform.h
-------------------
***************************************************************************/
#ifndef __PLATFORM_H__
# define __PLATFORM_H__
# include "platform_dim.h"
# include "platform_defines.h"
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*
platform_constants.h
-------------------
***************************************************************************/
#ifndef __PLATFORM_CONSTANTS_H__
# define __PLATFORM_CONSTANTS_H__
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*
platform_defines.h
-------------------
***************************************************************************/
#ifndef __PLATFORM_DEFINES_H__
# define __PLATFORM_DEFINES_H__
// RLC_MODE
# define RLC_NONE 0
# define RLC_MODE_AM 1
# define RLC_MODE_TM 2
# define RLC_MODE_UM 3
# define RLC_MODE_UM_BIDIRECTIONAL 3
# define RLC_MODE_UM_UNIDIRECTIONAL_UL 4
# define RLC_MODE_UM_UNIDIRECTIONAL_DL 5
# define COMMAND_ACTION_NULL 0
# define COMMAND_ACTION_ADD 1
# define COMMAND_ACTION_REMOVE 2
# define COMMAND_ACTION_MODIFY 3
# define COMMAND_OBJECT_SIGNALLING_RADIO_BEARER 1
# define COMMAND_OBJECT_DATA_RADIO_BEARER 2
# define COMMAND_OBJECT_MOBILE 3
# define COMMAND_EQUIPMENT_MOBILE_TERMINAL 2
# define COMMAND_EQUIPMENT_RADIO_GATEWAY 1
// ASN1 TYPES INCLUDES
#include "PhysCellId.h"
#include "TransactionId.h"
#include "OpenAir-RRM-Response-Reason.h"
#include "OpenAir-RRM-Response-Status.h"
typedef unsigned char class_of_service_t;
typedef unsigned char quality_t;
typedef unsigned int kbit_rate_t;
typedef unsigned int packet_size_t;
typedef unsigned char mobile_id_t;
typedef TransactionId_t transaction_id_t;
typedef PhysCellId_t cell_id_t;
typedef unsigned char rb_id_t;
typedef unsigned char msg_type_t;
typedef unsigned short msg_length_t;
typedef unsigned long int frame_t;
typedef OpenAir_RRM_Response_Status_t msg_response_status_t;
typedef OpenAir_RRM_Response_Reason_t msg_response_reason_t;
typedef unsigned char rlc_mode_t;
typedef unsigned char logical_channel_priority_t;
typedef unsigned char logical_channel_group_t;
typedef unsigned short t_reordering_t;
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RRM_H
# define _RRM_H
#define MAX_RB_PER_MOBILE 11
#define MAX_MOBILE_PER_ENODE_B 32
#define MAX_ENODE_B_PER_MOBILE 3
#define MAX_ENODE_B 32
#define MAX_DRB 11
#define MAX_SRB 2
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
#include <string.h>
#include "Asn1Utils.h"
#include "Exceptions.h"
#define ASN1_UTILS_SERIALIZE_BUFFER_SIZE 512
static uint8_t g_asn1_utils_serialize_buffer[ASN1_UTILS_SERIALIZE_BUFFER_SIZE];
//-----------------------------------------------------------------
DRB_Identity_t* Asn1Utils::Clone(DRB_Identity_t* asn1_objP)
//-----------------------------------------------------------------
{
if (asn1_objP != NULL) {
DRB_Identity_t *clone = static_cast<DRB_Identity_t*>(CALLOC(1,sizeof(DRB_Identity_t)));
*clone = *asn1_objP;
return clone;
} else {
return NULL;
}
}
//-----------------------------------------------------------------
DRB_ToAddMod_t* Asn1Utils::Clone(DRB_ToAddMod_t* asn1_objP)
//-----------------------------------------------------------------
{
if (asn1_objP != NULL) {
//------------------------------------------------------------------------------
// ENCODING
//------------------------------------------------------------------------------
asn_enc_rval_t enc_rval;
memset(&g_asn1_utils_serialize_buffer[0], 0, ASN1_UTILS_SERIALIZE_BUFFER_SIZE);
enc_rval = uper_encode_to_buffer(&asn_DEF_DRB_ToAddMod,
(void*)asn1_objP,
&g_asn1_utils_serialize_buffer[0],
ASN1_UTILS_SERIALIZE_BUFFER_SIZE);
cout <<"[RRM][Asn1Utils::Clone(DRB_ToAddMod_t*)] asn_DEF_DRB_ToAddMod Encoded "<< enc_rval.encoded <<" bits (" << (enc_rval.encoded+7)/8 << " bytes)" << endl;
if (enc_rval.encoded==-1) {
cerr << "[RRM][Asn1Utils::Clone(DRB_ToAddMod_t*)] asn_DEF_DRB_ToAddMod encoding FAILED, EXITING" << endl;
throw asn1_encoding_error();
}
//------------------------------------------------------------------------------
// DECODING
//------------------------------------------------------------------------------
asn_dec_rval_t rval;
asn_codec_ctx_t *opt_codec_ctx = 0;
DRB_ToAddMod_t *clone = 0;
rval = uper_decode(opt_codec_ctx,
&asn_DEF_DRB_ToAddMod,/* Type to decode */
(void **)&clone, /* Pointer to a target structure's pointer */
&g_asn1_utils_serialize_buffer[0], /* Data to be decoded */
ASN1_UTILS_SERIALIZE_BUFFER_SIZE, /* Size of data buffer */
0, /* Number of unused leading bits, 0..7 */
0); /* Number of unused tailing bits, 0..7 */
if (rval.code != RC_OK) {
cerr << "[RRM][Asn1Utils::Clone(DRB_ToAddMod_t*)] ASN1 : ERROR IN ASN1 DECODING" << endl;
throw asn1_encoding_error();
}
return clone;
} else {
return NULL;
}
}
//-----------------------------------------------------------------
SRB_ToAddMod_t* Asn1Utils::Clone(SRB_ToAddMod_t* asn1_objP)
//-----------------------------------------------------------------
{
if (asn1_objP != NULL) {
//------------------------------------------------------------------------------
// ENCODING
//------------------------------------------------------------------------------
asn_enc_rval_t enc_rval;
memset(&g_asn1_utils_serialize_buffer[0], 0, ASN1_UTILS_SERIALIZE_BUFFER_SIZE);
enc_rval = uper_encode_to_buffer(&asn_DEF_SRB_ToAddMod,
(void*)asn1_objP,
&g_asn1_utils_serialize_buffer[0],
ASN1_UTILS_SERIALIZE_BUFFER_SIZE);
cout <<"[RRM][Asn1Utils::Clone(SRB_ToAddMod_t*)] asn_DEF_SRB_ToAddMod Encoded "<< enc_rval.encoded <<" bits (" << (enc_rval.encoded+7)/8 << " bytes)" << endl;
if (enc_rval.encoded==-1) {
cerr << "[RRM][Asn1Utils::Clone(SRB_ToAddMod_t*)] asn_DEF_SRB_ToAddMod encoding FAILED, EXITING" << endl;
throw asn1_encoding_error();
}
//------------------------------------------------------------------------------
// DECODING
//------------------------------------------------------------------------------
asn_dec_rval_t rval;
asn_codec_ctx_t *opt_codec_ctx = 0;
SRB_ToAddMod_t *clone = 0;
rval = uper_decode(opt_codec_ctx,
&asn_DEF_SRB_ToAddMod,/* Type to decode */
(void **)&clone, /* Pointer to a target structure's pointer */
&g_asn1_utils_serialize_buffer[0], /* Data to be decoded */
ASN1_UTILS_SERIALIZE_BUFFER_SIZE, /* Size of data buffer */
0, /* Number of unused leading bits, 0..7 */
0); /* Number of unused tailing bits, 0..7 */
if (rval.code != RC_OK) {
cerr << "[RRM][Asn1Utils::Clone(SRB_ToAddMod_t*)] ASN1 : ERROR IN ASN1 DECODING" << endl;
throw asn1_encoding_error();
}
return clone;
} else {
return NULL;
}
}
//-----------------------------------------------------------------
MAC_MainConfig_t* Asn1Utils::Clone(MAC_MainConfig_t* asn1_objP)
//-----------------------------------------------------------------
{
if (asn1_objP != NULL) {
//------------------------------------------------------------------------------
// ENCODING
//------------------------------------------------------------------------------
asn_enc_rval_t enc_rval;
memset(&g_asn1_utils_serialize_buffer[0], 0, ASN1_UTILS_SERIALIZE_BUFFER_SIZE);
enc_rval = uper_encode_to_buffer(&asn_DEF_MAC_MainConfig,
(void*)asn1_objP,
&g_asn1_utils_serialize_buffer[0],
ASN1_UTILS_SERIALIZE_BUFFER_SIZE);
cout <<"[RRM][Asn1Utils::Clone(MAC_MainConfig_t*)] asn_DEF_MAC_MainConfig Encoded "<< enc_rval.encoded <<" bits (" << (enc_rval.encoded+7)/8 << " bytes)" << endl;
if (enc_rval.encoded==-1) {
cerr << "[RRM][Asn1Utils::Clone(MAC_MainConfig_t*)] asn_DEF_MAC_MainConfig encoding FAILED, EXITING" << endl;
throw asn1_encoding_error();
}
//------------------------------------------------------------------------------
// DECODING
//------------------------------------------------------------------------------
asn_dec_rval_t rval;
asn_codec_ctx_t *opt_codec_ctx = 0;
MAC_MainConfig_t *clone = 0;
rval = uper_decode(opt_codec_ctx,
&asn_DEF_MAC_MainConfig,/* Type to decode */
(void **)&clone, /* Pointer to a target structure's pointer */
&g_asn1_utils_serialize_buffer[0], /* Data to be decoded */
ASN1_UTILS_SERIALIZE_BUFFER_SIZE, /* Size of data buffer */
0, /* Number of unused leading bits, 0..7 */
0); /* Number of unused tailing bits, 0..7 */
if (rval.code != RC_OK) {
cerr << "[RRM][Asn1Utils::Clone(MAC_MainConfig_t*)] ASN1 : ERROR IN ASN1 DECODING" << endl;
throw asn1_encoding_error();
}
return clone;
} else {
return NULL;
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _ASN1UTILS_H
# define _ASN1UTILS_H
# include "PhysicalConfigDedicated.h"
# include "RadioResourceConfigDedicated.h"
# include "DRB-ToAddMod.h"
# include "SRB-ToAddMod.h"
# include "MAC-MainConfig.h"
using namespace std;
class Asn1Utils
{
public:
Asn1Utils () {};
~Asn1Utils ();
static DRB_Identity_t* Clone(DRB_Identity_t*);
static DRB_ToAddMod_t* Clone(DRB_ToAddMod_t*);
static SRB_ToAddMod_t* Clone(SRB_ToAddMod_t*);
static MAC_MainConfig_t* Clone(MAC_MainConfig_t*);
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
//----------------------------------------------------------------------------
#include "Command.h"
#include "Exceptions.h"
//----------------------------------------------------------------------------
Command::Command(unsigned char equipment_typeP, unsigned char equipment_idP, unsigned char actionP, unsigned char object_typeP, unsigned char object_idP) :
m_equipment_type(equipment_typeP),m_equipment_id(equipment_idP),m_action(actionP), m_object_type(object_typeP), m_object_id(object_idP)
//----------------------------------------------------------------------------
{
Storage();
m_is_data_written = false;
this->writeChar(m_equipment_type);
this->writeChar(m_equipment_id);
this->writeChar(m_action);
this->writeChar(m_object_type);
this->writeChar(m_object_id);
};
//----------------------------------------------------------------------------
Command::Command(tcpip::Storage& storageP, size_t* sizeP)
//----------------------------------------------------------------------------
{
Storage();
m_is_data_written = false;
if (*sizeP >= 7) {
m_equipment_type = storageP.readChar();
m_equipment_id = storageP.readChar();
m_action = storageP.readChar();
m_object_type = storageP.readChar();
m_object_id = storageP.readChar();
this->writeChar(m_equipment_type);
this->writeChar(m_equipment_id);
this->writeChar(m_action);
this->writeChar(m_object_type);
this->writeChar(m_object_id);
unsigned short size = storageP.readShort();
this->writeShort(size);
*sizeP = *sizeP - 7;
if (size > 0) {
if (*sizeP >= size) {
for (int i = 0; i < size ; i++) {
this->writeChar(storageP.readChar());
}
} else {
throw command_deserialize_length_error();
}
*sizeP = *sizeP - size;
}
m_is_data_written = true;
} else {
throw command_deserialize_length_error();
}
}
//----------------------------------------------------------------------------
void Command::AddData(tcpip::Storage& storageP)
//----------------------------------------------------------------------------
{
if (!m_is_data_written) {
m_is_data_written = true;
//this->writeShort(storageP.size()); already done in storageP
this->writeStorage(storageP);
} else {
throw command_data_overwrite_error();
}
}
//----------------------------------------------------------------------------
unsigned int Command::size() const
//----------------------------------------------------------------------------
{
if (m_is_data_written) {
return Storage::size();
} else {
return Storage::size() + 2;
}
}
//----------------------------------------------------------------------------
void Command::Serialize(unsigned char* packetP)
//----------------------------------------------------------------------------
{
//std::cout << "[Command] Serialize()" << ToString() << std::endl;
if (!m_is_data_written) {
this->writeShort(0);
}
readPacket(packetP);
}
//----------------------------------------------------------------------------
std::string Command::ToString()
//----------------------------------------------------------------------------
{
stringstream result;
result << EquipmentType2String() << " ID: " << (unsigned int)m_equipment_id << " " << Action2String() << " " << ObjectType2String() << " ID: " << (unsigned int)m_object_id << " CONFIG SIZE: " << (size() - 7);
return result.str();
}
//----------------------------------------------------------------------------
std::string Command::EquipmentType2String() {
//----------------------------------------------------------------------------
switch (m_equipment_type) {
case COMMAND_EQUIPMENT_RADIO_GATEWAY: {
return "COMMAND_EQUIPMENT_RADIO_GATEWAY" ;
break;
}
case COMMAND_EQUIPMENT_MOBILE_TERMINAL: {
return "COMMAND_EQUIPMENT_MOBILE_TERMINAL";
break;
}
default: {
return "COMMAND_EQUIPMENT_UNKNOWN";
break;
}
}
}
//----------------------------------------------------------------------------
std::string Command::Action2String() {
//----------------------------------------------------------------------------
switch (m_action) {
case COMMAND_ACTION_NULL: {
return "ACTION_NULL" ;
break;
}
case COMMAND_ACTION_ADD: {
return "ACTION_ADD";
break;
}
case COMMAND_ACTION_REMOVE: {
return "ACTION_REMOVE";
break;
}
case COMMAND_ACTION_MODIFY: {
return "ACTION_MODIFY";
break;
}
default: {
return "ACTION_UNKNOWN";
break;
}
}
}
//----------------------------------------------------------------------------
std::string Command::ObjectType2String() {
//----------------------------------------------------------------------------
switch (m_object_type) {
case COMMAND_OBJECT_SIGNALLING_RADIO_BEARER: {
return "OBJECT_SIGNALLING_RADIO_BEARER" ;
break;
}
case COMMAND_OBJECT_DATA_RADIO_BEARER: {
return "OBJECT_DATA_RADIO_BEARER";
break;
}
case COMMAND_OBJECT_MOBILE: {
return "OBJECT_MOBILE";
break;
}
default: {
return "OBJECT_UNKNOWN";
break;
}
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
# ifndef _COMMAND_H
# define _COMMAND_H
# include "platform.h"
# include "storage.h"
using namespace std;
using namespace tcpip;
class Command : public Storage
{
public:
//typedef boost::shared_ptr<ENodeB> ENodeBPtr;
Command (): m_equipment_type(0u),m_equipment_id(0u),m_action(0u), m_object_type(0u), m_object_id(0u) {
Storage();
};
Command (unsigned char equipment_typeP, unsigned char equipment_idP, unsigned char actionP, unsigned char object_typeP, unsigned char object_idP);
Command(tcpip::Storage& storageP, size_t* sizeP);
void AddData(tcpip::Storage&);
void Serialize(unsigned char* packetP);
unsigned int size() const;
~Command () {
reset();
};
unsigned char GetEquipmentType() {
return m_equipment_type;
};
unsigned char GetEquipmentId() {
return m_equipment_id;
};
unsigned char GetAction() {
return m_action;
};
unsigned char GetEntityType() {
return m_object_type;
};
unsigned char GetEntityId() {
return m_object_id;
};
std::string ToString();
std::string EquipmentType2String();
std::string Action2String();
std::string ObjectType2String();
protected:
unsigned char m_equipment_type;
unsigned char m_equipment_id;
unsigned char m_action;
unsigned char m_object_type;
unsigned char m_object_id;
bool m_is_data_written;
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include "DataRadioBearer.h"
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _DATARADIOBEARER_H
# define _DATARADIOBEARER_H
# include <boost/ptr_container/ptr_map.hpp>
# include <map>
//# include <boost/shared_ptr.hpp>
# include "Message.h"
# include "LogicalChannel.h"
# include "RadioBearer.h"
# include "DRB-ToAddMod.h"
using namespace std;
class DataRadioBearer: public RadioBearer
{
public:
//typedef boost::shared_ptr<ENodeB> ENodeBPtr;
DataRadioBearer ():m_id(0u) {};
DataRadioBearer (unsigned int);
~DataRadioBearer ();
friend inline bool operator>( const DataRadioBearer& l, const DataRadioBearer r ) {
return l.m_id > r.m_id;
}
friend inline bool operator==( const DataRadioBearer& l, const DataRadioBearer r ) {
return l.m_id == r.m_id;
}
private:
unsigned int m_id;
DRB_ToAddMod_t m_drb_to_add_mod;
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
#include <string.h>
#include "ENodeB.h"
#include "Exceptions.h"
#include "Asn1Utils.h"
//static uint8_t g_message_serialize_buffer[MESSAGE_SERIALIZE_BUFFER_SIZE];
//-----------------------------------------------------------------
ENodeB::ENodeB(cell_id_t idP)
//-----------------------------------------------------------------
{
m_id = idP;
for (int i = 0 ; i < MAX_DRB; i++) {
for (int j = 0 ; j < MAX_MOBILE_PER_ENODE_B; j++) {
m_drb_to_add_mod[i][j] = NULL;
m_tx_id_pending_drb_to_add_mod[i][j] = -1;
m_pending_drb_to_release[i][j] = NULL;
m_tx_id_pending_drb_to_release[i][j] = -1;
}
}
for (int i = 0 ; i < MAX_SRB; i++) {
for (int j = 0 ; j < MAX_MOBILE_PER_ENODE_B; j++) {
m_srb_to_add_mod[i][j] = NULL;
m_tx_id_pending_srb_to_add_mod[i][j] = -1;
}
}
//m_radio_resource_config_dedicated = NULL;
}
//-----------------------------------------------------------------
RRM_RRC_Message_t* ENodeB::AddUserRequest(Mobile* mobileP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
RRM_RRC_Message_t* message;
AddSignallingRadioBearer1(mobileP->GetId(), transaction_idP);
message = static_cast<RRM_RRC_Message_t*>(CALLOC(1,sizeof(RRM_RRC_Message_t)));
message->message.present = RRM_RRC_MessageType_PR_c1;
message->message.choice.c1.present = RRM_RRC_MessageType__c1_PR_rrcAddUserResponse;
message->message.choice.c1.choice.rrcAddUserResponse.transactionId = transaction_idP;
message->message.choice.c1.choice.rrcAddUserResponse.rrm_Response_Status = OpenAir_RRM_Response_Status_success;
message->message.choice.c1.choice.rrcAddUserResponse.rrm_Response_Reason = OpenAir_RRM_Response_Reason_ok;
message->message.choice.c1.choice.rrcAddUserResponse.e_NodeB_Identity.physCellId = m_id;
message->message.choice.c1.choice.rrcAddUserResponse.c_RNTI = mobileP->GetId();;
message->message.choice.c1.choice.rrcAddUserResponse.radioResourceConfigDedicatedE_NodeB = GetASN1RadioResourceConfigDedicated(transaction_idP);
message->message.choice.c1.choice.rrcAddUserResponse.radioResourceConfigDedicatedMobile = mobileP->GetASN1RadioResourceConfigDedicated(transaction_idP);
//xer_fprint(stdout, &asn_DEF_RRM_RRC_Message, (void*)message);
return message;
}
//-----------------------------------------------------------------
RRM_RRC_Message_t* ENodeB::AddUserConfirm(Mobile* mobileP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
//----------------------------------------------------------------------
// Commit transaction here
mobileP->CommitTransaction(transaction_idP);
CommitTransaction(transaction_idP);
//----------------------------------------------------------------------
// Then send a reconfiguration message to the RRC
//
AddSignallingRadioBearer2(mobileP->GetId(), transaction_idP);
AddDefaultDataRadioBearer(mobileP->GetId(), transaction_idP);
mobileP->AddSignallingRadioBearer2(m_id, transaction_idP);
mobileP->AddDefaultDataRadioBearer(m_id, transaction_idP);
RRM_RRC_Message_t* message = static_cast<RRM_RRC_Message_t*>(CALLOC(1,sizeof(RRM_RRC_Message_t)));
message->message.present = RRM_RRC_MessageType_PR_c1;
message->message.choice.c1.present = RRM_RRC_MessageType__c1_PR_rrcUserReconfiguration;
message->message.choice.c1.choice.rrcUserReconfiguration.transactionId = transaction_idP;
message->message.choice.c1.choice.rrcUserReconfiguration.rrm_Response_Status = OpenAir_RRM_Response_Status_success;
message->message.choice.c1.choice.rrcUserReconfiguration.rrm_Response_Reason = OpenAir_RRM_Response_Reason_ok;
message->message.choice.c1.choice.rrcUserReconfiguration.e_NodeB_Identity.physCellId = m_id;
message->message.choice.c1.choice.rrcUserReconfiguration.c_RNTI = mobileP->GetId();
// ENodeB
message->message.choice.c1.choice.rrcUserReconfiguration.radioResourceConfigDedicatedE_NodeB = GetASN1RadioResourceConfigDedicated(transaction_idP);
// Mobile
message->message.choice.c1.choice.rrcUserReconfiguration.radioResourceConfigDedicatedMobile = mobileP->GetASN1RadioResourceConfigDedicated(transaction_idP);
xer_fprint(stdout, &asn_DEF_RRM_RRC_Message, (void*)message);
return message;
}
//-----------------------------------------------------------------
void ENodeB::UserReconfigurationComplete(Mobile* mobileP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
//----------------------------------------------------------------------
// Commit transaction here
mobileP->CommitTransaction(transaction_idP);
CommitTransaction(transaction_idP);
}
//-----------------------------------------------------------------
RRM_RRC_Message_t* ENodeB::RemoveUserRequest(Mobile* mobileP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
RRM_RRC_Message_t* message;
return message;
}
//-----------------------------------------------------------------
void ENodeB::AddSignallingRadioBearer1(mobile_id_t mobile_idP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
cout << "[RRM] ENodeB::AddSignallingRadioBearer1(mobile="<< mobile_idP << " transaction_id="<< transaction_idP << endl;
SRB_ToAddMod_t* srb1 = static_cast<SRB_ToAddMod_t*>(CALLOC(1,sizeof(SRB_ToAddMod_t)));
srb1->srb_Identity = 1;
srb1->rlc_Config = static_cast<SRB_ToAddMod::SRB_ToAddMod__rlc_Config*>(CALLOC(1,sizeof(SRB_ToAddMod::SRB_ToAddMod__rlc_Config)));
srb1->rlc_Config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue;
srb1->rlc_Config->choice.explicitValue.present = RLC_Config_PR_am;
srb1->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50;
srb1->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p4;
srb1->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB25;
srb1->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32;
srb1->rlc_Config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms100;
srb1->rlc_Config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms5;
srb1->logicalChannelConfig = static_cast<SRB_ToAddMod::SRB_ToAddMod__logicalChannelConfig*>(CALLOC(1,sizeof(SRB_ToAddMod::SRB_ToAddMod__logicalChannelConfig)));
srb1->logicalChannelConfig->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue;
srb1->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters = static_cast<LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters*>(CALLOC(1,sizeof(LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters)));
srb1->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->priority = 1;
srb1->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity;
srb1->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->bucketSizeDuration = LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50;
srb1->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup = 0;
m_pending_srb_to_add_mod[srb1->srb_Identity-1][mobile_idP] = srb1;
m_tx_id_pending_srb_to_add_mod[srb1->srb_Identity-1][mobile_idP] = transaction_idP;
}
//-----------------------------------------------------------------
void ENodeB::AddSignallingRadioBearer2(mobile_id_t mobile_idP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
cout << "[RRM] ENodeB::AddSignallingRadioBearer2(mobile="<< mobile_idP << " transaction_id="<< transaction_idP << endl;
SRB_ToAddMod_t* srb2 = static_cast<SRB_ToAddMod_t*>(CALLOC(1,sizeof(SRB_ToAddMod_t)));
srb2->srb_Identity = 2;
srb2->rlc_Config = static_cast<SRB_ToAddMod::SRB_ToAddMod__rlc_Config*>(CALLOC(1,sizeof(SRB_ToAddMod::SRB_ToAddMod__rlc_Config)));
srb2->rlc_Config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue;
srb2->rlc_Config->choice.explicitValue.present = RLC_Config_PR_am;
srb2->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50;
srb2->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p4;
srb2->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB25;
srb2->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32;
srb2->rlc_Config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms100;
srb2->rlc_Config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms5;
srb2->logicalChannelConfig = static_cast<SRB_ToAddMod::SRB_ToAddMod__logicalChannelConfig*>(CALLOC(1,sizeof(SRB_ToAddMod::SRB_ToAddMod__logicalChannelConfig)));
srb2->logicalChannelConfig->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue;
srb2->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters = static_cast<LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters*>(CALLOC(1,sizeof(LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters)));
srb2->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->priority = 1;
srb2->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity;
srb2->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->bucketSizeDuration = LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50;
srb2->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup = 0;
m_pending_srb_to_add_mod[srb2->srb_Identity-1][mobile_idP] = srb2;
m_tx_id_pending_srb_to_add_mod[srb2->srb_Identity-1][mobile_idP] = transaction_idP;
}
//-----------------------------------------------------------------
void ENodeB::AddDefaultDataRadioBearer(mobile_id_t mobile_idP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
cout << "[RRM] ENodeB::AddDefaultDataRadioBearer(mobile="<< mobile_idP << " transaction_id="<< transaction_idP << endl;
DRB_ToAddMod_t* drb = static_cast<DRB_ToAddMod_t*>(CALLOC(1,sizeof(DRB_ToAddMod_t)));
drb->drb_Identity = 3;
drb->rlc_Config = static_cast<RLC_Config_t*>(CALLOC(1,sizeof(RLC_Config_t)));
drb->rlc_Config->present = RLC_Config_PR_am;
drb->rlc_Config->choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50;
drb->rlc_Config->choice.am.ul_AM_RLC.pollPDU = PollPDU_p4;
drb->rlc_Config->choice.am.ul_AM_RLC.pollByte = PollByte_kB25;
drb->rlc_Config->choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32;
drb->rlc_Config->choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms100;
drb->rlc_Config->choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms5;
drb->logicalChannelConfig = static_cast<LogicalChannelConfig_t*>(CALLOC(1,sizeof(LogicalChannelConfig_t)));
drb->logicalChannelConfig->ul_SpecificParameters = static_cast<LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters*>(CALLOC(1,sizeof(LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters)));
drb->logicalChannelConfig->ul_SpecificParameters->priority = 1;
drb->logicalChannelConfig->ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity;
drb->logicalChannelConfig->ul_SpecificParameters->bucketSizeDuration = LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50;
drb->logicalChannelConfig->ul_SpecificParameters->logicalChannelGroup = 0;
m_pending_drb_to_add_mod[drb->drb_Identity-1][mobile_idP] = drb;
m_tx_id_pending_drb_to_add_mod[drb->drb_Identity-1][mobile_idP] = transaction_idP;
}
//-----------------------------------------------------------------
void ENodeB::RemoveAllDataRadioBearers(Mobile* mobileP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
/*
for (int i = 3 ; i < MAX_RB_PER_MOBILE; i++) {
mobile_id_t mobile_id = mobileP->GetId();
if (m_radio_bearer_array[i][mobile_id] != NULL) {
Command* command = new Command(COMMAND_EQUIPMENT_RADIO_GATEWAY,
m_id,
COMMAND_ACTION_REMOVE,
COMMAND_OBJECT_DATA_RADIO_BEARER,
i + (mobile_id * MAX_RB_PER_MOBILE));
transactionP->AddCommand(command);
RadioBearer* rb = m_radio_bearer_array[i][mobile_id];
m_radio_bearer_array[i][mobile_id] = NULL;
delete rb;
}
}
*/
}
//-----------------------------------------------------------------
ENodeB::~ENodeB()
//-----------------------------------------------------------------
{
//if (!m_radio_bearer_map.empty()) m_radio_bearer_map.clear();
//if (!m_mobile_map.empty()) m_mobile_map.clear();
for (int i = 0 ; i < MAX_DRB; i++) {
for (int j = 0 ; j < MAX_MOBILE_PER_ENODE_B; j++) {
if (m_drb_to_add_mod[i][j] != NULL) {
asn_DEF_DRB_ToAddMod.free_struct(&asn_DEF_DRB_ToAddMod, m_drb_to_add_mod[i][j], 0);
}
}
}
for (int i = 0 ; i < MAX_SRB; i++) {
for (int j = 0 ; j < MAX_MOBILE_PER_ENODE_B; j++) {
if (m_srb_to_add_mod[i][j] != NULL) {
asn_DEF_SRB_ToAddMod.free_struct(&asn_DEF_SRB_ToAddMod, m_srb_to_add_mod[i][j], 0);
}
}
}
/*if (m_radio_resource_config_dedicated != NULL) {
asn_DEF_RadioResourceConfigDedicated.free_struct(&asn_DEF_RadioResourceConfigDedicated, m_radio_resource_config_dedicated, 0);
}*/
}
//-----------------------------------------------------------------
void ENodeB::CommitTransaction(transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
for (int i = 0 ; i < MAX_DRB; i++) {
for (int j = 0 ; j < MAX_MOBILE_PER_ENODE_B; j++) {
// Look if there is a transaction for removing a DRB
if (m_tx_id_pending_drb_to_release[i][j] == transaction_idP) {
if (m_drb_to_add_mod[i][j] == NULL) {
throw transaction_overwrite_error();
} else {
cerr << "[RRM] ENodeB::CommitTransaction(" << transaction_idP << ") free_struct m_drb_to_add_mod["<< i << "][" << j << "]" << endl;
asn_DEF_DRB_ToAddMod.free_struct( &asn_DEF_DRB_ToAddMod, m_drb_to_add_mod[i][j],0);
m_drb_to_add_mod[i][j] = NULL;
}
m_tx_id_pending_drb_to_release[i][j] = -1;
}
if (m_tx_id_pending_drb_to_add_mod[i][j] == transaction_idP) {
if (m_drb_to_add_mod[i][j] == NULL) {
m_drb_to_add_mod[i][j] = m_pending_drb_to_add_mod[i][j];
cerr << "[RRM] ENodeB::CommitTransaction(" << transaction_idP << ") add struct m_pending_drb_to_add_mod["<< i << "][" << j << "]" << endl;
m_pending_drb_to_add_mod[i][j] = NULL;
} else {
throw transaction_overwrite_error();
}
m_tx_id_pending_drb_to_add_mod[i][j] = -1;
}
}
}
for (int i = 0 ; i < MAX_SRB; i++) {
for (int j = 0 ; j < MAX_MOBILE_PER_ENODE_B; j++) {
if (m_tx_id_pending_srb_to_add_mod[i][j] == transaction_idP) {
if (m_srb_to_add_mod[i][j] == NULL) {
m_srb_to_add_mod[i][j] = m_pending_srb_to_add_mod[i][j];
cerr << "[RRM] ENodeB::CommitTransaction(" << transaction_idP << ") add struct m_pending_srb_to_add_mod["<< i << "][" << j << "]" << endl;
m_pending_srb_to_add_mod[i][j] = NULL;
} else {
throw transaction_overwrite_error();
}
m_tx_id_pending_srb_to_add_mod[i][j] = -1;
}
}
}
}
//-----------------------------------------------------------------
RadioResourceConfigDedicated_t* ENodeB::GetASN1RadioResourceConfigDedicated(transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
RadioResourceConfigDedicated_t* config = static_cast<RadioResourceConfigDedicated_t*>(CALLOC(1,sizeof(RadioResourceConfigDedicated_t)));
config->srb_ToAddModList = NULL;
config->drb_ToReleaseList = NULL;
config->drb_ToAddModList = NULL;
for (int i = 0 ; i < MAX_DRB; i++) {
for (int j = 0 ; j < MAX_MOBILE_PER_ENODE_B; j++) {
// Look if there is a transaction for removing a DRB
if (m_tx_id_pending_drb_to_release[i][j] == transaction_idP) {
if (config->drb_ToReleaseList == NULL) {
config->drb_ToReleaseList = static_cast<DRB_ToReleaseList_t*>(CALLOC(1,sizeof(DRB_ToReleaseList_t)));
}
cerr << "[RRM] ENodeB::GetASN1RadioResourceConfigDedicated(" << transaction_idP << ") Releasing DRB "<< m_pending_drb_to_release[i][j] << endl;
ASN_SEQUENCE_ADD(&config->drb_ToReleaseList->list,Asn1Utils::Clone(&m_pending_drb_to_release[i][j]));
}
if (m_tx_id_pending_drb_to_add_mod[i][j] == transaction_idP) {
if (config->drb_ToAddModList == NULL) {
config->drb_ToAddModList = static_cast<DRB_ToAddModList_t*>(CALLOC(1,sizeof(DRB_ToAddModList_t)));
}
cerr << "[RRM] ENodeB::GetASN1RadioResourceConfigDedicated(" << transaction_idP << ") Adding DRB "<< m_pending_drb_to_add_mod[i][j] << endl;
ASN_SEQUENCE_ADD(&config->drb_ToAddModList->list, Asn1Utils::Clone(m_pending_drb_to_add_mod[i][j]));
}
}
}
for (int i = 0 ; i < MAX_SRB; i++) {
for (int j = 0 ; j < MAX_MOBILE_PER_ENODE_B; j++) {
if (m_tx_id_pending_srb_to_add_mod[i][j] == transaction_idP) {
if (config->srb_ToAddModList == NULL) {
config->srb_ToAddModList = static_cast<SRB_ToAddModList_t*>(CALLOC(1,sizeof(SRB_ToAddModList_t)));
}
cerr << "[RRM] ENodeB::GetASN1RadioResourceConfigDedicated(" << transaction_idP << ") Adding SRB "<< m_pending_srb_to_add_mod[i][j] << endl;
ASN_SEQUENCE_ADD(&config->srb_ToAddModList->list, Asn1Utils::Clone(m_pending_srb_to_add_mod[i][j]));
}
}
}
config->mac_MainConfig = static_cast<RadioResourceConfigDedicated::RadioResourceConfigDedicated__mac_MainConfig*>(CALLOC(1,sizeof(RadioResourceConfigDedicated::RadioResourceConfigDedicated__mac_MainConfig)));
config->mac_MainConfig->present = RadioResourceConfigDedicated__mac_MainConfig_PR_defaultValue;
return config;
}
//-----------------------------------------------------------------
RRM_RRC_Message_t* ENodeB::GetRRMRRCConfigurationMessage(transaction_id_t transaction_idP) {
//-----------------------------------------------------------------
RRM_RRC_Message_t* message;
SystemInformation_t* system_information;
SystemInformationBlockType1_t* sib1;
message = static_cast<RRM_RRC_Message_t*>(CALLOC(1,sizeof(RRM_RRC_Message_t)));
system_information = static_cast<SystemInformation_t*>(CALLOC(1,sizeof(SystemInformation_t)));
sib1 = static_cast<SystemInformationBlockType1_t*>(CALLOC(1,sizeof(SystemInformationBlockType1_t)));
message->message.present = RRM_RRC_MessageType_PR_c1;
message->message.choice.c1.present = RRM_RRC_MessageType__c1_PR_rrcSystemConfigurationResponse;
message->message.choice.c1.choice.rrcSystemConfigurationResponse.e_NodeB_Identity.physCellId = m_id;
message->message.choice.c1.choice.rrcSystemConfigurationResponse.transactionId = transaction_idP;
//-----------------------------------------------------------------------------
// SIB1 CONSTRUCTION
//-----------------------------------------------------------------------------
PLMN_IdentityInfo_t* PLMN_identity_info;
MCC_MNC_Digit_t* dummy;
SchedulingInfo_t* schedulingInfo;
SIB_Type_t* sib_type;
memset(sib1,0,sizeof(SystemInformationBlockType1_t));
PLMN_identity_info = static_cast<PLMN_IdentityInfo_t*>(CALLOC(1,sizeof(PLMN_IdentityInfo_t)));
schedulingInfo = static_cast<SchedulingInfo_t*>(CALLOC(1,sizeof(SchedulingInfo_t)));
sib_type = static_cast<SIB_Type_t*>(CALLOC(1,sizeof(SIB_Type_t)));
memset(PLMN_identity_info,0,sizeof(PLMN_IdentityInfo_t));
memset(schedulingInfo,0,sizeof(SchedulingInfo_t));
memset(sib_type,0,sizeof(SIB_Type_t));
PLMN_identity_info->plmn_Identity.mcc = static_cast<MCC_t*>(CALLOC(1,sizeof(MCC_t)));
memset(PLMN_identity_info->plmn_Identity.mcc,0,sizeof(MCC_t));
asn_set_empty(&PLMN_identity_info->plmn_Identity.mcc->list);//.size=0;
dummy = static_cast<MCC_MNC_Digit_t*>(CALLOC(1,sizeof(MCC_MNC_Digit_t)));
*dummy=2;ASN_SEQUENCE_ADD(&PLMN_identity_info->plmn_Identity.mcc->list, dummy);
dummy = static_cast<MCC_MNC_Digit_t*>(CALLOC(1,sizeof(MCC_MNC_Digit_t)));
*dummy=6;ASN_SEQUENCE_ADD(&PLMN_identity_info->plmn_Identity.mcc->list, dummy);
dummy = static_cast<MCC_MNC_Digit_t*>(CALLOC(1,sizeof(MCC_MNC_Digit_t)));
*dummy=2;ASN_SEQUENCE_ADD(&PLMN_identity_info->plmn_Identity.mcc->list, dummy);
//dummy=2;ASN_SEQUENCE_ADD(&PLMN_identity_info->plmn_Identity.mcc->list, &dummy);
//dummy=6;ASN_SEQUENCE_ADD(&PLMN_identity_info->plmn_Identity.mcc->list, &dummy);
//dummy=2;ASN_SEQUENCE_ADD(&PLMN_identity_info->plmn_Identity.mcc->list, &dummy);
asn_set_empty(&PLMN_identity_info->plmn_Identity.mnc.list);//.size=0;
//PLMN_identity_info->plmn_Identity.mnc.list.size=0;
//PLMN_identity_info->plmn_Identity.mnc.list.count=0;
dummy = static_cast<MCC_MNC_Digit_t*>(CALLOC(1,sizeof(MCC_MNC_Digit_t)));
*dummy=8;ASN_SEQUENCE_ADD(&PLMN_identity_info->plmn_Identity.mnc.list, dummy);
dummy = static_cast<MCC_MNC_Digit_t*>(CALLOC(1,sizeof(MCC_MNC_Digit_t)));
*dummy=8;ASN_SEQUENCE_ADD(&PLMN_identity_info->plmn_Identity.mnc.list, dummy);
//dummy=8;ASN_SEQUENCE_ADD(&PLMN_identity_info->plmn_Identity.mnc.list,&dummy);
//dummy=0;ASN_SEQUENCE_ADD(&PLMN_identity_info->plmn_Identity.mnc.list,&dummy);
//assign_enum(&PLMN_identity_info->cellReservedForOperatorUse,PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved);
PLMN_identity_info->cellReservedForOperatorUse=PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved;
message->message.choice.c1.choice.rrcSystemConfigurationResponse.systemInformationBlockType1 = sib1;
ASN_SEQUENCE_ADD(&sib1->cellAccessRelatedInfo.plmn_IdentityList.list,PLMN_identity_info);
// 16 bits
sib1->cellAccessRelatedInfo.trackingAreaCode.buf = static_cast<uint8_t*>(MALLOC(2));
sib1->cellAccessRelatedInfo.trackingAreaCode.buf[0]=0x00;
sib1->cellAccessRelatedInfo.trackingAreaCode.buf[1]=0x10;
sib1->cellAccessRelatedInfo.trackingAreaCode.size=2;
sib1->cellAccessRelatedInfo.trackingAreaCode.bits_unused=0;
// 28 bits
sib1->cellAccessRelatedInfo.cellIdentity.buf = static_cast<uint8_t*>(MALLOC(8));
sib1->cellAccessRelatedInfo.cellIdentity.buf[0]=0x01;
sib1->cellAccessRelatedInfo.cellIdentity.buf[1]=0x48;
sib1->cellAccessRelatedInfo.cellIdentity.buf[2]=0x0f;
sib1->cellAccessRelatedInfo.cellIdentity.buf[3]=0x03;
sib1->cellAccessRelatedInfo.cellIdentity.size=4;
sib1->cellAccessRelatedInfo.cellIdentity.bits_unused=4;
// assign_enum(&sib1->cellAccessRelatedInfo.cellBarred,SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_notBarred);
sib1->cellAccessRelatedInfo.cellBarred=SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_notBarred;
// assign_enum(&sib1->cellAccessRelatedInfo.intraFreqReselection,SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection_allowed);
sib1->cellAccessRelatedInfo.intraFreqReselection=SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection_allowed;
sib1->cellAccessRelatedInfo.csg_Indication=0;
sib1->cellSelectionInfo.q_RxLevMin=-70;
sib1->cellSelectionInfo.q_RxLevMinOffset=NULL;
sib1->freqBandIndicator = 2;
// assign_enum(&schedulingInfo.si_Periodicity,SchedulingInfo__si_Periodicity_rf8);
schedulingInfo->si_Periodicity=SchedulingInfo__si_Periodicity_rf8;
// assign_enum(&sib_type,SIB_Type_sibType3);
*sib_type=SIB_Type_sibType3;
ASN_SEQUENCE_ADD(&schedulingInfo->sib_MappingInfo.list,sib_type);
ASN_SEQUENCE_ADD(&sib1->schedulingInfoList.list,schedulingInfo);
sib1->tdd_Config = static_cast<TDD_Config*>(CALLOC(1,sizeof(struct TDD_Config)));
//assign_enum(&sib1->tdd_Config->subframeAssignment,TDD_Config__subframeAssignment_sa3);
sib1->tdd_Config->subframeAssignment=TDD_Config__subframeAssignment_sa3;
// assign_enum(&sib1->tdd_Config->specialSubframePatterns,TDD_Config__specialSubframePatterns_ssp0);
sib1->tdd_Config->specialSubframePatterns=TDD_Config__specialSubframePatterns_ssp0;
// assign_enum(&sib1->si_WindowLength,SystemInformationBlockType1__si_WindowLength_ms10);
sib1->si_WindowLength=SystemInformationBlockType1__si_WindowLength_ms10;
sib1->systemInfoValueTag=0;
//-----------------------------------------------------------------------------
// SIB2 CONSTRUCTION
//-----------------------------------------------------------------------------
struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member *sib2_part;
sib2_part = static_cast<SystemInformation_r8_IEs__sib_TypeAndInfo__Member*>(CALLOC(1,sizeof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member)));
memset(sib2_part,0,sizeof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member));
sib2_part->present = SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2;
sib2_part->choice.sib2.ac_BarringInfo = NULL;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.numberOfRA_Preambles,RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n64);
sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.numberOfRA_Preambles=RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n64;
sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig = NULL;
//calloc(1,sizeof(*sib2_part->choice.sib2.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig));
// assign_enum(&sib2_part->choice.sib2.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA,
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.powerRampingStep, RACH_ConfigCommon__powerRampingParameters__powerRampingStep_dB2);
sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.powerRampingStep=RACH_ConfigCommon__powerRampingParameters__powerRampingStep_dB2;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.preambleInitialReceivedTargetPower,RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_116 );
sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.preambleInitialReceivedTargetPower=RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_116;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.preambleTransMax,RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n10);
sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.preambleTransMax=RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n10;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.ra_ResponseWindowSize,RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize_sf4);
sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.ra_ResponseWindowSize=RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize_sf4;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.mac_ContentionResolutionTimer,RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer_sf48);
sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.mac_ContentionResolutionTimer=RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer_sf48;
sib2_part->choice.sib2.radioResourceConfigCommon.rach_ConfigCommon.maxHARQ_Msg3Tx = 4;
// BCCH-Config
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.bcch_Config.modificationPeriodCoeff,BCCH_Config__modificationPeriodCoeff_n2);
sib2_part->choice.sib2.radioResourceConfigCommon.bcch_Config.modificationPeriodCoeff=BCCH_Config__modificationPeriodCoeff_n2;
// PCCH-Config
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.pcch_Config.defaultPagingCycle,PCCH_Config__defaultPagingCycle_rf128);
sib2_part->choice.sib2.radioResourceConfigCommon.pcch_Config.defaultPagingCycle=PCCH_Config__defaultPagingCycle_rf128;
// assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.pcch_Config.nB,PCCH_Config__nB_oneT);
sib2_part->choice.sib2.radioResourceConfigCommon.pcch_Config.nB=PCCH_Config__nB_oneT;
// PRACH-Config
sib2_part->choice.sib2.radioResourceConfigCommon.prach_Config.rootSequenceIndex=384;
sib2_part->choice.sib2.radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_ConfigIndex = 3;
sib2_part->choice.sib2.radioResourceConfigCommon.prach_Config.prach_ConfigInfo.highSpeedFlag = 0;
sib2_part->choice.sib2.radioResourceConfigCommon.prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig = 12;
sib2_part->choice.sib2.radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_FreqOffset = 2;
// PDSCH-Config
sib2_part->choice.sib2.radioResourceConfigCommon.pdsch_ConfigCommon.referenceSignalPower=15;
sib2_part->choice.sib2.radioResourceConfigCommon.pdsch_ConfigCommon.p_b=0;
// PUSCH-Config
sib2_part->choice.sib2.radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.n_SB=1;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode,PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame);
sib2_part->choice.sib2.radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode=PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame;
sib2_part->choice.sib2.radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset=0;
sib2_part->choice.sib2.radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM=0;
sib2_part->choice.sib2.radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled=1;
sib2_part->choice.sib2.radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH=0;
sib2_part->choice.sib2.radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled=0;
sib2_part->choice.sib2.radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift=0;
// PUCCH-Config
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.pucch_ConfigCommon.deltaPUCCH_Shift,PUCCH_ConfigCommon__deltaPUCCH_Shift_ds1);
sib2_part->choice.sib2.radioResourceConfigCommon.pucch_ConfigCommon.deltaPUCCH_Shift=PUCCH_ConfigCommon__deltaPUCCH_Shift_ds1;
sib2_part->choice.sib2.radioResourceConfigCommon.pucch_ConfigCommon.nRB_CQI = 1;
sib2_part->choice.sib2.radioResourceConfigCommon.pucch_ConfigCommon.nCS_AN = 0;
sib2_part->choice.sib2.radioResourceConfigCommon.pucch_ConfigCommon.n1PUCCH_AN = 32;
sib2_part->choice.sib2.radioResourceConfigCommon.soundingRS_UL_ConfigCommon.present=SoundingRS_UL_ConfigCommon_PR_release;
sib2_part->choice.sib2.radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.release=0;
// uplinkPowerControlCommon
sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUSCH = -96;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.alpha,UplinkPowerControlCommon__alpha_al1);
sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.alpha=UplinkPowerControlCommon__alpha_al1;
sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUCCH = -117;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1, DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF0);
sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1=DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF0;
// assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1b, DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF3);
sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1b=DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF3;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2, DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF0);
sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2=DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF0;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2a, DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF0);
sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2a=DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF0;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2b, DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0);
sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2b=DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0;
sib2_part->choice.sib2.radioResourceConfigCommon.uplinkPowerControlCommon.deltaPreambleMsg3 = 6;
//assign_enum(&sib2_part->choice.sib2.radioResourceConfigCommon.ul_CyclicPrefixLength, UL_CyclicPrefixLength_len1);
sib2_part->choice.sib2.radioResourceConfigCommon.ul_CyclicPrefixLength=UL_CyclicPrefixLength_len1;
//assign_enum(&sib2_part->choice.sib2.ue_TimersAndConstants.t300, UE_TimersAndConstants__t300_ms1000);
sib2_part->choice.sib2.ue_TimersAndConstants.t300=UE_TimersAndConstants__t300_ms1000;
//assign_enum(&sib2_part->choice.sib2.ue_TimersAndConstants.t301, UE_TimersAndConstants__t301_ms1000);
sib2_part->choice.sib2.ue_TimersAndConstants.t301=UE_TimersAndConstants__t301_ms1000;
//assign_enum(&sib2_part->choice.sib2.ue_TimersAndConstants.t310, UE_TimersAndConstants__t310_ms1000);
sib2_part->choice.sib2.ue_TimersAndConstants.t310=UE_TimersAndConstants__t310_ms1000;
//assign_enum(&sib2_part->choice.sib2.ue_TimersAndConstants.n310, UE_TimersAndConstants__n310_n20);
sib2_part->choice.sib2.ue_TimersAndConstants.n310=UE_TimersAndConstants__n310_n20;
//assign_enum(&sib2_part->choice.sib2.ue_TimersAndConstants.t311, UE_TimersAndConstants__t311_ms1000);
sib2_part->choice.sib2.ue_TimersAndConstants.t311=UE_TimersAndConstants__t311_ms1000;
//assign_enum(&sib2_part->choice.sib2.ue_TimersAndConstants.n311, UE_TimersAndConstants__n311_n1);
sib2_part->choice.sib2.ue_TimersAndConstants.n311=UE_TimersAndConstants__n311_n1;
sib2_part->choice.sib2.freqInfo.additionalSpectrumEmission = 1;
sib2_part->choice.sib2.freqInfo.ul_CarrierFreq = NULL;
sib2_part->choice.sib2.freqInfo.ul_Bandwidth = NULL;
sib2_part->choice.sib2.mbsfn_SubframeConfigList = NULL;
//assign_enum(&sib2_part->choice.sib2.timeAlignmentTimerCommon,TimeAlignmentTimer_sf5120);
sib2_part->choice.sib2.timeAlignmentTimerCommon=TimeAlignmentTimer_sf5120;
//-----------------------------------------------------------------------------
// SIB3 CONSTRUCTION
//-----------------------------------------------------------------------------
struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member *sib3_part;
sib3_part = static_cast<SystemInformation_r8_IEs__sib_TypeAndInfo__Member*>(CALLOC(1,sizeof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member)));
memset(sib3_part,0,sizeof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member));
sib3_part->present = SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib3;
// assign_enum(&sib3_part->choice.sib3cellReselectionInfoCommon.q_Hyst,SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB4);
sib3_part->choice.sib3.cellReselectionInfoCommon.q_Hyst=SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB4;
sib3_part->choice.sib3.cellReselectionInfoCommon.speedStateReselectionPars=NULL;
sib3_part->choice.sib3.cellReselectionServingFreqInfo.s_NonIntraSearch=NULL;
sib3_part->choice.sib3.cellReselectionServingFreqInfo.threshServingLow=31;
sib3_part->choice.sib3.cellReselectionServingFreqInfo.cellReselectionPriority=7;
sib3_part->choice.sib3.intraFreqCellReselectionInfo.q_RxLevMin = -70;
sib3_part->choice.sib3.intraFreqCellReselectionInfo.p_Max = NULL;
sib3_part->choice.sib3.intraFreqCellReselectionInfo.s_IntraSearch = static_cast<ReselectionThreshold_t*>(CALLOC(1,sizeof(sib3_part->choice.sib3.intraFreqCellReselectionInfo.s_IntraSearch)));
*sib3_part->choice.sib3.intraFreqCellReselectionInfo.s_IntraSearch = 31;
sib3_part->choice.sib3.intraFreqCellReselectionInfo.allowedMeasBandwidth=static_cast<AllowedMeasBandwidth_t*>(CALLOC(1,sizeof(*sib3_part->choice.sib3.intraFreqCellReselectionInfo.allowedMeasBandwidth)));
// assign_enum(sib3_part->choice.sib3.intraFreqCellReselectionInfo.allowedMeasBandwidth,AllowedMeasBandwidth_mbw6);
*sib3_part->choice.sib3.intraFreqCellReselectionInfo.allowedMeasBandwidth=AllowedMeasBandwidth_mbw6;
sib3_part->choice.sib3.intraFreqCellReselectionInfo.presenceAntennaPort1 = 0;
sib3_part->choice.sib3.intraFreqCellReselectionInfo.neighCellConfig.buf = static_cast<uint8_t*>(CALLOC(8,1));
sib3_part->choice.sib3.intraFreqCellReselectionInfo.neighCellConfig.size = 1;
sib3_part->choice.sib3.intraFreqCellReselectionInfo.neighCellConfig.buf[0] = 1;
sib3_part->choice.sib3.intraFreqCellReselectionInfo.neighCellConfig.bits_unused = 6;
sib3_part->choice.sib3.intraFreqCellReselectionInfo.t_ReselectionEUTRA = 1;
sib3_part->choice.sib3.intraFreqCellReselectionInfo.t_ReselectionEUTRA_SF = (struct SpeedStateScaleFactors *)NULL;
//-----------------------------------------------------------------------------
// SIB AGGREGATION
//-----------------------------------------------------------------------------
memset((void*)system_information,0,sizeof(SystemInformation_t));
message->message.choice.c1.choice.rrcSystemConfigurationResponse.systemInformation = system_information;
system_information->criticalExtensions.present = SystemInformation__criticalExtensions_PR_systemInformation_r8;
system_information->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count=0;
// asn_set_empty(&systemInformation->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list);//.size=0;
// systemInformation->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count=0;
ASN_SEQUENCE_ADD(&system_information->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list,sib2_part);
ASN_SEQUENCE_ADD(&system_information->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list,sib3_part);
//xer_fprint(stdout, &asn_DEF_RRM_RRC_Message, (void*)message);
return message;
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _ENODEB_H
# define _ENODEB_H
# include "RRM-RRC-Message.h"
# include "RadioResourceConfigCommon.h"
# include "E-NodeB-Identity.h"
# include "PhysicalConfigDedicated.h"
# include "RadioResourceConfigDedicated.h"
# include "DRB-ToAddMod.h"
# include "SRB-ToAddMod.h"
# include "MAC-MainConfig.h"
# include "RRCSystemConfigurationResponse.h"
# include "RRCConnectionReconfiguration.h"
# include "SystemInformationBlockType1.h"
# include "SystemInformationBlockType2.h"
# include "SystemInformationBlockType3.h"
# include "SystemInformation.h"
//# include <boost/ptr_container/ptr_map.hpp>
//# include <map>
# include "Message.h"
# include "Mobile.h"
# include "RadioBearer.h"
# include "platform.h"
# include "Transaction.h"
# include "LogicalChannelConfig.h"
# include "RRCUserReconfiguration.h"
using namespace std;
class ENodeB
{
public:
ENodeB ():m_id(0u) {};
ENodeB (cell_id_t);
~ENodeB ();
friend inline bool operator>( const ENodeB& l, const ENodeB r ) {
return l.m_id > r.m_id;
}
friend inline bool operator==( const ENodeB& l, const ENodeB r ) {
return l.m_id == r.m_id;
}
cell_id_t GetId() {
return m_id;
};
void CommitTransaction(transaction_id_t transaction_idP);
RadioResourceConfigDedicated_t* GetASN1RadioResourceConfigDedicated(transaction_id_t transaction_idP);
RRM_RRC_Message_t* GetRRMRRCConfigurationMessage(transaction_id_t transaction_idP);
RRM_RRC_Message_t* AddUserRequest (Mobile* mobileP, transaction_id_t transaction_idP);
RRM_RRC_Message_t* AddUserConfirm (Mobile* mobileP, transaction_id_t transaction_idP);
RRM_RRC_Message_t* RemoveUserRequest(Mobile* mobileP, transaction_id_t transaction_idP);
void UserReconfigurationComplete(Mobile* mobileP, transaction_id_t transaction_idP);
void RemoveAllDataRadioBearers (Mobile* mobileP, transaction_id_t transaction_idP);
/*void AddDataRadioBearer(Mobile* mobileP,
rb_id_t radio_bearer_idP,
unsigned short traffic_class,
unsigned short delay,
unsigned int guaranted_bit_rate_uplink,
unsigned int max_bit_rate_uplink,
unsigned int guaranted_bit_rate_downlink,
unsigned int max_bit_rate_downlink,
Transaction* transactionP);*/
/*void RemoveDataRadioBearer(Mobile* mobileP,
rb_id_t radio_bearer_idP,
Transaction* transactionP);*/
protected:
void AddSignallingRadioBearer1(mobile_id_t mobile_idP, transaction_id_t transaction_idP);
void AddSignallingRadioBearer2(mobile_id_t mobile_idP, transaction_id_t transaction_idP);
void AddDefaultDataRadioBearer(mobile_id_t mobile_idP, transaction_id_t transaction_idP);
//boost::ptr_map<mobile_id_t ,Mobile > m_mobile_map;
//RadioBearer* m_radio_bearer_array[MAX_RB_PER_MOBILE][MAX_MOBILE_PER_ENODE_B];
cell_id_t m_id;
// ASN1 AUTO GENERATED STRUCTS COMPLIANT WITH 3GPP
MAC_MainConfig_t m_mac_main_config;
DRB_ToAddMod_t* m_drb_to_add_mod[MAX_DRB][MAX_MOBILE_PER_ENODE_B];
SRB_ToAddMod_t* m_srb_to_add_mod[MAX_SRB][MAX_MOBILE_PER_ENODE_B];
// FOR TRANSACTIONS
DRB_Identity_t m_pending_drb_to_release[MAX_DRB][MAX_MOBILE_PER_ENODE_B];
transaction_id_t m_tx_id_pending_drb_to_release[MAX_DRB][MAX_MOBILE_PER_ENODE_B];
DRB_ToAddMod_t* m_pending_drb_to_add_mod[MAX_DRB][MAX_MOBILE_PER_ENODE_B];
transaction_id_t m_tx_id_pending_drb_to_add_mod[MAX_DRB][MAX_MOBILE_PER_ENODE_B];
SRB_ToAddMod_t* m_pending_srb_to_add_mod[MAX_SRB][MAX_MOBILE_PER_ENODE_B];
transaction_id_t m_tx_id_pending_srb_to_add_mod[MAX_SRB][MAX_MOBILE_PER_ENODE_B];
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _EXCEPTIONS_H
# define _EXCEPTIONS_H
#include <boost/exception/all.hpp>
struct enodeb_not_connected_error: virtual boost::exception { };
struct enodeb_already_connected_error: virtual boost::exception { };
struct enodeb_identifier_out_of_bounds: virtual boost::exception { };
struct radio_bearer_identifier_out_of_bounds: virtual boost::exception { };
struct too_many_enodeb_for_mobile: virtual boost::exception { };
struct mobile_not_connected_error: virtual boost::exception { };
struct mobile_already_connected_error: virtual boost::exception { };
struct null_transaction_error: virtual boost::exception { };
struct no_such_transaction_error: virtual boost::exception { };
struct no_such_radio_bearer_error: virtual boost::exception { };
struct transaction_overwrite_error: virtual boost::exception { };
struct transaction_already_exist_error: virtual boost::exception { };
struct command_deserialize_length_error: virtual boost::exception { };
struct command_data_overwrite_error: virtual boost::exception { };
struct asn1_encoding_error: virtual boost::exception { };
struct test_scenario_message_response_type_error: virtual boost::exception { };
typedef boost::error_info<struct tag_enodeb_id,unsigned int> enodeb_id_info;
typedef boost::error_info<struct tag_mobile_id,unsigned int> mobile_id_info;
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdio.h>
#include "LogicalChannel.h"
//-----------------------------------------------------------------
LogicalChannel::LogicalChannel(unsigned int idP)
//-----------------------------------------------------------------
{
m_id = idP;
}
//-----------------------------------------------------------------
LogicalChannel::~LogicalChannel()
//-----------------------------------------------------------------
{
//if (!m_radio_bearer_map.empty()) m_radio_bearer_map.clear();
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _LOGICALCHANNEL_H
# define _LOGICALCHANNEL_H
# include <boost/ptr_container/ptr_map.hpp>
# include <map>
//# include <boost/shared_ptr.hpp>
using namespace std;
class LogicalChannel
{
public:
typedef enum LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate {
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps0 = 0,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps8 = 1,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps16 = 2,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps32 = 3,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps64 = 4,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps128 = 5,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps256 = 6,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity= 7,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare8 = 8,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare7 = 9,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare6 = 10,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare5 = 11,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare4 = 12,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare3 = 13,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare2 = 14,
LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare1 = 15
} e_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate;
typedef enum LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration {
LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50 = 0,
LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms100 = 1,
LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms150 = 2,
LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms300 = 3,
LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms500 = 4,
LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms1000 = 5,
LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_spare2 = 6,
LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_spare1 = 7
} e_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration;
//typedef boost::shared_ptr<ENodeB> ENodeBPtr;
LogicalChannel ():m_id(0u) {};
LogicalChannel (unsigned int);
~LogicalChannel ();
friend inline bool operator>( const LogicalChannel& l, const LogicalChannel r ) {
return l.m_id > r.m_id;
}
friend inline bool operator==( const LogicalChannel& l, const LogicalChannel r ) {
return l.m_id == r.m_id;
}
private:
unsigned int m_id;
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <stdio.h>
#include <string.h>
#include "Asn1Utils.h"
#include "Mobile.h"
#include "Exceptions.h"
//-----------------------------------------------------------------
Mobile::Mobile(mobile_id_t idP)
//-----------------------------------------------------------------
{
m_id = idP;
memset(&m_mac_main_config, 0, sizeof(MAC_MainConfig_t));
//memset(&m_physical_config_dedicated, 0, sizeof(PhysicalConfigDedicated_t));
for (int i = 0 ; i < MAX_DRB; i++) {
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
m_drb_to_add_mod[i][j] = NULL;
m_pending_drb_to_add_mod[i][j] = NULL;
m_pending_drb_to_release[i][j] = -1;
m_tx_id_pending_drb_to_add_mod[i][j] = -1;
m_tx_id_pending_drb_to_release[i][j] = -1;
}
}
for (int i = 0 ; i < MAX_SRB; i++) {
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
m_srb_to_add_mod[i][j] = NULL;
m_pending_srb_to_add_mod[i][j] = NULL;
m_tx_id_pending_srb_to_add_mod[i][j] = -1;
}
}
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
m_cell_index2_cell_id[j] = 255;
}
for (int j = 0 ; j < MAX_ENODE_B; j++) {
m_cell_id2_cell_index[j] = 255;
}
}
//-----------------------------------------------------------------
Mobile::Mobile(cell_id_t cell_idP, mobile_id_t idP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
m_id = idP;
memset(&m_mac_main_config, 0, sizeof(MAC_MainConfig_t));
//memset(&m_physical_config_dedicated, 0, sizeof(PhysicalConfigDedicated_t));
for (int i = 0 ; i < MAX_DRB; i++) {
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
m_drb_to_add_mod[i][j] = NULL;
m_pending_drb_to_add_mod[i][j] = NULL;
m_pending_drb_to_release[i][j] = -1;
m_tx_id_pending_drb_to_add_mod[i][j] = -1;
m_tx_id_pending_drb_to_release[i][j] = -1;
}
}
for (int i = 0 ; i < MAX_SRB; i++) {
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
m_srb_to_add_mod[i][j] = NULL;
m_pending_srb_to_add_mod[i][j] = NULL;
m_tx_id_pending_srb_to_add_mod[i][j] = -1;
}
}
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
m_cell_index2_cell_id[j] = 255;
}
for (int j = 0 ; j < MAX_ENODE_B; j++) {
m_cell_id2_cell_index[j] = 255;
}
signed int cell_index = FindCellIndex(cell_idP);
AddSignallingRadioBearer1(cell_index, transaction_idP);
}
//-----------------------------------------------------------------
signed int Mobile::FindCellIndex(cell_id_t cell_idP)
//-----------------------------------------------------------------
{
if ( cell_idP >= MAX_ENODE_B) {
throw enodeb_identifier_out_of_bounds();
}
// already registered
if ((m_cell_id2_cell_index[cell_idP] >= 0) && (m_cell_id2_cell_index[cell_idP] < MAX_ENODE_B)) {
return m_cell_id2_cell_index[cell_idP];
}
// find an index for the new enodeb
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
if (!((m_cell_index2_cell_id[j] >= 0) && (m_cell_index2_cell_id[j] < MAX_ENODE_B))) {
m_cell_id2_cell_index[cell_idP] = j;
m_cell_index2_cell_id[j] = cell_idP;
return j;
}
}
throw too_many_enodeb_for_mobile();
}
//-----------------------------------------------------------------
void Mobile::AddSignallingRadioBearer1(signed int cell_indexP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
SRB_ToAddMod_t* srb = static_cast<SRB_ToAddMod_t*>(CALLOC(1,sizeof(SRB_ToAddMod_t)));
srb->srb_Identity = 1;
srb->rlc_Config = static_cast<SRB_ToAddMod::SRB_ToAddMod__rlc_Config*>(CALLOC(1,sizeof(SRB_ToAddMod::SRB_ToAddMod__rlc_Config)));
srb->rlc_Config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue;
srb->rlc_Config->choice.explicitValue.present = RLC_Config_PR_am;
srb->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50;
srb->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p4;
srb->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB25;
srb->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32;
srb->rlc_Config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms100;
srb->rlc_Config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms5;
srb->logicalChannelConfig = static_cast<SRB_ToAddMod::SRB_ToAddMod__logicalChannelConfig*>(CALLOC(1,sizeof(SRB_ToAddMod::SRB_ToAddMod__logicalChannelConfig)));
srb->logicalChannelConfig->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue;
srb->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters = static_cast<LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters*>(CALLOC(1,sizeof(LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters)));
srb->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->priority = 1;
srb->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity;
srb->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->bucketSizeDuration = LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50;
srb->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup = 0;
m_pending_srb_to_add_mod[srb->srb_Identity-1][cell_indexP] = srb;
m_tx_id_pending_srb_to_add_mod[srb->srb_Identity-1][cell_indexP] = transaction_idP;
}
//-----------------------------------------------------------------
void Mobile::AddSignallingRadioBearer2(signed int cell_indexP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
SRB_ToAddMod_t* srb = static_cast<SRB_ToAddMod_t*>(CALLOC(1,sizeof(SRB_ToAddMod_t)));
srb->srb_Identity = 2;
srb->rlc_Config = static_cast<SRB_ToAddMod::SRB_ToAddMod__rlc_Config*>(CALLOC(1,sizeof(SRB_ToAddMod::SRB_ToAddMod__rlc_Config)));
srb->rlc_Config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue;
srb->rlc_Config->choice.explicitValue.present = RLC_Config_PR_am;
srb->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50;
srb->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p4;
srb->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB25;
srb->rlc_Config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32;
srb->rlc_Config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms100;
srb->rlc_Config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms5;
srb->logicalChannelConfig = static_cast<SRB_ToAddMod::SRB_ToAddMod__logicalChannelConfig*>(CALLOC(1,sizeof(SRB_ToAddMod::SRB_ToAddMod__logicalChannelConfig)));
srb->logicalChannelConfig->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue;
srb->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters = static_cast<LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters*>(CALLOC(1,sizeof(LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters)));
srb->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->priority = 1;
srb->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity;
srb->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->bucketSizeDuration = LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50;
srb->logicalChannelConfig->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup = 0;
m_pending_srb_to_add_mod[srb->srb_Identity-1][cell_indexP] = srb;
m_tx_id_pending_srb_to_add_mod[srb->srb_Identity-1][cell_indexP] = transaction_idP;
}
//-----------------------------------------------------------------
void Mobile::AddDefaultDataRadioBearer(signed int cell_indexP, transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
DRB_ToAddMod_t* drb = static_cast<DRB_ToAddMod_t*>(CALLOC(1,sizeof(DRB_ToAddMod_t)));
drb->drb_Identity = 3;
drb->rlc_Config = static_cast<RLC_Config_t*>(CALLOC(1,sizeof(RLC_Config_t)));
drb->rlc_Config->present = RLC_Config_PR_am;
drb->rlc_Config->choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50;
drb->rlc_Config->choice.am.ul_AM_RLC.pollPDU = PollPDU_p4;
drb->rlc_Config->choice.am.ul_AM_RLC.pollByte = PollByte_kB25;
drb->rlc_Config->choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32;
drb->rlc_Config->choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms100;
drb->rlc_Config->choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms5;
drb->logicalChannelConfig = static_cast<LogicalChannelConfig_t*>(CALLOC(1,sizeof(LogicalChannelConfig_t)));
drb->logicalChannelConfig->ul_SpecificParameters = static_cast<LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters*>(CALLOC(1,sizeof(LogicalChannelConfig::LogicalChannelConfig__ul_SpecificParameters)));
drb->logicalChannelConfig->ul_SpecificParameters->priority = 1;
drb->logicalChannelConfig->ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity;
drb->logicalChannelConfig->ul_SpecificParameters->bucketSizeDuration = LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50;
drb->logicalChannelConfig->ul_SpecificParameters->logicalChannelGroup = 0;
m_pending_drb_to_add_mod[drb->drb_Identity-1][cell_indexP] = drb;
m_tx_id_pending_drb_to_add_mod[drb->drb_Identity-1][cell_indexP] = transaction_idP;
}
//-----------------------------------------------------------------
void Mobile::CommitTransaction(transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
for (int i = 0 ; i < MAX_DRB; i++) {
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
// Look if there is a transaction for removing a DRB
if (m_tx_id_pending_drb_to_release[i][j] == transaction_idP) {
if (m_drb_to_add_mod[i][j] == NULL) {
throw transaction_overwrite_error();
} else {
asn_DEF_DRB_ToAddMod.free_struct( &asn_DEF_DRB_ToAddMod, m_drb_to_add_mod[i][j],0);
cerr << "[RRM] Mobile::CommitTransaction(" << transaction_idP << ") free struct m_drb_to_add_mod["<< i << "][" << j << "]" << endl;
m_drb_to_add_mod[i][j] = NULL;
}
m_tx_id_pending_drb_to_release[i][j] = -1;
}
if (m_tx_id_pending_drb_to_add_mod[i][j] == transaction_idP) {
if (m_drb_to_add_mod[i][j] == NULL) {
m_drb_to_add_mod[i][j] = m_pending_drb_to_add_mod[i][j];
cerr << "[RRM] Mobile::CommitTransaction(" << transaction_idP << ") add struct m_pending_drb_to_add_mod["<< i << "][" << j << "]" << endl;
m_pending_drb_to_add_mod[i][j] = NULL;
} else {
throw transaction_overwrite_error();
}
m_tx_id_pending_drb_to_add_mod[i][j] = -1;
}
}
}
for (int i = 0 ; i < MAX_SRB; i++) {
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
if (m_tx_id_pending_srb_to_add_mod[i][j] == transaction_idP) {
if (m_srb_to_add_mod[i][j] == NULL) {
m_srb_to_add_mod[i][j] = m_pending_srb_to_add_mod[i][j];
cerr << "[RRM] Mobile::CommitTransaction(" << transaction_idP << ") add struct m_pending_srb_to_add_mod["<< i << "][" << j << "]" << endl;
m_pending_srb_to_add_mod[i][j] = NULL;
} else {
throw transaction_overwrite_error();
}
m_tx_id_pending_srb_to_add_mod[i][j] = -1;
}
}
}
}
//-----------------------------------------------------------------
RadioResourceConfigDedicated_t* Mobile::GetASN1RadioResourceConfigDedicated(transaction_id_t transaction_idP)
//-----------------------------------------------------------------
{
RadioResourceConfigDedicated_t* config = static_cast<RadioResourceConfigDedicated_t*>(CALLOC(1,sizeof(RadioResourceConfigDedicated_t)));
config->srb_ToAddModList = NULL;
config->drb_ToReleaseList = NULL;
config->drb_ToAddModList = NULL;
for (int i = 0 ; i < MAX_DRB; i++) {
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
// Look if there is a transaction for removing a DRB
if (m_tx_id_pending_drb_to_release[i][j] == transaction_idP) {
if (config->drb_ToReleaseList == NULL) {
config->drb_ToReleaseList = static_cast<DRB_ToReleaseList_t*>(CALLOC(1,sizeof(DRB_ToReleaseList_t)));
}
cerr << "[RRM] Mobile::GetASN1RadioResourceConfigDedicated(" << transaction_idP << ") Releasing DRB "<< m_pending_drb_to_release[i][j] << endl;
ASN_SEQUENCE_ADD(&config->drb_ToReleaseList->list,Asn1Utils::Clone(&m_pending_drb_to_release[i][j]));
}
if (m_tx_id_pending_drb_to_add_mod[i][j] == transaction_idP) {
if (config->drb_ToAddModList == NULL) {
config->drb_ToAddModList = static_cast<DRB_ToAddModList_t*>(CALLOC(1,sizeof(DRB_ToAddModList_t)));
}
cerr << "[RRM] Mobile::GetASN1RadioResourceConfigDedicated(" << transaction_idP << ") Adding DRB "<< m_pending_drb_to_add_mod[i][j] << endl;
ASN_SEQUENCE_ADD(&config->drb_ToAddModList->list, Asn1Utils::Clone(m_pending_drb_to_add_mod[i][j]));
}
}
}
for (int i = 0 ; i < MAX_SRB; i++) {
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
if (m_tx_id_pending_srb_to_add_mod[i][j] == transaction_idP) {
if (config->srb_ToAddModList == NULL) {
config->srb_ToAddModList = static_cast<SRB_ToAddModList_t*>(CALLOC(1,sizeof(SRB_ToAddModList_t)));
}
cerr << "[RRM] Mobile::GetASN1RadioResourceConfigDedicated(" << transaction_idP << ") Adding SRB "<< m_pending_srb_to_add_mod[i][j] << endl;
ASN_SEQUENCE_ADD(&config->srb_ToAddModList->list, Asn1Utils::Clone(m_pending_srb_to_add_mod[i][j]));
}
}
}
config->mac_MainConfig = static_cast<RadioResourceConfigDedicated::RadioResourceConfigDedicated__mac_MainConfig*>(CALLOC(1,sizeof(RadioResourceConfigDedicated::RadioResourceConfigDedicated__mac_MainConfig)));
config->mac_MainConfig->present = RadioResourceConfigDedicated__mac_MainConfig_PR_defaultValue;
return config;
}
//-----------------------------------------------------------------
void Mobile::RemoveDataRadioBearer(ENodeB* e_node_bP,
rb_id_t radio_bearer_idP,
Transaction* transactionP)
//-----------------------------------------------------------------
{
signed int cell_index = m_cell_id2_cell_index[e_node_bP->GetId()];
}
//-----------------------------------------------------------------
Mobile::~Mobile()
//-----------------------------------------------------------------
{
asn_DEF_MAC_MainConfig.free_struct(&asn_DEF_MAC_MainConfig, &m_mac_main_config, 1);
//asn_DEF_PhysicalConfigDedicated.free_struct(&asn_DEF_PhysicalConfigDedicated, &m_physical_config_dedicated, 1);
for (int i = 0 ; i < MAX_DRB; i++) {
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
if (m_drb_to_add_mod[i][j] != NULL) {
asn_DEF_DRB_ToAddMod.free_struct(&asn_DEF_DRB_ToAddMod, m_drb_to_add_mod[i][j], 0);
}
if (m_pending_drb_to_add_mod[i][j] != NULL) {
asn_DEF_DRB_ToAddMod.free_struct(&asn_DEF_DRB_ToAddMod, m_pending_drb_to_add_mod[i][j], 0);
}
}
}
for (int i = 0 ; i < MAX_SRB; i++) {
for (int j = 0 ; j < MAX_ENODE_B_PER_MOBILE; j++) {
if (m_srb_to_add_mod[i][j] != NULL) {
asn_DEF_SRB_ToAddMod.free_struct(&asn_DEF_SRB_ToAddMod, m_srb_to_add_mod[i][j], 0);
}
if (m_pending_srb_to_add_mod[i][j] != NULL) {
asn_DEF_SRB_ToAddMod.free_struct(&asn_DEF_SRB_ToAddMod, m_pending_srb_to_add_mod[i][j], 0);
}
}
}
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _MOBILE_H
# define _MOBILE_H
# include <boost/ptr_container/ptr_map.hpp>
# include <map>
//# include <boost/shared_ptr.hpp>
# include "PhysicalConfigDedicated.h"
# include "RadioResourceConfigDedicated.h"
# include "DRB-ToAddMod.h"
# include "SRB-ToAddMod.h"
# include "MAC-MainConfig.h"
# include "Message.h"
# include "Transaction.h"
# include "platform.h"
# include "RadioBearer.h"
class ENodeB;
using namespace std;
class Mobile
{
public:
//typedef boost::shared_ptr<ENodeB> ENodeBPtr;
Mobile (mobile_id_t);
Mobile () {
Mobile(0u);
};
Mobile(cell_id_t , mobile_id_t , transaction_id_t );
~Mobile ();
friend inline bool operator>( const Mobile& l, const Mobile r ) {
return l.m_id > r.m_id;
}
friend inline bool operator==( const Mobile& l, const Mobile r ) {
return l.m_id == r.m_id;
}
mobile_id_t GetId() {
return m_id;
};
void CommitTransaction(transaction_id_t transaction_idP);
RadioResourceConfigDedicated_t* GetASN1RadioResourceConfigDedicated(transaction_id_t transaction_idP);
void AddSignallingRadioBearer2(signed int cell_indexP, transaction_id_t transaction_idP);
void AddDefaultDataRadioBearer(signed int cell_indexP, transaction_id_t transaction_idP);
/*void AddDataRadioBearer(ENodeB* e_node_bP,
rb_id_t radio_bearer_idP,
unsigned short m_traffic_class,
unsigned short m_delay,
unsigned int m_guaranted_bit_rate_uplink,
unsigned int m_max_bit_rate_uplink,
unsigned int m_guaranted_bit_rate_downlink,
unsigned int m_max_bit_rate_downlink,
Transaction* transactionP);*/
void RemoveDataRadioBearer(ENodeB* e_node_bP,
rb_id_t radio_bearer_idP,
Transaction* transactionP);
protected:
signed int FindCellIndex(cell_id_t cell_idP);
void AddSignallingRadioBearer1(signed int cell_indexP, transaction_id_t transaction_idP);
//void AddSignallingRadioBearer1(signed int cell_indexP, Transaction* transactionP);
//void AddSignallingRadioBearer2(signed int cell_indexP, Transaction* transactionP);
//void AddDefaultDataRadioBearer(signed int cell_indexP, Transaction* transactionP);
signed int m_cell_id2_cell_index[MAX_ENODE_B];
cell_id_t m_cell_index2_cell_id[MAX_ENODE_B_PER_MOBILE];
//boost::ptr_map<mobile_id_t ,Mobile > m_mobile_map;
//RadioBearer* m_radio_bearer_array[MAX_RB_PER_MOBILE][MAX_ENODE_B_PER_MOBILE];
mobile_id_t m_id;
// ASN1 AUTO GENERATED STRUCTS COMPLIANT WITH 3GPP
MAC_MainConfig_t m_mac_main_config;
DRB_ToAddMod_t* m_drb_to_add_mod[MAX_DRB][MAX_ENODE_B_PER_MOBILE];
SRB_ToAddMod_t* m_srb_to_add_mod[MAX_SRB][MAX_ENODE_B_PER_MOBILE];
// FOR TRANSACTIONS
DRB_Identity_t m_pending_drb_to_release[MAX_DRB][MAX_ENODE_B_PER_MOBILE];
transaction_id_t m_tx_id_pending_drb_to_release[MAX_DRB][MAX_ENODE_B_PER_MOBILE];
DRB_ToAddMod_t* m_pending_drb_to_add_mod[MAX_DRB][MAX_ENODE_B_PER_MOBILE];
transaction_id_t m_tx_id_pending_drb_to_add_mod[MAX_DRB][MAX_ENODE_B_PER_MOBILE];
SRB_ToAddMod_t* m_pending_srb_to_add_mod[MAX_SRB][MAX_ENODE_B_PER_MOBILE];
transaction_id_t m_tx_id_pending_srb_to_add_mod[MAX_SRB][MAX_ENODE_B_PER_MOBILE];
};
# include "ENodeB.h"
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdio.h>
#include "RadioBearer.h"
#include "Command.h"
//-----------------------------------------------------------------
RadioBearer::RadioBearer (rb_id_t idP,
T_PollRetransmit_t t_poll_retransmitP,
PollPDU_t poll_pduP,
PollByte_t poll_byteP,
long max_retx_thresholdP,
T_Reordering_t t_reorderingP,
T_StatusProhibit_t t_status_prohibitP,
long priorityP,
long prioritized_bit_rateP,
long bucket_size_durationP,
long logical_channel_groupP,
Command* cmdP)
//-----------------------------------------------------------------
{
m_id = idP;
m_rlc_mode = RLC_MODE_AM;
m_t_poll_retransmit = t_poll_retransmitP;
m_poll_pdu = poll_pduP;
m_poll_byte = poll_byteP;
m_max_retx_threshold = max_retx_thresholdP;
m_t_reordering = t_reorderingP;
m_t_status_prohibit = t_status_prohibitP;
m_priority = priorityP;
m_prioritized_bit_rate = prioritized_bit_rateP;
m_bucket_size_duration = bucket_size_durationP;
m_logical_channel_group = logical_channel_groupP;
tcpip::Storage storage;
storage.writeShort(20);
storage.writeChar(m_id);
storage.writeChar(m_rlc_mode);
storage.writeShort(m_t_poll_retransmit);
storage.writeShort(m_poll_pdu);
storage.writeShort(m_poll_byte);
storage.writeShort(m_max_retx_threshold);
storage.writeShort(m_t_reordering);
storage.writeShort(m_t_status_prohibit);
storage.writeChar(m_priority);
storage.writeShort(m_prioritized_bit_rate);
storage.writeShort(m_bucket_size_duration);
storage.writeChar(m_logical_channel_group);
cmdP->AddData(storage);
}
//-----------------------------------------------------------------
RadioBearer::RadioBearer (rb_id_t idP,
rlc_mode_t rlc_modeP,
SN_FieldLength_t e_sn_field_lengthP,
T_Reordering_t t_reorderingP,
long priorityP,
long prioritized_bit_rateP,
long bucket_size_durationP,
long logical_channel_groupP,
Command* cmdP)
//-----------------------------------------------------------------
{
m_id = idP;
m_rlc_mode = rlc_modeP;
m_sn_field_length = e_sn_field_lengthP;
m_t_reordering = t_reorderingP;
m_priority = priorityP;
m_prioritized_bit_rate = prioritized_bit_rateP;
m_bucket_size_duration = bucket_size_durationP;
m_logical_channel_group = logical_channel_groupP;
tcpip::Storage storage;
storage.writeShort(11);
storage.writeChar(m_id);
storage.writeChar(m_rlc_mode);
storage.writeChar(m_sn_field_length);
storage.writeShort(m_t_reordering);
storage.writeChar(m_priority);
storage.writeShort(m_prioritized_bit_rate);
storage.writeShort(m_bucket_size_duration);
storage.writeChar(m_logical_channel_group);
cmdP->AddData(storage);
}
//-----------------------------------------------------------------
RadioBearer::RadioBearer (rb_id_t idP,
SN_FieldLength_t e_sn_field_lengthP,
long priorityP,
long prioritized_bit_rateP,
long bucket_size_durationP,
long logical_channel_groupP,
Command* cmdP)
//-----------------------------------------------------------------
{
m_id = idP;
m_rlc_mode = RLC_MODE_UM_UNIDIRECTIONAL_UL;
m_sn_field_length = e_sn_field_lengthP;
m_priority = priorityP;
m_prioritized_bit_rate = prioritized_bit_rateP;
m_bucket_size_duration = bucket_size_durationP;
m_logical_channel_group = logical_channel_groupP;
tcpip::Storage storage;
storage.writeShort(9);
storage.writeChar(m_id);
storage.writeChar(m_rlc_mode);
storage.writeChar(m_sn_field_length);
storage.writeChar(m_priority);
storage.writeShort(m_prioritized_bit_rate);
storage.writeShort(m_bucket_size_duration);
storage.writeChar(m_logical_channel_group);
cmdP->AddData(storage);
}
/*//-----------------------------------------------------------------
void RadioBearer::SetLogicalChannelParameters(logical_channel_priority_t priorityP,
e_lc_config_prioritised_bit_rate_t prioritized_bit_rateP,
e_lc_config_bucket_size_duration_t bucket_size_durationP,
logical_channel_group_t logical_channel_groupP)
//-----------------------------------------------------------------
{
m_priority = priorityP;
m_prioritized_bit_rate = prioritized_bit_rateP;
m_bucket_size_duration = bucket_size_durationP;
m_logical_channel_group = logical_channel_groupP;
}
//-----------------------------------------------------------------
void RadioBearer::SetRlcUmParameters(rlc_mode_t rlc_modeP, e_sn_field_length_t e_sn_field_lengthP, t_reordering_t t_reorderingP)
//-----------------------------------------------------------------
{
m_rlc_mode = rlc_modeP;
m_t_reordering = t_reorderingP;
m_sn_field_length = e_sn_field_lengthP;
}
//-----------------------------------------------------------------
void RadioBearer::SetRlcAmParameters(
e_t_poll_retransmit_t t_poll_retransmitP,
e_poll_pdu_t poll_pduP,
e_poll_byte_t poll_byteP,
e_ul_am_rlc_max_retx_threshold_t max_retx_thresholdP,
e_t_reordering_t t_reorderingP,
e_t_status_prohibit_t t_status_prohibitP)
//-----------------------------------------------------------------
{
m_rlc_mode = RLC_MODE_AM;
m_t_poll_retransmit = t_poll_retransmitP;
m_poll_pdu = poll_pduP;
m_poll_byte = poll_byteP;
m_max_retx_threshold = max_retx_thresholdP;
m_t_reordering = t_reorderingP;
m_t_status_prohibit = t_status_prohibitP;
}*/
//-----------------------------------------------------------------
RadioBearer::~RadioBearer()
//-----------------------------------------------------------------
{
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RADIOBEARER_H
# define _RADIOBEARER_H
# include <boost/ptr_container/ptr_map.hpp>
# include <map>
//# include <boost/shared_ptr.hpp>
# include "Message.h"
# include "LogicalChannel.h"
# include "platform.h"
# include "Command.h"
# include "RLC-Config.h"
# include "PDCP-Config.h"
# include "LogicalChannelConfig.h"
using namespace std;
class RadioBearer
{
public:
RadioBearer ():m_id(0u) {};
RadioBearer (rb_id_t,
T_PollRetransmit_t,
PollPDU_t,
PollByte_t,
long,
T_Reordering_t,
T_StatusProhibit_t,
long ,
long ,
long ,
long,
Command*);
// RLC_UM BIDIRECTIONAL OR UNIDIRECTIONAL DL
RadioBearer (rb_id_t,
rlc_mode_t,
SN_FieldLength_t,
T_Reordering_t,
long ,
long ,
long ,
long,
Command*);
// RLC_UM BIDIRECTIONAL OR UNIDIRECTIONAL UL
RadioBearer (rb_id_t,
SN_FieldLength_t,
long ,
long ,
long ,
long,
Command*);
~RadioBearer ();
friend inline bool operator>( const RadioBearer& l, const RadioBearer r ) {
return l.m_id > r.m_id;
}
friend inline bool operator==( const RadioBearer& l, const RadioBearer r ) {
return l.m_id == r.m_id;
}
void SetLogicalChannelParameters(logical_channel_priority_t ,
long ,
long ,
long);
void SetRlcUmParameters(rlc_mode_t,
SN_FieldLength_t ,
T_StatusProhibit_t );
void SetRlcAmParameters(T_PollRetransmit_t,
PollPDU_t,
PollByte_t,
long,
T_Reordering_t,
T_StatusProhibit_t);
rb_id_t GetId() {
return m_id;
};
private:
rb_id_t m_id;
//pdcp_config_t m_pdcp_config;
rlc_mode_t m_rlc_mode;
// RLC UM parameters
SN_FieldLength_t m_sn_field_length;
// RLC AM parameters
T_PollRetransmit_t m_t_poll_retransmit;
PollPDU_t m_poll_pdu;
PollByte_t m_poll_byte;
long m_max_retx_threshold;
T_StatusProhibit_t m_t_status_prohibit;
// COMMOM RLC parameters
T_Reordering_t m_t_reordering;
long m_priority;
long m_prioritized_bit_rate;
long m_bucket_size_duration;
long m_logical_channel_group;
// ASN1 AUTO GENERATED STRUCTS COMPLIANT WITH 3GPP
//PDCP_Config_t m_pdcp_config;
//RLC_Config_t m_rlc_config;
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdio.h>
#include "RadioResources.h"
#include "Exceptions.h"
#include "Transactions.h"
RadioResources* RadioResources::s_instance = 0;
// temporary to be improved later (is RRC send his cell id or RRM assign one?)
cell_id_t RadioResources::s_cell_id_generator = 0;
//-----------------------------------------------------------------
RRM2RRCMessageConnectionResponse* RadioResources::Request(RRC2RRMMessageConnectionRequest &requestP)
//-----------------------------------------------------------------
{
cell_id_t e_node_b_id = RadioResources::s_cell_id_generator++;
if (IsENodeBRegistered(e_node_b_id)) {
throw enodeb_already_connected_error() << enodeb_id_info(e_node_b_id);
} else {
fprintf(stderr, "[RadioResources] Adding new ENodeB %d\n", e_node_b_id);
m_e_node_b_map.insert(std::pair<cell_id_t,ENodeB*>(e_node_b_id, new ENodeB(e_node_b_id)));
ENodeB* const e_Node_b = this->GetENodeB(e_node_b_id);
RRM_RRC_Message_t* asn1_message = e_Node_b->GetRRMRRCConfigurationMessage(requestP.GetTransactionId());
RRM2RRCMessageConnectionResponse *response = new RRM2RRCMessageConnectionResponse(requestP.GetTransactionId(),OpenAir_RRM_Response_Status_success, OpenAir_RRM_Response_Reason_ok, asn1_message);
return response;
}
}
//-----------------------------------------------------------------
RRM2RRCMessageAddUserResponse* RadioResources::Request(RRC2RRMMessageAddUserRequest &requestP)
//-----------------------------------------------------------------
{
cell_id_t e_node_b_id = requestP.GetENodeBId();
if (IsENodeBRegistered(e_node_b_id)) {
mobile_id_t mobile_id = requestP.GetMobileId();
if (IsMobileRegistered(e_node_b_id, mobile_id)) {
throw mobile_already_connected_error() << mobile_id_info(mobile_id);
} else {
fprintf(stderr, "[RadioResources] Adding new Mobile %d\n", mobile_id);
//Transaction* transaction = new Transaction(requestP.GetTransactionId());
// keep track of the transaction among message exchanges between RRC and RRM
//Transactions::Instance()->AddTransaction(transaction);
ENodeB* const e_Node_b = this->GetENodeB(e_node_b_id);
Mobile* mobile = new Mobile(e_node_b_id, mobile_id,requestP.GetTransactionId());
RRM_RRC_Message_t* asn1_message = e_Node_b->AddUserRequest(mobile, requestP.GetTransactionId());
m_mobile_local_map.insert(std::pair<mobile_node_local_key_t ,Mobile*>(std::pair<cell_id_t,mobile_id_t>(e_node_b_id, mobile_id), mobile));
RRM2RRCMessageAddUserResponse *response = new RRM2RRCMessageAddUserResponse(requestP.GetTransactionId(),OpenAir_RRM_Response_Status_success, OpenAir_RRM_Response_Reason_ok, asn1_message);
return response;
}
} else {
throw enodeb_not_connected_error() << enodeb_id_info(e_node_b_id);
}
}
//-----------------------------------------------------------------
RRM2RRCMessageUserReconfiguration* RadioResources::Request(RRC2RRMMessageAddUserConfirm &confirmP)
//-----------------------------------------------------------------
{
cell_id_t e_node_b_id = confirmP.GetENodeBId();
if (IsENodeBRegistered(e_node_b_id)) {
mobile_id_t mobile_id = confirmP.GetMobileId();
if (!IsMobileRegistered(e_node_b_id, mobile_id)) {
throw mobile_not_connected_error() << mobile_id_info(mobile_id);
} else {
fprintf(stderr, "[RadioResources] Confirming new Mobile %d\n", mobile_id);
fprintf(stderr, "[RadioResources] Reconfiguring new Mobile %d\n", mobile_id);
ENodeB* const e_Node_b = this->GetENodeB(e_node_b_id);
Mobile* mobile = GetMobile(e_node_b_id, mobile_id);
RRM_RRC_Message_t* asn1_message = e_Node_b->AddUserConfirm(mobile, confirmP.GetTransactionId());
//m_mobile_local_map.insert(std::pair<mobile_node_local_key_t ,Mobile*>(std::pair<cell_id_t,mobile_id_t>(e_node_b_id, mobile_id), mobile));
RRM2RRCMessageUserReconfiguration *response = new RRM2RRCMessageUserReconfiguration(confirmP.GetTransactionId(),OpenAir_RRM_Response_Status_success, OpenAir_RRM_Response_Reason_ok, asn1_message);
return response;
}
} else {
throw enodeb_not_connected_error() << enodeb_id_info(e_node_b_id);
}
}
//-----------------------------------------------------------------
void RadioResources::Request(RRC2RRMMessageUserReconfigurationComplete &completeP)
//-----------------------------------------------------------------
{
cell_id_t e_node_b_id = completeP.GetENodeBId();
if (IsENodeBRegistered(e_node_b_id)) {
mobile_id_t mobile_id = completeP.GetMobileId();
if (!IsMobileRegistered(e_node_b_id, mobile_id)) {
throw mobile_not_connected_error() << mobile_id_info(mobile_id);
} else {
fprintf(stderr, "[RadioResources] Confirming new Mobile %d\n", mobile_id);
fprintf(stderr, "[RadioResources] Reconfiguring new Mobile %d\n", mobile_id);
ENodeB* const e_Node_b = this->GetENodeB(e_node_b_id);
Mobile* mobile = GetMobile(e_node_b_id, mobile_id);
e_Node_b->UserReconfigurationComplete(mobile, completeP.GetTransactionId());
}
} else {
throw enodeb_not_connected_error() << enodeb_id_info(e_node_b_id);
}
}
//-----------------------------------------------------------------
Transaction* RadioResources::Request(RRC2RRMMessageRemoveUserRequest &requestP)
//-----------------------------------------------------------------
{
cell_id_t e_node_b_id = requestP.GetENodeBId();
if (IsENodeBRegistered(e_node_b_id)) {
mobile_id_t mobile_id = requestP.GetMobileId();
if (!IsMobileRegistered(e_node_b_id, mobile_id)) {
throw mobile_not_connected_error() << mobile_id_info(mobile_id);
}else {
fprintf(stderr, "[RadioResources] Removing mobile %d\n", mobile_id);
Transaction* transaction = new Transaction(requestP.GetTransactionId());
// Do not keep track of the transaction
//Transactions::Instance()->AddTransaction(transaction);
ENodeB* const e_Node_b = this->GetENodeB(e_node_b_id);
Mobile* mobile = GetMobile(e_node_b_id, mobile_id);
e_Node_b->RemoveUserRequest(mobile,requestP.GetTransactionId());
return transaction;
}
} else {
throw enodeb_not_connected_error() << enodeb_id_info(e_node_b_id);
}
}
//-----------------------------------------------------------------
Transaction* RadioResources::Request(RRC2RRMMessageAddRadioAccessBearerRequest &requestP)
//-----------------------------------------------------------------
{
cell_id_t e_node_b_id = requestP.GetENodeBId();
if (IsENodeBRegistered(e_node_b_id)) {
mobile_id_t mobile_id = requestP.GetMobileId();
if (!IsMobileRegistered(e_node_b_id, mobile_id)) {
throw mobile_not_connected_error() << mobile_id_info(mobile_id);
} else {
fprintf(stderr, "[RadioResources] Adding new DRB %d\n", requestP.GetRadioBearerId());
Transaction* transaction = new Transaction(requestP.GetTransactionId());
// keep track of the transaction among message exchanges between RRC and RRM
Transactions::Instance()->AddTransaction(transaction);
ENodeB* const e_Node_b = this->GetENodeB(e_node_b_id);
Mobile* mobile = GetMobile(e_node_b_id, mobile_id);
/*e_Node_b->AddDataRadioBearer(mobile,
requestP.GetRadioBearerId(),
requestP.GetTrafficClass(),
requestP.GetDelay(),
requestP.GetGuarantedBitRateUplink(),
requestP.GetMaxBitRateUplink(),
requestP.GetGuarantedBitRateDownlink(),
requestP.GetMaxBitRateDownlink(),
transaction);*/
return transaction;
}
} else {
throw enodeb_not_connected_error() << enodeb_id_info(e_node_b_id);
}
}
//-----------------------------------------------------------------
Transaction* RadioResources::Request(RRC2RRMMessageAddRadioAccessBearerConfirm &confirmP)
//-----------------------------------------------------------------
{
cell_id_t e_node_b_id = confirmP.GetENodeBId();
if (IsENodeBRegistered(e_node_b_id)) {
mobile_id_t mobile_id = confirmP.GetMobileId();
if (!IsMobileRegistered(e_node_b_id, mobile_id)) {
throw mobile_not_connected_error() << mobile_id_info(mobile_id);
} else {
// TO DO CHECK RADIO BEARER
fprintf(stderr, "[RadioResources] Confirming new DRB %d\n", confirmP.GetRadioBearerId());
Transaction* transaction = Transactions::Instance()->GetTransaction(confirmP.GetTransactionId());
transaction->Commit(); transaction = NULL;
Transactions::Instance()->RemoveTransaction(confirmP.GetTransactionId());
return NULL;
}
} else {
throw enodeb_not_connected_error() << enodeb_id_info(e_node_b_id);
}
}
//-----------------------------------------------------------------
Transaction* RadioResources::Request(RRC2RRMMessageRemoveRadioAccessBearerRequest &requestP)
//-----------------------------------------------------------------
{
cell_id_t e_node_b_id = requestP.GetENodeBId();
if (IsENodeBRegistered(e_node_b_id)) {
mobile_id_t mobile_id = requestP.GetMobileId();
if (!IsMobileRegistered(e_node_b_id, mobile_id)) {
throw mobile_not_connected_error() << mobile_id_info(mobile_id);
} else {
fprintf(stderr, "[RadioResources] Removing DRB %d\n", requestP.GetRadioBearerId());
Transaction* transaction = new Transaction(requestP.GetTransactionId());
// Do not keep track of the transaction
//Transactions::Instance()->AddTransaction(transaction);
ENodeB* const e_Node_b = this->GetENodeB(e_node_b_id);
Mobile* mobile = GetMobile(e_node_b_id, mobile_id);
/*e_Node_b->RemoveDataRadioBearer(mobile,
requestP.GetRadioBearerId(),
transaction);*/
return transaction;
}
} else {
throw enodeb_not_connected_error() << enodeb_id_info(e_node_b_id);
}
}
//----------------------------------------------------------------------------
ENodeB* const RadioResources::GetENodeB(cell_id_t e_node_b_idP) {
//----------------------------------------------------------------------------
map<cell_id_t ,ENodeB*>::iterator it;
it=m_e_node_b_map.find(e_node_b_idP);
if (it != m_e_node_b_map.end()) {
return it->second;
} else {
throw enodeb_not_connected_error() << enodeb_id_info(e_node_b_idP);
}
}
//----------------------------------------------------------------------------
bool RadioResources::IsENodeBRegistered(cell_id_t idP) {
//----------------------------------------------------------------------------
map<cell_id_t ,ENodeB*>::iterator it;
it=m_e_node_b_map.find(idP);
if (it != m_e_node_b_map.end()) {
return true;
} else {
return false;
}
}
//----------------------------------------------------------------------------
Mobile* const RadioResources::GetMobile(cell_id_t e_node_b_idP, mobile_id_t mobile_idP) {
//----------------------------------------------------------------------------
map<mobile_node_local_key_t,Mobile*>::iterator it;
it=m_mobile_local_map.find(std::pair<cell_id_t,mobile_id_t>(e_node_b_idP, mobile_idP));
if (it != m_mobile_local_map.end()) {
return it->second;
} else {
throw mobile_not_connected_error();
}
}
//----------------------------------------------------------------------------
bool RadioResources::IsMobileRegistered(cell_id_t e_node_b_idP, mobile_id_t mobile_idP) {
//----------------------------------------------------------------------------
map<mobile_node_local_key_t,Mobile*>::iterator it;
it=m_mobile_local_map.find(std::pair<cell_id_t,mobile_id_t>(e_node_b_idP, mobile_idP));
if (it != m_mobile_local_map.end()) {
return true;
} else {
return false;
}
}
//-----------------------------------------------------------------
RadioResources* RadioResources::Instance()
//-----------------------------------------------------------------
{
if (RadioResources::s_instance == 0) {
RadioResources::s_instance = new RadioResources;
}
return s_instance;
}
//-----------------------------------------------------------------
RadioResources::RadioResources()
//-----------------------------------------------------------------
{
}
//-----------------------------------------------------------------
RadioResources::~RadioResources()
//-----------------------------------------------------------------
{
if (!m_e_node_b_map.empty()) m_e_node_b_map.clear();
if (!m_mobile_local_map.empty()) m_mobile_local_map.clear();
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _RADIORESOURCES_H
# define _RADIORESOURCES_H
# include "RRM-RRC-Message.h"
# include <map>
//# include <boost/ptr_container/ptr_map.hpp>
# include "platform_defines.h"
# include "Message.h"
# include "ENodeB.h"
# include "RRC2RRMMessageConnectionRequest.h"
# include "RRM2RRCMessageConnectionResponse.h"
# include "RRC2RRMMessageAddUserRequest.h"
# include "RRM2RRCMessageAddUserResponse.h"
# include "RRC2RRMMessageAddUserConfirm.h"
# include "RRM2RRCMessageUserReconfiguration.h"
# include "RRC2RRMMessageUserReconfigurationComplete.h"
# include "RRC2RRMMessageRemoveUserRequest.h"
# include "RRC2RRMMessageAddRadioAccessBearerRequest.h"
# include "RRC2RRMMessageAddRadioAccessBearerConfirm.h"
# include "RRC2RRMMessageRemoveRadioAccessBearerRequest.h"
# include "platform.h"
# include "Transaction.h"
using namespace std;
class RadioResources
{
public:
//static const int MAX_MOBILES_PER_ENODE_B = 16;
//static const int MAX_RADIO_BEARERS_PER_MOBILE = 16;
//static const int MAX_RADIO_BEARERS_PER_ENODE_B = 256;
// mobile_id_t is local to the cell here
typedef std::pair<cell_id_t,mobile_id_t> mobile_node_local_key_t;
static RadioResources *Instance ();
~RadioResources ();
bool IsENodeBRegistered(cell_id_t idP);
ENodeB* const GetENodeB(cell_id_t idP);
bool IsMobileRegistered(cell_id_t e_node_b_idP, mobile_id_t mobile_idP);
Mobile* const GetMobile(cell_id_t e_node_b_idP, mobile_id_t mobile_idP);
void AddENodeB(cell_id_t idP);
RRM2RRCMessageConnectionResponse* Request(RRC2RRMMessageConnectionRequest &requestP);
RRM2RRCMessageAddUserResponse* Request(RRC2RRMMessageAddUserRequest &requestP);
RRM2RRCMessageUserReconfiguration* Request(RRC2RRMMessageAddUserConfirm &requestP);
void Request(RRC2RRMMessageUserReconfigurationComplete &confirmP);
Transaction* Request(RRC2RRMMessageRemoveUserRequest &requestP);
Transaction* Request(RRC2RRMMessageAddRadioAccessBearerRequest &requestP);
Transaction* Request(RRC2RRMMessageAddRadioAccessBearerConfirm &confirmP);
Transaction* Request(RRC2RRMMessageRemoveRadioAccessBearerRequest &requestP);
private:
RadioResources ();
static RadioResources *s_instance;
static cell_id_t s_cell_id_generator;
map<cell_id_t,ENodeB*> m_e_node_b_map;
map<mobile_node_local_key_t,Mobile*> m_mobile_local_map;
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include "SignallingRadioBearer.h"
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _SIGNALLINGRADIOBEARER_H
# define _SIGNALLINGRADIOBEARER_H
# include <boost/ptr_container/ptr_map.hpp>
# include <map>
//# include <boost/shared_ptr.hpp>
# include "Message.h"
# include "LogicalChannel.h"
# include "RadioBearer.h"
# include "SRB-ToAddMod.h"
using namespace std;
class SignallingRadioBearer: public RadioBearer
{
public:
//typedef boost::shared_ptr<ENodeB> ENodeBPtr;
SignallingRadioBearer ():m_id(0u) {};
SignallingRadioBearer (unsigned int);
~SignallingRadioBearer ();
friend inline bool operator>( const SignallingRadioBearer& l, const SignallingRadioBearer r ) {
return l.m_id > r.m_id;
}
friend inline bool operator==( const SignallingRadioBearer& l, const SignallingRadioBearer r ) {
return l.m_id == r.m_id;
}
private:
unsigned int m_id;
SRB_ToAddMod_t m_srb_to_add_mod;
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <sstream>
#include <stdio.h>
//----------------------------------------------------------------------------
#include "Transaction.h"
//----------------------------------------------------------------------------
Transaction::Transaction (transaction_id_t transaction_idP): m_id(transaction_idP)
//----------------------------------------------------------------------------
{
m_commands_vector.reserve(16);
fprintf(stderr, "[Transaction] new Transaction %d\n", transaction_idP);
}
//----------------------------------------------------------------------------
Transaction::Transaction (transaction_id_t transaction_idP, tcpip::Storage& storageP, packet_size_t sizeP): m_id(transaction_idP)
//----------------------------------------------------------------------------
{
fprintf(stderr, "[Transaction] new Transaction %d\n", transaction_idP);
m_commands_vector.reserve(16);
while (sizeP > 0) {
Command* command = new Command(storageP, &sizeP);
AddCommand(command);
}
}
//----------------------------------------------------------------------------
void Transaction::AddCommand (Command* commandP)
//----------------------------------------------------------------------------
{
fprintf(stderr, "[Transaction][%d] AddCommand() %s\n", m_id, commandP->ToString().c_str());
m_commands_vector.push_back(commandP);
}
// Serialize Transaction in packet
//----------------------------------------------------------------------------
void Transaction::Serialize(unsigned char* packetP)
//----------------------------------------------------------------------------
{
int cursor = 0;
fprintf(stderr, "[Transaction][%d] Serialize()\n", m_id);
vector<Command*>::const_iterator ci;
for(ci=m_commands_vector.begin(); ci!=m_commands_vector.end(); ci++)
{
Command* command = *ci;
int size = command->size();
command->Serialize(&packetP[cursor]);
cursor += size;
}
}
//----------------------------------------------------------------------------
std::string Transaction::ToString()
//----------------------------------------------------------------------------
{
stringstream result;
result << "Transaction " << (unsigned int)m_id << ":\n";
vector<Command*>::const_iterator ci;
for(ci=m_commands_vector.begin(); ci!=m_commands_vector.end(); ci++)
{
result << "\t" << (*ci)->ToString() << "\n";
}
return result.str();
}
//----------------------------------------------------------------------------
packet_size_t Transaction::Size() const {
//----------------------------------------------------------------------------
if (m_commands_vector.empty()) return 0;
packet_size_t size = 0;
for (unsigned int i = 0; i < m_commands_vector.size(); i++) {
if (m_commands_vector.at(i) != NULL) {
size += m_commands_vector[i]->size();
}
}
fprintf(stderr, "[Transaction][%d] Size() = %d\n", m_id, size);
return size;
}
//----------------------------------------------------------------------------
Transaction::~Transaction()
//----------------------------------------------------------------------------
{
fprintf(stderr, "[Transaction][%d] ~Transaction()\n", m_id);
vector<Command*>::const_iterator ci;
for(ci=m_commands_vector.begin(); ci!=m_commands_vector.end(); ci++)
{
Command* command = *ci;
delete command;
}
m_commands_vector.clear();
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _TRANSACTION_H
# define _TRANSACTION_H
# include <vector>
# include "Message.h"
# include "Command.h"
# include "platform.h"
# include "storage.h"
using namespace std;
class Transaction
{
public:
//typedef boost::shared_ptr<ENodeB> ENodeBPtr;
Transaction ():m_id(0u) {};
Transaction (transaction_id_t);
Transaction (transaction_id_t , tcpip::Storage& , packet_size_t );
~Transaction ();
void AddCommand (Command*);
friend inline bool operator>( const Transaction& l, const Transaction r ) {
return l.m_id > r.m_id;
}
friend inline bool operator==( const Transaction& l, const Transaction r ) {
return l.m_id == r.m_id;
}
void Commit() {};
void Rollback() {};
transaction_id_t GetId() {
return m_id;
};
std::string ToString();
void Serialize(unsigned char* packetP);
packet_size_t Size() const;
protected:
transaction_id_t m_id;
vector<Command*> m_commands_vector;
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdio.h>
#include "Transactions.h"
#include "Exceptions.h"
Transactions* Transactions::s_instance = 0;
//----------------------------------------------------------------------------
Transaction* const Transactions::GetTransaction(transaction_id_t idP) {
//----------------------------------------------------------------------------
map<transaction_id_t ,Transaction*>::iterator it;
it=m_transaction_map.find(idP);
if (it != m_transaction_map.end()) {
return it->second;
} else {
throw no_such_transaction_error();
}
}
//----------------------------------------------------------------------------
bool Transactions::IsTransactionRegistered(transaction_id_t idP) {
//----------------------------------------------------------------------------
map<transaction_id_t ,Transaction*>::iterator it;
it=m_transaction_map.find(idP);
if (it != m_transaction_map.end()) {
return true;
} else {
return false;
}
}
//----------------------------------------------------------------------------
void Transactions::RemoveTransaction(transaction_id_t idP) {
//----------------------------------------------------------------------------
unsigned int n = m_transaction_map.erase(idP);
fprintf(stderr, "[Transactions] Transaction %d removed(%d)\n", idP, n);
}
//----------------------------------------------------------------------------
void Transactions::AddTransaction(Transaction* txP) {
//----------------------------------------------------------------------------
if (txP == NULL) {
throw null_transaction_error();
}
transaction_id_t tx_id = txP->GetId();
if (IsTransactionRegistered(tx_id)) {
throw transaction_already_exist_error();
} else {
fprintf(stderr, "[Transactions] Adding new Transaction %d\n", tx_id);
m_transaction_map.insert(std::pair<transaction_id_t,Transaction*>(tx_id, txP));
}
}
//-----------------------------------------------------------------
Transactions* Transactions::Instance()
//-----------------------------------------------------------------
{
if (Transactions::s_instance == 0) {
Transactions::s_instance = new Transactions;
}
return s_instance;
}
//-----------------------------------------------------------------
Transactions::Transactions()
//-----------------------------------------------------------------
{
}
//-----------------------------------------------------------------
Transactions::~Transactions()
//-----------------------------------------------------------------
{
if (!m_transaction_map.empty()) m_transaction_map.clear();
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
# ifndef _TRANSACTIONS_H
# define _TRANSACTIONS_H
# include <map>
# include "Message.h"
# include "Transaction.h"
# include "platform.h"
using namespace std;
class Transactions
{
public:
static Transactions *Instance ();
~Transactions ();
bool IsTransactionRegistered(transaction_id_t idP);
void AddTransaction(Transaction* txP);
void RemoveTransaction(transaction_id_t idP);
Transaction* const GetTransaction(transaction_id_t idP);
private:
Transactions ();
static Transactions *s_instance;
map<transaction_id_t,Transaction*> m_transaction_map;
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
// ===========================================================================
#include <stdio.h>
#include <signal.h>
// ===========================================================================
#include "RRCMessageHandler.h"
// ===========================================================================
static bool quit = false;
// ===========================================================================
void sigint(int)
// ===========================================================================
{
quit = true;
}
// ===========================================================================
int main(int argc,char *argv[])
// ===========================================================================
{
signal(SIGPIPE, SIG_IGN);
signal(SIGINT, sigint);
// start RRC server
RRCMessageHandler::Instance();
RRCMessageHandler::Instance()->Join(&quit);
fprintf(stderr, "\nRRM LTE Exiting...\n");
return 0;
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <iostream>
#include <cassert>
#include <typeinfo>
//----------------------------------------------------------------------------
#include "TestScenario.h"
#include "Message.h"
#include "RRC2RRMMessageConnectionRequest.h"
#include "RRC2RRMMessageAddUserRequest.h"
#include "RRC2RRMMessageAddUserConfirm.h"
#include "RRC2RRMMessageAddRadioAccessBearerRequest.h"
#include "RRC2RRMMessageAddRadioAccessBearerConfirm.h"
#include "RRC2RRMMessageRemoveRadioAccessBearerRequest.h"
#include "RRC2RRMMessageRemoveUserRequest.h"
#include "RRC2RRMMessageUserReconfigurationComplete.h"
#include "RRM2RRCMessageConnectionResponse.h"
#include "RRM2RRCMessageAddUserResponse.h"
#include "RRM2RRCMessageAddRadioAccessBearerResponse.h"
#include "RRM2RRCMessageRemoveRadioAccessBearerResponse.h"
#include "RRM2RRCMessageRemoveUserResponse.h"
#include "RRM2RRCMessageUserReconfiguration.h"
#include "RRMMessageHandler.h"
#include "Exceptions.h"
//----------------------------------------------------------------------------
int TestScenario::s_step = 0;
int TestScenario::s_scenario_id = 0;
int test_scenario_all_is_ok_transaction_id = 0;
int test_scenario_all_is_ok_cell_id = 0;
int test_scenario_all_is_ok_mobile_id = 1;
int test_scenario_all_is_ok_rb_id = 6 + test_scenario_all_is_ok_mobile_id*MAX_RB_PER_MOBILE;
int test_scenario_all_is_ok_rb2_id = 7 + test_scenario_all_is_ok_mobile_id*MAX_RB_PER_MOBILE;
//----------------------------------------------------------------------------
void TestScenario::Start(const int scenario_idP)
//----------------------------------------------------------------------------
{
TestScenario::s_scenario_id = scenario_idP;
switch (TestScenario::s_scenario_id) {
case TestScenario::SCENARIO_ALL_IS_OK:
{
TestScenario::s_step = 0;
RRC2RRMMessageConnectionRequest connection_request("0::1", 33334, ++test_scenario_all_is_ok_transaction_id);
RRMMessageHandler::Instance()->Send2Peer("0::1", 33333, connection_request.GetSerializedMessageBuffer(), connection_request.GetSerializedMessageSize());
std::cout << "Msg RRC2RRMMessageConnectionRequest sent..." << std::endl;
}
break;
default:
std::cerr << "TestScenario::Start() UNKNOWN SCENARIO" << std::endl;
}
}
//----------------------------------------------------------------------------
void TestScenario::notifyRxMessage(Message* messageP)
//----------------------------------------------------------------------------
{
std::cout << "[TestScenario] notifyRxMessage()" << std::endl;
switch (TestScenario::s_scenario_id){
case TestScenario::SCENARIO_ALL_IS_OK:
switch (TestScenario::s_step) {
case 0:
{
std::string type_id_message(typeid(*messageP).name());
std::size_t found=type_id_message.find("RRM2RRCMessageConnectionResponse");
if (found != std::string::npos) {
TestScenario::s_step += 1;
RRM2RRCMessageConnectionResponse* message = static_cast<RRM2RRCMessageConnectionResponse*>(messageP);
assert(message->GetStatus() == OpenAir_RRM_Response_Status_success);
assert(message->GetReason() == OpenAir_RRM_Response_Reason_ok);
assert(message->GetTransactionId() == test_scenario_all_is_ok_transaction_id);
assert(message->GetENodeBId() == test_scenario_all_is_ok_cell_id);
RRC2RRMMessageAddUserRequest add_user_request("0::1", 33334, test_scenario_all_is_ok_cell_id, test_scenario_all_is_ok_mobile_id, ++test_scenario_all_is_ok_transaction_id);
RRMMessageHandler::Instance()->Send2Peer("0::1", 33333, add_user_request.GetSerializedMessageBuffer(), add_user_request.GetSerializedMessageSize());
std::cout << "Msg RRC2RRMMessageAddUserRequest sent..." << std::endl;
} else {
std::cout << "TestScenario::Start() UNKNOWN RRM2RRCMessageConnectionResponse received" << std::endl;
throw test_scenario_message_response_type_error();
}
}
break;
case 1:
{
std::string type_id_message(typeid(*messageP).name());
std::size_t found=type_id_message.find("RRM2RRCMessageAddUserResponse");
if (found != std::string::npos) {
TestScenario::s_step += 1;
RRM2RRCMessageAddUserResponse* message = static_cast<RRM2RRCMessageAddUserResponse*>(messageP);
assert(message->GetStatus() == OpenAir_RRM_Response_Status_success);
assert(message->GetReason() == OpenAir_RRM_Response_Reason_ok);
assert(message->GetENodeBId() == test_scenario_all_is_ok_cell_id);
assert(message->GetMobileId() == test_scenario_all_is_ok_mobile_id);
assert(message->GetTransactionId() == test_scenario_all_is_ok_transaction_id);
//for (int i = 0; i < 1000 ; i++) {
RRC2RRMMessageAddUserConfirm add_user_confirm("0::1", 33334, test_scenario_all_is_ok_cell_id, test_scenario_all_is_ok_mobile_id, test_scenario_all_is_ok_transaction_id);
RRMMessageHandler::Instance()->Send2Peer("0::1", 33333, add_user_confirm.GetSerializedMessageBuffer(), add_user_confirm.GetSerializedMessageSize());
std::cout << "Msg RRC2RRMMessageAddUserConfirm sent..." << std::endl;
//std::cout << "i = " << i << std::endl;
//}
} else {
std::cout << "TestScenario::Start() UNKNOWN RRM2RRCMessageAddUserResponse received" << std::endl;
throw test_scenario_message_response_type_error();
}
}
break;
case 2:
{
std::string type_id_message(typeid(*messageP).name());
std::size_t found=type_id_message.find("RRM2RRCMessageUserReconfiguration");
if (found != std::string::npos) {
TestScenario::s_step += 1;
RRM2RRCMessageUserReconfiguration* message = static_cast<RRM2RRCMessageUserReconfiguration*>(messageP);
assert(message->GetStatus() == OpenAir_RRM_Response_Status_success);
assert(message->GetReason() == OpenAir_RRM_Response_Reason_ok);
assert(message->GetENodeBId() == test_scenario_all_is_ok_cell_id);
assert(message->GetMobileId() == test_scenario_all_is_ok_mobile_id);
assert(message->GetTransactionId() == test_scenario_all_is_ok_transaction_id);
std::cout << "Msg RRM2RRCMessageUserReconfiguration OK" << std::endl;
RRC2RRMMessageUserReconfigurationComplete reconfiguration_complete("0::1", 33334,
test_scenario_all_is_ok_cell_id,
test_scenario_all_is_ok_mobile_id,
test_scenario_all_is_ok_transaction_id);
RRMMessageHandler::Instance()->Send2Peer("0::1", 33333, reconfiguration_complete.GetSerializedMessageBuffer(), reconfiguration_complete.GetSerializedMessageSize());
std::cout << "Msg RRC2RRMMessageUserReconfigurationComplete sent..." << std::endl;
cout << "End of scenario" << endl;
exit(0);
} else {
std::cout << "TestScenario::Start() UNKNOWN RRM2RRCMessageUserReconfiguration received" << std::endl;
throw test_scenario_message_response_type_error();
}
}
break;
case 4:
{
std::string type_id_message(typeid(*messageP).name());
std::size_t found=type_id_message.find("RRM2RRCMessageAddRadioAccessBearerResponse");
if (found != std::string::npos) {
TestScenario::s_step += 1;
RRM2RRCMessageAddRadioAccessBearerResponse* message = static_cast<RRM2RRCMessageAddRadioAccessBearerResponse*>(messageP);
assert(message->GetStatus() == Message::STATUS_ADD_RADIO_ACCESS_BEARER_SUCCESSFULL);
assert(message->GetReason() == OpenAir_RRM_Response_Reason_ok);
assert(message->GetENodeBId() == test_scenario_all_is_ok_cell_id);
assert(message->GetMobileId() == test_scenario_all_is_ok_mobile_id);
assert(message->GetRadioBearerId() == test_scenario_all_is_ok_rb_id);
assert(message->GetTransactionId() == test_scenario_all_is_ok_transaction_id);
RRC2RRMMessageAddRadioAccessBearerConfirm confirm("0::1", 33334, test_scenario_all_is_ok_cell_id, test_scenario_all_is_ok_mobile_id, test_scenario_all_is_ok_rb_id, test_scenario_all_is_ok_transaction_id);
RRMMessageHandler::Instance()->Send2Peer("0::1", 33333, confirm.GetSerializedMessageBuffer(), confirm.GetSerializedMessageSize());
std::cout << "Msg RRC2RRMMessageAddRadioAccessBearerConfirm sent..." << std::endl;
test_scenario_all_is_ok_transaction_id += 1;
RRC2RRMMessageRemoveRadioAccessBearerRequest request("0::1", 33334,
test_scenario_all_is_ok_cell_id,
test_scenario_all_is_ok_mobile_id,
test_scenario_all_is_ok_rb_id,
test_scenario_all_is_ok_transaction_id);
RRMMessageHandler::Instance()->Send2Peer("0::1", 33333, request.GetSerializedMessageBuffer(), request.GetSerializedMessageSize());
std::cout << "Msg RRC2RRMMessageRemoveRadioAccessBearerRequest sent..." << std::endl;
} else {
std::cout << "TestScenario::Start() UNKNOWN RRM2RRCMessageAddRadioAccessBearerResponse received" << std::endl;
throw test_scenario_message_response_type_error();
}
}
break;
case 5:
{
std::string type_id_message(typeid(*messageP).name());
std::size_t found=type_id_message.find("RRM2RRCMessageRemoveRadioAccessBearerResponse");
if (found != std::string::npos) {
TestScenario::s_step += 1;
RRM2RRCMessageRemoveRadioAccessBearerResponse* message = static_cast<RRM2RRCMessageRemoveRadioAccessBearerResponse*>(messageP);
assert(message->GetStatus() == Message::STATUS_REMOVE_RADIO_ACCESS_BEARER_SUCCESSFULL);
assert(message->GetReason() == OpenAir_RRM_Response_Reason_ok);
assert(message->GetENodeBId() == test_scenario_all_is_ok_cell_id);
assert(message->GetMobileId() == test_scenario_all_is_ok_mobile_id);
assert(message->GetRadioBearerId() == test_scenario_all_is_ok_rb_id);
assert(message->GetTransactionId() == test_scenario_all_is_ok_transaction_id);
test_scenario_all_is_ok_transaction_id += 1;
RRC2RRMMessageAddRadioAccessBearerRequest add_rb_request("0::1", 33334,
test_scenario_all_is_ok_cell_id,
test_scenario_all_is_ok_mobile_id,
test_scenario_all_is_ok_rb2_id,
3, //traffic_class
100, //delay
128, //guaranted_bit_rate_uplink
256, //max_bit_rate_uplink
512, //guaranted_bit_rate_downlink
768, //max_bit_rate_downlink
test_scenario_all_is_ok_transaction_id);
RRMMessageHandler::Instance()->Send2Peer("0::1", 33333, add_rb_request.GetSerializedMessageBuffer(), add_rb_request.GetSerializedMessageSize());
std::cout << "Msg RRC2RRMMessageAddRadioAccessBearerRequest sent..." << std::endl;
} else {
std::cout << "TestScenario::Start() UNKNOWN RRM2RRCMessageRemoveRadioAccessBearerResponse received" << std::endl;
throw test_scenario_message_response_type_error();
}
}
break;
case 6:
{
std::string type_id_message(typeid(*messageP).name());
std::size_t found=type_id_message.find("RRM2RRCMessageAddRadioAccessBearerResponse");
if (found != std::string::npos) {
TestScenario::s_step += 1;
RRM2RRCMessageAddRadioAccessBearerResponse* message = static_cast<RRM2RRCMessageAddRadioAccessBearerResponse*>(messageP);
assert(message->GetStatus() == Message::STATUS_ADD_RADIO_ACCESS_BEARER_SUCCESSFULL);
assert(message->GetReason() == OpenAir_RRM_Response_Reason_ok);
assert(message->GetENodeBId() == test_scenario_all_is_ok_cell_id);
assert(message->GetMobileId() == test_scenario_all_is_ok_mobile_id);
assert(message->GetRadioBearerId() == test_scenario_all_is_ok_rb2_id);
assert(message->GetTransactionId() == test_scenario_all_is_ok_transaction_id);
RRC2RRMMessageAddRadioAccessBearerConfirm confirm("0::1", 33334, test_scenario_all_is_ok_cell_id, test_scenario_all_is_ok_mobile_id, test_scenario_all_is_ok_rb2_id, test_scenario_all_is_ok_transaction_id);
RRMMessageHandler::Instance()->Send2Peer("0::1", 33333, confirm.GetSerializedMessageBuffer(), confirm.GetSerializedMessageSize());
std::cout << "Msg RRC2RRMMessageAddRadioAccessBearerConfirm sent..." << std::endl;
test_scenario_all_is_ok_transaction_id += 1;
RRC2RRMMessageRemoveUserRequest request("0::1", 33334,
test_scenario_all_is_ok_cell_id,
test_scenario_all_is_ok_mobile_id,
test_scenario_all_is_ok_transaction_id);
RRMMessageHandler::Instance()->Send2Peer("0::1", 33333, request.GetSerializedMessageBuffer(), request.GetSerializedMessageSize());
std::cout << "Msg RRC2RRMMessageRemoveUserRequest sent..." << std::endl;
} else {
std::cout << "TestScenario::Start() UNKNOWN RRM2RRCMessageAddRadioAccessBearerResponse received" << std::endl;
throw test_scenario_message_response_type_error();
}
}
break;
case 7:
{
std::string type_id_message(typeid(*messageP).name());
std::size_t found=type_id_message.find("RRM2RRCMessageRemoveUserResponse");
if (found != std::string::npos) {
TestScenario::s_step += 1;
RRM2RRCMessageRemoveUserResponse* message = static_cast<RRM2RRCMessageRemoveUserResponse*>(messageP);
assert(message->GetStatus() == Message::STATUS_REMOVE_USER_SUCCESSFULL);
assert(message->GetReason() == OpenAir_RRM_Response_Reason_ok);
assert(message->GetENodeBId() == test_scenario_all_is_ok_cell_id);
assert(message->GetMobileId() == test_scenario_all_is_ok_mobile_id);
assert(message->GetTransactionId() == test_scenario_all_is_ok_transaction_id);
std::cout << "END OF SCENARIO" << std::endl;
} else {
std::cout << "TestScenario::Start() UNKNOWN RRM2RRCMessageRemoveUserResponse received" << std::endl;
throw test_scenario_message_response_type_error();
}
}
break;
default:
std::cerr << "TestScenario::notifyRxMessage() SCENARIO_ALL_IS_OK UNKNOWN STEP" << std::endl;
}
break;
default:
std::cerr << "TestScenario::notifyRxMessage() UNKNOWN SCENARIO" << std::endl;
}
}
\ No newline at end of file
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _TESTSCENARIO_H
# define _TESTSCENARIO_H
# include "Message.h"
# include "platform.h"
class TestScenario
{
public:
static const int SCENARIO_ALL_IS_OK = 1;
static void Start(const int scenario_idP);
static void notifyRxMessage(Message*);
private:
TestScenario ();
~TestScenario ();
static int s_step;
static int s_scenario_id;
};
# endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
// ===========================================================================
#include <stdio.h>
#include <signal.h>
// ===========================================================================
#include "RRMMessageHandler.h"
#include "TestScenario.h"
// ===========================================================================
static bool quit = false;
// ===========================================================================
void sigint(int)
// ===========================================================================
{
quit = true;
}
// ===========================================================================
int main(int argc,char *argv[])
// ===========================================================================
{
signal(SIGPIPE, SIG_IGN);
signal(SIGINT, sigint);
// start RRC server
RRMMessageHandler::Instance();
// start scenario
TestScenario::Start(TestScenario::SCENARIO_ALL_IS_OK);
RRMMessageHandler::Instance()->Join(&quit);
fprintf(stderr, "\nRRM LTE Exiting...\n");
return 0;
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#define VERSION_STRING "dev-SVN-r0"
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment