diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c75f8fa464..8947453454 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -8,6 +8,7 @@ job1:
- echo $EXTERNAL_SHARE_DIR
- echo $SHELL
- git rev-parse --abbrev-ref HEAD
+ - git_repo=`git config --get remote.origin.url`
- git_head=`git rev-parse HEAD`
- echo $git_head
- tmp=`git show-ref --head | grep $git_head`
@@ -23,8 +24,8 @@ job1:
- echo $NRUNS_LTE_SOFTMODEM
- echo $TIMEOUT_CMD
- mkdir -p $OPENAIR_DIR/cmake_targets/autotests/log
- - python $OPENAIR_DIR/cmake_targets/autotests/run_exec_lte-softmodem_tests.py -c -5GRepoHeadVersion $git_head -n $NFS_SHARE_DIR -u $OAI_USER -p $OAI_PASS $OAI_EXTRA_ARGS -g "$OAI_TEST_CASE_GROUP">& $OPENAIR_DIR/cmake_targets/autotests/python_autotest_cleanup.log
- - python $OPENAIR_DIR/cmake_targets/autotests/run_exec_lte-softmodem_tests.py -r -5GRepoHeadVersion $git_head -n $NFS_SHARE_DIR -u $OAI_USER -p $OAI_PASS `echo $OAI_EXTRA_ARGS` -g "$OAI_TEST_CASE_GROUP" --nrun_lte_softmodem $NRUNS_LTE_SOFTMODEM --timeout_cmd $TIMEOUT_CMD >& $OPENAIR_DIR/cmake_targets/autotests/python_autotest.log
+ - python $OPENAIR_DIR/cmake_targets/autotests/run_exec_lte-softmodem_tests.py -c -5GRepo $git_repo -5GRepoHeadVersion $git_head -n $NFS_SHARE_DIR -u $OAI_USER -p $OAI_PASS $OAI_EXTRA_ARGS -g "$OAI_TEST_CASE_GROUP">& $OPENAIR_DIR/cmake_targets/autotests/python_autotest_cleanup.log
+ - python $OPENAIR_DIR/cmake_targets/autotests/run_exec_lte-softmodem_tests.py -r -5GRepo $git_repo -5GRepoHeadVersion $git_head -n $NFS_SHARE_DIR -u $OAI_USER -p $OAI_PASS `echo $OAI_EXTRA_ARGS` -g "$OAI_TEST_CASE_GROUP" --nrun_lte_softmodem $NRUNS_LTE_SOFTMODEM --timeout_cmd $TIMEOUT_CMD >& $OPENAIR_DIR/cmake_targets/autotests/python_autotest.log
- mv $OPENAIR_DIR/cmake_targets/autotests/python_autotest.log $OPENAIR_DIR/cmake_targets/autotests/log/python_autotest.log
- mv $OPENAIR_DIR/cmake_targets/autotests/python_autotest_cleanup.log $OPENAIR_DIR/cmake_targets/autotests/log/python_autotest_cleanup.log
- sshpass -p "$OAI_PASS" rsync -az -e "ssh -o StrictHostKeyChecking=no " --rsync-path="mkdir -p $NFS_TEST_RESULTS_DIR && rsync" $OPENAIR_DIR/cmake_targets/autotests/log $OAI_USER@localhost:$NFS_TEST_RESULTS_DIR
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 9a944efa68..d1ce1d0f8b 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -174,44 +174,67 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,${OPENAIR_
# these changes are related to hardcoded path to include .h files
add_definitions(-DCMAKER)
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3")
-set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3 -O2")
+set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3 -O3")
+
+
+set(GIT_BRANCH "UNKNOWN")
+set(GIT_COMMIT_HASH "UNKNOWN")
+set(GIT_COMMIT_DATE "UNKNOWN")
+
+
+find_package(Git)
+if(GIT_FOUND)
+ message("git found: ${GIT_EXECUTABLE}")
+ # Get the current working branch
+ execute_process(
+ COMMAND git rev-parse --abbrev-ref HEAD
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE GIT_BRANCH
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ # Get the latest abbreviated commit hash of the working branch
+ execute_process(
+ COMMAND git log -1 --format=%h
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE GIT_COMMIT_HASH
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ # Get the latest commit date of the working branch
+ execute_process(
+ COMMAND git log -1 --format=%cd
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE GIT_COMMIT_DATE
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+endif()
-Message("RF_BOARD is ${RF_BOARD}")
-# Below has been put in comment because does not work with
-# SVN authentication.
-#
-#find_package(Subversion)
-#if(SUBVERSION_FOUND)
-# Subversion_WC_INFO(${OPENAIR_DIR} openair)
-# set (FIRMWARE_VERSION "${openair_WC_REVISION} - ${openair_WC_LAST_CHANGED_DATE}")
-# Subversion_WC_LOG(${OPENAIR_DIR} Project)
-#else()
-# set (FIRMWARE_VERSION "No svn information")
-#endif()
-#add_definitions("-DFIRMWARE_VERSION=\"${FIRMWARE_VERSION}\"")
# Below is a hard-coded info
set (FIRMWARE_VERSION "No svn information")
add_definitions("-DFIRMWARE_VERSION=\"${FIRMWARE_VERSION}\"")
-add_definitions("-DPACKAGE_VERSION=\"${FIRMWARE_VERSION}\"")
-add_definitions("-DPACKAGE_BUGREPORT=\"OpenAirInterface web site\"")
+add_definitions("-DPACKAGE_VERSION=\"Branch: ${GIT_BRANCH} Abrev. Hash: ${GIT_COMMIT_HASH} Date: ${GIT_COMMIT_DATE}\"")
+add_definitions("-DPACKAGE_BUGREPORT=\"openair4g-devel@lists.eurecom.fr\"")
# Debug related options
#########################################
-add_boolean_option(MSG_PRINT False "print debug messages")
-add_boolean_option(DISABLE_XER_PRINT False "print XER Format")
-add_boolean_option(XER_PRINT False "print XER Format")
-add_boolean_option(RRC_MSG_PRINT False "print RRC messages")
-add_boolean_option(PDCP_MSG_PRINT False "print PDCP messages to /tmp/pdcp.log")
-add_boolean_option(DEBUG_PDCP_PAYLOAD False "print PDCP PDU to stdout") # if true, make sure that global and PDCP log levels are trace
+add_boolean_option(ASN_DEBUG False "ASN1 coder/decoder Debug")
+add_boolean_option(EMIT_ASN_DEBUG False "ASN1 coder/decoder Debug")
+add_boolean_option(MSG_PRINT False "print debug messages")
+add_boolean_option(DISABLE_XER_PRINT False "print XER Format")
+add_boolean_option(XER_PRINT False "print XER Format")
+add_boolean_option(RRC_MSG_PRINT False "print RRC messages")
+add_boolean_option(PDCP_MSG_PRINT False "print PDCP messages to /tmp/pdcp.log")
+add_boolean_option(DEBUG_PDCP_PAYLOAD False "print PDCP PDU to stdout") # if true, make sure that global and PDCP log levels are trace
add_boolean_option(DEBUG_MAC_INTERFACE False "print MAC-RLC PDU exchange to stdout") # if true, make sure that global and PDCP log levels are trace
-add_boolean_option(TRACE_RLC_PAYLOAD False "print RLC PDU to stdout") # if true, make sure that global and PDCP log levels are trace
-add_boolean_option(TEST_OMG False "???")
-add_boolean_option(DEBUG_OMG False "???")
-add_boolean_option(XFORMS False "This adds the possibility to see the signal oscilloscope")
-add_boolean_option(PRINT_STATS False "This adds the possibility to see the status")
+add_boolean_option(TRACE_RLC_PAYLOAD False "print RLC PDU to stdout") # if true, make sure that global and PDCP log levels are trace
+add_boolean_option(TEST_OMG False "???")
+add_boolean_option(DEBUG_OMG False "???")
+add_boolean_option(XFORMS False "This adds the possibility to see the signal oscilloscope")
+add_boolean_option(PRINT_STATS False "This adds the possibility to see the status")
add_boolean_option(DEBUG_CONSOLE False "makes debugging easier, disables stdout/stderr buffering")
@@ -322,6 +345,7 @@ set(S1AP_OAI_generated
${S1AP_C_DIR}/s1ap_decoder.c
${S1AP_C_DIR}/s1ap_encoder.c
${S1AP_C_DIR}/s1ap_xer_print.c
+ ${S1AP_C_DIR}/s1ap_compare.c
${S1AP_C_DIR}/s1ap_ies_defs.h
)
file(GLOB s1ap_h ${S1AP_C_DIR}/*.h)
@@ -925,6 +949,7 @@ set(PHY_SRC
${OPENAIR1_DIR}/PHY/CODING/crc_byte.c
${OPENAIR1_DIR}/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
${OPENAIR1_DIR}/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c
+ ${OPENAIR1_DIR}/PHY/CODING/3gpplte_turbo_decoder_avx2_16bit.c
${OPENAIR1_DIR}/PHY/CODING/lte_rate_matching.c
${OPENAIR1_DIR}/PHY/CODING/rate_matching.c
${OPENAIR1_DIR}/PHY/CODING/viterbi.c
@@ -1086,7 +1111,6 @@ add_library(CN_UTILS
${OPENAIR3_DIR}/UTILS/conversions.c
${OPENAIR3_DIR}/UTILS/enum_string.c
${OPENAIR3_DIR}/UTILS/log.c
- ${OPENAIR3_DIR}/UTILS/mme_config.c
${OPENAIR3_DIR}/UTILS/mcc_mnc_itu.c
)
@@ -1427,6 +1451,9 @@ include(FindPkgConfig)
pkg_search_module(LIBXML2 libxml-2.0 REQUIRED)
include_directories(${LIBXML2_INCLUDE_DIRS})
+pkg_search_module(LIBXSLT libxslt REQUIRED)
+include_directories(${LIBXSLT_INCLUDE_DIRS})
+
pkg_search_module(OPENSSL openssl REQUIRED)
include_directories(${OPENSSL_INCLUDE_DIRS})
@@ -1718,6 +1745,7 @@ endforeach(myExe)
add_executable(test_epc_generate_scenario
${OPENAIR3_DIR}/TEST/EPC_TEST/generate_scenario.c
+ ${OPENAIR3_DIR}/TEST/EPC_TEST/generate_scenario.h
${OPENAIR2_DIR}/ENB_APP/enb_config.h
${OPENAIR2_DIR}/COMMON/commonDef.h
${OPENAIR2_DIR}/COMMON/messages_def.h
@@ -1726,7 +1754,28 @@ add_executable(test_epc_generate_scenario
${OPENAIR_BIN_DIR}/messages_xml.h
)
target_link_libraries (test_epc_generate_scenario
- -Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${MSC_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES}
+ -Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${ITTI_LIB} ${MSC_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES}
+ )
+
+add_executable(test_epc_play_scenario
+ ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario.c
+ ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_decode.c
+ ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_display.c
+ ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_fsm.c
+ ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_parse.c
+ ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_s1ap.c
+ ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c
+ ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_s1ap_eNB_defs.h
+ ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario_sctp.c
+ ${OPENAIR3_DIR}/TEST/EPC_TEST/play_scenario.h
+ ${OPENAIR2_DIR}/COMMON/commonDef.h
+ ${OPENAIR2_DIR}/COMMON/messages_def.h
+ ${OPENAIR2_DIR}/COMMON/messages_types.h
+ ${OPENAIR_BIN_DIR}/messages_xml.h
+ )
+target_include_directories(test_epc_play_scenario PUBLIC /usr/local/share/asn1c)
+target_link_libraries (test_epc_play_scenario
+ -Wl,--start-group RRC_LIB S1AP_LIB X2AP_LIB GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${ITTI_LIB} ${MSC_LIB} -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES}
)
diff --git a/cmake_targets/autotests/README.txt b/cmake_targets/autotests/README.txt
index f862644d07..6e9cbbd581 100644
--- a/cmake_targets/autotests/README.txt
+++ b/cmake_targets/autotests/README.txt
@@ -171,6 +171,41 @@ Obj.# Case# Test# Description
01 65 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
01 65 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
+
+01 70 00 lte-softmodem tests with SoDeRa RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
+01 70 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 70 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 70 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 70 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 70 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 70 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
+
+
+01 75 00 lte-softmodem + RRH tests with B210 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
+01 75 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 75 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 75 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 75 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 75 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 75 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
+
+01 80 00 lte-softmodem + RRH tests with BladeRF RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
+01 80 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 80 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 80 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 80 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 80 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 80 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
+
+01 85 00 lte-softmodem + RRH tests with USRP X310 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
+01 85 00 Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
+01 85 01 Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
+01 85 02 Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
+01 85 03 Band 7 FDD 5MHz DL Throughput for 300 sec for 1TX/1RX
+01 85 04 Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
+01 85 05 Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
+
+
01 64 lte-softmodem-noS1 tests
02 Functional test case
diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash
index a622b07efb..a98a071bae 100755
--- a/cmake_targets/autotests/run_exec_autotests.bash
+++ b/cmake_targets/autotests/run_exec_autotests.bash
@@ -12,7 +12,7 @@ trap handle_ctrl_c INT
source $OPENAIR_DIR/cmake_targets/tools/test_helper
-#SUDO="sudo -E "
+SUDO="sudo -E -S"
tdir=$OPENAIR_DIR/cmake_targets/autotests
rm -fr $tdir/bin
mkdir -p $tdir/bin
@@ -404,14 +404,12 @@ until [ -z "$1" ]
esac
done
-if [ "$SET_PASSWORD" == "1" ]; then
- mypassword=$passwd
-else
- read -s -p "Enter Password: " mypassword
+if [ "$SET_PASSWORD" != "1" ]; then
+ read -s -p "Enter Password: " passwd
fi
tmpfile=`mktemp`
-echo \'$passwd\' | $SUDO echo $HOME >& $tmpfile
+echo $passwd | $SUDO echo $HOME > $tmpfile
tstsudo=`cat $tmpfile`
if [ "$tstsudo" != "$HOME" ]; then
echo "$USER might not have sudo privileges. Exiting"
@@ -509,7 +507,7 @@ for search_expr in "${test_case_array[@]}"
if [ "$class" == "compilation" ]; then
test_compile "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags"
elif [ "$class" == "execution" ]; then
- $SUDO killall -q oaisim_nos1
+ echo \'passwd\' | $SUDO killall -q oaisim_nos1
test_compile_and_run "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags" "$mypassword" "$test_config_file"
else
echo "Unexpected class of test case...Skipping the test case $name ...."
diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
index eb142c114e..ace214bb53 100755
--- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
+++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
@@ -216,7 +216,7 @@ def sftp_module (username, password, hostname, ports, paramList,logfile):
# \brief bash script stub put at the end of scripts to terminate it
# \param timeout_cmd terminate script after timeout_cmd seconds
# \param terminate_missing_procs if True terminate all the processes launched by script if one of them terminates prematurely (due to error)
-def finalize_deploy_script (timeout_cmd, terminate_missing_procs='True'):
+def finalize_deploy_script (timeout_cmd, terminate_missing_procs='False'):
cmd = 'declare -i timeout_cmd='+str(timeout_cmd) + '\n'
if terminate_missing_procs == 'True':
cmd = cmd + """
@@ -571,6 +571,17 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
nruns = nruns_lte_softmodem
nruns = int(float(nruns))
tags = testcase.findtext('tags',default='')
+
+ RRHMachine = testcase.findtext('RRH',default='')
+ RRH_compile_prog = testcase.findtext('RRH_compile_prog',default='')
+ RRH_compile_prog_args = testcase.findtext('RRH_compile_prog_args',default='')
+ RRH_pre_exec = testcase.findtext('RRH_pre_exec',default='')
+ RRH_pre_exec_args = testcase.findtext('RRH_pre_exec_args',default='')
+ RRH_main_exec = testcase.findtext('RRH_main_exec',default='')
+ RRH_main_exec_args = testcase.findtext('RRH_main_exec_args',default='')
+ RRH_terminate_missing_procs = testcase.findtext('RRH_terminate_missing_procs',default='True')
+
+
eNBMachine = testcase.findtext('eNB',default='')
eNB_config_file = testcase.findtext('eNB_config_file',default='')
eNB_compile_prog = testcase.findtext('eNB_compile_prog',default='')
@@ -635,13 +646,15 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
oai_EPC = openair('localdomain', EPCMachine)
oai_EPC.connect(user, password)
res = oai_eNB.send_recv(cmd)
-
+ if RRHMachine != '':
+ cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep OPENAIR'
+ index_RRHMachine = MachineList.index(RRHMachine)
+ oai_RRH = openair('localdomain', RRHMachine)
+ oai_RRH.connect(user, password)
+ res= oai_RRH.send_recv(cmd)
#cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
#cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
#cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
- logdir_eNB = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename
- logdir_UE = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename
- logdir_EPC = logdirOpenaircnRepo+'/TEST/autotests/log/'+ testcasename
logdir_local = os.environ.get('OPENAIR_DIR')
if logdir_local is None:
print "Environment variable OPENAIR_DIR not set correctly"
@@ -667,10 +680,14 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
run_result=1
run_result_string=''
logdir_eNB = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run)
+ logdir_RRH = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run)
logdir_UE = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run)
logdir_EPC = logdirOpenaircnRepo+'/TEST/autotests/log/'+ testcasename + '/run_' + str(run)
logdir_local_testcase = logdir_local + '/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run)
#Make the log directory of test case
+ if RRHMachine != '':
+ cmd = 'rm -fr ' + logdir_RRH + ' ; mkdir -p ' + logdir_RRH
+ result = oai_RRH.send_recv(cmd)
cmd = 'rm -fr ' + logdir_eNB + ' ; mkdir -p ' + logdir_eNB
result = oai_eNB.send_recv(cmd)
cmd = 'rm -fr ' + logdir_UE + ' ; mkdir -p ' + logdir_UE
@@ -679,6 +696,39 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
result = oai_EPC.send_recv(cmd)
cmd = ' rm -fr ' + logdir_local_testcase + ' ; mkdir -p ' + logdir_local_testcase
result = os.system(cmd)
+
+ if RRHMachine != '':
+ logfile_compile_RRH = logdir_RRH + '/RRH_compile' + '_' + str(run) + '_.log'
+ logfile_exec_RRH = logdir_RRH + '/RRH_exec' + '_' + str(run) + '_.log'
+ logfile_pre_exec_RRH = logdir_RRH + '/RRH_pre_exec' + '_' + str(run) + '_.log'
+ logfile_task_RRH_compile_out = logdir_RRH + '/RRH_task_compile_out' + '_' + str(run) + '_.log'
+ logfile_task_RRH_compile = logdir_local_testcase + '/RRH_task_compile' + '_' + str(run) + '_.log'
+ logfile_task_RRH_out = logdir_RRH + '/RRH_task_out' + '_' + str(run) + '_.log'
+ logfile_task_RRH = logdir_local_testcase + '/RRH_task' + '_' + str(run) + '_.log'
+ task_RRH_compile = ' ( uname -a ; date \n'
+ task_RRH_compile = task_RRH_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n'
+ task_RRH_compile = task_RRH_compile + 'env |grep OPENAIR \n'
+ if RRH_compile_prog != "":
+ task_RRH_compile = task_RRH_compile + ' ( ' + RRH_compile_prog + ' '+ RRH_compile_prog_args + ' ) > ' + logfile_compile_RRH + ' 2>&1 \n'
+ task_RRH_compile = task_RRH_compile + ' date ) > ' + logfile_task_RRH_compile_out + ' 2>&1 '
+ write_file(logfile_task_RRH_compile, task_RRH_compile, mode="w")
+
+ task_RRH = ' ( uname -a ; date \n'
+ task_RRH = task_RRH + ' export OPENAIR_TESTDIR=' + logdir_RRH + '\n'
+ task_RRH = task_RRH + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n'
+ task_RRH = task_RRH + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n'
+
+ if RRH_pre_exec != "":
+ task_RRH = task_RRH + ' ( date; ' + RRH_pre_exec + ' '+ RRH_pre_exec_args + ' ) > ' + logfile_pre_exec_RRH + ' 2>&1 \n'
+ if RRH_main_exec != "":
+ task_RRH = task_RRH + ' ( date; ' + addsudo(RRH_main_exec + ' ' + RRH_main_exec_args, mypassword) + ' ) > ' + logfile_exec_RRH + ' 2>&1 & \n'
+ task_RRH = task_RRH + 'array_exec_pid+=($!) \n'
+ task_RRH = task_RRH + 'echo eNB_main_exec PID = $! \n'
+ #terminate the eNB test case after timeout_cmd seconds
+ task_RRH = task_RRH + finalize_deploy_script (timeout_cmd, RRH_terminate_missing_procs) + ' \n'
+ task_RRH = task_RRH + 'handle_ctrl_c' + '\n'
+ task_RRH = task_RRH + ' ) > ' + logfile_task_RRH_out + ' 2>&1 '
+ write_file(logfile_task_RRH, task_RRH, mode="w")
logfile_compile_eNB = logdir_eNB + '/eNB_compile' + '_' + str(run) + '_.log'
logfile_exec_eNB = logdir_eNB + '/eNB_exec' + '_' + str(run) + '_.log'
@@ -704,6 +754,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
write_file(logfile_task_eNB_compile, task_eNB_compile, mode="w")
task_eNB = ' ( uname -a ; date \n'
+ task_eNB = task_eNB + ' export OPENAIR_TESTDIR=' + logdir_eNB + '\n'
task_eNB = task_eNB + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n'
task_eNB = task_eNB + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n'
@@ -806,6 +857,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
write_file(logfile_task_EPC_compile, task_EPC_compile, mode="w")
task_EPC = ' ( uname -a ; date \n'
+ task_EPC = task_EPC + ' export OPENAIRCN_TESTDIR=' + logdir_EPC + '\n'
task_EPC = task_EPC + 'array_exec_pid=()' + '\n'
task_EPC = task_EPC + 'cd ' + logdirOpenaircnRepo + '; source oaienv\n'
task_EPC = task_EPC + 'source BUILD/TOOLS/build_helper \n'
@@ -837,14 +889,20 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC_compile, False, timeout_thread)
thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB_compile, False, timeout_thread)
thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE_compile, False, timeout_thread)
+ if RRHMachine != '':
+ thread_RRH = oaiThread(4, "RRH_thread", RRHMachine, user, password , task_RRH_compile, False, timeout_thread)
threads=[]
threads.append(thread_eNB)
threads.append(thread_UE)
threads.append(thread_EPC)
+ if RRHMachine != '':
+ threads.append(thread_RRH)
# Start new Threads
thread_eNB.start()
thread_UE.start()
thread_EPC.start()
+ if RRHMachine != '':
+ thread_RRH.start()
#Wait for all the compile threads to complete
for t in threads:
t.join()
@@ -853,26 +911,29 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC, False, timeout_thread)
thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB, False, timeout_thread)
thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE, False, timeout_thread)
-
+ if RRHMachine != '':
+ thread_RRH = oaiThread(4, "RRH_thread", RRHMachine, user, password , task_RRH, False, timeout_thread)
threads=[]
threads.append(thread_eNB)
threads.append(thread_UE)
threads.append(thread_EPC)
+ if RRHMachine != '':
+ threads.append(thread_RRH)
# Start new Threads
thread_eNB.start()
thread_UE.start()
thread_EPC.start()
-
+ if RRHMachine != '':
+ thread_RRH.start()
#Wait for all the compile threads to complete
for t in threads:
t.join()
#Now we get the log files from remote machines on the local machine
- cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
-
- #cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
- #cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
- #cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
+ if RRHMachine != '':
+ cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC, oai_RRH] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
+ else:
+ cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop)
logfile_UE_stop_script_out = logdir_UE + '/UE_stop_script_out' + '_' + str(run) + '_.log'
logfile_UE_stop_script = logdir_local_testcase + '/UE_stop_script' + '_' + str(run) + '_.log'
@@ -900,22 +961,23 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
res= oai_EPC.send_recv(cmd)
print "Changing permissions of logdir <" + logdir_EPC + "> in EPC machine..." + res
+ if RRHMachine != '':
+ cmd = 'sudo -E chown -R ' + user + ' ' + logdir_RRH
+ res= oai_RRH.send_recv(cmd)
+ print "Changing permissions of logdir <" + logdir_RRH + "> in RRH machine..." + res
print "Copying files from EPCMachine : " + EPCMachine + "logdir_EPC = " + logdir_EPC
- #ssh = SSHSession(EPCMachine , username=user, key_file=None, password=password)
- #ssh.get_all(logdir_EPC , logdir_local + '/cmake_targets/autotests/log/'+ testcasename)
SSHSessionWrapper(EPCMachine, user, None, password, logdir_EPC, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all")
print "Copying files from eNBMachine " + eNBMachine + "logdir_eNB = " + logdir_eNB
- #ssh = SSHSession(eNBMachine , username=user, key_file=None, password=password)
- #ssh.get_all(logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename)
SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all")
print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE
- #ssh = SSHSession(UEMachine , username=user, key_file=None, password=password)
- #ssh.get_all(logdir_UE , logdir_local + '/cmake_targets/autotests/log/'+ testcasename)
SSHSessionWrapper(UEMachine, user, None, password, logdir_UE, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all")
+ if RRHMachine != '':
+ print "Copying files from RRHMachine : " + RRHMachine + "logdir_RRH = " + logdir_RRH
+ SSHSessionWrapper(RRHMachine, user, None, password, logdir_RRH, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all")
#Currently we only perform throughput tests
@@ -1017,8 +1079,8 @@ class oaiCleanOldProgramThread (threading.Thread):
error = error + '\n threadID = ' + str(self.threadID) + '\n threadname = ' + self.threadname + '\n CleanUpOldProgs = ' + self.CleanUpOldProgs + '\n CleanUpAluLteBox = ' + self.CleanUpAluLteBox + '\n ExmimoRfStop = ' + self.ExmimoRfStop + '\n'
error = error + traceback.format_exc()
print error
- print "There is error in cleaning up old programs. The test case execution cannot continue...."
- sys.exit(1)
+ print "There is error in cleaning up old programs....."
+ #sys.exit(1)
# \brief Run parallel threads in all machines for clean up old execution of test cases
# \param oai_list list of handlers that can be used to execute programs on remote machines
@@ -1043,6 +1105,7 @@ pw =''
i = 0
dlsim=0
localshell=0
+GitOAI5GRepo=''
GitOAI5GRepoBranch=''
GitOAI5GHeadVersion=''
user=''
@@ -1061,6 +1124,7 @@ flag_remove_logdir=False
flag_start_testcase=False
nruns_lte_softmodem=''
flag_skip_git_head_check=False
+flag_skip_oai_install=False
Timeout_cmd=''
print "Number of arguments argc = " + str(len(sys.argv))
#for index in range(1,len(sys.argv) ):
@@ -1078,6 +1142,9 @@ while i < len (sys.argv):
i = i +1
elif arg == '-c':
cleanUpRemoteMachines=True
+ elif arg == '-5GRepo':
+ GitOAI5GRepo = sys.argv[i+1]
+ i = i +1
elif arg == '-5GRepoBranch':
GitOAI5GRepoBranch = sys.argv[i+1]
i = i +1
@@ -1120,11 +1187,14 @@ while i < len (sys.argv):
elif arg == '--timeout_cmd':
Timeout_cmd = sys.argv[i+1]
i = i +1
+ elif arg == '--skip-oai-install':
+ flag_skip_oai_install=True
elif arg == '-h' :
print "-s: This flag *MUST* be set to start the test cases"
print "-r: Remove the log directory in autotests"
print "-g: Run test cases in a group"
print "-c: Run cleanup scripts on remote machines and exit"
+ print "-5GRepo: Repository for OAI 5G to use to run tests (overrides GitOAI5GRepo in test_case_list.xml)"
print "-5GRepoBranch: Branch for OAI 5G Repository to run tests (overrides the branch in test_case_list.xml)"
print "-5GRepoHeadVersion: Head commit on which to run tests (overrides the branch in test_case_list.xml)"
print "-u: use the user name passed as argument"
@@ -1135,6 +1205,7 @@ while i < len (sys.argv):
print "-MachineListGeneric : overrides the MachineListGeneric parameter in test_case_list.xml"
print "--skip-git-head-check: skip checking of GitHead remote/local branch (only for debugging)"
print "--timeout_cmd: Override the default parameter (timeout_cmd) in test_case_list.xml. This parameter is in seconds and should be > 120"
+ print "--skip-oai-install: Skips the openairinterface5g installer"
sys.exit()
else :
print "Unrecongnized Option: <" + arg + ">. Use -h to see valid options"
@@ -1212,7 +1283,9 @@ if MachineList =='':
MachineList = xmlRoot.findtext('MachineList',default='')
NFSResultsShare = xmlRoot.findtext('NFSResultsShare',default='')
GitOpenaircnRepo = xmlRoot.findtext('GitOpenair-cnRepo',default='')
-GitOAI5GRepo = xmlRoot.findtext('GitOAI5GRepo',default='')
+
+if GitOAI5GRepo == '':
+ GitOAI5GRepo = xmlRoot.findtext('GitOAI5GRepo',default='')
if GitOAI5GRepoBranch == '':
GitOAI5GRepoBranch = xmlRoot.findtext('GitOAI5GRepoBranch',default='')
@@ -1343,6 +1416,17 @@ for oai in oai_list:
else:
cmd = cmd + 'if [ \"$git_head\" != \"'+ GitOAI5GHeadVersion + '\" ]; then echo \"error: Git openairinterface5g head version does not match\" ; fi \n'
cmd = cmd + 'source oaienv' + '\n'
+ if flag_skip_oai_install == False:
+ cmd = cmd + 'source $OPENAIR_DIR/cmake_targets/tools/build_helper \n'
+ cmd = cmd + 'echo \"Installing core OAI dependencies...Start\" \n'
+ cmd = cmd + '$OPENAIR_DIR/cmake_targets/build_oai -I --install-optional-packages \n'
+ cmd = cmd + 'echo \"Installing core OAI dependencies...Finished\" \n'
+ #cmd = cmd + 'echo \"Installing BLADERF OAI dependencies...Start\" \n'
+ #cmd = cmd + 'check_install_bladerf_driver \n'
+ #cmd = cmd + 'echo \"Installing BLADERF OAI dependencies...Finished\" \n'
+ #cmd = cmd + 'echo \"Installing USRP OAI dependencies...Start\" \n'
+ #cmd = cmd + 'check_install_usrp_uhd_driver \n'
+ #cmd = cmd + 'echo \"Installing USRP OAI dependencies...Finished\" \n'
cmd = cmd + 'cd ' + logdirOpenaircnRepo + '\n'
cmd = cmd + 'git checkout ' + GitOpenaircnRepoBranch + '\n'
cmd = cmd + 'env |grep OPENAIR' + '\n'
@@ -1351,7 +1435,7 @@ for oai in oai_list:
#cmd = cmd + 'echo \' ' + cmd + '\' > ' + setup_script + ' 2>&1 \n '
#result = oai_list[index].send_recv(cmd, False, 300 )
write_file(setup_script, cmd, mode="w")
- tempThread = oaiThread(index, 'thread_setup_'+str(index)+'_' + MachineList[index] , MachineList[index] , user, pw, cmd, False, 300)
+ tempThread = oaiThread(index, 'thread_setup_'+str(index)+'_' + MachineList[index] , MachineList[index] , user, pw, cmd, False, 3000)
threads_init_setup.append(tempThread )
tempThread.start()
index = index + 1
@@ -1399,7 +1483,8 @@ status, out = commands.getstatusoutput('grep ' + ' -il \'error\' ' + locallogdi
if (out != '') :
print "There is error in setup of machines"
print "status = " + str(status) + "\n Check files for error = " + out
- print sys.exit(1)
+ print "Exiting now..."
+ sys.exit(1)
cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop)
if cleanUpRemoteMachines == True:
diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index 037f5c8ee9..394feda359 100644
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -6,11 +6,11 @@
https://gitlab.eurecom.fr/oai/openair-cn.git
develop
develop
- oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* hss hss_sim configure_cots_bandrich_ue* wvdial* iperf iperf_script ping tshark
+ oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* hss hss_sim configure_cots_bandrich_ue* wvdial* iperf iperf_script ping tshark rrh_gw
sudo -S -E /opt/ltebox/tools/stop_ltebox
$OPENAIR_DIR/cmake_targets/build_oai -w EXMIMO -c; sudo -S -E $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2; uname -a; dmesg|tail
36000
- 0104+ 015502 015505 015506 015507 015508 015509 015510 015511 015602 015605 015702 015705 015802 015805 016002 016005 016102 016105 016302 016305 016502 016505
+ 0102+ 010304 010305 0104+ 015502 015505 015506 015507 015508 015509 015510 015511 015602 015605 015702 015705 015802 015805 0159+ 0160+ 0161+ 0162+ 0163+ 0165+ 0170+ 017502 017505
3
mozart calisson stevens nano amerique
@@ -329,22 +329,19 @@
execution
Run OAISIM Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2) and search for errors, segmentation fault or exit
- cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
+ cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
+
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2 -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2 -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2 -s15
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0"
segmentation fault|assertion|exiting|fatal
@@ -354,22 +351,19 @@
execution
Run OAISIM Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2) in PHY_ABSTRACTION mode and search for errors, segmentation fault or exit
- cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
+ cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
+
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2 -a
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -a -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -a -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -a -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2 -a -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2 -a -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2 -a -s15
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0"
segmentation fault|assertion|exiting|fatal
@@ -379,22 +373,19 @@
execution
Run OAISIM Rel10 TDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2) and search for errors, segmentation fault or exit
-cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
+cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
+
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -s15
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0" "Received RRCConnectionReconfigurationComplete from UE 1" "Received RRCConnectionReconfigurationComplete from UE 2"
segmentation fault|assertion|exiting|fatal
@@ -404,22 +395,19 @@
execution
Run OAISIM Rel10 TDD, 1 eNB + 3 UEs (5 MHz) in PHY_ABSTRACTION mode and search for errors, segmentation fault or exit
- cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
+ cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
+
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -a
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -a -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -a -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -a -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -a -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -a -s15
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -a -s15
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_nos1.tdd.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0" "Received RRCConnectionReconfigurationComplete from UE 1" "Received RRCConnectionReconfigurationComplete from UE 2"
segmentation fault|assertion|exiting|fatal
@@ -429,22 +417,19 @@
execution
Run OAI Rel10 TDD, 1 eNB + 1 UE (5 MHz) without abstraction mode, send ping from from eNB to UE, and check that there is no packet losses
- cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
+ cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
+
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -c26
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -c26
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -c26
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -c26
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -c26
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -c26
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -c26
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -c26
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -c26
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -c26
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -c26
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -c26
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2
"DL and UL loss rate below 10"
segmentation fault|assertion|exiting|fatal
@@ -454,22 +439,19 @@
execution
Run OAI Rel10 TDD, 1 eNB + 1 UE (5 MHz) in PHY_ABSTRACTION mode, send ping from from eNB to UE, and check that there is no packet losses
- cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf
+ cp -vf $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.generic.oaisim.local_no_mme.conf $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf
$OPENAIR_DIR/cmake_targets/build_oai
--oaisim --noS1 -c
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf frame_type \"TDD\"
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf eutra_band 38
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf downlink_frequency 2580000000L
- $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf uplink_frequency_offset 0
+
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -c26 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -c26 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -c26 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -c26 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -c26 -a
- -O $OPENAIR_LOGDIR/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -c26 -a
+ -O $OPENAIR_LOGDIR/enb.band38.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -c26 -a
oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2
"DL and UL loss rate below 10"
segmentation fault|assertion|exiting|fatal
@@ -485,12 +467,12 @@
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -F
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -F
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -F
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2 -F
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2 -F
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2 -F
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -F -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -F -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -F -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2 -F -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2 -F -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2 -F -s15
oaisim_noS1.FDD.5MHz.TM1 oaisim_noS1.FDD.10MHz.TM1 oaisim_noS1.FDD.20MHz.TM1 oaisim_noS1.FDD.5MHz.TM2 oaisim_noS1.FDD.10MHz.TM2 oaisim_noS1.FDD.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0"
segmentation fault|assertion|exiting|fatal
@@ -506,12 +488,12 @@
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -F -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -F -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -F -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2 -F -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2 -F -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2 -F -a
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -F -a -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -F -a -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -F -a -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 2 -F -a -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 2 -F -a -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 2 -F -a -s15
oaisim_noS1.FDD.5MHz.TM1 oaisim_noS1.FDD.10MHz.TM1 oaisim_noS1.FDD.20MHz.TM1 oaisim_noS1.FDD.5MHz.TM2 oaisim_noS1.FDD.10MHz.TM2 oaisim_noS1.FDD.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0"
segmentation fault|assertion|exiting|fatal
@@ -527,12 +509,12 @@
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -F
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -F
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -F
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -F
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -F
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -F
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -F -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -F -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -F -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -F -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -F -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -F -s15
oaisim_noS1.FDD.5MHz.TM1 oaisim_noS1.FDD.10MHz.TM1 oaisim_noS1.FDD.20MHz.TM1 oaisim_noS1.FDD.5MHz.TM2 oaisim_noS1.FDD.10MHz.TM2 oaisim_noS1.FDD.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0" "Received RRCConnectionReconfigurationComplete from UE 1" "Received RRCConnectionReconfigurationComplete from UE 2"
segmentation fault|assertion|exiting|fatal
@@ -548,12 +530,12 @@
$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -F -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -F -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -F -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -F -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -F -a
- -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -F -a
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -F -a -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -F -a -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -F -a -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 2 -F -a -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 2 -F -a -s15
+ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 2 -F -a -s15
oaisim_noS1.FDD.5MHz.TM1 oaisim_noS1.FDD.10MHz.TM1 oaisim_noS1.FDD.20MHz.TM1 oaisim_noS1.FDD.5MHz.TM2 oaisim_noS1.FDD.10MHz.TM2 oaisim_noS1.FDD.20MHz.TM2
"Received RRCConnectionReconfigurationComplete from UE 0" "Received RRCConnectionReconfigurationComplete from UE 1" "Received RRCConnectionReconfigurationComplete from UE 2"
segmentation fault|assertion|exiting|fatal
@@ -909,9 +891,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -984,9 +966,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -999,7 +981,7 @@
- True
+ False
/tmp
@@ -1013,7 +995,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -1033,7 +1015,7 @@
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
USRPb210.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -1058,9 +1040,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -1073,7 +1055,7 @@
- True
+ False
/tmp
@@ -1087,7 +1069,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -1107,7 +1089,7 @@
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
USRPb210.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -1132,9 +1114,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -1147,7 +1129,7 @@
- True
+ False
/tmp
@@ -1159,7 +1141,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
@@ -1180,7 +1162,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
USRPb210.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -1205,9 +1187,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -1220,7 +1202,7 @@
- True
+ False
/tmp
@@ -1233,7 +1215,7 @@
throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -1253,7 +1235,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
USRPb210.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -1278,9 +1260,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -1293,7 +1275,7 @@
- True
+ False
/tmp
@@ -1307,7 +1289,7 @@
throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -1327,7 +1309,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
USRPb210.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -1353,9 +1335,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -1368,7 +1350,7 @@
- True
+ False
/tmp
@@ -1382,7 +1364,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -1402,7 +1384,7 @@
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
USRPb210.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.2TX.2RX
10
@@ -1428,9 +1410,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -1443,7 +1425,7 @@
- True
+ False
/tmp
>
@@ -1456,7 +1438,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -1476,7 +1458,7 @@
throughput_test min=2.0Mbits/sec max=2.0Mbits/sec average=2.0Mbits/sec
- True
+ False
USRPb210.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.2TX.2RX
10
@@ -1501,9 +1483,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -1516,7 +1498,7 @@
- True
+ False
/tmp
@@ -1530,7 +1512,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -1550,7 +1532,7 @@
throughput_test min=4.0Mbits/sec max=4.0Mbits/sec average=4.0Mbits/sec
- True
+ False
USRPb210.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.2TX.2RX
10
@@ -1575,9 +1557,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -1590,7 +1572,7 @@
- True
+ False
/tmp
@@ -1604,7 +1586,7 @@
throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -1624,7 +1606,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
USRPb210.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.2TX.2RX
10
@@ -1649,9 +1631,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -1664,7 +1646,7 @@
- True
+ False
/tmp
@@ -1678,7 +1660,7 @@
throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -1698,7 +1680,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
USRPb210.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.2TX.2RX
10
@@ -1723,9 +1705,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -1738,7 +1720,7 @@
- True
+ False
/tmp
@@ -1752,7 +1734,7 @@
throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -1772,7 +1754,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
USRPb210.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.2TX.2RX
10
@@ -1799,14 +1781,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5:3\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5:4\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth5:3 192.170.0.2 up ; sudo -E ifconfig eth5:4 192.170.1.2 up; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
@@ -1835,23 +1817,23 @@
BUILD/EPC/epc.conf.in MCC \"208\"
BUILD/EPC/epc.conf.in MNC \"92\"
BUILD/EPC/epc.conf.in TAC \"1\"
- BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth5:1\"
BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth5:2\";
BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
- BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth5\"
BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth5 add 192.172.0.1
$OPENAIRCN_DIR/SCRIPTS/run_epc
-i -r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -1883,14 +1865,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5:3\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5:4\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth5:3 192.170.0.2 up ; sudo -E ifconfig eth5:4 192.170.1.2 up; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
@@ -1919,23 +1901,23 @@
BUILD/EPC/epc.conf.in MCC \"208\"
BUILD/EPC/epc.conf.in MNC \"92\"
BUILD/EPC/epc.conf.in TAC \"1\"
- BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth5:1\"
BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth5:2\";
BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
- BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth5\"
BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth5 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-i -r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -1967,14 +1949,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5:3\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5:4\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth5:3 192.170.0.2 up ; sudo -E ifconfig eth5:4 192.170.1.2 up; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
@@ -2003,23 +1985,23 @@
BUILD/EPC/epc.conf.in MCC \"208\"
BUILD/EPC/epc.conf.in MNC \"92\"
BUILD/EPC/epc.conf.in TAC \"1\"
- BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth5:1\"
BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth5:2\";
BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
- BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth5\"
BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth5 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-i -r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -2051,14 +2033,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5:3\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5:4\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth5:3 192.170.0.2 up ; sudo -E ifconfig eth5:4 192.170.1.2 up; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
@@ -2087,23 +2069,23 @@
BUILD/EPC/epc.conf.in MCC \"208\"
BUILD/EPC/epc.conf.in MNC \"92\"
BUILD/EPC/epc.conf.in TAC \"1\"
- BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth5:1\"
BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth5:2\";
BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
- BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth5\"
BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth5 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-i -r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
@@ -2135,14 +2117,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5:3\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5:4\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth5:3 192.170.0.2 up ; sudo -E ifconfig eth5:4 192.170.1.2 up; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
@@ -2171,23 +2153,23 @@
BUILD/EPC/epc.conf.in MCC \"208\"
BUILD/EPC/epc.conf.in MNC \"92\"
BUILD/EPC/epc.conf.in TAC \"1\"
- BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth5:1\"
BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth5:2\";
BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
- BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth5\"
BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth5 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-i -r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
@@ -2219,14 +2201,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0:3\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5:3\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.2/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0:4\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5:4\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.170.1.2/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth5:3 192.170.0.2 up ; sudo -E ifconfig eth5:4 192.170.1.2 up; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf -W
@@ -2255,23 +2237,23 @@
BUILD/EPC/epc.conf.in MCC \"208\"
BUILD/EPC/epc.conf.in MNC \"92\"
BUILD/EPC/epc.conf.in TAC \"1\"
- BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth0:1\"
+ BUILD/EPC/epc.conf.in MME_INTERFACE_NAME_FOR_S1_MME \"eth5:1\"
BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.170.0.1/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0:2\";
+ BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth5:2\";
BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.170.1.1/24\";
- BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth5\"
BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth5 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-i -r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
@@ -2303,14 +2285,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -2345,17 +2327,18 @@
BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\";
BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth0\"
BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ BUILD/EPC/epc.conf.in OUTPUT \"CONSOLE\"
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth0 add 192.172.0.1
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -2387,14 +2370,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -2433,13 +2416,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -2471,14 +2454,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0:3 192.170.0.2 up ; sudo -E ifconfig eth0:4 192.170.1.2 up; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -2517,13 +2500,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -2555,14 +2538,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -2601,13 +2584,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
@@ -2639,14 +2622,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -2685,13 +2668,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
@@ -2723,14 +2706,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig
+ sleep 15; sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf -W
@@ -2769,13 +2752,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1 ;cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
@@ -2805,9 +2788,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -2820,7 +2803,7 @@
- True
+ False
/tmp
@@ -2833,7 +2816,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -2853,7 +2836,7 @@
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
USRPx310.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -2877,9 +2860,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -2892,7 +2875,7 @@
- True
+ False
/tmp
@@ -2905,7 +2888,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -2925,7 +2908,7 @@
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
USRPx310.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -2948,9 +2931,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -2963,7 +2946,7 @@
- True
+ False
/tmp
@@ -2977,7 +2960,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -2997,7 +2980,7 @@
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
USRPx310.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -3020,9 +3003,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -3035,7 +3018,7 @@
- True
+ False
/tmp
@@ -3047,7 +3030,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
@@ -3068,7 +3051,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
USRPx310.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -3091,9 +3074,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -3106,7 +3089,7 @@
- True
+ False
/tmp
@@ -3118,7 +3101,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
@@ -3139,7 +3122,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
USRPx310.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -3162,9 +3145,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -3177,7 +3160,7 @@
- True
+ False
/tmp
@@ -3189,7 +3172,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
@@ -3210,7 +3193,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
USRPx310.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -3236,14 +3219,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf -W
@@ -3282,13 +3265,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -3319,14 +3302,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf -W
@@ -3334,7 +3317,7 @@
- True
+ False
/tmp
@@ -3365,13 +3348,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -3400,14 +3383,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf -W
@@ -3446,13 +3429,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth0 add 192.172.0.1
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -3481,14 +3464,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf -W
@@ -3525,15 +3508,15 @@
BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
BUILD/EPC/epc.conf.in IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
$OPENAIRCN_DIR/SCRIPTS/build_epc
- -c -l
+ -c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
@@ -3562,14 +3545,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf -W
@@ -3608,13 +3591,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
@@ -3643,14 +3626,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
+ sleep 15; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf -W
@@ -3658,7 +3641,7 @@
- True
+ False
/tmp
@@ -3689,13 +3672,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
@@ -3724,9 +3707,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -3739,7 +3722,7 @@
- True
+ False
/tmp
@@ -3752,7 +3735,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -3772,7 +3755,7 @@
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
EXMIMO.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -3796,9 +3779,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -3811,7 +3794,7 @@
- True
+ False
/tmp
@@ -3825,7 +3808,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -3845,7 +3828,7 @@
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
EXMIMO.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -3868,9 +3851,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -3883,7 +3866,7 @@
- True
+ False
/tmp
@@ -3897,14 +3880,14 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.local.enb.conf.in MCC \"208\"
BUILD/EPC/epc.local.enb.conf.in MNC \"92\"
BUILD/EPC/epc.local.enb.conf.in TAC \"1\"
- BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\"
+ BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth5\"
BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\"
SCRIPTS/build_epc
-c -l
@@ -3921,7 +3904,7 @@
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
EXMIMO.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -3944,9 +3927,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -3959,7 +3942,7 @@
- True
+ False
/tmp
@@ -3971,7 +3954,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
@@ -3992,7 +3975,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
EXMIMO.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -4015,9 +3998,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -4030,7 +4013,7 @@
- True
+ False
/tmp
@@ -4042,7 +4025,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
@@ -4063,7 +4046,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
EXMIMO.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -4086,9 +4069,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -4101,7 +4084,7 @@
- True
+ False
/tmp
@@ -4113,7 +4096,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
@@ -4134,7 +4117,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
EXMIMO.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -4159,14 +4142,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w EXMIMO -x -c
- sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2; dmesg|tail
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -4206,13 +4189,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth0 add 192.172.0.1 ;cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -4243,14 +4226,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w EXMIMO -x -c
- sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -4289,13 +4272,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -4324,14 +4307,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w EXMIMO -x -c
- sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -4370,13 +4353,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ; sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
@@ -4405,14 +4388,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w EXMIMO -x -c
- sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -4451,13 +4434,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1 ;cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
@@ -4486,14 +4469,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w EXMIMO -x -c
- sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -4532,13 +4515,13 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
@@ -4567,14 +4550,14 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w EXMIMO -x -c
- sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+ sleep 15; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf $OPENAIR_TESTDIR/enb.conf
$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf -W
@@ -4613,15 +4596,15 @@
$OPENAIRCN_DIR/SCRIPTS/build_epc
-c -l
$OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l
+ -c -l --debug --random false
- sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth1 add 192.172.0.1
+ sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches' ;sudo -E ifconfig eth0 add 192.172.0.1
$OPENAIRCN_DIR/SCRIPTS/run_epc
-r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss
+ sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
- $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
@@ -4652,9 +4635,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -26
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -4728,9 +4711,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -29
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -4757,7 +4740,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -4777,7 +4760,7 @@
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
BladeRF.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -4803,9 +4786,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -32
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -4832,7 +4815,7 @@
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
@@ -4852,7 +4835,7 @@
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
- True
+ False
BladeRF.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -4878,9 +4861,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -26
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -4905,7 +4888,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
@@ -4926,7 +4909,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
BladeRF.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -4952,9 +4935,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -29
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -4980,7 +4963,7 @@
throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -5000,7 +4983,7 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
BladeRF.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -5026,9 +5009,9 @@
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_rx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf nb_antennas_tx 1
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf pdsch_referenceSignalPower -32
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
@@ -5055,7 +5038,7 @@
throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
- True
+ False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -5075,11 +5058,972 @@
$OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
- True
+ False
BladeRF.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX
10
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tx_gain 60
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf rx_gain 111
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w LMSSDR -x -c
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ SoDeRa.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tx_gain 60
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf rx_gain 111
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w LMSSDR -x -c
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ SoDeRa.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tx_gain 60
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf rx_gain 111
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w LMSSDR -x -c
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ SoDeRa.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tx_gain 60
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf rx_gain 111
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w LMSSDR -x -c
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
+
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+ False
+ BladeRF.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tx_gain 60
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf rx_gain 111
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w LMSSDR -x -c
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+ False
+ SoDeRa.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf tx_gain 60
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf rx_gain 111
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf ENB_PORT_FOR_S1U 2152
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w LMSSDR -x -c
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf -W
+
+
+
+
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+ False
+ SoDeRa.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ stevens
+ amerique
+ mozart
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_PORT_FOR_S1U 2152
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rrh_gw_config "local_if_name=\"eth0\";remote_address=\"10:60:4b:75:80:83\";local_address=\"98:90:96:df:66:07\";local_port=50000;remote_port=50000;tr_preference=\"raw\";rf_preference=\"usrp_b200\";iq_txshift=4;tx_sample_advance=70;tx_scheduling_advance=9;rrh_gw_active=\"yes\";"
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w None -t ETHERNET -x -c --disable-deadline
+
+
+ sleep 5; sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf -W
+
+
+
+
+ False
+
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --RRH -w USRP -t ETHERNET -c --disable-deadline
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw
+ -n1 -x -m1 -i eth1
+ False
+
+
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPb210.RRH.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+
+ lte-softmodem
+
+ calisson
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_PORT_FOR_S1U 2152
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rrh_gw_config "local_if_name=\"eth0\";remote_address=\"10:60:4b:75:80:83\";local_address=\"98:90:96:df:66:07\";local_port=50000;remote_port=50000;tr_preference=\"raw\";rf_preference=\"usrp_b200\";iq_txshift=4;tx_sample_advance=113;tx_scheduling_advance=9;rrh_gw_active=\"yes\";"
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w None -t ETHERNET -x -c --disable-deadline
+
+
+ sleep 5; sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf -W
+
+
+
+
+ False
+
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --RRH -w USRP -t ETHERNET -c --disable-deadline
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw
+ -n1 -x -m1 -i eth1
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPb210.RRH.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf pdsch_referenceSignalPower -32
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_PORT_FOR_S1U 2152
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rrh_gw_config "local_if_name=\"eth0\";remote_address=\"10:60:4b:75:80:83\";local_address=\"98:90:96:df:66:07\";local_port=50000;remote_port=50000;tr_preference=\"raw\";rf_preference=\"usrp_b200\";iq_txshift=4;tx_sample_advance=115;tx_scheduling_advance=11;rrh_gw_active=\"yes\";"
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w None -t ETHERNET -x -c --disable-deadline
+
+
+ sleep 5; sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf -W
+
+
+
+
+ False
+
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --RRH -w USRP -t ETHERNET -c --disable-deadline
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw
+ -n1 -x -m1 -i eth1
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+
+
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m -B 192.172.0.1
+
+ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+
+ False
+ USRPb210.RRH.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_PORT_FOR_S1U 2152
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rrh_gw_config "local_if_name=\"eth0\";remote_address=\"10:60:4b:75:80:83\";local_address=\"98:90:96:df:66:07\";local_port=50000;remote_port=50000;tr_preference=\"raw\";rf_preference=\"usrp_b200\";iq_txshift=4;tx_sample_advance=70;tx_scheduling_advance=9;rrh_gw_active=\"yes\";"
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w None -t ETHERNET -x -c --disable-deadline
+
+
+ sleep 5; sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf -W
+
+
+
+
+ False
+
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --RRH -w USRP -t ETHERNET -c --disable-deadline
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw
+ -n1 -x -m1 -i eth1
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
+
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+ False
+ USRPb210.RRH.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_PORT_FOR_S1U 2152
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rrh_gw_config "local_if_name=\"eth0\";remote_address=\"10:60:4b:75:80:83\";local_address=\"98:90:96:df:66:07\";local_port=50000;remote_port=50000;tr_preference=\"raw\";rf_preference=\"usrp_b200\";iq_txshift=4;tx_sample_advance=113;tx_scheduling_advance=9;rrh_gw_active=\"yes\";"
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w None -t ETHERNET -x -c --disable-deadline
+
+
+ sleep 5; sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf -W
+
+
+
+
+ False
+
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --RRH -w USRP -t ETHERNET -c --disable-deadline
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw
+ -n1 -x -m1 -i eth1
+ False
+
+ /tmp
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+ False
+ USRPb210.RRH.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
+ lte-softmodem
+
+ calisson
+ mozart
+ stevens
+ amerique
+ 390
+ /tmp
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf pdsch_referenceSignalPower -32
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf ENB_PORT_FOR_S1U 2152
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf rrh_gw_config "local_if_name=\"eth0\";remote_address=\"10:60:4b:75:80:83\";local_address=\"98:90:96:df:66:07\";local_port=50000;remote_port=50000;tr_preference=\"raw\";rf_preference=\"usrp_b200\";iq_txshift=4;tx_sample_advance=115;tx_scheduling_advance=11;rrh_gw_active=\"yes\";"
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w None -t ETHERNET -x -c --disable-deadline
+
+
+ sleep 5; $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf -W
+
+
+
+
+ False
+
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --RRH -w USRP -t ETHERNET -c --disable-deadline
+
+
+ sudo -E chrt -f 99 $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw
+ -n1 -x -m1 -i eth1
+ False
+
+ /tmp
+
+
+
+
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; sleep 10; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue
+
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -s -i 1 -u -f m -B 192.172.0.2
+
+ throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec
+
+ False
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+
+
+ /tmp
+
+
+
+
+
+
+
+
+ /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000
+
+ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
+
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s -B 192.172.0.1
+
+
+ False
+ USRPb210.RRH.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX
+ 10
+
+
+
diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
index 6af3785865..99aed7c29f 100755
--- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
+++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
@@ -131,6 +131,7 @@ def start_ue () :
ip = IPRoute()
idx = ip.link_lookup(ifname=iface)[0]
os.system ('route add ' + gw + ' ppp0')
+ os.system('sleep 5')
os.system ('ping ' + gw)
break
except Exception, e:
diff --git a/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py b/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py
new file mode 100755
index 0000000000..07d532c5d6
--- /dev/null
+++ b/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py
@@ -0,0 +1,200 @@
+#!/usr/bin/python
+
+import time
+import serial
+import os
+from pyroute2 import IPRoute
+import sys
+import re
+import threading
+import signal
+import traceback
+import os
+import commands
+
+# configure the serial connections (the parameters differs on the device you are connecting to)
+#First we find an open port to work with
+serial_port=''
+ser=serial.Serial()
+openair_dir = os.environ.get('OPENAIR_DIR')
+if openair_dir == None:
+ print "Error getting OPENAIR_DIR environment variable"
+ sys.exit(1)
+
+sys.path.append(os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/'))
+
+from lib_autotest import *
+
+def find_open_port():
+ global serial_port, ser
+ max_ports=100
+ if os.path.exists(serial_port) == True:
+ return serial_port
+ for port in range(0,100):
+ serial_port = '/dev/ttyUSB'+str(port)
+ if os.path.exists(serial_port) == True:
+ print 'New Serial Port : ' + serial_port
+ break
+
+ ser = serial.Serial(port=serial_port)
+ return
+
+
+
+#serial_port = '/dev/ttyUSB2'
+bandrich_ppd_config = os.environ.get('OPENAIR_DIR') + '/cmake_targets/autotests/tools/wdial.bandrich.conf'
+
+exit_flag=0
+
+def signal_handler(signal, frame):
+ print('You pressed Ctrl+C!')
+ print('Resetting the UE to detached state')
+ timeout=10
+ exit_flag=1
+ send_command('AT+CGATT=0' , 'OK' , timeout)
+ sys.exit(0)
+
+signal.signal(signal.SIGINT, signal_handler)
+
+
+
+#ser.open()
+#ser.isOpen()
+
+class pppThread (threading.Thread):
+ def __init__(self, threadID, name, counter):
+ threading.Thread.__init__(self)
+ self.threadID = threadID
+ self.name = name
+ self.counter = counter
+ def run(self):
+ print "Starting " + self.name
+ #Here we keep running pppd thread in indefinite loop as this script terminates sometimes
+ #while 1:
+ while 1:
+ time.sleep(5) #Hard coded, do not reduce this number!
+ print "Starting wvdial now..."
+ print 'exit_flag = ' + str(exit_flag)
+ send_command('AT+CGATT=1','OK', 300)
+ os.system('wvdial -C ' + bandrich_ppd_config + '' )
+ if exit_flag == 1:
+ print "Exit flag set to true. Exiting pppThread now"
+ print "Terminating wvdial now..."
+
+def send_command (cmd, response, timeout):
+ count=0
+ sleep_duration = 1
+ print 'In function: send_command: cmd = <' + cmd + '> response: <' + response + '> \n'
+ global serial_port, ser
+ while count <= timeout:
+ try:
+ #Sometimes the port does not exist coz of reset in modem.
+ #In that case, we need to search for this port again
+ if os.path.exists(serial_port) == False:
+ find_open_port()
+ ser.write (cmd + '\r\n')
+ out = ''
+ time.sleep(sleep_duration)
+ count = count + sleep_duration
+ while ser.inWaiting() > 0:
+ out += ser.read(1)
+ print 'out = <' + out + '> response = <' + response + '> \n'
+ if re.search(response, out):
+ break
+ except Exception, e:
+ error = ' cmd : ' + cmd + ' response : ' + response
+ error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
+ error = error + traceback.format_exc()
+ print error
+
+
+def start_ue () :
+ #print 'Enter your commands below.\r\nInsert "exit" to leave the application.'
+ timeout=60 #timeout in seconds
+ send_command('AT', 'OK' , timeout)
+ #send_command('AT+CFUN=1' , 'OK' , timeout)
+ #send_command('AT+CGATT=0' , 'OK' , timeout)
+ send_command('AT+CGATT=1','OK', 300)
+ #os.system('wvdial -C ' + bandrich_ppd_config + ' &' )
+
+ thread_ppp = pppThread(1, "ppp_thread", 1)
+ thread_ppp.start()
+
+ iface='ppp0'
+
+ while 1:
+ time.sleep ( 2)
+ #Now we check if ppp0 interface is up and running
+ try:
+ if exit_flag == 1:
+ break
+ ip = IPRoute()
+ idx = ip.link_lookup(ifname=iface)[0]
+ os.system ('route add ' + gw + ' ppp0')
+ os.system('sleep 5')
+ os.system ('ping ' + gw)
+ break
+ except Exception, e:
+ error = ' Interface ' + iface + 'does not exist...'
+ error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
+ error = error + traceback.format_exc()
+ print error
+
+ thread_ppp.join()
+
+def stop_ue():
+ timeout=60
+ os.system('killall wvdial')
+ send_command('AT', 'OK' , timeout)
+ send_command('AT+CGATT=0' , 'OK|ERROR' , timeout)
+ #send_command('AT+CFUN=4' , 'OK' , timeout)
+
+
+#reset the USB BUS of Bandrich UE
+def reset_ue():
+ stringIdBandrich='Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard'
+ status, out = commands.getstatusoutput('lsusb | grep -i \'' + stringIdBandrich + '\'')
+ if (out == '') :
+ print "Bandrich 4G LTE Adapter not found. Exiting now..."
+ sys.exit()
+ p=re.compile('Bus\s*(\w+)\s*Device\s*(\w+):\s*ID\s*(\w+):(\w+)')
+ res=p.findall(out)
+ BusId=res[0][0]
+ DeviceId=res[0][1]
+ VendorId=res[0][2]
+ ProductId=res[0][3]
+ usb_dir= find_usb_path(VendorId, ProductId)
+ print "Bandrich 4G LTE Adapter found in..." + usb_dir
+ cmd = "sudo sh -c \"echo 0 > " + usb_dir + "/authorized\""
+ os.system(cmd + " ; sleep 15" )
+ cmd = "sudo sh -c \"echo 1 > " + usb_dir + "/authorized\""
+ os.system(cmd + " ; sleep 30" )
+
+i=1
+gw='192.172.0.1'
+while i < len(sys.argv):
+ arg=sys.argv[i]
+ if arg == '--start-ue' :
+ find_open_port()
+ print 'Using Serial port : ' + serial_port
+ start_ue()
+ elif arg == '--stop-ue' :
+ find_open_port()
+ print 'Using Serial port : ' + serial_port
+ stop_ue()
+ elif arg == '--reset-ue' :
+ reset_ue()
+ elif arg == '-gw' :
+ gw = sys.argv[i+1]
+ i=i+1
+ elif arg == '-h' :
+ print "--reset-ue: Reset the UE on USB Bus. Similar to unplugging and plugging the UE"
+ print "--stop-ue: Stop the UE. Send DETACH command"
+ print "--start-ue: Start the UE. Send ATTACH command"
+ print "-gw: Specify the default gw as sometimes the gateway/route arguments are not set properly via wvdial"
+ else :
+ print " Script called with wrong arguments, arg = " + arg
+ sys.exit()
+ i = i +1
+
+
diff --git a/cmake_targets/autotests/tools/search_repl.py b/cmake_targets/autotests/tools/search_repl.py
index bb807502f2..be0568599f 100755
--- a/cmake_targets/autotests/tools/search_repl.py
+++ b/cmake_targets/autotests/tools/search_repl.py
@@ -26,6 +26,9 @@ if keyword == 'mme_ip_address':
elif keyword == 'IPV4_LIST':
replacement_text = keyword + ' = ( ' + replacement_text + ' ) ; '
string = re.sub(r"IPV4_LIST\s*=\s*\(([^\$]+?)\)\s*;", replacement_text, string, re.M)
+elif keyword == 'rrh_gw_config':
+ replacement_text = keyword + ' = ( { ' + replacement_text + ' } ) ; '
+ string = re.sub(r"rrh_gw_config\s*=\s*\(([^\$]+?)\)\s*;", replacement_text, string, re.M)
else :
replacement_text = keyword + ' = ' + replacement_text + ' ; '
string = re.sub(r"%s\s*=\s*([^\$]+?)\s*;" % keyword , replacement_text, string, re.M)
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 6300e9ec03..821b3bca27 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -42,13 +42,13 @@ THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
source $THIS_SCRIPT_PATH/tools/build_helper
MSC_GEN="False"
-XFORMS="False"
+XFORMS="True"
PRINT_STATS="False"
VCD_TIMING="False"
LOWLATENCY_FLAG_USER="False"
FORCE_LOWLATENCY_FLAG_USER=""
REL="Rel10"
-HW="EXMIMO"
+HW="None"
TP="None"
NOS1=0
EPC=0
@@ -91,7 +91,7 @@ Options
default is Rel10,
Rel8 limits the implementation to 3GPP Release 8 version
-w | --hardware
- EXMIMO (Default), USRP, BLADERF, LMSSDR, None
+ EXMIMO, USRP, BLADERF, ETHERNET, LMSSDR, None (Default)
Adds this RF board support (in external packages installation and in compilation)
-t | --transport protocol
ETHERNET , None
@@ -760,9 +760,9 @@ fi
rm -fr $OPENAIR_DIR/cmake_targets/autotests/log
mkdir -p $OPENAIR_DIR/cmake_targets/autotests/log
if [ "$RUN_GROUP" -eq "1" ]; then
- $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -g "$TEST_CASE_GROUP" -p '$mypassword' >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
+ $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -g "$TEST_CASE_GROUP" -p $mypassword >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
else
- $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -p '$mypassword' >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
+ $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -p $mypassword >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
fi
wait
else
diff --git a/cmake_targets/epc_test/CMakeLists.template b/cmake_targets/epc_test/CMakeLists.template
index 25d94ea852..8a8223e4ae 100644
--- a/cmake_targets/epc_test/CMakeLists.template
+++ b/cmake_targets/epc_test/CMakeLists.template
@@ -1,11 +1,13 @@
cmake_minimum_required(VERSION 2.8)
set ( CMAKE_BUILD_TYPE "RelWithDebInfo" )
+set ( ASN_DEBUG False)
set ( ADDR_CONF False )
set ( DEBUG_OMG False )
set ( DISABLE_XER_PRINT False )
set ( DRIVER2013 True )
set ( EMOS False )
+set ( EMIT_ASN_DEBUG False )
set ( ENABLE_FXP True )
set ( ENABLE_ITTI True )
set ( ENABLE_NAS_UE_LOGGING True )
@@ -47,9 +49,9 @@ set ( OAI_EMU False )
set ( OAISIM False )
set ( OAI_NW_DRIVER_TYPE_ETHERNET False )
set ( OAI_NW_DRIVER_USE_NETLINK True )
-set ( OPENAIR1 False )
-set ( OPENAIR2 False )
-set ( OPENAIR_LTE F )
+set ( OPENAIR1 True )
+set ( OPENAIR2 True )
+set ( OPENAIR_LTE True )
set ( PACKAGE_NAME "epc_test" )
set ( PBS_SIM False )
set ( PDCP_USE_NETLINK True )
@@ -74,4 +76,4 @@ set ( SMBV False )
set ( TEST_OMG False )
set ( USE_MME "R10" )
set ( USER_MODE True )
-set ( XER_PRINT False )
+set ( XER_PRINT True )
diff --git a/cmake_targets/lte-simulators/CMakeLists.txt b/cmake_targets/lte-simulators/CMakeLists.txt
index 7a0e84b425..0b706c8748 100644
--- a/cmake_targets/lte-simulators/CMakeLists.txt
+++ b/cmake_targets/lte-simulators/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.8)
set(PACKAGE_NAME "unitary_tests_simulators")
set(PHYSIM True)
set(RF_BOARD None)
-set(XFORMS False)
+set(XFORMS True)
set(DEBUG_PHY False)
set(MU_RECIEVER False)
diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper
index c8adf45257..689c15dc5b 100755
--- a/cmake_targets/tools/build_helper
+++ b/cmake_targets/tools/build_helper
@@ -30,7 +30,7 @@
################################################################################
# file build_helper
# brief
-# author Laurent Thomas
+# authors Laurent Thomas, Lionel GAUTHIER
#
#######################################
SUDO='sudo -E'
@@ -269,7 +269,9 @@ check_install_oai_software() {
pydb \
wvdial \
python-numpy \
- sshpass
+ sshpass \
+ libxslt1-dev
+
$SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so
if [ `lsb_release -rs` = '12.04' ] ; then
install_nettle_from_source
@@ -288,13 +290,15 @@ install_asn1c_from_source(){
asn1_install_dir=$OPENAIR_DIR/cmake_targets/log/asn1c_install_log.txt
echo_info "\nInstalling ASN1. The log file for ASN1 installation is here: $asn1_install_dir "
(
- rm -rf /tmp/asn1c-r1516
+ $SUDO rm -rf /tmp/asn1c-r1516
mkdir -p /tmp/asn1c-r1516
cd /tmp/asn1c-r1516
- svn co https://github.com/vlm/asn1c/trunk /tmp/asn1c-r1516 -r 1516
- patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch.p0
- patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_2.p0
- patch -p0 < $OPENAIR_DIR/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0
+ rm -rf /tmp/asn1c-r1516/*
+ svn co https://github.com/vlm/asn1c/trunk /tmp/asn1c-r1516 -r 1516 > /tmp/log_compile_asn1c
+ patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch.p0 >> /tmp/log_compile_asn1c
+ patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_2.p0 >> /tmp/log_compile_asn1c
+ patch -p0 < $OPENAIR_DIR/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 >> /tmp/log_compile_asn1c
+ patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_3.p0 >> /tmp/log_compile_asn1c
./configure
make -j`nproc`
$SUDO make install
@@ -324,7 +328,6 @@ install_nas_tools() {
}
-
################################
# set_openair_env
###############################
@@ -397,4 +400,4 @@ if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
fi
return $stat
-}
\ No newline at end of file
+}
diff --git a/cmake_targets/tools/build_test_epc_tools b/cmake_targets/tools/build_test_epc_tools
index aff2a26fc0..aa7103fd78 100755
--- a/cmake_targets/tools/build_test_epc_tools
+++ b/cmake_targets/tools/build_test_epc_tools
@@ -22,7 +22,7 @@
# Contact Information
# OpenAirInterface Admin: openair_admin@eurecom.fr
# OpenAirInterface Tech : openair_tech@eurecom.fr
-# OpenAirInterface Dev : openair4g-devel@eurecom.fr
+# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
#
# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
#
@@ -121,6 +121,7 @@ function main()
echo "Cleaning TEST_EPC"
fi
rm -f $OPENAIR_DIR/targets/bin/test_epc_generate_scenario
+ rm -f $OPENAIR_DIR/targets/bin/test_epc_play_scenario
rm -Rf build 2>&1
mkdir -m 777 -p -v build
fi
@@ -140,6 +141,13 @@ function main()
compilations \
epc_test test_epc_generate_scenario \
test_epc_generate_scenario $dbin/test_epc_generate_scenario
+
+ compilations \
+ epc_test test_epc_play_scenario \
+ test_epc_play_scenario $dbin/test_epc_play_scenario
+
+ $SUDO cp -upv test_epc_generate_scenario /usr/local/bin
+ $SUDO cp -upv test_epc_play_scenario /usr/local/bin
}
diff --git a/cmake_targets/tools/run_enb_s1_usrp b/cmake_targets/tools/run_enb_s1_usrp
index 01f4156071..5bb7ef151f 100755
--- a/cmake_targets/tools/run_enb_s1_usrp
+++ b/cmake_targets/tools/run_enb_s1_usrp
@@ -29,9 +29,9 @@
################################################################################
# file run_enb_s1_usrp
# brief run script for eNB USRP.
-# author Lionel GAUTHIER
+# author Lionel GAUTHIER and Navid Nikaein
# company Eurecom
-# email: lionel.gauthier@eurecom.fr
+# email: lionel.gauthier@eurecom.fr and navid.nikaein@eurecom.fr
################################
@@ -56,6 +56,8 @@ function help()
echo_error "Mandatory arguments to long options are mandatory for short options too."
echo_error " -g, --gdb Run with GDB."
echo_error " -h, --help Print this help."
+ echo_error " -e, --ulsch-max-errors num-errs maximum allowed number of uplink errors"
+ echo_error " -f, --rf-config-file filename RF specific configuration file"
echo_error " -K, --itti-dump-file filename ITTI dump file containing all ITTI events occuring during EPC runtime.(can omit file name if last argument)"
echo_error " -M, --target-dl-mcs mcs Downlink target MCS."
echo_error " -m, --mscgen directory Generate mscgen output files in a directory"
@@ -137,7 +139,27 @@ function main()
shift;
exit 0
;;
- -K | --itti-dump-file)
+ -e | --ulsch-max-errors)
+ ulsch_max_errors=$2
+ echo "setting --ulsch-max-errors to $ulsch_max_errors"
+ exe_arguments="$exe_arguments --ulsch-max-errors=$ulsch_max_errors"
+ shift 2;
+ ;;
+ -f | --rf-config-file)
+ rf_config_file=$2
+ # can omit file name if last arg on the line
+ if [ "x$rf_config_file" = "x" ]; then
+ rf_config_file=null
+ shift 1;
+ else
+ shift 2;
+ fi
+ if [ "$rf_config_file" != "null" ]; then
+ echo "setting --rf-config-file to $rf_config_file"
+ exe_arguments="$exe_arguments --rf-config-file=$rf_config_file"
+ fi
+ ;;
+ -K | --itti-dump-file)
itti_dump_file=$2
# can omit file name if last arg on the line
if [ "x$itti_dump_file" = "x" ]; then
diff --git a/cmake_targets/tools/stop_exmimo2 b/cmake_targets/tools/stop_exmimo2
index 63810e0bf8..a68fdb7d57 100755
--- a/cmake_targets/tools/stop_exmimo2
+++ b/cmake_targets/tools/stop_exmimo2
@@ -13,5 +13,5 @@ sudo -E $OPENAIR_DIR/cmake_targets/tools/init_exmimo2
#now we stop the card from transmitting anything
cd $OPENAIR_DIR/targets/bin
-sudo -E octave $OPENAIR_DIR/cmake_targets/tools/exmimo_stop_octave.m
+sudo -E octave -H --no-gui $OPENAIR_DIR/cmake_targets/tools/exmimo_stop_octave.m
diff --git a/openair1/PHY/CODING/3gpplte_sse.c b/openair1/PHY/CODING/3gpplte_sse.c
index 41c0f65dc3..ac4a1ae353 100755
--- a/openair1/PHY/CODING/3gpplte_sse.c
+++ b/openair1/PHY/CODING/3gpplte_sse.c
@@ -37,6 +37,7 @@
#include "extern_3GPPinterleaver.h"
#else
#include "vars.h"
+#include
#endif
#include
#include
@@ -48,6 +49,7 @@
#define print_shorts(s,x) printf("%s %x,%x,%x,%x,%x,%x,%x,%x\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7])
#define print_ints(s,x) printf("%s %x %x %x %x\n",s,(x)[0],(x)[1],(x)[2],(x)[3])
+#define print_bytes2(s,x) printf("%s %x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7],(x)[8],(x)[9],(x)[10],(x)[11],(x)[12],(x)[13],(x)[14],(x)[15],(x)[16],(x)[17],(x)[18],(x)[19],(x)[20],(x)[21],(x)[22],(x)[23],(x)[24],(x)[25],(x)[26],(x)[27],(x)[28],(x)[29],(x)[30],(x)[31])
//#define DEBUG_TURBO_ENCODER 1
#define CALLGRIND 1
@@ -57,16 +59,12 @@ unsigned long long threegpplte_interleaver_tmp;
#if defined(__x86_64__) || defined(__i386__)
struct treillis {
union {
- __m64 systematic_64[3];
- char systematic_8[24];
- };
- union {
- __m64 parity1_64[3];
- char parity1_8[24];
+ __m64 systematic_andp1_64[3];
+ uint8_t systematic_andp1_8[24];
};
union {
__m64 parity2_64[3];
- char parity2_8[24];
+ uint8_t parity2_8[24];
};
int exit_state;
} __attribute__ ((aligned(64)));
@@ -75,12 +73,8 @@ struct treillis {
struct treillis {
union {
- uint8x8_t systematic_64[3];
- char systematic_8[24];
- }__attribute__((aligned(64)));
- union {
- uint8x8_t parity1_64[3];
- char parity1_8[24];
+ uint8x8_t systematic_andp1_64[3];
+ char systematic_andp1_8[24];
}__attribute__((aligned(64)));
union {
uint8x8_t parity2_64[3];
@@ -91,6 +85,7 @@ struct treillis {
#endif
struct treillis all_treillis[8][256];
+
int all_treillis_initialized=0;
static inline unsigned char threegpplte_rsc(unsigned char input,unsigned char *state)
@@ -116,18 +111,20 @@ void treillis_table_init(void)
unsigned char v, current_state;
// clear all_treillis
- for (i=0; i<8; i++)
+ for (i=0; i<8; i++) {
bzero( all_treillis[i], sizeof(all_treillis[0]) );
+ }
for (i=0; i<8; i++) { //all possible initial states
for (j=0; j<=255; j++) { // all possible values of a byte
current_state=i;
for (b=0; b<8 ; b++ ) { // pre-compute the image of the byte j in _m128i vector right place
- all_treillis[i][j].systematic_8[b*3]= (j&(1<<(7-b)))>>(7-b);
- v=threegpplte_rsc( all_treillis[i][j].systematic_8[b*3] ,
+ all_treillis[i][j].systematic_andp1_8[b*3]= (j&(1<<(7-b)))>>(7-b);
+ v=threegpplte_rsc( all_treillis[i][j].systematic_andp1_8[b*3] ,
¤t_state);
- all_treillis[i][j].parity1_8[b*3+1]=v; // for the yparity1
+ all_treillis[i][j].systematic_andp1_8[b*3+1]=v; // for the yparity1
+ // all_treillis[i][j].parity1_8[b*3+1]=v; // for the yparity1
all_treillis[i][j].parity2_8[b*3+2]=v; // for the yparity2
}
@@ -143,9 +140,10 @@ void treillis_table_init(void)
char interleave_compact_byte(short * base_interleaver,unsigned char * input, unsigned char * output, int n)
{
- char expandInput[768*8] __attribute__((aligned(16)));
+ char expandInput[768*8] __attribute__((aligned(32)));
int i,loop=n>>4;
#if defined(__x86_64__) || defined(__i386__)
+#ifndef __AVX2__
__m128i *i_128=(__m128i *)input, *o_128=(__m128i*)expandInput;
__m128i tmp1, tmp2, tmp3, tmp4;
__m128i BIT_MASK = _mm_set_epi8( 0b00000001,
@@ -164,6 +162,43 @@ char interleave_compact_byte(short * base_interleaver,unsigned char * input, uns
0b00100000,
0b01000000,
0b10000000);
+
+#else
+ __m256i *i_256=(__m256i *)input, *o_256=(__m256i*)expandInput;
+ __m256i tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
+ __m256i BIT_MASK = _mm256_set_epi8( 0b00000001,
+ 0b00000010,
+ 0b00000100,
+ 0b00001000,
+ 0b00010000,
+ 0b00100000,
+ 0b01000000,
+ 0b10000000,
+ 0b00000001,
+ 0b00000010,
+ 0b00000100,
+ 0b00001000,
+ 0b00010000,
+ 0b00100000,
+ 0b01000000,
+ 0b10000000,
+ 0b00000001,
+ 0b00000010,
+ 0b00000100,
+ 0b00001000,
+ 0b00010000,
+ 0b00100000,
+ 0b01000000,
+ 0b10000000,
+ 0b00000001,
+ 0b00000010,
+ 0b00000100,
+ 0b00001000,
+ 0b00010000,
+ 0b00100000,
+ 0b01000000,
+ 0b10000000);
+#endif
#elif defined(__arm__)
uint8x16_t *i_128=(uint8x16_t *)input, *o_128=(uint8x16_t *)expandInput;
uint8x16_t tmp1,tmp2;
@@ -187,46 +222,126 @@ char interleave_compact_byte(short * base_interleaver,unsigned char * input, uns
0b00000010,
0b00000001};
#endif
+
+
+#ifndef __AVX2__
if ((n&15) > 0)
loop++;
+#else
+ loop=n>>5;
+ if ((n&31) > 0)
+ loop++;
+#endif
+
for (i=0; i>(7-b); */
+ // int cur_byte=i<<3;
+ // for (b=0;b<8;b++)
+ // expandInput[cur_byte+b] = (input[i]&(1<<(7-b)))>>(7-b);
#if defined(__x86_64__) || defined(__i386__)
- tmp1=_mm_load_si128(i_128++);
- tmp2=_mm_unpacklo_epi8(tmp1,tmp1);
- tmp3=_mm_unpacklo_epi16(tmp2,tmp2);
- tmp4=_mm_unpacklo_epi32(tmp3,tmp3);
+#ifndef __AVX2__
+ tmp1=_mm_load_si128(i_128++); // tmp1 = B0,B1,...,B15
+ tmp2=_mm_unpacklo_epi8(tmp1,tmp1); // tmp2 = B0,B0,B1,B1,...,B7,B7
+ tmp3=_mm_unpacklo_epi16(tmp2,tmp2); // tmp3 = B0,B0,B0,B0,B1,B1,B1,B1,B2,B2,B2,B2,B3,B3,B3,B3
+ tmp4=_mm_unpacklo_epi32(tmp3,tmp3); // tmp4 - B0,B0,B0,B0,B0,B0,B0,B0,B1,B1,B1,B1,B1,B1,B1,B1
*o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);
- tmp4=_mm_unpackhi_epi32(tmp3,tmp3);
+ tmp4=_mm_unpackhi_epi32(tmp3,tmp3); // tmp4 - B2,B2,B2,B2,B2,B2,B2,B2,B3,B3,B3,B3,B3,B3,B3,B3
*o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);;
- tmp3=_mm_unpackhi_epi16(tmp2,tmp2);
- tmp4=_mm_unpacklo_epi32(tmp3,tmp3);
+ tmp3=_mm_unpackhi_epi16(tmp2,tmp2); // tmp3 = B4,B4,B4,B4,B5,B5,B5,B5,B6,B6,B6,B6,B7,B7,B7,B7
+ tmp4=_mm_unpacklo_epi32(tmp3,tmp3); // tmp4 - B4,B4,B4,B4,B4,B4,B4,B4,B5,B5,B5,B5,B5,B5,B5,B5
*o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);;
- tmp4=_mm_unpackhi_epi32(tmp3,tmp3);
+ tmp4=_mm_unpackhi_epi32(tmp3,tmp3); // tmp4 - B6,B6,B6,B6,B6,B6,B6,B6,B7,B7,B7,B7,B7,B7,B7,B7
*o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);;
- tmp2=_mm_unpackhi_epi8(tmp1,tmp1);
- tmp3=_mm_unpacklo_epi16(tmp2,tmp2);
- tmp4=_mm_unpacklo_epi32(tmp3,tmp3);
+ tmp2=_mm_unpackhi_epi8(tmp1,tmp1); // tmp2 = B8,B8,B9,B9,...,B15,B15
+ tmp3=_mm_unpacklo_epi16(tmp2,tmp2); // tmp3 = B8,B8,B8,B8,B9,B9,B9,B9,B10,B10,B10,B10,B11,B11,B11,B11
+ tmp4=_mm_unpacklo_epi32(tmp3,tmp3); // tmp4 = B8,B8,B8,B8,B8,B8,B8,B8,B9,B9,B9,B9,B9,B9,B9,B9
*o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);;
- tmp4=_mm_unpackhi_epi32(tmp3,tmp3);
+ tmp4=_mm_unpackhi_epi32(tmp3,tmp3); // tmp4 = B10,B10,B10,B10,B10,B10,B10,B10,B11,B11,B11,B11,B11,B11,B11,B11
*o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);;
- tmp3=_mm_unpackhi_epi16(tmp2,tmp2);
- tmp4=_mm_unpacklo_epi32(tmp3,tmp3);
+ tmp3=_mm_unpackhi_epi16(tmp2,tmp2); // tmp3 = B12,B12,B12,B12,B13,B13,B13,B13,B14,B14,B14,B14,B15,B15,B15,B15
+ tmp4=_mm_unpacklo_epi32(tmp3,tmp3); // tmp4 = B12,B12,B12,B12,B12,B12,B12,B12,B13,B13,B13,B13,B13,B13,B13,B13
*o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);;
- tmp4=_mm_unpackhi_epi32(tmp3,tmp3);
+ tmp4=_mm_unpackhi_epi32(tmp3,tmp3); // tmp4 = B14,B14,B14,B14,B14,B14,B14,B14,B15,B15,B15,B15,B15,B15,B15,B15
*o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);;
+#else
+ tmp1=_mm256_load_si256(i_256++); // tmp1 = B0,B1,...,B15,...,B31
+ //print_bytes2("in",(uint8_t*)&tmp1);
+ tmp2=_mm256_unpacklo_epi8(tmp1,tmp1); // tmp2 = B0,B0,B1,B1,...,B7,B7,B16,B16,B17,B17,...,B23,B23
+ tmp3=_mm256_unpacklo_epi16(tmp2,tmp2); // tmp3 = B0,B0,B0,B0,B1,B1,B1,B1,B2,B2,B2,B2,B3,B3,B3,B3,B16,B16,B16,B16,...,B19,B19,B19,B19
+ tmp4=_mm256_unpacklo_epi32(tmp3,tmp3); // tmp4 - B0,B0,B0,B0,B0,B0,B0,B0,B1,B1,B1,B1,B1,B1,B1,B1,B16,B16...,B17..,B17
+ tmp5=_mm256_unpackhi_epi32(tmp3,tmp3); // tmp5 - B2,B2,B2,B2,B2,B2,B2,B2,B3,B3,B3,B3,B3,B3,B3,B3,B18...,B18,B19,...,B19
+ tmp6=_mm256_insertf128_si256(tmp4,_mm256_extracti128_si256(tmp5,0),1); // tmp6 = B0 B1 B2 B3
+ tmp7=_mm256_insertf128_si256(tmp5,_mm256_extracti128_si256(tmp4,1),0); // tmp7 = B16 B17 B18 B19
+ //print_bytes2("tmp2",(uint8_t*)&tmp2);
+ //print_bytes2("tmp3",(uint8_t*)&tmp3);
+ //print_bytes2("tmp4",(uint8_t*)&tmp4);
+ //print_bytes2("tmp5",(uint8_t*)&tmp4);
+ //print_bytes2("tmp6",(uint8_t*)&tmp6);
+ //print_bytes2("tmp7",(uint8_t*)&tmp7);
+ o_256[0]=_mm256_cmpeq_epi8(_mm256_and_si256(tmp6,BIT_MASK),BIT_MASK);
+ //print_bytes2("out",(uint8_t*)o_256);
+ o_256[4]=_mm256_cmpeq_epi8(_mm256_and_si256(tmp7,BIT_MASK),BIT_MASK);;
+ //print_bytes2("out",(uint8_t*)(o_256+4));
+ tmp3=_mm256_unpackhi_epi16(tmp2,tmp2); // tmp3 = B4,B4,B4,B4,B5,B5,B5,B5,B6,B6,B6,B6,B7,B7,B7,B7,B20,B20,B20,B20,...,B23,B23,B23,B23
+ tmp4=_mm256_unpacklo_epi32(tmp3,tmp3); // tmp4 - B4,B4,B4,B4,B4,B4,B4,B4,B5,B5,B5,B5,B5,B5,B5,B5,B20,B20...,B21..,B21
+ tmp5=_mm256_unpackhi_epi32(tmp3,tmp3); // tmp5 - B6,B6,B6,B6,B6,B6,B6,B6,B7,B7,B7,B7,B7,B7,B7,B7,B22...,B22,B23,...,B23
+ tmp6=_mm256_insertf128_si256(tmp4,_mm256_extracti128_si256(tmp5,0),1); // tmp6 = B4 B5 B6 B7
+ tmp7=_mm256_insertf128_si256(tmp5,_mm256_extracti128_si256(tmp4,1),0); // tmp7 = B20 B21 B22 B23
+ //print_bytes2("tmp2",(uint8_t*)&tmp2);
+ //print_bytes2("tmp3",(uint8_t*)&tmp3);
+ //print_bytes2("tmp4",(uint8_t*)&tmp4);
+ //print_bytes2("tmp5",(uint8_t*)&tmp4);
+ //print_bytes2("tmp6",(uint8_t*)&tmp6);
+ //print_bytes2("tmp7",(uint8_t*)&tmp7);
+ o_256[1]=_mm256_cmpeq_epi8(_mm256_and_si256(tmp6,BIT_MASK),BIT_MASK);
+ //print_bytes2("out",(uint8_t*)(o_256+1));
+ o_256[5]=_mm256_cmpeq_epi8(_mm256_and_si256(tmp7,BIT_MASK),BIT_MASK);;
+ //print_bytes2("out",(uint8_t*)(o_256+4));
+
+ tmp2=_mm256_unpackhi_epi8(tmp1,tmp1); // tmp2 = B8 B9 B10 B11 B12 B13 B14 B15 B25 B26 B27 B28 B29 B30 B31
+ tmp3=_mm256_unpacklo_epi16(tmp2,tmp2); // tmp3 = B8,B9,B10,B11,B26,B27,B28,B29
+ tmp4=_mm256_unpacklo_epi32(tmp3,tmp3); // tmp4 - B8,B9,B26,B27
+ tmp5=_mm256_unpackhi_epi32(tmp3,tmp3); // tmp5 - B10,B11,B28,B29
+ tmp6=_mm256_insertf128_si256(tmp4,_mm256_extracti128_si256(tmp5,0),1); // tmp6 = B8 B9 B10 B11
+ tmp7=_mm256_insertf128_si256(tmp5,_mm256_extracti128_si256(tmp4,1),0); // tmp7 = B26 B27 B28 B29
+ //print_bytes2("tmp2",(uint8_t*)&tmp2);
+ //print_bytes2("tmp3",(uint8_t*)&tmp3);
+ //print_bytes2("tmp4",(uint8_t*)&tmp4);
+ //print_bytes2("tmp5",(uint8_t*)&tmp4);
+ //print_bytes2("tmp6",(uint8_t*)&tmp6);
+ //print_bytes2("tmp7",(uint8_t*)&tmp7);
+ o_256[2]=_mm256_cmpeq_epi8(_mm256_and_si256(tmp6,BIT_MASK),BIT_MASK);
+ //print_bytes2("out",(uint8_t*)(o_256+2));
+ o_256[6]=_mm256_cmpeq_epi8(_mm256_and_si256(tmp7,BIT_MASK),BIT_MASK);;
+ //print_bytes2("out",(uint8_t*)(o_256+4));
+
+ tmp3=_mm256_unpackhi_epi16(tmp2,tmp2); // tmp3 = B12 B13 B14 B15 B28 B29 B30 B31
+ tmp4=_mm256_unpacklo_epi32(tmp3,tmp3); // tmp4 = B12 B13 B28 B29
+ tmp5=_mm256_unpackhi_epi32(tmp3,tmp3); // tmp5 = B14 B15 B30 B31
+ tmp6=_mm256_insertf128_si256(tmp4,_mm256_extracti128_si256(tmp5,0),1); // tmp6 = B12 B13 B14 B15
+ tmp7=_mm256_insertf128_si256(tmp5,_mm256_extracti128_si256(tmp4,1),0); // tmp7 = B28 B29 B30 B31
+ //print_bytes2("tmp2",(uint8_t*)&tmp2);
+ //print_bytes2("tmp3",(uint8_t*)&tmp3);
+ //print_bytes2("tmp4",(uint8_t*)&tmp4);
+ //print_bytes2("tmp5",(uint8_t*)&tmp4);
+ //print_bytes2("tmp6",(uint8_t*)&tmp6);
+ //print_bytes2("tmp7",(uint8_t*)&tmp7);
+ o_256[3]=_mm256_cmpeq_epi8(_mm256_and_si256(tmp6,BIT_MASK),BIT_MASK);
+ //print_bytes2("out",(uint8_t*)(o_256+3));
+ o_256[7]=_mm256_cmpeq_epi8(_mm256_and_si256(tmp7,BIT_MASK),BIT_MASK);;
+ //print_bytes2("out",(uint8_t*)(o_256+7));
+
+ o_256+=8;
+#endif
#elif defined(__arm__)
tmp1=vld1q_u8((uint8_t*)i_128);
//print_bytes("tmp1:",(uint8_t*)&tmp1);
@@ -302,11 +417,17 @@ char interleave_compact_byte(short * base_interleaver,unsigned char * input, uns
i_128++;
#endif
}
+
short * ptr_intl=base_interleaver;
#if defined(__x86_64) || defined(__i386__)
+#ifndef __AVX2__
__m128i tmp;
- uint16_t *systematic2_ptr=(unsigned short *) output;
+ uint16_t *systematic2_ptr=(uint16_t *) output;
+#else
+ __m256i tmp;
+ uint32_t *systematic2_ptr=(uint32_t *) output;
+#endif
#elif defined(__arm__)
uint8x16_t tmp;
const uint8_t __attribute__ ((aligned (16))) _Powers[16]=
@@ -316,11 +437,15 @@ char interleave_compact_byte(short * base_interleaver,unsigned char * input, uns
uint8x16_t Powers= vld1q_u8(_Powers);
uint8_t *systematic2_ptr=(uint8_t *) output;
#endif
+#ifndef __AVX2__
int input_length_words=n>>1;
-
+#else
+ int input_length_words=n>>2;
+#endif
for ( i=0; i< input_length_words ; i ++ ) {
#if defined(__x86_64__) || defined(__i386__)
+#ifndef __AVX2__
tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],7);
tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],6);
tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],5);
@@ -338,6 +463,45 @@ char interleave_compact_byte(short * base_interleaver,unsigned char * input, uns
tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+1);
tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+0);
*systematic2_ptr++=(unsigned short)_mm_movemask_epi8(tmp);
+#else
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],7);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],6);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],5);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],4);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],3);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],2);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],1);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],0);
+
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],8+7);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],8+6);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],8+5);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],8+4);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],8+3);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],8+2);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],8+1);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],8+0);
+
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],16+7);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],16+6);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],16+5);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],16+4);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],16+3);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],16+2);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],16+1);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],16+0);
+
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],24+7);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],24+6);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],24+5);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],24+4);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],24+3);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],24+2);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],24+1);
+ tmp=_mm256_insert_epi8(tmp,expandInput[*ptr_intl++],24+0);
+
+ *systematic2_ptr++=(unsigned int)_mm256_movemask_epi8(tmp);
+#endif
#elif defined(__arm__)
tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,7);
tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,6);
@@ -391,8 +555,9 @@ void threegpplte_turbo_encoder(unsigned char *input,
unsigned short input_length_bits = input_length_bytes<<3;
short * base_interleaver;
- if ( all_treillis_initialized == 0 )
+ if ( all_treillis_initialized == 0 ) {
treillis_table_init();
+ }
// look for f1 and f2 precomputed interleaver values
for (i=0; i < 188 && f1f2mat[i].nb_bits != input_length_bits; i++);
@@ -405,7 +570,7 @@ void threegpplte_turbo_encoder(unsigned char *input,
}
- unsigned char systematic2[768];
+ unsigned char systematic2[768] __attribute__((aligned(32)));
interleave_compact_byte(base_interleaver,input,systematic2,input_length_bytes);
#if defined(__x86_64__) || defined(__i386__)
@@ -419,22 +584,26 @@ void threegpplte_turbo_encoder(unsigned char *input,
for ( state0=state1=i=0 ; i.
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+/* file: 3gpplte_turbo_decoder_sse_16bit.c
+ purpose: Routines for implementing max-logmap decoding of Turbo-coded (DLSCH) transport channels from 36-212, V8.6 2009-03
+ authors: raymond.knopp@eurecom.fr, Laurent Thomas (Alcatel-Lucent)
+ date: 21.10.2009
+
+ Note: This version of the routine currently requires SSE2,SSSE3 and SSE4.1 equipped computers. It uses 16-bit inputs for
+ LLRS and uses 16-bit arithmetic for the internal computations!
+
+ Changelog: 17.11.2009 FK SSE4.1 not required anymore
+ Aug. 2012 new parallelization options for higher speed (8-way parallelization)
+ Jan. 2013 8-bit LLR support with 16-way parallelization
+ Feb. 2013 New interleaving and hard-decision optimizations (L. Thomas)
+ May 2013 Extracted 16bit code
+*/
+
+///
+///
+
+#ifdef __AVX2__
+
+#include "PHY/sse_intrin.h"
+
+#ifndef TEST_DEBUG
+#include "PHY/defs.h"
+#include "PHY/CODING/defs.h"
+#include "PHY/CODING/lte_interleaver_inline.h"
+#include "extern_3GPPinterleaver.h"
+#else
+
+#include "defs.h"
+#include
+#include
+#include
+#endif
+
+#ifdef MEX
+#include "mex.h"
+#endif
+
+
+//#define DEBUG_LOGMAP
+
+#ifdef DEBUG_LOGMAP
+#define print_shorts(s,x) fprintf(fdavx2,"%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7]);fprintf(fdavx2b,"%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[8],(x)[9],(x)[10],(x)[11],(x)[12],(x)[13],(x)[14],(x)[15])
+FILE *fdavx2,*fdavx2b;
+#else
+
+#endif
+
+
+#define print_bytes(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7],(x)[8],(x)[9],(x)[10],(x)[11],(x)[12],(x)[13],(x)[14],(x)[15],(x)[16],(x)[17],(x)[18],(x)[19],(x)[20],(x)[21],(x)[22],(x)[23],(x)[24],(x)[25],(x)[26],(x)[27],(x)[28],(x)[29],(x)[30],(x)[31])
+
+
+
+
+typedef int16_t llr_t; // internal decoder LLR data is 16-bit fixed
+typedef int16_t channel_t;
+#define MAX 256
+
+void log_map16avx2(llr_t* systematic,channel_t* y_parity, llr_t* m11, llr_t* m10, llr_t *alpha, llr_t *beta, llr_t* ext,uint16_t frame_length,unsigned char term_flag,unsigned char F,int offset8_flag,time_stats_t *alpha_stats,time_stats_t *beta_stats,time_stats_t *gamma_stats,time_stats_t *ext_stats);
+void compute_gamma16avx2(llr_t* m11,llr_t* m10,llr_t* systematic, channel_t* y_parity, uint16_t frame_length,unsigned char term_flag);
+void compute_alpha16avx2(llr_t*alpha,llr_t *beta, llr_t* m11,llr_t* m10, uint16_t frame_length,unsigned char F);
+void compute_beta16avx2(llr_t*alpha, llr_t* beta,llr_t* m11,llr_t* m10, uint16_t frame_length,unsigned char F,int offset8_flag);
+void compute_ext16avx2(llr_t* alpha,llr_t* beta,llr_t* m11,llr_t* m10,llr_t* extrinsic, llr_t* ap, uint16_t frame_length);
+
+
+void log_map16avx2(llr_t* systematic,
+ channel_t* y_parity,
+ llr_t* m11,
+ llr_t* m10,
+ llr_t *alpha,
+ llr_t *beta,
+ llr_t* ext,
+ uint16_t frame_length,
+ unsigned char term_flag,
+ unsigned char F,
+ int offset8_flag,
+ time_stats_t *alpha_stats,
+ time_stats_t *beta_stats,
+ time_stats_t *gamma_stats,
+ time_stats_t *ext_stats)
+{
+
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"log_map (avx2_16bit), frame_length %d\n",frame_length);
+ fprintf(fdavx2b,"log_map (avx2_16bit), frame_length %d\n",frame_length);
+#endif
+
+ start_meas(gamma_stats) ;
+ compute_gamma16avx2(m11,m10,systematic,y_parity,frame_length,term_flag) ;
+ stop_meas(gamma_stats);
+ start_meas(alpha_stats) ;
+ compute_alpha16avx2(alpha,beta,m11,m10,frame_length,F) ;
+ stop_meas(alpha_stats);
+ start_meas(beta_stats) ;
+ compute_beta16avx2(alpha,beta,m11,m10,frame_length,F,offset8_flag) ;
+ stop_meas(beta_stats);
+ start_meas(ext_stats) ;
+ compute_ext16avx2(alpha,beta,m11,m10,ext,systematic,frame_length) ;
+ stop_meas(ext_stats);
+
+
+}
+
+void compute_gamma16avx2(llr_t* m11,llr_t* m10,llr_t* systematic,channel_t* y_parity,
+ uint16_t frame_length,unsigned char term_flag)
+{
+ int k,K1;
+
+ __m256i *systematic128 = (__m256i *)systematic;
+ __m256i *y_parity128 = (__m256i *)y_parity;
+ __m256i *m10_128 = (__m256i *)m10;
+ __m256i *m11_128 = (__m256i *)m11;
+
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"compute_gamma (avx2_16bit), %p,%p,%p,%p,framelength %d\n",m11,m10,systematic,y_parity,frame_length);
+ fprintf(fdavx2b,"compute_gamma (avx2_16bit), %p,%p,%p,%p,framelength %d\n",m11,m10,systematic,y_parity,frame_length);
+#endif
+
+ K1=frame_length>>3;
+
+ for (k=0; k>3;
+ K1 = (frame_length>>3);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"Compute alpha (avx2_16bit)\n");
+ fprintf(fdavx2b,"Compute alpha (avx2_16bit)\n");
+#endif
+ timein = rdtsc_oai();
+
+ for (l=K1;; l=l2,rerun_flag=1) {
+ alpha128 = (__m256i *)alpha;
+
+ if (rerun_flag == 0) {
+
+ alpha128[0] = _mm256_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,0,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,0);
+ alpha128[1] = _mm256_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2);
+ alpha128[2] = _mm256_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2);
+ alpha128[3] = _mm256_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2);
+ alpha128[4] = _mm256_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2);
+ alpha128[5] = _mm256_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2);
+ alpha128[6] = _mm256_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2);
+ alpha128[7] = _mm256_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"Initial alpha\n");
+ fprintf(fdavx2b,"Initial alpha\n");
+ print_shorts("a0",(int16_t*)&alpha128[0]);
+ print_shorts("a1",(int16_t*)&alpha128[1]);
+ print_shorts("a2",(int16_t*)&alpha128[2]);
+ print_shorts("a3",(int16_t*)&alpha128[3]);
+ print_shorts("a4",(int16_t*)&alpha128[4]);
+ print_shorts("a5",(int16_t*)&alpha128[5]);
+ print_shorts("a6",(int16_t*)&alpha128[6]);
+ print_shorts("a7",(int16_t*)&alpha128[7]);
+#endif
+ } else {
+ //set initial alpha in columns 1-7 from final alpha from last run in columns 0-6
+ alpha128[0] = _mm256_slli_si256(alpha128[frame_length],2);
+ alpha128[1] = _mm256_slli_si256(alpha128[1+frame_length],2);
+ alpha128[2] = _mm256_slli_si256(alpha128[2+frame_length],2);
+ alpha128[3] = _mm256_slli_si256(alpha128[3+frame_length],2);
+ alpha128[4] = _mm256_slli_si256(alpha128[4+frame_length],2);
+ alpha128[5] = _mm256_slli_si256(alpha128[5+frame_length],2);
+ alpha128[6] = _mm256_slli_si256(alpha128[6+frame_length],2);
+ alpha128[7] = _mm256_slli_si256(alpha128[7+frame_length],2);
+ // set initial alpha in column 0 to (0,-MAX/2,...,-MAX/2)
+ alpha[16] = -MAX/2;
+ alpha[32] = -MAX/2;
+ alpha[48] = -MAX/2;
+ alpha[64] = -MAX/2;
+ alpha[80] = -MAX/2;
+ alpha[96] = -MAX/2;
+ alpha[112] = -MAX/2;
+
+ alpha[24] = -MAX/2;
+ alpha[40] = -MAX/2;
+ alpha[56] = -MAX/2;
+ alpha[72] = -MAX/2;
+ alpha[88] = -MAX/2;
+ alpha[104] = -MAX/2;
+ alpha[120] = -MAX/2;
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"Second run\n");
+ fprintf(fdavx2b,"Second run\n");
+ print_shorts("a0",(int16_t*)&alpha128[0]);
+ print_shorts("a1",(int16_t*)&alpha128[1]);
+ print_shorts("a2",(int16_t*)&alpha128[2]);
+ print_shorts("a3",(int16_t*)&alpha128[3]);
+ print_shorts("a4",(int16_t*)&alpha128[4]);
+ print_shorts("a5",(int16_t*)&alpha128[5]);
+ print_shorts("a6",(int16_t*)&alpha128[6]);
+ print_shorts("a7",(int16_t*)&alpha128[7]);
+#endif
+
+ }
+
+ alpha_ptr = &alpha128[0];
+ m11p = (__m256i*)m_11;
+ m10p = (__m256i*)m_10;
+
+ for (k=0;
+ kbeta1_16) ? beta0_16 : beta1_16;
+ beta_m = (beta_m>beta2_16) ? beta_m : beta2_16;
+ beta_m = (beta_m>beta3_16) ? beta_m : beta3_16;
+ beta_m = (beta_m>beta4_16) ? beta_m : beta4_16;
+ beta_m = (beta_m>beta5_16) ? beta_m : beta5_16;
+ beta_m = (beta_m>beta6_16) ? beta_m : beta6_16;
+ beta_m = (beta_m>beta7_16) ? beta_m : beta7_16;
+
+ beta_m_cw2 = (beta0_cw2_16>beta1_cw2_16) ? beta0_cw2_16 : beta1_cw2_16;
+ beta_m_cw2 = (beta_m_cw2>beta2_cw2_16) ? beta_m_cw2 : beta2_cw2_16;
+ beta_m_cw2 = (beta_m_cw2>beta3_cw2_16) ? beta_m_cw2 : beta3_cw2_16;
+ beta_m_cw2 = (beta_m_cw2>beta4_cw2_16) ? beta_m_cw2 : beta4_cw2_16;
+ beta_m_cw2 = (beta_m_cw2>beta5_cw2_16) ? beta_m_cw2 : beta5_cw2_16;
+ beta_m_cw2 = (beta_m_cw2>beta6_cw2_16) ? beta_m_cw2 : beta6_cw2_16;
+ beta_m_cw2 = (beta_m_cw2>beta7_cw2_16) ? beta_m_cw2 : beta7_cw2_16;
+
+
+ beta0_16=beta0_16-beta_m;
+ beta1_16=beta1_16-beta_m;
+ beta2_16=beta2_16-beta_m;
+ beta3_16=beta3_16-beta_m;
+ beta4_16=beta4_16-beta_m;
+ beta5_16=beta5_16-beta_m;
+ beta6_16=beta6_16-beta_m;
+ beta7_16=beta7_16-beta_m;
+
+ beta0_cw2_16=beta0_cw2_16-beta_m_cw2;
+ beta1_cw2_16=beta1_cw2_16-beta_m_cw2;
+ beta2_cw2_16=beta2_cw2_16-beta_m_cw2;
+ beta3_cw2_16=beta3_cw2_16-beta_m_cw2;
+ beta4_cw2_16=beta4_cw2_16-beta_m_cw2;
+ beta5_cw2_16=beta5_cw2_16-beta_m_cw2;
+ beta6_cw2_16=beta6_cw2_16-beta_m_cw2;
+ beta7_cw2_16=beta7_cw2_16-beta_m_cw2;
+
+ for (rerun_flag=0;; rerun_flag=1) {
+
+ beta_ptr = (__m256i*)&beta[frame_length<<4];
+ alpha128 = (__m256i*)&alpha[0];
+
+ if (rerun_flag == 0) {
+ beta_ptr[0] = alpha128[(frame_length)];
+ beta_ptr[1] = alpha128[1+(frame_length)];
+ beta_ptr[2] = alpha128[2+(frame_length)];
+ beta_ptr[3] = alpha128[3+(frame_length)];
+ beta_ptr[4] = alpha128[4+(frame_length)];
+ beta_ptr[5] = alpha128[5+(frame_length)];
+ beta_ptr[6] = alpha128[6+(frame_length)];
+ beta_ptr[7] = alpha128[7+(frame_length)];
+
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"beta init \n");
+ fprintf(fdavx2b,"beta init \n");
+ print_shorts("b0",(int16_t*)&beta_ptr[0]);
+ print_shorts("b1",(int16_t*)&beta_ptr[1]);
+ print_shorts("b2",(int16_t*)&beta_ptr[2]);
+ print_shorts("b3",(int16_t*)&beta_ptr[3]);
+ print_shorts("b4",(int16_t*)&beta_ptr[4]);
+ print_shorts("b5",(int16_t*)&beta_ptr[5]);
+ print_shorts("b6",(int16_t*)&beta_ptr[6]);
+ print_shorts("b7",(int16_t*)&beta_ptr[7]);
+#endif
+ } else {
+
+ beta128 = (__m256i*)&beta[0];
+ beta_ptr[0] = _mm256_srli_si256(beta128[0],2);
+ beta_ptr[1] = _mm256_srli_si256(beta128[1],2);
+ beta_ptr[2] = _mm256_srli_si256(beta128[2],2);
+ beta_ptr[3] = _mm256_srli_si256(beta128[3],2);
+ beta_ptr[4] = _mm256_srli_si256(beta128[4],2);
+ beta_ptr[5] = _mm256_srli_si256(beta128[5],2);
+ beta_ptr[6] = _mm256_srli_si256(beta128[6],2);
+ beta_ptr[7] = _mm256_srli_si256(beta128[7],2);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"beta init (second run)\n");
+ fprintf(fdavx2b,"beta init (second run)\n");
+ print_shorts("b0",(int16_t*)&beta_ptr[0]);
+ print_shorts("b1",(int16_t*)&beta_ptr[1]);
+ print_shorts("b2",(int16_t*)&beta_ptr[2]);
+ print_shorts("b3",(int16_t*)&beta_ptr[3]);
+ print_shorts("b4",(int16_t*)&beta_ptr[4]);
+ print_shorts("b5",(int16_t*)&beta_ptr[5]);
+ print_shorts("b6",(int16_t*)&beta_ptr[6]);
+ print_shorts("b7",(int16_t*)&beta_ptr[7]);
+#endif
+ }
+
+
+ beta_ptr[0] = _mm256_insert_epi16(beta_ptr[0],beta0_16,7);
+ beta_ptr[1] = _mm256_insert_epi16(beta_ptr[1],beta1_16,7);
+ beta_ptr[2] = _mm256_insert_epi16(beta_ptr[2],beta2_16,7);
+ beta_ptr[3] = _mm256_insert_epi16(beta_ptr[3],beta3_16,7);
+ beta_ptr[4] = _mm256_insert_epi16(beta_ptr[4],beta4_16,7);
+ beta_ptr[5] = _mm256_insert_epi16(beta_ptr[5],beta5_16,7);
+ beta_ptr[6] = _mm256_insert_epi16(beta_ptr[6],beta6_16,7);
+ beta_ptr[7] = _mm256_insert_epi16(beta_ptr[7],beta7_16,7);
+
+ beta_ptr[0] = _mm256_insert_epi16(beta_ptr[0],beta0_cw2_16,15);
+ beta_ptr[1] = _mm256_insert_epi16(beta_ptr[1],beta1_cw2_16,15);
+ beta_ptr[2] = _mm256_insert_epi16(beta_ptr[2],beta2_cw2_16,15);
+ beta_ptr[3] = _mm256_insert_epi16(beta_ptr[3],beta3_cw2_16,15);
+ beta_ptr[4] = _mm256_insert_epi16(beta_ptr[4],beta4_cw2_16,15);
+ beta_ptr[5] = _mm256_insert_epi16(beta_ptr[5],beta5_cw2_16,15);
+ beta_ptr[6] = _mm256_insert_epi16(beta_ptr[6],beta6_cw2_16,15);
+ beta_ptr[7] = _mm256_insert_epi16(beta_ptr[7],beta7_cw2_16,15);
+
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"beta init (after insert) \n");
+ fprintf(fdavx2b,"beta init (after insert) \n");
+ print_shorts("b0",(int16_t*)&beta_ptr[0]);
+ print_shorts("b1",(int16_t*)&beta_ptr[1]);
+ print_shorts("b2",(int16_t*)&beta_ptr[2]);
+ print_shorts("b3",(int16_t*)&beta_ptr[3]);
+ print_shorts("b4",(int16_t*)&beta_ptr[4]);
+ print_shorts("b5",(int16_t*)&beta_ptr[5]);
+ print_shorts("b6",(int16_t*)&beta_ptr[6]);
+ print_shorts("b7",(int16_t*)&beta_ptr[7]);
+#endif
+ int loopval=((rerun_flag==0)?0:((frame_length-L)>>3));
+
+ printf("beta: rerun %d => loopval %d\n",rerun_flag,loopval);
+
+ timein = rdtsc_oai();
+
+ m11p = (frame_length>>3)-1+(__m256i*)m_11;
+ m10p = (frame_length>>3)-1+(__m256i*)m_10;
+
+ for (k=(frame_length>>3)-1; k>=loopval; k--) {
+
+
+ b4 = _mm256_load_si256(&beta_ptr[4]);
+ b5 = _mm256_load_si256(&beta_ptr[5]);
+ b6 = _mm256_load_si256(&beta_ptr[6]);
+ b7 = _mm256_load_si256(&beta_ptr[7]);
+
+ m_b0 = _mm256_adds_epi16(b4,*m11p); //m11
+ m_b1 = _mm256_subs_epi16(b4,*m11p); //m00
+ m_b2 = _mm256_subs_epi16(b5,*m10p); //m01
+ m_b3 = _mm256_adds_epi16(b5,*m10p); //m10
+ m_b4 = _mm256_adds_epi16(b6,*m10p); //m10
+ m_b5 = _mm256_subs_epi16(b6,*m10p); //m01
+ m_b6 = _mm256_subs_epi16(b7,*m11p); //m00
+ m_b7 = _mm256_adds_epi16(b7,*m11p); //m11
+
+ b0 = _mm256_load_si256(&beta_ptr[0]);
+ b1 = _mm256_load_si256(&beta_ptr[1]);
+ b2 = _mm256_load_si256(&beta_ptr[2]);
+ b3 = _mm256_load_si256(&beta_ptr[3]);
+
+ new0 = _mm256_subs_epi16(b0,*m11p); //m00
+ new1 = _mm256_adds_epi16(b0,*m11p); //m11
+ new2 = _mm256_adds_epi16(b1,*m10p); //m10
+ new3 = _mm256_subs_epi16(b1,*m10p); //m01
+ new4 = _mm256_subs_epi16(b2,*m10p); //m01
+ new5 = _mm256_adds_epi16(b2,*m10p); //m10
+ new6 = _mm256_adds_epi16(b3,*m11p); //m11
+ new7 = _mm256_subs_epi16(b3,*m11p); //m00
+
+
+ b0 = _mm256_max_epi16(m_b0,new0);
+ b1 = _mm256_max_epi16(m_b1,new1);
+ b2 = _mm256_max_epi16(m_b2,new2);
+ b3 = _mm256_max_epi16(m_b3,new3);
+ b4 = _mm256_max_epi16(m_b4,new4);
+ b5 = _mm256_max_epi16(m_b5,new5);
+ b6 = _mm256_max_epi16(m_b6,new6);
+ b7 = _mm256_max_epi16(m_b7,new7);
+
+ beta_max = _mm256_max_epi16(b0,b1);
+ beta_max = _mm256_max_epi16(beta_max ,b2);
+ beta_max = _mm256_max_epi16(beta_max ,b3);
+ beta_max = _mm256_max_epi16(beta_max ,b4);
+ beta_max = _mm256_max_epi16(beta_max ,b5);
+ beta_max = _mm256_max_epi16(beta_max ,b6);
+ beta_max = _mm256_max_epi16(beta_max ,b7);
+
+ beta_ptr-=8;
+ m11p--;
+ m10p--;
+
+ beta_ptr[0] = _mm256_subs_epi16(b0,beta_max);
+ beta_ptr[1] = _mm256_subs_epi16(b1,beta_max);
+ beta_ptr[2] = _mm256_subs_epi16(b2,beta_max);
+ beta_ptr[3] = _mm256_subs_epi16(b3,beta_max);
+ beta_ptr[4] = _mm256_subs_epi16(b4,beta_max);
+ beta_ptr[5] = _mm256_subs_epi16(b5,beta_max);
+ beta_ptr[6] = _mm256_subs_epi16(b6,beta_max);
+ beta_ptr[7] = _mm256_subs_epi16(b7,beta_max);
+
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"Loop index %d, mb\n",k);
+ fprintf(fdavx2,"beta init (after max)\n");
+ fprintf(fdavx2b,"Loop index %d, mb\n",k);
+ fprintf(fdavx2b,"beta init (after max)\n");
+
+ print_shorts("b0",(int16_t*)&beta_ptr[0]);
+ print_shorts("b1",(int16_t*)&beta_ptr[1]);
+ print_shorts("b2",(int16_t*)&beta_ptr[2]);
+ print_shorts("b3",(int16_t*)&beta_ptr[3]);
+ print_shorts("b4",(int16_t*)&beta_ptr[4]);
+ print_shorts("b5",(int16_t*)&beta_ptr[5]);
+ print_shorts("b6",(int16_t*)&beta_ptr[6]);
+ print_shorts("b7",(int16_t*)&beta_ptr[7]);
+
+#endif
+ }
+ timeout = rdtsc_oai();
+ printf("beta: inner loop time %llu\n",timeout-timein);
+
+ if (rerun_flag==1)
+ break;
+ }
+}
+
+void compute_ext16avx2(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext, llr_t* systematic,uint16_t frame_length)
+{
+
+ __m256i *alpha128=(__m256i *)alpha;
+ __m256i *beta128=(__m256i *)beta;
+ __m256i *m11_128,*m10_128,*ext_128;
+ __m256i *alpha_ptr,*beta_ptr;
+ __m256i m00_1,m00_2,m00_3,m00_4;
+ __m256i m01_1,m01_2,m01_3,m01_4;
+ __m256i m10_1,m10_2,m10_3,m10_4;
+ __m256i m11_1,m11_2,m11_3,m11_4;
+
+ int k;
+
+ //
+ // LLR computation, 8 consequtive bits per loop
+ //
+
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"compute_ext (avx2_16bit), %p, %p, %p, %p, %p, %p ,framelength %d\n",alpha,beta,m_11,m_10,ext,systematic,frame_length);
+ fprintf(fdavx2b,"compute_ext (avx2_16bit), %p, %p, %p, %p, %p, %p ,framelength %d\n",alpha,beta,m_11,m_10,ext,systematic,frame_length);
+#endif
+
+ alpha_ptr = alpha128;
+ beta_ptr = &beta128[8];
+
+
+ for (k=0; k<(frame_length>>3); k++) {
+
+
+ m11_128 = (__m256i*)&m_11[k<<4];
+ m10_128 = (__m256i*)&m_10[k<<4];
+ ext_128 = (__m256i*)&ext[k<<4];
+
+ /*
+ fprintf(fdavx2,"EXT %03d\n",k);
+ print_shorts("a0:",&alpha_ptr[0]);
+ print_shorts("a1:",&alpha_ptr[1]);
+ print_shorts("a2:",&alpha_ptr[2]);
+ print_shorts("a3:",&alpha_ptr[3]);
+ print_shorts("a4:",&alpha_ptr[4]);
+ print_shorts("a5:",&alpha_ptr[5]);
+ print_shorts("a6:",&alpha_ptr[6]);
+ print_shorts("a7:",&alpha_ptr[7]);
+ print_shorts("b0:",&beta_ptr[0]);
+ print_shorts("b1:",&beta_ptr[1]);
+ print_shorts("b2:",&beta_ptr[2]);
+ print_shorts("b3:",&beta_ptr[3]);
+ print_shorts("b4:",&beta_ptr[4]);
+ print_shorts("b5:",&beta_ptr[5]);
+ print_shorts("b6:",&beta_ptr[6]);
+ print_shorts("b7:",&beta_ptr[7]);
+ */
+ m00_4 = _mm256_adds_epi16(alpha_ptr[7],beta_ptr[3]); //ALPHA_BETA_4m00;
+ m11_4 = _mm256_adds_epi16(alpha_ptr[7],beta_ptr[7]); //ALPHA_BETA_4m11;
+ m00_3 = _mm256_adds_epi16(alpha_ptr[6],beta_ptr[7]); //ALPHA_BETA_3m00;
+ m11_3 = _mm256_adds_epi16(alpha_ptr[6],beta_ptr[3]); //ALPHA_BETA_3m11;
+ m00_2 = _mm256_adds_epi16(alpha_ptr[1],beta_ptr[4]); //ALPHA_BETA_2m00;
+ m11_2 = _mm256_adds_epi16(alpha_ptr[1],beta_ptr[0]); //ALPHA_BETA_2m11;
+ m11_1 = _mm256_adds_epi16(alpha_ptr[0],beta_ptr[4]); //ALPHA_BETA_1m11;
+ m00_1 = _mm256_adds_epi16(alpha_ptr[0],beta_ptr[0]); //ALPHA_BETA_1m00;
+ m01_4 = _mm256_adds_epi16(alpha_ptr[5],beta_ptr[6]); //ALPHA_BETA_4m01;
+ m10_4 = _mm256_adds_epi16(alpha_ptr[5],beta_ptr[2]); //ALPHA_BETA_4m10;
+ m01_3 = _mm256_adds_epi16(alpha_ptr[4],beta_ptr[2]); //ALPHA_BETA_3m01;
+ m10_3 = _mm256_adds_epi16(alpha_ptr[4],beta_ptr[6]); //ALPHA_BETA_3m10;
+ m01_2 = _mm256_adds_epi16(alpha_ptr[3],beta_ptr[1]); //ALPHA_BETA_2m01;
+ m10_2 = _mm256_adds_epi16(alpha_ptr[3],beta_ptr[5]); //ALPHA_BETA_2m10;
+ m10_1 = _mm256_adds_epi16(alpha_ptr[2],beta_ptr[1]); //ALPHA_BETA_1m10;
+ m01_1 = _mm256_adds_epi16(alpha_ptr[2],beta_ptr[5]); //ALPHA_BETA_1m01;
+ /*
+ print_shorts("m11_1:",&m11_1);
+ print_shorts("m11_2:",&m11_2);
+ print_shorts("m11_3:",&m11_3);
+ print_shorts("m11_4:",&m11_4);
+ print_shorts("m00_1:",&m00_1);
+ print_shorts("m00_2:",&m00_2);
+ print_shorts("m00_3:",&m00_3);
+ print_shorts("m00_4:",&m00_4);
+ print_shorts("m10_1:",&m10_1);
+ print_shorts("m10_2:",&m10_2);
+ print_shorts("m10_3:",&m10_3);
+ print_shorts("m10_4:",&m10_4);
+ print_shorts("m01_1:",&m01_1);
+ print_shorts("m01_2:",&m01_2);
+ print_shorts("m01_3:",&m01_3);
+ print_shorts("m01_4:",&m01_4);
+ */
+ m01_1 = _mm256_max_epi16(m01_1,m01_2);
+ m01_1 = _mm256_max_epi16(m01_1,m01_3);
+ m01_1 = _mm256_max_epi16(m01_1,m01_4);
+ m00_1 = _mm256_max_epi16(m00_1,m00_2);
+ m00_1 = _mm256_max_epi16(m00_1,m00_3);
+ m00_1 = _mm256_max_epi16(m00_1,m00_4);
+ m10_1 = _mm256_max_epi16(m10_1,m10_2);
+ m10_1 = _mm256_max_epi16(m10_1,m10_3);
+ m10_1 = _mm256_max_epi16(m10_1,m10_4);
+ m11_1 = _mm256_max_epi16(m11_1,m11_2);
+ m11_1 = _mm256_max_epi16(m11_1,m11_3);
+ m11_1 = _mm256_max_epi16(m11_1,m11_4);
+
+ // print_shorts("m11_1:",&m11_1);
+
+ m01_1 = _mm256_subs_epi16(m01_1,*m10_128);
+ m00_1 = _mm256_subs_epi16(m00_1,*m11_128);
+ m10_1 = _mm256_adds_epi16(m10_1,*m10_128);
+ m11_1 = _mm256_adds_epi16(m11_1,*m11_128);
+
+ // print_shorts("m10_1:",&m10_1);
+ // print_shorts("m11_1:",&m11_1);
+ m01_1 = _mm256_max_epi16(m01_1,m00_1);
+ m10_1 = _mm256_max_epi16(m10_1,m11_1);
+ // print_shorts("m01_1:",&m01_1);
+ // print_shorts("m10_1:",&m10_1);
+
+ *ext_128 = _mm256_subs_epi16(m10_1,m01_1);
+
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"ext %p\n",ext_128);
+ fprintf(fdavx2b,"ext %p\n",ext_128);
+ print_shorts("ext:",(int16_t*)ext_128);
+ print_shorts("m11:",(int16_t*)m11_128);
+ print_shorts("m10:",(int16_t*)m10_128);
+ print_shorts("m10_1:",(int16_t*)&m10_1);
+ print_shorts("m01_1:",(int16_t*)&m01_1);
+
+
+#endif
+
+ alpha_ptr+=8;
+ beta_ptr+=8;
+ }
+}
+
+
+
+//int pi2[n],pi3[n+8],pi5[n+8],pi4[n+8],pi6[n+8],
+int *pi2tab16avx2[188],*pi5tab16avx2[188],*pi4tab16avx2[188],*pi6tab16avx2[188];
+
+void free_td16avx2(void)
+{
+ int ind;
+
+ for (ind=0; ind<188; ind++) {
+ free(pi2tab16avx2[ind]);
+ free(pi5tab16avx2[ind]);
+ free(pi4tab16avx2[ind]);
+ free(pi6tab16avx2[ind]);
+ }
+}
+
+void init_td16avx2()
+{
+
+ int ind,i,i2,i3,j,n,pi,pi2_i,pi2_pi;
+ short * base_interleaver;
+
+ for (ind=0; ind<188; ind++) {
+ n = f1f2mat[ind].nb_bits;
+ base_interleaver=il_tb+f1f2mat[ind].beg_index;
+#ifdef MEX
+ // This is needed for the Mex implementation to make the memory persistent
+ pi2tab16[ind] = mxMalloc((n+8)*sizeof(int));
+ pi5tab16[ind] = mxMalloc((n+8)*sizeof(int));
+ pi4tab16[ind] = mxMalloc((n+8)*sizeof(int));
+ pi6tab16[ind] = mxMalloc((n+8)*sizeof(int));
+#else
+ pi2tab16avx2[ind] = malloc((n+8)*sizeof(int));
+ pi5tab16avx2[ind] = malloc((n+8)*sizeof(int));
+ pi4tab16avx2[ind] = malloc((n+8)*sizeof(int));
+ pi6tab16avx2[ind] = malloc((n+8)*sizeof(int));
+#endif
+
+ // fprintf(fdavx2,"Interleaver index %d\n",ind);
+ for (i=i2=0; i2<8; i2++) {
+ j=i2;
+
+ for (i3=0; i3<(n>>3); i3++,i++,j+=8) {
+
+ // if (j>=n)
+ // j-=(n-1);
+
+ pi2tab16avx2[ind][i] = ((j>>3)<<4) + (j&7); // 16*floor(j/8) + j mod8, which allows the second codeword to be in pi[i] + 8
+ // fprintf(fdavx2,"pi2[%d] = %d(%d)\n",i, pi2tab16avx2[ind][i],j);
+ }
+ }
+
+ for (i=0; i>4)<<3)+(pi2tab16avx2[ind][i]&7);
+ pi2_pi = ((pi2tab16avx2[ind][pi]>>4)<<3)+(pi2tab16avx2[ind][pi]&7);
+ pi4tab16avx2[ind][pi2_i] = pi2tab16avx2[ind][pi];
+ pi5tab16avx2[ind][pi2_pi] = pi2tab16avx2[ind][i];
+ pi6tab16avx2[ind][pi] = pi2tab16avx2[ind][i];
+ }
+
+ }
+}
+
+unsigned char phy_threegpplte_turbo_decoder16avx2(int16_t *y,
+ int16_t *y2,
+ uint8_t *decoded_bytes,
+ uint8_t *decoded_bytes2,
+ uint16_t n,
+ uint16_t f1,
+ uint16_t f2,
+ uint8_t max_iterations,
+ uint8_t crc_type,
+ uint8_t F,
+ time_stats_t *init_stats,
+ time_stats_t *alpha_stats,
+ time_stats_t *beta_stats,
+ time_stats_t *gamma_stats,
+ time_stats_t *ext_stats,
+ time_stats_t *intl1_stats,
+ time_stats_t *intl2_stats)
+{
+
+ /* y is a pointer to the input
+ decoded_bytes is a pointer to the decoded output
+ n is the size in bits of the coded block, with the tail */
+
+
+ llr_t systematic0[2*(n+16)] __attribute__ ((aligned(32)));
+ llr_t systematic1[2*(n+16)] __attribute__ ((aligned(32)));
+ llr_t systematic2[2*(n+16)] __attribute__ ((aligned(32)));
+ llr_t yparity1[2*(n+16)] __attribute__ ((aligned(32)));
+ llr_t yparity2[2*(n+16)] __attribute__ ((aligned(32)));
+
+ llr_t ext[2*(n+128)] __attribute__((aligned(32)));
+ llr_t ext2[2*(n+128)] __attribute__((aligned(32)));
+
+ llr_t alpha[(n+16)*16] __attribute__ ((aligned(32)));
+ llr_t beta[(n+16)*16] __attribute__ ((aligned(32)));
+ llr_t m11[2*(n+16)] __attribute__ ((aligned(32)));
+ llr_t m10[2*(n+16)] __attribute__ ((aligned(32)));
+
+
+ int *pi2_p,*pi4_p,*pi5_p,*pi6_p;
+ llr_t *s,*s1,*s2,*yp1,*yp2,*yp,*yp_cw2;
+ uint32_t i,j,iind;//,pi;
+ uint8_t iteration_cnt=0;
+ uint32_t crc,oldcrc,crc_cw2,oldcrc_cw2,crc_len;
+ uint8_t temp;
+ uint32_t db;
+
+
+ __m128i *yp128,*yp128_cw2;
+ __m256i tmp, zeros=_mm256_setzero_si256();
+ __m128i tmpe,tmpe_cw2;
+
+ int offset8_flag=0;
+
+#ifdef DEBUG_LOGMAP
+ fdavx2 = fopen("dump_avx2.txt","w");
+ fdavx2b = fopen("dump_avx2b.txt","w");
+
+ printf("tc avx2_16 (y,y2) %p,%p\n",y,y2);
+#endif
+ if (crc_type > 3) {
+ printf("Illegal crc length!\n");
+ return 255;
+ }
+
+
+ start_meas(init_stats);
+
+
+
+ for (iind=0; iind < 188 && f1f2mat[iind].nb_bits != n; iind++);
+
+ if ( iind == 188 ) {
+ printf("Illegal frame length!\n");
+ return 255;
+ }
+
+ switch (crc_type) {
+ case CRC24_A:
+ case CRC24_B:
+ crc_len=3;
+ break;
+
+ case CRC16:
+ crc_len=2;
+ break;
+
+ case CRC8:
+ crc_len=1;
+ break;
+
+ default:
+ crc_len=3;
+ }
+
+
+ yp128 = (__m128i*)y;
+ yp128_cw2 = (__m128i*)y2;
+
+ s = systematic0;
+ s1 = systematic1;
+ s2 = systematic2;
+ yp1 = yparity1;
+ yp2 = yparity2;
+
+
+#if 0
+ for (i=0; i>4)<<3)+(j&7),s[j],yp1[j],yp2[j]);
+ fprintf(fdavx2b,"init0: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]);
+#endif
+
+ j=pi2_p[1];
+
+ s[j] = _mm_extract_epi16(tmpe,3);
+ yp1[j] = _mm_extract_epi16(tmpe,4);
+ yp2[j] = _mm_extract_epi16(tmpe,5);
+ s[j+8] = _mm_extract_epi16(tmpe_cw2,3);
+ yp1[j+8] = _mm_extract_epi16(tmpe_cw2,4);
+ yp2[j+8] = _mm_extract_epi16(tmpe_cw2,5);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"init1: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]);
+ fprintf(fdavx2b,"init1: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]);
+#endif
+ j=pi2_p[2];
+
+ s[j] = _mm_extract_epi16(tmpe,6);
+ yp1[j] = _mm_extract_epi16(tmpe,7);
+ tmpe = _mm_load_si128(&yp128[1]);
+ yp2[j] = _mm_extract_epi16(tmpe,0);
+ s[j+8] = _mm_extract_epi16(tmpe_cw2,6);
+ yp1[j+8] = _mm_extract_epi16(tmpe_cw2,7);
+ tmpe_cw2 = _mm_load_si128(&yp128_cw2[1]);
+ yp2[j+8] = _mm_extract_epi16(tmpe_cw2,0);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"init2: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]);
+ fprintf(fdavx2b,"init2: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]);
+#endif
+ j=pi2_p[3];
+
+ s[j] = _mm_extract_epi16(tmpe,1);
+ yp1[j] = _mm_extract_epi16(tmpe,2);
+ yp2[j] = _mm_extract_epi16(tmpe,3);
+ s[j+8] = _mm_extract_epi16(tmpe_cw2,1);
+ yp1[j+8] = _mm_extract_epi16(tmpe_cw2,2);
+ yp2[j+8] = _mm_extract_epi16(tmpe_cw2,3);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"init3: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]);
+ fprintf(fdavx2b,"init3: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]);
+#endif
+ j=pi2_p[4];
+
+ s[j] = _mm_extract_epi16(tmpe,4);
+ yp1[j] = _mm_extract_epi16(tmpe,5);
+ yp2[j] = _mm_extract_epi16(tmpe,6);
+ s[j+8] = _mm_extract_epi16(tmpe_cw2,4);
+ yp1[j+8] = _mm_extract_epi16(tmpe_cw2,5);
+ yp2[j+8] = _mm_extract_epi16(tmpe_cw2,6);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"init4: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]);
+ fprintf(fdavx2b,"init4: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]);
+#endif
+ j=pi2_p[5];
+
+ s[j] = _mm_extract_epi16(tmpe,7);
+ tmpe = _mm_load_si128(&yp128[2]);
+ yp1[j] = _mm_extract_epi16(tmpe,0);
+ yp2[j] = _mm_extract_epi16(tmpe,1);
+ s[j+8] = _mm_extract_epi16(tmpe_cw2,7);
+ tmpe_cw2 = _mm_load_si128(&yp128_cw2[2]);
+ yp1[j+8] = _mm_extract_epi16(tmpe_cw2,0);
+ yp2[j+8] = _mm_extract_epi16(tmpe_cw2,1);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"init5: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]);
+ fprintf(fdavx2b,"init5: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]);
+#endif
+ j=pi2_p[6];
+
+ s[j] = _mm_extract_epi16(tmpe,2);
+ yp1[j] = _mm_extract_epi16(tmpe,3);
+ yp2[j] = _mm_extract_epi16(tmpe,4);
+ s[j+8] = _mm_extract_epi16(tmpe_cw2,2);
+ yp1[j+8] = _mm_extract_epi16(tmpe_cw2,3);
+ yp2[j+8] = _mm_extract_epi16(tmpe_cw2,4);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"init6: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]);
+ fprintf(fdavx2b,"init6: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]);
+#endif
+ j=pi2_p[7];
+
+ s[j] = _mm_extract_epi16(tmpe,5);
+ yp1[j] = _mm_extract_epi16(tmpe,6);
+ yp2[j] = _mm_extract_epi16(tmpe,7);
+ s[j+8] = _mm_extract_epi16(tmpe_cw2,5);
+ yp1[j+8] = _mm_extract_epi16(tmpe_cw2,6);
+ yp2[j+8] = _mm_extract_epi16(tmpe_cw2,7);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"init7: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j],yp1[j],yp2[j]);
+ fprintf(fdavx2b,"init7: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",((j>>4)<<3)+(j&7),s[j+8],yp1[j+8],yp2[j+8]);
+#endif
+ yp128+=3;
+ yp128_cw2+=3;
+
+ }
+ yp=(llr_t*)yp128;
+ yp_cw2=(llr_t*)yp128_cw2;
+#else
+
+ pi2_p = &pi2tab16avx2[iind][0];
+ for (i=0,j=0; i>3); i++) { // steady-state portion
+
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[*pi4_p],0);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[8+*pi4_p++],8);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[*pi4_p],1);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[8+*pi4_p++],9);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[*pi4_p],2);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[8+*pi4_p++],10);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[*pi4_p],3);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[8+*pi4_p++],11);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[*pi4_p],4);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[8+*pi4_p++],12);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[*pi4_p],5);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[8+*pi4_p++],13);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[*pi4_p],6);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[8+*pi4_p++],14);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[*pi4_p],7);
+ ((__m256i *)systematic2)[i]=_mm256_insert_epi16(((__m256i *)systematic2)[i],ext[8+*pi4_p++],15);
+#ifdef DEBUG_LOGMAP
+ print_shorts("syst2",(int16_t*)&((__m256i *)systematic2)[i]);
+#endif
+ }
+
+ stop_meas(intl1_stats);
+
+ // do log_map from second parity bit
+
+ log_map16avx2(systematic2,yparity2,m11,m10,alpha,beta,ext2,n,1,F,offset8_flag,alpha_stats,beta_stats,gamma_stats,ext_stats);
+
+
+
+ pi5_p=pi5tab16avx2[iind];
+
+ for (i=0; i<(n>>3); i++) {
+
+ tmp=_mm256_insert_epi16(tmp,ext2[*pi5_p],0);
+ tmp=_mm256_insert_epi16(tmp,ext2[8+*pi5_p++],8);
+ tmp=_mm256_insert_epi16(tmp,ext2[*pi5_p],1);
+ tmp=_mm256_insert_epi16(tmp,ext2[8+*pi5_p++],9);
+ tmp=_mm256_insert_epi16(tmp,ext2[*pi5_p],2);
+ tmp=_mm256_insert_epi16(tmp,ext2[8+*pi5_p++],10);
+ tmp=_mm256_insert_epi16(tmp,ext2[*pi5_p],3);
+ tmp=_mm256_insert_epi16(tmp,ext2[8+*pi5_p++],11);
+ tmp=_mm256_insert_epi16(tmp,ext2[*pi5_p],4);
+ tmp=_mm256_insert_epi16(tmp,ext2[8+*pi5_p++],12);
+ tmp=_mm256_insert_epi16(tmp,ext2[*pi5_p],5);
+ tmp=_mm256_insert_epi16(tmp,ext2[8+*pi5_p++],13);
+ tmp=_mm256_insert_epi16(tmp,ext2[*pi5_p],6);
+ tmp=_mm256_insert_epi16(tmp,ext2[8+*pi5_p++],14);
+ tmp=_mm256_insert_epi16(tmp,ext2[*pi5_p],7);
+ tmp=_mm256_insert_epi16(tmp,ext2[8+*pi5_p++],15);
+ ((__m256i *)systematic1)[i] = _mm256_adds_epi16(_mm256_subs_epi16(tmp,((__m256i*)ext)[i]),((__m256i *)systematic0)[i]);
+#ifdef DEBUG_LOGMAP
+ print_shorts("syst1",(int16_t*)&((__m256i *)systematic1)[i]);
+#endif
+ }
+
+ if (iteration_cnt>1) {
+ start_meas(intl2_stats);
+ pi6_p=pi6tab16avx2[iind];
+
+ for (i=0; i<(n>>3); i++) {
+
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p],7);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[8+*pi6_p++],15);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p],6);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[8+*pi6_p++],14);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p],5);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[8+*pi6_p++],13);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p],4);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[8+*pi6_p++],12);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p],3);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[8+*pi6_p++],11);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p],2);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[8+*pi6_p++],10);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p],1);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[8+*pi6_p++],9);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p],0);
+ tmp=_mm256_insert_epi16(tmp, ((llr_t*)ext2)[8+*pi6_p++],8);
+#ifdef DEBUG_LOGMAP
+ print_shorts("tmp",(int16_t*)&tmp);
+#endif
+ tmp=_mm256_cmpgt_epi8(_mm256_packs_epi16(tmp,zeros),zeros);
+ db=(uint32_t)_mm256_movemask_epi8(tmp);
+ decoded_bytes[i]=db&0xff;
+ decoded_bytes2[i]=(uint8_t)(db>>16)&0xff;
+#ifdef DEBUG_LOGMAP
+ print_shorts("tmp",(int16_t*)&tmp);
+ fprintf(fdavx2,"decoded_bytes[%d] %x (%x)\n",i,decoded_bytes[i],db);
+ fprintf(fdavx2b,"decoded_bytes[%d] %x (%x)\n",i,decoded_bytes2[i],db);
+#endif
+ }
+ }
+
+ // check status on output
+ if (iteration_cnt>1) {
+ oldcrc= *((uint32_t *)(&decoded_bytes[(n>>3)-crc_len]));
+
+ switch (crc_type) {
+
+ case CRC24_A:
+ oldcrc&=0x00ffffff;
+ crc = crc24a(&decoded_bytes[F>>3],
+ n-24-F)>>8;
+ temp=((uint8_t *)&crc)[2];
+ ((uint8_t *)&crc)[2] = ((uint8_t *)&crc)[0];
+ ((uint8_t *)&crc)[0] = temp;
+ break;
+
+ case CRC24_B:
+ oldcrc&=0x00ffffff;
+ crc = crc24b(decoded_bytes,
+ n-24)>>8;
+ temp=((uint8_t *)&crc)[2];
+ ((uint8_t *)&crc)[2] = ((uint8_t *)&crc)[0];
+ ((uint8_t *)&crc)[0] = temp;
+ break;
+
+ case CRC16:
+ oldcrc&=0x0000ffff;
+ crc = crc16(decoded_bytes,
+ n-16)>>16;
+ break;
+
+ case CRC8:
+ oldcrc&=0x000000ff;
+ crc = crc8(decoded_bytes,
+ n-8)>>24;
+ break;
+
+ default:
+ printf("FATAL: 3gpplte_turbo_decoder_sse.c: Unknown CRC\n");
+ return(255);
+ break;
+ }
+
+ // second CW
+ oldcrc_cw2= *((uint32_t *)(&decoded_bytes2[(n>>3)-crc_len]));
+
+ switch (crc_type) {
+
+ case CRC24_A:
+ oldcrc_cw2&=0x00ffffff;
+ crc_cw2 = crc24a(&decoded_bytes2[F>>3],
+ n-24-F)>>8;
+ temp=((uint8_t *)&crc_cw2)[2];
+ ((uint8_t *)&crc_cw2)[2] = ((uint8_t *)&crc_cw2)[0];
+ ((uint8_t *)&crc_cw2)[0] = temp;
+ break;
+
+ case CRC24_B:
+ oldcrc_cw2&=0x00ffffff;
+ crc_cw2 = crc24b(decoded_bytes2,
+ n-24)>>8;
+ temp=((uint8_t *)&crc_cw2)[2];
+ ((uint8_t *)&crc_cw2)[2] = ((uint8_t *)&crc_cw2)[0];
+ ((uint8_t *)&crc_cw2)[0] = temp;
+ break;
+
+ case CRC16:
+ oldcrc_cw2&=0x0000ffff;
+ crc_cw2 = crc16(decoded_bytes2,
+ n-16)>>16;
+ break;
+
+ case CRC8:
+ oldcrc_cw2&=0x000000ff;
+ crc_cw2 = crc8(decoded_bytes2,
+ n-8)>>24;
+ break;
+
+ default:
+ printf("FATAL: 3gpplte_turbo_decoder_sse.c: Unknown CRC\n");
+ return(255);
+ break;
+ }
+
+ stop_meas(intl2_stats);
+
+#ifdef DEBUG_LOGMAP
+ fprintf(fdavx2,"oldcrc %x, crc %x, oldcrc_cw2 %x, crc_cw2 %x\n",oldcrc,crc,oldcrc_cw2,crc_cw2);
+ fprintf(fdavx2b,"oldcrc %x, crc %x, oldcrc_cw2 %x, crc_cw2 %x\n",oldcrc,crc,oldcrc_cw2,crc_cw2);
+#endif
+
+ if ((crc == oldcrc) && (crc!=0) && (crc_cw2 == oldcrc_cw2) && (crc_cw2!=0)) {
+ return(iteration_cnt);
+ }
+ }
+
+ // do log_map from first parity bit
+ if (iteration_cnt < max_iterations) {
+ log_map16avx2(systematic1,yparity1,m11,m10,alpha,beta,ext,n,0,F,offset8_flag,alpha_stats,beta_stats,gamma_stats,ext_stats);
+
+ __m256i* ext_128=(__m256i*) ext;
+ __m256i* s1_128=(__m256i*) systematic1;
+ __m256i* s0_128=(__m256i*) systematic0;
+ int myloop=n>>3;
+
+ for (i=0; i>3;
+#else
+ if ((frame_length&15) > 0)
+ K1=(frame_length+1)>>4;
+ else
+ K1=frame_length>>4;
+#endif
for (k=0; k>3;
// Termination
#if defined(__x86_64__) || defined(__i386__)
m11_128[k] = _mm_srai_epi16(_mm_adds_epi16(systematic128[k+term_flag],y_parity128[k]),1);
+ //#ifndef __AVX2__
+#if 1
m10_128[k] = _mm_srai_epi16(_mm_subs_epi16(systematic128[k+term_flag],y_parity128[k]),1);
+#else
+ m10_128[k] = _mm_srai_epi16(_mm_subs_epi16(y_parity128[k],systematic128[k+term_flag]),1);
+#endif
#elif defined(__arm__)
m11_128[k] = vhaddq_s16(systematic128[k+term_flag],y_parity128[k]);
m10_128[k] = vhsubq_s16(systematic128[k+term_flag],y_parity128[k]);
#endif
+
+#ifdef DEBUG_LOGMAP
+fprintf(fdsse4,"Loop index k %d (term flag %d)\n", k,term_flag);
+print_shorts("sys",(int16_t*)&systematic128[k]);
+ print_shorts("yp",(int16_t*)&y_parity128[k]);
+ print_shorts("m11",(int16_t*)&m11_128[k]);
+ print_shorts("m10",(int16_t*)&m10_128[k]);
+#endif
}
#define L 40
@@ -174,11 +207,21 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
{
int k,l,l2,K1,rerun_flag=0;
#if defined(__x86_64__) || defined(__i386__)
- __m128i *alpha128=(__m128i *)alpha,*alpha_ptr;
- __m128i a0,a1,a2,a3,a4,a5,a6,a7,*m11p,*m10p;
+ __m128i *alpha128=(__m128i *)alpha,*alpha_ptr,*m11p,*m10p;
+ //#ifndef __AVX2__
+#if 1
+ __m128i a0,a1,a2,a3,a4,a5,a6,a7;
__m128i m_b0,m_b1,m_b2,m_b3,m_b4,m_b5,m_b6,m_b7;
__m128i new0,new1,new2,new3,new4,new5,new6,new7;
__m128i alpha_max;
+#else
+ __m256i *alpha256=(__m256i *)alpha,*alpha_ptr256,m11,m10;
+ __m256i a01,a23,a45,a67,a02,a13,a64,a75;
+ __m256i m_b01,m_b23,m_b45,m_b67,new01,new23,new45,new67;
+ __m256i m11m10_256;
+ __m256i alpha_max;
+#endif
+
#elif defined(__arm__)
int16x8_t *alpha128=(int16x8_t *)alpha,*alpha_ptr;
int16x8_t a0,a1,a2,a3,a4,a5,a6,a7,*m11p,*m10p;
@@ -188,10 +231,16 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
#endif
l2 = L>>3;
K1 = (frame_length>>3);
-
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"compute_alpha (sse_16bit)\n");
+#endif
for (l=K1;; l=l2,rerun_flag=1) {
#if defined(__x86_64__) || defined(__i386__)
alpha128 = (__m128i *)alpha;
+ //#ifdef __AVX2__
+#if 0
+ alpha256 = (__m256i *)alpha;
+#endif
#elif defined(__arm__)
alpha128 = (int16x8_t *)alpha;
#endif
@@ -218,7 +267,7 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
alpha128[7] = vdupq_n_s16(-MAX/2);
#endif
#ifdef DEBUG_LOGMAP
- printf("Initial alpha\n");
+ fprintf(fdsse4,"Initial alpha\n");
print_shorts("a0",(int16_t*)&alpha128[0]);
print_shorts("a1",(int16_t*)&alpha128[1]);
print_shorts("a2",(int16_t*)&alpha128[2]);
@@ -258,7 +307,7 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
alpha[48] = -MAX/2;
alpha[56] = -MAX/2;
#ifdef DEBUG_LOGMAP
- printf("Second run\n");
+ fprintf(fdsse4,"Second run\n");
print_shorts("a0",(int16_t*)&alpha128[0]);
print_shorts("a1",(int16_t*)&alpha128[1]);
print_shorts("a2",(int16_t*)&alpha128[2]);
@@ -272,6 +321,11 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
}
alpha_ptr = &alpha128[0];
+ //#ifdef __AVX2__
+#if 0
+ alpha_ptr256 = &alpha256[0];
+#endif
+
#if defined(__x86_64__) || defined(__i386__)
m11p = (__m128i*)m_11;
m10p = (__m128i*)m_10;
@@ -284,6 +338,8 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
k++) {
#if defined(__x86_64__) || defined(__i386__)
+ //#ifndef __AVX2__
+#if 1
a1=_mm_load_si128(&alpha_ptr[1]);
a3=_mm_load_si128(&alpha_ptr[3]);
a5=_mm_load_si128(&alpha_ptr[5]);
@@ -328,6 +384,37 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
alpha_max = _mm_max_epi16(alpha_max,a5);
alpha_max = _mm_max_epi16(alpha_max,a6);
alpha_max = _mm_max_epi16(alpha_max,a7);
+#else
+ a02=_mm256_load_si256(&alpha_ptr256[0]);
+ a13=_mm256_load_si256(&alpha_ptr256[1]);
+ a64=_mm256_load_si256(&alpha_ptr256[2]);
+ a75=_mm256_load_si256(&alpha_ptr256[3]);
+ m11m10_256 = _mm256_insertf128_si256(m11m10_256,*m11p,0);
+ m11m10_256 = _mm256_insertf128_si256(m11m10_256,*m10p,1);
+
+
+ m_b01 = _mm256_adds_epi16(a13,m11m10_256); //negative m10
+ m_b23 = _mm256_subs_epi16(a75,m11m10_256); //negative m10
+ m_b45 = _mm256_subs_epi16(a13,m11m10_256); //negative m10
+ m_b67 = _mm256_adds_epi16(a75,m11m10_256); //negative m10
+
+ new01 = _mm256_subs_epi16(a02,m11m10_256); //negative m10
+ new23 = _mm256_adds_epi16(a64,m11m10_256); //negative m10
+ new45 = _mm256_adds_epi16(a02,m11m10_256); //negative m10
+ new67 = _mm256_subs_epi16(a64,m11m10_256); //negative m10
+
+ a01 = _mm256_max_epi16(m_b01,new01);
+ a23 = _mm256_max_epi16(m_b23,new23);
+ a45 = _mm256_max_epi16(m_b45,new45);
+ a67 = _mm256_max_epi16(m_b67,new67);
+
+ alpha_max = _mm256_max_epi16(a01,a23);
+ alpha_max = _mm256_max_epi16(alpha_max,a45);
+ alpha_max = _mm256_max_epi16(alpha_max,a67);
+ alpha_max = _mm256_max_epi16(alpha_max,_mm256_permutevar8x32_epi32(alpha_max,_mm256_set_epi32(3,2,1,0,7,6,5,4)));
+
+
+#endif
#elif defined(__arm__)
m_b0 = vqaddq_s16(alpha_ptr[1],*m11p); // m11
m_b4 = vqsubq_s16(alpha_ptr[1],*m11p); // m00=-m11
@@ -367,9 +454,15 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
#endif
alpha_ptr+=8;
+ //#ifdef __AVX2__
+#if 0
+ alpha_ptr256+=4;
+#endif
m11p++;
m10p++;
#if defined(__x86_64__) || defined(__i386__)
+ //#ifndef __AVX2__
+#if 1
alpha_ptr[0] = _mm_subs_epi16(a0,alpha_max);
alpha_ptr[1] = _mm_subs_epi16(a1,alpha_max);
alpha_ptr[2] = _mm_subs_epi16(a2,alpha_max);
@@ -378,6 +471,18 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
alpha_ptr[5] = _mm_subs_epi16(a5,alpha_max);
alpha_ptr[6] = _mm_subs_epi16(a6,alpha_max);
alpha_ptr[7] = _mm_subs_epi16(a7,alpha_max);
+#else
+
+ a01 = _mm256_subs_epi16(a01,alpha_max);
+ a23 = _mm256_subs_epi16(a23,alpha_max);
+ a45 = _mm256_subs_epi16(a45,alpha_max);
+ a67 = _mm256_subs_epi16(a67,alpha_max);
+
+ alpha_ptr256[0] = _mm256_permute2x128_si256(a01,a23,0x20); //a02
+ alpha_ptr256[1] = _mm256_permute2x128_si256(a01,a23,0x13); //a13
+ alpha_ptr256[2] = _mm256_permute2x128_si256(a45,a67,0x02); //a64
+ alpha_ptr256[3] = _mm256_permute2x128_si256(a45,a67,0x31); //a75
+#endif
#elif defined(__arm__)
alpha_ptr[0] = vqsubq_s16(a0,alpha_max);
alpha_ptr[1] = vqsubq_s16(a1,alpha_max);
@@ -390,7 +495,7 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
#endif
#ifdef DEBUG_LOGMAP
- printf("Loop index %d, mb\n",k);
+ fprintf(fdsse4,"Loop index %d\n",k);
print_shorts("mb0",(int16_t*)&m_b0);
print_shorts("mb1",(int16_t*)&m_b1);
print_shorts("mb2",(int16_t*)&m_b2);
@@ -400,7 +505,7 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
print_shorts("mb6",(int16_t*)&m_b6);
print_shorts("mb7",(int16_t*)&m_b7);
- printf("Loop index %d, new\n",k);
+ fprintf(fdsse4,"Loop index %d, new\n",k);
print_shorts("new0",(int16_t*)&new0);
print_shorts("new1",(int16_t*)&new1);
print_shorts("new2",(int16_t*)&new2);
@@ -410,7 +515,7 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
print_shorts("new6",(int16_t*)&new6);
print_shorts("new7",(int16_t*)&new7);
- printf("Loop index %d, after max\n",k);
+ fprintf(fdsse4,"Loop index %d, after max\n",k);
print_shorts("a0",(int16_t*)&a0);
print_shorts("a1",(int16_t*)&a1);
print_shorts("a2",(int16_t*)&a2);
@@ -420,7 +525,7 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s
print_shorts("a6",(int16_t*)&a6);
print_shorts("a7",(int16_t*)&a7);
- printf("Loop index %d\n",k);
+ fprintf(fdsse4,"Loop index %d\n",k);
print_shorts("a0",(int16_t*)&alpha_ptr[0]);
print_shorts("a1",(int16_t*)&alpha_ptr[1]);
print_shorts("a2",(int16_t*)&alpha_ptr[2]);
@@ -463,25 +568,33 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh
llr_t beta0,beta1;
#ifdef DEBUG_LOGMAP
- msg("compute_beta, %p,%p,%p,%p,framelength %d,F %d\n",
- beta,m_11,m_10,alpha,frame_length,F);
+ fprintf(fdsse4,"compute_beta, %p,%p,%p,%p,framelength %d,F %d\n",
+ beta,m_11,m_10,alpha,frame_length,F);
#endif
// termination for beta initialization
- // printf("beta init: offset8 %d\n",offset8_flag);
+ // fprintf(fdsse4,"beta init: offset8 %d\n",offset8_flag);
m11=(int16_t)m_11[2+frame_length];
+ //#ifndef __AVX2__
+#if 1
m10=(int16_t)m_10[2+frame_length];
-
- // printf("m11,m10 %d,%d\n",m11,m10);
+#else
+ m10=-(int16_t)m_10[2+frame_length];
+#endif
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"m11,m10 %d,%d\n",m11,m10);
+#endif
beta0 = -m11;//M0T_TERM;
beta1 = m11;//M1T_TERM;
m11=(int16_t)m_11[1+frame_length];
m10=(int16_t)m_10[1+frame_length];
- // printf("m11,m10 %d,%d\n",m11,m10);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"m11,m10 %d,%d\n",m11,m10);
+#endif
beta0_2 = beta0-m11;//+M0T_TERM;
beta1_2 = beta0+m11;//+M1T_TERM;
@@ -489,8 +602,9 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh
beta3_2 = beta1-m10;//+M3T_TERM;
m11=(int16_t)m_11[frame_length];
m10=(int16_t)m_10[frame_length];
- // printf("m11,m10 %d,%d (%p)\n",m11,m10,m_11+frame_length);
-
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"m11,m10 %d,%d\n",m11,m10);
+#endif
beta0_16 = beta0_2-m11;//+M0T_TERM;
beta1_16 = beta0_2+m11;//+M1T_TERM;
beta2_16 = beta1_2+m10;//+M2T_TERM;
@@ -536,6 +650,17 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh
beta_ptr[5] = alpha128[5+(frame_length)];
beta_ptr[6] = alpha128[6+(frame_length)];
beta_ptr[7] = alpha128[7+(frame_length)];
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"beta init \n");
+ print_shorts("b0",(int16_t*)&beta_ptr[0]);
+ print_shorts("b1",(int16_t*)&beta_ptr[1]);
+ print_shorts("b2",(int16_t*)&beta_ptr[2]);
+ print_shorts("b3",(int16_t*)&beta_ptr[3]);
+ print_shorts("b4",(int16_t*)&beta_ptr[4]);
+ print_shorts("b5",(int16_t*)&beta_ptr[5]);
+ print_shorts("b6",(int16_t*)&beta_ptr[6]);
+ print_shorts("b7",(int16_t*)&beta_ptr[7]);
+#endif
} else {
#if defined(__x86_64__) || defined(__i386__)
beta128 = (__m128i*)&beta[0];
@@ -558,6 +683,17 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh
beta_ptr[5] = (int16x8_t)vshrq_n_s64((int64x2_t)beta128[5],16); beta_ptr[5] = vsetq_lane_s16(beta[43],beta_ptr[5],4);
beta_ptr[6] = (int16x8_t)vshrq_n_s64((int64x2_t)beta128[6],16); beta_ptr[6] = vsetq_lane_s16(beta[51],beta_ptr[6],4);
beta_ptr[7] = (int16x8_t)vshrq_n_s64((int64x2_t)beta128[7],16); beta_ptr[7] = vsetq_lane_s16(beta[59],beta_ptr[7],4);
+#endif
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"beta init (second run) \n");
+ print_shorts("b0",(int16_t*)&beta_ptr[0]);
+ print_shorts("b1",(int16_t*)&beta_ptr[1]);
+ print_shorts("b2",(int16_t*)&beta_ptr[2]);
+ print_shorts("b3",(int16_t*)&beta_ptr[3]);
+ print_shorts("b4",(int16_t*)&beta_ptr[4]);
+ print_shorts("b5",(int16_t*)&beta_ptr[5]);
+ print_shorts("b6",(int16_t*)&beta_ptr[6]);
+ print_shorts("b7",(int16_t*)&beta_ptr[7]);
#endif
}
@@ -582,6 +718,17 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh
beta_ptr[7] = vsetq_lane_s16(beta7_16,beta_ptr[7],7);
#endif
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"beta init (after insert) \n");
+ print_shorts("b0",(int16_t*)&beta_ptr[0]);
+ print_shorts("b1",(int16_t*)&beta_ptr[1]);
+ print_shorts("b2",(int16_t*)&beta_ptr[2]);
+ print_shorts("b3",(int16_t*)&beta_ptr[3]);
+ print_shorts("b4",(int16_t*)&beta_ptr[4]);
+ print_shorts("b5",(int16_t*)&beta_ptr[5]);
+ print_shorts("b6",(int16_t*)&beta_ptr[6]);
+ print_shorts("b7",(int16_t*)&beta_ptr[7]);
+#endif
int loopval=((rerun_flag==0)?0:((frame_length-L)>>3));
for (k=(frame_length>>3)-1; k>=loopval; k--) {
@@ -589,6 +736,9 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh
m11_128=((__m128i*)m_11)[k];
m10_128=((__m128i*)m_10)[k];
+
+ //#ifndef __AVX2__
+#if 1
m_b0 = _mm_adds_epi16(beta_ptr[4],m11_128); //m11
m_b1 = _mm_subs_epi16(beta_ptr[4],m11_128); //m00
m_b2 = _mm_subs_epi16(beta_ptr[5],m10_128); //m01
@@ -598,6 +748,7 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh
m_b6 = _mm_subs_epi16(beta_ptr[7],m11_128); //m00
m_b7 = _mm_adds_epi16(beta_ptr[7],m11_128); //m11
+
new0 = _mm_subs_epi16(beta_ptr[0],m11_128); //m00
new1 = _mm_adds_epi16(beta_ptr[0],m11_128); //m11
new2 = _mm_adds_epi16(beta_ptr[1],m10_128); //m10
@@ -607,8 +758,29 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh
new6 = _mm_adds_epi16(beta_ptr[3],m11_128); //m11
new7 = _mm_subs_epi16(beta_ptr[3],m11_128); //m00
+#else
+ b01=_mm256_load_si256(&((_m256i*)beta_ptr)[0]);
+ b23=_mm256_load_si256(&((_m256i*)beta_ptr)[1]);
+ b45=_mm256_load_si256(&((_m256i*)beta_ptr)[2]);
+ b67=_mm256_load_si256(&((_m256i*)beta_ptr)[3]);
+ m11m10_256 = _mm256_insertf128_si256(m11m10_256,m11_128,0);
+ m11m10_256 = _mm256_insertf128_si256(m11m10_256,m10_128,1);
+
+
+ m_b02 = _mm256_adds_epi16(b45,m11m10_256); //negative m10
+ m_b13 = _mm256_subs_epi16(b45,m11m10_256); //negative m10
+ m_b64 = _mm256_subs_epi16(b67,m11m10_256); //negative m10
+ m_b75 = _mm256_adds_epi16(b67,m11m10_256); //negative m10
+ new02 = _mm256_subs_epi16(b01,m11m10_256); //negative m10
+ new13 = _mm256_adds_epi16(b01,m11m10_256); //negative m10
+ new64 = _mm256_adds_epi16(b23,m11m10_256); //negative m10
+ new75 = _mm256_subs_epi16(b24,m11m10_256); //negative m10
+#endif
+
beta_ptr-=8;
+ //#ifndef __AVX2__
+#if 1
beta_ptr[0] = _mm_max_epi16(m_b0,new0);
beta_ptr[1] = _mm_max_epi16(m_b1,new1);
beta_ptr[2] = _mm_max_epi16(m_b2,new2);
@@ -634,6 +806,28 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh
beta_ptr[5] = _mm_subs_epi16(beta_ptr[5],beta_max);
beta_ptr[6] = _mm_subs_epi16(beta_ptr[6],beta_max);
beta_ptr[7] = _mm_subs_epi16(beta_ptr[7],beta_max);
+#else
+ b02 = _mm256_max_epi16(m_b02,new02);
+ b13 = _mm256_max_epi16(m_b13,new13);
+ b64 = _mm256_max_epi16(m_b64,new64);
+ b75 = _mm256_max_epi16(m_b75,new75);
+
+ beta_max = _mm256_max_epi16(b02,b13);
+ beta_max = _mm256_max_epi16(beta_max,b64);
+ beta_max = _mm256_max_epi16(beta_max,b75);
+ beta_max = _mm256_max_epi16(beta_max,_mm256_permutevar8x32_epi32(betaa_max,_mm256_set_epi32(3,2,1,0,7,6,5,4)));
+
+ b02 = _mm256_subs_epi16(b02,beta_max);
+ b13 = _mm256_subs_epi16(b13,beta_max);
+ b64 = _mm256_subs_epi16(b64,beta_max);
+ b75 = _mm256_subs_epi16(b75,beta_max);
+
+ ((_m256i*)beta_ptr)[0]) = _mm256_permute2x128_si256(b02,b13,0x02); //b01
+ ((_m256i*)beta_ptr)[1]) = _mm256_permute2x128_si256(b02,b13,0x31); //b23
+ ((_m256i*)beta_ptr)[2]) = _mm256_permute2x128_si256(b64,b75,0x13); //b45
+ ((_m256i*)beta_ptr)[3]) = _mm256_permute2x128_si256(b64,b75,0x20); //b67
+#endif
+
#elif defined(__arm__)
m11_128=((int16x8_t*)m_11)[k];
m10_128=((int16x8_t*)m_10)[k];
@@ -684,6 +878,18 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh
beta_ptr[7] = vqsubq_s16(beta_ptr[7],beta_max);
#endif
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"Loop index %d, mb\n",k);
+ fprintf(fdsse4,"beta init (after max)\n");
+ print_shorts("b0",(int16_t*)&beta_ptr[0]);
+ print_shorts("b1",(int16_t*)&beta_ptr[1]);
+ print_shorts("b2",(int16_t*)&beta_ptr[2]);
+ print_shorts("b3",(int16_t*)&beta_ptr[3]);
+ print_shorts("b4",(int16_t*)&beta_ptr[4]);
+ print_shorts("b5",(int16_t*)&beta_ptr[5]);
+ print_shorts("b6",(int16_t*)&beta_ptr[6]);
+ print_shorts("b7",(int16_t*)&beta_ptr[7]);
+#endif
}
@@ -721,7 +927,7 @@ void compute_ext16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext,
//
#ifdef DEBUG_LOGMAP
- msg("compute_ext, %p, %p, %p, %p, %p, %p ,framelength %d\n",alpha,beta,m_11,m_10,ext,systematic,frame_length);
+ fprintf(fdsse4,"compute_ext (sse_16bit), %p, %p, %p, %p, %p, %p ,framelength %d\n",alpha,beta,m_11,m_10,ext,systematic,frame_length);
#endif
alpha_ptr = alpha128;
@@ -736,7 +942,7 @@ void compute_ext16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext,
ext_128 = (__m128i*)&ext[k<<3];
/*
- printf("EXT %03d\n",k);
+ fprintf(fdsse4,"EXT %03d\n",k);
print_shorts("a0:",&alpha_ptr[0]);
print_shorts("a1:",&alpha_ptr[1]);
print_shorts("a2:",&alpha_ptr[2]);
@@ -754,6 +960,9 @@ void compute_ext16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext,
print_shorts("b6:",&beta_ptr[6]);
print_shorts("b7:",&beta_ptr[7]);
*/
+
+ //#ifndef __AVX2__
+#if 1
m00_4 = _mm_adds_epi16(alpha_ptr[7],beta_ptr[3]); //ALPHA_BETA_4m00;
m11_4 = _mm_adds_epi16(alpha_ptr[7],beta_ptr[7]); //ALPHA_BETA_4m11;
m00_3 = _mm_adds_epi16(alpha_ptr[6],beta_ptr[7]); //ALPHA_BETA_3m00;
@@ -770,6 +979,32 @@ void compute_ext16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext,
m10_2 = _mm_adds_epi16(alpha_ptr[3],beta_ptr[5]); //ALPHA_BETA_2m10;
m10_1 = _mm_adds_epi16(alpha_ptr[2],beta_ptr[1]); //ALPHA_BETA_1m10;
m01_1 = _mm_adds_epi16(alpha_ptr[2],beta_ptr[5]); //ALPHA_BETA_1m01;
+#else
+
+
+ m00_1 = _mm_adds_epi16(alpha_ptr[0],beta_ptr[0]); //ALPHA_BETA_1m00;
+ m10_1 = _mm_adds_epi16(alpha_ptr[2],beta_ptr[1]); //ALPHA_BETA_1m10;
+ m11_1 = _mm_adds_epi16(alpha_ptr[0],beta_ptr[4]); //ALPHA_BETA_1m11;
+ m01_1 = _mm_adds_epi16(alpha_ptr[2],beta_ptr[5]); //ALPHA_BETA_1m01;
+
+ m11_2 = _mm_adds_epi16(alpha_ptr[1],beta_ptr[0]); //ALPHA_BETA_2m11;
+ m01_2 = _mm_adds_epi16(alpha_ptr[3],beta_ptr[1]); //ALPHA_BETA_2m01;
+ m00_2 = _mm_adds_epi16(alpha_ptr[1],beta_ptr[4]); //ALPHA_BETA_2m00;
+ m10_2 = _mm_adds_epi16(alpha_ptr[3],beta_ptr[5]); //ALPHA_BETA_2m10;
+
+ m11_3 = _mm_adds_epi16(alpha_ptr[6],beta_ptr[3]); //ALPHA_BETA_3m11;
+ m01_3 = _mm_adds_epi16(alpha_ptr[4],beta_ptr[2]); //ALPHA_BETA_3m01;
+ m00_3 = _mm_adds_epi16(alpha_ptr[6],beta_ptr[7]); //ALPHA_BETA_3m00;
+ m10_3 = _mm_adds_epi16(alpha_ptr[4],beta_ptr[6]); //ALPHA_BETA_3m10;
+
+ m00_4 = _mm_adds_epi16(alpha_ptr[7],beta_ptr[3]); //ALPHA_BETA_4m00;
+ m10_4 = _mm_adds_epi16(alpha_ptr[5],beta_ptr[2]); //ALPHA_BETA_4m10;
+ m11_4 = _mm_adds_epi16(alpha_ptr[7],beta_ptr[7]); //ALPHA_BETA_4m11;
+ m01_4 = _mm_adds_epi16(alpha_ptr[5],beta_ptr[6]); //ALPHA_BETA_4m01;
+
+
+#endif
+
/*
print_shorts("m11_1:",&m11_1);
print_shorts("m11_2:",&m11_2);
@@ -816,15 +1051,15 @@ void compute_ext16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext,
// print_shorts("m10_1:",&m10_1);
*ext_128 = _mm_subs_epi16(m10_1,m01_1);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"ext %p\n",ext_128);
+ print_shorts("ext:",(int16_t*)ext_128);
+ print_shorts("m11:",(int16_t*)m11_128);
+ print_shorts("m10:",(int16_t*)m10_128);
+ print_shorts("m10_1:",(int16_t*)&m10_1);
+ print_shorts("m01_1:",(int16_t*)&m01_1);
+#endif
- /*
- print_shorts("ext:",ext_128);
- print_shorts("m11:",m11_128);
- print_shorts("m10:",m10_128);
- print_shorts("m10_1:",&m10_1);
- print_shorts("m01_1:",&m01_1);
- print_shorts("syst:",systematic_128);
- */
#elif defined(__arm__)
m11_128 = (int16x8_t*)&m_11[k<<3];
m10_128 = (int16x8_t*)&m_10[k<<3];
@@ -927,7 +1162,7 @@ void init_td16()
// j-=(n-1);
pi2tab16[ind][i] = j;
- // printf("pi2[%d] = %d\n",i,j);
+ // fprintf(fdsse4,"pi2[%d] = %d\n",i,j);
}
}
@@ -964,19 +1199,19 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
n is the size in bits of the coded block, with the tail */
- llr_t systematic0[n+16] __attribute__ ((aligned(16)));
- llr_t systematic1[n+16] __attribute__ ((aligned(16)));
- llr_t systematic2[n+16] __attribute__ ((aligned(16)));
- llr_t yparity1[n+16] __attribute__ ((aligned(16)));
- llr_t yparity2[n+16] __attribute__ ((aligned(16)));
+ llr_t systematic0[n+16] __attribute__ ((aligned(32)));
+ llr_t systematic1[n+16] __attribute__ ((aligned(32)));
+ llr_t systematic2[n+16] __attribute__ ((aligned(32)));
+ llr_t yparity1[n+16] __attribute__ ((aligned(32)));
+ llr_t yparity2[n+16] __attribute__ ((aligned(32)));
- llr_t ext[n+128] __attribute__((aligned(16)));
- llr_t ext2[n+128] __attribute__((aligned(16)));
+ llr_t ext[n+128] __attribute__((aligned(32)));
+ llr_t ext2[n+128] __attribute__((aligned(32)));
- llr_t alpha[(n+16)*8] __attribute__ ((aligned(16)));
- llr_t beta[(n+16)*8] __attribute__ ((aligned(16)));
- llr_t m11[n+16] __attribute__ ((aligned(16)));
- llr_t m10[n+16] __attribute__ ((aligned(16)));
+ llr_t alpha[(n+16)*8] __attribute__ ((aligned(32)));
+ llr_t beta[(n+16)*8] __attribute__ ((aligned(32)));
+ llr_t m11[n+32] __attribute__ ((aligned(32)));
+ llr_t m10[n+32] __attribute__ ((aligned(32)));
int *pi2_p,*pi4_p,*pi5_p,*pi6_p;
@@ -989,7 +1224,7 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
#if defined(__x86_64__) || defined(__i386__)
__m128i *yp128;
__m128i tmp, zeros=_mm_setzero_si128();
- register __m128i tmpe;
+ __m128i tmpe;
#elif defined(__arm__)
int16x8_t *yp128;
// int16x8_t tmp128[(n+8)>>3];
@@ -1000,12 +1235,20 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
#endif
int offset8_flag=0;
+#ifdef DEBUG_LOGMAP
+ fdsse4 = fopen("dump_sse4.txt","w");
+
+
+ printf("tc sse4_16 (y) %p\n",y);
+#endif
+
if (crc_type > 3) {
- msg("Illegal crc length!\n");
+ printf("Illegal crc length!\n");
return 255;
}
+
start_meas(init_stats);
@@ -1013,7 +1256,7 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
for (iind=0; iind < 188 && f1f2mat[iind].nb_bits != n; iind++);
if ( iind == 188 ) {
- msg("Illegal frame length!\n");
+ printf("Illegal frame length!\n");
return 255;
}
@@ -1059,62 +1302,74 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
#if defined(__x86_64__) || defined(__i386__)
tmpe = _mm_load_si128(yp128);
+ // fprintf(fdsse4,"yp128 %p\n",yp128);
+ // print_shorts("tmpe",(int16_t *)&tmpe);
s[j] = _mm_extract_epi16(tmpe,0);
yp1[j] = _mm_extract_epi16(tmpe,1);
yp2[j] = _mm_extract_epi16(tmpe,2);
- // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
-
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"init0: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
+#endif
j=pi2_p[1];
s[j] = _mm_extract_epi16(tmpe,3);
yp1[j] = _mm_extract_epi16(tmpe,4);
yp2[j] = _mm_extract_epi16(tmpe,5);
- // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
-
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"init1: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
+#endif
j=pi2_p[2];
s[j] = _mm_extract_epi16(tmpe,6);
yp1[j] = _mm_extract_epi16(tmpe,7);
tmpe = _mm_load_si128(&yp128[1]);
yp2[j] = _mm_extract_epi16(tmpe,0);
- // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
-
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"init2: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
+#endif
j=pi2_p[3];
s[j] = _mm_extract_epi16(tmpe,1);
yp1[j] = _mm_extract_epi16(tmpe,2);
yp2[j] = _mm_extract_epi16(tmpe,3);
- // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
-
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"init3: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
+#endif
j=pi2_p[4];
s[j] = _mm_extract_epi16(tmpe,4);
yp1[j] = _mm_extract_epi16(tmpe,5);
yp2[j] = _mm_extract_epi16(tmpe,6);
- // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
-
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"init4: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
+#endif
j=pi2_p[5];
s[j] = _mm_extract_epi16(tmpe,7);
tmpe = _mm_load_si128(&yp128[2]);
yp1[j] = _mm_extract_epi16(tmpe,0);
yp2[j] = _mm_extract_epi16(tmpe,1);
- // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"init5: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
+#endif
j=pi2_p[6];
s[j] = _mm_extract_epi16(tmpe,2);
yp1[j] = _mm_extract_epi16(tmpe,3);
yp2[j] = _mm_extract_epi16(tmpe,4);
- // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
-
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"init6: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
+#endif
j=pi2_p[7];
s[j] = _mm_extract_epi16(tmpe,5);
yp1[j] = _mm_extract_epi16(tmpe,6);
yp2[j] = _mm_extract_epi16(tmpe,7);
- // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"init7: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]);
+#endif
#elif defined(__arm__)
s[j] = vgetq_lane_s16(yp128[0],0);
@@ -1172,7 +1427,7 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
yp1[i] = *yp;
yp++;
#ifdef DEBUG_LOGMAP
- msg("Term 1 (%d): %d %d\n",i,s[i],yp1[i]);
+ fprintf(fdsse4,"Term 1 (%d): %d %d\n",i,s[i],yp1[i]);
#endif //DEBUG_LOGMAP
}
@@ -1184,12 +1439,12 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
yp2[i-8] = *yp;
yp++;
#ifdef DEBUG_LOGMAP
- msg("Term 2 (%d): %d %d\n",i-3,s[i],yp2[i-8]);
+ fprintf(fdsse4,"Term 2 (%d): %d %d\n",i-3,s[i],yp2[i-8]);
#endif //DEBUG_LOGMAP
}
#ifdef DEBUG_LOGMAP
- msg("\n");
+ fprintf(fdsse4,"\n");
#endif //DEBUG_LOGMAP
stop_meas(init_stats);
@@ -1201,7 +1456,7 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
while (iteration_cnt++ < max_iterations) {
#ifdef DEBUG_LOGMAP
- printf("\n*******************ITERATION %d (n %d), ext %p\n\n",iteration_cnt,n,ext);
+ fprintf(fdsse4,"\n*******************ITERATION %d (n %d), ext %p\n\n",iteration_cnt,n,ext);
#endif //DEBUG_LOGMAP
start_meas(intl1_stats);
@@ -1209,24 +1464,29 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
pi4_p=pi4tab16[iind];
for (i=0; i<(n>>3); i++) { // steady-state portion
+
#if defined(__x86_64__) || defined(__i386__)
- ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],0);
- ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],1);
- ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],2);
- ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],3);
- ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],4);
- ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],5);
- ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],6);
- ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],7);
+ ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],ext[*pi4_p++],0);
+ ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],ext[*pi4_p++],1);
+ ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],ext[*pi4_p++],2);
+ ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],ext[*pi4_p++],3);
+ ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],ext[*pi4_p++],4);
+ ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],ext[*pi4_p++],5);
+ ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],ext[*pi4_p++],6);
+ ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],ext[*pi4_p++],7);
+
#elif defined(__arm__)
- ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],0);
- ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],1);
- ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],2);
- ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],3);
- ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],4);
- ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],5);
- ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],6);
- ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],7);
+ ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(ext[*pi4_p++],((int16x8_t*)systematic2)[i],0);
+ ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(ext[*pi4_p++],((int16x8_t*)systematic2)[i],1);
+ ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(ext[*pi4_p++],((int16x8_t*)systematic2)[i],2);
+ ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(ext[*pi4_p++],((int16x8_t*)systematic2)[i],3);
+ ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(ext[*pi4_p++],((int16x8_t*)systematic2)[i],4);
+ ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(ext[*pi4_p++],((int16x8_t*)systematic2)[i],5);
+ ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(ext[*pi4_p++],((int16x8_t*)systematic2)[i],6);
+ ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(ext[*pi4_p++],((int16x8_t*)systematic2)[i],7);
+#endif
+#ifdef DEBUG_LOGMAP
+ print_shorts("syst2",(int16_t*)&((__m128i *)systematic2)[i]);
#endif
}
@@ -1261,6 +1521,9 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
tmp=vsetq_lane_s16(ext2[*pi5_p++],tmp,6);
tmp=vsetq_lane_s16(ext2[*pi5_p++],tmp,7);
((int16x8_t *)systematic1)[i] = vqaddq_s16(vqsubq_s16(tmp,((int16x8_t*)ext)[i]),((int16x8_t *)systematic0)[i]);
+#endif
+#ifdef DEBUG_LOGMAP
+ print_shorts("syst1",(int16_t*)&((__m128i *)systematic1)[i]);
#endif
}
@@ -1278,6 +1541,9 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
tmp=_mm_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p++],2);
tmp=_mm_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p++],1);
tmp=_mm_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p++],0);
+#ifdef DEBUG_LOGMAP
+ print_shorts("tmp",(int16_t*)&tmp);
+#endif
tmp=_mm_cmpgt_epi8(_mm_packs_epi16(tmp,zeros),zeros);
decoded_bytes[i]=(unsigned char)_mm_movemask_epi8(tmp);
#elif defined(__arm__)
@@ -1297,6 +1563,10 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
uint64x2_t Mask = vpaddlq_u32(vpaddlq_u16(vandq_u16(vcgtq_s16(tmp,zeros), Powers)));
uint64x1_t Mask64 = vget_high_u64(Mask)+vget_low_u64(Mask);
decoded_bytes[i] = (uint8_t)Mask64;
+#endif
+#ifdef DEBUG_LOGMAP
+ print_shorts("tmp",(int16_t*)&tmp);
+ fprintf(fdsse4,"decoded_bytes[%d] %x\n",i,decoded_bytes[i]);
#endif
}
}
@@ -1344,6 +1614,9 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
}
stop_meas(intl2_stats);
+#ifdef DEBUG_LOGMAP
+ fprintf(fdsse4,"oldcrc %x, crc %x\n",oldcrc,crc);
+#endif
if ((crc == oldcrc) && (crc!=0)) {
return(iteration_cnt);
@@ -1374,8 +1647,12 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y,
}
}
}
+
+ // fprintf(fdsse4,"crc %x, oldcrc %x\n",crc,oldcrc);
- // printf("crc %x, oldcrc %x\n",crc,oldcrc);
+#ifdef DEBUG_LOGMAP
+ fclose(fdsse4);
+#endif
#if defined(__x86_64__) || defined(__i386__)
_mm_empty();
diff --git a/openair1/PHY/CODING/Makefile b/openair1/PHY/CODING/Makefile
index b323c479d3..d12689e1cc 100644
--- a/openair1/PHY/CODING/Makefile
+++ b/openair1/PHY/CODING/Makefile
@@ -5,7 +5,7 @@ RATE12CC_SRC = ccoding_byte.c viterbi.c crc_byte.c
all: 3gpplte_sse
3gpplte_sse: $(TURBO_SRC)
- gcc -o 3gpplte_sse 3gpplte_sse.c -msse4 -Wall -g -ggdb -DMAIN
+ gcc -o 3gpplte_sse 3gpplte_sse.c -msse4 -Wall -g -ggdb -DTC_MAIN -I../..
diff --git a/openair1/PHY/CODING/defs.h b/openair1/PHY/CODING/defs.h
index acb6e8dd29..b14cfb1c24 100644
--- a/openair1/PHY/CODING/defs.h
+++ b/openair1/PHY/CODING/defs.h
@@ -483,6 +483,24 @@ uint8_t phy_threegpplte_turbo_decoder16(int16_t *y,
time_stats_t *intl1_stats,
time_stats_t *intl2_stats);
+uint8_t phy_threegpplte_turbo_decoder16avx2(int16_t *y,
+ int16_t *y2,
+ uint8_t *decoded_bytes,
+ uint8_t *decoded_bytes2,
+ uint16_t n,
+ uint16_t interleaver_f1,
+ uint16_t interleaver_f2,
+ uint8_t max_iterations,
+ uint8_t crc_type,
+ uint8_t F,
+ time_stats_t *init_stats,
+ time_stats_t *alpha_stats,
+ time_stats_t *beta_stats,
+ time_stats_t *gamma_stats,
+ time_stats_t *ext_stats,
+ time_stats_t *intl1_stats,
+ time_stats_t *intl2_stats);
+
/*!
\brief This routine performs max-logmap detection for the 3GPP turbo code (with termination). It is optimized for SIMD processing and 8-bit
LLR arithmetic, and requires SSE2,SSSE3 and SSE4.1 (gcc >=4.3 and appropriate CPU)
diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index c819704bd2..2d345f9c8d 100644
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -888,12 +888,16 @@ void phy_init_lte_top(LTE_DL_FRAME_PARMS *lte_frame_parms)
ccodelte_init();
ccodelte_init_inv();
+ treillis_table_init();
+
phy_generate_viterbi_tables();
phy_generate_viterbi_tables_lte();
init_td8();
init_td16();
-
+#ifdef __AVX2__
+ init_td16avx2();
+#endif
lte_sync_time_init(lte_frame_parms);
diff --git a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
index 52f26a2562..ead0ed7d99 100644
--- a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
+++ b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
@@ -38,23 +38,16 @@ extern int card;
#endif
void
-phy_adjust_gain (PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id)
+phy_adjust_gain (PHY_VARS_UE *phy_vars_ue, uint32_t rx_power_fil_dB, uint8_t eNB_id)
{
- uint16_t rx_power_fil_dB;
#ifdef EXMIMO
exmimo_config_t *p_exmimo_config = openair0_exmimo_pci[card].exmimo_config_ptr;
uint16_t i;
#endif
- int rssi;
-
- rssi = dB_fixed(phy_vars_ue->PHY_measurements.rssi);
-
- if (rssi>0) rx_power_fil_dB = rssi;
- else rx_power_fil_dB = phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id];
LOG_D(PHY,"Gain control: rssi %d (%d,%d)\n",
- rssi,
+ rx_power_fil_dB,
phy_vars_ue->PHY_measurements.rssi,
phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id]
);
diff --git a/openair1/PHY/LTE_ESTIMATION/defs.h b/openair1/PHY/LTE_ESTIMATION/defs.h
index 903793c2b5..c20d24e34f 100644
--- a/openair1/PHY/LTE_ESTIMATION/defs.h
+++ b/openair1/PHY/LTE_ESTIMATION/defs.h
@@ -213,6 +213,7 @@ int8_t set_RSRQ_filtered(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index,floa
//! Automatic gain control
void phy_adjust_gain (PHY_VARS_UE *phy_vars_ue,
+ uint32_t rx_power_fil_dB,
unsigned char eNB_id);
int lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB,
diff --git a/openair1/PHY/LTE_ESTIMATION/filt96_32.h b/openair1/PHY/LTE_ESTIMATION/filt96_32.h
index a29a8c26fb..61225974bc 100644
--- a/openair1/PHY/LTE_ESTIMATION/filt96_32.h
+++ b/openair1/PHY/LTE_ESTIMATION/filt96_32.h
@@ -26,187 +26,187 @@
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
-short filt24_0[24] __attribute__((aligned(16))) ={
+short filt24_0[24] __attribute__((aligned(32))) ={
2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_0_dcl[24] __attribute__((aligned(16))) ={
+short filt24_0_dcl[24] __attribute__((aligned(32))) ={
2341,4681,7022,9362,11703,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_0_dcr[24] __attribute__((aligned(16))) ={
+short filt24_0_dcr[24] __attribute__((aligned(32))) ={
2730,5461,8192,10922,13653,16384,14043,11703,9362,7022,4681,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_1[24] __attribute__((aligned(16))) ={
+short filt24_1[24] __attribute__((aligned(32))) ={
0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_1_dcl[24] __attribute__((aligned(16))) ={
+short filt24_1_dcl[24] __attribute__((aligned(32))) ={
0,4681,7022,9362,11703,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_1_dcr[24] __attribute__((aligned(16))) ={
+short filt24_1_dcr[24] __attribute__((aligned(32))) ={
0,2730,5461,8192,10922,13653,16384,14043,11703,9362,7022,4681,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_2[24] __attribute__((aligned(16))) ={
+short filt24_2[24] __attribute__((aligned(32))) ={
0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_2_dcl[24] __attribute__((aligned(16))) ={
+short filt24_2_dcl[24] __attribute__((aligned(32))) ={
0,0,2341,4681,7022,9362, 11703,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_2_dcr[24] __attribute__((aligned(16))) ={
+short filt24_2_dcr[24] __attribute__((aligned(32))) ={
0,0,2730,5461,8192,10922,13653,16384,14043,11703,9362,4681,2341,0,0,0,0,0,0,0,0,0,0,0
};
// X X X Y | X X X X | X Y X X
-short filt24_3[24] __attribute__((aligned(16))) ={
+short filt24_3[24] __attribute__((aligned(32))) ={
0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0
};
-short filt24_3_dcl[24] __attribute__((aligned(16))) ={
+short filt24_3_dcl[24] __attribute__((aligned(32))) ={
0,0,0,2341,4681,7022,9362,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0
};
// X X X Y | X X DC X X | X Y X X
-short filt24_3_dcr[24] __attribute__((aligned(16))) ={
+short filt24_3_dcr[24] __attribute__((aligned(32))) ={
0,0,0,2730,5461,8192,10922,13653,16384,14043,11703,7022,4681,2341,0,0,0,0,0,0,0,0,0,0
};
-short filt24_4[24] __attribute__((aligned(16))) ={
+short filt24_4[24] __attribute__((aligned(32))) ={
0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0
};
-short filt24_4_dcl[24] __attribute__((aligned(16))) ={
+short filt24_4_dcl[24] __attribute__((aligned(32))) ={
0,0,0,0,2341,7022,9362,11703,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0
};
-short filt24_4_dcr[24] __attribute__((aligned(16))) ={
+short filt24_4_dcr[24] __attribute__((aligned(32))) ={
0,0,0,0,2730,5461,8192,10922,13653,16384,14043,11703,7022,4681,2341,0,0,0,0,0,0,0,0,0
};
-short filt24_5[24] __attribute__((aligned(16))) ={
+short filt24_5[24] __attribute__((aligned(32))) ={
0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0
};
// X X X Y | X X DC X X | X Y X X
-short filt24_5_dcl[24] __attribute__((aligned(16))) ={
+short filt24_5_dcl[24] __attribute__((aligned(32))) ={
0,0,0,0,0,2341,4681,9362,11703,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0
};
-short filt24_5_dcr[24] __attribute__((aligned(16))) ={
+short filt24_5_dcr[24] __attribute__((aligned(32))) ={
0,0,0,0,0,2730,5461,8192,10922,13653,16384,11703,9362,7022,4681,2730,0,0,0,0,0,0,0,0
};
-short filt24_6[24] __attribute__((aligned(16))) ={
+short filt24_6[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0
};
-short filt24_6_dcl[24] __attribute__((aligned(16))) ={
+short filt24_6_dcl[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,4681,7022,9362,11703,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0
};
-short filt24_6_dcr[24] __attribute__((aligned(16))) ={
+short filt24_6_dcr[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,14043,11703,9362,7022,4681,0,0,0,0,0,0,0
};
-short filt24_7[24] __attribute__((aligned(16))) ={
+short filt24_7[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0
};
-short filt24_7_dcl[24] __attribute__((aligned(16))) ={
+short filt24_7_dcl[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,0,4681,7022,9362,11703,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0
};
-short filt24_7_dcr[24] __attribute__((aligned(16))) ={
+short filt24_7_dcr[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,14043,11703,9362,7022,4681,0,0,0,0,0,0
};
-short filt24_0l[24] __attribute__((aligned(16))) ={
+short filt24_0l[24] __attribute__((aligned(32))) ={
30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_1l[24] __attribute__((aligned(16))) ={
+short filt24_1l[24] __attribute__((aligned(32))) ={
0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_2l[24] __attribute__((aligned(16))) ={
+short filt24_2l[24] __attribute__((aligned(32))) ={
0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_3l[24] __attribute__((aligned(16))) ={
+short filt24_3l[24] __attribute__((aligned(32))) ={
//0,0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0};
0,0,0,0,0,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0
};
-short filt24_4l[24] __attribute__((aligned(16))) ={
+short filt24_4l[24] __attribute__((aligned(32))) ={
0,0,0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0
};
-short filt24_5l[24] __attribute__((aligned(16))) ={
+short filt24_5l[24] __attribute__((aligned(32))) ={
0,0,0,0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0
};
-short filt24_6l[24] __attribute__((aligned(16))) ={
+short filt24_6l[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0
};
-short filt24_7l[24] __attribute__((aligned(16))) ={
+short filt24_7l[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0
};
-short filt24_0l2[24] __attribute__((aligned(16))) ={
+short filt24_0l2[24] __attribute__((aligned(32))) ={
2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_1l2[24] __attribute__((aligned(16))) ={
+short filt24_1l2[24] __attribute__((aligned(32))) ={
0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_2l2[24] __attribute__((aligned(16))) ={
+short filt24_2l2[24] __attribute__((aligned(32))) ={
-2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_3l2[24] __attribute__((aligned(16))) ={
+short filt24_3l2[24] __attribute__((aligned(32))) ={
-5461,-2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0
};
-short filt24_4l2[24] __attribute__((aligned(16))) ={
+short filt24_4l2[24] __attribute__((aligned(32))) ={
-8192,-5461,-2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0
};
-short filt24_5l2[24] __attribute__((aligned(16))) ={
+short filt24_5l2[24] __attribute__((aligned(32))) ={
0,-8192,-5461,-2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0
};
-short filt24_6l2[24] __attribute__((aligned(16))) ={
+short filt24_6l2[24] __attribute__((aligned(32))) ={
-13653,-10922,-8192,-5461,-2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0
};
-short filt24_7l2[24] __attribute__((aligned(16))) ={
+short filt24_7l2[24] __attribute__((aligned(32))) ={
0,-13653,-10922,-8192,-5461,-2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0
};
-short filt24_0r[24] __attribute__((aligned(16))) ={
+short filt24_0r[24] __attribute__((aligned(32))) ={
2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_1r[24] __attribute__((aligned(16))) ={
+short filt24_1r[24] __attribute__((aligned(32))) ={
0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_2r[24] __attribute__((aligned(16))) ={
+short filt24_2r[24] __attribute__((aligned(32))) ={
0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0,0,0,0
};
-short filt24_3r[24] __attribute__((aligned(16))) ={
+short filt24_3r[24] __attribute__((aligned(32))) ={
0,0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0,0,0
};
-short filt24_4r[24] __attribute__((aligned(16))) ={
+short filt24_4r[24] __attribute__((aligned(32))) ={
0,0,0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0,0
};
-short filt24_5r[24] __attribute__((aligned(16))) ={
+short filt24_5r[24] __attribute__((aligned(32))) ={
0,0,0,0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0
};
-short filt24_6r[24] __attribute__((aligned(16))) ={
+short filt24_6r[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0
};
-short filt24_7r[24] __attribute__((aligned(16))) ={
+short filt24_7r[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0
};
-short filt24_0r2[24] __attribute__((aligned(16))) ={ /****/
+short filt24_0r2[24] __attribute__((aligned(32))) ={ /****/
2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0,0,0,0,0,0
};
-short filt24_1r2[24] __attribute__((aligned(16))) ={
+short filt24_1r2[24] __attribute__((aligned(32))) ={
0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0,0,0,0,0
};
-short filt24_2r2[24] __attribute__((aligned(16))) ={
+short filt24_2r2[24] __attribute__((aligned(32))) ={
0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0,0,0,0
};
-short filt24_3r2[24] __attribute__((aligned(16))) ={
+short filt24_3r2[24] __attribute__((aligned(32))) ={
0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0,0,0
};
-short filt24_4r2[24] __attribute__((aligned(16))) ={
+short filt24_4r2[24] __attribute__((aligned(32))) ={
0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0,0
};
-short filt24_5r2[24] __attribute__((aligned(16))) ={
+short filt24_5r2[24] __attribute__((aligned(32))) ={
0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0
};
-short filt24_6r2[24] __attribute__((aligned(16))) ={
+short filt24_6r2[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0
};
-short filt24_7r2[24] __attribute__((aligned(16))) ={
+short filt24_7r2[24] __attribute__((aligned(32))) ={
0,0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653
};
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
index cfc2d929f1..bfbe94bb61 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
@@ -203,8 +203,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
multadd_complex_vector_real_scalar(dl_ch-(phy_vars_ue->lte_frame_parms.ofdm_symbol_size<<1),
phy_vars_ue->ch_est_alpha,dl_ch-(phy_vars_ue->lte_frame_parms.ofdm_symbol_size<<1),
1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size);
-
-
+#ifdef DEBUG_CH
+ printf("k %d, first_carrier %d\n",k,phy_vars_ue->lte_frame_parms.first_carrier_offset);
+#endif
if ((phy_vars_ue->lte_frame_parms.N_RB_DL==6) ||
(phy_vars_ue->lte_frame_parms.N_RB_DL==50) ||
(phy_vars_ue->lte_frame_parms.N_RB_DL==100)) {
@@ -213,7 +214,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
// Treat first 2 pilots specially (left edge)
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
- // printf("pilot 0 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
+#ifdef DEBUG_CH
+ printf("pilot 0 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
+#endif
multadd_real_vector_complex_scalar(fl,
ch,
dl_ch,
@@ -224,7 +227,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
- // printf("pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
+#ifdef DEBUG_CH
+ printf("pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
+#endif
multadd_real_vector_complex_scalar(f2l2,
ch,
dl_ch,
@@ -235,15 +240,13 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
for (pilot_cnt=2; pilot_cnt<((phy_vars_ue->lte_frame_parms.N_RB_DL)-1); pilot_cnt+=2) {
- // printf("%d\n",dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]);
-
- // printf("pilot[%d][%d] (%d,%d)\n",p,pilot_cnt,pil[0],pil[1]);
- // printf("rx[%d] -> (%d,%d)\n", k, rxF[0], rxF[1]);
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); //Re
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); //Im
- // printf("**rb %d %d\n",rb,dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]);
+#ifdef DEBUG_CH
+ printf("pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
+#endif
multadd_real_vector_complex_scalar(f,
ch,
dl_ch,
@@ -254,13 +257,11 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
rxF+=12;
dl_ch+=8;
- // printf("pilot[%d][%d] (%d,%d)\n",p,rb,pil[0],pil[1]);
- // printf("rx[%d] -> (%d,%d)\n", k+6, rxF[0], rxF[1]);
-
-
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
- // printf("**rb %d %d\n",rb,dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]);
+#ifdef DEBUG_CH
+ printf("pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+1,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
+#endif
multadd_real_vector_complex_scalar(f2,
ch,
dl_ch,
@@ -281,15 +282,17 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
rxF = (int16_t *)&rxdataF[aarx][((symbol_offset+1+k))];
+#ifdef DEBUG_CH
+ printf("second half k %d\n",k);
+#endif
for (pilot_cnt=0; pilot_cnt<((phy_vars_ue->lte_frame_parms.N_RB_DL)-3); pilot_cnt+=2) {
- // printf("pilot[%d][%d] (%d,%d)\n",p,pilot_cnt,pil[0],pil[1]);
- // printf("rx[%d] -> (%d,%d)\n", k+6, rxF[0], rxF[1]);
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
-
- // printf("**rb %d %d\n",rb,dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]);
+#ifdef DEBUG_CH
+ printf("pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
+#endif
multadd_real_vector_complex_scalar(f,
ch,
dl_ch,
@@ -300,8 +303,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
-
- // printf("**rb %d %d\n",rb,dl_ch-(int16_T *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]);
+#ifdef DEBUG_CH
+ printf("pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+1,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
+#endif
multadd_real_vector_complex_scalar(f2,
ch,
dl_ch,
@@ -314,8 +318,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
- // printf("pilot 49: rxF -> (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
-
+#ifdef DEBUG_CH
+ printf("pilot %d: rxF -> (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
+#endif
multadd_real_vector_complex_scalar(fr,
ch,
dl_ch,
@@ -326,7 +331,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15);
- // printf("pilot 50: rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
+#ifdef DEBUG_CH
+ printf("pilot %d: rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+1,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
+#endif
multadd_real_vector_complex_scalar(f2r2,
ch,
dl_ch,
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
index e45ca86453..4e81c912b3 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
@@ -52,8 +52,8 @@
int* sync_corr_ue0 = NULL;
int* sync_corr_ue1 = NULL;
int* sync_corr_ue2 = NULL;
-int sync_tmp[2048*4] __attribute__((aligned(16)));
-short syncF_tmp[2048*2] __attribute__((aligned(16)));
+int sync_tmp[2048*4] __attribute__((aligned(32)));
+short syncF_tmp[2048*2] __attribute__((aligned(32)));
@@ -485,13 +485,10 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
*eNB_id = sync_source;
+ LOG_D(PHY,"[UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d (%d dB)\n",sync_source,peak_pos,peak_val,dB_fixed(peak_val)/2);
+
+
#ifdef DEBUG_PHY
- msg("[PHY][UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d\n",
- sync_source,peak_pos,peak_val);
-
-
-
-
if (debug_cnt == 0) {
write_output("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2);
write_output("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2);
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c
index 493583214a..74b46c5eb6 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c
@@ -56,8 +56,8 @@ void lte_sync_timefreq(PHY_VARS_UE *ue,int band,unsigned int DL_freq)
{
#if defined(__x86_64__) || defined(__i386__)
UE_SCAN_INFO_t *scan_info = &ue->scan_info[band];
- int16_t spectrum[12288] __attribute__((aligned(16)));
- int16_t spectrum_p5ms[12288] __attribute__((aligned(16)));
+ int16_t spectrum[12288] __attribute__((aligned(32)));
+ int16_t spectrum_p5ms[12288] __attribute__((aligned(32)));
int i,f,band_idx;
__m128i autocorr0[256/4],autocorr1[256/4],autocorr2[256/4];
__m128i autocorr0_t[256/4],autocorr1_t[256/4],autocorr2_t[256/4];
diff --git a/openair1/PHY/LTE_REFSIG/lte_gold.c b/openair1/PHY/LTE_REFSIG/lte_gold.c
index 567851a51a..bfd6716640 100644
--- a/openair1/PHY/LTE_REFSIG/lte_gold.c
+++ b/openair1/PHY/LTE_REFSIG/lte_gold.c
@@ -61,21 +61,18 @@ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14]
x2 = Ncp +
(Nid_cell<<1) +
- (((1+(Nid_cell<<1))*(1 + (((frame_parms->Ncp==0)?4:3)*l) + (7*(1+ns))))<<10); //cinit
+ (((1+(Nid_cell<<1))*(1 + (((frame_parms->Ncp==0)?4:3)*l) + (7*(1+ns))))<<10); //cinit
//x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit
//n = 0
- // printf("cinit (ns %d, l %d) => %d\n",ns,l,x2);
x1 = 1+ (1<<31);
x2=x2 ^ ((x2 ^ (x2>>1) ^ (x2>>2) ^ (x2>>3))<<31);
// skip first 50 double words (1600 bits)
- //printf("n=0 : x1 %x, x2 %x\n",x1,x2);
for (n=1; n<50; n++) {
x1 = (x1>>1) ^ (x1>>4);
x1 = x1 ^ (x1<<31) ^ (x1<<28);
x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4);
x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28);
- // printf("x1 : %x, x2 : %x\n",x1,x2);
}
for (n=0; n<14; n++) {
@@ -84,7 +81,6 @@ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14]
x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4);
x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28);
lte_gold_table[ns][l][n] = x1^x2;
- // printf("n=%d : c %x\n",n,x1^x2);
}
}
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index 3d8724fd4f..26c5d3667d 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -4467,7 +4467,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
dlsch[0]->g_pucch += delta_PUCCH_lut[TPC&3];
if (TPC!=1)
- LOG_I(PHY,"format1 TPC %d, dlsch0_harq->delta_PUCCH %d\n",TPC,dlsch0_harq->delta_PUCCH);
+ LOG_D(PHY,"format1 TPC %d, dlsch0_harq->delta_PUCCH %d\n",TPC,dlsch0_harq->delta_PUCCH);
dlsch0_harq->rvidx = rv;
@@ -4476,7 +4476,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
dlsch0_harq->dl_power_off = 1; //no power offset
- LOG_D(PHY,"UE (%x/%d): Subframe %d Format2 DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d\n",dlsch[0]->rnti,harq_pid,subframe,ndi,dlsch0_harq->DCINdi,
+ LOG_D(PHY,"UE (%x/%d): Subframe %d Format1 DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d\n",dlsch[0]->rnti,harq_pid,subframe,ndi,dlsch0_harq->DCINdi,
dlsch0_harq->first_tx,dlsch0_harq->status);
// printf("Format2 DCI (UE, hard pid %d): ndi %d, old_ndi %d (first tx %d)\n",harq_pid,ndi,dlsch0_harq->DCINdi,
diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h
index 3cd608aa14..6c758b1c22 100644
--- a/openair1/PHY/LTE_TRANSPORT/defs.h
+++ b/openair1/PHY/LTE_TRANSPORT/defs.h
@@ -572,6 +572,10 @@ typedef struct {
vrb_t vrb_type;
/// downlink power offset field
uint8_t dl_power_off;
+ /// trials per round statistics
+ uint32_t trials[8];
+ /// error statistics per round
+ uint32_t errors[8];
} LTE_DL_UE_HARQ_t;
typedef struct {
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
index efcd868338..2e8d70102f 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
@@ -117,7 +117,7 @@ LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_
dlsch->max_turbo_iterations = max_turbo_iterations;
for (i=0; iharq_processes[i] = (LTE_DL_UE_HARQ_t *)malloc16(sizeof(LTE_DL_UE_HARQ_t));
if (dlsch->harq_processes[i]) {
@@ -156,7 +156,7 @@ LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_
return(dlsch);
}
- msg("new_ue_dlsch with size %zu: exit_flag = %u\n",sizeof(LTE_DL_UE_HARQ_t), exit_flag);
+ printf("new_ue_dlsch with size %zu: exit_flag = %u\n",sizeof(LTE_DL_UE_HARQ_t), exit_flag);
free_ue_dlsch(dlsch);
return(NULL);
@@ -187,6 +187,27 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
uint8_t crc_type;
#ifdef DEBUG_DLSCH_DECODING
uint16_t i;
+#endif
+#ifdef __AVX2__
+ int Kr_last,skipped_last=0;
+ uint8_t (*tc_2cw)(int16_t *y,
+ int16_t *y2,
+ uint8_t *,
+ uint8_t *,
+ uint16_t,
+ uint16_t,
+ uint16_t,
+ uint8_t,
+ uint8_t,
+ uint8_t,
+ time_stats_t *,
+ time_stats_t *,
+ time_stats_t *,
+ time_stats_t *,
+ time_stats_t *,
+ time_stats_t *,
+ time_stats_t *);
+
#endif
uint8_t (*tc)(int16_t *y,
uint8_t *,
@@ -204,28 +225,35 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
time_stats_t *,
time_stats_t *);
+
+
+
if (!dlsch_llr) {
- msg("dlsch_decoding.c: NULL dlsch_llr pointer\n");
+ printf("dlsch_decoding.c: NULL dlsch_llr pointer\n");
return(dlsch->max_turbo_iterations);
}
if (!harq_process) {
- msg("dlsch_decoding.c: NULL harq_process pointer\n");
+ printf("dlsch_decoding.c: NULL harq_process pointer\n");
return(dlsch->max_turbo_iterations);
}
if (!frame_parms) {
- msg("dlsch_decoding.c: NULL frame_parms pointer\n");
+ printf("dlsch_decoding.c: NULL frame_parms pointer\n");
return(dlsch->max_turbo_iterations);
}
if (subframe>9) {
- msg("dlsch_decoding.c: Illegal subframe index %d\n",subframe);
+ printf("dlsch_decoding.c: Illegal subframe index %d\n",subframe);
return(dlsch->max_turbo_iterations);
}
- if (llr8_flag == 0)
+ if (llr8_flag == 0) {
+#ifdef __AVX2__
+ tc_2cw = phy_threegpplte_turbo_decoder16avx2;
+#endif
tc = phy_threegpplte_turbo_decoder16;
+ }
else
tc = phy_threegpplte_turbo_decoder8;
@@ -233,16 +261,19 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
/*
if (nb_rb > frame_parms->N_RB_DL) {
- msg("dlsch_decoding.c: Illegal nb_rb %d\n",nb_rb);
+ printf("dlsch_decoding.c: Illegal nb_rb %d\n",nb_rb);
return(max_turbo_iterations);
}*/
/*harq_pid = dlsch->current_harq_pid;
if (harq_pid >= 8) {
- msg("dlsch_decoding.c: Illegal harq_pid %d\n",harq_pid);
+ printf("dlsch_decoding.c: Illegal harq_pid %d\n",harq_pid);
return(max_turbo_iterations);
}
*/
+
+ harq_process->trials[harq_process->round]++;
+
A = harq_process->TBS; //2072 for QPSK 1/3
ret = dlsch->max_turbo_iterations;
@@ -251,7 +282,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
G = harq_process->G;
//get_G(frame_parms,nb_rb,dlsch->rb_alloc,mod_order,num_pdcch_symbols,phy_vars_ue->frame,subframe);
- // msg("DLSCH Decoding, harq_pid %d Ndi %d\n",harq_pid,harq_process->Ndi);
+ // printf("DLSCH Decoding, harq_pid %d Ndi %d\n",harq_pid,harq_process->Ndi);
if (harq_process->round == 0) {
// This is a new packet, so compute quantities regarding segmentation
@@ -270,7 +301,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
/*
else {
- msg("dlsch_decoding.c: Ndi>0 not checked yet!!\n");
+ printf("dlsch_decoding.c: Ndi>0 not checked yet!!\n");
return(max_turbo_iterations);
}
*/
@@ -297,10 +328,14 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
break;
}
- if (harq_process->C >= MAX_NUM_DLSCH_SEGMENTS/bw_scaling) {
+ if (harq_process->C > MAX_NUM_DLSCH_SEGMENTS/bw_scaling) {
LOG_E(PHY,"Illegal harq_process->C %d > %d\n",harq_process->C,MAX_NUM_DLSCH_SEGMENTS/bw_scaling);
return((1+dlsch->max_turbo_iterations));
}
+#ifdef DEBUG_DLSCH_DECODING
+ printf("Segmentation: C %d, Cminus %d, Kminus %d, Kplus %d\n",harq_process->C,harq_process->Cminus,harq_process->Kminus,harq_process->Kplus);
+#endif
+
for (r=0; rC; r++) {
@@ -321,7 +356,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
else if (Kr_bytes <= 768)
iind = 123 + ((Kr_bytes-256)>>3);
else {
- msg("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes);
+ printf("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes);
return(dlsch->max_turbo_iterations);
}
@@ -415,15 +450,12 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
printf("\n");
*/
+ //#ifndef __AVX2__
+#if 1
if (err_flag == 0) {
start_meas(dlsch_turbo_decoding_stats);
-#ifdef TURBO_S
- ret = phy_threegpplte_turbo_decoder_scalar
-#else
-
ret = tc
-#endif
(&harq_process->d[r][96],
harq_process->c[r],
Kr,
@@ -443,7 +475,130 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
stop_meas(dlsch_turbo_decoding_stats);
}
+#else
+ if ((harq_process->C == 1) ||
+ ((r==harq_process->C-1) && (skipped_last==0))) { // last segment with odd number of segments
+ start_meas(dlsch_turbo_decoding_stats);
+ ret = tc
+ (&harq_process->d[r][96],
+ harq_process->c[r],
+ Kr,
+ f1f2mat_old[iind*2],
+ f1f2mat_old[(iind*2)+1],
+ dlsch->max_turbo_iterations,
+ crc_type,
+ (r==0) ? harq_process->F : 0,
+ &phy_vars_ue->dlsch_tc_init_stats,
+ &phy_vars_ue->dlsch_tc_alpha_stats,
+ &phy_vars_ue->dlsch_tc_beta_stats,
+ &phy_vars_ue->dlsch_tc_gamma_stats,
+ &phy_vars_ue->dlsch_tc_ext_stats,
+ &phy_vars_ue->dlsch_tc_intl1_stats,
+ &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
+ stop_meas(dlsch_turbo_decoding_stats);
+ // printf("single decode, exit\n");
+ // exit(-1);
+ }
+ else {
+ // we can merge code segments
+ if ((skipped_last == 0) && (rC-1)) {
+ skipped_last = 1;
+ Kr_last = Kr;
+ }
+ else {
+ skipped_last=0;
+
+ if (Kr_last == Kr) { // decode 2 code segments with AVX2 version
+#ifdef DEBUG_DLSCH_DECODING
+ printf("single decoding segment %d (%p)\n",r-1,&harq_process->d[r-1][96]);
+#endif
+ start_meas(dlsch_turbo_decoding_stats);
+#ifdef DEBUG_DLSCH_DECODING
+ printf("double decoding segments %d,%d (%p,%p)\n",r-1,r,&harq_process->d[r-1][96],&harq_process->d[r][96]);
+#endif
+ ret = tc_2cw
+ (&harq_process->d[r-1][96],
+ &harq_process->d[r][96],
+ harq_process->c[r-1],
+ harq_process->c[r],
+ Kr,
+ f1f2mat_old[iind*2],
+ f1f2mat_old[(iind*2)+1],
+ dlsch->max_turbo_iterations,
+ crc_type,
+ (r==0) ? harq_process->F : 0,
+ &phy_vars_ue->dlsch_tc_init_stats,
+ &phy_vars_ue->dlsch_tc_alpha_stats,
+ &phy_vars_ue->dlsch_tc_beta_stats,
+ &phy_vars_ue->dlsch_tc_gamma_stats,
+ &phy_vars_ue->dlsch_tc_ext_stats,
+ &phy_vars_ue->dlsch_tc_intl1_stats,
+ &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
+ /*
+ ret = tc
+ (&harq_process->d[r-1][96],
+ harq_process->c[r-1],
+ Kr_last,
+ f1f2mat_old[iind*2],
+ f1f2mat_old[(iind*2)+1],
+ dlsch->max_turbo_iterations,
+ crc_type,
+ (r==0) ? harq_process->F : 0,
+ &phy_vars_ue->dlsch_tc_init_stats,
+ &phy_vars_ue->dlsch_tc_alpha_stats,
+ &phy_vars_ue->dlsch_tc_beta_stats,
+ &phy_vars_ue->dlsch_tc_gamma_stats,
+ &phy_vars_ue->dlsch_tc_ext_stats,
+ &phy_vars_ue->dlsch_tc_intl1_stats,
+ &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
+
+ exit(-1);*/
+ stop_meas(dlsch_turbo_decoding_stats);
+ }
+ else { // Kr_last != Kr
+ start_meas(dlsch_turbo_decoding_stats);
+ ret = tc
+ (&harq_process->d[r-1][96],
+ harq_process->c[r-1],
+ Kr_last,
+ f1f2mat_old[iind*2],
+ f1f2mat_old[(iind*2)+1],
+ dlsch->max_turbo_iterations,
+ crc_type,
+ (r==0) ? harq_process->F : 0,
+ &phy_vars_ue->dlsch_tc_init_stats,
+ &phy_vars_ue->dlsch_tc_alpha_stats,
+ &phy_vars_ue->dlsch_tc_beta_stats,
+ &phy_vars_ue->dlsch_tc_gamma_stats,
+ &phy_vars_ue->dlsch_tc_ext_stats,
+ &phy_vars_ue->dlsch_tc_intl1_stats,
+ &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
+ stop_meas(dlsch_turbo_decoding_stats);
+
+ start_meas(dlsch_turbo_decoding_stats);
+ ret = tc
+ (&harq_process->d[r][96],
+ harq_process->c[r],
+ Kr,
+ f1f2mat_old[iind*2],
+ f1f2mat_old[(iind*2)+1],
+ dlsch->max_turbo_iterations,
+ crc_type,
+ (r==0) ? harq_process->F : 0,
+ &phy_vars_ue->dlsch_tc_init_stats,
+ &phy_vars_ue->dlsch_tc_alpha_stats,
+ &phy_vars_ue->dlsch_tc_beta_stats,
+ &phy_vars_ue->dlsch_tc_gamma_stats,
+ &phy_vars_ue->dlsch_tc_ext_stats,
+ &phy_vars_ue->dlsch_tc_intl1_stats,
+ &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
+ stop_meas(dlsch_turbo_decoding_stats);
+
+ }
+ }
+ }
+#endif
if ((err_flag == 0) && (ret>=(1+dlsch->max_turbo_iterations))) {// a Code segment is in error so break;
@@ -457,6 +612,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
dlsch->harq_ack[subframe].ack = 0;
dlsch->harq_ack[subframe].harq_id = harq_pid;
dlsch->harq_ack[subframe].send_harq_status = 1;
+ harq_process->errors[harq_process->round]++;
harq_process->round++;
// LOG_D(PHY,"[UE %d] DLSCH: Setting NACK for subframe %d (pid %d, round %d)\n",phy_vars_ue->Mod_id,subframe,harq_pid,harq_process->round);
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
index de9acefb6e..19ce6b9edc 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
@@ -281,7 +281,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
// avgs = cmax(avgs,avg[(aarx<<1)+aatx]);
- lte_ue_pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2);
+ lte_ue_pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2)+1;
// + log2_approx(frame_parms->nb_antennas_tx_eNB-1) //-1 because log2_approx counts the number of bits
// + log2_approx(frame_parms->nb_antennas_rx-1);
@@ -1898,17 +1898,17 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
for (aarx=0; aarxnb_antennas_rx; aarx++) {
- dl_ch0_128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
- dl_ch1_128 = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
+ dl_ch0_128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; // hr,0
+ dl_ch1_128 = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; // hr,1
dl_ch_mag0_128 = (__m128i *)&dl_ch_mag0[aarx][symbol*frame_parms->N_RB_DL*12];
dl_ch_mag0_128b = (__m128i *)&dl_ch_magb0[aarx][symbol*frame_parms->N_RB_DL*12];
dl_ch_mag1_128 = (__m128i *)&dl_ch_mag1[aarx][symbol*frame_parms->N_RB_DL*12];
dl_ch_mag1_128b = (__m128i *)&dl_ch_magb1[aarx][symbol*frame_parms->N_RB_DL*12];
- rxdataF128 = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12];
- rxdataF_comp0_128 = (__m128i *)&rxdataF_comp0[aarx][symbol*frame_parms->N_RB_DL*12];
- rxdataF_comp1_128 = (__m128i *)&rxdataF_comp1[aarx][symbol*frame_parms->N_RB_DL*12];
+ rxdataF128 = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; // yr
+ rxdataF_comp0_128 = (__m128i *)&rxdataF_comp0[aarx][symbol*frame_parms->N_RB_DL*12]; // yr,0 = yr * conj(hr,0)
+ rxdataF_comp1_128 = (__m128i *)&rxdataF_comp1[aarx][symbol*frame_parms->N_RB_DL*12]; // yr,1 = yr * conj(hr,1)
for (rb=0; rblte_frame_parms;
- int i;
int ret=-1;
int aarx,rx_power=0;
/*#ifdef OAI_USRP
@@ -309,34 +308,6 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
LOG_I(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",phy_vars_ue->Mod_id,sync_pos,phy_vars_ue->lte_ue_common_vars.eNb_id);
#endif
-
- for (aarx=0; aarxnb_antennas_rx; aarx++)
- rx_power += signal_energy(&phy_vars_ue->lte_ue_common_vars.rxdata[aarx][sync_pos2],
- frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples);
-
- phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] = dB_fixed(rx_power/frame_parms->nb_antennas_rx);
-
-#ifdef DEBUG_INITIAL_SYNCH
- LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",phy_vars_ue->Mod_id,phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] );
-#endif
-
-#ifdef EXMIMO
-
- if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
- (mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
- //phy_adjust_gain(phy_vars_ue,0);
- gain_control_all(phy_vars_ue->PHY_measurements.rx_power_avg_dB[0],0);
-
-#else
-#ifndef OAI_USRP
-#ifndef OAI_BLADERF
-#ifndef OAI_LMSSDR
- phy_adjust_gain(phy_vars_ue,0);
-#endif
-#endif
-#endif
-#endif
-
// SSS detection
// PSS is hypothesized in last symbol of first slot in Frame
@@ -525,20 +496,20 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
#endif
if (phy_vars_ue->UE_scan_carrier == 0) {
-#ifdef OPENAIR2
- LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",phy_vars_ue->Mod_id);
- //mac_resynch();
- mac_xface->dl_phy_sync_success(phy_vars_ue->Mod_id,phy_vars_ue->frame_rx,0,1);//phy_vars_ue->lte_ue_common_vars.eNb_id);
-#endif //OPENAIR2
-
+ if (phy_vars_ue->mac_enabled==1) {
+ LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",phy_vars_ue->Mod_id);
+ //mac_resynch();
+ mac_xface->dl_phy_sync_success(phy_vars_ue->Mod_id,phy_vars_ue->frame_rx,0,1);//phy_vars_ue->lte_ue_common_vars.eNb_id);
+ phy_vars_ue->UE_mode[0] = PRACH;
+ }
+ else {
+ phy_vars_ue->UE_mode[0] = PUSCH;
+ }
+
generate_pcfich_reg_mapping(frame_parms);
generate_phich_reg_mapping(frame_parms);
// init_prach625(frame_parms);
-#ifndef OPENAIR2
- phy_vars_ue->UE_mode[0] = PUSCH;
-#else
- phy_vars_ue->UE_mode[0] = PRACH;
-#endif
+
//phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors=0;
phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors_conseq=0;
//phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors_last=0;
@@ -592,6 +563,65 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode)
}
+ // gain control
+ if (ret!=0) { //we are not synched, so we cannot use rssi measurement (which is based on channel estimates)
+ rx_power = 0;
+
+ // do a measurement on the best guess of the PSS
+ for (aarx=0; aarxnb_antennas_rx; aarx++)
+ rx_power += signal_energy(&phy_vars_ue->lte_ue_common_vars.rxdata[aarx][sync_pos2],
+ frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples);
+
+ /*
+ // do a measurement on the full frame
+ for (aarx=0; aarxnb_antennas_rx; aarx++)
+ rx_power += signal_energy(&phy_vars_ue->lte_ue_common_vars.rxdata[aarx][0],
+ frame_parms->samples_per_tti*10);
+ */
+
+ // we might add a low-pass filter here later
+ phy_vars_ue->PHY_measurements.rx_power_avg[0] = rx_power/frame_parms->nb_antennas_rx;
+
+ phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] = dB_fixed(phy_vars_ue->PHY_measurements.rx_power_avg[0]);
+
+#ifdef DEBUG_INITIAL_SYNCH
+ LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",phy_vars_ue->Mod_id,phy_vars_ue->PHY_measurements.rx_power_avg_dB[0] );
+#endif
+
+#ifdef EXMIMO
+ if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
+ (mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
+ //phy_adjust_gain(phy_vars_ue,0);
+ gain_control_all(phy_vars_ue->PHY_measurements.rx_power_avg_dB[0],0);
+
+#else
+#ifndef OAI_USRP
+#ifndef OAI_BLADERF
+#ifndef OAI_LMSSDR
+ phy_adjust_gain(phy_vars_ue,phy_vars_ue->PHY_measurements.rx_power_avg_dB[0],0);
+#endif
+#endif
+#endif
+#endif
+ }
+ else {
+#ifdef EXMIMO
+ if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
+ (mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
+ //phy_adjust_gain(phy_vars_ue,0);
+ gain_control_all(dB_fixed(phy_vars_ue->PHY_measurements.rssi),0);
+
+#else
+#ifndef OAI_USRP
+#ifndef OAI_BLADERF
+#ifndef OAI_LMSSDR
+ phy_adjust_gain(phy_vars_ue,dB_fixed(phy_vars_ue->PHY_measurements.rssi),0);
+#endif
+#endif
+#endif
+#endif
+ }
+
// exit_fun("debug exit");
return ret;
}
diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c
index 25ecc392e8..e38015b65e 100644
--- a/openair1/PHY/LTE_TRANSPORT/prach.c
+++ b/openair1/PHY/LTE_TRANSPORT/prach.c
@@ -608,7 +608,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
uint8_t preamble_index = phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex;
uint8_t tdd_mapindex = phy_vars_ue->prach_resources[eNB_id]->ra_TDD_map_index;
int16_t *prachF = phy_vars_ue->lte_ue_prach_vars[eNB_id]->prachF;
- static int16_t prach_tmp[45600*2] __attribute__((aligned(16)));
+ static int16_t prach_tmp[45600*2] __attribute__((aligned(32)));
int16_t *prach = prach_tmp;
int16_t *prach2;
int16_t amp = phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp;
diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c
index 4a953e71e0..839bc68190 100644
--- a/openair1/PHY/LTE_TRANSPORT/print_stats.c
+++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c
@@ -61,6 +61,7 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
uint8_t eNB=0;
uint32_t RRC_status;
int len=length;
+ int harq_pid,round;
if (phy_vars_ue==NULL)
return 0;
@@ -107,10 +108,10 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
len += sprintf(&buffer[len], "[UE PROC] timing_advance = %d\n",phy_vars_ue->timing_advance);
if (phy_vars_ue->UE_mode[0]==PUSCH) {
len += sprintf(&buffer[len], "[UE PROC] Po_PUSCH = %d dBm (PL %d dB, Po_NOMINAL_PUSCH %d dBm, PHR %d dB)\n",
- PHY_vars_UE_g[0][0]->ulsch_ue[0]->Po_PUSCH,
+ phy_vars_ue->ulsch_ue[0]->Po_PUSCH,
get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,0),
- mac_xface->get_Po_NOMINAL_PUSCH(phy_vars_ue->Mod_id,0),
- PHY_vars_UE_g[0][0]->ulsch_ue[0]->PHR);
+ phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUSCH,
+ phy_vars_ue->ulsch_ue[0]->PHR);
len += sprintf(&buffer[len], "[UE PROC] Po_PUCCH = %d dBm (Po_NOMINAL_PUCCH %d dBm, g_pucch %d dB)\n",
get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,0)+
phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH+
@@ -488,13 +489,27 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
if (phy_vars_ue->transmission_mode[eNB] == 6)
len += sprintf(&buffer[len], "[UE PROC] Mode 6 Wideband CQI eNB %d : %d dB\n",eNB,phy_vars_ue->PHY_measurements.precoded_cqi_dB[eNB][0]);
+ for (harq_pid=0;harq_pid<8;harq_pid++) {
+ len+=sprintf(&buffer[len],"[UE PROC] eNB %d: CW 0 harq_pid %d, mcs %d:",eNB,harq_pid,phy_vars_ue->dlsch_ue[0][0]->harq_processes[harq_pid]->mcs);
+ for (round=0;round<8;round++)
+ len+=sprintf(&buffer[len],"%d/%d ",
+ phy_vars_ue->dlsch_ue[0][0]->harq_processes[harq_pid]->errors[round],
+ phy_vars_ue->dlsch_ue[0][0]->harq_processes[harq_pid]->trials[round]);
+ len+=sprintf(&buffer[len],"\n");
+ }
if (phy_vars_ue->dlsch_ue[0] && phy_vars_ue->dlsch_ue[0][0] && phy_vars_ue->dlsch_ue[0][1]) {
len += sprintf(&buffer[len], "[UE PROC] Saved PMI for DLSCH eNB %d : %jx (%p)\n",eNB,pmi2hex_2Ar1(phy_vars_ue->dlsch_ue[0][0]->pmi_alloc),phy_vars_ue->dlsch_ue[0][0]);
len += sprintf(&buffer[len], "[UE PROC] eNB %d: dl_power_off = %d\n",eNB,phy_vars_ue->dlsch_ue[0][0]->harq_processes[0]->dl_power_off);
- len += sprintf(&buffer[len], "[UE PROC] DL mcs1 (dlsch cw1) %d\n",phy_vars_ue->dlsch_ue[0][0]->harq_processes[0]->mcs);
- len += sprintf(&buffer[len], "[UE PROC] DL mcs2 (dlsch cw2) %d\n",phy_vars_ue->dlsch_ue[0][1]->harq_processes[0]->mcs);
+ for (harq_pid=0;harq_pid<8;harq_pid++) {
+ len+=sprintf(&buffer[len],"[UE PROC] eNB %d: CW 1 harq_pid %d, mcs %d:",eNB,harq_pid,phy_vars_ue->dlsch_ue[0][1]->harq_processes[0]->mcs);
+ for (round=0;round<8;round++)
+ len+=sprintf(&buffer[len],"%d/%d ",
+ phy_vars_ue->dlsch_ue[0][1]->harq_processes[harq_pid]->errors[round],
+ phy_vars_ue->dlsch_ue[0][1]->harq_processes[harq_pid]->trials[round]);
+ len+=sprintf(&buffer[len],"\n");
+ }
}
len += sprintf(&buffer[len], "[UE PROC] DLSCH Total %d, Error %d, FER %d\n",phy_vars_ue->dlsch_received[0],phy_vars_ue->dlsch_errors[0],phy_vars_ue->dlsch_fer[0]);
@@ -582,9 +597,7 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length)
len += sprintf(&buffer[len],"%4d ",
phy_vars_eNB->PHY_measurements_eNB[eNB].n0_subband_power_tot_dBm[i]);
if ((i>0) && ((i%25) == 0))
- len += sprintf(&buffer[len],"\n ",
- phy_vars_eNB->PHY_measurements_eNB[eNB].n0_subband_power_tot_dBm[i]);
-
+ len += sprintf(&buffer[len],"\n");
}
len += sprintf(&buffer[len],"\n");
len += sprintf(&buffer[len],"\nPERFORMANCE PARAMETERS\n");
diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c
index 3dd76c0fbb..f27f0500b0 100755
--- a/openair1/PHY/MODULATION/ofdm_mod.c
+++ b/openair1/PHY/MODULATION/ofdm_mod.c
@@ -91,7 +91,7 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
)
{
- static short temp[2048*4] __attribute__((aligned(16)));
+ static short temp[2048*4] __attribute__((aligned(32)));
unsigned short i,j;
short k;
@@ -143,9 +143,18 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
printf("[PHY] symbol %d/%d offset %d (%p,%p -> %p)\n",i,nb_symbols,i*fftsize+(i*nb_prefix_samples),input,&input[i*fftsize],&output[(i*fftsize) + ((i)*nb_prefix_samples)]);
#endif
+#ifndef __AVX2__
+ // handle 128-bit alignment for 128-bit SIMD (SSE4,NEON,AltiVEC)
idft((int16_t *)&input[i*fftsize],
(fftsize==128) ? (int16_t *)temp : (int16_t *)&output[(i*fftsize) + ((1+i)*nb_prefix_samples)],
1);
+#else
+ // on AVX2 need 256-bit alignment
+ idft((int16_t *)&input[i*fftsize],
+ (fftsize<=512) ? (int16_t *)temp : (int16_t *)&output[(i*fftsize) + ((1+i)*nb_prefix_samples)],
+ 1);
+
+#endif
// Copy to frame buffer with Cyclic Extension
// Note: will have to adjust for synchronization offset!
@@ -158,7 +167,12 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
// msg("Doing cyclic prefix method\n");
- if (fftsize==128) {
+#ifndef __AVX2__
+ if (fftsize==128)
+#else
+ if (fftsize<=512)
+#endif
+ {
for (j=0; jofdm_symbol_size) {
case 128:
@@ -115,8 +115,8 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
memset(&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],0,frame_parms->ofdm_symbol_size*sizeof(int));
rx_offset = sample_offset + slot_offset + nb_prefix_samples0 + subframe_offset - SOFFSET;
- // Align with 128 bit
- rx_offset = rx_offset - rx_offset % 4;
+ // Align with 256 bit
+ // rx_offset = rx_offset&0xfffffff8;
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
@@ -131,9 +131,9 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
(short *)&ue_common_vars->rxdata[aa][0],
frame_parms->ofdm_symbol_size*sizeof(int));
- if ((rx_offset&3)!=0) { // if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs
+ if ((rx_offset&7)!=0) { // if input to dft is not 256-bit aligned, issue for size 6,15 and 25 PRBs
memcpy((void *)tmp_dft_in,
- (void *)&ue_common_vars->rxdata[aa][(rx_offset-nb_prefix_samples0) % frame_length_samples],
+ (void *)&ue_common_vars->rxdata[aa][rx_offset % frame_length_samples],
frame_parms->ofdm_symbol_size*sizeof(int));
dft((int16_t *)tmp_dft_in,
(int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
@@ -146,8 +146,8 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
}
} else {
- rx_offset += (frame_parms->ofdm_symbol_size+nb_prefix_samples) +
- (frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1);
+ rx_offset += (frame_parms->ofdm_symbol_size+nb_prefix_samples)*l;// +
+ // (frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1);
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
@@ -162,7 +162,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
start_meas(&phy_vars_ue->rx_dft_stats);
- if ((rx_offset&3)!=0) { // if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs
+ if ((rx_offset&7)!=0) { // if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs
memcpy((void *)tmp_dft_in,
(void *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
frame_parms->ofdm_symbol_size*sizeof(int));
diff --git a/openair1/PHY/TOOLS/Makefile b/openair1/PHY/TOOLS/Makefile
index 908c1b6f14..eee9d78344 100644
--- a/openair1/PHY/TOOLS/Makefile
+++ b/openair1/PHY/TOOLS/Makefile
@@ -1,8 +1,14 @@
-lte_dfts: lte_dfts.c
- gcc -O2 -mavx2 -g -ggdb -o lte_dfts lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DUSER_MODE -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS
+lte_dfts_sse4: lte_dfts.c
+ gcc -O2 -msse4.1 -g -ggdb -o lte_dfts_sse4 lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DUSER_MODE -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS
-lte_dfts.s: lte_dfts.c
+lte_dfts_avx2: lte_dfts.c
+ gcc -O2 -mavx2 -g -ggdb -o lte_dfts_avx2 lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DUSER_MODE -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS
+
+lte_dfts_avx2.s: lte_dfts.c
gcc -O2 -mavx2 -S lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DUSER_MODE -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS
-dft_cycles: lte_dfts
- ./lte_dfts | egrep cycles
+lte_dfts_sse4.s: lte_dfts.c
+ gcc -O2 -msse4.1 -S lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DUSER_MODE -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS
+
+dft_cycles_avx2: lte_dfts_avx2
+ ./lte_dfts_avx2 | egrep cycles
diff --git a/openair1/PHY/TOOLS/cmult_mm.c b/openair1/PHY/TOOLS/cmult_mm.c
deleted file mode 100644
index 328958af29..0000000000
--- a/openair1/PHY/TOOLS/cmult_mm.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/*******************************************************************************
- OpenAirInterface
- Copyright(c) 1999 - 2014 Eurecom
-
- OpenAirInterface is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
-
- OpenAirInterface is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with OpenAirInterface.The full GNU General Public License is
- included in this distribution in the file called "COPYING". If not,
- see .
-
- Contact Information
- OpenAirInterface Admin: openair_admin@eurecom.fr
- OpenAirInterface Tech : openair_tech@eurecom.fr
- OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
-
- Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
-
- *******************************************************************************/
-#include "defs.h"
-
-int mult_cpx_matrix_h(short *x1[2][2],
- short *x2[2][2],
- short *y[2][2],
- unsigned int N,
- unsigned short output_shift,
- short hermitian)
-{
-
- if (hermitian) {
- // this computes x1^H*x2 and stores it in y
- mult_cpx_vector_h(x2[0][0],x1[0][0],y[0][0],N,output_shift,1);
- mult_cpx_vector_h(x2[0][1],x1[0][1],y[0][0],N,output_shift,1);
- mult_cpx_vector_h(x2[0][0],x1[1][0],y[1][0],N,output_shift,1);
- mult_cpx_vector_h(x2[0][1],x1[1][1],y[1][0],N,output_shift,1);
- mult_cpx_vector_h(x2[1][0],x1[0][0],y[0][1],N,output_shift,1);
- mult_cpx_vector_h(x2[1][1],x1[0][1],y[0][1],N,output_shift,1);
- mult_cpx_vector_h(x2[1][0],x1[1][0],y[1][1],N,output_shift,1);
- mult_cpx_vector_h(x2[1][1],x1[1][1],y[1][1],N,output_shift,1);
- } else {
- // this computes x1*x2^H and stores it in y
- mult_cpx_vector_h(x1[0][0],x2[0][0],y[0][0],N,output_shift,1);
- mult_cpx_vector_h(x1[0][1],x2[0][1],y[0][0],N,output_shift,1);
- mult_cpx_vector_h(x1[0][0],x2[1][0],y[0][1],N,output_shift,1);
- mult_cpx_vector_h(x1[0][1],x2[1][1],y[0][1],N,output_shift,1);
- mult_cpx_vector_h(x1[1][0],x2[0][0],y[1][0],N,output_shift,1);
- mult_cpx_vector_h(x1[1][1],x2[0][1],y[1][0],N,output_shift,1);
- mult_cpx_vector_h(x1[1][0],x2[1][0],y[1][1],N,output_shift,1);
- mult_cpx_vector_h(x1[1][1],x2[1][1],y[1][1],N,output_shift,1);
- }
-}
-
-int mult_cpx_matrix_vector(int *x1[2][2],
- int *x2[2],
- int *y[2],
- unsigned int N,
- unsigned short output_shift)
-{
-
- Zero_Buffer(y[0],N*8);
- Zero_Buffer(y[1],N*8);
-
- // this computes x1*x2 and stores it in y (32 bit)
- mult_cpx_vector_add32((short*)x2[0],(short*)x1[0][0],(short*)y[0],N);
- mult_cpx_vector_add32((short*)x2[1],(short*)x1[0][1],(short*)y[0],N);
- mult_cpx_vector_add32((short*)x2[0],(short*)x1[1][0],(short*)y[1],N);
- mult_cpx_vector_add32((short*)x2[1],(short*)x1[1][1],(short*)y[1],N);
-
- // shift and pack
- shift_and_pack((short*)y[0],N,output_shift);
- shift_and_pack((short*)y[1],N,output_shift);
-
-}
-
-#ifdef MAIN_MM
-#include
-#include
-main ()
-{
- short x1_00[256] __attribute__((aligned(16)));
- short x1_10[256] __attribute__((aligned(16)));
- short x1_01[256] __attribute__((aligned(16)));
- short x1_11[256] __attribute__((aligned(16)));
- short x2_0[256] __attribute__((aligned(16)));
- short x2_1[256] __attribute__((aligned(16)));
- short y_0[256] __attribute__((aligned(16)));
- short y_1[256] __attribute__((aligned(16)));
-
- int *x1[2][2];
- int *x2[2];
- int *y[2];
- int i,m,n;
-
- x1[0][0] = (int*)x1_00;
- x1[0][1] = (int*)x1_01;
- x1[1][0] = (int*)x1_10;
- x1[1][1] = (int*)x1_11;
- x2[0] = (int*)x2_0;
- x2[1] = (int*)x2_1;
- y[0] = (int*)y_0;
- y[1] = (int*)y_1;
-
- for(m=0; m<2; m++) {
- for(n=0; n<2; n++) {
- for(i=0; i<256; i+=4) {
- ((short*)x1[m][n])[i] = ((short) rand())/4;
- ((short*)x1[m][n])[i+1] = ((short) rand())/4;
- ((short*)x1[m][n])[i+2] = -((short*)x1[m][n])[i+1];
- ((short*)x1[m][n])[i+3] = ((short*)x1[m][n])[i];
- }
- }
-
- for(i=0; i<256; i+=4) {
- ((short*)x2[m])[i] = ((short) rand())/4;
- ((short*)x2[m])[i+1] = ((short) rand())/4;
- ((short*)x2[m])[i+2] = ((short*)x2[m])[i];
- ((short*)x2[m])[i+3] = ((short*)x2[m])[i+1];
- }
-
- Zero_Buffer(y[m],512);
- }
-
- /*
- input[0] = 100;
- input[1] = 200;
- input[2] = -200;
- input[3] = 100;
- input[4] = 1000;
- input[5] = 2000;
- input[6] = -2000;
- input[7] = 1000;
- input[8] = 100;
- input[9] = 200;
- input[10] = -200;
- input[11] = 100;
- input[12] = 1000;
- input[13] = 2000;
- input[14] = -2000;
- input[15] = 1000;
-
- input2[0] = 2;
- input2[1] = 1;
- input2[2] = 2;
- input2[3] = 1;
- input2[4] = 20;
- input2[5] = 10;
- input2[6] = 20;
- input2[7] = 10;
- input2[8] = 2;
- input2[9] = 1;
- input2[10] = 2;
- input2[11] = 1;
- input2[12] = 2000;
- input2[13] = 1000;
- input2[14] = 2000;
- input2[15] = 1000;
-
- x1[0][0] = (int*)input;
- x1[0][1] = (int*)input;
- x1[1][0] = (int*)input;
- x1[1][1] = (int*)input;
-
- x2[0] = (int*)input2;
- x2[1] = (int*)input2;
-
- y[0] = (int*)output;
- y[1] = (int*)output2;
- */
-
- mult_cpx_matrix_vector(x1,x2,y,64,15);
-
- //mult_cpx_vector_add32(x2[0],x1[0][0],y[0],64);
-
- for (i=0; i<128; i+=2)
- printf("i=%d, x1 = [%d+1i*%d %d+1i*%d; %d+1i*%d %d+1i*%d]; x2 = [%d+1i*%d; %d+1i*%d]; y = [%d+1i*%d; %d+1i*%d]; y_m= round(x1*x2./pow2(15)); y-y_m \n",
- i,
- ((short*)x1[0][0])[2*i], ((short*)x1[0][0])[2*i+2],
- ((short*)x1[0][1])[2*i], ((short*)x1[0][1])[2*i+2],
- ((short*)x1[1][0])[2*i], ((short*)x1[1][0])[2*i+2],
- ((short*)x1[1][1])[2*i], ((short*)x1[1][1])[2*i+2],
- ((short*)x2[0])[2*i], ((short*)x2[0])[2*i+1],
- ((short*)x2[1])[2*i], ((short*)x2[1])[2*i+1],
- ((short*)y[0])[2*i], ((short*)y[0])[2*i+1],
- ((short*)y[1])[2*i], ((short*)y[1])[2*i+1]);
-
- //((int*)y[0])[i], ((int*)y[0])[i+1],
- //((int*)y[1])[i], ((int*)y[1])[i+1]);
-
-}
-
-#endif
diff --git a/openair1/PHY/TOOLS/cmult_vv.c b/openair1/PHY/TOOLS/cmult_vv.c
index d7b7275508..f970d33224 100755
--- a/openair1/PHY/TOOLS/cmult_vv.c
+++ b/openair1/PHY/TOOLS/cmult_vv.c
@@ -50,7 +50,7 @@ int mult_cpx_conj_vector(int16_t *x1,
uint32_t N,
int output_shift)
{
- // Multiply elementwise two complex vectors of N elements with repeated formatted output
+ // Multiply elementwise the complex conjugate of x1 with x2.
// x1 - input 1 in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
// We assume x1 with a dinamic of 15 bit maximum
//
@@ -90,7 +90,7 @@ int mult_cpx_conj_vector(int16_t *x1,
tmp_im = _mm_shufflelo_epi16(*x1_128,_MM_SHUFFLE(2,3,0,1));
tmp_im = _mm_shufflehi_epi16(tmp_im,_MM_SHUFFLE(2,3,0,1));
tmp_im = _mm_sign_epi16(tmp_im,*(__m128i*)&conjug[0]);
- tmp_im = _mm_madd_epi16(tmp_im,*x1_128);
+ tmp_im = _mm_madd_epi16(tmp_im,*x2_128);
tmp_re = _mm_srai_epi32(tmp_re,output_shift);
tmp_im = _mm_srai_epi32(tmp_im,output_shift);
tmpy0 = _mm_unpacklo_epi32(tmp_re,tmp_im);
@@ -130,3 +130,4 @@ int mult_cpx_conj_vector(int16_t *x1,
return(0);
}
+
diff --git a/openair1/PHY/TOOLS/cmult_vvh.c b/openair1/PHY/TOOLS/cmult_vvh.c
deleted file mode 100644
index 64cf163d09..0000000000
--- a/openair1/PHY/TOOLS/cmult_vvh.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/*******************************************************************************
- OpenAirInterface
- Copyright(c) 1999 - 2014 Eurecom
-
- OpenAirInterface is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
-
- OpenAirInterface is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with OpenAirInterface.The full GNU General Public License is
- included in this distribution in the file called "COPYING". If not,
- see .
-
- Contact Information
- OpenAirInterface Admin: openair_admin@eurecom.fr
- OpenAirInterface Tech : openair_tech@eurecom.fr
- OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
-
- Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
-
- *******************************************************************************/
-#include "defs.h"
-
-static __m128i shift __attribute__ ((aligned(16)));
-
-
-int mult_cpx_vector_h(short *x1,
- short *x2,
- short *y,
- unsigned int N,
- unsigned short output_shift,
- short sign)
-{
- // Multiply elementwise the complex vector x1 with the complex conjugate of the complex vecotr x2 of N elements and adds it to the vector y.
- // x1 - input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
- // We assume x1 with a dinamic of 15 bit maximum
- //
- // x2 - input 2 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
- // We assume x2 with a dinamic of 14 bit maximum
- //
- // y - output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
- //
- // N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4;
- //
- // log2_amp - increase the output amplitude by a factor 2^log2_amp (default is 0)
- // WARNING: log2_amp>0 can cause overflow!!
- // sign - +1..add, -1..substract
-
- unsigned int i; // loop counter
-
- register __m128i m0,m1,m2;
-
- short *temps;
- int *tempd;
-
- __m128i *x1_128;
- __m128i *x2_128;
- __m128i *y_128;
- __m128i mask;
-
- __m128i temp;
-
- shift = _mm_cvtsi32_si128(output_shift);
- x1_128 = (__m128i *)&x1[0];
- x2_128 = (__m128i *)&x2[0];
- y_128 = (__m128i *)&y[0];
-
- if (sign == -1)
- mask = (__m128i) _mm_set_epi16 (-1,1,-1,-1,-1,1,-1,-1);
- else
- mask = (__m128i) _mm_set_epi16 (1,-1,1,1,1,-1,1,1);
-
- // we compute 2*4 cpx multiply for each loop
- for(i=0; i<(N>>3); i++) {
-
- // printf("i=%d\n",i);
-
- // unroll 1
- // temps = (short *)x1_128;
- // printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]);
- m1 = x1_128[0];
- m2 = x2_128[0];
-
- // temps = (short *)&x2_128[0];
- // printf("x2 : %x,%x,%x,%x,%x,%x,%x,%x\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]);
-
- // bring x2 in conjugate form
- // the first two instructions might be replaced with a single one in SSE3
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- // temp = m2;
- // temps = (short *)&temp;
- // printf("x2 conj : %x,%x,%x,%x,%x,%x,%x,%x\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]);
-
- m0 = _mm_madd_epi16(m1,m2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0]
-
- // temp = m0;
-
- // tempd = &temp;
- // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]);
-
- m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude
-
- // temp = m0;
-
- // tempd = (int *)&temp;
- // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]);
-
- m0 = _mm_packs_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
- m0 = _mm_unpacklo_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
-
- y_128[0] = _mm_add_epi16(m0,y_128[0]);
-
- // temps = (short *)&y_128[0];
- // printf("y0 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]);
-
- // unroll 2
- m1 = x1_128[1];
- m2 = x2_128[1];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0]
-
- m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude
-
- m0 = _mm_packs_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
- m0 = _mm_unpacklo_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
-
- y_128[1] = _mm_add_epi16(m0,y_128[1]);
-
- // unroll 3
- m1 = x1_128[2];
- m2 = x2_128[2];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0]
-
- m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude
-
- m0 = _mm_packs_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
- m0 = _mm_unpacklo_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
-
- y_128[2] = _mm_add_epi16(m0,y_128[2]);
-
-
- // unroll 4
- m1 = x1_128[3];
- m2 = x2_128[3];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0]
-
- m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude
-
- m0 = _mm_packs_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
- m0 = _mm_unpacklo_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im]
-
- y_128[3] = _mm_add_epi16(m0,y_128[3]);
-
- x1_128+=4;
- x2_128+=4;
- y_128 +=4;
- // printf("x1_128 = %p, x2_128 =%p, y_128=%p\n",x1_128,x2_128,y_128);
-
- }
-
-
- _mm_empty();
- _m_empty();
-
- return(0);
-}
-
-
-int mult_cpx_vector_h_add32(short *x1,
- short *x2,
- short *y,
- unsigned int N,
- short sign)
-{
- // Multiply elementwise the complex vector x1 with the complex conjugate of the complex vecotr x2 of N elements and adds it to the vector y.
- // x1 - input 1 in 16bit format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
- // We assume x1 with a dinamic of 15 bit maximum
- //
- // x2 - input 2 in 16bit format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
- // We assume x2 with a dinamic of 14 bit maximum
- //
- // y - output in 32bit format |Re0 Im0|,......,|Re(N-1) Im(N-1)|
- //
- // N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4;
- //
- // sign - +1..add, -1..substract
-
- unsigned int i; // loop counter
-
- register __m128i m0,m1,m2;
-
- short *temps;
- int *tempd;
-
- __m128i *x1_128;
- __m128i *x2_128;
- __m128i *y_128;
- __m128i mask;
-
- __m128i temp;
-
- x1_128 = (__m128i *)&x1[0];
- x2_128 = (__m128i *)&x2[0];
- y_128 = (__m128i *)&y[0];
-
- if (sign == -1)
- mask = (__m128i) _mm_set_epi16 (-1,1,-1,-1,-1,1,-1,-1);
- else
- mask = (__m128i) _mm_set_epi16 (1,-1,1,1,1,-1,1,1);
-
- // we compute 2*4 cpx multiply for each loop
- for(i=0; i<(N>>3); i++) {
-
- m1 = x1_128[0];
- m2 = x2_128[0];
-
- // bring x2 in conjugate form
- // the first two instructions might be replaced with a single one in SSE3
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2); // 1- compute x1[0]*x2[0], result is 32bit
-
- y_128[0] = _mm_add_epi32(m0,y_128[0]);
-
- // unroll 2
- m1 = x1_128[1];
- m2 = x2_128[1];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2);
-
- y_128[1] = _mm_add_epi32(m0,y_128[1]);
-
- // unroll 3
- m1 = x1_128[2];
- m2 = x2_128[2];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2);
-
- y_128[2] = _mm_add_epi32(m0,y_128[2]);
-
-
- // unroll 4
- m1 = x1_128[3];
- m2 = x2_128[3];
-
- m2 = _mm_shufflelo_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_shufflehi_epi16(m2,_MM_SHUFFLE(0,1,3,2));
- m2 = _mm_mullo_epi16(m2, mask);
-
- m0 = _mm_madd_epi16(m1,m2);
-
- y_128[3] = _mm_add_epi32(m0,y_128[3]);
-
- x1_128+=4;
- x2_128+=4;
- y_128 +=4;
-
- }
-
-
- _mm_empty();
- _m_empty();
-
- return(0);
-}
-
-#ifdef MAIN
-#define L 16
-
-main ()
-{
-
- short input[256] __attribute__((aligned(16)));
- short input2[256] __attribute__((aligned(16)));
- short output[256] __attribute__((aligned(16)));
-
- int i;
-
- Zero_Buffer(output,256*2);
-
- for (i=0; i<16; i+=2)
- printf("output[%d] = %d + %d i\n",i,output[i],output[i+1]);
-
- input[0] = 100;
- input[1] = 200;
- input[2] = 100;
- input[3] = 200;
- input[4] = 1234;
- input[5] = -1234;
- input[6] = 1234;
- input[7] = -1234;
- input[8] = 100;
- input[9] = 200;
- input[10] = 100;
- input[11] = 200;
- input[12] = 1000;
- input[13] = 2000;
- input[14] = 1000;
- input[15] = 2000;
-
- input2[0] = 1;
- input2[1] = 2;
- input2[2] = 1;
- input2[3] = 2;
- input2[4] = 10;
- input2[5] = 20;
- input2[6] = 10;
- input2[7] = 20;
- input2[8] = 1;
- input2[9] = 2;
- input2[10] = 1;
- input2[11] = 2;
- input2[12] = 1000;
- input2[13] = 2000;
- input2[14] = 1000;
- input2[15] = 2000;
-
-
- mult_cpx_vector_h(input2,input2,output,8,0,1);
-
- for (i=0; i<16; i+=2)
- printf("output[%d] = %d + %d i\n",i,output[i],output[i+1]);
-
- Zero_Buffer(output,256*2);
- mult_cpx_vector_h(input2,input2,output,8,0,-1);
-
- for (i=0; i<16; i+=2)
- printf("output[%d] = %d + %d i\n",i,output[i],output[i+1]);
-
-}
-
-#endif //MAIN
diff --git a/openair1/PHY/TOOLS/defs.h b/openair1/PHY/TOOLS/defs.h
index 6960fcda4c..963c1384b7 100644
--- a/openair1/PHY/TOOLS/defs.h
+++ b/openair1/PHY/TOOLS/defs.h
@@ -64,6 +64,8 @@ struct complex32 {
int32_t i;
};
+//cmult_sv.h
+
/*!\fn void multadd_real_vector_complex_scalar(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N)
This function performs componentwise multiplication and accumulation of a complex scalar and a real vector.
@param x Vector input (Q1.15)
@@ -95,192 +97,14 @@ void multadd_complex_vector_real_scalar(int16_t *x,
uint8_t zero_flag,
uint32_t N);
-
-/*!\fn int32_t mult_cpx_vector(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift)
-This function performs optimized componentwise multiplication of two Q1.15 vectors in repeated format.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param N Length of Vector WARNING: N must be a multiple of 8 (4x loop unrolling and two complex multiplies per cycle)
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-
-The function implemented is : \f$\mathbf{y} = \mathbf{x_1}\odot\mathbf{x_2}\f$
-*/
-int32_t mult_cpx_vector(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-/*!\fn int32_t mult_cpx_vector_norep(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift)
-This function performs optimized componentwise multiplication of two Q1.15 vectors with normal formatted output.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
-@param N Length of Vector WARNING: N must be a multiple of 8 (4x loop unrolling and two complex multiplies per cycle)
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-
-The function implemented is : \f$\mathbf{y} = \mathbf{x_1}\odot\mathbf{x_2}\f$
-*/
-int32_t mult_cpx_vector_norep(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-
-/*!\fn int32_t mult_cpx_vector_norep2(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift)
-This function performs optimized componentwise multiplication of two Q1.15 vectors with normal formatted output.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
-@param N Length of Vector WARNING: N must be a multiple of 8 (no unrolling and two complex multiplies per cycle)
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-
-The function implemented is : \f$\mathbf{y} = \mathbf{x_1}\odot\mathbf{x_2}\f$
-*/
-int32_t mult_cpx_vector_norep2(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-int32_t mult_cpx_vector_norep_conj(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-int32_t mult_cpx_vector_norep_conj2(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-/*!\fn int32_t mult_cpx_vector2(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift)
-This function performs optimized componentwise multiplication of two Q1.15 vectors.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param N Length of Vector WARNING: N must be a multiple of 2 (2 complex multiplies per cycle)
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-
-The function implemented is : \f$\mathbf{y} = \mathbf{x_1}\odot\mathbf{x_2}\f$
-*/
-int32_t mult_cpx_vector2(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-/*!\fn int32_t mult_cpx_vector_add(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift)
-This function performs optimized componentwise multiplication of two Q1.15 vectors. The output IS ADDED TO y. WARNING: make sure that output_shift is set to the right value, so that the result of the multiplication has the comma at the same place as y.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param N Length of Vector WARNING: N>=4
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-
-The function implemented is : \f$\mathbf{y} += \mathbf{x_1}\odot\mathbf{x_2}\f$
-*/
-
-int32_t mult_cpx_vector_add(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-
-int32_t mult_cpx_vector_h_add32(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int16_t sign);
-
-int32_t mult_cpx_vector_add32(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N);
-
-int32_t mult_vector32(int16_t *x1,
- int16_t *x2,
+int rotate_cpx_vector(int16_t *x,
+ int16_t *alpha,
int16_t *y,
- uint32_t N);
-
-int32_t mult_vector32_scalar(int16_t *x1,
- int32_t x2,
- int16_t *y,
- uint32_t N);
-
-int32_t mult_cpx_vector32_conj(int16_t *x,
- int16_t *y,
- uint32_t N);
-
-int32_t mult_cpx_vector32_real(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N);
-
-int32_t shift_and_pack(int16_t *y,
- uint32_t N,
- int32_t output_shift);
-
-/*!\fn int32_t mult_cpx_vector_h(int16_t *x1,int16_t *x2,int16_t *y,uint32_t N,int32_t output_shift,int16_t sign)
-This function performs optimized componentwise multiplication of the vector x1 with the conjugate of the vector x2. The output IS ADDED TO y. WARNING: make sure that output_shift is set to the right value, so that the result of the multiplication has the comma at the same place as y.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param N Length of Vector (complex samples) WARNING: N>=4
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-@param sign +1..add, -1..substract
-
-The function implemented is : \f$\mathbf{y} = \mathbf{y} + \mathbf{x_1}\odot\mathbf{x_2}^*\f$
-*/
-int32_t mult_cpx_vector_h(int16_t *x1,
- int16_t *x2,
- int16_t *y,
- uint32_t N,
- int32_t output_shift,
- int16_t sign);
-
-/*!\fn int32_t mult_cpx_matrix_h(int16_t *x1[2][2],int16_t *x2[2][2],int16_t *y[2][2],uint32_t N,uint16_t output_shift,int16_t hermitian)
-This function performs optimized componentwise matrix multiplication of the 2x2 matrices x1 with the 2x2 matrices x2. The output IS ADDED TO y (i.e. make sure y is initilized correctly). WARNING: make sure that output_shift is set to the right value, so that the result of the multiplication has the comma at the same place as y.
-
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param N Length of Vector (complex samples) WARNING: N>=4
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-@param hermitian if !=0 the hermitian transpose is returned (i.e. A^H*B instead of A*B^H)
-*/
-int32_t mult_cpx_matrix_h(int16_t *x1[2][2],
- int16_t *x2[2][2],
- int16_t *y[2][2],
- uint32_t N,
- uint16_t output_shift,
- int16_t hermitian);
+ uint32_t N,
+ uint16_t output_shift);
-/*!\fn int32_t mult_cpx_matrix_vector(int32_t *x1[2][2],int32_t *x2[2],int32_t *y[2],uint32_t N,uint16_t output_shift)
-This function performs optimized componentwise matrix-vector multiplication of the 2x2 matrices x1 with the 2x1 vectors x2. The output IS ADDED TO y (i.e. make sure y is initilized correctly). WARNING: make sure that output_shift is set to the right value, so that the result of the multiplication has the comma at the same place as y.
-@param x1 Input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)|
-@param x2 Input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)|
-@param y Output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| WARNING: y must be different for x2
-@param N Length of Vector (complex samples) WARNING: N>=4
-@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!!
-*/
-int32_t mult_cpx_matrix_vector(int32_t *x1[2][2],
- int32_t *x2[2],
- int32_t *y[2],
- uint32_t N,
- uint16_t output_shift);
/*!\fn void init_fft(uint16_t size,uint8_t logsize,uint16_t *rev)
\brief Initialize the FFT engine for a given size
@@ -289,6 +113,25 @@ int32_t mult_cpx_matrix_vector(int32_t *x1[2][2],
@param rev Pointer to bit-reversal permutation array
*/
+//cmult_vv.c
+/*!
+ Multiply elementwise the complex conjugate of x1 with x2.
+ @param x1 - input 1 in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
+ We assume x1 with a dinamic of 15 bit maximum
+ @param x2 - input 2 in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
+ We assume x2 with a dinamic of 14 bit maximum
+ @param y - output in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
+ @param N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4;
+ @param output_shift - shift to be applied to generate output
+*/
+
+int mult_cpx_conj_vector(int16_t *x1,
+ int16_t *x2,
+ int16_t *y,
+ uint32_t N,
+ int output_shift);
+
+// lte_dfts.c
void init_fft(uint16_t size,
uint8_t logsize,
uint16_t *rev);
@@ -355,6 +198,7 @@ int32_t rotate_cpx_vector(int16_t *x,
uint16_t output_shift);
+//cadd_sv.c
/*!\fn int32_t add_cpx_vector(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N)
This function performs componentwise addition of a vector with a complex scalar.
diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c
index b010f93aab..1ff95b5322 100644
--- a/openair1/PHY/TOOLS/lte_dfts.c
+++ b/openair1/PHY/TOOLS/lte_dfts.c
@@ -5,7 +5,7 @@
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
+ (at your option) any lat_er version.
OpenAirInterface is distributed in the hope that it will be useful,
@@ -53,15 +53,15 @@
#include "PHY/sse_intrin.h"
#define print_shorts(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7])
+#define print_shorts256(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7],(x)[8],(x)[9],(x)[10],(x)[11],(x)[12],(x)[13],(x)[14],(x)[15])
+
#define print_ints(s,x) printf("%s %d %d %d %d\n",s,(x)[0],(x)[1],(x)[2],(x)[3])
-#ifdef AVX2
-static int16_t conjugatedft2[16] __attribute__((aligned(32))) = {1,1,1,1,1,1,1,1,-1,1,-1,1,-1,1,-1,1,-1,1};
-#endif
-static int16_t conjugatedft[8] __attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ;
+static int16_t conjugatedft[32] __attribute__((aligned(32))) = {-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1};
-static short reflip[8] __attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
+
+static int16_t reflip[32] __attribute__((aligned(32))) = {1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1};
#if defined(__x86_64__) || defined(__i386__)
static inline void cmac(__m128i a,__m128i b, __m128i *re32, __m128i *im32) __attribute__((always_inline));
@@ -103,8 +103,43 @@ static inline void cmacc(__m128i a,__m128i b, __m128i *re32, __m128i *im32)
*im32 = _mm_add_epi32(*im32,cmac_tmp_im32);
}
+#ifdef __AVX2__
+static inline void cmac_256(__m256i a,__m256i b, __m256i *re32, __m256i *im32) __attribute__((always_inline));
+static inline void cmac_256(__m256i a,__m256i b, __m256i *re32, __m256i *im32)
+{
+
+ __m256i cmac_tmp,cmac_tmp_re32,cmac_tmp_im32;
+ __m256i imshuffle = _mm256_set_epi8(29,28,31,30,25,24,27,26,21,20,19,18,17,16,19,18,13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
+
+ cmac_tmp = _mm256_sign_epi16(b,*(__m256i*)reflip);
+ cmac_tmp_re32 = _mm256_madd_epi16(a,cmac_tmp);
+
+ cmac_tmp = _mm256_shuffle_epi8(b,imshuffle);
+ cmac_tmp_im32 = _mm256_madd_epi16(cmac_tmp,a);
+
+ *re32 = _mm256_add_epi32(*re32,cmac_tmp_re32);
+ *im32 = _mm256_add_epi32(*im32,cmac_tmp_im32);
+}
+
+static inline void cmacc_256(__m256i a,__m256i b, __m256i *re32, __m256i *im32) __attribute__((always_inline));
+static inline void cmacc_256(__m256i a,__m256i b, __m256i *re32, __m256i *im32)
+{
+
+ __m256i cmac_tmp,cmac_tmp_re32,cmac_tmp_im32;
+ __m256i imshuffle = _mm256_set_epi8(29,28,31,30,25,24,27,26,21,20,19,18,17,16,19,18,13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
+
+ cmac_tmp_re32 = _mm256_madd_epi16(a,b);
+ cmac_tmp = _mm256_sign_epi16(b,*(__m256i*)reflip);
+ cmac_tmp = _mm256_shuffle_epi8(b,imshuffle);
+ cmac_tmp_im32 = _mm256_madd_epi16(cmac_tmp,a);
+
+ *re32 = _mm256_add_epi32(*re32,cmac_tmp_re32);
+ *im32 = _mm256_add_epi32(*im32,cmac_tmp_im32);
+}
+
+#endif
static inline void cmult(__m128i a,__m128i b, __m128i *re32, __m128i *im32) __attribute__((always_inline));
@@ -122,6 +157,24 @@ static inline void cmult(__m128i a,__m128i b, __m128i *re32, __m128i *im32)
}
+#ifdef __AVX2__
+static inline void cmult_256(__m256i a,__m256i b, __m256i *re32, __m256i *im32) __attribute__((always_inline));
+
+static inline void cmult_256(__m256i a,__m256i b, __m256i *re32, __m256i *im32)
+{
+
+ register __m256i mmtmpb;
+ __m256i const perm_mask = _mm256_set_epi8(29,28,31,30,25,24,27,26,21,20,23,22,17,16,19,18,13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
+
+ mmtmpb = _mm256_sign_epi16(b,*(__m256i*)reflip);
+ *re32 = _mm256_madd_epi16(a,mmtmpb);
+ mmtmpb = _mm256_shuffle_epi8(b,perm_mask);
+ *im32 = _mm256_madd_epi16(a,mmtmpb);
+
+}
+
+#endif
+
static inline void cmultc(__m128i a,__m128i b, __m128i *re32, __m128i *im32) __attribute__((always_inline));
static inline void cmultc(__m128i a,__m128i b, __m128i *re32, __m128i *im32)
@@ -136,6 +189,23 @@ static inline void cmultc(__m128i a,__m128i b, __m128i *re32, __m128i *im32)
}
+#ifdef __AVX2__
+static inline void cmultc_256(__m256i a,__m256i b, __m256i *re32, __m256i *im32) __attribute__((always_inline));
+
+static inline void cmultc_256(__m256i a,__m256i b, __m256i *re32, __m256i *im32)
+{
+
+ register __m256i mmtmpb;
+ __m256i const perm_mask = _mm256_set_epi8(29,28,31,30,25,24,27,26,21,20,23,22,17,16,19,18,13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
+
+ *re32 = _mm256_madd_epi16(a,b);
+ mmtmpb = _mm256_sign_epi16(b,*(__m256i*)reflip);
+ mmtmpb = _mm256_shuffle_epi8(mmtmpb,perm_mask);
+ *im32 = _mm256_madd_epi16(a,mmtmpb);
+
+}
+
+#endif
static inline __m128i cpack(__m128i xre,__m128i xim) __attribute__((always_inline));
@@ -150,6 +220,21 @@ static inline __m128i cpack(__m128i xre,__m128i xim)
}
+#ifdef __AVX2__
+static inline __m256i cpack_256(__m256i xre,__m256i xim) __attribute__((always_inline));
+
+static inline __m256i cpack_256(__m256i xre,__m256i xim)
+{
+
+ register __m256i cpack_tmp1,cpack_tmp2;
+
+ cpack_tmp1 = _mm256_unpacklo_epi32(xre,xim);
+ cpack_tmp2 = _mm256_unpackhi_epi32(xre,xim);
+ return(_mm256_packs_epi32(_mm256_srai_epi32(cpack_tmp1,15),_mm256_srai_epi32(cpack_tmp2,15)));
+
+}
+
+#endif
static inline void packed_cmult(__m128i a,__m128i b, __m128i *c) __attribute__((always_inline));
@@ -162,6 +247,18 @@ static inline void packed_cmult(__m128i a,__m128i b, __m128i *c)
}
+#ifdef __AVX2__
+static inline void packed_cmult_256(__m256i a,__m256i b, __m256i *c) __attribute__((always_inline));
+
+static inline void packed_cmult_256(__m256i a,__m256i b, __m256i *c)
+{
+
+ __m256i cre,cim;
+ cmult_256(a,b,&cre,&cim);
+ *c = cpack_256(cre,cim);
+
+}
+#endif
static inline void packed_cmultc(__m128i a,__m128i b, __m128i *c) __attribute__((always_inline));
@@ -175,6 +272,20 @@ static inline void packed_cmultc(__m128i a,__m128i b, __m128i *c)
}
+#ifdef __AVX2__
+static inline void packed_cmultc_256(__m256i a,__m256i b, __m256i *c) __attribute__((always_inline));
+
+static inline void packed_cmultc_256(__m256i a,__m256i b, __m256i *c)
+{
+
+ __m256i cre,cim;
+
+ cmultc_256(a,b,&cre,&cim);
+ *c = cpack_256(cre,cim);
+
+}
+#endif
+
static inline __m128i packed_cmult2(__m128i a,__m128i b,__m128i b2) __attribute__((always_inline));
static inline __m128i packed_cmult2(__m128i a,__m128i b,__m128i b2)
@@ -190,6 +301,23 @@ static inline __m128i packed_cmult2(__m128i a,__m128i b,__m128i b2)
}
+#ifdef __AVX2__
+static inline __m256i packed_cmult2_256(__m256i a,__m256i b,__m256i b2) __attribute__((always_inline));
+
+static inline __m256i packed_cmult2_256(__m256i a,__m256i b,__m256i b2)
+{
+
+
+ register __m256i cre,cim;
+
+ cre = _mm256_madd_epi16(a,b);
+ cim = _mm256_madd_epi16(a,b2);
+
+ return(cpack_256(cre,cim));
+
+}
+#endif
+
#elif defined (__arm__)
static inline void cmac(int16x8_t a,int16x8_t b, int32x4_t *re32, int32x4_t *im32) __attribute__((always_inline));
static inline void cmac(int16x8_t a,int16x8_t b, int32x4_t *re32, int32x4_t *im32)
@@ -346,15 +474,15 @@ static inline int16x8_t packed_cmult2(int16x8_t a,int16x8_t b, int16x8_t b2)
#endif
-static int16_t W0s[8]__attribute__((aligned(16))) = {32767,0,32767,0,32767,0,32767,0};
+static int16_t W0s[16]__attribute__((aligned(32))) = {32767,0,32767,0,32767,0,32767,0,32767,0,32767,0,32767,0,32767,0};
-static int16_t W13s[8]__attribute__((aligned(16))) = {-16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378};
-static int16_t W23s[8]__attribute__((aligned(16))) = {-16384,28378,-16384,28378,-16384,28378,-16384,28378};
+static int16_t W13s[16]__attribute__((aligned(32))) = {-16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378,-16384,-28378};
+static int16_t W23s[16]__attribute__((aligned(32))) = {-16384,28378,-16384,28378,-16384,28378,-16384,28378,-16384,28378,-16384,28378,-16384,28378,-16384,28378};
-static int16_t W15s[8]__attribute__((aligned(16))) = {10126,-31163,10126,-31163,10126,-31163,10126,-31163};
-static int16_t W25s[8]__attribute__((aligned(16))) = {-26509,-19260,-26509,-19260,-26509,-19260,-26509,-19260};
-static int16_t W35s[8]__attribute__((aligned(16))) = {-26510,19260,-26510,19260,-26510,19260,-26510,19260};
-static int16_t W45s[8]__attribute__((aligned(16))) = {10126,31163,10126,31163,10126,31163,10126,31163};
+static int16_t W15s[16]__attribute__((aligned(32))) = {10126,-31163,10126,-31163,10126,-31163,10126,-31163,10126,-31163,10126,-31163,10126,-31163,10126,-31163};
+static int16_t W25s[16]__attribute__((aligned(32))) = {-26509,-19260,-26509,-19260,-26509,-19260,-26509,-19260,-26509,-19260,-26509,-19260,-26509,-19260,-26509,-19260};
+static int16_t W35s[16]__attribute__((aligned(32))) = {-26510,19260,-26510,19260,-26510,19260,-26510,19260,-26510,19260,-26510,19260,-26510,19260,-26510,19260};
+static int16_t W45s[16]__attribute__((aligned(32))) = {10126,31163,10126,31163,10126,31163,10126,31163,10126,31163,10126,31163,10126,31163,10126,31163};
#if defined(__x86_64__) || defined(__i386__)
__m128i *W0 = (__m128i *)W0s;
@@ -364,6 +492,17 @@ __m128i *W15 = (__m128i *)W15s;
__m128i *W25 = (__m128i *)W25s;
__m128i *W35 = (__m128i *)W35s;
__m128i *W45 = (__m128i *)W45s;
+
+#ifdef __AVX2__
+__m256i *W0_256 = (__m256i *)W0s;
+__m256i *W13_256 = (__m256i *)W13s;
+__m256i *W23_256 = (__m256i *)W23s;
+__m256i *W15_256 = (__m256i *)W15s;
+__m256i *W25_256 = (__m256i *)W25s;
+__m256i *W35_256 = (__m256i *)W35s;
+__m256i *W45_256 = (__m256i *)W45s;
+#endif
+
#elif defined(__arm__)
int16x8_t *W0 = (int16x8_t *)W0s;
int16x8_t *W13 = (int16x8_t *)W13s;
@@ -376,7 +515,7 @@ int16x8_t *W45 = (int16x8_t *)W45s;
static int16_t dft_norm_table[16] = {9459, //12
6689,//24
5461,//36
- 4729,//48
+ 4729,//482
4230,//60
23170,//72
3344,//96
@@ -419,6 +558,36 @@ static inline void bfly2(__m128i *x0, __m128i *x1,__m128i *y0, __m128i *y1,__m12
*y1 = _mm_packs_epi32(bfly2_tmp1,bfly2_tmp2);
}
+#ifdef __AVX2__
+
+static inline void bfly2_256(__m256i *x0, __m256i *x1,__m256i *y0, __m256i *y1,__m256i *tw)__attribute__((always_inline));
+
+static inline void bfly2_256(__m256i *x0, __m256i *x1,__m256i *y0, __m256i *y1,__m256i *tw)
+{
+
+ __m256i x0r_2,x0i_2,x1r_2,x1i_2,dy0r,dy1r,dy0i,dy1i;
+ __m256i bfly2_tmp1,bfly2_tmp2;
+
+ cmult_256(*(x0),*(W0_256),&x0r_2,&x0i_2);
+ cmult_256(*(x1),*(tw),&x1r_2,&x1i_2);
+
+ dy0r = _mm256_srai_epi32(_mm256_add_epi32(x0r_2,x1r_2),15);
+ dy1r = _mm256_srai_epi32(_mm256_sub_epi32(x0r_2,x1r_2),15);
+ dy0i = _mm256_srai_epi32(_mm256_add_epi32(x0i_2,x1i_2),15);
+ // printf("y0i %d\n",((int16_t *)y0i)[0]);
+ dy1i = _mm256_srai_epi32(_mm256_sub_epi32(x0i_2,x1i_2),15);
+
+ bfly2_tmp1 = _mm256_unpacklo_epi32(dy0r,dy0i);
+ bfly2_tmp2 = _mm256_unpackhi_epi32(dy0r,dy0i);
+ *y0 = _mm256_packs_epi32(bfly2_tmp1,bfly2_tmp2);
+
+ bfly2_tmp1 = _mm256_unpacklo_epi32(dy1r,dy1i);
+ bfly2_tmp2 = _mm256_unpackhi_epi32(dy1r,dy1i);
+ *y1 = _mm256_packs_epi32(bfly2_tmp1,bfly2_tmp2);
+}
+
+#endif
+
#elif defined(__arm__)
static inline void bfly2(int16x8_t *x0, int16x8_t *x1,int16x8_t *y0, int16x8_t *y1,int16x8_t *tw)__attribute__((always_inline));
@@ -468,37 +637,67 @@ static inline void bfly2_tw1(int16x8_t *x0, int16x8_t *x1, int16x8_t *y0, int16x
#endif
#if defined(__x86_64__) || defined(__i386__)
+
+
+
static inline void bfly2_16(__m128i *x0, __m128i *x1, __m128i *y0, __m128i *y1, __m128i *tw, __m128i *twb)__attribute__((always_inline));
static inline void bfly2_16(__m128i *x0, __m128i *x1, __m128i *y0, __m128i *y1, __m128i *tw, __m128i *twb)
{
- register __m128i x1t;
+ // register __m128i x1t;
+ __m128i x1t;
x1t = packed_cmult2(*(x1),*(tw),*(twb));
-
+ /*
+ print_shorts("x0",(int16_t*)x0);
+ print_shorts("x1",(int16_t*)x1);
+ print_shorts("tw",(int16_t*)tw);
+ print_shorts("twb",(int16_t*)twb);
+ print_shorts("x1t",(int16_t*)&x1t);*/
*y0 = _mm_adds_epi16(*x0,x1t);
*y1 = _mm_subs_epi16(*x0,x1t);
-
+ /* print_shorts("y0",(int16_t*)y0);
+ print_shorts("y1",(int16_t*)y1);*/
}
+#ifdef __AVX2__
+
+static inline void bfly2_16_256(__m256i *x0, __m256i *x1, __m256i *y0, __m256i *y1, __m256i *tw, __m256i *twb)__attribute__((always_inline));
+
+static inline void bfly2_16_256(__m256i *x0, __m256i *x1, __m256i *y0, __m256i *y1, __m256i *tw, __m256i *twb)
+{
+
+ // register __m256i x1t;
+ __m256i x1t;
+
+ x1t = packed_cmult2_256(*(x1),*(tw),*(twb));
+ /*
+ print_shorts256("x0",(int16_t*)x0);
+ print_shorts256("x1",(int16_t*)x1);
+ print_shorts256("tw",(int16_t*)tw);
+ print_shorts256("twb",(int16_t*)twb);
+ print_shorts256("x1t",(int16_t*)&x1t);*/
+ *y0 = _mm256_adds_epi16(*x0,x1t);
+ *y1 = _mm256_subs_epi16(*x0,x1t);
+
+ /*print_shorts256("y0",(int16_t*)y0);
+ print_shorts256("y1",(int16_t*)y1);*/
+}
+#endif
+
#elif defined(__arm__)
-static inline void bfly2_16(int16x8_t *x0, int16x8_t *x1, int16x8_t *y0, int16x8_t *y1, int16x8_t *tw, int16x8_t *twb)__attribute__((always_inline));
+static inline void bfly2_tw1(int16x8_t *x0, int16x8_t *x1, int16x8_t *y0, int16x8_t *y1)__attribute__((always_inline));
-static inline void bfly2_16(int16x8_t *x0, int16x8_t *x1, int16x8_t *y0, int16x8_t *y1, int16x8_t *tw, int16x8_t *twb)
+static inline void bfly2_tw1(int16x8_t *x0, int16x8_t *x1, int16x8_t *y0, int16x8_t *y1)
{
- register int16x8_t x1t;
-
- x1t = packed_cmult2(*(x1),*(tw),*(twb));
-
- *y0 = vqaddq_s16(*x0,x1t);
- *y1 = vqsubq_s16(*x0,x1t);
+ *y0 = vqaddq_s16(*x0,*x1);
+ *y1 = vqsubq_s16(*x0,*x1);
}
-
#endif
#if defined(__x86_64__) || defined(__i386__)
@@ -527,6 +726,35 @@ static inline void ibfly2(__m128i *x0, __m128i *x1,__m128i *y0, __m128i *y1,__m1
bfly2_tmp2 = _mm_unpackhi_epi32(dy1r,dy1i);
*y1 = _mm_packs_epi32(bfly2_tmp1,bfly2_tmp2);
}
+
+#ifdef __AVX2__
+static inline void ibfly2_256(__m256i *x0, __m256i *x1,__m256i *y0, __m256i *y1,__m256i *tw)__attribute__((always_inline));
+
+static inline void ibfly2_256(__m256i *x0, __m256i *x1,__m256i *y0, __m256i *y1,__m256i *tw)
+{
+
+ __m256i x0r_2,x0i_2,x1r_2,x1i_2,dy0r,dy1r,dy0i,dy1i;
+ __m256i bfly2_tmp1,bfly2_tmp2;
+
+ cmultc_256(*(x0),*(W0_256),&x0r_2,&x0i_2);
+ cmultc_256(*(x1),*(tw),&x1r_2,&x1i_2);
+
+ dy0r = _mm256_srai_epi32(_mm256_add_epi32(x0r_2,x1r_2),15);
+ dy1r = _mm256_srai_epi32(_mm256_sub_epi32(x0r_2,x1r_2),15);
+ dy0i = _mm256_srai_epi32(_mm256_add_epi32(x0i_2,x1i_2),15);
+ // printf("y0i %d\n",((int16_t *)y0i)[0]);
+ dy1i = _mm256_srai_epi32(_mm256_sub_epi32(x0i_2,x1i_2),15);
+
+ bfly2_tmp1 = _mm256_unpacklo_epi32(dy0r,dy0i);
+ bfly2_tmp2 = _mm256_unpackhi_epi32(dy0r,dy0i);
+ *y0 = _mm256_packs_epi32(bfly2_tmp1,bfly2_tmp2);
+
+ bfly2_tmp1 = _mm256_unpacklo_epi32(dy1r,dy1i);
+ bfly2_tmp2 = _mm256_unpackhi_epi32(dy1r,dy1i);
+ *y1 = _mm256_packs_epi32(bfly2_tmp1,bfly2_tmp2);
+}
+#endif
+
#elif defined(__arm__)
static inline void ibfly2(int16x8_t *x0, int16x8_t *x1,int16x8_t *y0, int16x8_t *y1,int16x8_t *tw)
{
@@ -579,6 +807,33 @@ static inline void bfly3(__m128i *x0,__m128i *x1,__m128i *x2,
*(y2) = _mm_adds_epi16(*(x0),*(y2));
}
+#ifdef __AVX2__
+
+static inline void bfly3_256(__m256i *x0,__m256i *x1,__m256i *x2,
+ __m256i *y0,__m256i *y1,__m256i *y2,
+ __m256i *tw1,__m256i *tw2) __attribute__((always_inline));
+
+static inline void bfly3_256(__m256i *x0,__m256i *x1,__m256i *x2,
+ __m256i *y0,__m256i *y1,__m256i *y2,
+ __m256i *tw1,__m256i *tw2)
+{
+
+ __m256i tmpre,tmpim,x1_2,x2_2;
+
+ packed_cmult_256(*(x1),*(tw1),&x1_2);
+ packed_cmult_256(*(x2),*(tw2),&x2_2);
+ *(y0) = _mm256_adds_epi16(*(x0),_mm256_adds_epi16(x1_2,x2_2));
+ cmult_256(x1_2,*(W13_256),&tmpre,&tmpim);
+ cmac_256(x2_2,*(W23_256),&tmpre,&tmpim);
+ *(y1) = cpack_256(tmpre,tmpim);
+ *(y1) = _mm256_adds_epi16(*(x0),*(y1));
+ cmult_256(x1_2,*(W23_256),&tmpre,&tmpim);
+ cmac_256(x2_2,*(W13_256),&tmpre,&tmpim);
+ *(y2) = cpack_256(tmpre,tmpim);
+ *(y2) = _mm256_adds_epi16(*(x0),*(y2));
+}
+#endif
+
#elif defined(__arm__)
static inline void bfly3(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,
int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,
@@ -632,6 +887,33 @@ static inline void ibfly3(__m128i *x0,__m128i *x1,__m128i *x2,
*(y2) = _mm_adds_epi16(*(x0),*(y2));
}
+#ifdef __AVX2__
+
+static inline void ibfly3_256(__m256i *x0,__m256i *x1,__m256i *x2,
+ __m256i *y0,__m256i *y1,__m256i *y2,
+ __m256i *tw1,__m256i *tw2) __attribute__((always_inline));
+
+static inline void ibfly3_256(__m256i *x0,__m256i *x1,__m256i *x2,
+ __m256i *y0,__m256i *y1,__m256i *y2,
+ __m256i *tw1,__m256i *tw2)
+{
+
+ __m256i tmpre,tmpim,x1_2,x2_2;
+
+ packed_cmultc_256(*(x1),*(tw1),&x1_2);
+ packed_cmultc_256(*(x2),*(tw2),&x2_2);
+ *(y0) = _mm256_adds_epi16(*(x0),_mm256_adds_epi16(x1_2,x2_2));
+ cmultc_256(x1_2,*(W13_256),&tmpre,&tmpim);
+ cmacc_256(x2_2,*(W23_256),&tmpre,&tmpim);
+ *(y1) = cpack_256(tmpre,tmpim);
+ *(y1) = _mm256_adds_epi16(*(x0),*(y1));
+ cmultc_256(x1_2,*(W23_256),&tmpre,&tmpim);
+ cmacc_256(x2_2,*(W13_256),&tmpre,&tmpim);
+ *(y2) = cpack_256(tmpre,tmpim);
+ *(y2) = _mm256_adds_epi16(*(x0),*(y2));
+}
+#endif
+
#elif defined(__arm__)
static inline void ibfly3(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,
int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,
@@ -679,6 +961,30 @@ static inline void bfly3_tw1(__m128i *x0,__m128i *x1,__m128i *x2,
*(y2) = cpack(tmpre,tmpim);
*(y2) = _mm_adds_epi16(*(x0),*(y2));
}
+
+#ifdef __AVX2__
+
+static inline void bfly3_tw1_256(__m256i *x0,__m256i *x1,__m256i *x2,
+ __m256i *y0,__m256i *y1,__m256i *y2) __attribute__((always_inline));
+
+static inline void bfly3_tw1_256(__m256i *x0,__m256i *x1,__m256i *x2,
+ __m256i *y0,__m256i *y1,__m256i *y2)
+{
+
+ __m256i tmpre,tmpim;
+
+ *(y0) = _mm256_adds_epi16(*(x0),_mm256_adds_epi16(*(x1),*(x2)));
+ cmult_256(*(x1),*(W13_256),&tmpre,&tmpim);
+ cmac_256(*(x2),*(W23_256),&tmpre,&tmpim);
+ *(y1) = cpack_256(tmpre,tmpim);
+ *(y1) = _mm256_adds_epi16(*(x0),*(y1));
+ cmult_256(*(x1),*(W23_256),&tmpre,&tmpim);
+ cmac_256(*(x2),*(W13_256),&tmpre,&tmpim);
+ *(y2) = cpack_256(tmpre,tmpim);
+ *(y2) = _mm256_adds_epi16(*(x0),*(y2));
+}
+#endif
+
#elif defined(__arm__)
static inline void bfly3_tw1(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,
int16x8_t *y0,int16x8_t *y1,int16x8_t *y2) __attribute__((always_inline));
@@ -745,6 +1051,48 @@ static inline void bfly4(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3,
*(y3) = _mm_add_epi16(*(x0),cpack(dy3r,dy3i));
}
+#ifdef __AVX2__
+static inline void bfly4_256(__m256i *x0,__m256i *x1,__m256i *x2,__m256i *x3,
+ __m256i *y0,__m256i *y1,__m256i *y2,__m256i *y3,
+ __m256i *tw1,__m256i *tw2,__m256i *tw3)__attribute__((always_inline));
+
+static inline void bfly4_256(__m256i *x0,__m256i *x1,__m256i *x2,__m256i *x3,
+ __m256i *y0,__m256i *y1,__m256i *y2,__m256i *y3,
+ __m256i *tw1,__m256i *tw2,__m256i *tw3)
+{
+
+ __m256i x1r_2,x1i_2,x2r_2,x2i_2,x3r_2,x3i_2,dy0r,dy0i,dy1r,dy1i,dy2r,dy2i,dy3r,dy3i;
+
+ // cmult(*(x0),*(W0),&x0r_2,&x0i_2);
+ cmult_256(*(x1),*(tw1),&x1r_2,&x1i_2);
+ cmult_256(*(x2),*(tw2),&x2r_2,&x2i_2);
+ cmult_256(*(x3),*(tw3),&x3r_2,&x3i_2);
+ // dy0r = _mm_add_epi32(x0r_2,_mm_add_epi32(x1r_2,_mm_add_epi32(x2r_2,x3r_2)));
+ // dy0i = _mm_add_epi32(x0i_2,_mm_add_epi32(x1i_2,_mm_add_epi32(x2i_2,x3i_2)));
+ // *(y0) = cpack(dy0r,dy0i);
+ dy0r = _mm256_add_epi32(x1r_2,_mm256_add_epi32(x2r_2,x3r_2));
+ dy0i = _mm256_add_epi32(x1i_2,_mm256_add_epi32(x2i_2,x3i_2));
+ *(y0) = _mm256_add_epi16(*(x0),cpack_256(dy0r,dy0i));
+ // dy1r = _mm_add_epi32(x0r_2,_mm_sub_epi32(x1i_2,_mm_add_epi32(x2r_2,x3i_2)));
+ // dy1i = _mm_sub_epi32(x0i_2,_mm_add_epi32(x1r_2,_mm_sub_epi32(x2i_2,x3r_2)));
+ // *(y1) = cpack(dy1r,dy1i);
+ dy1r = _mm256_sub_epi32(x1i_2,_mm256_add_epi32(x2r_2,x3i_2));
+ dy1i = _mm256_sub_epi32(_mm256_sub_epi32(x3r_2,x2i_2),x1r_2);
+ *(y1) = _mm256_add_epi16(*(x0),cpack_256(dy1r,dy1i));
+ // dy2r = _mm_sub_epi32(x0r_2,_mm_sub_epi32(x1r_2,_mm_sub_epi32(x2r_2,x3r_2)));
+ // dy2i = _mm_sub_epi32(x0i_2,_mm_sub_epi32(x1i_2,_mm_sub_epi32(x2i_2,x3i_2)));
+ // *(y2) = cpack(dy2r,dy2i);
+ dy2r = _mm256_sub_epi32(_mm256_sub_epi32(x2r_2,x3r_2),x1r_2);
+ dy2i = _mm256_sub_epi32(_mm256_sub_epi32(x2i_2,x3i_2),x1i_2);
+ *(y2) = _mm256_add_epi16(*(x0),cpack_256(dy2r,dy2i));
+ // dy3r = _mm_sub_epi32(x0r_2,_mm_add_epi32(x1i_2,_mm_sub_epi32(x2r_2,x3i_2)));
+ // dy3i = _mm_add_epi32(x0i_2,_mm_sub_epi32(x1r_2,_mm_add_epi32(x2i_2,x3r_2)));
+ // *(y3) = cpack(dy3r,dy3i);
+ dy3r = _mm256_sub_epi32(_mm256_sub_epi32(x3i_2,x2r_2),x1i_2);
+ dy3i = _mm256_sub_epi32(x1r_2,_mm256_add_epi32(x2i_2,x3r_2));
+ *(y3) = _mm256_add_epi16(*(x0),cpack_256(dy3r,dy3i));
+}
+#endif
#elif defined(__arm__)
static inline void bfly4(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3,
int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3,
@@ -820,6 +1168,39 @@ static inline void ibfly4(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3,
*(y1) = _mm_add_epi16(*(x0),cpack(dy1r,dy1i));
}
+#ifdef __AVX2__
+
+static inline void ibfly4_256(__m256i *x0,__m256i *x1,__m256i *x2,__m256i *x3,
+ __m256i *y0,__m256i *y1,__m256i *y2,__m256i *y3,
+ __m256i *tw1,__m256i *tw2,__m256i *tw3)__attribute__((always_inline));
+
+static inline void ibfly4_256(__m256i *x0,__m256i *x1,__m256i *x2,__m256i *x3,
+ __m256i *y0,__m256i *y1,__m256i *y2,__m256i *y3,
+ __m256i *tw1,__m256i *tw2,__m256i *tw3)
+{
+
+ __m256i x1r_2,x1i_2,x2r_2,x2i_2,x3r_2,x3i_2,dy0r,dy0i,dy1r,dy1i,dy2r,dy2i,dy3r,dy3i;
+
+
+ cmultc_256(*(x1),*(tw1),&x1r_2,&x1i_2);
+ cmultc_256(*(x2),*(tw2),&x2r_2,&x2i_2);
+ cmultc_256(*(x3),*(tw3),&x3r_2,&x3i_2);
+
+ dy0r = _mm256_add_epi32(x1r_2,_mm256_add_epi32(x2r_2,x3r_2));
+ dy0i = _mm256_add_epi32(x1i_2,_mm256_add_epi32(x2i_2,x3i_2));
+ *(y0) = _mm256_add_epi16(*(x0),cpack_256(dy0r,dy0i));
+ dy3r = _mm256_sub_epi32(x1i_2,_mm256_add_epi32(x2r_2,x3i_2));
+ dy3i = _mm256_sub_epi32(_mm256_sub_epi32(x3r_2,x2i_2),x1r_2);
+ *(y3) = _mm256_add_epi16(*(x0),cpack_256(dy3r,dy3i));
+ dy2r = _mm256_sub_epi32(_mm256_sub_epi32(x2r_2,x3r_2),x1r_2);
+ dy2i = _mm256_sub_epi32(_mm256_sub_epi32(x2i_2,x3i_2),x1i_2);
+ *(y2) = _mm256_add_epi16(*(x0),cpack_256(dy2r,dy2i));
+ dy1r = _mm256_sub_epi32(_mm256_sub_epi32(x3i_2,x2r_2),x1i_2);
+ dy1i = _mm256_sub_epi32(x1r_2,_mm256_add_epi32(x2i_2,x3r_2));
+ *(y1) = _mm256_add_epi16(*(x0),cpack_256(dy1r,dy1i));
+}
+
+#endif
#elif defined(__arm__)
static inline void ibfly4(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3,
@@ -890,6 +1271,32 @@ static inline void bfly4_tw1(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3,
*/
}
+#ifdef __AVX2__
+
+static inline void bfly4_tw1_256(__m256i *x0,__m256i *x1,__m256i *x2,__m256i *x3,
+ __m256i *y0,__m256i *y1,__m256i *y2,__m256i *y3)__attribute__((always_inline));
+
+static inline void bfly4_tw1_256(__m256i *x0,__m256i *x1,__m256i *x2,__m256i *x3,
+ __m256i *y0,__m256i *y1,__m256i *y2,__m256i *y3)
+{
+ register __m256i x1_flip,x3_flip,x02t,x13t;
+ register __m256i complex_shuffle = _mm256_set_epi8(29,28,31,30,25,24,27,26,21,20,23,22,17,16,19,18,13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
+
+ x02t = _mm256_adds_epi16(*(x0),*(x2));
+ x13t = _mm256_adds_epi16(*(x1),*(x3));
+ *(y0) = _mm256_adds_epi16(x02t,x13t);
+ *(y2) = _mm256_subs_epi16(x02t,x13t);
+ x1_flip = _mm256_sign_epi16(*(x1),*(__m256i*)conjugatedft);
+ x1_flip = _mm256_shuffle_epi8(x1_flip,complex_shuffle);
+ x3_flip = _mm256_sign_epi16(*(x3),*(__m256i*)conjugatedft);
+ x3_flip = _mm256_shuffle_epi8(x3_flip,complex_shuffle);
+ x02t = _mm256_subs_epi16(*(x0),*(x2));
+ x13t = _mm256_subs_epi16(x1_flip,x3_flip);
+ *(y1) = _mm256_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f
+ *(y3) = _mm256_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f
+}
+#endif
+
#elif defined(__arm__)
static inline void bfly4_tw1(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3,
@@ -1007,6 +1414,48 @@ static inline void bfly4_16(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3,
}
+#ifdef __AVX2__
+static inline void bfly4_16_256(__m256i *x0,__m256i *x1,__m256i *x2,__m256i *x3,
+ __m256i *y0,__m256i *y1,__m256i *y2,__m256i *y3,
+ __m256i *tw1,__m256i *tw2,__m256i *tw3,
+ __m256i *tw1b,__m256i *tw2b,__m256i *tw3b)__attribute__((always_inline));
+
+static inline void bfly4_16_256(__m256i *x0,__m256i *x1,__m256i *x2,__m256i *x3,
+ __m256i *y0,__m256i *y1,__m256i *y2,__m256i *y3,
+ __m256i *tw1,__m256i *tw2,__m256i *tw3,
+ __m256i *tw1b,__m256i *tw2b,__m256i *tw3b)
+{
+
+ register __m256i x1t,x2t,x3t,x02t,x13t;
+ register __m256i x1_flip,x3_flip;
+ register __m256i complex_shuffle = _mm256_set_epi8(29,28,31,30,25,24,27,26,21,20,23,22,17,16,19,18,13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
+
+ // each input xi is assumed to be to consecutive vectors xi0 xi1 on which to perform the 8 butterflies
+ // [xi00 xi01 xi02 xi03 xi10 xi20 xi30 xi40]
+ // each output yi is the same
+
+ x1t = packed_cmult2_256(*(x1),*(tw1),*(tw1b));
+ x2t = packed_cmult2_256(*(x2),*(tw2),*(tw2b));
+ x3t = packed_cmult2_256(*(x3),*(tw3),*(tw3b));
+
+ x02t = _mm256_adds_epi16(*(x0),x2t);
+ x13t = _mm256_adds_epi16(x1t,x3t);
+ *(y0) = _mm256_adds_epi16(x02t,x13t);
+ *(y2) = _mm256_subs_epi16(x02t,x13t);
+
+ x1_flip = _mm256_sign_epi16(x1t,*(__m256i*)conjugatedft);
+ x1_flip = _mm256_shuffle_epi8(x1_flip,complex_shuffle);
+ x3_flip = _mm256_sign_epi16(x3t,*(__m256i*)conjugatedft);
+ x3_flip = _mm256_shuffle_epi8(x3_flip,complex_shuffle);
+ x02t = _mm256_subs_epi16(*(x0),x2t);
+ x13t = _mm256_subs_epi16(x1_flip,x3_flip);
+ *(y1) = _mm256_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f
+ *(y3) = _mm256_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f
+
+}
+
+#endif
+
#elif defined(__arm__)
static inline void bfly4_16(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3,
@@ -1091,6 +1540,47 @@ static inline void ibfly4_16(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3,
}
+#ifdef __AVX2__
+static inline void ibfly4_16_256(__m256i *x0,__m256i *x1,__m256i *x2,__m256i *x3,
+ __m256i *y0,__m256i *y1,__m256i *y2,__m256i *y3,
+ __m256i *tw1,__m256i *tw2,__m256i *tw3,
+ __m256i *tw1b,__m256i *tw2b,__m256i *tw3b)__attribute__((always_inline));
+
+static inline void ibfly4_16_256(__m256i *x0,__m256i *x1,__m256i *x2,__m256i *x3,
+ __m256i *y0,__m256i *y1,__m256i *y2,__m256i *y3,
+ __m256i *tw1,__m256i *tw2,__m256i *tw3,
+ __m256i *tw1b,__m256i *tw2b,__m256i *tw3b)
+{
+
+ register __m256i x1t,x2t,x3t,x02t,x13t;
+ register __m256i x1_flip,x3_flip;
+ register __m256i complex_shuffle = _mm256_set_epi8(29,28,31,30,25,24,27,26,21,20,23,22,17,16,19,18,13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
+
+ // each input xi is assumed to be to consecutive vectors xi0 xi1 on which to perform the 8 butterflies
+ // [xi00 xi01 xi02 xi03 xi10 xi20 xi30 xi40]
+ // each output yi is the same
+
+ x1t = packed_cmult2_256(*(x1),*(tw1),*(tw1b));
+ x2t = packed_cmult2_256(*(x2),*(tw2),*(tw2b));
+ x3t = packed_cmult2_256(*(x3),*(tw3),*(tw3b));
+
+ x02t = _mm256_adds_epi16(*(x0),x2t);
+ x13t = _mm256_adds_epi16(x1t,x3t);
+ *(y0) = _mm256_adds_epi16(x02t,x13t);
+ *(y2) = _mm256_subs_epi16(x02t,x13t);
+
+ x1_flip = _mm256_sign_epi16(x1t,*(__m256i*)conjugatedft);
+ x1_flip = _mm256_shuffle_epi8(x1_flip,complex_shuffle);
+ x3_flip = _mm256_sign_epi16(x3t,*(__m256i*)conjugatedft);
+ x3_flip = _mm256_shuffle_epi8(x3_flip,complex_shuffle);
+ x02t = _mm256_subs_epi16(*(x0),x2t);
+ x13t = _mm256_subs_epi16(x1_flip,x3_flip);
+ *(y3) = _mm256_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f
+ *(y1) = _mm256_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f
+
+}
+#endif
+
#elif defined(__arm__)
static inline void ibfly4_16(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3,
int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3,
@@ -1175,6 +1665,59 @@ static inline void bfly5(__m128i *x0, __m128i *x1, __m128i *x2, __m128i *x3,__m1
}
+#ifdef __AVX2__
+
+static inline void bfly5_256(__m256i *x0, __m256i *x1, __m256i *x2, __m256i *x3,__m256i *x4,
+ __m256i *y0, __m256i *y1, __m256i *y2, __m256i *y3,__m256i *y4,
+ __m256i *tw1,__m256i *tw2,__m256i *tw3,__m256i *tw4)__attribute__((always_inline));
+
+static inline void bfly5_256(__m256i *x0, __m256i *x1, __m256i *x2, __m256i *x3,__m256i *x4,
+ __m256i *y0, __m256i *y1, __m256i *y2, __m256i *y3,__m256i *y4,
+ __m256i *tw1,__m256i *tw2,__m256i *tw3,__m256i *tw4)
+{
+
+
+
+ __m256i x1_2,x2_2,x3_2,x4_2,tmpre,tmpim;
+
+ packed_cmult_256(*(x1),*(tw1),&x1_2);
+ packed_cmult_256(*(x2),*(tw2),&x2_2);
+ packed_cmult_256(*(x3),*(tw3),&x3_2);
+ packed_cmult_256(*(x4),*(tw4),&x4_2);
+
+ *(y0) = _mm256_adds_epi16(*(x0),_mm256_adds_epi16(x1_2,_mm256_adds_epi16(x2_2,_mm256_adds_epi16(x3_2,x4_2))));
+ cmult_256(x1_2,*(W15_256),&tmpre,&tmpim);
+ cmac_256(x2_2,*(W25_256),&tmpre,&tmpim);
+ cmac_256(x3_2,*(W35_256),&tmpre,&tmpim);
+ cmac_256(x4_2,*(W45_256),&tmpre,&tmpim);
+ *(y1) = cpack_256(tmpre,tmpim);
+ *(y1) = _mm256_adds_epi16(*(x0),*(y1));
+
+ cmult_256(x1_2,*(W25_256),&tmpre,&tmpim);
+ cmac_256(x2_2,*(W45_256),&tmpre,&tmpim);
+ cmac_256(x3_2,*(W15_256),&tmpre,&tmpim);
+ cmac_256(x4_2,*(W35_256),&tmpre,&tmpim);
+ *(y2) = cpack_256(tmpre,tmpim);
+ *(y2) = _mm256_adds_epi16(*(x0),*(y2));
+
+ cmult_256(x1_2,*(W35_256),&tmpre,&tmpim);
+ cmac_256(x2_2,*(W15_256),&tmpre,&tmpim);
+ cmac_256(x3_2,*(W45_256),&tmpre,&tmpim);
+ cmac_256(x4_2,*(W25_256),&tmpre,&tmpim);
+ *(y3) = cpack_256(tmpre,tmpim);
+ *(y3) = _mm256_adds_epi16(*(x0),*(y3));
+
+ cmult_256(x1_2,*(W45_256),&tmpre,&tmpim);
+ cmac_256(x2_2,*(W35_256),&tmpre,&tmpim);
+ cmac_256(x3_2,*(W25_256),&tmpre,&tmpim);
+ cmac_256(x4_2,*(W15_256),&tmpre,&tmpim);
+ *(y4) = cpack_256(tmpre,tmpim);
+ *(y4) = _mm256_adds_epi16(*(x0),*(y4));
+
+
+}
+#endif
+
#elif defined(__arm__)
static inline void bfly5(int16x8_t *x0, int16x8_t *x1, int16x8_t *x2, int16x8_t *x3,int16x8_t *x4,
int16x8_t *y0, int16x8_t *y1, int16x8_t *y2, int16x8_t *y3,int16x8_t *y4,
@@ -1267,6 +1810,43 @@ static inline void bfly5_tw1(__m128i *x0, __m128i *x1, __m128i *x2, __m128i *x3,
*(y4) = _mm_adds_epi16(*(x0),*(y4));
}
+#ifdef __AVX2__
+static inline void bfly5_tw1_256(__m256i *x0, __m256i *x1, __m256i *x2, __m256i *x3,__m256i *x4,
+ __m256i *y0, __m256i *y1, __m256i *y2, __m256i *y3,__m256i *y4) __attribute__((always_inline));
+
+static inline void bfly5_tw1_256(__m256i *x0, __m256i *x1, __m256i *x2, __m256i *x3,__m256i *x4,
+ __m256i *y0, __m256i *y1, __m256i *y2, __m256i *y3,__m256i *y4)
+{
+
+ __m256i tmpre,tmpim;
+
+ *(y0) = _mm256_adds_epi16(*(x0),_mm256_adds_epi16(*(x1),_mm256_adds_epi16(*(x2),_mm256_adds_epi16(*(x3),*(x4)))));
+ cmult_256(*(x1),*(W15_256),&tmpre,&tmpim);
+ cmac_256(*(x2),*(W25_256),&tmpre,&tmpim);
+ cmac_256(*(x3),*(W35_256),&tmpre,&tmpim);
+ cmac_256(*(x4),*(W45_256),&tmpre,&tmpim);
+ *(y1) = cpack_256(tmpre,tmpim);
+ *(y1) = _mm256_adds_epi16(*(x0),*(y1));
+ cmult_256(*(x1),*(W25_256),&tmpre,&tmpim);
+ cmac_256(*(x2),*(W45_256),&tmpre,&tmpim);
+ cmac_256(*(x3),*(W15_256),&tmpre,&tmpim);
+ cmac_256(*(x4),*(W35_256),&tmpre,&tmpim);
+ *(y2) = cpack_256(tmpre,tmpim);
+ *(y2) = _mm256_adds_epi16(*(x0),*(y2));
+ cmult_256(*(x1),*(W35_256),&tmpre,&tmpim);
+ cmac_256(*(x2),*(W15_256),&tmpre,&tmpim);
+ cmac_256(*(x3),*(W45_256),&tmpre,&tmpim);
+ cmac_256(*(x4),*(W25_256),&tmpre,&tmpim);
+ *(y3) = cpack_256(tmpre,tmpim);
+ *(y3) = _mm256_adds_epi16(*(x0),*(y3));
+ cmult_256(*(x1),*(W45_256),&tmpre,&tmpim);
+ cmac_256(*(x2),*(W35_256),&tmpre,&tmpim);
+ cmac_256(*(x3),*(W25_256),&tmpre,&tmpim);
+ cmac_256(*(x4),*(W15_256),&tmpre,&tmpim);
+ *(y4) = cpack_256(tmpre,tmpim);
+ *(y4) = _mm256_adds_epi16(*(x0),*(y4));
+}
+#endif
#elif defined(__arm__)
static inline void bfly5_tw1(int16x8_t *x0, int16x8_t *x1, int16x8_t *x2, int16x8_t *x3,int16x8_t *x4,
int16x8_t *y0, int16x8_t *y1, int16x8_t *y2, int16x8_t *y3,int16x8_t *y4) __attribute__((always_inline));
@@ -1349,19 +1929,47 @@ static inline void transpose16_ooff(__m128i *x,__m128i *y,int off)
register __m128i ytmp0,ytmp1,ytmp2,ytmp3;
__m128i *y2=y;
- ytmp0 = _mm_unpacklo_epi32(x[0],x[1]);
- ytmp1 = _mm_unpackhi_epi32(x[0],x[1]);
- ytmp2 = _mm_unpacklo_epi32(x[2],x[3]);
- ytmp3 = _mm_unpackhi_epi32(x[2],x[3]);
- *y2 = _mm_unpacklo_epi64(ytmp0,ytmp2);
+ ytmp0 = _mm_unpacklo_epi32(x[0],x[1]); // x00 x10 x01 x11
+ ytmp1 = _mm_unpackhi_epi32(x[0],x[1]); // x02 x12 x03 x13
+ ytmp2 = _mm_unpacklo_epi32(x[2],x[3]); // x20 x30 x21 x31
+ ytmp3 = _mm_unpackhi_epi32(x[2],x[3]); // x22 x32 x23 x33
+ *y2 = _mm_unpacklo_epi64(ytmp0,ytmp2); // x00 x10 x20 x30
y2+=off;
- *y2 = _mm_unpackhi_epi64(ytmp0,ytmp2);
+ *y2 = _mm_unpackhi_epi64(ytmp0,ytmp2); // x01 x11 x21 x31
y2+=off;
- *y2 = _mm_unpacklo_epi64(ytmp1,ytmp3);
+ *y2 = _mm_unpacklo_epi64(ytmp1,ytmp3); // x02 x12 x22 x32
y2+=off;
- *y2 = _mm_unpackhi_epi64(ytmp1,ytmp3);
+ *y2 = _mm_unpackhi_epi64(ytmp1,ytmp3); // x03 x13 x23 x33
}
+#ifdef __AVX2__
+
+static inline void transpose16_ooff_simd256(__m256i *x,__m256i *y,int off) __attribute__((always_inline));
+static inline void transpose16_ooff_simd256(__m256i *x,__m256i *y,int off)
+{
+ register __m256i ytmp0,ytmp1,ytmp2,ytmp3,ytmp4,ytmp5,ytmp6,ytmp7;
+ __m256i *y2=y;
+ __m256i const perm_mask = _mm256_set_epi32(7, 3, 5, 1, 6, 2, 4, 0);
+
+ ytmp0 = _mm256_permutevar8x32_epi32(x[0],perm_mask); // x00 x10 x01 x11 x02 x12 x03 x13
+ ytmp1 = _mm256_permutevar8x32_epi32(x[1],perm_mask); // x20 x30 x21 x31 x22 x32 x23 x33
+ ytmp2 = _mm256_permutevar8x32_epi32(x[2],perm_mask); // x40 x50 x41 x51 x42 x52 x43 x53
+ ytmp3 = _mm256_permutevar8x32_epi32(x[3],perm_mask); // x60 x70 x61 x71 x62 x72 x63 x73
+ ytmp4 = _mm256_unpacklo_epi64(ytmp0,ytmp1); // x00 x10 x20 x30 x01 x11 x21 x31
+ ytmp5 = _mm256_unpackhi_epi64(ytmp0,ytmp1); // x02 x12 x22 x32 x03 x13 x23 x33
+ ytmp6 = _mm256_unpacklo_epi64(ytmp2,ytmp3); // x40 x50 x60 x70 x41 x51 x61 x71
+ ytmp7 = _mm256_unpackhi_epi64(ytmp2,ytmp3); // x42 x52 x62 x72 x43 x53 x63 x73
+
+ *y2 = _mm256_insertf128_si256(ytmp4,_mm256_extracti128_si256(ytmp6,0),1); //x00 x10 x20 x30 x40 x50 x60 x70
+ y2+=off;
+ *y2 = _mm256_insertf128_si256(ytmp6,_mm256_extracti128_si256(ytmp4,1),0); //x01 x11 x21 x31 x41 x51 x61 x71
+ y2+=off;
+ *y2 = _mm256_insertf128_si256(ytmp5,_mm256_extracti128_si256(ytmp7,0),1); //x00 x10 x20 x30 x40 x50 x60 x70
+ y2+=off;
+ *y2 = _mm256_insertf128_si256(ytmp7,_mm256_extracti128_si256(ytmp5,1),0); //x01 x11 x21 x31 x41 x51 x61 x71
+}
+#endif
+
#elif defined(__arm__)
static inline void transpose16_ooff(int16x8_t *x,int16x8_t *y,int off) __attribute__((always_inline));
@@ -1390,7 +1998,29 @@ static inline void transpose4_ooff(__m64 *x,__m64 *y,int off)
{
y[0] = _mm_unpacklo_pi32(x[0],x[1]);
y[off] = _mm_unpackhi_pi32(x[0],x[1]);
+
+ // x[0] = [x0 x1]
+ // x[1] = [x2 x3]
+ // y[0] = [x0 x2]
+ // y[off] = [x1 x3]
}
+#ifdef __AVX2__
+static inline void transpose4_ooff_simd256(__m256i *x,__m256i *y,int off)__attribute__((always_inline));
+static inline void transpose4_ooff_simd256(__m256i *x,__m256i *y,int off)
+{
+ __m256i const perm_mask = _mm256_set_epi32(7, 5, 3, 1, 6, 4, 2, 0);
+ __m256i perm_tmp0,perm_tmp1;
+
+ // x[0] = [x0 x1 x2 x3 x4 x5 x6 x7]
+ // x[1] = [x8 x9 x10 x11 x12 x13 x14]
+ // y[0] = [x0 x2 x4 x6 x8 x10 x12 x14]
+ // y[off] = [x1 x3 x5 x7 x9 x11 x13 x15]
+ perm_tmp0 = _mm256_permutevar8x32_epi32(x[0],perm_mask);
+ perm_tmp1 = _mm256_permutevar8x32_epi32(x[1],perm_mask);
+ y[0] = _mm256_insertf128_si256(perm_tmp0,_mm256_extracti128_si256(perm_tmp1,0),1);
+ y[off] = _mm256_insertf128_si256(perm_tmp1,_mm256_extracti128_si256(perm_tmp0,1),0);
+}
+#endif
#elif (__arm__)
static inline void transpose4_ooff(int16x4_t *x,int16x4_t *y,int off)__attribute__((always_inline));
@@ -1406,26 +2036,46 @@ static inline void transpose4_ooff(int16x4_t *x,int16x4_t *y,int off)
// 16-point optimized DFT kernel
-int16_t tw16[24] __attribute__((aligned(16))) = { 32767,0,30272,-12540,23169 ,-23170,12539 ,-30273,
+int16_t tw16[24] __attribute__((aligned(32))) = { 32767,0,30272,-12540,23169 ,-23170,12539 ,-30273,
32767,0,23169,-23170,0 ,-32767,-23170,-23170,
32767,0,12539,-30273,-23170,-23170,-30273,12539
};
-int16_t tw16a[24] __attribute__((aligned(16))) = {32767,0,30272,12540,23169 ,23170,12539 ,30273,
+int16_t tw16a[24] __attribute__((aligned(32))) = {32767,0,30272,12540,23169 ,23170,12539 ,30273,
32767,0,23169,23170,0 ,32767,-23170,23170,
32767,0,12539,30273,-23170,23170,-30273,-12539
};
-int16_t tw16b[24] __attribute__((aligned(16))) = { 0,32767,-12540,30272,-23170,23169 ,-30273,12539,
+int16_t tw16b[24] __attribute__((aligned(32))) = { 0,32767,-12540,30272,-23170,23169 ,-30273,12539,
0,32767,-23170,23169,-32767,0 ,-23170,-23170,
0,32767,-30273,12539,-23170,-23170,12539 ,-30273
};
-int16_t tw16c[24] __attribute__((aligned(16))) = { 0,32767,12540,30272,23170,23169 ,30273 ,12539,
+int16_t tw16c[24] __attribute__((aligned(32))) = { 0,32767,12540,30272,23170,23169 ,30273 ,12539,
0,32767,23170,23169,32767,0 ,23170 ,-23170,
0,32767,30273,12539,23170,-23170,-12539,-30273
};
+int16_t tw16rep[48] __attribute__((aligned(32))) = { 32767,0,30272,-12540,23169 ,-23170,12539 ,-30273,32767,0,30272,-12540,23169 ,-23170,12539 ,-30273,
+ 32767,0,23169,-23170,0 ,-32767,-23170,-23170,32767,0,23169,-23170,0 ,-32767,-23170,-23170,
+ 32767,0,12539,-30273,-23170,-23170,-30273,12539,32767,0,12539,-30273,-23170,-23170,-30273,12539
+ };
+
+int16_t tw16arep[48] __attribute__((aligned(32))) = {32767,0,30272,12540,23169 ,23170,12539 ,30273,32767,0,30272,12540,23169 ,23170,12539 ,30273,
+ 32767,0,23169,23170,0 ,32767,-23170,23170,32767,0,23169,23170,0 ,32767,-23170,23170,
+ 32767,0,12539,30273,-23170,23170,-30273,-12539,32767,0,12539,30273,-23170,23170,-30273,-12539
+ };
+
+int16_t tw16brep[48] __attribute__((aligned(32))) = { 0,32767,-12540,30272,-23170,23169 ,-30273,12539,0,32767,-12540,30272,-23170,23169 ,-30273,12539,
+ 0,32767,-23170,23169,-32767,0 ,-23170,-23170,0,32767,-23170,23169,-32767,0 ,-23170,-23170,
+ 0,32767,-30273,12539,-23170,-23170,12539 ,-30273,0,32767,-30273,12539,-23170,-23170,12539 ,-30273
+ };
+
+int16_t tw16crep[48] __attribute__((aligned(32))) = { 0,32767,12540,30272,23170,23169 ,30273 ,12539,0,32767,12540,30272,23170,23169 ,30273 ,12539,
+ 0,32767,23170,23169,32767,0 ,23170 ,-23170,0,32767,23170,23169,32767,0 ,23170 ,-23170,
+ 0,32767,30273,12539,23170,-23170,-12539,-30273,0,32767,30273,12539,23170,-23170,-12539,-30273
+ };
+
static inline void dft16(int16_t *x,int16_t *y) __attribute__((always_inline));
@@ -1439,7 +2089,6 @@ static inline void dft16(int16_t *x,int16_t *y)
-#ifndef AVX2
/* This is the original version before unrolling
bfly4_tw1(x128,x128+1,x128+2,x128+3,
@@ -1498,32 +2147,6 @@ static inline void dft16(int16_t *x,int16_t *y)
y128[1] = _mm_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f
y128[3] = _mm_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f
-#else
-
- // x02t = _mm_adds_epi16(x128[0],x128[2]);
- // x13t = _mm_adds_epi16(x128[1],x128[3]);
-
- xt = _mm256_adds_epi16(x256[0],x256[1]);
-
- xtmp0 = _mm_adds_epi16(x02t,x13t);
- xtmp2 = _mm_subs_epi16(x02t,x13t);
-
- x13_flip
- x1_flip = _mm_sign_epi16(x128[1],*(__m128i*)conjugatedft);
- x1_flip = _mm_shuffle_epi8(x1_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2));
- x3_flip = _mm_sign_epi16(x128[3],*(__m128i*)conjugatedft);
- x3_flip = _mm_shuffle_epi8(x3_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2));
-
- // x02t = _mm_subs_epi16(x128[0],x128[2]);
- // x13t = _mm_subs_epi16(x1_flip,x3_flip);
- xt = _mm256_subs_epi16(x256flip0,x256flip1);
-
- xtmp1 = _mm_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f
- xtmp3 = _mm_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f
-
-
-#endif
-
#elif defined(__arm__)
int16x8_t *tw16a_128=(int16x8_t *)tw16a,*tw16b_128=(int16x8_t *)tw16b,*x128=(int16x8_t *)x,*y128=(int16x8_t *)y;
@@ -1594,6 +2217,90 @@ static inline void dft16(int16_t *x,int16_t *y)
#endif
}
+#if defined(__x86_64__) || defined(__i386__)
+#ifdef __AVX2__
+// Does two 16-point DFTS (x[0 .. 15] is 128 LSBs of input vector, x[16..31] is in 128 MSBs)
+static inline void dft16_simd256(int16_t *x,int16_t *y) __attribute__((always_inline));
+static inline void dft16_simd256(int16_t *x,int16_t *y)
+{
+
+ __m256i *tw16a_256=(__m256i *)tw16arep,*tw16b_256=(__m256i *)tw16brep,*x256=(__m256i *)x,*y256=(__m256i *)y;
+
+ __m256i x1_flip,x3_flip,x02t,x13t;
+ __m256i ytmp0,ytmp1,ytmp2,ytmp3,xtmp0,xtmp1,xtmp2,xtmp3;
+ register __m256i complex_shuffle = _mm256_set_epi8(29,28,31,30,25,24,27,26,21,20,23,22,17,16,19,18,13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
+
+ // First stage : 4 Radix-4 butterflies without input twiddles
+
+ x02t = _mm256_adds_epi16(x256[0],x256[2]);
+ x13t = _mm256_adds_epi16(x256[1],x256[3]);
+ xtmp0 = _mm256_adds_epi16(x02t,x13t);
+ xtmp2 = _mm256_subs_epi16(x02t,x13t);
+ x1_flip = _mm256_sign_epi16(x256[1],*(__m256i*)conjugatedft);
+ x1_flip = _mm256_shuffle_epi8(x1_flip,complex_shuffle);
+ x3_flip = _mm256_sign_epi16(x256[3],*(__m256i*)conjugatedft);
+ x3_flip = _mm256_shuffle_epi8(x3_flip,complex_shuffle);
+ x02t = _mm256_subs_epi16(x256[0],x256[2]);
+ x13t = _mm256_subs_epi16(x1_flip,x3_flip);
+ xtmp1 = _mm256_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f
+ xtmp3 = _mm256_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f
+
+ /* print_shorts256("xtmp0",(int16_t*)&xtmp0);
+ print_shorts256("xtmp1",(int16_t*)&xtmp1);
+ print_shorts256("xtmp2",(int16_t*)&xtmp2);
+ print_shorts256("xtmp3",(int16_t*)&xtmp3);*/
+
+ ytmp0 = _mm256_unpacklo_epi32(xtmp0,xtmp1);
+ ytmp1 = _mm256_unpackhi_epi32(xtmp0,xtmp1);
+ ytmp2 = _mm256_unpacklo_epi32(xtmp2,xtmp3);
+ ytmp3 = _mm256_unpackhi_epi32(xtmp2,xtmp3);
+ xtmp0 = _mm256_unpacklo_epi64(ytmp0,ytmp2);
+ xtmp1 = _mm256_unpackhi_epi64(ytmp0,ytmp2);
+ xtmp2 = _mm256_unpacklo_epi64(ytmp1,ytmp3);
+ xtmp3 = _mm256_unpackhi_epi64(ytmp1,ytmp3);
+
+ // Second stage : 4 Radix-4 butterflies with input twiddles
+ xtmp1 = packed_cmult2_256(xtmp1,tw16a_256[0],tw16b_256[0]);
+ xtmp2 = packed_cmult2_256(xtmp2,tw16a_256[1],tw16b_256[1]);
+ xtmp3 = packed_cmult2_256(xtmp3,tw16a_256[2],tw16b_256[2]);
+
+ /* print_shorts256("xtmp0",(int16_t*)&xtmp0);
+ print_shorts256("xtmp1",(int16_t*)&xtmp1);
+ print_shorts256("xtmp2",(int16_t*)&xtmp2);
+ print_shorts256("xtmp3",(int16_t*)&xtmp3);*/
+
+ x02t = _mm256_adds_epi16(xtmp0,xtmp2);
+ x13t = _mm256_adds_epi16(xtmp1,xtmp3);
+ ytmp0 = _mm256_adds_epi16(x02t,x13t);
+ ytmp2 = _mm256_subs_epi16(x02t,x13t);
+ x1_flip = _mm256_sign_epi16(xtmp1,*(__m256i*)conjugatedft);
+ x1_flip = _mm256_shuffle_epi8(x1_flip,complex_shuffle);
+ x3_flip = _mm256_sign_epi16(xtmp3,*(__m256i*)conjugatedft);
+ x3_flip = _mm256_shuffle_epi8(x3_flip,complex_shuffle);
+ x02t = _mm256_subs_epi16(xtmp0,xtmp2);
+ x13t = _mm256_subs_epi16(x1_flip,x3_flip);
+ ytmp1 = _mm256_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f
+ ytmp3 = _mm256_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f
+
+
+ // [y0 y1 y2 y3 y16 y17 y18 y19]
+ // [y4 y5 y6 y7 y20 y21 y22 y23]
+ // [y8 y9 y10 y11 y24 y25 y26 y27]
+ // [y12 y13 y14 y15 y28 y29 y30 y31]
+
+ y256[0] = _mm256_insertf128_si256(ytmp0,_mm256_extracti128_si256(ytmp1,0),1);
+ y256[1] = _mm256_insertf128_si256(ytmp2,_mm256_extracti128_si256(ytmp3,0),1);
+ y256[2] = _mm256_insertf128_si256(ytmp1,_mm256_extracti128_si256(ytmp0,1),0);
+ y256[3] = _mm256_insertf128_si256(ytmp3,_mm256_extracti128_si256(ytmp2,1),0);
+
+ // [y0 y1 y2 y3 y4 y5 y6 y7]
+ // [y8 y9 y10 y11 y12 y13 y14 y15]
+ // [y16 y17 y18 y19 y20 y21 y22 y23]
+ // [y24 y25 y26 y27 y28 y29 y30 y31]
+}
+
+#endif
+#endif
static inline void idft16(int16_t *x,int16_t *y) __attribute__((always_inline));
static inline void idft16(int16_t *x,int16_t *y)
@@ -1725,27 +2432,193 @@ static inline void idft16(int16_t *x,int16_t *y)
#endif
}
+#if defined(__x86_64__) || defined(__i386__)
+#ifdef __AVX2__
+// Does two 16-point IDFTS (x[0 .. 15] is 128 LSBs of input vector, x[16..31] is in 128 MSBs)
+static inline void idft16_simd256(int16_t *x,int16_t *y) __attribute__((always_inline));
+static inline void idft16_simd256(int16_t *x,int16_t *y)
+{
+
+ __m256i *tw16a_256=(__m256i *)tw16rep,*tw16b_256=(__m256i *)tw16crep,*x256=(__m256i *)x,*y256=(__m256i *)y;
+ register __m256i x1_flip,x3_flip,x02t,x13t;
+ register __m256i ytmp0,ytmp1,ytmp2,ytmp3,xtmp0,xtmp1,xtmp2,xtmp3;
+ register __m256i complex_shuffle = _mm256_set_epi8(29,28,31,30,25,24,27,26,21,20,23,22,17,16,19,18,13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
+
+ // First stage : 4 Radix-4 butterflies without input twiddles
+
+ x02t = _mm256_adds_epi16(x256[0],x256[2]);
+ x13t = _mm256_adds_epi16(x256[1],x256[3]);
+ xtmp0 = _mm256_adds_epi16(x02t,x13t);
+ xtmp2 = _mm256_subs_epi16(x02t,x13t);
+ x1_flip = _mm256_sign_epi16(x256[1],*(__m256i*)conjugatedft);
+ x1_flip = _mm256_shuffle_epi8(x1_flip,complex_shuffle);
+ x3_flip = _mm256_sign_epi16(x256[3],*(__m256i*)conjugatedft);
+ x3_flip = _mm256_shuffle_epi8(x3_flip,complex_shuffle);
+ x02t = _mm256_subs_epi16(x256[0],x256[2]);
+ x13t = _mm256_subs_epi16(x1_flip,x3_flip);
+ xtmp3 = _mm256_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f
+ xtmp1 = _mm256_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f
+
+ ytmp0 = _mm256_unpacklo_epi32(xtmp0,xtmp1);
+ ytmp1 = _mm256_unpackhi_epi32(xtmp0,xtmp1);
+ ytmp2 = _mm256_unpacklo_epi32(xtmp2,xtmp3);
+ ytmp3 = _mm256_unpackhi_epi32(xtmp2,xtmp3);
+ xtmp0 = _mm256_unpacklo_epi64(ytmp0,ytmp2);
+ xtmp1 = _mm256_unpackhi_epi64(ytmp0,ytmp2);
+ xtmp2 = _mm256_unpacklo_epi64(ytmp1,ytmp3);
+ xtmp3 = _mm256_unpackhi_epi64(ytmp1,ytmp3);
+
+ // Second stage : 4 Radix-4 butterflies with input twiddles
+ xtmp1 = packed_cmult2_256(xtmp1,tw16a_256[0],tw16b_256[0]);
+ xtmp2 = packed_cmult2_256(xtmp2,tw16a_256[1],tw16b_256[1]);
+ xtmp3 = packed_cmult2_256(xtmp3,tw16a_256[2],tw16b_256[2]);
+
+ x02t = _mm256_adds_epi16(xtmp0,xtmp2);
+ x13t = _mm256_adds_epi16(xtmp1,xtmp3);
+ ytmp0 = _mm256_adds_epi16(x02t,x13t);
+ ytmp2 = _mm256_subs_epi16(x02t,x13t);
+ x1_flip = _mm256_sign_epi16(xtmp1,*(__m256i*)conjugatedft);
+ x1_flip = _mm256_shuffle_epi8(x1_flip,complex_shuffle);
+ x3_flip = _mm256_sign_epi16(xtmp3,*(__m256i*)conjugatedft);
+ x3_flip = _mm256_shuffle_epi8(x3_flip,complex_shuffle);
+ x02t = _mm256_subs_epi16(xtmp0,xtmp2);
+ x13t = _mm256_subs_epi16(x1_flip,x3_flip);
+ ytmp3 = _mm256_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f
+ ytmp1 = _mm256_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f
+
+ // [y0 y1 y2 y3 y16 y17 y18 y19]
+ // [y4 y5 y6 y7 y20 y21 y22 y23]
+ // [y8 y9 y10 y11 y24 y25 y26 y27]
+ // [y12 y13 y14 y15 y28 y29 y30 y31]
+
+ y256[0] = _mm256_insertf128_si256(ytmp0,_mm256_extracti128_si256(ytmp1,0),1);
+ y256[1] = _mm256_insertf128_si256(ytmp2,_mm256_extracti128_si256(ytmp3,0),1);
+ y256[2] = _mm256_insertf128_si256(ytmp1,_mm256_extracti128_si256(ytmp0,1),0);
+ y256[3] = _mm256_insertf128_si256(ytmp3,_mm256_extracti128_si256(ytmp2,1),0);
+
+}
+#endif
+#endif
// 64-point optimized DFT
-int16_t tw64[96] __attribute__((aligned(16))) = { 32767,0,32609,-3212,32137,-6393,31356,-9512,30272,-12540,28897,-15447,27244,-18205,25329,-20788,23169,-23170,20787,-25330,18204,-27245,15446,-28898,12539,-30273,9511,-31357,6392,-32138,3211,-32610,
- 32767,0,32137,-6393,30272,-12540,27244,-18205,23169,-23170,18204,-27245,12539,-30273,6392,-32138,0,-32767,-6393,-32138,-12540,-30273,-18205,-27245,-23170,-23170,-27245,-18205,-30273,-12540,-32138,-6393,
- 32767,0,31356,-9512,27244,-18205,20787,-25330,12539,-30273,3211,-32610,-6393,-32138,-15447,-28898,-23170,-23170,-28898,-15447,-32138,-6393,-32610,3211,-30273,12539,-25330,20787,-18205,27244,-9512,31356
+int16_t tw64[96] __attribute__((aligned(32))) = {
+32767,0,32609,-3212,32137,-6393,31356,-9512,
+30272,-12540,28897,-15447,27244,-18205,25329,-20788,
+23169,-23170,20787,-25330,18204,-27245,15446,-28898,
+12539,-30273,9511,-31357,6392,-32138,3211,-32610,
+32767,0,32137,-6393,30272,-12540,27244,-18205,
+23169,-23170,18204,-27245,12539,-30273,6392,-32138,
+0,-32767,-6393,-32138,-12540,-30273,-18205,-27245,
+-23170,-23170,-27245,-18205,-30273,-12540,-32138,-6393,
+32767,0,31356,-9512,27244,-18205,20787,-25330,
+12539,-30273,3211,-32610,-6393,-32138,-15447,-28898,
+-23170,-23170,-28898,-15447,-32138,-6393,-32610,3211,
+-30273,12539,-25330,20787,-18205,27244,-9512,31356
};
-int16_t tw64a[96] __attribute__((aligned(16))) = { 32767,0,32609,3212,32137,6393,31356,9512,30272,12540,28897,15447,27244,18205,25329,20788,23169,23170,20787,25330,18204,27245,15446,28898,12539,30273,9511,31357,6392,32138,3211,32610,
- 32767,0,32137,6393,30272,12540,27244,18205,23169,23170,18204,27245,12539,30273,6392,32138,0,32767,-6393,32138,-12540,30273,-18205,27245,-23170,23170,-27245,18205,-30273,12540,-32138,6393,
- 32767,0,31356,9512,27244,18205,20787,25330,12539,30273,3211,32610,-6393,32138,-15447,28898,-23170,23170,-28898,15447,-32138,6393,-32610,-3211,-30273,-12539,-25330,-20787,-18205,-27244,-9512,-31356
+int16_t tw64rep[192] __attribute__((aligned(32))) = {
+32767,0,32609,-3212,32137,-6393,31356,-9512,32767,0,32609,-3212,32137,-6393,31356,-9512,
+30272,-12540,28897,-15447,27244,-18205,25329,-20788,30272,-12540,28897,-15447,27244,-18205,25329,-20788,
+23169,-23170,20787,-25330,18204,-27245,15446,-28898,23169,-23170,20787,-25330,18204,-27245,15446,-28898,
+12539,-30273,9511,-31357,6392,-32138,3211,-32610,12539,-30273,9511,-31357,6392,-32138,3211,-32610,
+32767,0,32137,-6393,30272,-12540,27244,-18205,32767,0,32137,-6393,30272,-12540,27244,-18205,
+23169,-23170,18204,-27245,12539,-30273,6392,-32138,23169,-23170,18204,-27245,12539,-30273,6392,-32138,
+0,-32767,-6393,-32138,-12540,-30273,-18205,-27245,0,-32767,-6393,-32138,-12540,-30273,-18205,-27245,
+-23170,-23170,-27245,-18205,-30273,-12540,-32138,-6393,-23170,-23170,-27245,-18205,-30273,-12540,-32138,-6393,
+32767,0,31356,-9512,27244,-18205,20787,-25330,32767,0,31356,-9512,27244,-18205,20787,-25330,
+12539,-30273,3211,-32610,-6393,-32138,-15447,-28898,12539,-30273,3211,-32610,-6393,-32138,-15447,-28898,
+-23170,-23170,-28898,-15447,-32138,-6393,-32610,3211,-23170,-23170,-28898,-15447,-32138,-6393,-32610,3211,
+-30273,12539,-25330,20787,-18205,27244,-9512,31356,-30273,12539,-25330,20787,-18205,27244,-9512,31356
+ };
+
+int16_t tw64a[96] __attribute__((aligned(32))) = {
+32767,0,32609,3212,32137,6393,31356,9512,
+30272,12540,28897,15447,27244,18205,25329,20788,
+23169,23170,20787,25330,18204,27245,15446,28898,
+12539,30273,9511,31357,6392,32138,3211,32610,
+32767,0,32137,6393,30272,12540,27244,18205,
+23169,23170,18204,27245,12539,30273,6392,32138,
+0,32767,-6393,32138,-12540,30273,-18205,27245,
+-23170,23170,-27245,18205,-30273,12540,-32138,6393,
+32767,0,31356,9512,27244,18205,20787,25330,
+12539,30273,3211,32610,-6393,32138,-15447,28898,
+-23170,23170,-28898,15447,-32138,6393,-32610,-3211,
+-30273,-12539,-25330,-20787,-18205,-27244,-9512,-31356
+ };
+int16_t tw64arep[192] __attribute__((aligned(32))) = {
+32767,0,32609,3212,32137,6393,31356,9512,32767,0,32609,3212,32137,6393,31356,9512,
+30272,12540,28897,15447,27244,18205,25329,20788,30272,12540,28897,15447,27244,18205,25329,20788,
+23169,23170,20787,25330,18204,27245,15446,28898,23169,23170,20787,25330,18204,27245,15446,28898,
+12539,30273,9511,31357,6392,32138,3211,32610,12539,30273,9511,31357,6392,32138,3211,32610,
+32767,0,32137,6393,30272,12540,27244,18205,32767,0,32137,6393,30272,12540,27244,18205,
+23169,23170,18204,27245,12539,30273,6392,32138,23169,23170,18204,27245,12539,30273,6392,32138,
+0,32767,-6393,32138,-12540,30273,-18205,27245,0,32767,-6393,32138,-12540,30273,-18205,27245,
+-23170,23170,-27245,18205,-30273,12540,-32138,6393,-23170,23170,-27245,18205,-30273,12540,-32138,6393,
+32767,0,31356,9512,27244,18205,20787,25330,32767,0,31356,9512,27244,18205,20787,25330,
+12539,30273,3211,32610,-6393,32138,-15447,28898,12539,30273,3211,32610,-6393,32138,-15447,28898,
+-23170,23170,-28898,15447,-32138,6393,-32610,-3211,-23170,23170,-28898,15447,-32138,6393,-32610,-3211,
+-30273,-12539,-25330,-20787,-18205,-27244,-9512,-31356,-30273,-12539,-25330,-20787,-18205,-27244,-9512,-31356
};
-int16_t tw64b[96] __attribute__((aligned(16))) = { 0,32767,-3212,32609,-6393,32137,-9512,31356,-12540,30272,-15447,28897,-18205,27244,-20788,25329,-23170,23169,-25330,20787,-27245,18204,-28898,15446,-30273,12539,-31357,9511,-32138,6392,-32610,3211,
- 0,32767,-6393,32137,-12540,30272,-18205,27244,-23170,23169,-27245,18204,-30273,12539,-32138,6392,-32767,0,-32138,-6393,-30273,-12540,-27245,-18205,-23170,-23170,-18205,-27245,-12540,-30273,-6393,-32138,
- 0,32767,-9512,31356,-18205,27244,-25330,20787,-30273,12539,-32610,3211,-32138,-6393,-28898,-15447,-23170,-23170,-15447,-28898,-6393,-32138,3211,-32610,12539,-30273,20787,-25330,27244,-18205,31356,-9512
+int16_t tw64b[96] __attribute__((aligned(32))) = {
+0,32767,-3212,32609,-6393,32137,-9512,31356,
+-12540,30272,-15447,28897,-18205,27244,-20788,25329,
+-23170,23169,-25330,20787,-27245,18204,-28898,15446,
+-30273,12539,-31357,9511,-32138,6392,-32610,3211,
+0,32767,-6393,32137,-12540,30272,-18205,27244,
+-23170,23169,-27245,18204,-30273,12539,-32138,6392,
+-32767,0,-32138,-6393,-30273,-12540,-27245,-18205,
+-23170,-23170,-18205,-27245,-12540,-30273,-6393,-32138,
+0,32767,-9512,31356,-18205,27244,-25330,20787,
+-30273,12539,-32610,3211,-32138,-6393,-28898,-15447,
+-23170,-23170,-15447,-28898,-6393,-32138,3211,-32610,
+12539,-30273,20787,-25330,27244,-18205,31356,-9512
};
-int16_t tw64c[96] __attribute__((aligned(16))) = { 0,32767,3212,32609,6393,32137,9512,31356,12540,30272,15447,28897,18205,27244,20788,25329,23170,23169,25330,20787,27245,18204,28898,15446,30273,12539,31357,9511,32138,6392,32610,3211,
- 0,32767,6393,32137,12540,30272,18205,27244,23170,23169,27245,18204,30273,12539,32138,6392,32767,0,32138,-6393,30273,-12540,27245,-18205,23170,-23170,18205,-27245,12540,-30273,6393,-32138,
- 0,32767,9512,31356,18205,27244,25330,20787,30273,12539,32610,3211,32138,-6393,28898,-15447,23170,-23170,15447,-28898,6393,-32138,-3211,-32610,-12539,-30273,-20787,-25330,-27244,-18205,-31356,-9512
+int16_t tw64brep[192] __attribute__((aligned(32))) = {
+0,32767,-3212,32609,-6393,32137,-9512,31356,0,32767,-3212,32609,-6393,32137,-9512,31356,
+-12540,30272,-15447,28897,-18205,27244,-20788,25329,-12540,30272,-15447,28897,-18205,27244,-20788,25329,
+-23170,23169,-25330,20787,-27245,18204,-28898,15446,-23170,23169,-25330,20787,-27245,18204,-28898,15446,
+-30273,12539,-31357,9511,-32138,6392,-32610,3211,-30273,12539,-31357,9511,-32138,6392,-32610,3211,
+0,32767,-6393,32137,-12540,30272,-18205,27244,0,32767,-6393,32137,-12540,30272,-18205,27244,
+-23170,23169,-27245,18204,-30273,12539,-32138,6392,-23170,23169,-27245,18204,-30273,12539,-32138,6392,
+-32767,0,-32138,-6393,-30273,-12540,-27245,-18205,-32767,0,-32138,-6393,-30273,-12540,-27245,-18205,
+-23170,-23170,-18205,-27245,-12540,-30273,-6393,-32138,-23170,-23170,-18205,-27245,-12540,-30273,-6393,-32138,
+0,32767,-9512,31356,-18205,27244,-25330,20787,0,32767,-9512,31356,-18205,27244,-25330,20787,
+-30273,12539,-32610,3211,-32138,-6393,-28898,-15447,-30273,12539,-32610,3211,-32138,-6393,-28898,-15447,
+-23170,-23170,-15447,-28898,-6393,-32138,3211,-32610,-23170,-23170,-15447,-28898,-6393,-32138,3211,-32610,
+12539,-30273,20787,-25330,27244,-18205,31356,-9512,12539,-30273,20787,-25330,27244,-18205,31356,-9512
+ };
+
+int16_t tw64c[96] __attribute__((aligned(32))) = {
+0,32767,3212,32609,6393,32137,9512,31356,
+12540,30272,15447,28897,18205,27244,20788,25329,
+23170,23169,25330,20787,27245,18204,28898,15446,
+30273,12539,31357,9511,32138,6392,32610,3211,
+0,32767,6393,32137,12540,30272,18205,27244,
+23170,23169,27245,18204,30273,12539,32138,6392,
+32767,0,32138,-6393,30273,-12540,27245,-18205,
+23170,-23170,18205,-27245,12540,-30273,6393,-32138,
+0,32767,9512,31356,18205,27244,25330,20787,
+30273,12539,32610,3211,32138,-6393,28898,-15447,
+23170,-23170,15447,-28898,6393,-32138,-3211,-32610,
+-12539,-30273,-20787,-25330,-27244,-18205,-31356,-9512
+ };
+
+int16_t tw64crep[192] __attribute__((aligned(32))) = {
+0,32767,3212,32609,6393,32137,9512,31356,0,32767,3212,32609,6393,32137,9512,31356,
+12540,30272,15447,28897,18205,27244,20788,25329,12540,30272,15447,28897,18205,27244,20788,25329,
+23170,23169,25330,20787,27245,18204,28898,15446,23170,23169,25330,20787,27245,18204,28898,15446,
+30273,12539,31357,9511,32138,6392,32610,3211,30273,12539,31357,9511,32138,6392,32610,3211,
+0,32767,6393,32137,12540,30272,18205,27244,0,32767,6393,32137,12540,30272,18205,27244,
+23170,23169,27245,18204,30273,12539,32138,6392,23170,23169,27245,18204,30273,12539,32138,6392,
+32767,0,32138,-6393,30273,-12540,27245,-18205,32767,0,32138,-6393,30273,-12540,27245,-18205,
+23170,-23170,18205,-27245,12540,-30273,6393,-32138,23170,-23170,18205,-27245,12540,-30273,6393,-32138,
+0,32767,9512,31356,18205,27244,25330,20787,0,32767,9512,31356,18205,27244,25330,20787,
+30273,12539,32610,3211,32138,-6393,28898,-15447,30273,12539,32610,3211,32138,-6393,28898,-15447,
+23170,-23170,15447,-28898,6393,-32138,-3211,-32610,23170,-23170,15447,-28898,6393,-32138,-3211,-32610,
+-12539,-30273,-20787,-25330,-27244,-18205,-31356,-9512,-12539,-30273,-20787,-25330,-27244,-18205,-31356,-9512
};
@@ -1755,6 +2628,12 @@ int16_t tw64c[96] __attribute__((aligned(16))) = { 0,32767,3212,32609,6393,32137
#define shiftright_int16(a,shift) _mm_srai_epi16(a,shift)
#define set1_int16(a) _mm_set1_epi16(a);
#define mulhi_int16(a,b) _mm_slli_epi16(_mm_mulhi_epi16(a,b),1);
+#ifdef __AVX2__
+#define simd256_q15_t __m256i
+#define shiftright_int16_simd256(a,shift) _mm256_srai_epi16(a,shift)
+#define set1_int16_simd256(a) _mm256_set1_epi16(a);
+#define mulhi_int16_simd256(a,b) _mm256_slli_epi16(_mm256_mulhi_epi16(a,b),1);
+
#elif defined(__arm__)
#define simd_q15_t int16x8_t
#define simdshort_q15_t int16x4_t
@@ -1763,8 +2642,11 @@ int16_t tw64c[96] __attribute__((aligned(16))) = { 0,32767,3212,32609,6393,32137
#define mulhi_int16(a,b) vqdmulhq_s16(a,b);
#define _mm_empty()
#define _m_empty()
+
+#endif
#endif
+#ifndef __AVX2__
void dft64(int16_t *x,int16_t *y,int scale)
{
@@ -1782,18 +2664,41 @@ void dft64(int16_t *x,int16_t *y,int scale)
transpose16_ooff(x128,xtmp,4);
+ // xtmp0 = x00 x10 x20 x30
+ // xtmp4 = x01 x11 x21 x31
+ // xtmp8 = x02 x12 x22 x32
+ // xtmp12 = x03 x13 x23 x33
transpose16_ooff(x128+4,xtmp+1,4);
+ // xtmp1 = x40 x50 x60 x70
+ // xtmp5 = x41 x51 x61 x71
+ // xtmp9 = x42 x52 x62 x72
+ // xtmp13 = x43 x53 x63 x73
transpose16_ooff(x128+8,xtmp+2,4);
+ // xtmp2 = x80 x90 xa0 xb0
+ // xtmp6 = x41 x51 x61 x71
+ // xtmp10 = x82 x92 xa2 xb2
+ // xtmp14 = x83 x93 xa3 xb3
transpose16_ooff(x128+12,xtmp+3,4);
-
+ // xtmp3 = xc0 xd0 xe0 xf0
+ // xtmp7 = xc1 xd1 xe1 xf1
+ // xtmp11 = xc2 xd2 xe2 xf2
+ // xtmp15 = xc3 xd3 xe3 xf3
#ifdef D64STATS
stop_meas(&ts_t);
start_meas(&ts_d);
#endif
-
+ // xtmp0 = x00 x10 x20 x30
+ // xtmp1 = x40 x50 x60 x70
+ // xtmp2 = x80 x90 xa0 xb0
+ // xtmp3 = xc0 xd0 xe0 xf0
dft16((int16_t*)(xtmp),(int16_t*)ytmp);
+
+ // xtmp4 = x01 x11 x21 x31
+ // xtmp5 = x41 x51 x61 x71
+ // xtmp6 = x81 x91 xa1 xb1
+ // xtmp7 = xc1 xd1 xe1 xf1
dft16((int16_t*)(xtmp+4),(int16_t*)(ytmp+4));
dft16((int16_t*)(xtmp+8),(int16_t*)(ytmp+8));
dft16((int16_t*)(xtmp+12),(int16_t*)(ytmp+12));
@@ -1855,6 +2760,155 @@ void dft64(int16_t *x,int16_t *y,int scale)
}
+#else // __AVX2__
+void dft64(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[16],ytmp[16],*tw64a_256=(simd256_q15_t *)tw64a,*tw64b_256=(simd256_q15_t *)tw64b,*x256=(simd256_q15_t *)x,*y256=(simd256_q15_t *)y;
+ simd256_q15_t xintl0,xintl1,xintl2,xintl3,xintl4,xintl5,xintl6,xintl7;
+ simd256_q15_t const perm_mask = _mm256_set_epi32(7, 3, 5, 1, 6, 2, 4, 0);
+
+
+#ifdef D64STATS
+ time_stats_t ts_t,ts_d,ts_b;
+
+ reset_meas(&ts_t);
+ reset_meas(&ts_d);
+ reset_meas(&ts_b);
+ start_meas(&ts_t);
+#endif
+
+#ifdef D64STATS
+ stop_meas(&ts_t);
+ start_meas(&ts_d);
+#endif
+ /*
+ print_shorts256("x2560",(int16_t*)x256);
+ print_shorts256("x2561",(int16_t*)(x256+1));
+ print_shorts256("x2562",(int16_t*)(x256+2));
+ print_shorts256("x2563",(int16_t*)(x256+3));
+ print_shorts256("x2564",(int16_t*)(x256+4));
+ print_shorts256("x2565",(int16_t*)(x256+5));
+ print_shorts256("x2566",(int16_t*)(x256+6));
+ print_shorts256("x2567",(int16_t*)(x256+7));
+ */
+ xintl0 = _mm256_permutevar8x32_epi32(x256[0],perm_mask); // x0 x4 x1 x5 x2 x6 x3 x7
+ xintl1 = _mm256_permutevar8x32_epi32(x256[1],perm_mask); // x8 x12 x9 x13 x10 x14 x11 x15
+ xintl2 = _mm256_permutevar8x32_epi32(x256[2],perm_mask); // x16 x20 x17 x21 x18 x22 x19 x23
+ xintl3 = _mm256_permutevar8x32_epi32(x256[3],perm_mask); // x24 x28 x25 x29 x26 x30 x27 x31
+ xintl4 = _mm256_permutevar8x32_epi32(x256[4],perm_mask); // x32 x28 x25 x29 x26 x30 x27 x31
+ xintl5 = _mm256_permutevar8x32_epi32(x256[5],perm_mask); // x40 x28 x25 x29 x26 x30 x27 x31
+ xintl6 = _mm256_permutevar8x32_epi32(x256[6],perm_mask); // x48 x28 x25 x29 x26 x30 x27 x31
+ xintl7 = _mm256_permutevar8x32_epi32(x256[7],perm_mask); // x56 x28 x25 x29 x26 x30 x27 x31
+ /*
+ print_shorts256("xintl0",(int16_t*)&xintl0);
+ print_shorts256("xintl1",(int16_t*)&xintl1);
+ print_shorts256("xintl2",(int16_t*)&xintl2);
+ print_shorts256("xintl3",(int16_t*)&xintl3);
+ print_shorts256("xintl4",(int16_t*)&xintl4);
+ print_shorts256("xintl5",(int16_t*)&xintl5);
+ print_shorts256("xintl6",(int16_t*)&xintl6);
+ print_shorts256("xintl7",(int16_t*)&xintl7);
+ */
+ xtmp[0] = _mm256_unpacklo_epi64(xintl0,xintl1); // x0 x4 x8 x12 x1 x5 x9 x13
+ xtmp[4] = _mm256_unpackhi_epi64(xintl0,xintl1); // x2 x6 x10 x14 x3 x7 x11 x15
+ xtmp[1] = _mm256_unpacklo_epi64(xintl2,xintl3); // x16 x20 x24 x28 x17 x21 x25 x29
+ xtmp[5] = _mm256_unpackhi_epi64(xintl2,xintl3); // x18 x22 x26 x30 x19 x23 x27 x31
+ xtmp[2] = _mm256_unpacklo_epi64(xintl4,xintl5); // x32 x36 x40 x44 x33 x37 x41 x45
+ xtmp[6] = _mm256_unpackhi_epi64(xintl4,xintl5); // x34 x38 x42 x46 x35 x39 x43 x47
+ xtmp[3] = _mm256_unpacklo_epi64(xintl6,xintl7); // x48 x52 x56 x60 x49 x53 x57 x61
+ xtmp[7] = _mm256_unpackhi_epi64(xintl6,xintl7); // x50 x54 x58 x62 x51 x55 x59 x63
+ /*
+ print_shorts256("xtmp0",(int16_t*)xtmp);
+ print_shorts256("xtmp1",(int16_t*)(xtmp+1));
+ print_shorts256("xtmp2",(int16_t*)(xtmp+2));
+ print_shorts256("xtmp3",(int16_t*)(xtmp+3));
+ print_shorts256("xtmp4",(int16_t*)(xtmp+4));
+ print_shorts256("xtmp5",(int16_t*)(xtmp+5));
+ print_shorts256("xtmp6",(int16_t*)(xtmp+6));
+ print_shorts256("xtmp7",(int16_t*)(xtmp+7));
+ */
+ dft16_simd256((int16_t*)(xtmp),(int16_t*)ytmp);
+ // [y0 y1 y2 y3 y4 y5 y6 y7]
+ // [y8 y9 y10 y11 y12 y13 y14 y15]
+ // [y16 y17 y18 y19 y20 y21 y22 y23]
+ // [y24 y25 y26 y27 y28 y29 y30 y31]
+ /*
+ print_shorts256("ytmp0",(int16_t*)ytmp);
+ print_shorts256("ytmp1",(int16_t*)(ytmp+1));
+ print_shorts256("ytmp2",(int16_t*)(ytmp+2));
+ print_shorts256("ytmp3",(int16_t*)(ytmp+3));
+ */
+ dft16_simd256((int16_t*)(xtmp+4),(int16_t*)(ytmp+4));
+ // [y32 y33 y34 y35 y36 y37 y38 y39]
+ // [y40 y41 y42 y43 y44 y45 y46 y47]
+ // [y48 y49 y50 y51 y52 y53 y54 y55]
+ // [y56 y57 y58 y59 y60 y61 y62 y63]
+ /*
+ print_shorts256("ytmp4",(int16_t*)(ytmp+4));
+ print_shorts256("ytmp5",(int16_t*)(ytmp+5));
+ print_shorts256("ytmp6",(int16_t*)(ytmp+6));
+ print_shorts256("ytmp7",(int16_t*)(ytmp+7));
+ */
+#ifdef D64STATS
+ stop_meas(&ts_d);
+ start_meas(&ts_b);
+#endif
+
+
+ bfly4_16_256(ytmp,ytmp+2,ytmp+4,ytmp+6,
+ y256,y256+2,y256+4,y256+6,
+ tw64a_256,tw64a_256+2,tw64a_256+4,
+ tw64b_256,tw64b_256+2,tw64b_256+4);
+ // [y0 y1 y2 y3 y4 y5 y6 y7]
+ // [y16 y17 y18 y19 y20 y21 y22 y23]
+ // [y32 y33 y34 y35 y36 y37 y38 y39]
+ // [y48 y49 y50 y51 y52 y53 y54 y55]
+
+ bfly4_16_256(ytmp+1,ytmp+3,ytmp+5,ytmp+7,
+ y256+1,y256+3,y256+5,y256+7,
+ tw64a_256+1,tw64a_256+3,tw64a_256+5,
+ tw64b_256+1,tw64b_256+3,tw64b_256+5);
+ // [y8 y9 y10 y11 y12 y13 y14 y15]
+ // [y24 y25 y26 y27 y28 y29 y30 y31]
+ // [y40 y41 y42 y43 y44 y45 y46 y47]
+ // [y56 y57 y58 y59 y60 y61 y62 y63]
+ /*
+ print_shorts256("y256_0",(int16_t*)&y256[0]);
+ print_shorts256("y256_1",(int16_t*)&y256[1]);
+ print_shorts256("y256_2",(int16_t*)&y256[2]);
+ print_shorts256("y256_3",(int16_t*)&y256[3]);
+ print_shorts256("y256_4",(int16_t*)&y256[4]);
+ print_shorts256("y256_5",(int16_t*)&y256[5]);
+ print_shorts256("y256_6",(int16_t*)&y256[6]);
+ print_shorts256("y256_7",(int16_t*)&y256[7]);
+ */
+
+#ifdef D64STATS
+ stop_meas(&ts_b);
+ printf("t: %llu cycles, d: %llu cycles, b: %llu cycles\n",ts_t.diff,ts_d.diff,ts_b.diff);
+#endif
+
+
+ if (scale>0) {
+ y256[0] = shiftright_int16_simd256(y256[0],3);
+ y256[1] = shiftright_int16_simd256(y256[1],3);
+ y256[2] = shiftright_int16_simd256(y256[2],3);
+ y256[3] = shiftright_int16_simd256(y256[3],3);
+ y256[4] = shiftright_int16_simd256(y256[4],3);
+ y256[5] = shiftright_int16_simd256(y256[5],3);
+ y256[6] = shiftright_int16_simd256(y256[6],3);
+ y256[7] = shiftright_int16_simd256(y256[7],3);
+ }
+
+ _mm_empty();
+ _m_empty();
+
+
+}
+#endif
+
+#ifndef __AVX2__
void idft64(int16_t *x,int16_t *y,int scale)
{
@@ -1899,7 +2953,6 @@ void idft64(int16_t *x,int16_t *y,int scale)
y128,y128+4,y128+8,y128+12,
tw64a_128,tw64a_128+4,tw64a_128+8,
tw64b_128,tw64b_128+4,tw64b_128+8);
-
ibfly4_16(ytmp+1,ytmp+5,ytmp+9,ytmp+13,
y128+1,y128+5,y128+9,y128+13,
tw64a_128+1,tw64a_128+5,tw64a_128+9,
@@ -1947,15 +3000,117 @@ void idft64(int16_t *x,int16_t *y,int scale)
}
+#else // __AVX2__
+void idft64(int16_t *x,int16_t *y,int scale)
+{
-int16_t tw128[128] __attribute__((aligned(16))) = { 32767,0,32727,-1608,32609,-3212,32412,-4808,32137,-6393,31785,-7962,31356,-9512,30851,-11039,30272,-12540,29621,-14010,28897,-15447,28105,-16846,27244,-18205,26318,-19520,25329,-20788,24278,-22005,23169,-23170,22004,-24279,20787,-25330,19519,-26319,18204,-27245,16845,-28106,15446,-28898,14009,-29622,12539,-30273,11038,-30852,9511,-31357,7961,-31786,6392,-32138,4807,-32413,3211,-32610,1607,-32728,0,-32767,-1608,-32728,-3212,-32610,-4808,-32413,-6393,-32138,-7962,-31786,-9512,-31357,-11039,-30852,-12540,-30273,-14010,-29622,-15447,-28898,-16846,-28106,-18205,-27245,-19520,-26319,-20788,-25330,-22005,-24279,-23170,-23170,-24279,-22005,-25330,-20788,-26319,-19520,-27245,-18205,-28106,-16846,-28898,-15447,-29622,-14010,-30273,-12540,-30852,-11039,-31357,-9512,-31786,-7962,-32138,-6393,-32413,-4808,-32610,-3212,-32728,-1608};
+ simd256_q15_t xtmp[16],ytmp[16],*tw64a_256=(simd256_q15_t *)tw64,*tw64b_256=(simd256_q15_t *)tw64c,*x256=(simd256_q15_t *)x,*y256=(simd256_q15_t *)y;
+ register simd256_q15_t xintl0,xintl1,xintl2,xintl3,xintl4,xintl5,xintl6,xintl7;
+ simd256_q15_t const perm_mask = _mm256_set_epi32(7, 3, 5, 1, 6, 2, 4, 0);
-int16_t tw128a[128] __attribute__((aligned(16))) = { 32767,0,32727,1608,32609,3212,32412,4808,32137,6393,31785,7962,31356,9512,30851,11039,30272,12540,29621,14010,28897,15447,28105,16846,27244,18205,26318,19520,25329,20788,24278,22005,23169,23170,22004,24279,20787,25330,19519,26319,18204,27245,16845,28106,15446,28898,14009,29622,12539,30273,11038,30852,9511,31357,7961,31786,6392,32138,4807,32413,3211,32610,1607,32728,0,32767,-1608,32728,-3212,32610,-4808,32413,-6393,32138,-7962,31786,-9512,31357,-11039,30852,-12540,30273,-14010,29622,-15447,28898,-16846,28106,-18205,27245,-19520,26319,-20788,25330,-22005,24279,-23170,23170,-24279,22005,-25330,20788,-26319,19520,-27245,18205,-28106,16846,-28898,15447,-29622,14010,-30273,12540,-30852,11039,-31357,9512,-31786,7962,-32138,6393,-32413,4808,-32610,3212,-32728,1608};
-int16_t tw128b[128] __attribute__((aligned(16))) = {0,32767,-1608,32727,-3212,32609,-4808,32412,-6393,32137,-7962,31785,-9512,31356,-11039,30851,-12540,30272,-14010,29621,-15447,28897,-16846,28105,-18205,27244,-19520,26318,-20788,25329,-22005,24278,-23170,23169,-24279,22004,-25330,20787,-26319,19519,-27245,18204,-28106,16845,-28898,15446,-29622,14009,-30273,12539,-30852,11038,-31357,9511,-31786,7961,-32138,6392,-32413,4807,-32610,3211,-32728,1607,-32767,0,-32728,-1608,-32610,-3212,-32413,-4808,-32138,-6393,-31786,-7962,-31357,-9512,-30852,-11039,-30273,-12540,-29622,-14010,-28898,-15447,-28106,-16846,-27245,-18205,-26319,-19520,-25330,-20788,-24279,-22005,-23170,-23170,-22005,-24279,-20788,-25330,-19520,-26319,-18205,-27245,-16846,-28106,-15447,-28898,-14010,-29622,-12540,-30273,-11039,-30852,-9512,-31357,-7962,-31786,-6393,-32138,-4808,-32413,-3212,-32610,-1608,-32728};
+#ifdef D64STATS
+ time_stats_t ts_t,ts_d,ts_b;
-int16_t tw128c[128] __attribute__((aligned(16))) = {0,32767,1608,32727,3212,32609,4808,32412,6393,32137,7962,31785,9512,31356,11039,30851,12540,30272,14010,29621,15447,28897,16846,28105,18205,27244,19520,26318,20788,25329,22005,24278,23170,23169,24279,22004,25330,20787,26319,19519,27245,18204,28106,16845,28898,15446,29622,14009,30273,12539,30852,11038,31357,9511,31786,7961,32138,6392,32413,4807,32610,3211,32728,1607,32767,0,32728,-1608,32610,-3212,32413,-4808,32138,-6393,31786,-7962,31357,-9512,30852,-11039,30273,-12540,29622,-14010,28898,-15447,28106,-16846,27245,-18205,26319,-19520,25330,-20788,24279,-22005,23170,-23170,22005,-24279,20788,-25330,19520,-26319,18205,-27245,16846,-28106,15447,-28898,14010,-29622,12540,-30273,11039,-30852,9512,-31357,7962,-31786,6393,-32138,4808,-32413,3212,-32610,1608,-32728};
+ reset_meas(&ts_t);
+ reset_meas(&ts_d);
+ reset_meas(&ts_b);
+ start_meas(&ts_t);
+#endif
+#ifdef D64STATS
+ stop_meas(&ts_t);
+ start_meas(&ts_d);
+#endif
+
+ xintl0 = _mm256_permutevar8x32_epi32(x256[0],perm_mask); // x0 x4 x1 x5 x2 x6 x3 x7
+ xintl1 = _mm256_permutevar8x32_epi32(x256[1],perm_mask); // x8 x12 x9 x13 x10 x14 x11 x15
+ xintl2 = _mm256_permutevar8x32_epi32(x256[2],perm_mask); // x16 x20 x17 x21 x18 x22 x19 x23
+ xintl3 = _mm256_permutevar8x32_epi32(x256[3],perm_mask); // x24 x28 x25 x29 x26 x30 x27 x31
+ xintl4 = _mm256_permutevar8x32_epi32(x256[4],perm_mask); // x24 x28 x25 x29 x26 x30 x27 x31
+ xintl5 = _mm256_permutevar8x32_epi32(x256[5],perm_mask); // x24 x28 x25 x29 x26 x30 x27 x31
+ xintl6 = _mm256_permutevar8x32_epi32(x256[6],perm_mask); // x24 x28 x25 x29 x26 x30 x27 x31
+ xintl7 = _mm256_permutevar8x32_epi32(x256[7],perm_mask); // x24 x28 x25 x29 x26 x30 x27 x31
+
+ xtmp[0] = _mm256_unpacklo_epi64(xintl0,xintl1); // x0 x4 x8 x12 x1 x5 x9 x13
+ xtmp[4] = _mm256_unpackhi_epi64(xintl0,xintl1); // x2 x6 x10 x14 x3 x7 x11 x15
+ xtmp[1] = _mm256_unpacklo_epi64(xintl2,xintl3); // x16 x20 x24 x28 x17 x21 x25 x29
+ xtmp[5] = _mm256_unpackhi_epi64(xintl2,xintl3); // x18 x22 x26 x30 x19 x23 x27 x31
+ xtmp[2] = _mm256_unpacklo_epi64(xintl4,xintl5); // x32 x36 x40 x44 x33 x37 x41 x45
+ xtmp[6] = _mm256_unpackhi_epi64(xintl4,xintl5); // x34 x38 x42 x46 x35 x39 x43 x47
+ xtmp[3] = _mm256_unpacklo_epi64(xintl6,xintl7); // x48 x52 x56 x60 x49 x53 x57 x61
+ xtmp[7] = _mm256_unpackhi_epi64(xintl6,xintl7); // x50 x54 x58 x62 x51 x55 x59 x63
+
+
+ idft16_simd256((int16_t*)(xtmp),(int16_t*)ytmp);
+ // [y0 y1 y2 y3 y16 y17 y18 y19]
+ // [y4 y5 y6 y7 y20 y21 y22 y23]
+ // [y8 y9 y10 y11 y24 y25 y26 y27]
+ // [y12 y13 y14 y15 y28 y29 y30 y31]
+
+ idft16_simd256((int16_t*)(xtmp+4),(int16_t*)(ytmp+4));
+ // [y32 y33 y34 y35 y48 y49 y50 y51]
+ // [y36 y37 y38 y39 y52 y53 y54 y55]
+ // [y40 y41 y42 y43 y56 y57 y58 y59]
+ // [y44 y45 y46 y47 y60 y61 y62 y63]
+
+#ifdef D64STATS
+ stop_meas(&ts_d);
+ start_meas(&ts_b);
+#endif
+
+
+ ibfly4_16_256(ytmp,ytmp+2,ytmp+4,ytmp+6,
+ y256,y256+2,y256+4,y256+6,
+ tw64a_256,tw64a_256+2,tw64a_256+4,
+ tw64b_256,tw64b_256+2,tw64b_256+4);
+ // [y0 y1 y2 y3 y4 y5 y6 y7]
+ // [y16 y17 y18 y19 y20 y21 y22 y23]
+ // [y32 y33 y34 y35 y36 y37 y38 y39]
+ // [y48 y49 y50 y51 y52 y53 y54 y55]
+
+ ibfly4_16_256(ytmp+1,ytmp+3,ytmp+5,ytmp+7,
+ y256+1,y256+3,y256+5,y256+7,
+ tw64a_256+1,tw64a_256+3,tw64a_256+5,
+ tw64b_256+1,tw64b_256+3,tw64b_256+5);
+ // [y8 y9 y10 y11 y12 y13 y14 y15]
+ // [y24 y25 y26 y27 y28 y29 y30 y31]
+ // [y40 y41 y42 y43 y44 y45 y46 y47]
+ // [y56 y57 y58 y59 y60 y61 y62 y63]
+
+
+#ifdef D64STATS
+ stop_meas(&ts_b);
+ printf("t: %llu cycles, d: %llu cycles, b: %llu cycles\n",ts_t.diff,ts_d.diff,ts_b.diff);
+#endif
+
+
+ if (scale>0) {
+ y256[0] = shiftright_int16_simd256(y256[0],3);
+ y256[1] = shiftright_int16_simd256(y256[1],3);
+ y256[2] = shiftright_int16_simd256(y256[2],3);
+ y256[3] = shiftright_int16_simd256(y256[3],3);
+ y256[4] = shiftright_int16_simd256(y256[4],3);
+ y256[5] = shiftright_int16_simd256(y256[5],3);
+ y256[6] = shiftright_int16_simd256(y256[6],3);
+ y256[7] = shiftright_int16_simd256(y256[7],3);
+ }
+
+ _mm_empty();
+ _m_empty();
+
+}
+#endif
+
+int16_t tw128[128] __attribute__((aligned(32))) = { 32767,0,32727,-1608,32609,-3212,32412,-4808,32137,-6393,31785,-7962,31356,-9512,30851,-11039,30272,-12540,29621,-14010,28897,-15447,28105,-16846,27244,-18205,26318,-19520,25329,-20788,24278,-22005,23169,-23170,22004,-24279,20787,-25330,19519,-26319,18204,-27245,16845,-28106,15446,-28898,14009,-29622,12539,-30273,11038,-30852,9511,-31357,7961,-31786,6392,-32138,4807,-32413,3211,-32610,1607,-32728,0,-32767,-1608,-32728,-3212,-32610,-4808,-32413,-6393,-32138,-7962,-31786,-9512,-31357,-11039,-30852,-12540,-30273,-14010,-29622,-15447,-28898,-16846,-28106,-18205,-27245,-19520,-26319,-20788,-25330,-22005,-24279,-23170,-23170,-24279,-22005,-25330,-20788,-26319,-19520,-27245,-18205,-28106,-16846,-28898,-15447,-29622,-14010,-30273,-12540,-30852,-11039,-31357,-9512,-31786,-7962,-32138,-6393,-32413,-4808,-32610,-3212,-32728,-1608};
+
+int16_t tw128a[128] __attribute__((aligned(32))) = { 32767,0,32727,1608,32609,3212,32412,4808,32137,6393,31785,7962,31356,9512,30851,11039,30272,12540,29621,14010,28897,15447,28105,16846,27244,18205,26318,19520,25329,20788,24278,22005,23169,23170,22004,24279,20787,25330,19519,26319,18204,27245,16845,28106,15446,28898,14009,29622,12539,30273,11038,30852,9511,31357,7961,31786,6392,32138,4807,32413,3211,32610,1607,32728,0,32767,-1608,32728,-3212,32610,-4808,32413,-6393,32138,-7962,31786,-9512,31357,-11039,30852,-12540,30273,-14010,29622,-15447,28898,-16846,28106,-18205,27245,-19520,26319,-20788,25330,-22005,24279,-23170,23170,-24279,22005,-25330,20788,-26319,19520,-27245,18205,-28106,16846,-28898,15447,-29622,14010,-30273,12540,-30852,11039,-31357,9512,-31786,7962,-32138,6393,-32413,4808,-32610,3212,-32728,1608};
+
+int16_t tw128b[128] __attribute__((aligned(32))) = {0,32767,-1608,32727,-3212,32609,-4808,32412,-6393,32137,-7962,31785,-9512,31356,-11039,30851,-12540,30272,-14010,29621,-15447,28897,-16846,28105,-18205,27244,-19520,26318,-20788,25329,-22005,24278,-23170,23169,-24279,22004,-25330,20787,-26319,19519,-27245,18204,-28106,16845,-28898,15446,-29622,14009,-30273,12539,-30852,11038,-31357,9511,-31786,7961,-32138,6392,-32413,4807,-32610,3211,-32728,1607,-32767,0,-32728,-1608,-32610,-3212,-32413,-4808,-32138,-6393,-31786,-7962,-31357,-9512,-30852,-11039,-30273,-12540,-29622,-14010,-28898,-15447,-28106,-16846,-27245,-18205,-26319,-19520,-25330,-20788,-24279,-22005,-23170,-23170,-22005,-24279,-20788,-25330,-19520,-26319,-18205,-27245,-16846,-28106,-15447,-28898,-14010,-29622,-12540,-30273,-11039,-30852,-9512,-31357,-7962,-31786,-6393,-32138,-4808,-32413,-3212,-32610,-1608,-32728};
+
+int16_t tw128c[128] __attribute__((aligned(32))) = {0,32767,1608,32727,3212,32609,4808,32412,6393,32137,7962,31785,9512,31356,11039,30851,12540,30272,14010,29621,15447,28897,16846,28105,18205,27244,19520,26318,20788,25329,22005,24278,23170,23169,24279,22004,25330,20787,26319,19519,27245,18204,28106,16845,28898,15446,29622,14009,30273,12539,30852,11038,31357,9511,31786,7961,32138,6392,32413,4807,32610,3211,32728,1607,32767,0,32728,-1608,32610,-3212,32413,-4808,32138,-6393,31786,-7962,31357,-9512,30852,-11039,30273,-12540,29622,-14010,28898,-15447,28106,-16846,27245,-18205,26319,-19520,25330,-20788,24279,-22005,23170,-23170,22005,-24279,20788,-25330,19520,-26319,18205,-27245,16846,-28106,15447,-28898,14010,-29622,12540,-30273,11039,-30852,9512,-31357,7962,-31786,6393,-32138,4808,-32413,3212,-32610,1608,-32728};
+
+#ifndef __AVX2__
void dft128(int16_t *x,int16_t *y,int scale)
{
@@ -2002,6 +3157,8 @@ void dft128(int16_t *x,int16_t *y,int scale)
dft64((int16_t*)(xtmp),(int16_t*)ytmp,1);
dft64((int16_t*)(xtmp+32),(int16_t*)(ytmp+16),1);
+ /* write_output("dft128a.m","dfta",ytmp,64,1,1);
+ write_output("dft128b.m","dftb",ytmp+16,64,1,1);*/
for (i=0; i<16; i++) {
bfly2_16(ytmpp,ytmpp+16,
@@ -2052,11 +3209,83 @@ void dft128(int16_t *x,int16_t *y,int scale)
}
+ /* write_output("dft128out.m","dft128",y,128,1,1);
+ exit(-1);*/
_mm_empty();
_m_empty();
}
+#else // __AVX2__
+void dft128(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[16],*x256 = (simd256_q15_t *)x;
+ simd256_q15_t ytmp[16],*y256=(simd256_q15_t*)y;
+ simd256_q15_t *tw128a_256p=(simd256_q15_t *)tw128a,*tw128b_256p=(simd256_q15_t *)tw128b,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i;
+ simd256_q15_t ONE_OVER_SQRT2_Q15_256 = set1_int16_simd256(ONE_OVER_SQRT2_Q15);
+
+ transpose4_ooff_simd256(x256 ,xtmp,8);
+ transpose4_ooff_simd256(x256+2,xtmp+1,8);
+ transpose4_ooff_simd256(x256+4,xtmp+2,8);
+ transpose4_ooff_simd256(x256+6,xtmp+3,8);
+ transpose4_ooff_simd256(x256+8,xtmp+4,8);
+ transpose4_ooff_simd256(x256+10,xtmp+5,8);
+ transpose4_ooff_simd256(x256+12,xtmp+6,8);
+ transpose4_ooff_simd256(x256+14,xtmp+7,8);
+
+ /* write_output("dft128ina_256.m","dftina",xtmp,64,1,1);
+ write_output("dft128inb_256.m","dftinb",xtmp+8,64,1,1);
+ */
+
+ dft64((int16_t*)(xtmp),(int16_t*)ytmp,1);
+ dft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1);
+
+ /*write_output("dft128outa_256.m","dftouta",ytmp,64,1,1);
+ write_output("dft128outb_256.m","dftoutb",ytmp+8,64,1,1);
+ */
+
+ for (i=0; i<8; i++) {
+ bfly2_16_256(ytmpp,ytmpp+8,
+ y256p,y256p+8,
+ tw128a_256p,
+ tw128b_256p);
+ tw128a_256p++;
+ tw128b_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+
+ y256[0] = mulhi_int16_simd256(y256[0],ONE_OVER_SQRT2_Q15_256);
+ y256[1] = mulhi_int16_simd256(y256[1],ONE_OVER_SQRT2_Q15_256);
+ y256[2] = mulhi_int16_simd256(y256[2],ONE_OVER_SQRT2_Q15_256);
+ y256[3] = mulhi_int16_simd256(y256[3],ONE_OVER_SQRT2_Q15_256);
+ y256[4] = mulhi_int16_simd256(y256[4],ONE_OVER_SQRT2_Q15_256);
+ y256[5] = mulhi_int16_simd256(y256[5],ONE_OVER_SQRT2_Q15_256);
+ y256[6] = mulhi_int16_simd256(y256[6],ONE_OVER_SQRT2_Q15_256);
+ y256[7] = mulhi_int16_simd256(y256[7],ONE_OVER_SQRT2_Q15_256);
+ y256[8] = mulhi_int16_simd256(y256[8],ONE_OVER_SQRT2_Q15_256);
+ y256[9] = mulhi_int16_simd256(y256[9],ONE_OVER_SQRT2_Q15_256);
+ y256[10] = mulhi_int16_simd256(y256[10],ONE_OVER_SQRT2_Q15_256);
+ y256[11] = mulhi_int16_simd256(y256[11],ONE_OVER_SQRT2_Q15_256);
+ y256[12] = mulhi_int16_simd256(y256[12],ONE_OVER_SQRT2_Q15_256);
+ y256[13] = mulhi_int16_simd256(y256[13],ONE_OVER_SQRT2_Q15_256);
+ y256[14] = mulhi_int16_simd256(y256[14],ONE_OVER_SQRT2_Q15_256);
+ y256[15] = mulhi_int16_simd256(y256[15],ONE_OVER_SQRT2_Q15_256);
+
+ }
+
+ /* write_output("dft128.m","dft",y256,128,1,1);
+ exit(-1);*/
+}
+
+#endif
+
+#ifndef __AVX2__
void idft128(int16_t *x,int16_t *y,int scale)
{
@@ -2155,22 +3384,80 @@ void idft128(int16_t *x,int16_t *y,int scale)
}
+#else // __AVX2__
+void idft128(int16_t *x,int16_t *y,int scale)
+{
-int16_t tw256[384] __attribute__((aligned(16))) = { 32767,0,32757,-805,32727,-1608,32678,-2411,32609,-3212,32520,-4012,32412,-4808,32284,-5602,32137,-6393,31970,-7180,31785,-7962,31580,-8740,31356,-9512,31113,-10279,30851,-11039,30571,-11793,30272,-12540,29955,-13279,29621,-14010,29268,-14733,28897,-15447,28510,-16151,28105,-16846,27683,-17531,27244,-18205,26789,-18868,26318,-19520,25831,-20160,25329,-20788,24811,-21403,24278,-22005,23731,-22595,23169,-23170,22594,-23732,22004,-24279,21402,-24812,20787,-25330,20159,-25832,19519,-26319,18867,-26790,18204,-27245,17530,-27684,16845,-28106,16150,-28511,15446,-28898,14732,-29269,14009,-29622,13278,-29956,12539,-30273,11792,-30572,11038,-30852,10278,-31114,9511,-31357,8739,-31581,7961,-31786,7179,-31971,6392,-32138,5601,-32285,4807,-32413,4011,-32521,3211,-32610,2410,-32679,1607,-32728,804,-32758,
+ simd256_q15_t xtmp[16],*x256 = (simd256_q15_t *)x;
+ simd256_q15_t ytmp[16],*y256=(simd256_q15_t*)y;
+ simd256_q15_t *tw128_256p=(simd256_q15_t *)tw128,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i;
+ simd256_q15_t ONE_OVER_SQRT2_Q15_256 = set1_int16_simd256(ONE_OVER_SQRT2_Q15);
+
+
+ transpose4_ooff_simd256(x256 ,xtmp,8);
+ transpose4_ooff_simd256(x256+2,xtmp+1,8);
+ transpose4_ooff_simd256(x256+4,xtmp+2,8);
+ transpose4_ooff_simd256(x256+6,xtmp+3,8);
+ transpose4_ooff_simd256(x256+8,xtmp+4,8);
+ transpose4_ooff_simd256(x256+10,xtmp+5,8);
+ transpose4_ooff_simd256(x256+12,xtmp+6,8);
+ transpose4_ooff_simd256(x256+14,xtmp+7,8);
+
+ idft64((int16_t*)(xtmp),(int16_t*)ytmp,1);
+ idft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1);
+
+
+ for (i=0; i<8; i++) {
+ ibfly2_256(ytmpp,ytmpp+8,
+ y256p,y256p+8,
+ tw128_256p);
+ tw128_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+
+ y256[0] = mulhi_int16_simd256(y256[0],ONE_OVER_SQRT2_Q15_256);
+ y256[1] = mulhi_int16_simd256(y256[1],ONE_OVER_SQRT2_Q15_256);
+ y256[2] = mulhi_int16_simd256(y256[2],ONE_OVER_SQRT2_Q15_256);
+ y256[3] = mulhi_int16_simd256(y256[3],ONE_OVER_SQRT2_Q15_256);
+ y256[4] = mulhi_int16_simd256(y256[4],ONE_OVER_SQRT2_Q15_256);
+ y256[5] = mulhi_int16_simd256(y256[5],ONE_OVER_SQRT2_Q15_256);
+ y256[6] = mulhi_int16_simd256(y256[6],ONE_OVER_SQRT2_Q15_256);
+ y256[7] = mulhi_int16_simd256(y256[7],ONE_OVER_SQRT2_Q15_256);
+ y256[8] = mulhi_int16_simd256(y256[8],ONE_OVER_SQRT2_Q15_256);
+ y256[9] = mulhi_int16_simd256(y256[9],ONE_OVER_SQRT2_Q15_256);
+ y256[10] = mulhi_int16_simd256(y256[10],ONE_OVER_SQRT2_Q15_256);
+ y256[11] = mulhi_int16_simd256(y256[11],ONE_OVER_SQRT2_Q15_256);
+ y256[12] = mulhi_int16_simd256(y256[12],ONE_OVER_SQRT2_Q15_256);
+ y256[13] = mulhi_int16_simd256(y256[13],ONE_OVER_SQRT2_Q15_256);
+ y256[14] = mulhi_int16_simd256(y256[14],ONE_OVER_SQRT2_Q15_256);
+ y256[15] = mulhi_int16_simd256(y256[15],ONE_OVER_SQRT2_Q15_256);
+
+ }
+
+}
+
+#endif
+
+int16_t tw256[384] __attribute__((aligned(32))) = { 32767,0,32757,-805,32727,-1608,32678,-2411,32609,-3212,32520,-4012,32412,-4808,32284,-5602,32137,-6393,31970,-7180,31785,-7962,31580,-8740,31356,-9512,31113,-10279,30851,-11039,30571,-11793,30272,-12540,29955,-13279,29621,-14010,29268,-14733,28897,-15447,28510,-16151,28105,-16846,27683,-17531,27244,-18205,26789,-18868,26318,-19520,25831,-20160,25329,-20788,24811,-21403,24278,-22005,23731,-22595,23169,-23170,22594,-23732,22004,-24279,21402,-24812,20787,-25330,20159,-25832,19519,-26319,18867,-26790,18204,-27245,17530,-27684,16845,-28106,16150,-28511,15446,-28898,14732,-29269,14009,-29622,13278,-29956,12539,-30273,11792,-30572,11038,-30852,10278,-31114,9511,-31357,8739,-31581,7961,-31786,7179,-31971,6392,-32138,5601,-32285,4807,-32413,4011,-32521,3211,-32610,2410,-32679,1607,-32728,804,-32758,
32767,0,32727,-1608,32609,-3212,32412,-4808,32137,-6393,31785,-7962,31356,-9512,30851,-11039,30272,-12540,29621,-14010,28897,-15447,28105,-16846,27244,-18205,26318,-19520,25329,-20788,24278,-22005,23169,-23170,22004,-24279,20787,-25330,19519,-26319,18204,-27245,16845,-28106,15446,-28898,14009,-29622,12539,-30273,11038,-30852,9511,-31357,7961,-31786,6392,-32138,4807,-32413,3211,-32610,1607,-32728,0,-32767,-1608,-32728,-3212,-32610,-4808,-32413,-6393,-32138,-7962,-31786,-9512,-31357,-11039,-30852,-12540,-30273,-14010,-29622,-15447,-28898,-16846,-28106,-18205,-27245,-19520,-26319,-20788,-25330,-22005,-24279,-23170,-23170,-24279,-22005,-25330,-20788,-26319,-19520,-27245,-18205,-28106,-16846,-28898,-15447,-29622,-14010,-30273,-12540,-30852,-11039,-31357,-9512,-31786,-7962,-32138,-6393,-32413,-4808,-32610,-3212,-32728,-1608,
32767,0,32678,-2411,32412,-4808,31970,-7180,31356,-9512,30571,-11793,29621,-14010,28510,-16151,27244,-18205,25831,-20160,24278,-22005,22594,-23732,20787,-25330,18867,-26790,16845,-28106,14732,-29269,12539,-30273,10278,-31114,7961,-31786,5601,-32285,3211,-32610,804,-32758,-1608,-32728,-4012,-32521,-6393,-32138,-8740,-31581,-11039,-30852,-13279,-29956,-15447,-28898,-17531,-27684,-19520,-26319,-21403,-24812,-23170,-23170,-24812,-21403,-26319,-19520,-27684,-17531,-28898,-15447,-29956,-13279,-30852,-11039,-31581,-8740,-32138,-6393,-32521,-4012,-32728,-1608,-32758,804,-32610,3211,-32285,5601,-31786,7961,-31114,10278,-30273,12539,-29269,14732,-28106,16845,-26790,18867,-25330,20787,-23732,22594,-22005,24278,-20160,25831,-18205,27244,-16151,28510,-14010,29621,-11793,30571,-9512,31356,-7180,31970,-4808,32412,-2411,32678
};
-int16_t tw256a[384] __attribute__((aligned(16))) = { 32767,0,32757,804,32727,1607,32678,2410,32609,3211,32520,4011,32412,4807,32284,5601,32137,6392,31970,7179,31785,7961,31580,8739,31356,9511,31113,10278,30851,11038,30571,11792,30272,12539,29955,13278,29621,14009,29268,14732,28897,15446,28510,16150,28105,16845,27683,17530,27244,18204,26789,18867,26318,19519,25831,20159,25329,20787,24811,21402,24278,22004,23731,22594,23169,23169,22594,23731,22004,24278,21402,24811,20787,25329,20159,25831,19519,26318,18867,26789,18204,27244,17530,27683,16845,28105,16150,28510,15446,28897,14732,29268,14009,29621,13278,29955,12539,30272,11792,30571,11038,30851,10278,31113,9511,31356,8739,31580,7961,31785,7179,31970,6392,32137,5601,32284,4807,32412,4011,32520,3211,32609,2410,32678,1607,32727,804,32757,
+int16_t tw256a[384] __attribute__((aligned(32))) = { 32767,0,32757,804,32727,1607,32678,2410,32609,3211,32520,4011,32412,4807,32284,5601,32137,6392,31970,7179,31785,7961,31580,8739,31356,9511,31113,10278,30851,11038,30571,11792,30272,12539,29955,13278,29621,14009,29268,14732,28897,15446,28510,16150,28105,16845,27683,17530,27244,18204,26789,18867,26318,19519,25831,20159,25329,20787,24811,21402,24278,22004,23731,22594,23169,23169,22594,23731,22004,24278,21402,24811,20787,25329,20159,25831,19519,26318,18867,26789,18204,27244,17530,27683,16845,28105,16150,28510,15446,28897,14732,29268,14009,29621,13278,29955,12539,30272,11792,30571,11038,30851,10278,31113,9511,31356,8739,31580,7961,31785,7179,31970,6392,32137,5601,32284,4807,32412,4011,32520,3211,32609,2410,32678,1607,32727,804,32757,
32767,0,32727,1607,32609,3211,32412,4807,32137,6392,31785,7961,31356,9511,30851,11038,30272,12539,29621,14009,28897,15446,28105,16845,27244,18204,26318,19519,25329,20787,24278,22004,23169,23169,22004,24278,20787,25329,19519,26318,18204,27244,16845,28105,15446,28897,14009,29621,12539,30272,11038,30851,9511,31356,7961,31785,6392,32137,4807,32412,3211,32609,1607,32727,0,32767,-1608,32727,-3212,32609,-4808,32412,-6393,32137,-7962,31785,-9512,31356,-11039,30851,-12540,30272,-14010,29621,-15447,28897,-16846,28105,-18205,27244,-19520,26318,-20788,25329,-22005,24278,-23170,23169,-24279,22004,-25330,20787,-26319,19519,-27245,18204,-28106,16845,-28898,15446,-29622,14009,-30273,12539,-30852,11038,-31357,9511,-31786,7961,-32138,6392,-32413,4807,-32610,3211,-32728,1607,
32767,0,32678,2410,32412,4807,31970,7179,31356,9511,30571,11792,29621,14009,28510,16150,27244,18204,25831,20159,24278,22004,22594,23731,20787,25329,18867,26789,16845,28105,14732,29268,12539,30272,10278,31113,7961,31785,5601,32284,3211,32609,804,32757,-1608,32727,-4012,32520,-6393,32137,-8740,31580,-11039,30851,-13279,29955,-15447,28897,-17531,27683,-19520,26318,-21403,24811,-23170,23169,-24812,21402,-26319,19519,-27684,17530,-28898,15446,-29956,13278,-30852,11038,-31581,8739,-32138,6392,-32521,4011,-32728,1607,-32758,-805,-32610,-3212,-32285,-5602,-31786,-7962,-31114,-10279,-30273,-12540,-29269,-14733,-28106,-16846,-26790,-18868,-25330,-20788,-23732,-22595,-22005,-24279,-20160,-25832,-18205,-27245,-16151,-28511,-14010,-29622,-11793,-30572,-9512,-31357,-7180,-31971,-4808,-32413,-2411,-32679
};
-int16_t tw256b[384] __attribute__((aligned(16))) = {0,32767,-805,32757,-1608,32727,-2411,32678,-3212,32609,-4012,32520,-4808,32412,-5602,32284,-6393,32137,-7180,31970,-7962,31785,-8740,31580,-9512,31356,-10279,31113,-11039,30851,-11793,30571,-12540,30272,-13279,29955,-14010,29621,-14733,29268,-15447,28897,-16151,28510,-16846,28105,-17531,27683,-18205,27244,-18868,26789,-19520,26318,-20160,25831,-20788,25329,-21403,24811,-22005,24278,-22595,23731,-23170,23169,-23732,22594,-24279,22004,-24812,21402,-25330,20787,-25832,20159,-26319,19519,-26790,18867,-27245,18204,-27684,17530,-28106,16845,-28511,16150,-28898,15446,-29269,14732,-29622,14009,-29956,13278,-30273,12539,-30572,11792,-30852,11038,-31114,10278,-31357,9511,-31581,8739,-31786,7961,-31971,7179,-32138,6392,-32285,5601,-32413,4807,-32521,4011,-32610,3211,-32679,2410,-32728,1607,-32758,804,
+int16_t tw256b[384] __attribute__((aligned(32))) = {0,32767,-805,32757,-1608,32727,-2411,32678,-3212,32609,-4012,32520,-4808,32412,-5602,32284,-6393,32137,-7180,31970,-7962,31785,-8740,31580,-9512,31356,-10279,31113,-11039,30851,-11793,30571,-12540,30272,-13279,29955,-14010,29621,-14733,29268,-15447,28897,-16151,28510,-16846,28105,-17531,27683,-18205,27244,-18868,26789,-19520,26318,-20160,25831,-20788,25329,-21403,24811,-22005,24278,-22595,23731,-23170,23169,-23732,22594,-24279,22004,-24812,21402,-25330,20787,-25832,20159,-26319,19519,-26790,18867,-27245,18204,-27684,17530,-28106,16845,-28511,16150,-28898,15446,-29269,14732,-29622,14009,-29956,13278,-30273,12539,-30572,11792,-30852,11038,-31114,10278,-31357,9511,-31581,8739,-31786,7961,-31971,7179,-32138,6392,-32285,5601,-32413,4807,-32521,4011,-32610,3211,-32679,2410,-32728,1607,-32758,804,
0,32767,-1608,32727,-3212,32609,-4808,32412,-6393,32137,-7962,31785,-9512,31356,-11039,30851,-12540,30272,-14010,29621,-15447,28897,-16846,28105,-18205,27244,-19520,26318,-20788,25329,-22005,24278,-23170,23169,-24279,22004,-25330,20787,-26319,19519,-27245,18204,-28106,16845,-28898,15446,-29622,14009,-30273,12539,-30852,11038,-31357,9511,-31786,7961,-32138,6392,-32413,4807,-32610,3211,-32728,1607,-32767,0,-32728,-1608,-32610,-3212,-32413,-4808,-32138,-6393,-31786,-7962,-31357,-9512,-30852,-11039,-30273,-12540,-29622,-14010,-28898,-15447,-28106,-16846,-27245,-18205,-26319,-19520,-25330,-20788,-24279,-22005,-23170,-23170,-22005,-24279,-20788,-25330,-19520,-26319,-18205,-27245,-16846,-28106,-15447,-28898,-14010,-29622,-12540,-30273,-11039,-30852,-9512,-31357,-7962,-31786,-6393,-32138,-4808,-32413,-3212,-32610,-1608,-32728,
0,32767,-2411,32678,-4808,32412,-7180,31970,-9512,31356,-11793,30571,-14010,29621,-16151,28510,-18205,27244,-20160,25831,-22005,24278,-23732,22594,-25330,20787,-26790,18867,-28106,16845,-29269,14732,-30273,12539,-31114,10278,-31786,7961,-32285,5601,-32610,3211,-32758,804,-32728,-1608,-32521,-4012,-32138,-6393,-31581,-8740,-30852,-11039,-29956,-13279,-28898,-15447,-27684,-17531,-26319,-19520,-24812,-21403,-23170,-23170,-21403,-24812,-19520,-26319,-17531,-27684,-15447,-28898,-13279,-29956,-11039,-30852,-8740,-31581,-6393,-32138,-4012,-32521,-1608,-32728,804,-32758,3211,-32610,5601,-32285,7961,-31786,10278,-31114,12539,-30273,14732,-29269,16845,-28106,18867,-26790,20787,-25330,22594,-23732,24278,-22005,25831,-20160,27244,-18205,28510,-16151,29621,-14010,30571,-11793,31356,-9512,31970,-7180,32412,-4808,32678,-2411
};
-
+#ifndef __AVX2__
void dft256(int16_t *x,int16_t *y,int scale)
{
@@ -2339,25 +3626,205 @@ void idft256(int16_t *x,int16_t *y,int scale)
}
-int16_t tw512[512] __attribute__((aligned(16))) = {
+#else //__AVX2__
+
+void dft256(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[32],ytmp[32],*tw256a_256p=(simd256_q15_t *)tw256a,*tw256b_256p=(simd256_q15_t *)tw256b,*x256=(simd256_q15_t *)x,*y256=(simd256_q15_t *)y,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i;
+
+ transpose16_ooff_simd256(x256+0,xtmp+0,8);
+ transpose16_ooff_simd256(x256+4,xtmp+1,8);
+ transpose16_ooff_simd256(x256+8,xtmp+2,8);
+ transpose16_ooff_simd256(x256+12,xtmp+3,8);
+ transpose16_ooff_simd256(x256+16,xtmp+4,8);
+ transpose16_ooff_simd256(x256+20,xtmp+5,8);
+ transpose16_ooff_simd256(x256+24,xtmp+6,8);
+ transpose16_ooff_simd256(x256+28,xtmp+7,8);
+ /*
+ char vname[10];
+ for (i=0;i<32;i++) {
+ sprintf(vname,"xtmp%d",i);
+ print_shorts256(vname,(int16_t*)(xtmp+i));
+ }
+ exit(-1);*/
+
+ dft64((int16_t*)(xtmp),(int16_t*)(ytmp),1);
+ dft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1);
+ dft64((int16_t*)(xtmp+16),(int16_t*)(ytmp+16),1);
+ dft64((int16_t*)(xtmp+24),(int16_t*)(ytmp+24),1);
+
+
+ bfly4_16_256(ytmpp,ytmpp+8,ytmpp+16,ytmpp+24,
+ y256p,y256p+8,y256p+16,y256p+24,
+ tw256a_256p,tw256a_256p+8,tw256a_256p+16,
+ tw256b_256p,tw256b_256p+8,tw256b_256p+16);
+ bfly4_16_256(ytmpp+1,ytmpp+9,ytmpp+17,ytmpp+25,
+ y256p+1,y256p+9,y256p+17,y256p+25,
+ tw256a_256p+1,tw256a_256p+9,tw256a_256p+17,
+ tw256b_256p+1,tw256b_256p+9,tw256b_256p+17);
+ bfly4_16_256(ytmpp+2,ytmpp+10,ytmpp+18,ytmpp+26,
+ y256p+2,y256p+10,y256p+18,y256p+26,
+ tw256a_256p+2,tw256a_256p+10,tw256a_256p+18,
+ tw256b_256p+2,tw256b_256p+10,tw256b_256p+18);
+ bfly4_16_256(ytmpp+3,ytmpp+11,ytmpp+19,ytmpp+27,
+ y256p+3,y256p+11,y256p+19,y256p+27,
+ tw256a_256p+3,tw256a_256p+11,tw256a_256p+19,
+ tw256b_256p+3,tw256b_256p+11,tw256b_256p+19);
+ bfly4_16_256(ytmpp+4,ytmpp+12,ytmpp+20,ytmpp+28,
+ y256p+4,y256p+12,y256p+20,y256p+28,
+ tw256a_256p+4,tw256a_256p+12,tw256a_256p+20,
+ tw256b_256p+4,tw256b_256p+12,tw256b_256p+20);
+ bfly4_16_256(ytmpp+5,ytmpp+13,ytmpp+21,ytmpp+29,
+ y256p+5,y256p+13,y256p+21,y256p+29,
+ tw256a_256p+5,tw256a_256p+13,tw256a_256p+21,
+ tw256b_256p+5,tw256b_256p+13,tw256b_256p+21);
+ bfly4_16_256(ytmpp+6,ytmpp+14,ytmpp+22,ytmpp+30,
+ y256p+6,y256p+14,y256p+22,y256p+30,
+ tw256a_256p+6,tw256a_256p+14,tw256a_256p+22,
+ tw256b_256p+6,tw256b_256p+14,tw256b_256p+22);
+ bfly4_16_256(ytmpp+7,ytmpp+15,ytmpp+23,ytmpp+31,
+ y256p+7,y256p+15,y256p+23,y256p+31,
+ tw256a_256p+7,tw256a_256p+15,tw256a_256p+23,
+ tw256b_256p+7,tw256b_256p+15,tw256b_256p+23);
+
+ if (scale>0) {
+
+ for (i=0; i<2; i++) {
+ y256[0] = shiftright_int16_simd256(y256[0],1);
+ y256[1] = shiftright_int16_simd256(y256[1],1);
+ y256[2] = shiftright_int16_simd256(y256[2],1);
+ y256[3] = shiftright_int16_simd256(y256[3],1);
+ y256[4] = shiftright_int16_simd256(y256[4],1);
+ y256[5] = shiftright_int16_simd256(y256[5],1);
+ y256[6] = shiftright_int16_simd256(y256[6],1);
+ y256[7] = shiftright_int16_simd256(y256[7],1);
+ y256[8] = shiftright_int16_simd256(y256[8],1);
+ y256[9] = shiftright_int16_simd256(y256[9],1);
+ y256[10] = shiftright_int16_simd256(y256[10],1);
+ y256[11] = shiftright_int16_simd256(y256[11],1);
+ y256[12] = shiftright_int16_simd256(y256[12],1);
+ y256[13] = shiftright_int16_simd256(y256[13],1);
+ y256[14] = shiftright_int16_simd256(y256[14],1);
+ y256[15] = shiftright_int16_simd256(y256[15],1);
+
+ y256+=16;
+ }
+
+ }
+
+ _mm_empty();
+ _m_empty();
+
+}
+
+void idft256(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[32],ytmp[32],*tw256_256p=(simd256_q15_t *)tw256,*x256=(simd256_q15_t *)x,*y256=(simd256_q15_t *)y,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i;
+
+ transpose16_ooff_simd256(x256+0,xtmp+0,8);
+ transpose16_ooff_simd256(x256+4,xtmp+1,8);
+ transpose16_ooff_simd256(x256+8,xtmp+2,8);
+ transpose16_ooff_simd256(x256+12,xtmp+3,8);
+ transpose16_ooff_simd256(x256+16,xtmp+4,8);
+ transpose16_ooff_simd256(x256+20,xtmp+5,8);
+ transpose16_ooff_simd256(x256+24,xtmp+6,8);
+ transpose16_ooff_simd256(x256+28,xtmp+7,8);
+
+ idft64((int16_t*)(xtmp),(int16_t*)(ytmp),1);
+ idft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1);
+ idft64((int16_t*)(xtmp+16),(int16_t*)(ytmp+16),1);
+ idft64((int16_t*)(xtmp+24),(int16_t*)(ytmp+24),1);
+
+
+ ibfly4_256(ytmpp,ytmpp+8,ytmpp+16,ytmpp+24,
+ y256p,y256p+8,y256p+16,y256p+24,
+ tw256_256p,tw256_256p+8,tw256_256p+16);
+
+ ibfly4_256(ytmpp+1,ytmpp+9,ytmpp+17,ytmpp+25,
+ y256p+1,y256p+9,y256p+17,y256p+25,
+ tw256_256p+1,tw256_256p+9,tw256_256p+17);
+
+ ibfly4_256(ytmpp+2,ytmpp+10,ytmpp+18,ytmpp+26,
+ y256p+2,y256p+10,y256p+18,y256p+26,
+ tw256_256p+2,tw256_256p+10,tw256_256p+18);
+
+ ibfly4_256(ytmpp+3,ytmpp+11,ytmpp+19,ytmpp+27,
+ y256p+3,y256p+11,y256p+19,y256p+27,
+ tw256_256p+3,tw256_256p+11,tw256_256p+19);
+
+ ibfly4_256(ytmpp+4,ytmpp+12,ytmpp+20,ytmpp+28,
+ y256p+4,y256p+12,y256p+20,y256p+28,
+ tw256_256p+4,tw256_256p+12,tw256_256p+20);
+
+ ibfly4_256(ytmpp+5,ytmpp+13,ytmpp+21,ytmpp+29,
+ y256p+5,y256p+13,y256p+21,y256p+29,
+ tw256_256p+5,tw256_256p+13,tw256_256p+21);
+
+ ibfly4_256(ytmpp+6,ytmpp+14,ytmpp+22,ytmpp+30,
+ y256p+6,y256p+14,y256p+22,y256p+30,
+ tw256_256p+6,tw256_256p+14,tw256_256p+22);
+
+ ibfly4_256(ytmpp+7,ytmpp+15,ytmpp+23,ytmpp+31,
+ y256p+7,y256p+15,y256p+23,y256p+31,
+ tw256_256p+7,tw256_256p+15,tw256_256p+23);
+
+
+ if (scale>0) {
+
+ for (i=0; i<2; i++) {
+ y256[0] = shiftright_int16_simd256(y256[0],1);
+ y256[1] = shiftright_int16_simd256(y256[1],1);
+ y256[2] = shiftright_int16_simd256(y256[2],1);
+ y256[3] = shiftright_int16_simd256(y256[3],1);
+ y256[4] = shiftright_int16_simd256(y256[4],1);
+ y256[5] = shiftright_int16_simd256(y256[5],1);
+ y256[6] = shiftright_int16_simd256(y256[6],1);
+ y256[7] = shiftright_int16_simd256(y256[7],1);
+ y256[8] = shiftright_int16_simd256(y256[8],1);
+ y256[9] = shiftright_int16_simd256(y256[9],1);
+ y256[10] = shiftright_int16_simd256(y256[10],1);
+ y256[11] = shiftright_int16_simd256(y256[11],1);
+ y256[12] = shiftright_int16_simd256(y256[12],1);
+ y256[13] = shiftright_int16_simd256(y256[13],1);
+ y256[14] = shiftright_int16_simd256(y256[14],1);
+ y256[15] = shiftright_int16_simd256(y256[15],1);
+
+ y256+=16;
+ }
+
+ }
+
+ _mm_empty();
+ _m_empty();
+
+}
+
+#endif
+int16_t tw512[512] __attribute__((aligned(32))) = {
32767,0,32764,-403,32757,-805,32744,-1207,32727,-1608,32705,-2010,32678,-2411,32646,-2812,32609,-3212,32567,-3612,32520,-4012,32468,-4410,32412,-4808,32350,-5206,32284,-5602,32213,-5998,32137,-6393,32056,-6787,31970,-7180,31880,-7572,31785,-7962,31684,-8352,31580,-8740,31470,-9127,31356,-9512,31236,-9896,31113,-10279,30984,-10660,30851,-11039,30713,-11417,30571,-11793,30424,-12167,30272,-12540,30116,-12910,29955,-13279,29790,-13646,29621,-14010,29446,-14373,29268,-14733,29085,-15091,28897,-15447,28706,-15800,28510,-16151,28309,-16500,28105,-16846,27896,-17190,27683,-17531,27466,-17869,27244,-18205,27019,-18538,26789,-18868,26556,-19195,26318,-19520,26077,-19841,25831,-20160,25582,-20475,25329,-20788,25072,-21097,24811,-21403,24546,-21706,24278,-22005,24006,-22302,23731,-22595,23452,-22884,23169,-23170,22883,-23453,22594,-23732,22301,-24007,22004,-24279,21705,-24547,21402,-24812,21096,-25073,20787,-25330,20474,-25583,20159,-25832,19840,-26078,19519,-26319,19194,-26557,18867,-26790,18537,-27020,18204,-27245,17868,-27467,17530,-27684,17189,-27897,16845,-28106,16499,-28310,16150,-28511,15799,-28707,15446,-28898,15090,-29086,14732,-29269,14372,-29447,14009,-29622,13645,-29791,13278,-29956,12909,-30117,12539,-30273,12166,-30425,11792,-30572,11416,-30714,11038,-30852,10659,-30985,10278,-31114,9895,-31237,9511,-31357,9126,-31471,8739,-31581,8351,-31685,7961,-31786,7571,-31881,7179,-31971,6786,-32057,6392,-32138,5997,-32214,5601,-32285,5205,-32351,4807,-32413,4409,-32469,4011,-32521,3611,-32568,3211,-32610,2811,-32647,2410,-32679,2009,-32706,1607,-32728,1206,-32745,804,-32758,402,-32765,0,-32767,-403,-32765,-805,-32758,-1207,-32745,-1608,-32728,-2010,-32706,-2411,-32679,-2812,-32647,-3212,-32610,-3612,-32568,-4012,-32521,-4410,-32469,-4808,-32413,-5206,-32351,-5602,-32285,-5998,-32214,-6393,-32138,-6787,-32057,-7180,-31971,-7572,-31881,-7962,-31786,-8352,-31685,-8740,-31581,-9127,-31471,-9512,-31357,-9896,-31237,-10279,-31114,-10660,-30985,-11039,-30852,-11417,-30714,-11793,-30572,-12167,-30425,-12540,-30273,-12910,-30117,-13279,-29956,-13646,-29791,-14010,-29622,-14373,-29447,-14733,-29269,-15091,-29086,-15447,-28898,-15800,-28707,-16151,-28511,-16500,-28310,-16846,-28106,-17190,-27897,-17531,-27684,-17869,-27467,-18205,-27245,-18538,-27020,-18868,-26790,-19195,-26557,-19520,-26319,-19841,-26078,-20160,-25832,-20475,-25583,-20788,-25330,-21097,-25073,-21403,-24812,-21706,-24547,-22005,-24279,-22302,-24007,-22595,-23732,-22884,-23453,-23170,-23170,-23453,-22884,-23732,-22595,-24007,-22302,-24279,-22005,-24547,-21706,-24812,-21403,-25073,-21097,-25330,-20788,-25583,-20475,-25832,-20160,-26078,-19841,-26319,-19520,-26557,-19195,-26790,-18868,-27020,-18538,-27245,-18205,-27467,-17869,-27684,-17531,-27897,-17190,-28106,-16846,-28310,-16500,-28511,-16151,-28707,-15800,-28898,-15447,-29086,-15091,-29269,-14733,-29447,-14373,-29622,-14010,-29791,-13646,-29956,-13279,-30117,-12910,-30273,-12540,-30425,-12167,-30572,-11793,-30714,-11417,-30852,-11039,-30985,-10660,-31114,-10279,-31237,-9896,-31357,-9512,-31471,-9127,-31581,-8740,-31685,-8352,-31786,-7962,-31881,-7572,-31971,-7180,-32057,-6787,-32138,-6393,-32214,-5998,-32285,-5602,-32351,-5206,-32413,-4808,-32469,-4410,-32521,-4012,-32568,-3612,-32610,-3212,-32647,-2812,-32679,-2411,-32706,-2010,-32728,-1608,-32745,-1207,-32758,-805,-32765,-403
};
-int16_t tw512a[512] __attribute__((aligned(16))) = {
+int16_t tw512a[512] __attribute__((aligned(32))) = {
32767,0,32764,403,32757,805,32744,1207,32727,1608,32705,2010,32678,2411,32646,2812,32609,3212,32567,3612,32520,4012,32468,4410,32412,4808,32350,5206,32284,5602,32213,5998,32137,6393,32056,6787,31970,7180,31880,7572,31785,7962,31684,8352,31580,8740,31470,9127,31356,9512,31236,9896,31113,10279,30984,10660,30851,11039,30713,11417,30571,11793,30424,12167,30272,12540,30116,12910,29955,13279,29790,13646,29621,14010,29446,14373,29268,14733,29085,15091,28897,15447,28706,15800,28510,16151,28309,16500,28105,16846,27896,17190,27683,17531,27466,17869,27244,18205,27019,18538,26789,18868,26556,19195,26318,19520,26077,19841,25831,20160,25582,20475,25329,20788,25072,21097,24811,21403,24546,21706,24278,22005,24006,22302,23731,22595,23452,22884,23169,23170,22883,23453,22594,23732,22301,24007,22004,24279,21705,24547,21402,24812,21096,25073,20787,25330,20474,25583,20159,25832,19840,26078,19519,26319,19194,26557,18867,26790,18537,27020,18204,27245,17868,27467,17530,27684,17189,27897,16845,28106,16499,28310,16150,28511,15799,28707,15446,28898,15090,29086,14732,29269,14372,29447,14009,29622,13645,29791,13278,29956,12909,30117,12539,30273,12166,30425,11792,30572,11416,30714,11038,30852,10659,30985,10278,31114,9895,31237,9511,31357,9126,31471,8739,31581,8351,31685,7961,31786,7571,31881,7179,31971,6786,32057,6392,32138,5997,32214,5601,32285,5205,32351,4807,32413,4409,32469,4011,32521,3611,32568,3211,32610,2811,32647,2410,32679,2009,32706,1607,32728,1206,32745,804,32758,402,32765,0,32767,-403,32765,-805,32758,-1207,32745,-1608,32728,-2010,32706,-2411,32679,-2812,32647,-3212,32610,-3612,32568,-4012,32521,-4410,32469,-4808,32413,-5206,32351,-5602,32285,-5998,32214,-6393,32138,-6787,32057,-7180,31971,-7572,31881,-7962,31786,-8352,31685,-8740,31581,-9127,31471,-9512,31357,-9896,31237,-10279,31114,-10660,30985,-11039,30852,-11417,30714,-11793,30572,-12167,30425,-12540,30273,-12910,30117,-13279,29956,-13646,29791,-14010,29622,-14373,29447,-14733,29269,-15091,29086,-15447,28898,-15800,28707,-16151,28511,-16500,28310,-16846,28106,-17190,27897,-17531,27684,-17869,27467,-18205,27245,-18538,27020,-18868,26790,-19195,26557,-19520,26319,-19841,26078,-20160,25832,-20475,25583,-20788,25330,-21097,25073,-21403,24812,-21706,24547,-22005,24279,-22302,24007,-22595,23732,-22884,23453,-23170,23170,-23453,22884,-23732,22595,-24007,22302,-24279,22005,-24547,21706,-24812,21403,-25073,21097,-25330,20788,-25583,20475,-25832,20160,-26078,19841,-26319,19520,-26557,19195,-26790,18868,-27020,18538,-27245,18205,-27467,17869,-27684,17531,-27897,17190,-28106,16846,-28310,16500,-28511,16151,-28707,15800,-28898,15447,-29086,15091,-29269,14733,-29447,14373,-29622,14010,-29791,13646,-29956,13279,-30117,12910,-30273,12540,-30425,12167,-30572,11793,-30714,11417,-30852,11039,-30985,10660,-31114,10279,-31237,9896,-31357,9512,-31471,9127,-31581,8740,-31685,8352,-31786,7962,-31881,7572,-31971,7180,-32057,6787,-32138,6393,-32214,5998,-32285,5602,-32351,5206,-32413,4808,-32469,4410,-32521,4012,-32568,3612,-32610,3212,-32647,2812,-32679,2411,-32706,2010,-32728,1608,-32745,1207,-32758,805,-32765,403
};
-int16_t tw512b[512] __attribute__((aligned(16))) = {
+int16_t tw512b[512] __attribute__((aligned(32))) = {
0,32767,-403,32764,-805,32757,-1207,32744,-1608,32727,-2010,32705,-2411,32678,-2812,32646,-3212,32609,-3612,32567,-4012,32520,-4410,32468,-4808,32412,-5206,32350,-5602,32284,-5998,32213,-6393,32137,-6787,32056,-7180,31970,-7572,31880,-7962,31785,-8352,31684,-8740,31580,-9127,31470,-9512,31356,-9896,31236,-10279,31113,-10660,30984,-11039,30851,-11417,30713,-11793,30571,-12167,30424,-12540,30272,-12910,30116,-13279,29955,-13646,29790,-14010,29621,-14373,29446,-14733,29268,-15091,29085,-15447,28897,-15800,28706,-16151,28510,-16500,28309,-16846,28105,-17190,27896,-17531,27683,-17869,27466,-18205,27244,-18538,27019,-18868,26789,-19195,26556,-19520,26318,-19841,26077,-20160,25831,-20475,25582,-20788,25329,-21097,25072,-21403,24811,-21706,24546,-22005,24278,-22302,24006,-22595,23731,-22884,23452,-23170,23169,-23453,22883,-23732,22594,-24007,22301,-24279,22004,-24547,21705,-24812,21402,-25073,21096,-25330,20787,-25583,20474,-25832,20159,-26078,19840,-26319,19519,-26557,19194,-26790,18867,-27020,18537,-27245,18204,-27467,17868,-27684,17530,-27897,17189,-28106,16845,-28310,16499,-28511,16150,-28707,15799,-28898,15446,-29086,15090,-29269,14732,-29447,14372,-29622,14009,-29791,13645,-29956,13278,-30117,12909,-30273,12539,-30425,12166,-30572,11792,-30714,11416,-30852,11038,-30985,10659,-31114,10278,-31237,9895,-31357,9511,-31471,9126,-31581,8739,-31685,8351,-31786,7961,-31881,7571,-31971,7179,-32057,6786,-32138,6392,-32214,5997,-32285,5601,-32351,5205,-32413,4807,-32469,4409,-32521,4011,-32568,3611,-32610,3211,-32647,2811,-32679,2410,-32706,2009,-32728,1607,-32745,1206,-32758,804,-32765,402,-32767,0,-32765,-403,-32758,-805,-32745,-1207,-32728,-1608,-32706,-2010,-32679,-2411,-32647,-2812,-32610,-3212,-32568,-3612,-32521,-4012,-32469,-4410,-32413,-4808,-32351,-5206,-32285,-5602,-32214,-5998,-32138,-6393,-32057,-6787,-31971,-7180,-31881,-7572,-31786,-7962,-31685,-8352,-31581,-8740,-31471,-9127,-31357,-9512,-31237,-9896,-31114,-10279,-30985,-10660,-30852,-11039,-30714,-11417,-30572,-11793,-30425,-12167,-30273,-12540,-30117,-12910,-29956,-13279,-29791,-13646,-29622,-14010,-29447,-14373,-29269,-14733,-29086,-15091,-28898,-15447,-28707,-15800,-28511,-16151,-28310,-16500,-28106,-16846,-27897,-17190,-27684,-17531,-27467,-17869,-27245,-18205,-27020,-18538,-26790,-18868,-26557,-19195,-26319,-19520,-26078,-19841,-25832,-20160,-25583,-20475,-25330,-20788,-25073,-21097,-24812,-21403,-24547,-21706,-24279,-22005,-24007,-22302,-23732,-22595,-23453,-22884,-23170,-23170,-22884,-23453,-22595,-23732,-22302,-24007,-22005,-24279,-21706,-24547,-21403,-24812,-21097,-25073,-20788,-25330,-20475,-25583,-20160,-25832,-19841,-26078,-19520,-26319,-19195,-26557,-18868,-26790,-18538,-27020,-18205,-27245,-17869,-27467,-17531,-27684,-17190,-27897,-16846,-28106,-16500,-28310,-16151,-28511,-15800,-28707,-15447,-28898,-15091,-29086,-14733,-29269,-14373,-29447,-14010,-29622,-13646,-29791,-13279,-29956,-12910,-30117,-12540,-30273,-12167,-30425,-11793,-30572,-11417,-30714,-11039,-30852,-10660,-30985,-10279,-31114,-9896,-31237,-9512,-31357,-9127,-31471,-8740,-31581,-8352,-31685,-7962,-31786,-7572,-31881,-7180,-31971,-6787,-32057,-6393,-32138,-5998,-32214,-5602,-32285,-5206,-32351,-4808,-32413,-4410,-32469,-4012,-32521,-3612,-32568,-3212,-32610,-2812,-32647,-2411,-32679,-2010,-32706,-1608,-32728,-1207,-32745,-805,-32758,-403,-32765
};
-int16_t tw512c[512] __attribute__((aligned(16))) = {
+int16_t tw512c[512] __attribute__((aligned(32))) = {
0,32767,403,32764,805,32757,1207,32744,1608,32727,2010,32705,2411,32678,2812,32646,3212,32609,3612,32567,4012,32520,4410,32468,4808,32412,5206,32350,5602,32284,5998,32213,6393,32137,6787,32056,7180,31970,7572,31880,7962,31785,8352,31684,8740,31580,9127,31470,9512,31356,9896,31236,10279,31113,10660,30984,11039,30851,11417,30713,11793,30571,12167,30424,12540,30272,12910,30116,13279,29955,13646,29790,14010,29621,14373,29446,14733,29268,15091,29085,15447,28897,15800,28706,16151,28510,16500,28309,16846,28105,17190,27896,17531,27683,17869,27466,18205,27244,18538,27019,18868,26789,19195,26556,19520,26318,19841,26077,20160,25831,20475,25582,20788,25329,21097,25072,21403,24811,21706,24546,22005,24278,22302,24006,22595,23731,22884,23452,23170,23169,23453,22883,23732,22594,24007,22301,24279,22004,24547,21705,24812,21402,25073,21096,25330,20787,25583,20474,25832,20159,26078,19840,26319,19519,26557,19194,26790,18867,27020,18537,27245,18204,27467,17868,27684,17530,27897,17189,28106,16845,28310,16499,28511,16150,28707,15799,28898,15446,29086,15090,29269,14732,29447,14372,29622,14009,29791,13645,29956,13278,30117,12909,30273,12539,30425,12166,30572,11792,30714,11416,30852,11038,30985,10659,31114,10278,31237,9895,31357,9511,31471,9126,31581,8739,31685,8351,31786,7961,31881,7571,31971,7179,32057,6786,32138,6392,32214,5997,32285,5601,32351,5205,32413,4807,32469,4409,32521,4011,32568,3611,32610,3211,32647,2811,32679,2410,32706,2009,32728,1607,32745,1206,32758,804,32765,402,32767,0,32765,-403,32758,-805,32745,-1207,32728,-1608,32706,-2010,32679,-2411,32647,-2812,32610,-3212,32568,-3612,32521,-4012,32469,-4410,32413,-4808,32351,-5206,32285,-5602,32214,-5998,32138,-6393,32057,-6787,31971,-7180,31881,-7572,31786,-7962,31685,-8352,31581,-8740,31471,-9127,31357,-9512,31237,-9896,31114,-10279,30985,-10660,30852,-11039,30714,-11417,30572,-11793,30425,-12167,30273,-12540,30117,-12910,29956,-13279,29791,-13646,29622,-14010,29447,-14373,29269,-14733,29086,-15091,28898,-15447,28707,-15800,28511,-16151,28310,-16500,28106,-16846,27897,-17190,27684,-17531,27467,-17869,27245,-18205,27020,-18538,26790,-18868,26557,-19195,26319,-19520,26078,-19841,25832,-20160,25583,-20475,25330,-20788,25073,-21097,24812,-21403,24547,-21706,24279,-22005,24007,-22302,23732,-22595,23453,-22884,23170,-23170,22884,-23453,22595,-23732,22302,-24007,22005,-24279,21706,-24547,21403,-24812,21097,-25073,20788,-25330,20475,-25583,20160,-25832,19841,-26078,19520,-26319,19195,-26557,18868,-26790,18538,-27020,18205,-27245,17869,-27467,17531,-27684,17190,-27897,16846,-28106,16500,-28310,16151,-28511,15800,-28707,15447,-28898,15091,-29086,14733,-29269,14373,-29447,14010,-29622,13646,-29791,13279,-29956,12910,-30117,12540,-30273,12167,-30425,11793,-30572,11417,-30714,11039,-30852,10660,-30985,10279,-31114,9896,-31237,9512,-31357,9127,-31471,8740,-31581,8352,-31685,7962,-31786,7572,-31881,7180,-31971,6787,-32057,6393,-32138,5998,-32214,5602,-32285,5206,-32351,4808,-32413,4410,-32469,4012,-32521,3612,-32568,3212,-32610,2812,-32647,2411,-32679,2010,-32706,1608,-32728,1207,-32745,805,-32758,403,-32765
};
-
+#ifndef __AVX2__
void dft512(int16_t *x,int16_t *y,int scale)
{
@@ -2568,11 +4035,179 @@ void idft512(int16_t *x,int16_t *y,int scale)
}
-int16_t tw1024[1536] __attribute__((aligned(16))) = { 32767,0,32766,-202,32764,-403,32761,-604,32757,-805,32751,-1006,32744,-1207,32736,-1407,32727,-1608,32717,-1809,32705,-2010,32692,-2210,32678,-2411,32662,-2611,32646,-2812,32628,-3012,32609,-3212,32588,-3412,32567,-3612,32544,-3812,32520,-4012,32495,-4211,32468,-4410,32441,-4609,32412,-4808,32382,-5007,32350,-5206,32318,-5404,32284,-5602,32249,-5800,32213,-5998,32176,-6196,32137,-6393,32097,-6590,32056,-6787,32014,-6983,31970,-7180,31926,-7376,31880,-7572,31833,-7767,31785,-7962,31735,-8157,31684,-8352,31633,-8546,31580,-8740,31525,-8933,31470,-9127,31413,-9320,31356,-9512,31297,-9704,31236,-9896,31175,-10088,31113,-10279,31049,-10470,30984,-10660,30918,-10850,30851,-11039,30783,-11228,30713,-11417,30643,-11605,30571,-11793,30498,-11981,30424,-12167,30349,-12354,30272,-12540,30195,-12725,30116,-12910,30036,-13095,29955,-13279,29873,-13463,29790,-13646,29706,-13828,29621,-14010,29534,-14192,29446,-14373,29358,-14553,29268,-14733,29177,-14912,29085,-15091,28992,-15269,28897,-15447,28802,-15624,28706,-15800,28608,-15976,28510,-16151,28410,-16326,28309,-16500,28208,-16673,28105,-16846,28001,-17018,27896,-17190,27790,-17361,27683,-17531,27575,-17700,27466,-17869,27355,-18037,27244,-18205,27132,-18372,27019,-18538,26905,-18703,26789,-18868,26673,-19032,26556,-19195,26437,-19358,26318,-19520,26198,-19681,26077,-19841,25954,-20001,25831,-20160,25707,-20318,25582,-20475,25456,-20632,25329,-20788,25201,-20943,25072,-21097,24942,-21250,24811,-21403,24679,-21555,24546,-21706,24413,-21856,24278,-22005,24143,-22154,24006,-22302,23869,-22449,23731,-22595,23592,-22740,23452,-22884,23311,-23028,23169,-23170,23027,-23312,22883,-23453,22739,-23593,22594,-23732,22448,-23870,22301,-24007,22153,-24144,22004,-24279,21855,-24414,21705,-24547,21554,-24680,21402,-24812,21249,-24943,21096,-25073,20942,-25202,20787,-25330,20631,-25457,20474,-25583,20317,-25708,20159,-25832,20000,-25955,19840,-26078,19680,-26199,19519,-26319,19357,-26438,19194,-26557,19031,-26674,18867,-26790,18702,-26906,18537,-27020,18371,-27133,18204,-27245,18036,-27356,17868,-27467,17699,-27576,17530,-27684,17360,-27791,17189,-27897,17017,-28002,16845,-28106,16672,-28209,16499,-28310,16325,-28411,16150,-28511,15975,-28609,15799,-28707,15623,-28803,15446,-28898,15268,-28993,15090,-29086,14911,-29178,14732,-29269,14552,-29359,14372,-29447,14191,-29535,14009,-29622,13827,-29707,13645,-29791,13462,-29874,13278,-29956,13094,-30037,12909,-30117,12724,-30196,12539,-30273,12353,-30350,12166,-30425,11980,-30499,11792,-30572,11604,-30644,11416,-30714,11227,-30784,11038,-30852,10849,-30919,10659,-30985,10469,-31050,10278,-31114,10087,-31176,9895,-31237,9703,-31298,9511,-31357,9319,-31414,9126,-31471,8932,-31526,8739,-31581,8545,-31634,8351,-31685,8156,-31736,7961,-31786,7766,-31834,7571,-31881,7375,-31927,7179,-31971,6982,-32015,6786,-32057,6589,-32098,6392,-32138,6195,-32177,5997,-32214,5799,-32250,5601,-32285,5403,-32319,5205,-32351,5006,-32383,4807,-32413,4608,-32442,4409,-32469,4210,-32496,4011,-32521,3811,-32545,3611,-32568,3411,-32589,3211,-32610,3011,-32629,2811,-32647,2610,-32663,2410,-32679,2209,-32693,2009,-32706,1808,-32718,1607,-32728,1406,-32737,1206,-32745,1005,-32752,804,-32758,603,-32762,402,-32765,201,-32767,
+#else //__AVX2__
+
+void dft512(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[64],*x256 = (simd256_q15_t *)x;
+ simd256_q15_t ytmp[64],*y256=(simd256_q15_t*)y;
+ simd256_q15_t *tw512_256p=(simd256_q15_t*)tw512,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i;
+ simd256_q15_t ONE_OVER_SQRT2_Q15_256 = set1_int16_simd256(ONE_OVER_SQRT2_Q15);
+
+
+ transpose4_ooff_simd256(x256 ,xtmp,32);
+ transpose4_ooff_simd256(x256+2,xtmp+1,32);
+ transpose4_ooff_simd256(x256+4,xtmp+2,32);
+ transpose4_ooff_simd256(x256+6,xtmp+3,32);
+ transpose4_ooff_simd256(x256+8,xtmp+4,32);
+ transpose4_ooff_simd256(x256+10,xtmp+5,32);
+ transpose4_ooff_simd256(x256+12,xtmp+6,32);
+ transpose4_ooff_simd256(x256+14,xtmp+7,32);
+ transpose4_ooff_simd256(x256+16,xtmp+8,32);
+ transpose4_ooff_simd256(x256+18,xtmp+9,32);
+ transpose4_ooff_simd256(x256+20,xtmp+10,32);
+ transpose4_ooff_simd256(x256+22,xtmp+11,32);
+ transpose4_ooff_simd256(x256+24,xtmp+12,32);
+ transpose4_ooff_simd256(x256+26,xtmp+13,32);
+ transpose4_ooff_simd256(x256+28,xtmp+14,32);
+ transpose4_ooff_simd256(x256+30,xtmp+15,32);
+ transpose4_ooff_simd256(x256+32,xtmp+16,32);
+ transpose4_ooff_simd256(x256+34,xtmp+17,32);
+ transpose4_ooff_simd256(x256+36,xtmp+18,32);
+ transpose4_ooff_simd256(x256+38,xtmp+19,32);
+ transpose4_ooff_simd256(x256+40,xtmp+20,32);
+ transpose4_ooff_simd256(x256+42,xtmp+21,32);
+ transpose4_ooff_simd256(x256+44,xtmp+22,32);
+ transpose4_ooff_simd256(x256+46,xtmp+23,32);
+ transpose4_ooff_simd256(x256+48,xtmp+24,32);
+ transpose4_ooff_simd256(x256+50,xtmp+25,32);
+ transpose4_ooff_simd256(x256+52,xtmp+26,32);
+ transpose4_ooff_simd256(x256+54,xtmp+27,32);
+ transpose4_ooff_simd256(x256+56,xtmp+28,32);
+ transpose4_ooff_simd256(x256+58,xtmp+29,32);
+ transpose4_ooff_simd256(x256+60,xtmp+30,32);
+ transpose4_ooff_simd256(x256+62,xtmp+31,32);
+
+ dft256((int16_t*)(xtmp),(int16_t*)ytmp,1);
+ dft256((int16_t*)(xtmp+32),(int16_t*)(ytmp+32),1);
+
+
+ for (i=0; i<32; i++) {
+ bfly2_256(ytmpp,ytmpp+32,
+ y256p,y256p+32,
+ tw512_256p);
+ tw512_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+
+ for (i=0;i<4;i++) {
+ y256[0] = mulhi_int16_simd256(y256[0],ONE_OVER_SQRT2_Q15_256);
+ y256[1] = mulhi_int16_simd256(y256[1],ONE_OVER_SQRT2_Q15_256);
+ y256[2] = mulhi_int16_simd256(y256[2],ONE_OVER_SQRT2_Q15_256);
+ y256[3] = mulhi_int16_simd256(y256[3],ONE_OVER_SQRT2_Q15_256);
+ y256[4] = mulhi_int16_simd256(y256[4],ONE_OVER_SQRT2_Q15_256);
+ y256[5] = mulhi_int16_simd256(y256[5],ONE_OVER_SQRT2_Q15_256);
+ y256[6] = mulhi_int16_simd256(y256[6],ONE_OVER_SQRT2_Q15_256);
+ y256[7] = mulhi_int16_simd256(y256[7],ONE_OVER_SQRT2_Q15_256);
+ y256[8] = mulhi_int16_simd256(y256[8],ONE_OVER_SQRT2_Q15_256);
+ y256[9] = mulhi_int16_simd256(y256[9],ONE_OVER_SQRT2_Q15_256);
+ y256[10] = mulhi_int16_simd256(y256[10],ONE_OVER_SQRT2_Q15_256);
+ y256[11] = mulhi_int16_simd256(y256[11],ONE_OVER_SQRT2_Q15_256);
+ y256[12] = mulhi_int16_simd256(y256[12],ONE_OVER_SQRT2_Q15_256);
+ y256[13] = mulhi_int16_simd256(y256[13],ONE_OVER_SQRT2_Q15_256);
+ y256[14] = mulhi_int16_simd256(y256[14],ONE_OVER_SQRT2_Q15_256);
+ y256[15] = mulhi_int16_simd256(y256[15],ONE_OVER_SQRT2_Q15_256);
+ y256+=16;
+ }
+ }
+
+}
+
+void idft512(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[64],*x256 = (simd256_q15_t *)x;
+ simd256_q15_t ytmp[64],*y256=(simd256_q15_t*)y;
+ simd256_q15_t *tw512_256p=(simd256_q15_t *)tw512,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i;
+ simd256_q15_t ONE_OVER_SQRT2_Q15_256 = set1_int16_simd256(ONE_OVER_SQRT2_Q15);
+
+
+ transpose4_ooff_simd256(x256 ,xtmp,32);
+ transpose4_ooff_simd256(x256+2,xtmp+1,32);
+ transpose4_ooff_simd256(x256+4,xtmp+2,32);
+ transpose4_ooff_simd256(x256+6,xtmp+3,32);
+ transpose4_ooff_simd256(x256+8,xtmp+4,32);
+ transpose4_ooff_simd256(x256+10,xtmp+5,32);
+ transpose4_ooff_simd256(x256+12,xtmp+6,32);
+ transpose4_ooff_simd256(x256+14,xtmp+7,32);
+ transpose4_ooff_simd256(x256+16,xtmp+8,32);
+ transpose4_ooff_simd256(x256+18,xtmp+9,32);
+ transpose4_ooff_simd256(x256+20,xtmp+10,32);
+ transpose4_ooff_simd256(x256+22,xtmp+11,32);
+ transpose4_ooff_simd256(x256+24,xtmp+12,32);
+ transpose4_ooff_simd256(x256+26,xtmp+13,32);
+ transpose4_ooff_simd256(x256+28,xtmp+14,32);
+ transpose4_ooff_simd256(x256+30,xtmp+15,32);
+ transpose4_ooff_simd256(x256+32,xtmp+16,32);
+ transpose4_ooff_simd256(x256+34,xtmp+17,32);
+ transpose4_ooff_simd256(x256+36,xtmp+18,32);
+ transpose4_ooff_simd256(x256+38,xtmp+19,32);
+ transpose4_ooff_simd256(x256+40,xtmp+20,32);
+ transpose4_ooff_simd256(x256+42,xtmp+21,32);
+ transpose4_ooff_simd256(x256+44,xtmp+22,32);
+ transpose4_ooff_simd256(x256+46,xtmp+23,32);
+ transpose4_ooff_simd256(x256+48,xtmp+24,32);
+ transpose4_ooff_simd256(x256+50,xtmp+25,32);
+ transpose4_ooff_simd256(x256+52,xtmp+26,32);
+ transpose4_ooff_simd256(x256+54,xtmp+27,32);
+ transpose4_ooff_simd256(x256+56,xtmp+28,32);
+ transpose4_ooff_simd256(x256+58,xtmp+29,32);
+ transpose4_ooff_simd256(x256+60,xtmp+30,32);
+ transpose4_ooff_simd256(x256+62,xtmp+31,32);
+
+ idft256((int16_t*)(xtmp),(int16_t*)ytmp,1);
+ idft256((int16_t*)(xtmp+32),(int16_t*)(ytmp+32),1);
+
+
+ for (i=0; i<32; i++) {
+ ibfly2_256(ytmpp,ytmpp+32,
+ y256p,y256p+32,
+ tw512_256p);
+ tw512_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+
+ for (i=0;i<4;i++) {
+ y256[0] = mulhi_int16_simd256(y256[0],ONE_OVER_SQRT2_Q15_256);
+ y256[1] = mulhi_int16_simd256(y256[1],ONE_OVER_SQRT2_Q15_256);
+ y256[2] = mulhi_int16_simd256(y256[2],ONE_OVER_SQRT2_Q15_256);
+ y256[3] = mulhi_int16_simd256(y256[3],ONE_OVER_SQRT2_Q15_256);
+ y256[4] = mulhi_int16_simd256(y256[4],ONE_OVER_SQRT2_Q15_256);
+ y256[5] = mulhi_int16_simd256(y256[5],ONE_OVER_SQRT2_Q15_256);
+ y256[6] = mulhi_int16_simd256(y256[6],ONE_OVER_SQRT2_Q15_256);
+ y256[7] = mulhi_int16_simd256(y256[7],ONE_OVER_SQRT2_Q15_256);
+ y256[8] = mulhi_int16_simd256(y256[8],ONE_OVER_SQRT2_Q15_256);
+ y256[9] = mulhi_int16_simd256(y256[9],ONE_OVER_SQRT2_Q15_256);
+ y256[10] = mulhi_int16_simd256(y256[10],ONE_OVER_SQRT2_Q15_256);
+ y256[11] = mulhi_int16_simd256(y256[11],ONE_OVER_SQRT2_Q15_256);
+ y256[12] = mulhi_int16_simd256(y256[12],ONE_OVER_SQRT2_Q15_256);
+ y256[13] = mulhi_int16_simd256(y256[13],ONE_OVER_SQRT2_Q15_256);
+ y256[14] = mulhi_int16_simd256(y256[14],ONE_OVER_SQRT2_Q15_256);
+ y256[15] = mulhi_int16_simd256(y256[15],ONE_OVER_SQRT2_Q15_256);
+ y256+=16;
+ }
+ }
+
+}
+
+#endif
+
+int16_t tw1024[1536] __attribute__((aligned(32))) = { 32767,0,32766,-202,32764,-403,32761,-604,32757,-805,32751,-1006,32744,-1207,32736,-1407,32727,-1608,32717,-1809,32705,-2010,32692,-2210,32678,-2411,32662,-2611,32646,-2812,32628,-3012,32609,-3212,32588,-3412,32567,-3612,32544,-3812,32520,-4012,32495,-4211,32468,-4410,32441,-4609,32412,-4808,32382,-5007,32350,-5206,32318,-5404,32284,-5602,32249,-5800,32213,-5998,32176,-6196,32137,-6393,32097,-6590,32056,-6787,32014,-6983,31970,-7180,31926,-7376,31880,-7572,31833,-7767,31785,-7962,31735,-8157,31684,-8352,31633,-8546,31580,-8740,31525,-8933,31470,-9127,31413,-9320,31356,-9512,31297,-9704,31236,-9896,31175,-10088,31113,-10279,31049,-10470,30984,-10660,30918,-10850,30851,-11039,30783,-11228,30713,-11417,30643,-11605,30571,-11793,30498,-11981,30424,-12167,30349,-12354,30272,-12540,30195,-12725,30116,-12910,30036,-13095,29955,-13279,29873,-13463,29790,-13646,29706,-13828,29621,-14010,29534,-14192,29446,-14373,29358,-14553,29268,-14733,29177,-14912,29085,-15091,28992,-15269,28897,-15447,28802,-15624,28706,-15800,28608,-15976,28510,-16151,28410,-16326,28309,-16500,28208,-16673,28105,-16846,28001,-17018,27896,-17190,27790,-17361,27683,-17531,27575,-17700,27466,-17869,27355,-18037,27244,-18205,27132,-18372,27019,-18538,26905,-18703,26789,-18868,26673,-19032,26556,-19195,26437,-19358,26318,-19520,26198,-19681,26077,-19841,25954,-20001,25831,-20160,25707,-20318,25582,-20475,25456,-20632,25329,-20788,25201,-20943,25072,-21097,24942,-21250,24811,-21403,24679,-21555,24546,-21706,24413,-21856,24278,-22005,24143,-22154,24006,-22302,23869,-22449,23731,-22595,23592,-22740,23452,-22884,23311,-23028,23169,-23170,23027,-23312,22883,-23453,22739,-23593,22594,-23732,22448,-23870,22301,-24007,22153,-24144,22004,-24279,21855,-24414,21705,-24547,21554,-24680,21402,-24812,21249,-24943,21096,-25073,20942,-25202,20787,-25330,20631,-25457,20474,-25583,20317,-25708,20159,-25832,20000,-25955,19840,-26078,19680,-26199,19519,-26319,19357,-26438,19194,-26557,19031,-26674,18867,-26790,18702,-26906,18537,-27020,18371,-27133,18204,-27245,18036,-27356,17868,-27467,17699,-27576,17530,-27684,17360,-27791,17189,-27897,17017,-28002,16845,-28106,16672,-28209,16499,-28310,16325,-28411,16150,-28511,15975,-28609,15799,-28707,15623,-28803,15446,-28898,15268,-28993,15090,-29086,14911,-29178,14732,-29269,14552,-29359,14372,-29447,14191,-29535,14009,-29622,13827,-29707,13645,-29791,13462,-29874,13278,-29956,13094,-30037,12909,-30117,12724,-30196,12539,-30273,12353,-30350,12166,-30425,11980,-30499,11792,-30572,11604,-30644,11416,-30714,11227,-30784,11038,-30852,10849,-30919,10659,-30985,10469,-31050,10278,-31114,10087,-31176,9895,-31237,9703,-31298,9511,-31357,9319,-31414,9126,-31471,8932,-31526,8739,-31581,8545,-31634,8351,-31685,8156,-31736,7961,-31786,7766,-31834,7571,-31881,7375,-31927,7179,-31971,6982,-32015,6786,-32057,6589,-32098,6392,-32138,6195,-32177,5997,-32214,5799,-32250,5601,-32285,5403,-32319,5205,-32351,5006,-32383,4807,-32413,4608,-32442,4409,-32469,4210,-32496,4011,-32521,3811,-32545,3611,-32568,3411,-32589,3211,-32610,3011,-32629,2811,-32647,2610,-32663,2410,-32679,2209,-32693,2009,-32706,1808,-32718,1607,-32728,1406,-32737,1206,-32745,1005,-32752,804,-32758,603,-32762,402,-32765,201,-32767,
32767,0,32764,-403,32757,-805,32744,-1207,32727,-1608,32705,-2010,32678,-2411,32646,-2812,32609,-3212,32567,-3612,32520,-4012,32468,-4410,32412,-4808,32350,-5206,32284,-5602,32213,-5998,32137,-6393,32056,-6787,31970,-7180,31880,-7572,31785,-7962,31684,-8352,31580,-8740,31470,-9127,31356,-9512,31236,-9896,31113,-10279,30984,-10660,30851,-11039,30713,-11417,30571,-11793,30424,-12167,30272,-12540,30116,-12910,29955,-13279,29790,-13646,29621,-14010,29446,-14373,29268,-14733,29085,-15091,28897,-15447,28706,-15800,28510,-16151,28309,-16500,28105,-16846,27896,-17190,27683,-17531,27466,-17869,27244,-18205,27019,-18538,26789,-18868,26556,-19195,26318,-19520,26077,-19841,25831,-20160,25582,-20475,25329,-20788,25072,-21097,24811,-21403,24546,-21706,24278,-22005,24006,-22302,23731,-22595,23452,-22884,23169,-23170,22883,-23453,22594,-23732,22301,-24007,22004,-24279,21705,-24547,21402,-24812,21096,-25073,20787,-25330,20474,-25583,20159,-25832,19840,-26078,19519,-26319,19194,-26557,18867,-26790,18537,-27020,18204,-27245,17868,-27467,17530,-27684,17189,-27897,16845,-28106,16499,-28310,16150,-28511,15799,-28707,15446,-28898,15090,-29086,14732,-29269,14372,-29447,14009,-29622,13645,-29791,13278,-29956,12909,-30117,12539,-30273,12166,-30425,11792,-30572,11416,-30714,11038,-30852,10659,-30985,10278,-31114,9895,-31237,9511,-31357,9126,-31471,8739,-31581,8351,-31685,7961,-31786,7571,-31881,7179,-31971,6786,-32057,6392,-32138,5997,-32214,5601,-32285,5205,-32351,4807,-32413,4409,-32469,4011,-32521,3611,-32568,3211,-32610,2811,-32647,2410,-32679,2009,-32706,1607,-32728,1206,-32745,804,-32758,402,-32765,0,-32767,-403,-32765,-805,-32758,-1207,-32745,-1608,-32728,-2010,-32706,-2411,-32679,-2812,-32647,-3212,-32610,-3612,-32568,-4012,-32521,-4410,-32469,-4808,-32413,-5206,-32351,-5602,-32285,-5998,-32214,-6393,-32138,-6787,-32057,-7180,-31971,-7572,-31881,-7962,-31786,-8352,-31685,-8740,-31581,-9127,-31471,-9512,-31357,-9896,-31237,-10279,-31114,-10660,-30985,-11039,-30852,-11417,-30714,-11793,-30572,-12167,-30425,-12540,-30273,-12910,-30117,-13279,-29956,-13646,-29791,-14010,-29622,-14373,-29447,-14733,-29269,-15091,-29086,-15447,-28898,-15800,-28707,-16151,-28511,-16500,-28310,-16846,-28106,-17190,-27897,-17531,-27684,-17869,-27467,-18205,-27245,-18538,-27020,-18868,-26790,-19195,-26557,-19520,-26319,-19841,-26078,-20160,-25832,-20475,-25583,-20788,-25330,-21097,-25073,-21403,-24812,-21706,-24547,-22005,-24279,-22302,-24007,-22595,-23732,-22884,-23453,-23170,-23170,-23453,-22884,-23732,-22595,-24007,-22302,-24279,-22005,-24547,-21706,-24812,-21403,-25073,-21097,-25330,-20788,-25583,-20475,-25832,-20160,-26078,-19841,-26319,-19520,-26557,-19195,-26790,-18868,-27020,-18538,-27245,-18205,-27467,-17869,-27684,-17531,-27897,-17190,-28106,-16846,-28310,-16500,-28511,-16151,-28707,-15800,-28898,-15447,-29086,-15091,-29269,-14733,-29447,-14373,-29622,-14010,-29791,-13646,-29956,-13279,-30117,-12910,-30273,-12540,-30425,-12167,-30572,-11793,-30714,-11417,-30852,-11039,-30985,-10660,-31114,-10279,-31237,-9896,-31357,-9512,-31471,-9127,-31581,-8740,-31685,-8352,-31786,-7962,-31881,-7572,-31971,-7180,-32057,-6787,-32138,-6393,-32214,-5998,-32285,-5602,-32351,-5206,-32413,-4808,-32469,-4410,-32521,-4012,-32568,-3612,-32610,-3212,-32647,-2812,-32679,-2411,-32706,-2010,-32728,-1608,-32745,-1207,-32758,-805,-32765,-403,
32767,0,32761,-604,32744,-1207,32717,-1809,32678,-2411,32628,-3012,32567,-3612,32495,-4211,32412,-4808,32318,-5404,32213,-5998,32097,-6590,31970,-7180,31833,-7767,31684,-8352,31525,-8933,31356,-9512,31175,-10088,30984,-10660,30783,-11228,30571,-11793,30349,-12354,30116,-12910,29873,-13463,29621,-14010,29358,-14553,29085,-15091,28802,-15624,28510,-16151,28208,-16673,27896,-17190,27575,-17700,27244,-18205,26905,-18703,26556,-19195,26198,-19681,25831,-20160,25456,-20632,25072,-21097,24679,-21555,24278,-22005,23869,-22449,23452,-22884,23027,-23312,22594,-23732,22153,-24144,21705,-24547,21249,-24943,20787,-25330,20317,-25708,19840,-26078,19357,-26438,18867,-26790,18371,-27133,17868,-27467,17360,-27791,16845,-28106,16325,-28411,15799,-28707,15268,-28993,14732,-29269,14191,-29535,13645,-29791,13094,-30037,12539,-30273,11980,-30499,11416,-30714,10849,-30919,10278,-31114,9703,-31298,9126,-31471,8545,-31634,7961,-31786,7375,-31927,6786,-32057,6195,-32177,5601,-32285,5006,-32383,4409,-32469,3811,-32545,3211,-32610,2610,-32663,2009,-32706,1406,-32737,804,-32758,201,-32767,-403,-32765,-1006,-32752,-1608,-32728,-2210,-32693,-2812,-32647,-3412,-32589,-4012,-32521,-4609,-32442,-5206,-32351,-5800,-32250,-6393,-32138,-6983,-32015,-7572,-31881,-8157,-31736,-8740,-31581,-9320,-31414,-9896,-31237,-10470,-31050,-11039,-30852,-11605,-30644,-12167,-30425,-12725,-30196,-13279,-29956,-13828,-29707,-14373,-29447,-14912,-29178,-15447,-28898,-15976,-28609,-16500,-28310,-17018,-28002,-17531,-27684,-18037,-27356,-18538,-27020,-19032,-26674,-19520,-26319,-20001,-25955,-20475,-25583,-20943,-25202,-21403,-24812,-21856,-24414,-22302,-24007,-22740,-23593,-23170,-23170,-23593,-22740,-24007,-22302,-24414,-21856,-24812,-21403,-25202,-20943,-25583,-20475,-25955,-20001,-26319,-19520,-26674,-19032,-27020,-18538,-27356,-18037,-27684,-17531,-28002,-17018,-28310,-16500,-28609,-15976,-28898,-15447,-29178,-14912,-29447,-14373,-29707,-13828,-29956,-13279,-30196,-12725,-30425,-12167,-30644,-11605,-30852,-11039,-31050,-10470,-31237,-9896,-31414,-9320,-31581,-8740,-31736,-8157,-31881,-7572,-32015,-6983,-32138,-6393,-32250,-5800,-32351,-5206,-32442,-4609,-32521,-4012,-32589,-3412,-32647,-2812,-32693,-2210,-32728,-1608,-32752,-1006,-32765,-403,-32767,201,-32758,804,-32737,1406,-32706,2009,-32663,2610,-32610,3211,-32545,3811,-32469,4409,-32383,5006,-32285,5601,-32177,6195,-32057,6786,-31927,7375,-31786,7961,-31634,8545,-31471,9126,-31298,9703,-31114,10278,-30919,10849,-30714,11416,-30499,11980,-30273,12539,-30037,13094,-29791,13645,-29535,14191,-29269,14732,-28993,15268,-28707,15799,-28411,16325,-28106,16845,-27791,17360,-27467,17868,-27133,18371,-26790,18867,-26438,19357,-26078,19840,-25708,20317,-25330,20787,-24943,21249,-24547,21705,-24144,22153,-23732,22594,-23312,23027,-22884,23452,-22449,23869,-22005,24278,-21555,24679,-21097,25072,-20632,25456,-20160,25831,-19681,26198,-19195,26556,-18703,26905,-18205,27244,-17700,27575,-17190,27896,-16673,28208,-16151,28510,-15624,28802,-15091,29085,-14553,29358,-14010,29621,-13463,29873,-12910,30116,-12354,30349,-11793,30571,-11228,30783,-10660,30984,-10088,31175,-9512,31356,-8933,31525,-8352,31684,-7767,31833,-7180,31970,-6590,32097,-5998,32213,-5404,32318,-4808,32412,-4211,32495,-3612,32567,-3012,32628,-2411,32678,-1809,32717,-1207,32744,-604,32761
};
-
+#ifndef __AVX2__
void dft1024(int16_t *x,int16_t *y,int scale)
{
@@ -2685,13 +4320,127 @@ void idft1024(int16_t *x,int16_t *y,int scale)
}
-int16_t tw2048[2048] __attribute__((aligned(16))) = {32767,0,32766,-101,32766,-202,32765,-302,32764,-403,32763,-503,32761,-604,32759,-704,32757,-805,32754,-905,32751,-1006,32748,-1106,32744,-1207,32740,-1307,32736,-1407,32732,-1508,32727,-1608,32722,-1709,32717,-1809,32711,-1909,32705,-2010,32699,-2110,32692,-2210,32685,-2311,32678,-2411,32670,-2511,32662,-2611,32654,-2712,32646,-2812,32637,-2912,32628,-3012,32618,-3112,32609,-3212,32599,-3312,32588,-3412,32578,-3512,32567,-3612,32556,-3712,32544,-3812,32532,-3912,32520,-4012,32508,-4111,32495,-4211,32482,-4311,32468,-4410,32455,-4510,32441,-4609,32426,-4709,32412,-4808,32397,-4908,32382,-5007,32366,-5107,32350,-5206,32334,-5305,32318,-5404,32301,-5503,32284,-5602,32267,-5701,32249,-5800,32231,-5899,32213,-5998,32194,-6097,32176,-6196,32156,-6294,32137,-6393,32117,-6492,32097,-6590,32077,-6689,32056,-6787,32035,-6885,32014,-6983,31992,-7082,31970,-7180,31948,-7278,31926,-7376,31903,-7474,31880,-7572,31856,-7669,31833,-7767,31809,-7865,31785,-7962,31760,-8060,31735,-8157,31710,-8254,31684,-8352,31659,-8449,31633,-8546,31606,-8643,31580,-8740,31553,-8837,31525,-8933,31498,-9030,31470,-9127,31442,-9223,31413,-9320,31385,-9416,31356,-9512,31326,-9608,31297,-9704,31267,-9800,31236,-9896,31206,-9992,31175,-10088,31144,-10183,31113,-10279,31081,-10374,31049,-10470,31017,-10565,30984,-10660,30951,-10755,30918,-10850,30885,-10945,30851,-11039,30817,-11134,30783,-11228,30748,-11323,30713,-11417,30678,-11511,30643,-11605,30607,-11699,30571,-11793,30535,-11887,30498,-11981,30461,-12074,30424,-12167,30386,-12261,30349,-12354,30311,-12447,30272,-12540,30234,-12633,30195,-12725,30156,-12818,30116,-12910,30076,-13003,30036,-13095,29996,-13187,29955,-13279,29915,-13371,29873,-13463,29832,-13554,29790,-13646,29748,-13737,29706,-13828,29663,-13919,29621,-14010,29577,-14101,29534,-14192,29490,-14282,29446,-14373,29402,-14463,29358,-14553,29313,-14643,29268,-14733,29222,-14823,29177,-14912,29131,-15002,29085,-15091,29038,-15180,28992,-15269,28945,-15358,28897,-15447,28850,-15535,28802,-15624,28754,-15712,28706,-15800,28657,-15888,28608,-15976,28559,-16064,28510,-16151,28460,-16239,28410,-16326,28360,-16413,28309,-16500,28259,-16587,28208,-16673,28156,-16760,28105,-16846,28053,-16932,28001,-17018,27948,-17104,27896,-17190,27843,-17275,27790,-17361,27736,-17446,27683,-17531,27629,-17616,27575,-17700,27520,-17785,27466,-17869,27411,-17953,27355,-18037,27300,-18121,27244,-18205,27188,-18288,27132,-18372,27076,-18455,27019,-18538,26962,-18621,26905,-18703,26847,-18786,26789,-18868,26731,-18950,26673,-19032,26615,-19114,26556,-19195,26497,-19277,26437,-19358,26378,-19439,26318,-19520,26258,-19600,26198,-19681,26137,-19761,26077,-19841,26016,-19921,25954,-20001,25893,-20080,25831,-20160,25769,-20239,25707,-20318,25645,-20397,25582,-20475,25519,-20554,25456,-20632,25392,-20710,25329,-20788,25265,-20865,25201,-20943,25136,-21020,25072,-21097,25007,-21174,24942,-21250,24877,-21327,24811,-21403,24745,-21479,24679,-21555,24613,-21630,24546,-21706,24480,-21781,24413,-21856,24346,-21931,24278,-22005,24211,-22080,24143,-22154,24075,-22228,24006,-22302,23938,-22375,23869,-22449,23800,-22522,23731,-22595,23661,-22667,23592,-22740,23522,-22812,23452,-22884,23382,-22956,23311,-23028,23240,-23099,23169,-23170,23098,-23241,23027,-23312,22955,-23383,22883,-23453,22811,-23523,22739,-23593,22666,-23662,22594,-23732,22521,-23801,22448,-23870,22374,-23939,22301,-24007,22227,-24076,22153,-24144,22079,-24212,22004,-24279,21930,-24347,21855,-24414,21780,-24481,21705,-24547,21629,-24614,21554,-24680,21478,-24746,21402,-24812,21326,-24878,21249,-24943,21173,-25008,21096,-25073,21019,-25137,20942,-25202,20864,-25266,20787,-25330,20709,-25393,20631,-25457,20553,-25520,20474,-25583,20396,-25646,20317,-25708,20238,-25770,20159,-25832,20079,-25894,20000,-25955,19920,-26017,19840,-26078,19760,-26138,19680,-26199,19599,-26259,19519,-26319,19438,-26379,19357,-26438,19276,-26498,19194,-26557,19113,-26616,19031,-26674,18949,-26732,18867,-26790,18785,-26848,18702,-26906,18620,-26963,18537,-27020,18454,-27077,18371,-27133,18287,-27189,18204,-27245,18120,-27301,18036,-27356,17952,-27412,17868,-27467,17784,-27521,17699,-27576,17615,-27630,17530,-27684,17445,-27737,17360,-27791,17274,-27844,17189,-27897,17103,-27949,17017,-28002,16931,-28054,16845,-28106,16759,-28157,16672,-28209,16586,-28260,16499,-28310,16412,-28361,16325,-28411,16238,-28461,16150,-28511,16063,-28560,15975,-28609,15887,-28658,15799,-28707,15711,-28755,15623,-28803,15534,-28851,15446,-28898,15357,-28946,15268,-28993,15179,-29039,15090,-29086,15001,-29132,14911,-29178,14822,-29223,14732,-29269,14642,-29314,14552,-29359,14462,-29403,14372,-29447,14281,-29491,14191,-29535,14100,-29578,14009,-29622,13918,-29664,13827,-29707,13736,-29749,13645,-29791,13553,-29833,13462,-29874,13370,-29916,13278,-29956,13186,-29997,13094,-30037,13002,-30077,12909,-30117,12817,-30157,12724,-30196,12632,-30235,12539,-30273,12446,-30312,12353,-30350,12260,-30387,12166,-30425,12073,-30462,11980,-30499,11886,-30536,11792,-30572,11698,-30608,11604,-30644,11510,-30679,11416,-30714,11322,-30749,11227,-30784,11133,-30818,11038,-30852,10944,-30886,10849,-30919,10754,-30952,10659,-30985,10564,-31018,10469,-31050,10373,-31082,10278,-31114,10182,-31145,10087,-31176,9991,-31207,9895,-31237,9799,-31268,9703,-31298,9607,-31327,9511,-31357,9415,-31386,9319,-31414,9222,-31443,9126,-31471,9029,-31499,8932,-31526,8836,-31554,8739,-31581,8642,-31607,8545,-31634,8448,-31660,8351,-31685,8253,-31711,8156,-31736,8059,-31761,7961,-31786,7864,-31810,7766,-31834,7668,-31857,7571,-31881,7473,-31904,7375,-31927,7277,-31949,7179,-31971,7081,-31993,6982,-32015,6884,-32036,6786,-32057,6688,-32078,6589,-32098,6491,-32118,6392,-32138,6293,-32157,6195,-32177,6096,-32195,5997,-32214,5898,-32232,5799,-32250,5700,-32268,5601,-32285,5502,-32302,5403,-32319,5304,-32335,5205,-32351,5106,-32367,5006,-32383,4907,-32398,4807,-32413,4708,-32427,4608,-32442,4509,-32456,4409,-32469,4310,-32483,4210,-32496,4110,-32509,4011,-32521,3911,-32533,3811,-32545,3711,-32557,3611,-32568,3511,-32579,3411,-32589,3311,-32600,3211,-32610,3111,-32619,3011,-32629,2911,-32638,2811,-32647,2711,-32655,2610,-32663,2510,-32671,2410,-32679,2310,-32686,2209,-32693,2109,-32700,2009,-32706,1908,-32712,1808,-32718,1708,-32723,1607,-32728,1507,-32733,1406,-32737,1306,-32741,1206,-32745,1105,-32749,1005,-32752,904,-32755,804,-32758,703,-32760,603,-32762,502,-32764,402,-32765,301,-32766,201,-32767,100,-32767,0,-32767,-101,-32767,-202,-32767,-302,-32766,-403,-32765,-503,-32764,-604,-32762,-704,-32760,-805,-32758,-905,-32755,-1006,-32752,-1106,-32749,-1207,-32745,-1307,-32741,-1407,-32737,-1508,-32733,-1608,-32728,-1709,-32723,-1809,-32718,-1909,-32712,-2010,-32706,-2110,-32700,-2210,-32693,-2311,-32686,-2411,-32679,-2511,-32671,-2611,-32663,-2712,-32655,-2812,-32647,-2912,-32638,-3012,-32629,-3112,-32619,-3212,-32610,-3312,-32600,-3412,-32589,-3512,-32579,-3612,-32568,-3712,-32557,-3812,-32545,-3912,-32533,-4012,-32521,-4111,-32509,-4211,-32496,-4311,-32483,-4410,-32469,-4510,-32456,-4609,-32442,-4709,-32427,-4808,-32413,-4908,-32398,-5007,-32383,-5107,-32367,-5206,-32351,-5305,-32335,-5404,-32319,-5503,-32302,-5602,-32285,-5701,-32268,-5800,-32250,-5899,-32232,-5998,-32214,-6097,-32195,-6196,-32177,-6294,-32157,-6393,-32138,-6492,-32118,-6590,-32098,-6689,-32078,-6787,-32057,-6885,-32036,-6983,-32015,-7082,-31993,-7180,-31971,-7278,-31949,-7376,-31927,-7474,-31904,-7572,-31881,-7669,-31857,-7767,-31834,-7865,-31810,-7962,-31786,-8060,-31761,-8157,-31736,-8254,-31711,-8352,-31685,-8449,-31660,-8546,-31634,-8643,-31607,-8740,-31581,-8837,-31554,-8933,-31526,-9030,-31499,-9127,-31471,-9223,-31443,-9320,-31414,-9416,-31386,-9512,-31357,-9608,-31327,-9704,-31298,-9800,-31268,-9896,-31237,-9992,-31207,-10088,-31176,-10183,-31145,-10279,-31114,-10374,-31082,-10470,-31050,-10565,-31018,-10660,-30985,-10755,-30952,-10850,-30919,-10945,-30886,-11039,-30852,-11134,-30818,-11228,-30784,-11323,-30749,-11417,-30714,-11511,-30679,-11605,-30644,-11699,-30608,-11793,-30572,-11887,-30536,-11981,-30499,-12074,-30462,-12167,-30425,-12261,-30387,-12354,-30350,-12447,-30312,-12540,-30273,-12633,-30235,-12725,-30196,-12818,-30157,-12910,-30117,-13003,-30077,-13095,-30037,-13187,-29997,-13279,-29956,-13371,-29916,-13463,-29874,-13554,-29833,-13646,-29791,-13737,-29749,-13828,-29707,-13919,-29664,-14010,-29622,-14101,-29578,-14192,-29535,-14282,-29491,-14373,-29447,-14463,-29403,-14553,-29359,-14643,-29314,-14733,-29269,-14823,-29223,-14912,-29178,-15002,-29132,-15091,-29086,-15180,-29039,-15269,-28993,-15358,-28946,-15447,-28898,-15535,-28851,-15624,-28803,-15712,-28755,-15800,-28707,-15888,-28658,-15976,-28609,-16064,-28560,-16151,-28511,-16239,-28461,-16326,-28411,-16413,-28361,-16500,-28310,-16587,-28260,-16673,-28209,-16760,-28157,-16846,-28106,-16932,-28054,-17018,-28002,-17104,-27949,-17190,-27897,-17275,-27844,-17361,-27791,-17446,-27737,-17531,-27684,-17616,-27630,-17700,-27576,-17785,-27521,-17869,-27467,-17953,-27412,-18037,-27356,-18121,-27301,-18205,-27245,-18288,-27189,-18372,-27133,-18455,-27077,-18538,-27020,-18621,-26963,-18703,-26906,-18786,-26848,-18868,-26790,-18950,-26732,-19032,-26674,-19114,-26616,-19195,-26557,-19277,-26498,-19358,-26438,-19439,-26379,-19520,-26319,-19600,-26259,-19681,-26199,-19761,-26138,-19841,-26078,-19921,-26017,-20001,-25955,-20080,-25894,-20160,-25832,-20239,-25770,-20318,-25708,-20397,-25646,-20475,-25583,-20554,-25520,-20632,-25457,-20710,-25393,-20788,-25330,-20865,-25266,-20943,-25202,-21020,-25137,-21097,-25073,-21174,-25008,-21250,-24943,-21327,-24878,-21403,-24812,-21479,-24746,-21555,-24680,-21630,-24614,-21706,-24547,-21781,-24481,-21856,-24414,-21931,-24347,-22005,-24279,-22080,-24212,-22154,-24144,-22228,-24076,-22302,-24007,-22375,-23939,-22449,-23870,-22522,-23801,-22595,-23732,-22667,-23662,-22740,-23593,-22812,-23523,-22884,-23453,-22956,-23383,-23028,-23312,-23099,-23241,-23170,-23170,-23241,-23099,-23312,-23028,-23383,-22956,-23453,-22884,-23523,-22812,-23593,-22740,-23662,-22667,-23732,-22595,-23801,-22522,-23870,-22449,-23939,-22375,-24007,-22302,-24076,-22228,-24144,-22154,-24212,-22080,-24279,-22005,-24347,-21931,-24414,-21856,-24481,-21781,-24547,-21706,-24614,-21630,-24680,-21555,-24746,-21479,-24812,-21403,-24878,-21327,-24943,-21250,-25008,-21174,-25073,-21097,-25137,-21020,-25202,-20943,-25266,-20865,-25330,-20788,-25393,-20710,-25457,-20632,-25520,-20554,-25583,-20475,-25646,-20397,-25708,-20318,-25770,-20239,-25832,-20160,-25894,-20080,-25955,-20001,-26017,-19921,-26078,-19841,-26138,-19761,-26199,-19681,-26259,-19600,-26319,-19520,-26379,-19439,-26438,-19358,-26498,-19277,-26557,-19195,-26616,-19114,-26674,-19032,-26732,-18950,-26790,-18868,-26848,-18786,-26906,-18703,-26963,-18621,-27020,-18538,-27077,-18455,-27133,-18372,-27189,-18288,-27245,-18205,-27301,-18121,-27356,-18037,-27412,-17953,-27467,-17869,-27521,-17785,-27576,-17700,-27630,-17616,-27684,-17531,-27737,-17446,-27791,-17361,-27844,-17275,-27897,-17190,-27949,-17104,-28002,-17018,-28054,-16932,-28106,-16846,-28157,-16760,-28209,-16673,-28260,-16587,-28310,-16500,-28361,-16413,-28411,-16326,-28461,-16239,-28511,-16151,-28560,-16064,-28609,-15976,-28658,-15888,-28707,-15800,-28755,-15712,-28803,-15624,-28851,-15535,-28898,-15447,-28946,-15358,-28993,-15269,-29039,-15180,-29086,-15091,-29132,-15002,-29178,-14912,-29223,-14823,-29269,-14733,-29314,-14643,-29359,-14553,-29403,-14463,-29447,-14373,-29491,-14282,-29535,-14192,-29578,-14101,-29622,-14010,-29664,-13919,-29707,-13828,-29749,-13737,-29791,-13646,-29833,-13554,-29874,-13463,-29916,-13371,-29956,-13279,-29997,-13187,-30037,-13095,-30077,-13003,-30117,-12910,-30157,-12818,-30196,-12725,-30235,-12633,-30273,-12540,-30312,-12447,-30350,-12354,-30387,-12261,-30425,-12167,-30462,-12074,-30499,-11981,-30536,-11887,-30572,-11793,-30608,-11699,-30644,-11605,-30679,-11511,-30714,-11417,-30749,-11323,-30784,-11228,-30818,-11134,-30852,-11039,-30886,-10945,-30919,-10850,-30952,-10755,-30985,-10660,-31018,-10565,-31050,-10470,-31082,-10374,-31114,-10279,-31145,-10183,-31176,-10088,-31207,-9992,-31237,-9896,-31268,-9800,-31298,-9704,-31327,-9608,-31357,-9512,-31386,-9416,-31414,-9320,-31443,-9223,-31471,-9127,-31499,-9030,-31526,-8933,-31554,-8837,-31581,-8740,-31607,-8643,-31634,-8546,-31660,-8449,-31685,-8352,-31711,-8254,-31736,-8157,-31761,-8060,-31786,-7962,-31810,-7865,-31834,-7767,-31857,-7669,-31881,-7572,-31904,-7474,-31927,-7376,-31949,-7278,-31971,-7180,-31993,-7082,-32015,-6983,-32036,-6885,-32057,-6787,-32078,-6689,-32098,-6590,-32118,-6492,-32138,-6393,-32157,-6294,-32177,-6196,-32195,-6097,-32214,-5998,-32232,-5899,-32250,-5800,-32268,-5701,-32285,-5602,-32302,-5503,-32319,-5404,-32335,-5305,-32351,-5206,-32367,-5107,-32383,-5007,-32398,-4908,-32413,-4808,-32427,-4709,-32442,-4609,-32456,-4510,-32469,-4410,-32483,-4311,-32496,-4211,-32509,-4111,-32521,-4012,-32533,-3912,-32545,-3812,-32557,-3712,-32568,-3612,-32579,-3512,-32589,-3412,-32600,-3312,-32610,-3212,-32619,-3112,-32629,-3012,-32638,-2912,-32647,-2812,-32655,-2712,-32663,-2611,-32671,-2511,-32679,-2411,-32686,-2311,-32693,-2210,-32700,-2110,-32706,-2010,-32712,-1909,-32718,-1809,-32723,-1709,-32728,-1608,-32733,-1508,-32737,-1407,-32741,-1307,-32745,-1207,-32749,-1106,-32752,-1006,-32755,-905,-32758,-805,-32760,-704,-32762,-604,-32764,-503,-32765,-403,-32766,-302,-32767,-202,-32767,-101};
+#else //__AVX2__
+void dft1024(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[128],ytmp[128],*tw1024_256p=(simd256_q15_t *)tw1024,*x256=(simd256_q15_t *)x,*y256=(simd256_q15_t *)y,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i,j;
+
+ for (i=0,j=0; i<128; i+=4,j++) {
+ transpose16_ooff_simd256(x256+i,xtmp+j,32);
+ }
+ dft256((int16_t*)(xtmp),(int16_t*)(ytmp),1);
+ dft256((int16_t*)(xtmp+32),(int16_t*)(ytmp+32),1);
+ dft256((int16_t*)(xtmp+64),(int16_t*)(ytmp+64),1);
+ dft256((int16_t*)(xtmp+96),(int16_t*)(ytmp+96),1);
+
+ for (i=0; i<32; i++) {
+ bfly4_256(ytmpp,ytmpp+32,ytmpp+64,ytmpp+96,
+ y256p,y256p+32,y256p+64,y256p+96,
+ tw1024_256p,tw1024_256p+32,tw1024_256p+64);
+ tw1024_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+
+ for (i=0; i<8; i++) {
+ y256[0] = shiftright_int16_simd256(y256[0],1);
+ y256[1] = shiftright_int16_simd256(y256[1],1);
+ y256[2] = shiftright_int16_simd256(y256[2],1);
+ y256[3] = shiftright_int16_simd256(y256[3],1);
+ y256[4] = shiftright_int16_simd256(y256[4],1);
+ y256[5] = shiftright_int16_simd256(y256[5],1);
+ y256[6] = shiftright_int16_simd256(y256[6],1);
+ y256[7] = shiftright_int16_simd256(y256[7],1);
+ y256[8] = shiftright_int16_simd256(y256[8],1);
+ y256[9] = shiftright_int16_simd256(y256[9],1);
+ y256[10] = shiftright_int16_simd256(y256[10],1);
+ y256[11] = shiftright_int16_simd256(y256[11],1);
+ y256[12] = shiftright_int16_simd256(y256[12],1);
+ y256[13] = shiftright_int16_simd256(y256[13],1);
+ y256[14] = shiftright_int16_simd256(y256[14],1);
+ y256[15] = shiftright_int16_simd256(y256[15],1);
+
+ y256+=16;
+ }
+
+ }
+
+ _mm_empty();
+ _m_empty();
+
+}
+
+void idft1024(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[128],ytmp[128],*tw1024_256p=(simd256_q15_t *)tw1024,*x256=(simd256_q15_t *)x,*y256=(simd256_q15_t *)y,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i,j;
+
+ for (i=0,j=0; i<128; i+=4,j++) {
+ transpose16_ooff_simd256(x256+i,xtmp+j,32);
+ }
+
+
+ idft256((int16_t*)(xtmp),(int16_t*)(ytmp),1);
+ idft256((int16_t*)(xtmp+32),(int16_t*)(ytmp+32),1);
+ idft256((int16_t*)(xtmp+64),(int16_t*)(ytmp+64),1);
+ idft256((int16_t*)(xtmp+96),(int16_t*)(ytmp+96),1);
+
+ for (i=0; i<32; i++) {
+ ibfly4_256(ytmpp,ytmpp+32,ytmpp+64,ytmpp+96,
+ y256p,y256p+32,y256p+64,y256p+96,
+ tw1024_256p,tw1024_256p+32,tw1024_256p+64);
+ tw1024_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+
+ for (i=0; i<8; i++) {
+ y256[0] = shiftright_int16_simd256(y256[0],1);
+ y256[1] = shiftright_int16_simd256(y256[1],1);
+ y256[2] = shiftright_int16_simd256(y256[2],1);
+ y256[3] = shiftright_int16_simd256(y256[3],1);
+ y256[4] = shiftright_int16_simd256(y256[4],1);
+ y256[5] = shiftright_int16_simd256(y256[5],1);
+ y256[6] = shiftright_int16_simd256(y256[6],1);
+ y256[7] = shiftright_int16_simd256(y256[7],1);
+ y256[8] = shiftright_int16_simd256(y256[8],1);
+ y256[9] = shiftright_int16_simd256(y256[9],1);
+ y256[10] = shiftright_int16_simd256(y256[10],1);
+ y256[11] = shiftright_int16_simd256(y256[11],1);
+ y256[12] = shiftright_int16_simd256(y256[12],1);
+ y256[13] = shiftright_int16_simd256(y256[13],1);
+ y256[14] = shiftright_int16_simd256(y256[14],1);
+ y256[15] = shiftright_int16_simd256(y256[15],1);
+
+ y256+=16;
+ }
+
+ }
+
+ _mm_empty();
+ _m_empty();
+
+}
+#endif
+
+int16_t tw2048[2048] __attribute__((aligned(32))) = {32767,0,32766,-101,32766,-202,32765,-302,32764,-403,32763,-503,32761,-604,32759,-704,32757,-805,32754,-905,32751,-1006,32748,-1106,32744,-1207,32740,-1307,32736,-1407,32732,-1508,32727,-1608,32722,-1709,32717,-1809,32711,-1909,32705,-2010,32699,-2110,32692,-2210,32685,-2311,32678,-2411,32670,-2511,32662,-2611,32654,-2712,32646,-2812,32637,-2912,32628,-3012,32618,-3112,32609,-3212,32599,-3312,32588,-3412,32578,-3512,32567,-3612,32556,-3712,32544,-3812,32532,-3912,32520,-4012,32508,-4111,32495,-4211,32482,-4311,32468,-4410,32455,-4510,32441,-4609,32426,-4709,32412,-4808,32397,-4908,32382,-5007,32366,-5107,32350,-5206,32334,-5305,32318,-5404,32301,-5503,32284,-5602,32267,-5701,32249,-5800,32231,-5899,32213,-5998,32194,-6097,32176,-6196,32156,-6294,32137,-6393,32117,-6492,32097,-6590,32077,-6689,32056,-6787,32035,-6885,32014,-6983,31992,-7082,31970,-7180,31948,-7278,31926,-7376,31903,-7474,31880,-7572,31856,-7669,31833,-7767,31809,-7865,31785,-7962,31760,-8060,31735,-8157,31710,-8254,31684,-8352,31659,-8449,31633,-8546,31606,-8643,31580,-8740,31553,-8837,31525,-8933,31498,-9030,31470,-9127,31442,-9223,31413,-9320,31385,-9416,31356,-9512,31326,-9608,31297,-9704,31267,-9800,31236,-9896,31206,-9992,31175,-10088,31144,-10183,31113,-10279,31081,-10374,31049,-10470,31017,-10565,30984,-10660,30951,-10755,30918,-10850,30885,-10945,30851,-11039,30817,-11134,30783,-11228,30748,-11323,30713,-11417,30678,-11511,30643,-11605,30607,-11699,30571,-11793,30535,-11887,30498,-11981,30461,-12074,30424,-12167,30386,-12261,30349,-12354,30311,-12447,30272,-12540,30234,-12633,30195,-12725,30156,-12818,30116,-12910,30076,-13003,30036,-13095,29996,-13187,29955,-13279,29915,-13371,29873,-13463,29832,-13554,29790,-13646,29748,-13737,29706,-13828,29663,-13919,29621,-14010,29577,-14101,29534,-14192,29490,-14282,29446,-14373,29402,-14463,29358,-14553,29313,-14643,29268,-14733,29222,-14823,29177,-14912,29131,-15002,29085,-15091,29038,-15180,28992,-15269,28945,-15358,28897,-15447,28850,-15535,28802,-15624,28754,-15712,28706,-15800,28657,-15888,28608,-15976,28559,-16064,28510,-16151,28460,-16239,28410,-16326,28360,-16413,28309,-16500,28259,-16587,28208,-16673,28156,-16760,28105,-16846,28053,-16932,28001,-17018,27948,-17104,27896,-17190,27843,-17275,27790,-17361,27736,-17446,27683,-17531,27629,-17616,27575,-17700,27520,-17785,27466,-17869,27411,-17953,27355,-18037,27300,-18121,27244,-18205,27188,-18288,27132,-18372,27076,-18455,27019,-18538,26962,-18621,26905,-18703,26847,-18786,26789,-18868,26731,-18950,26673,-19032,26615,-19114,26556,-19195,26497,-19277,26437,-19358,26378,-19439,26318,-19520,26258,-19600,26198,-19681,26137,-19761,26077,-19841,26016,-19921,25954,-20001,25893,-20080,25831,-20160,25769,-20239,25707,-20318,25645,-20397,25582,-20475,25519,-20554,25456,-20632,25392,-20710,25329,-20788,25265,-20865,25201,-20943,25136,-21020,25072,-21097,25007,-21174,24942,-21250,24877,-21327,24811,-21403,24745,-21479,24679,-21555,24613,-21630,24546,-21706,24480,-21781,24413,-21856,24346,-21931,24278,-22005,24211,-22080,24143,-22154,24075,-22228,24006,-22302,23938,-22375,23869,-22449,23800,-22522,23731,-22595,23661,-22667,23592,-22740,23522,-22812,23452,-22884,23382,-22956,23311,-23028,23240,-23099,23169,-23170,23098,-23241,23027,-23312,22955,-23383,22883,-23453,22811,-23523,22739,-23593,22666,-23662,22594,-23732,22521,-23801,22448,-23870,22374,-23939,22301,-24007,22227,-24076,22153,-24144,22079,-24212,22004,-24279,21930,-24347,21855,-24414,21780,-24481,21705,-24547,21629,-24614,21554,-24680,21478,-24746,21402,-24812,21326,-24878,21249,-24943,21173,-25008,21096,-25073,21019,-25137,20942,-25202,20864,-25266,20787,-25330,20709,-25393,20631,-25457,20553,-25520,20474,-25583,20396,-25646,20317,-25708,20238,-25770,20159,-25832,20079,-25894,20000,-25955,19920,-26017,19840,-26078,19760,-26138,19680,-26199,19599,-26259,19519,-26319,19438,-26379,19357,-26438,19276,-26498,19194,-26557,19113,-26616,19031,-26674,18949,-26732,18867,-26790,18785,-26848,18702,-26906,18620,-26963,18537,-27020,18454,-27077,18371,-27133,18287,-27189,18204,-27245,18120,-27301,18036,-27356,17952,-27412,17868,-27467,17784,-27521,17699,-27576,17615,-27630,17530,-27684,17445,-27737,17360,-27791,17274,-27844,17189,-27897,17103,-27949,17017,-28002,16931,-28054,16845,-28106,16759,-28157,16672,-28209,16586,-28260,16499,-28310,16412,-28361,16325,-28411,16238,-28461,16150,-28511,16063,-28560,15975,-28609,15887,-28658,15799,-28707,15711,-28755,15623,-28803,15534,-28851,15446,-28898,15357,-28946,15268,-28993,15179,-29039,15090,-29086,15001,-29132,14911,-29178,14822,-29223,14732,-29269,14642,-29314,14552,-29359,14462,-29403,14372,-29447,14281,-29491,14191,-29535,14100,-29578,14009,-29622,13918,-29664,13827,-29707,13736,-29749,13645,-29791,13553,-29833,13462,-29874,13370,-29916,13278,-29956,13186,-29997,13094,-30037,13002,-30077,12909,-30117,12817,-30157,12724,-30196,12632,-30235,12539,-30273,12446,-30312,12353,-30350,12260,-30387,12166,-30425,12073,-30462,11980,-30499,11886,-30536,11792,-30572,11698,-30608,11604,-30644,11510,-30679,11416,-30714,11322,-30749,11227,-30784,11133,-30818,11038,-30852,10944,-30886,10849,-30919,10754,-30952,10659,-30985,10564,-31018,10469,-31050,10373,-31082,10278,-31114,10182,-31145,10087,-31176,9991,-31207,9895,-31237,9799,-31268,9703,-31298,9607,-31327,9511,-31357,9415,-31386,9319,-31414,9222,-31443,9126,-31471,9029,-31499,8932,-31526,8836,-31554,8739,-31581,8642,-31607,8545,-31634,8448,-31660,8351,-31685,8253,-31711,8156,-31736,8059,-31761,7961,-31786,7864,-31810,7766,-31834,7668,-31857,7571,-31881,7473,-31904,7375,-31927,7277,-31949,7179,-31971,7081,-31993,6982,-32015,6884,-32036,6786,-32057,6688,-32078,6589,-32098,6491,-32118,6392,-32138,6293,-32157,6195,-32177,6096,-32195,5997,-32214,5898,-32232,5799,-32250,5700,-32268,5601,-32285,5502,-32302,5403,-32319,5304,-32335,5205,-32351,5106,-32367,5006,-32383,4907,-32398,4807,-32413,4708,-32427,4608,-32442,4509,-32456,4409,-32469,4310,-32483,4210,-32496,4110,-32509,4011,-32521,3911,-32533,3811,-32545,3711,-32557,3611,-32568,3511,-32579,3411,-32589,3311,-32600,3211,-32610,3111,-32619,3011,-32629,2911,-32638,2811,-32647,2711,-32655,2610,-32663,2510,-32671,2410,-32679,2310,-32686,2209,-32693,2109,-32700,2009,-32706,1908,-32712,1808,-32718,1708,-32723,1607,-32728,1507,-32733,1406,-32737,1306,-32741,1206,-32745,1105,-32749,1005,-32752,904,-32755,804,-32758,703,-32760,603,-32762,502,-32764,402,-32765,301,-32766,201,-32767,100,-32767,0,-32767,-101,-32767,-202,-32767,-302,-32766,-403,-32765,-503,-32764,-604,-32762,-704,-32760,-805,-32758,-905,-32755,-1006,-32752,-1106,-32749,-1207,-32745,-1307,-32741,-1407,-32737,-1508,-32733,-1608,-32728,-1709,-32723,-1809,-32718,-1909,-32712,-2010,-32706,-2110,-32700,-2210,-32693,-2311,-32686,-2411,-32679,-2511,-32671,-2611,-32663,-2712,-32655,-2812,-32647,-2912,-32638,-3012,-32629,-3112,-32619,-3212,-32610,-3312,-32600,-3412,-32589,-3512,-32579,-3612,-32568,-3712,-32557,-3812,-32545,-3912,-32533,-4012,-32521,-4111,-32509,-4211,-32496,-4311,-32483,-4410,-32469,-4510,-32456,-4609,-32442,-4709,-32427,-4808,-32413,-4908,-32398,-5007,-32383,-5107,-32367,-5206,-32351,-5305,-32335,-5404,-32319,-5503,-32302,-5602,-32285,-5701,-32268,-5800,-32250,-5899,-32232,-5998,-32214,-6097,-32195,-6196,-32177,-6294,-32157,-6393,-32138,-6492,-32118,-6590,-32098,-6689,-32078,-6787,-32057,-6885,-32036,-6983,-32015,-7082,-31993,-7180,-31971,-7278,-31949,-7376,-31927,-7474,-31904,-7572,-31881,-7669,-31857,-7767,-31834,-7865,-31810,-7962,-31786,-8060,-31761,-8157,-31736,-8254,-31711,-8352,-31685,-8449,-31660,-8546,-31634,-8643,-31607,-8740,-31581,-8837,-31554,-8933,-31526,-9030,-31499,-9127,-31471,-9223,-31443,-9320,-31414,-9416,-31386,-9512,-31357,-9608,-31327,-9704,-31298,-9800,-31268,-9896,-31237,-9992,-31207,-10088,-31176,-10183,-31145,-10279,-31114,-10374,-31082,-10470,-31050,-10565,-31018,-10660,-30985,-10755,-30952,-10850,-30919,-10945,-30886,-11039,-30852,-11134,-30818,-11228,-30784,-11323,-30749,-11417,-30714,-11511,-30679,-11605,-30644,-11699,-30608,-11793,-30572,-11887,-30536,-11981,-30499,-12074,-30462,-12167,-30425,-12261,-30387,-12354,-30350,-12447,-30312,-12540,-30273,-12633,-30235,-12725,-30196,-12818,-30157,-12910,-30117,-13003,-30077,-13095,-30037,-13187,-29997,-13279,-29956,-13371,-29916,-13463,-29874,-13554,-29833,-13646,-29791,-13737,-29749,-13828,-29707,-13919,-29664,-14010,-29622,-14101,-29578,-14192,-29535,-14282,-29491,-14373,-29447,-14463,-29403,-14553,-29359,-14643,-29314,-14733,-29269,-14823,-29223,-14912,-29178,-15002,-29132,-15091,-29086,-15180,-29039,-15269,-28993,-15358,-28946,-15447,-28898,-15535,-28851,-15624,-28803,-15712,-28755,-15800,-28707,-15888,-28658,-15976,-28609,-16064,-28560,-16151,-28511,-16239,-28461,-16326,-28411,-16413,-28361,-16500,-28310,-16587,-28260,-16673,-28209,-16760,-28157,-16846,-28106,-16932,-28054,-17018,-28002,-17104,-27949,-17190,-27897,-17275,-27844,-17361,-27791,-17446,-27737,-17531,-27684,-17616,-27630,-17700,-27576,-17785,-27521,-17869,-27467,-17953,-27412,-18037,-27356,-18121,-27301,-18205,-27245,-18288,-27189,-18372,-27133,-18455,-27077,-18538,-27020,-18621,-26963,-18703,-26906,-18786,-26848,-18868,-26790,-18950,-26732,-19032,-26674,-19114,-26616,-19195,-26557,-19277,-26498,-19358,-26438,-19439,-26379,-19520,-26319,-19600,-26259,-19681,-26199,-19761,-26138,-19841,-26078,-19921,-26017,-20001,-25955,-20080,-25894,-20160,-25832,-20239,-25770,-20318,-25708,-20397,-25646,-20475,-25583,-20554,-25520,-20632,-25457,-20710,-25393,-20788,-25330,-20865,-25266,-20943,-25202,-21020,-25137,-21097,-25073,-21174,-25008,-21250,-24943,-21327,-24878,-21403,-24812,-21479,-24746,-21555,-24680,-21630,-24614,-21706,-24547,-21781,-24481,-21856,-24414,-21931,-24347,-22005,-24279,-22080,-24212,-22154,-24144,-22228,-24076,-22302,-24007,-22375,-23939,-22449,-23870,-22522,-23801,-22595,-23732,-22667,-23662,-22740,-23593,-22812,-23523,-22884,-23453,-22956,-23383,-23028,-23312,-23099,-23241,-23170,-23170,-23241,-23099,-23312,-23028,-23383,-22956,-23453,-22884,-23523,-22812,-23593,-22740,-23662,-22667,-23732,-22595,-23801,-22522,-23870,-22449,-23939,-22375,-24007,-22302,-24076,-22228,-24144,-22154,-24212,-22080,-24279,-22005,-24347,-21931,-24414,-21856,-24481,-21781,-24547,-21706,-24614,-21630,-24680,-21555,-24746,-21479,-24812,-21403,-24878,-21327,-24943,-21250,-25008,-21174,-25073,-21097,-25137,-21020,-25202,-20943,-25266,-20865,-25330,-20788,-25393,-20710,-25457,-20632,-25520,-20554,-25583,-20475,-25646,-20397,-25708,-20318,-25770,-20239,-25832,-20160,-25894,-20080,-25955,-20001,-26017,-19921,-26078,-19841,-26138,-19761,-26199,-19681,-26259,-19600,-26319,-19520,-26379,-19439,-26438,-19358,-26498,-19277,-26557,-19195,-26616,-19114,-26674,-19032,-26732,-18950,-26790,-18868,-26848,-18786,-26906,-18703,-26963,-18621,-27020,-18538,-27077,-18455,-27133,-18372,-27189,-18288,-27245,-18205,-27301,-18121,-27356,-18037,-27412,-17953,-27467,-17869,-27521,-17785,-27576,-17700,-27630,-17616,-27684,-17531,-27737,-17446,-27791,-17361,-27844,-17275,-27897,-17190,-27949,-17104,-28002,-17018,-28054,-16932,-28106,-16846,-28157,-16760,-28209,-16673,-28260,-16587,-28310,-16500,-28361,-16413,-28411,-16326,-28461,-16239,-28511,-16151,-28560,-16064,-28609,-15976,-28658,-15888,-28707,-15800,-28755,-15712,-28803,-15624,-28851,-15535,-28898,-15447,-28946,-15358,-28993,-15269,-29039,-15180,-29086,-15091,-29132,-15002,-29178,-14912,-29223,-14823,-29269,-14733,-29314,-14643,-29359,-14553,-29403,-14463,-29447,-14373,-29491,-14282,-29535,-14192,-29578,-14101,-29622,-14010,-29664,-13919,-29707,-13828,-29749,-13737,-29791,-13646,-29833,-13554,-29874,-13463,-29916,-13371,-29956,-13279,-29997,-13187,-30037,-13095,-30077,-13003,-30117,-12910,-30157,-12818,-30196,-12725,-30235,-12633,-30273,-12540,-30312,-12447,-30350,-12354,-30387,-12261,-30425,-12167,-30462,-12074,-30499,-11981,-30536,-11887,-30572,-11793,-30608,-11699,-30644,-11605,-30679,-11511,-30714,-11417,-30749,-11323,-30784,-11228,-30818,-11134,-30852,-11039,-30886,-10945,-30919,-10850,-30952,-10755,-30985,-10660,-31018,-10565,-31050,-10470,-31082,-10374,-31114,-10279,-31145,-10183,-31176,-10088,-31207,-9992,-31237,-9896,-31268,-9800,-31298,-9704,-31327,-9608,-31357,-9512,-31386,-9416,-31414,-9320,-31443,-9223,-31471,-9127,-31499,-9030,-31526,-8933,-31554,-8837,-31581,-8740,-31607,-8643,-31634,-8546,-31660,-8449,-31685,-8352,-31711,-8254,-31736,-8157,-31761,-8060,-31786,-7962,-31810,-7865,-31834,-7767,-31857,-7669,-31881,-7572,-31904,-7474,-31927,-7376,-31949,-7278,-31971,-7180,-31993,-7082,-32015,-6983,-32036,-6885,-32057,-6787,-32078,-6689,-32098,-6590,-32118,-6492,-32138,-6393,-32157,-6294,-32177,-6196,-32195,-6097,-32214,-5998,-32232,-5899,-32250,-5800,-32268,-5701,-32285,-5602,-32302,-5503,-32319,-5404,-32335,-5305,-32351,-5206,-32367,-5107,-32383,-5007,-32398,-4908,-32413,-4808,-32427,-4709,-32442,-4609,-32456,-4510,-32469,-4410,-32483,-4311,-32496,-4211,-32509,-4111,-32521,-4012,-32533,-3912,-32545,-3812,-32557,-3712,-32568,-3612,-32579,-3512,-32589,-3412,-32600,-3312,-32610,-3212,-32619,-3112,-32629,-3012,-32638,-2912,-32647,-2812,-32655,-2712,-32663,-2611,-32671,-2511,-32679,-2411,-32686,-2311,-32693,-2210,-32700,-2110,-32706,-2010,-32712,-1909,-32718,-1809,-32723,-1709,-32728,-1608,-32733,-1508,-32737,-1407,-32741,-1307,-32745,-1207,-32749,-1106,-32752,-1006,-32755,-905,-32758,-805,-32760,-704,-32762,-604,-32764,-503,-32765,-403,-32766,-302,-32767,-202,-32767,-101};
+
+#ifndef __AVX2__
void dft2048(int16_t *x,int16_t *y,int scale)
{
- simdshort_q15_t xtmp[2048],*xtmpp,*x64 = (simdshort_q15_t *)x;
+ simdshort_q15_t xtmp[1024],*xtmpp,*x64 = (simdshort_q15_t *)x;
simd_q15_t ytmp[512],*tw2048_128p=(simd_q15_t *)tw2048,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y;
simd_q15_t *ytmpp = &ytmp[0];
int i;
@@ -2781,7 +4530,7 @@ void dft2048(int16_t *x,int16_t *y,int scale)
void idft2048(int16_t *x,int16_t *y,int scale)
{
- simdshort_q15_t xtmp[2048],*xtmpp,*x64 = (simdshort_q15_t *)x;
+ simdshort_q15_t xtmp[1024],*xtmpp,*x64 = (simdshort_q15_t *)x;
simd_q15_t ytmp[512],*tw2048_128p=(simd_q15_t *)tw2048,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y;
simd_q15_t *ytmpp = &ytmp[0];
int i;
@@ -2868,12 +4617,197 @@ void idft2048(int16_t *x,int16_t *y,int scale)
}
+#else // __AVX2__
+
+void dft2048(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[256],*xtmpp,*x256 = (simd256_q15_t *)x;
+ simd256_q15_t ytmp[256],*tw2048_256p=(simd256_q15_t *)tw2048,*y256=(simd256_q15_t *)y,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i;
+ simd256_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16_simd256(ONE_OVER_SQRT2_Q15);
+
+ xtmpp = xtmp;
+
+ for (i=0; i<4; i++) {
+ transpose4_ooff_simd256(x256 ,xtmpp,128);
+ transpose4_ooff_simd256(x256+2,xtmpp+1,128);
+ transpose4_ooff_simd256(x256+4,xtmpp+2,128);
+ transpose4_ooff_simd256(x256+6,xtmpp+3,128);
+ transpose4_ooff_simd256(x256+8,xtmpp+4,128);
+ transpose4_ooff_simd256(x256+10,xtmpp+5,128);
+ transpose4_ooff_simd256(x256+12,xtmpp+6,128);
+ transpose4_ooff_simd256(x256+14,xtmpp+7,128);
+ transpose4_ooff_simd256(x256+16,xtmpp+8,128);
+ transpose4_ooff_simd256(x256+18,xtmpp+9,128);
+ transpose4_ooff_simd256(x256+20,xtmpp+10,128);
+ transpose4_ooff_simd256(x256+22,xtmpp+11,128);
+ transpose4_ooff_simd256(x256+24,xtmpp+12,128);
+ transpose4_ooff_simd256(x256+26,xtmpp+13,128);
+ transpose4_ooff_simd256(x256+28,xtmpp+14,128);
+ transpose4_ooff_simd256(x256+30,xtmpp+15,128);
+ transpose4_ooff_simd256(x256+32,xtmpp+16,128);
+ transpose4_ooff_simd256(x256+34,xtmpp+17,128);
+ transpose4_ooff_simd256(x256+36,xtmpp+18,128);
+ transpose4_ooff_simd256(x256+38,xtmpp+19,128);
+ transpose4_ooff_simd256(x256+40,xtmpp+20,128);
+ transpose4_ooff_simd256(x256+42,xtmpp+21,128);
+ transpose4_ooff_simd256(x256+44,xtmpp+22,128);
+ transpose4_ooff_simd256(x256+46,xtmpp+23,128);
+ transpose4_ooff_simd256(x256+48,xtmpp+24,128);
+ transpose4_ooff_simd256(x256+50,xtmpp+25,128);
+ transpose4_ooff_simd256(x256+52,xtmpp+26,128);
+ transpose4_ooff_simd256(x256+54,xtmpp+27,128);
+ transpose4_ooff_simd256(x256+56,xtmpp+28,128);
+ transpose4_ooff_simd256(x256+58,xtmpp+29,128);
+ transpose4_ooff_simd256(x256+60,xtmpp+30,128);
+ transpose4_ooff_simd256(x256+62,xtmpp+31,128);
+ x256+=64;
+ xtmpp+=32;
+ }
+
+ dft1024((int16_t*)(xtmp),(int16_t*)ytmp,1);
+ dft1024((int16_t*)(xtmp+128),(int16_t*)(ytmp+128),1);
+
+
+ for (i=0; i<128; i++) {
+ bfly2_256(ytmpp,ytmpp+128,
+ y256p,y256p+128,
+ tw2048_256p);
+ tw2048_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+ y256p = y256;
+
+ for (i=0; i<16; i++) {
+ y256p[0] = mulhi_int16_simd256(y256p[0],ONE_OVER_SQRT2_Q15_128);
+ y256p[1] = mulhi_int16_simd256(y256p[1],ONE_OVER_SQRT2_Q15_128);
+ y256p[2] = mulhi_int16_simd256(y256p[2],ONE_OVER_SQRT2_Q15_128);
+ y256p[3] = mulhi_int16_simd256(y256p[3],ONE_OVER_SQRT2_Q15_128);
+ y256p[4] = mulhi_int16_simd256(y256p[4],ONE_OVER_SQRT2_Q15_128);
+ y256p[5] = mulhi_int16_simd256(y256p[5],ONE_OVER_SQRT2_Q15_128);
+ y256p[6] = mulhi_int16_simd256(y256p[6],ONE_OVER_SQRT2_Q15_128);
+ y256p[7] = mulhi_int16_simd256(y256p[7],ONE_OVER_SQRT2_Q15_128);
+ y256p[8] = mulhi_int16_simd256(y256p[8],ONE_OVER_SQRT2_Q15_128);
+ y256p[9] = mulhi_int16_simd256(y256p[9],ONE_OVER_SQRT2_Q15_128);
+ y256p[10] = mulhi_int16_simd256(y256p[10],ONE_OVER_SQRT2_Q15_128);
+ y256p[11] = mulhi_int16_simd256(y256p[11],ONE_OVER_SQRT2_Q15_128);
+ y256p[12] = mulhi_int16_simd256(y256p[12],ONE_OVER_SQRT2_Q15_128);
+ y256p[13] = mulhi_int16_simd256(y256p[13],ONE_OVER_SQRT2_Q15_128);
+ y256p[14] = mulhi_int16_simd256(y256p[14],ONE_OVER_SQRT2_Q15_128);
+ y256p[15] = mulhi_int16_simd256(y256p[15],ONE_OVER_SQRT2_Q15_128);
+ y256p+=16;
+ }
+ }
+
+ _mm_empty();
+ _m_empty();
+
+}
+
+void idft2048(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[256],*xtmpp,*x256 = (simd256_q15_t *)x;
+ simd256_q15_t ytmp[256],*tw2048_256p=(simd256_q15_t *)tw2048,*y256=(simd256_q15_t *)y,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i;
+ simd256_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16_simd256(ONE_OVER_SQRT2_Q15);
+
+ xtmpp = xtmp;
+
+ for (i=0; i<4; i++) {
+ transpose4_ooff_simd256(x256 ,xtmpp,128);
+ transpose4_ooff_simd256(x256+2,xtmpp+1,128);
+ transpose4_ooff_simd256(x256+4,xtmpp+2,128);
+ transpose4_ooff_simd256(x256+6,xtmpp+3,128);
+ transpose4_ooff_simd256(x256+8,xtmpp+4,128);
+ transpose4_ooff_simd256(x256+10,xtmpp+5,128);
+ transpose4_ooff_simd256(x256+12,xtmpp+6,128);
+ transpose4_ooff_simd256(x256+14,xtmpp+7,128);
+ transpose4_ooff_simd256(x256+16,xtmpp+8,128);
+ transpose4_ooff_simd256(x256+18,xtmpp+9,128);
+ transpose4_ooff_simd256(x256+20,xtmpp+10,128);
+ transpose4_ooff_simd256(x256+22,xtmpp+11,128);
+ transpose4_ooff_simd256(x256+24,xtmpp+12,128);
+ transpose4_ooff_simd256(x256+26,xtmpp+13,128);
+ transpose4_ooff_simd256(x256+28,xtmpp+14,128);
+ transpose4_ooff_simd256(x256+30,xtmpp+15,128);
+ transpose4_ooff_simd256(x256+32,xtmpp+16,128);
+ transpose4_ooff_simd256(x256+34,xtmpp+17,128);
+ transpose4_ooff_simd256(x256+36,xtmpp+18,128);
+ transpose4_ooff_simd256(x256+38,xtmpp+19,128);
+ transpose4_ooff_simd256(x256+40,xtmpp+20,128);
+ transpose4_ooff_simd256(x256+42,xtmpp+21,128);
+ transpose4_ooff_simd256(x256+44,xtmpp+22,128);
+ transpose4_ooff_simd256(x256+46,xtmpp+23,128);
+ transpose4_ooff_simd256(x256+48,xtmpp+24,128);
+ transpose4_ooff_simd256(x256+50,xtmpp+25,128);
+ transpose4_ooff_simd256(x256+52,xtmpp+26,128);
+ transpose4_ooff_simd256(x256+54,xtmpp+27,128);
+ transpose4_ooff_simd256(x256+56,xtmpp+28,128);
+ transpose4_ooff_simd256(x256+58,xtmpp+29,128);
+ transpose4_ooff_simd256(x256+60,xtmpp+30,128);
+ transpose4_ooff_simd256(x256+62,xtmpp+31,128);
+ x256+=64;
+ xtmpp+=32;
+ }
+
+ idft1024((int16_t*)(xtmp),(int16_t*)ytmp,1);
+ idft1024((int16_t*)(xtmp+128),(int16_t*)(ytmp+128),1);
+
+
+ for (i=0; i<128; i++) {
+ ibfly2_256(ytmpp,ytmpp+128,
+ y256p,y256p+128,
+ tw2048_256p);
+ tw2048_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+ y256p = y256;
+
+ for (i=0; i<16; i++) {
+ y256p[0] = mulhi_int16_simd256(y256p[0],ONE_OVER_SQRT2_Q15_128);
+ y256p[1] = mulhi_int16_simd256(y256p[1],ONE_OVER_SQRT2_Q15_128);
+ y256p[2] = mulhi_int16_simd256(y256p[2],ONE_OVER_SQRT2_Q15_128);
+ y256p[3] = mulhi_int16_simd256(y256p[3],ONE_OVER_SQRT2_Q15_128);
+ y256p[4] = mulhi_int16_simd256(y256p[4],ONE_OVER_SQRT2_Q15_128);
+ y256p[5] = mulhi_int16_simd256(y256p[5],ONE_OVER_SQRT2_Q15_128);
+ y256p[6] = mulhi_int16_simd256(y256p[6],ONE_OVER_SQRT2_Q15_128);
+ y256p[7] = mulhi_int16_simd256(y256p[7],ONE_OVER_SQRT2_Q15_128);
+ y256p[8] = mulhi_int16_simd256(y256p[8],ONE_OVER_SQRT2_Q15_128);
+ y256p[9] = mulhi_int16_simd256(y256p[9],ONE_OVER_SQRT2_Q15_128);
+ y256p[10] = mulhi_int16_simd256(y256p[10],ONE_OVER_SQRT2_Q15_128);
+ y256p[11] = mulhi_int16_simd256(y256p[11],ONE_OVER_SQRT2_Q15_128);
+ y256p[12] = mulhi_int16_simd256(y256p[12],ONE_OVER_SQRT2_Q15_128);
+ y256p[13] = mulhi_int16_simd256(y256p[13],ONE_OVER_SQRT2_Q15_128);
+ y256p[14] = mulhi_int16_simd256(y256p[14],ONE_OVER_SQRT2_Q15_128);
+ y256p[15] = mulhi_int16_simd256(y256p[15],ONE_OVER_SQRT2_Q15_128);
+ y256p+=16;
+ }
+ }
+
+ _mm_empty();
+ _m_empty();
+
+}
+
+#endif
+
#include "twiddles4096.h"
+#ifndef __AVX2__
void dft4096(int16_t *x,int16_t *y,int scale)
{
- simd_q15_t xtmp[4096],ytmp[4096],*tw4096_128p=(simd_q15_t *)tw4096,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y;
+ simd_q15_t xtmp[1024],ytmp[1024],*tw4096_128p=(simd_q15_t *)tw4096,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y;
simd_q15_t *ytmpp = &ytmp[0];
int i,j;
@@ -2926,10 +4860,12 @@ void dft4096(int16_t *x,int16_t *y,int scale)
}
+
+
void idft4096(int16_t *x,int16_t *y,int scale)
{
- simd_q15_t xtmp[4096],ytmp[4096],*tw4096_128p=(simd_q15_t *)tw4096,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y;
+ simd_q15_t xtmp[1024],ytmp[1024],*tw4096_128p=(simd_q15_t *)tw4096,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y;
simd_q15_t *ytmpp = &ytmp[0];
int i,j;
@@ -2982,19 +4918,125 @@ void idft4096(int16_t *x,int16_t *y,int scale)
}
-/* Twiddles generated with
-twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:4095)/8192));
-twa2 = zeros(1,2*4096);
-twa2(1:2:end) = real(twa);
-twa2(2:2:end) = imag(twa);
-fd=fopen("twiddle_tmp.txt","w");
-fprintf(fd,"static int16_t tw8192[4096*2] = {");
-fprintf(fd,"%d,",twa2(1:(4096*2)-1));
-fprintf(fd,"%d};\n",twa2(end));
-fclose(fd);
-*/
-static int16_t tw8192[4096*2] = {32767,0,32766,-26,32766,-51,32766,-76,32766,-101,32766,-126,32766,-151,32766,-176,32766,-202,32766,-227,32766,-252,32765,-277,32765,-302,32765,-327,32765,-352,32764,-377,32764,-403,32764,-428,32763,-453,32763,-478,32763,-503,32762,-528,32762,-553,32761,-579,32761,-604,32760,-629,32760,-654,32759,-679,32759,-704,32758,-729,32758,-754,32757,-780,32757,-805,32756,-830,32755,-855,32755,-880,32754,-905,32753,-930,32753,-955,32752,-981,32751,-1006,32750,-1031,32750,-1056,32749,-1081,32748,-1106,32747,-1131,32746,-1156,32745,-1181,32744,-1207,32743,-1232,32742,-1257,32741,-1282,32740,-1307,32739,-1332,32738,-1357,32737,-1382,32736,-1407,32735,-1433,32734,-1458,32733,-1483,32732,-1508,32731,-1533,32729,-1558,32728,-1583,32727,-1608,32726,-1633,32725,-1659,32723,-1684,32722,-1709,32721,-1734,32719,-1759,32718,-1784,32717,-1809,32715,-1834,32714,-1859,32712,-1884,32711,-1909,32709,-1935,32708,-1960,32706,-1985,32705,-2010,32703,-2035,32702,-2060,32700,-2085,32699,-2110,32697,-2135,32695,-2160,32694,-2185,32692,-2210,32690,-2236,32688,-2261,32687,-2286,32685,-2311,32683,-2336,32681,-2361,32680,-2386,32678,-2411,32676,-2436,32674,-2461,32672,-2486,32670,-2511,32668,-2536,32666,-2561,32664,-2586,32662,-2611,32660,-2637,32658,-2662,32656,-2687,32654,-2712,32652,-2737,32650,-2762,32648,-2787,32646,-2812,32644,-2837,32641,-2862,32639,-2887,32637,-2912,32635,-2937,32632,-2962,32630,-2987,32628,-3012,32625,-3037,32623,-3062,32621,-3087,32618,-3112,32616,-3137,32614,-3162,32611,-3187,32609,-3212,32606,-3237,32604,-3262,32601,-3287,32599,-3312,32596,-3337,32594,-3362,32591,-3387,32588,-3412,32586,-3437,32583,-3462,32580,-3487,32578,-3512,32575,-3537,32572,-3562,32570,-3587,32567,-3612,32564,-3637,32561,-3662,32558,-3687,32556,-3712,32553,-3737,32550,-3762,32547,-3787,32544,-3812,32541,-3837,32538,-3862,32535,-3887,32532,-3912,32529,-3937,32526,-3962,32523,-3987,32520,-4012,32517,-4036,32514,-4061,32511,-4086,32508,-4111,32504,-4136,32501,-4161,32498,-4186,32495,-4211,32492,-4236,32488,-4261,32485,-4286,32482,-4311,32478,-4336,32475,-4360,32472,-4385,32468,-4410,32465,-4435,32462,-4460,32458,-4485,32455,-4510,32451,-4535,32448,-4560,32444,-4585,32441,-4609,32437,-4634,32434,-4659,32430,-4684,32426,-4709,32423,-4734,32419,-4759,32416,-4784,32412,-4808,32408,-4833,32404,-4858,32401,-4883,32397,-4908,32393,-4933,32389,-4958,32386,-4982,32382,-5007,32378,-5032,32374,-5057,32370,-5082,32366,-5107,32362,-5131,32358,-5156,32354,-5181,32350,-5206,32346,-5231,32342,-5255,32338,-5280,32334,-5305,32330,-5330,32326,-5355,32322,-5379,32318,-5404,32314,-5429,32310,-5454,32305,-5479,32301,-5503,32297,-5528,32293,-5553,32288,-5578,32284,-5602,32280,-5627,32275,-5652,32271,-5677,32267,-5701,32262,-5726,32258,-5751,32254,-5776,32249,-5800,32245,-5825,32240,-5850,32236,-5875,32231,-5899,32227,-5924,32222,-5949,32218,-5973,32213,-5998,32208,-6023,32204,-6048,32199,-6072,32194,-6097,32190,-6122,32185,-6146,32180,-6171,32176,-6196,32171,-6220,32166,-6245,32161,-6270,32156,-6294,32152,-6319,32147,-6344,32142,-6368,32137,-6393,32132,-6418,32127,-6442,32122,-6467,32117,-6492,32112,-6516,32107,-6541,32102,-6565,32097,-6590,32092,-6615,32087,-6639,32082,-6664,32077,-6689,32072,-6713,32066,-6738,32061,-6762,32056,-6787,32051,-6812,32046,-6836,32040,-6861,32035,-6885,32030,-6910,32024,-6934,32019,-6959,32014,-6983,32008,-7008,32003,-7033,31998,-7057,31992,-7082,31987,-7106,31981,-7131,31976,-7155,31970,-7180,31965,-7204,31959,-7229,31954,-7253,31948,-7278,31943,-7302,31937,-7327,31931,-7351,31926,-7376,31920,-7400,31914,-7425,31909,-7449,31903,-7474,31897,-7498,31891,-7523,31886,-7547,31880,-7572,31874,-7596,31868,-7620,31862,-7645,31856,-7669,31851,-7694,31845,-7718,31839,-7743,31833,-7767,31827,-7791,31821,-7816,31815,-7840,31809,-7865,31803,-7889,31797,-7913,31791,-7938,31785,-7962,31778,-7987,31772,-8011,31766,-8035,31760,-8060,31754,-8084,31748,-8108,31741,-8133,31735,-8157,31729,-8181,31723,-8206,31716,-8230,31710,-8254,31704,-8279,31697,-8303,31691,-8327,31684,-8352,31678,-8376,31672,-8400,31665,-8425,31659,-8449,31652,-8473,31646,-8497,31639,-8522,31633,-8546,31626,-8570,31619,-8594,31613,-8619,31606,-8643,31600,-8667,31593,-8691,31586,-8716,31580,-8740,31573,-8764,31566,-8788,31559,-8813,31553,-8837,31546,-8861,31539,-8885,31532,-8909,31525,-8933,31518,-8958,31512,-8982,31505,-9006,31498,-9030,31491,-9054,31484,-9078,31477,-9103,31470,-9127,31463,-9151,31456,-9175,31449,-9199,31442,-9223,31435,-9247,31428,-9271,31420,-9296,31413,-9320,31406,-9344,31399,-9368,31392,-9392,31385,-9416,31377,-9440,31370,-9464,31363,-9488,31356,-9512,31348,-9536,31341,-9560,31334,-9584,31326,-9608,31319,-9632,31311,-9656,31304,-9680,31297,-9704,31289,-9728,31282,-9752,31274,-9776,31267,-9800,31259,-9824,31252,-9848,31244,-9872,31236,-9896,31229,-9920,31221,-9944,31214,-9968,31206,-9992,31198,-10016,31191,-10040,31183,-10064,31175,-10088,31167,-10112,31160,-10136,31152,-10160,31144,-10183,31136,-10207,31128,-10231,31121,-10255,31113,-10279,31105,-10303,31097,-10327,31089,-10350,31081,-10374,31073,-10398,31065,-10422,31057,-10446,31049,-10470,31041,-10493,31033,-10517,31025,-10541,31017,-10565,31009,-10589,31001,-10612,30992,-10636,30984,-10660,30976,-10684,30968,-10707,30960,-10731,30951,-10755,30943,-10779,30935,-10802,30927,-10826,30918,-10850,30910,-10874,30902,-10897,30893,-10921,30885,-10945,30876,-10968,30868,-10992,30860,-11016,30851,-11039,30843,-11063,30834,-11087,30826,-11110,30817,-11134,30809,-11158,30800,-11181,30791,-11205,30783,-11228,30774,-11252,30766,-11276,30757,-11299,30748,-11323,30739,-11346,30731,-11370,30722,-11394,30713,-11417,30705,-11441,30696,-11464,30687,-11488,30678,-11511,30669,-11535,30660,-11558,30652,-11582,30643,-11605,30634,-11629,30625,-11652,30616,-11676,30607,-11699,30598,-11723,30589,-11746,30580,-11770,30571,-11793,30562,-11817,30553,-11840,30544,-11863,30535,-11887,30525,-11910,30516,-11934,30507,-11957,30498,-11981,30489,-12004,30480,-12027,30470,-12051,30461,-12074,30452,-12097,30442,-12121,30433,-12144,30424,-12167,30415,-12191,30405,-12214,30396,-12237,30386,-12261,30377,-12284,30368,-12307,30358,-12331,30349,-12354,30339,-12377,30330,-12400,30320,-12424,30311,-12447,30301,-12470,30291,-12493,30282,-12517,30272,-12540,30263,-12563,30253,-12586,30243,-12610,30234,-12633,30224,-12656,30214,-12679,30205,-12702,30195,-12725,30185,-12749,30175,-12772,30165,-12795,30156,-12818,30146,-12841,30136,-12864,30126,-12887,30116,-12910,30106,-12934,30096,-12957,30086,-12980,30076,-13003,30066,-13026,30056,-13049,30046,-13072,30036,-13095,30026,-13118,30016,-13141,30006,-13164,29996,-13187,29986,-13210,29976,-13233,29966,-13256,29955,-13279,29945,-13302,29935,-13325,29925,-13348,29915,-13371,29904,-13394,29894,-13417,29884,-13440,29873,-13463,29863,-13486,29853,-13508,29842,-13531,29832,-13554,29822,-13577,29811,-13600,29801,-13623,29790,-13646,29780,-13668,29769,-13691,29759,-13714,29748,-13737,29738,-13760,29727,-13783,29717,-13805,29706,-13828,29695,-13851,29685,-13874,29674,-13896,29663,-13919,29653,-13942,29642,-13965,29631,-13987,29621,-14010,29610,-14033,29599,-14056,29588,-14078,29577,-14101,29567,-14124,29556,-14146,29545,-14169,29534,-14192,29523,-14214,29512,-14237,29501,-14260,29490,-14282,29479,-14305,29468,-14327,29457,-14350,29446,-14373,29435,-14395,29424,-14418,29413,-14440,29402,-14463,29391,-14485,29380,-14508,29369,-14531,29358,-14553,29346,-14576,29335,-14598,29324,-14621,29313,-14643,29302,-14666,29290,-14688,29279,-14710,29268,-14733,29256,-14755,29245,-14778,29234,-14800,29222,-14823,29211,-14845,29200,-14867,29188,-14890,29177,-14912,29165,-14935,29154,-14957,29142,-14979,29131,-15002,29119,-15024,29108,-15046,29096,-15069,29085,-15091,29073,-15113,29062,-15136,29050,-15158,29038,-15180,29027,-15202,29015,-15225,29003,-15247,28992,-15269,28980,-15291,28968,-15314,28956,-15336,28945,-15358,28933,-15380,28921,-15402,28909,-15425,28897,-15447,28886,-15469,28874,-15491,28862,-15513,28850,-15535,28838,-15557,28826,-15580,28814,-15602,28802,-15624,28790,-15646,28778,-15668,28766,-15690,28754,-15712,28742,-15734,28730,-15756,28718,-15778,28706,-15800,28694,-15822,28681,-15844,28669,-15866,28657,-15888,28645,-15910,28633,-15932,28620,-15954,28608,-15976,28596,-15998,28584,-16020,28571,-16042,28559,-16064,28547,-16086,28534,-16108,28522,-16129,28510,-16151,28497,-16173,28485,-16195,28472,-16217,28460,-16239,28447,-16261,28435,-16282,28423,-16304,28410,-16326,28397,-16348,28385,-16369,28372,-16391,28360,-16413,28347,-16435,28335,-16456,28322,-16478,28309,-16500,28297,-16522,28284,-16543,28271,-16565,28259,-16587,28246,-16608,28233,-16630,28220,-16652,28208,-16673,28195,-16695,28182,-16717,28169,-16738,28156,-16760,28143,-16781,28131,-16803,28118,-16825,28105,-16846,28092,-16868,28079,-16889,28066,-16911,28053,-16932,28040,-16954,28027,-16975,28014,-16997,28001,-17018,27988,-17040,27975,-17061,27962,-17083,27948,-17104,27935,-17125,27922,-17147,27909,-17168,27896,-17190,27883,-17211,27869,-17233,27856,-17254,27843,-17275,27830,-17297,27816,-17318,27803,-17339,27790,-17361,27777,-17382,27763,-17403,27750,-17424,27736,-17446,27723,-17467,27710,-17488,27696,-17510,27683,-17531,27669,-17552,27656,-17573,27642,-17594,27629,-17616,27615,-17637,27602,-17658,27588,-17679,27575,-17700,27561,-17721,27548,-17743,27534,-17764,27520,-17785,27507,-17806,27493,-17827,27479,-17848,27466,-17869,27452,-17890,27438,-17911,27424,-17932,27411,-17953,27397,-17974,27383,-17995,27369,-18016,27355,-18037,27342,-18058,27328,-18079,27314,-18100,27300,-18121,27286,-18142,27272,-18163,27258,-18184,27244,-18205,27230,-18226,27216,-18247,27202,-18268,27188,-18288,27174,-18309,27160,-18330,27146,-18351,27132,-18372,27118,-18393,27104,-18413,27090,-18434,27076,-18455,27061,-18476,27047,-18496,27033,-18517,27019,-18538,27005,-18559,26990,-18579,26976,-18600,26962,-18621,26948,-18641,26933,-18662,26919,-18683,26905,-18703,26890,-18724,26876,-18745,26861,-18765,26847,-18786,26833,-18806,26818,-18827,26804,-18847,26789,-18868,26775,-18889,26760,-18909,26746,-18930,26731,-18950,26717,-18971,26702,-18991,26688,-19012,26673,-19032,26658,-19052,26644,-19073,26629,-19093,26615,-19114,26600,-19134,26585,-19155,26570,-19175,26556,-19195,26541,-19216,26526,-19236,26512,-19256,26497,-19277,26482,-19297,26467,-19317,26452,-19338,26437,-19358,26423,-19378,26408,-19398,26393,-19419,26378,-19439,26363,-19459,26348,-19479,26333,-19500,26318,-19520,26303,-19540,26288,-19560,26273,-19580,26258,-19600,26243,-19621,26228,-19641,26213,-19661,26198,-19681,26183,-19701,26168,-19721,26153,-19741,26137,-19761,26122,-19781,26107,-19801,26092,-19821,26077,-19841,26061,-19861,26046,-19881,26031,-19901,26016,-19921,26000,-19941,25985,-19961,25970,-19981,25954,-20001,25939,-20021,25924,-20041,25908,-20061,25893,-20080,25878,-20100,25862,-20120,25847,-20140,25831,-20160,25816,-20180,25800,-20199,25785,-20219,25769,-20239,25754,-20259,25738,-20278,25723,-20298,25707,-20318,25691,-20338,25676,-20357,25660,-20377,25645,-20397,25629,-20416,25613,-20436,25598,-20456,25582,-20475,25566,-20495,25550,-20514,25535,-20534,25519,-20554,25503,-20573,25487,-20593,25472,-20612,25456,-20632,25440,-20651,25424,-20671,25408,-20690,25392,-20710,25376,-20729,25361,-20749,25345,-20768,25329,-20788,25313,-20807,25297,-20826,25281,-20846,25265,-20865,25249,-20885,25233,-20904,25217,-20923,25201,-20943,25185,-20962,25169,-20981,25152,-21001,25136,-21020,25120,-21039,25104,-21058,25088,-21078,25072,-21097,25056,-21116,25039,-21135,25023,-21155,25007,-21174,24991,-21193,24974,-21212,24958,-21231,24942,-21250,24926,-21269,24909,-21289,24893,-21308,24877,-21327,24860,-21346,24844,-21365,24827,-21384,24811,-21403,24795,-21422,24778,-21441,24762,-21460,24745,-21479,24729,-21498,24712,-21517,24696,-21536,24679,-21555,24663,-21574,24646,-21593,24630,-21612,24613,-21630,24596,-21649,24580,-21668,24563,-21687,24546,-21706,24530,-21725,24513,-21744,24496,-21762,24480,-21781,24463,-21800,24446,-21819,24430,-21837,24413,-21856,24396,-21875,24379,-21894,24362,-21912,24346,-21931,24329,-21950,24312,-21968,24295,-21987,24278,-22005,24261,-22024,24244,-22043,24228,-22061,24211,-22080,24194,-22098,24177,-22117,24160,-22136,24143,-22154,24126,-22173,24109,-22191,24092,-22210,24075,-22228,24058,-22246,24041,-22265,24023,-22283,24006,-22302,23989,-22320,23972,-22339,23955,-22357,23938,-22375,23921,-22394,23903,-22412,23886,-22430,23869,-22449,23852,-22467,23835,-22485,23817,-22504,23800,-22522,23783,-22540,23766,-22558,23748,-22576,23731,-22595,23714,-22613,23696,-22631,23679,-22649,23661,-22667,23644,-22686,23627,-22704,23609,-22722,23592,-22740,23574,-22758,23557,-22776,23539,-22794,23522,-22812,23504,-22830,23487,-22848,23469,-22866,23452,-22884,23434,-22902,23417,-22920,23399,-22938,23382,-22956,23364,-22974,23346,-22992,23329,-23010,23311,-23028,23293,-23046,23276,-23063,23258,-23081,23240,-23099,23223,-23117,23205,-23135,23187,-23152,23169,-23170,23151,-23188,23134,-23206,23116,-23224,23098,-23241,23080,-23259,23062,-23277,23045,-23294,23027,-23312,23009,-23330,22991,-23347,22973,-23365,22955,-23383,22937,-23400,22919,-23418,22901,-23435,22883,-23453,22865,-23470,22847,-23488,22829,-23505,22811,-23523,22793,-23540,22775,-23558,22757,-23575,22739,-23593,22721,-23610,22703,-23628,22685,-23645,22666,-23662,22648,-23680,22630,-23697,22612,-23715,22594,-23732,22575,-23749,22557,-23767,22539,-23784,22521,-23801,22503,-23818,22484,-23836,22466,-23853,22448,-23870,22429,-23887,22411,-23904,22393,-23922,22374,-23939,22356,-23956,22338,-23973,22319,-23990,22301,-24007,22282,-24024,22264,-24042,22245,-24059,22227,-24076,22209,-24093,22190,-24110,22172,-24127,22153,-24144,22135,-24161,22116,-24178,22097,-24195,22079,-24212,22060,-24229,22042,-24245,22023,-24262,22004,-24279,21986,-24296,21967,-24313,21949,-24330,21930,-24347,21911,-24363,21893,-24380,21874,-24397,21855,-24414,21836,-24431,21818,-24447,21799,-24464,21780,-24481,21761,-24497,21743,-24514,21724,-24531,21705,-24547,21686,-24564,21667,-24581,21648,-24597,21629,-24614,21611,-24631,21592,-24647,21573,-24664,21554,-24680,21535,-24697,21516,-24713,21497,-24730,21478,-24746,21459,-24763,21440,-24779,21421,-24796,21402,-24812,21383,-24828,21364,-24845,21345,-24861,21326,-24878,21307,-24894,21288,-24910,21268,-24927,21249,-24943,21230,-24959,21211,-24975,21192,-24992,21173,-25008,21154,-25024,21134,-25040,21115,-25057,21096,-25073,21077,-25089,21057,-25105,21038,-25121,21019,-25137,21000,-25153,20980,-25170,20961,-25186,20942,-25202,20922,-25218,20903,-25234,20884,-25250,20864,-25266,20845,-25282,20825,-25298,20806,-25314,20787,-25330,20767,-25346,20748,-25362,20728,-25377,20709,-25393,20689,-25409,20670,-25425,20650,-25441,20631,-25457,20611,-25473,20592,-25488,20572,-25504,20553,-25520,20533,-25536,20513,-25551,20494,-25567,20474,-25583,20455,-25599,20435,-25614,20415,-25630,20396,-25646,20376,-25661,20356,-25677,20337,-25692,20317,-25708,20297,-25724,20277,-25739,20258,-25755,20238,-25770,20218,-25786,20198,-25801,20179,-25817,20159,-25832,20139,-25848,20119,-25863,20099,-25879,20079,-25894,20060,-25909,20040,-25925,20020,-25940,20000,-25955,19980,-25971,19960,-25986,19940,-26001,19920,-26017,19900,-26032,19880,-26047,19860,-26062,19840,-26078,19820,-26093,19800,-26108,19780,-26123,19760,-26138,19740,-26154,19720,-26169,19700,-26184,19680,-26199,19660,-26214,19640,-26229,19620,-26244,19599,-26259,19579,-26274,19559,-26289,19539,-26304,19519,-26319,19499,-26334,19478,-26349,19458,-26364,19438,-26379,19418,-26394,19397,-26409,19377,-26424,19357,-26438,19337,-26453,19316,-26468,19296,-26483,19276,-26498,19255,-26513,19235,-26527,19215,-26542,19194,-26557,19174,-26571,19154,-26586,19133,-26601,19113,-26616,19092,-26630,19072,-26645,19051,-26659,19031,-26674,19011,-26689,18990,-26703,18970,-26718,18949,-26732,18929,-26747,18908,-26761,18888,-26776,18867,-26790,18846,-26805,18826,-26819,18805,-26834,18785,-26848,18764,-26862,18744,-26877,18723,-26891,18702,-26906,18682,-26920,18661,-26934,18640,-26949,18620,-26963,18599,-26977,18578,-26991,18558,-27006,18537,-27020,18516,-27034,18495,-27048,18475,-27062,18454,-27077,18433,-27091,18412,-27105,18392,-27119,18371,-27133,18350,-27147,18329,-27161,18308,-27175,18287,-27189,18267,-27203,18246,-27217,18225,-27231,18204,-27245,18183,-27259,18162,-27273,18141,-27287,18120,-27301,18099,-27315,18078,-27329,18057,-27343,18036,-27356,18015,-27370,17994,-27384,17973,-27398,17952,-27412,17931,-27425,17910,-27439,17889,-27453,17868,-27467,17847,-27480,17826,-27494,17805,-27508,17784,-27521,17763,-27535,17742,-27549,17720,-27562,17699,-27576,17678,-27589,17657,-27603,17636,-27616,17615,-27630,17593,-27643,17572,-27657,17551,-27670,17530,-27684,17509,-27697,17487,-27711,17466,-27724,17445,-27737,17423,-27751,17402,-27764,17381,-27778,17360,-27791,17338,-27804,17317,-27817,17296,-27831,17274,-27844,17253,-27857,17232,-27870,17210,-27884,17189,-27897,17167,-27910,17146,-27923,17124,-27936,17103,-27949,17082,-27963,17060,-27976,17039,-27989,17017,-28002,16996,-28015,16974,-28028,16953,-28041,16931,-28054,16910,-28067,16888,-28080,16867,-28093,16845,-28106,16824,-28119,16802,-28132,16780,-28144,16759,-28157,16737,-28170,16716,-28183,16694,-28196,16672,-28209,16651,-28221,16629,-28234,16607,-28247,16586,-28260,16564,-28272,16542,-28285,16521,-28298,16499,-28310,16477,-28323,16455,-28336,16434,-28348,16412,-28361,16390,-28373,16368,-28386,16347,-28398,16325,-28411,16303,-28424,16281,-28436,16260,-28448,16238,-28461,16216,-28473,16194,-28486,16172,-28498,16150,-28511,16128,-28523,16107,-28535,16085,-28548,16063,-28560,16041,-28572,16019,-28585,15997,-28597,15975,-28609,15953,-28621,15931,-28634,15909,-28646,15887,-28658,15865,-28670,15843,-28682,15821,-28695,15799,-28707,15777,-28719,15755,-28731,15733,-28743,15711,-28755,15689,-28767,15667,-28779,15645,-28791,15623,-28803,15601,-28815,15579,-28827,15556,-28839,15534,-28851,15512,-28863,15490,-28875,15468,-28887,15446,-28898,15424,-28910,15401,-28922,15379,-28934,15357,-28946,15335,-28957,15313,-28969,15290,-28981,15268,-28993,15246,-29004,15224,-29016,15201,-29028,15179,-29039,15157,-29051,15135,-29063,15112,-29074,15090,-29086,15068,-29097,15045,-29109,15023,-29120,15001,-29132,14978,-29143,14956,-29155,14934,-29166,14911,-29178,14889,-29189,14866,-29201,14844,-29212,14822,-29223,14799,-29235,14777,-29246,14754,-29257,14732,-29269,14709,-29280,14687,-29291,14665,-29303,14642,-29314,14620,-29325,14597,-29336,14575,-29347,14552,-29359,14530,-29370,14507,-29381,14484,-29392,14462,-29403,14439,-29414,14417,-29425,14394,-29436,14372,-29447,14349,-29458,14326,-29469,14304,-29480,14281,-29491,14259,-29502,14236,-29513,14213,-29524,14191,-29535,14168,-29546,14145,-29557,14123,-29568,14100,-29578,14077,-29589,14055,-29600,14032,-29611,14009,-29622,13986,-29632,13964,-29643,13941,-29654,13918,-29664,13895,-29675,13873,-29686,13850,-29696,13827,-29707,13804,-29718,13782,-29728,13759,-29739,13736,-29749,13713,-29760,13690,-29770,13667,-29781,13645,-29791,13622,-29802,13599,-29812,13576,-29823,13553,-29833,13530,-29843,13507,-29854,13485,-29864,13462,-29874,13439,-29885,13416,-29895,13393,-29905,13370,-29916,13347,-29926,13324,-29936,13301,-29946,13278,-29956,13255,-29967,13232,-29977,13209,-29987,13186,-29997,13163,-30007,13140,-30017,13117,-30027,13094,-30037,13071,-30047,13048,-30057,13025,-30067,13002,-30077,12979,-30087,12956,-30097,12933,-30107,12909,-30117,12886,-30127,12863,-30137,12840,-30147,12817,-30157,12794,-30166,12771,-30176,12748,-30186,12724,-30196,12701,-30206,12678,-30215,12655,-30225,12632,-30235,12609,-30244,12585,-30254,12562,-30264,12539,-30273,12516,-30283,12492,-30292,12469,-30302,12446,-30312,12423,-30321,12399,-30331,12376,-30340,12353,-30350,12330,-30359,12306,-30369,12283,-30378,12260,-30387,12236,-30397,12213,-30406,12190,-30416,12166,-30425,12143,-30434,12120,-30443,12096,-30453,12073,-30462,12050,-30471,12026,-30481,12003,-30490,11980,-30499,11956,-30508,11933,-30517,11909,-30526,11886,-30536,11862,-30545,11839,-30554,11816,-30563,11792,-30572,11769,-30581,11745,-30590,11722,-30599,11698,-30608,11675,-30617,11651,-30626,11628,-30635,11604,-30644,11581,-30653,11557,-30661,11534,-30670,11510,-30679,11487,-30688,11463,-30697,11440,-30706,11416,-30714,11393,-30723,11369,-30732,11345,-30740,11322,-30749,11298,-30758,11275,-30767,11251,-30775,11227,-30784,11204,-30792,11180,-30801,11157,-30810,11133,-30818,11109,-30827,11086,-30835,11062,-30844,11038,-30852,11015,-30861,10991,-30869,10967,-30877,10944,-30886,10920,-30894,10896,-30903,10873,-30911,10849,-30919,10825,-30928,10801,-30936,10778,-30944,10754,-30952,10730,-30961,10706,-30969,10683,-30977,10659,-30985,10635,-30993,10611,-31002,10588,-31010,10564,-31018,10540,-31026,10516,-31034,10492,-31042,10469,-31050,10445,-31058,10421,-31066,10397,-31074,10373,-31082,10349,-31090,10326,-31098,10302,-31106,10278,-31114,10254,-31122,10230,-31129,10206,-31137,10182,-31145,10159,-31153,10135,-31161,10111,-31168,10087,-31176,10063,-31184,10039,-31192,10015,-31199,9991,-31207,9967,-31215,9943,-31222,9919,-31230,9895,-31237,9871,-31245,9847,-31253,9823,-31260,9799,-31268,9775,-31275,9751,-31283,9727,-31290,9703,-31298,9679,-31305,9655,-31312,9631,-31320,9607,-31327,9583,-31335,9559,-31342,9535,-31349,9511,-31357,9487,-31364,9463,-31371,9439,-31378,9415,-31386,9391,-31393,9367,-31400,9343,-31407,9319,-31414,9295,-31421,9270,-31429,9246,-31436,9222,-31443,9198,-31450,9174,-31457,9150,-31464,9126,-31471,9102,-31478,9077,-31485,9053,-31492,9029,-31499,9005,-31506,8981,-31513,8957,-31519,8932,-31526,8908,-31533,8884,-31540,8860,-31547,8836,-31554,8812,-31560,8787,-31567,8763,-31574,8739,-31581,8715,-31587,8690,-31594,8666,-31601,8642,-31607,8618,-31614,8593,-31620,8569,-31627,8545,-31634,8521,-31640,8496,-31647,8472,-31653,8448,-31660,8424,-31666,8399,-31673,8375,-31679,8351,-31685,8326,-31692,8302,-31698,8278,-31705,8253,-31711,8229,-31717,8205,-31724,8180,-31730,8156,-31736,8132,-31742,8107,-31749,8083,-31755,8059,-31761,8034,-31767,8010,-31773,7986,-31779,7961,-31786,7937,-31792,7912,-31798,7888,-31804,7864,-31810,7839,-31816,7815,-31822,7790,-31828,7766,-31834,7742,-31840,7717,-31846,7693,-31852,7668,-31857,7644,-31863,7619,-31869,7595,-31875,7571,-31881,7546,-31887,7522,-31892,7497,-31898,7473,-31904,7448,-31910,7424,-31915,7399,-31921,7375,-31927,7350,-31932,7326,-31938,7301,-31944,7277,-31949,7252,-31955,7228,-31960,7203,-31966,7179,-31971,7154,-31977,7130,-31982,7105,-31988,7081,-31993,7056,-31999,7032,-32004,7007,-32009,6982,-32015,6958,-32020,6933,-32025,6909,-32031,6884,-32036,6860,-32041,6835,-32047,6811,-32052,6786,-32057,6761,-32062,6737,-32067,6712,-32073,6688,-32078,6663,-32083,6638,-32088,6614,-32093,6589,-32098,6564,-32103,6540,-32108,6515,-32113,6491,-32118,6466,-32123,6441,-32128,6417,-32133,6392,-32138,6367,-32143,6343,-32148,6318,-32153,6293,-32157,6269,-32162,6244,-32167,6219,-32172,6195,-32177,6170,-32181,6145,-32186,6121,-32191,6096,-32195,6071,-32200,6047,-32205,6022,-32209,5997,-32214,5972,-32219,5948,-32223,5923,-32228,5898,-32232,5874,-32237,5849,-32241,5824,-32246,5799,-32250,5775,-32255,5750,-32259,5725,-32263,5700,-32268,5676,-32272,5651,-32276,5626,-32281,5601,-32285,5577,-32289,5552,-32294,5527,-32298,5502,-32302,5478,-32306,5453,-32311,5428,-32315,5403,-32319,5378,-32323,5354,-32327,5329,-32331,5304,-32335,5279,-32339,5254,-32343,5230,-32347,5205,-32351,5180,-32355,5155,-32359,5130,-32363,5106,-32367,5081,-32371,5056,-32375,5031,-32379,5006,-32383,4981,-32387,4957,-32390,4932,-32394,4907,-32398,4882,-32402,4857,-32405,4832,-32409,4807,-32413,4783,-32417,4758,-32420,4733,-32424,4708,-32427,4683,-32431,4658,-32435,4633,-32438,4608,-32442,4584,-32445,4559,-32449,4534,-32452,4509,-32456,4484,-32459,4459,-32463,4434,-32466,4409,-32469,4384,-32473,4359,-32476,4335,-32479,4310,-32483,4285,-32486,4260,-32489,4235,-32493,4210,-32496,4185,-32499,4160,-32502,4135,-32505,4110,-32509,4085,-32512,4060,-32515,4035,-32518,4011,-32521,3986,-32524,3961,-32527,3936,-32530,3911,-32533,3886,-32536,3861,-32539,3836,-32542,3811,-32545,3786,-32548,3761,-32551,3736,-32554,3711,-32557,3686,-32559,3661,-32562,3636,-32565,3611,-32568,3586,-32571,3561,-32573,3536,-32576,3511,-32579,3486,-32581,3461,-32584,3436,-32587,3411,-32589,3386,-32592,3361,-32595,3336,-32597,3311,-32600,3286,-32602,3261,-32605,3236,-32607,3211,-32610,3186,-32612,3161,-32615,3136,-32617,3111,-32619,3086,-32622,3061,-32624,3036,-32626,3011,-32629,2986,-32631,2961,-32633,2936,-32636,2911,-32638,2886,-32640,2861,-32642,2836,-32645,2811,-32647,2786,-32649,2761,-32651,2736,-32653,2711,-32655,2686,-32657,2661,-32659,2636,-32661,2610,-32663,2585,-32665,2560,-32667,2535,-32669,2510,-32671,2485,-32673,2460,-32675,2435,-32677,2410,-32679,2385,-32681,2360,-32682,2335,-32684,2310,-32686,2285,-32688,2260,-32689,2235,-32691,2209,-32693,2184,-32695,2159,-32696,2134,-32698,2109,-32700,2084,-32701,2059,-32703,2034,-32704,2009,-32706,1984,-32707,1959,-32709,1934,-32710,1908,-32712,1883,-32713,1858,-32715,1833,-32716,1808,-32718,1783,-32719,1758,-32720,1733,-32722,1708,-32723,1683,-32724,1658,-32726,1632,-32727,1607,-32728,1582,-32729,1557,-32730,1532,-32732,1507,-32733,1482,-32734,1457,-32735,1432,-32736,1406,-32737,1381,-32738,1356,-32739,1331,-32740,1306,-32741,1281,-32742,1256,-32743,1231,-32744,1206,-32745,1180,-32746,1155,-32747,1130,-32748,1105,-32749,1080,-32750,1055,-32751,1030,-32751,1005,-32752,980,-32753,954,-32754,929,-32754,904,-32755,879,-32756,854,-32756,829,-32757,804,-32758,779,-32758,753,-32759,728,-32759,703,-32760,678,-32760,653,-32761,628,-32761,603,-32762,578,-32762,552,-32763,527,-32763,502,-32764,477,-32764,452,-32764,427,-32765,402,-32765,376,-32765,351,-32766,326,-32766,301,-32766,276,-32766,251,-32767,226,-32767,201,-32767,175,-32767,150,-32767,125,-32767,100,-32767,75,-32767,50,-32767,25,-32767,0,-32767,-26,-32767,-51,-32767,-76,-32767,-101,-32767,-126,-32767,-151,-32767,-176,-32767,-202,-32767,-227,-32767,-252,-32767,-277,-32766,-302,-32766,-327,-32766,-352,-32766,-377,-32765,-403,-32765,-428,-32765,-453,-32764,-478,-32764,-503,-32764,-528,-32763,-553,-32763,-579,-32762,-604,-32762,-629,-32761,-654,-32761,-679,-32760,-704,-32760,-729,-32759,-754,-32759,-780,-32758,-805,-32758,-830,-32757,-855,-32756,-880,-32756,-905,-32755,-930,-32754,-955,-32754,-981,-32753,-1006,-32752,-1031,-32751,-1056,-32751,-1081,-32750,-1106,-32749,-1131,-32748,-1156,-32747,-1181,-32746,-1207,-32745,-1232,-32744,-1257,-32743,-1282,-32742,-1307,-32741,-1332,-32740,-1357,-32739,-1382,-32738,-1407,-32737,-1433,-32736,-1458,-32735,-1483,-32734,-1508,-32733,-1533,-32732,-1558,-32730,-1583,-32729,-1608,-32728,-1633,-32727,-1659,-32726,-1684,-32724,-1709,-32723,-1734,-32722,-1759,-32720,-1784,-32719,-1809,-32718,-1834,-32716,-1859,-32715,-1884,-32713,-1909,-32712,-1935,-32710,-1960,-32709,-1985,-32707,-2010,-32706,-2035,-32704,-2060,-32703,-2085,-32701,-2110,-32700,-2135,-32698,-2160,-32696,-2185,-32695,-2210,-32693,-2236,-32691,-2261,-32689,-2286,-32688,-2311,-32686,-2336,-32684,-2361,-32682,-2386,-32681,-2411,-32679,-2436,-32677,-2461,-32675,-2486,-32673,-2511,-32671,-2536,-32669,-2561,-32667,-2586,-32665,-2611,-32663,-2637,-32661,-2662,-32659,-2687,-32657,-2712,-32655,-2737,-32653,-2762,-32651,-2787,-32649,-2812,-32647,-2837,-32645,-2862,-32642,-2887,-32640,-2912,-32638,-2937,-32636,-2962,-32633,-2987,-32631,-3012,-32629,-3037,-32626,-3062,-32624,-3087,-32622,-3112,-32619,-3137,-32617,-3162,-32615,-3187,-32612,-3212,-32610,-3237,-32607,-3262,-32605,-3287,-32602,-3312,-32600,-3337,-32597,-3362,-32595,-3387,-32592,-3412,-32589,-3437,-32587,-3462,-32584,-3487,-32581,-3512,-32579,-3537,-32576,-3562,-32573,-3587,-32571,-3612,-32568,-3637,-32565,-3662,-32562,-3687,-32559,-3712,-32557,-3737,-32554,-3762,-32551,-3787,-32548,-3812,-32545,-3837,-32542,-3862,-32539,-3887,-32536,-3912,-32533,-3937,-32530,-3962,-32527,-3987,-32524,-4012,-32521,-4036,-32518,-4061,-32515,-4086,-32512,-4111,-32509,-4136,-32505,-4161,-32502,-4186,-32499,-4211,-32496,-4236,-32493,-4261,-32489,-4286,-32486,-4311,-32483,-4336,-32479,-4360,-32476,-4385,-32473,-4410,-32469,-4435,-32466,-4460,-32463,-4485,-32459,-4510,-32456,-4535,-32452,-4560,-32449,-4585,-32445,-4609,-32442,-4634,-32438,-4659,-32435,-4684,-32431,-4709,-32427,-4734,-32424,-4759,-32420,-4784,-32417,-4808,-32413,-4833,-32409,-4858,-32405,-4883,-32402,-4908,-32398,-4933,-32394,-4958,-32390,-4982,-32387,-5007,-32383,-5032,-32379,-5057,-32375,-5082,-32371,-5107,-32367,-5131,-32363,-5156,-32359,-5181,-32355,-5206,-32351,-5231,-32347,-5255,-32343,-5280,-32339,-5305,-32335,-5330,-32331,-5355,-32327,-5379,-32323,-5404,-32319,-5429,-32315,-5454,-32311,-5479,-32306,-5503,-32302,-5528,-32298,-5553,-32294,-5578,-32289,-5602,-32285,-5627,-32281,-5652,-32276,-5677,-32272,-5701,-32268,-5726,-32263,-5751,-32259,-5776,-32255,-5800,-32250,-5825,-32246,-5850,-32241,-5875,-32237,-5899,-32232,-5924,-32228,-5949,-32223,-5973,-32219,-5998,-32214,-6023,-32209,-6048,-32205,-6072,-32200,-6097,-32195,-6122,-32191,-6146,-32186,-6171,-32181,-6196,-32177,-6220,-32172,-6245,-32167,-6270,-32162,-6294,-32157,-6319,-32153,-6344,-32148,-6368,-32143,-6393,-32138,-6418,-32133,-6442,-32128,-6467,-32123,-6492,-32118,-6516,-32113,-6541,-32108,-6565,-32103,-6590,-32098,-6615,-32093,-6639,-32088,-6664,-32083,-6689,-32078,-6713,-32073,-6738,-32067,-6762,-32062,-6787,-32057,-6812,-32052,-6836,-32047,-6861,-32041,-6885,-32036,-6910,-32031,-6934,-32025,-6959,-32020,-6983,-32015,-7008,-32009,-7033,-32004,-7057,-31999,-7082,-31993,-7106,-31988,-7131,-31982,-7155,-31977,-7180,-31971,-7204,-31966,-7229,-31960,-7253,-31955,-7278,-31949,-7302,-31944,-7327,-31938,-7351,-31932,-7376,-31927,-7400,-31921,-7425,-31915,-7449,-31910,-7474,-31904,-7498,-31898,-7523,-31892,-7547,-31887,-7572,-31881,-7596,-31875,-7620,-31869,-7645,-31863,-7669,-31857,-7694,-31852,-7718,-31846,-7743,-31840,-7767,-31834,-7791,-31828,-7816,-31822,-7840,-31816,-7865,-31810,-7889,-31804,-7913,-31798,-7938,-31792,-7962,-31786,-7987,-31779,-8011,-31773,-8035,-31767,-8060,-31761,-8084,-31755,-8108,-31749,-8133,-31742,-8157,-31736,-8181,-31730,-8206,-31724,-8230,-31717,-8254,-31711,-8279,-31705,-8303,-31698,-8327,-31692,-8352,-31685,-8376,-31679,-8400,-31673,-8425,-31666,-8449,-31660,-8473,-31653,-8497,-31647,-8522,-31640,-8546,-31634,-8570,-31627,-8594,-31620,-8619,-31614,-8643,-31607,-8667,-31601,-8691,-31594,-8716,-31587,-8740,-31581,-8764,-31574,-8788,-31567,-8813,-31560,-8837,-31554,-8861,-31547,-8885,-31540,-8909,-31533,-8933,-31526,-8958,-31519,-8982,-31513,-9006,-31506,-9030,-31499,-9054,-31492,-9078,-31485,-9103,-31478,-9127,-31471,-9151,-31464,-9175,-31457,-9199,-31450,-9223,-31443,-9247,-31436,-9271,-31429,-9296,-31421,-9320,-31414,-9344,-31407,-9368,-31400,-9392,-31393,-9416,-31386,-9440,-31378,-9464,-31371,-9488,-31364,-9512,-31357,-9536,-31349,-9560,-31342,-9584,-31335,-9608,-31327,-9632,-31320,-9656,-31312,-9680,-31305,-9704,-31298,-9728,-31290,-9752,-31283,-9776,-31275,-9800,-31268,-9824,-31260,-9848,-31253,-9872,-31245,-9896,-31237,-9920,-31230,-9944,-31222,-9968,-31215,-9992,-31207,-10016,-31199,-10040,-31192,-10064,-31184,-10088,-31176,-10112,-31168,-10136,-31161,-10160,-31153,-10183,-31145,-10207,-31137,-10231,-31129,-10255,-31122,-10279,-31114,-10303,-31106,-10327,-31098,-10350,-31090,-10374,-31082,-10398,-31074,-10422,-31066,-10446,-31058,-10470,-31050,-10493,-31042,-10517,-31034,-10541,-31026,-10565,-31018,-10589,-31010,-10612,-31002,-10636,-30993,-10660,-30985,-10684,-30977,-10707,-30969,-10731,-30961,-10755,-30952,-10779,-30944,-10802,-30936,-10826,-30928,-10850,-30919,-10874,-30911,-10897,-30903,-10921,-30894,-10945,-30886,-10968,-30877,-10992,-30869,-11016,-30861,-11039,-30852,-11063,-30844,-11087,-30835,-11110,-30827,-11134,-30818,-11158,-30810,-11181,-30801,-11205,-30792,-11228,-30784,-11252,-30775,-11276,-30767,-11299,-30758,-11323,-30749,-11346,-30740,-11370,-30732,-11394,-30723,-11417,-30714,-11441,-30706,-11464,-30697,-11488,-30688,-11511,-30679,-11535,-30670,-11558,-30661,-11582,-30653,-11605,-30644,-11629,-30635,-11652,-30626,-11676,-30617,-11699,-30608,-11723,-30599,-11746,-30590,-11770,-30581,-11793,-30572,-11817,-30563,-11840,-30554,-11863,-30545,-11887,-30536,-11910,-30526,-11934,-30517,-11957,-30508,-11981,-30499,-12004,-30490,-12027,-30481,-12051,-30471,-12074,-30462,-12097,-30453,-12121,-30443,-12144,-30434,-12167,-30425,-12191,-30416,-12214,-30406,-12237,-30397,-12261,-30387,-12284,-30378,-12307,-30369,-12331,-30359,-12354,-30350,-12377,-30340,-12400,-30331,-12424,-30321,-12447,-30312,-12470,-30302,-12493,-30292,-12517,-30283,-12540,-30273,-12563,-30264,-12586,-30254,-12610,-30244,-12633,-30235,-12656,-30225,-12679,-30215,-12702,-30206,-12725,-30196,-12749,-30186,-12772,-30176,-12795,-30166,-12818,-30157,-12841,-30147,-12864,-30137,-12887,-30127,-12910,-30117,-12934,-30107,-12957,-30097,-12980,-30087,-13003,-30077,-13026,-30067,-13049,-30057,-13072,-30047,-13095,-30037,-13118,-30027,-13141,-30017,-13164,-30007,-13187,-29997,-13210,-29987,-13233,-29977,-13256,-29967,-13279,-29956,-13302,-29946,-13325,-29936,-13348,-29926,-13371,-29916,-13394,-29905,-13417,-29895,-13440,-29885,-13463,-29874,-13486,-29864,-13508,-29854,-13531,-29843,-13554,-29833,-13577,-29823,-13600,-29812,-13623,-29802,-13646,-29791,-13668,-29781,-13691,-29770,-13714,-29760,-13737,-29749,-13760,-29739,-13783,-29728,-13805,-29718,-13828,-29707,-13851,-29696,-13874,-29686,-13896,-29675,-13919,-29664,-13942,-29654,-13965,-29643,-13987,-29632,-14010,-29622,-14033,-29611,-14056,-29600,-14078,-29589,-14101,-29578,-14124,-29568,-14146,-29557,-14169,-29546,-14192,-29535,-14214,-29524,-14237,-29513,-14260,-29502,-14282,-29491,-14305,-29480,-14327,-29469,-14350,-29458,-14373,-29447,-14395,-29436,-14418,-29425,-14440,-29414,-14463,-29403,-14485,-29392,-14508,-29381,-14531,-29370,-14553,-29359,-14576,-29347,-14598,-29336,-14621,-29325,-14643,-29314,-14666,-29303,-14688,-29291,-14710,-29280,-14733,-29269,-14755,-29257,-14778,-29246,-14800,-29235,-14823,-29223,-14845,-29212,-14867,-29201,-14890,-29189,-14912,-29178,-14935,-29166,-14957,-29155,-14979,-29143,-15002,-29132,-15024,-29120,-15046,-29109,-15069,-29097,-15091,-29086,-15113,-29074,-15136,-29063,-15158,-29051,-15180,-29039,-15202,-29028,-15225,-29016,-15247,-29004,-15269,-28993,-15291,-28981,-15314,-28969,-15336,-28957,-15358,-28946,-15380,-28934,-15402,-28922,-15425,-28910,-15447,-28898,-15469,-28887,-15491,-28875,-15513,-28863,-15535,-28851,-15557,-28839,-15580,-28827,-15602,-28815,-15624,-28803,-15646,-28791,-15668,-28779,-15690,-28767,-15712,-28755,-15734,-28743,-15756,-28731,-15778,-28719,-15800,-28707,-15822,-28695,-15844,-28682,-15866,-28670,-15888,-28658,-15910,-28646,-15932,-28634,-15954,-28621,-15976,-28609,-15998,-28597,-16020,-28585,-16042,-28572,-16064,-28560,-16086,-28548,-16108,-28535,-16129,-28523,-16151,-28511,-16173,-28498,-16195,-28486,-16217,-28473,-16239,-28461,-16261,-28448,-16282,-28436,-16304,-28424,-16326,-28411,-16348,-28398,-16369,-28386,-16391,-28373,-16413,-28361,-16435,-28348,-16456,-28336,-16478,-28323,-16500,-28310,-16522,-28298,-16543,-28285,-16565,-28272,-16587,-28260,-16608,-28247,-16630,-28234,-16652,-28221,-16673,-28209,-16695,-28196,-16717,-28183,-16738,-28170,-16760,-28157,-16781,-28144,-16803,-28132,-16825,-28119,-16846,-28106,-16868,-28093,-16889,-28080,-16911,-28067,-16932,-28054,-16954,-28041,-16975,-28028,-16997,-28015,-17018,-28002,-17040,-27989,-17061,-27976,-17083,-27963,-17104,-27949,-17125,-27936,-17147,-27923,-17168,-27910,-17190,-27897,-17211,-27884,-17233,-27870,-17254,-27857,-17275,-27844,-17297,-27831,-17318,-27817,-17339,-27804,-17361,-27791,-17382,-27778,-17403,-27764,-17424,-27751,-17446,-27737,-17467,-27724,-17488,-27711,-17510,-27697,-17531,-27684,-17552,-27670,-17573,-27657,-17594,-27643,-17616,-27630,-17637,-27616,-17658,-27603,-17679,-27589,-17700,-27576,-17721,-27562,-17743,-27549,-17764,-27535,-17785,-27521,-17806,-27508,-17827,-27494,-17848,-27480,-17869,-27467,-17890,-27453,-17911,-27439,-17932,-27425,-17953,-27412,-17974,-27398,-17995,-27384,-18016,-27370,-18037,-27356,-18058,-27343,-18079,-27329,-18100,-27315,-18121,-27301,-18142,-27287,-18163,-27273,-18184,-27259,-18205,-27245,-18226,-27231,-18247,-27217,-18268,-27203,-18288,-27189,-18309,-27175,-18330,-27161,-18351,-27147,-18372,-27133,-18393,-27119,-18413,-27105,-18434,-27091,-18455,-27077,-18476,-27062,-18496,-27048,-18517,-27034,-18538,-27020,-18559,-27006,-18579,-26991,-18600,-26977,-18621,-26963,-18641,-26949,-18662,-26934,-18683,-26920,-18703,-26906,-18724,-26891,-18745,-26877,-18765,-26862,-18786,-26848,-18806,-26834,-18827,-26819,-18847,-26805,-18868,-26790,-18889,-26776,-18909,-26761,-18930,-26747,-18950,-26732,-18971,-26718,-18991,-26703,-19012,-26689,-19032,-26674,-19052,-26659,-19073,-26645,-19093,-26630,-19114,-26616,-19134,-26601,-19155,-26586,-19175,-26571,-19195,-26557,-19216,-26542,-19236,-26527,-19256,-26513,-19277,-26498,-19297,-26483,-19317,-26468,-19338,-26453,-19358,-26438,-19378,-26424,-19398,-26409,-19419,-26394,-19439,-26379,-19459,-26364,-19479,-26349,-19500,-26334,-19520,-26319,-19540,-26304,-19560,-26289,-19580,-26274,-19600,-26259,-19621,-26244,-19641,-26229,-19661,-26214,-19681,-26199,-19701,-26184,-19721,-26169,-19741,-26154,-19761,-26138,-19781,-26123,-19801,-26108,-19821,-26093,-19841,-26078,-19861,-26062,-19881,-26047,-19901,-26032,-19921,-26017,-19941,-26001,-19961,-25986,-19981,-25971,-20001,-25955,-20021,-25940,-20041,-25925,-20061,-25909,-20080,-25894,-20100,-25879,-20120,-25863,-20140,-25848,-20160,-25832,-20180,-25817,-20199,-25801,-20219,-25786,-20239,-25770,-20259,-25755,-20278,-25739,-20298,-25724,-20318,-25708,-20338,-25692,-20357,-25677,-20377,-25661,-20397,-25646,-20416,-25630,-20436,-25614,-20456,-25599,-20475,-25583,-20495,-25567,-20514,-25551,-20534,-25536,-20554,-25520,-20573,-25504,-20593,-25488,-20612,-25473,-20632,-25457,-20651,-25441,-20671,-25425,-20690,-25409,-20710,-25393,-20729,-25377,-20749,-25362,-20768,-25346,-20788,-25330,-20807,-25314,-20826,-25298,-20846,-25282,-20865,-25266,-20885,-25250,-20904,-25234,-20923,-25218,-20943,-25202,-20962,-25186,-20981,-25170,-21001,-25153,-21020,-25137,-21039,-25121,-21058,-25105,-21078,-25089,-21097,-25073,-21116,-25057,-21135,-25040,-21155,-25024,-21174,-25008,-21193,-24992,-21212,-24975,-21231,-24959,-21250,-24943,-21269,-24927,-21289,-24910,-21308,-24894,-21327,-24878,-21346,-24861,-21365,-24845,-21384,-24828,-21403,-24812,-21422,-24796,-21441,-24779,-21460,-24763,-21479,-24746,-21498,-24730,-21517,-24713,-21536,-24697,-21555,-24680,-21574,-24664,-21593,-24647,-21612,-24631,-21630,-24614,-21649,-24597,-21668,-24581,-21687,-24564,-21706,-24547,-21725,-24531,-21744,-24514,-21762,-24497,-21781,-24481,-21800,-24464,-21819,-24447,-21837,-24431,-21856,-24414,-21875,-24397,-21894,-24380,-21912,-24363,-21931,-24347,-21950,-24330,-21968,-24313,-21987,-24296,-22005,-24279,-22024,-24262,-22043,-24245,-22061,-24229,-22080,-24212,-22098,-24195,-22117,-24178,-22136,-24161,-22154,-24144,-22173,-24127,-22191,-24110,-22210,-24093,-22228,-24076,-22246,-24059,-22265,-24042,-22283,-24024,-22302,-24007,-22320,-23990,-22339,-23973,-22357,-23956,-22375,-23939,-22394,-23922,-22412,-23904,-22430,-23887,-22449,-23870,-22467,-23853,-22485,-23836,-22504,-23818,-22522,-23801,-22540,-23784,-22558,-23767,-22576,-23749,-22595,-23732,-22613,-23715,-22631,-23697,-22649,-23680,-22667,-23662,-22686,-23645,-22704,-23628,-22722,-23610,-22740,-23593,-22758,-23575,-22776,-23558,-22794,-23540,-22812,-23523,-22830,-23505,-22848,-23488,-22866,-23470,-22884,-23453,-22902,-23435,-22920,-23418,-22938,-23400,-22956,-23383,-22974,-23365,-22992,-23347,-23010,-23330,-23028,-23312,-23046,-23294,-23063,-23277,-23081,-23259,-23099,-23241,-23117,-23224,-23135,-23206,-23152,-23188,-23170,-23170,-23188,-23152,-23206,-23135,-23224,-23117,-23241,-23099,-23259,-23081,-23277,-23063,-23294,-23046,-23312,-23028,-23330,-23010,-23347,-22992,-23365,-22974,-23383,-22956,-23400,-22938,-23418,-22920,-23435,-22902,-23453,-22884,-23470,-22866,-23488,-22848,-23505,-22830,-23523,-22812,-23540,-22794,-23558,-22776,-23575,-22758,-23593,-22740,-23610,-22722,-23628,-22704,-23645,-22686,-23662,-22667,-23680,-22649,-23697,-22631,-23715,-22613,-23732,-22595,-23749,-22576,-23767,-22558,-23784,-22540,-23801,-22522,-23818,-22504,-23836,-22485,-23853,-22467,-23870,-22449,-23887,-22430,-23904,-22412,-23922,-22394,-23939,-22375,-23956,-22357,-23973,-22339,-23990,-22320,-24007,-22302,-24024,-22283,-24042,-22265,-24059,-22246,-24076,-22228,-24093,-22210,-24110,-22191,-24127,-22173,-24144,-22154,-24161,-22136,-24178,-22117,-24195,-22098,-24212,-22080,-24229,-22061,-24245,-22043,-24262,-22024,-24279,-22005,-24296,-21987,-24313,-21968,-24330,-21950,-24347,-21931,-24363,-21912,-24380,-21894,-24397,-21875,-24414,-21856,-24431,-21837,-24447,-21819,-24464,-21800,-24481,-21781,-24497,-21762,-24514,-21744,-24531,-21725,-24547,-21706,-24564,-21687,-24581,-21668,-24597,-21649,-24614,-21630,-24631,-21612,-24647,-21593,-24664,-21574,-24680,-21555,-24697,-21536,-24713,-21517,-24730,-21498,-24746,-21479,-24763,-21460,-24779,-21441,-24796,-21422,-24812,-21403,-24828,-21384,-24845,-21365,-24861,-21346,-24878,-21327,-24894,-21308,-24910,-21289,-24927,-21269,-24943,-21250,-24959,-21231,-24975,-21212,-24992,-21193,-25008,-21174,-25024,-21155,-25040,-21135,-25057,-21116,-25073,-21097,-25089,-21078,-25105,-21058,-25121,-21039,-25137,-21020,-25153,-21001,-25170,-20981,-25186,-20962,-25202,-20943,-25218,-20923,-25234,-20904,-25250,-20885,-25266,-20865,-25282,-20846,-25298,-20826,-25314,-20807,-25330,-20788,-25346,-20768,-25362,-20749,-25377,-20729,-25393,-20710,-25409,-20690,-25425,-20671,-25441,-20651,-25457,-20632,-25473,-20612,-25488,-20593,-25504,-20573,-25520,-20554,-25536,-20534,-25551,-20514,-25567,-20495,-25583,-20475,-25599,-20456,-25614,-20436,-25630,-20416,-25646,-20397,-25661,-20377,-25677,-20357,-25692,-20338,-25708,-20318,-25724,-20298,-25739,-20278,-25755,-20259,-25770,-20239,-25786,-20219,-25801,-20199,-25817,-20180,-25832,-20160,-25848,-20140,-25863,-20120,-25879,-20100,-25894,-20080,-25909,-20061,-25925,-20041,-25940,-20021,-25955,-20001,-25971,-19981,-25986,-19961,-26001,-19941,-26017,-19921,-26032,-19901,-26047,-19881,-26062,-19861,-26078,-19841,-26093,-19821,-26108,-19801,-26123,-19781,-26138,-19761,-26154,-19741,-26169,-19721,-26184,-19701,-26199,-19681,-26214,-19661,-26229,-19641,-26244,-19621,-26259,-19600,-26274,-19580,-26289,-19560,-26304,-19540,-26319,-19520,-26334,-19500,-26349,-19479,-26364,-19459,-26379,-19439,-26394,-19419,-26409,-19398,-26424,-19378,-26438,-19358,-26453,-19338,-26468,-19317,-26483,-19297,-26498,-19277,-26513,-19256,-26527,-19236,-26542,-19216,-26557,-19195,-26571,-19175,-26586,-19155,-26601,-19134,-26616,-19114,-26630,-19093,-26645,-19073,-26659,-19052,-26674,-19032,-26689,-19012,-26703,-18991,-26718,-18971,-26732,-18950,-26747,-18930,-26761,-18909,-26776,-18889,-26790,-18868,-26805,-18847,-26819,-18827,-26834,-18806,-26848,-18786,-26862,-18765,-26877,-18745,-26891,-18724,-26906,-18703,-26920,-18683,-26934,-18662,-26949,-18641,-26963,-18621,-26977,-18600,-26991,-18579,-27006,-18559,-27020,-18538,-27034,-18517,-27048,-18496,-27062,-18476,-27077,-18455,-27091,-18434,-27105,-18413,-27119,-18393,-27133,-18372,-27147,-18351,-27161,-18330,-27175,-18309,-27189,-18288,-27203,-18268,-27217,-18247,-27231,-18226,-27245,-18205,-27259,-18184,-27273,-18163,-27287,-18142,-27301,-18121,-27315,-18100,-27329,-18079,-27343,-18058,-27356,-18037,-27370,-18016,-27384,-17995,-27398,-17974,-27412,-17953,-27425,-17932,-27439,-17911,-27453,-17890,-27467,-17869,-27480,-17848,-27494,-17827,-27508,-17806,-27521,-17785,-27535,-17764,-27549,-17743,-27562,-17721,-27576,-17700,-27589,-17679,-27603,-17658,-27616,-17637,-27630,-17616,-27643,-17594,-27657,-17573,-27670,-17552,-27684,-17531,-27697,-17510,-27711,-17488,-27724,-17467,-27737,-17446,-27751,-17424,-27764,-17403,-27778,-17382,-27791,-17361,-27804,-17339,-27817,-17318,-27831,-17297,-27844,-17275,-27857,-17254,-27870,-17233,-27884,-17211,-27897,-17190,-27910,-17168,-27923,-17147,-27936,-17125,-27949,-17104,-27963,-17083,-27976,-17061,-27989,-17040,-28002,-17018,-28015,-16997,-28028,-16975,-28041,-16954,-28054,-16932,-28067,-16911,-28080,-16889,-28093,-16868,-28106,-16846,-28119,-16825,-28132,-16803,-28144,-16781,-28157,-16760,-28170,-16738,-28183,-16717,-28196,-16695,-28209,-16673,-28221,-16652,-28234,-16630,-28247,-16608,-28260,-16587,-28272,-16565,-28285,-16543,-28298,-16522,-28310,-16500,-28323,-16478,-28336,-16456,-28348,-16435,-28361,-16413,-28373,-16391,-28386,-16369,-28398,-16348,-28411,-16326,-28424,-16304,-28436,-16282,-28448,-16261,-28461,-16239,-28473,-16217,-28486,-16195,-28498,-16173,-28511,-16151,-28523,-16129,-28535,-16108,-28548,-16086,-28560,-16064,-28572,-16042,-28585,-16020,-28597,-15998,-28609,-15976,-28621,-15954,-28634,-15932,-28646,-15910,-28658,-15888,-28670,-15866,-28682,-15844,-28695,-15822,-28707,-15800,-28719,-15778,-28731,-15756,-28743,-15734,-28755,-15712,-28767,-15690,-28779,-15668,-28791,-15646,-28803,-15624,-28815,-15602,-28827,-15580,-28839,-15557,-28851,-15535,-28863,-15513,-28875,-15491,-28887,-15469,-28898,-15447,-28910,-15425,-28922,-15402,-28934,-15380,-28946,-15358,-28957,-15336,-28969,-15314,-28981,-15291,-28993,-15269,-29004,-15247,-29016,-15225,-29028,-15202,-29039,-15180,-29051,-15158,-29063,-15136,-29074,-15113,-29086,-15091,-29097,-15069,-29109,-15046,-29120,-15024,-29132,-15002,-29143,-14979,-29155,-14957,-29166,-14935,-29178,-14912,-29189,-14890,-29201,-14867,-29212,-14845,-29223,-14823,-29235,-14800,-29246,-14778,-29257,-14755,-29269,-14733,-29280,-14710,-29291,-14688,-29303,-14666,-29314,-14643,-29325,-14621,-29336,-14598,-29347,-14576,-29359,-14553,-29370,-14531,-29381,-14508,-29392,-14485,-29403,-14463,-29414,-14440,-29425,-14418,-29436,-14395,-29447,-14373,-29458,-14350,-29469,-14327,-29480,-14305,-29491,-14282,-29502,-14260,-29513,-14237,-29524,-14214,-29535,-14192,-29546,-14169,-29557,-14146,-29568,-14124,-29578,-14101,-29589,-14078,-29600,-14056,-29611,-14033,-29622,-14010,-29632,-13987,-29643,-13965,-29654,-13942,-29664,-13919,-29675,-13896,-29686,-13874,-29696,-13851,-29707,-13828,-29718,-13805,-29728,-13783,-29739,-13760,-29749,-13737,-29760,-13714,-29770,-13691,-29781,-13668,-29791,-13646,-29802,-13623,-29812,-13600,-29823,-13577,-29833,-13554,-29843,-13531,-29854,-13508,-29864,-13486,-29874,-13463,-29885,-13440,-29895,-13417,-29905,-13394,-29916,-13371,-29926,-13348,-29936,-13325,-29946,-13302,-29956,-13279,-29967,-13256,-29977,-13233,-29987,-13210,-29997,-13187,-30007,-13164,-30017,-13141,-30027,-13118,-30037,-13095,-30047,-13072,-30057,-13049,-30067,-13026,-30077,-13003,-30087,-12980,-30097,-12957,-30107,-12934,-30117,-12910,-30127,-12887,-30137,-12864,-30147,-12841,-30157,-12818,-30166,-12795,-30176,-12772,-30186,-12749,-30196,-12725,-30206,-12702,-30215,-12679,-30225,-12656,-30235,-12633,-30244,-12610,-30254,-12586,-30264,-12563,-30273,-12540,-30283,-12517,-30292,-12493,-30302,-12470,-30312,-12447,-30321,-12424,-30331,-12400,-30340,-12377,-30350,-12354,-30359,-12331,-30369,-12307,-30378,-12284,-30387,-12261,-30397,-12237,-30406,-12214,-30416,-12191,-30425,-12167,-30434,-12144,-30443,-12121,-30453,-12097,-30462,-12074,-30471,-12051,-30481,-12027,-30490,-12004,-30499,-11981,-30508,-11957,-30517,-11934,-30526,-11910,-30536,-11887,-30545,-11863,-30554,-11840,-30563,-11817,-30572,-11793,-30581,-11770,-30590,-11746,-30599,-11723,-30608,-11699,-30617,-11676,-30626,-11652,-30635,-11629,-30644,-11605,-30653,-11582,-30661,-11558,-30670,-11535,-30679,-11511,-30688,-11488,-30697,-11464,-30706,-11441,-30714,-11417,-30723,-11394,-30732,-11370,-30740,-11346,-30749,-11323,-30758,-11299,-30767,-11276,-30775,-11252,-30784,-11228,-30792,-11205,-30801,-11181,-30810,-11158,-30818,-11134,-30827,-11110,-30835,-11087,-30844,-11063,-30852,-11039,-30861,-11016,-30869,-10992,-30877,-10968,-30886,-10945,-30894,-10921,-30903,-10897,-30911,-10874,-30919,-10850,-30928,-10826,-30936,-10802,-30944,-10779,-30952,-10755,-30961,-10731,-30969,-10707,-30977,-10684,-30985,-10660,-30993,-10636,-31002,-10612,-31010,-10589,-31018,-10565,-31026,-10541,-31034,-10517,-31042,-10493,-31050,-10470,-31058,-10446,-31066,-10422,-31074,-10398,-31082,-10374,-31090,-10350,-31098,-10327,-31106,-10303,-31114,-10279,-31122,-10255,-31129,-10231,-31137,-10207,-31145,-10183,-31153,-10160,-31161,-10136,-31168,-10112,-31176,-10088,-31184,-10064,-31192,-10040,-31199,-10016,-31207,-9992,-31215,-9968,-31222,-9944,-31230,-9920,-31237,-9896,-31245,-9872,-31253,-9848,-31260,-9824,-31268,-9800,-31275,-9776,-31283,-9752,-31290,-9728,-31298,-9704,-31305,-9680,-31312,-9656,-31320,-9632,-31327,-9608,-31335,-9584,-31342,-9560,-31349,-9536,-31357,-9512,-31364,-9488,-31371,-9464,-31378,-9440,-31386,-9416,-31393,-9392,-31400,-9368,-31407,-9344,-31414,-9320,-31421,-9296,-31429,-9271,-31436,-9247,-31443,-9223,-31450,-9199,-31457,-9175,-31464,-9151,-31471,-9127,-31478,-9103,-31485,-9078,-31492,-9054,-31499,-9030,-31506,-9006,-31513,-8982,-31519,-8958,-31526,-8933,-31533,-8909,-31540,-8885,-31547,-8861,-31554,-8837,-31560,-8813,-31567,-8788,-31574,-8764,-31581,-8740,-31587,-8716,-31594,-8691,-31601,-8667,-31607,-8643,-31614,-8619,-31620,-8594,-31627,-8570,-31634,-8546,-31640,-8522,-31647,-8497,-31653,-8473,-31660,-8449,-31666,-8425,-31673,-8400,-31679,-8376,-31685,-8352,-31692,-8327,-31698,-8303,-31705,-8279,-31711,-8254,-31717,-8230,-31724,-8206,-31730,-8181,-31736,-8157,-31742,-8133,-31749,-8108,-31755,-8084,-31761,-8060,-31767,-8035,-31773,-8011,-31779,-7987,-31786,-7962,-31792,-7938,-31798,-7913,-31804,-7889,-31810,-7865,-31816,-7840,-31822,-7816,-31828,-7791,-31834,-7767,-31840,-7743,-31846,-7718,-31852,-7694,-31857,-7669,-31863,-7645,-31869,-7620,-31875,-7596,-31881,-7572,-31887,-7547,-31892,-7523,-31898,-7498,-31904,-7474,-31910,-7449,-31915,-7425,-31921,-7400,-31927,-7376,-31932,-7351,-31938,-7327,-31944,-7302,-31949,-7278,-31955,-7253,-31960,-7229,-31966,-7204,-31971,-7180,-31977,-7155,-31982,-7131,-31988,-7106,-31993,-7082,-31999,-7057,-32004,-7033,-32009,-7008,-32015,-6983,-32020,-6959,-32025,-6934,-32031,-6910,-32036,-6885,-32041,-6861,-32047,-6836,-32052,-6812,-32057,-6787,-32062,-6762,-32067,-6738,-32073,-6713,-32078,-6689,-32083,-6664,-32088,-6639,-32093,-6615,-32098,-6590,-32103,-6565,-32108,-6541,-32113,-6516,-32118,-6492,-32123,-6467,-32128,-6442,-32133,-6418,-32138,-6393,-32143,-6368,-32148,-6344,-32153,-6319,-32157,-6294,-32162,-6270,-32167,-6245,-32172,-6220,-32177,-6196,-32181,-6171,-32186,-6146,-32191,-6122,-32195,-6097,-32200,-6072,-32205,-6048,-32209,-6023,-32214,-5998,-32219,-5973,-32223,-5949,-32228,-5924,-32232,-5899,-32237,-5875,-32241,-5850,-32246,-5825,-32250,-5800,-32255,-5776,-32259,-5751,-32263,-5726,-32268,-5701,-32272,-5677,-32276,-5652,-32281,-5627,-32285,-5602,-32289,-5578,-32294,-5553,-32298,-5528,-32302,-5503,-32306,-5479,-32311,-5454,-32315,-5429,-32319,-5404,-32323,-5379,-32327,-5355,-32331,-5330,-32335,-5305,-32339,-5280,-32343,-5255,-32347,-5231,-32351,-5206,-32355,-5181,-32359,-5156,-32363,-5131,-32367,-5107,-32371,-5082,-32375,-5057,-32379,-5032,-32383,-5007,-32387,-4982,-32390,-4958,-32394,-4933,-32398,-4908,-32402,-4883,-32405,-4858,-32409,-4833,-32413,-4808,-32417,-4784,-32420,-4759,-32424,-4734,-32427,-4709,-32431,-4684,-32435,-4659,-32438,-4634,-32442,-4609,-32445,-4585,-32449,-4560,-32452,-4535,-32456,-4510,-32459,-4485,-32463,-4460,-32466,-4435,-32469,-4410,-32473,-4385,-32476,-4360,-32479,-4336,-32483,-4311,-32486,-4286,-32489,-4261,-32493,-4236,-32496,-4211,-32499,-4186,-32502,-4161,-32505,-4136,-32509,-4111,-32512,-4086,-32515,-4061,-32518,-4036,-32521,-4012,-32524,-3987,-32527,-3962,-32530,-3937,-32533,-3912,-32536,-3887,-32539,-3862,-32542,-3837,-32545,-3812,-32548,-3787,-32551,-3762,-32554,-3737,-32557,-3712,-32559,-3687,-32562,-3662,-32565,-3637,-32568,-3612,-32571,-3587,-32573,-3562,-32576,-3537,-32579,-3512,-32581,-3487,-32584,-3462,-32587,-3437,-32589,-3412,-32592,-3387,-32595,-3362,-32597,-3337,-32600,-3312,-32602,-3287,-32605,-3262,-32607,-3237,-32610,-3212,-32612,-3187,-32615,-3162,-32617,-3137,-32619,-3112,-32622,-3087,-32624,-3062,-32626,-3037,-32629,-3012,-32631,-2987,-32633,-2962,-32636,-2937,-32638,-2912,-32640,-2887,-32642,-2862,-32645,-2837,-32647,-2812,-32649,-2787,-32651,-2762,-32653,-2737,-32655,-2712,-32657,-2687,-32659,-2662,-32661,-2637,-32663,-2611,-32665,-2586,-32667,-2561,-32669,-2536,-32671,-2511,-32673,-2486,-32675,-2461,-32677,-2436,-32679,-2411,-32681,-2386,-32682,-2361,-32684,-2336,-32686,-2311,-32688,-2286,-32689,-2261,-32691,-2236,-32693,-2210,-32695,-2185,-32696,-2160,-32698,-2135,-32700,-2110,-32701,-2085,-32703,-2060,-32704,-2035,-32706,-2010,-32707,-1985,-32709,-1960,-32710,-1935,-32712,-1909,-32713,-1884,-32715,-1859,-32716,-1834,-32718,-1809,-32719,-1784,-32720,-1759,-32722,-1734,-32723,-1709,-32724,-1684,-32726,-1659,-32727,-1633,-32728,-1608,-32729,-1583,-32730,-1558,-32732,-1533,-32733,-1508,-32734,-1483,-32735,-1458,-32736,-1433,-32737,-1407,-32738,-1382,-32739,-1357,-32740,-1332,-32741,-1307,-32742,-1282,-32743,-1257,-32744,-1232,-32745,-1207,-32746,-1181,-32747,-1156,-32748,-1131,-32749,-1106,-32750,-1081,-32751,-1056,-32751,-1031,-32752,-1006,-32753,-981,-32754,-955,-32754,-930,-32755,-905,-32756,-880,-32756,-855,-32757,-830,-32758,-805,-32758,-780,-32759,-754,-32759,-729,-32760,-704,-32760,-679,-32761,-654,-32761,-629,-32762,-604,-32762,-579,-32763,-553,-32763,-528,-32764,-503,-32764,-478,-32764,-453,-32765,-428,-32765,-403,-32765,-377,-32766,-352,-32766,-327,-32766,-302,-32766,-277,-32767,-252,-32767,-227,-32767,-202,-32767,-176,-32767,-151,-32767,-126,-32767,-101,-32767,-76,-32767,-51,-32767,-26};
+#else //__AVX2__
+void dft4096(int16_t *x,int16_t *y,int scale)
+{
+ simd256_q15_t xtmp[512],ytmp[512],*tw4096_256p=(simd256_q15_t *)tw4096,*x256=(simd256_q15_t *)x,*y256=(simd256_q15_t *)y,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i,j;
+
+ for (i=0,j=0; i<512; i+=4,j++) {
+ transpose16_ooff_simd256(x256+i,xtmp+j,128);
+ }
+
+
+ dft1024((int16_t*)(xtmp),(int16_t*)(ytmp),1);
+ dft1024((int16_t*)(xtmp+128),(int16_t*)(ytmp+128),1);
+ dft1024((int16_t*)(xtmp+256),(int16_t*)(ytmp+256),1);
+ dft1024((int16_t*)(xtmp+384),(int16_t*)(ytmp+384),1);
+
+ for (i=0; i<128; i++) {
+ bfly4_256(ytmpp,ytmpp+128,ytmpp+256,ytmpp+384,
+ y256p,y256p+128,y256p+256,y256p+384,
+ tw4096_256p,tw4096_256p+128,tw4096_256p+256);
+ tw4096_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+
+ for (i=0; i<32; i++) {
+ y256[0] = shiftright_int16_simd256(y256[0],1);
+ y256[1] = shiftright_int16_simd256(y256[1],1);
+ y256[2] = shiftright_int16_simd256(y256[2],1);
+ y256[3] = shiftright_int16_simd256(y256[3],1);
+ y256[4] = shiftright_int16_simd256(y256[4],1);
+ y256[5] = shiftright_int16_simd256(y256[5],1);
+ y256[6] = shiftright_int16_simd256(y256[6],1);
+ y256[7] = shiftright_int16_simd256(y256[7],1);
+ y256[8] = shiftright_int16_simd256(y256[8],1);
+ y256[9] = shiftright_int16_simd256(y256[9],1);
+ y256[10] = shiftright_int16_simd256(y256[10],1);
+ y256[11] = shiftright_int16_simd256(y256[11],1);
+ y256[12] = shiftright_int16_simd256(y256[12],1);
+ y256[13] = shiftright_int16_simd256(y256[13],1);
+ y256[14] = shiftright_int16_simd256(y256[14],1);
+ y256[15] = shiftright_int16_simd256(y256[15],1);
+
+ y256+=16;
+ }
+
+ }
+
+ _mm_empty();
+ _m_empty();
+
+}
+
+void idft4096(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[512],ytmp[512],*tw4096_256p=(simd256_q15_t *)tw4096,*x256=(simd256_q15_t *)x,*y256=(simd256_q15_t *)y,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i,j;
+
+ for (i=0,j=0; i<512; i+=4,j++) {
+ transpose16_ooff_simd256(x256+i,xtmp+j,128);
+ }
+
+
+ idft1024((int16_t*)(xtmp),(int16_t*)(ytmp),1);
+ idft1024((int16_t*)(xtmp+128),(int16_t*)(ytmp+128),1);
+ idft1024((int16_t*)(xtmp+256),(int16_t*)(ytmp+256),1);
+ idft1024((int16_t*)(xtmp+384),(int16_t*)(ytmp+384),1);
+
+ for (i=0; i<128; i++) {
+ ibfly4_256(ytmpp,ytmpp+128,ytmpp+256,ytmpp+384,
+ y256p,y256p+128,y256p+256,y256p+384,
+ tw4096_256p,tw4096_256p+128,tw4096_256p+256);
+ tw4096_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+
+ for (i=0; i<32; i++) {
+ y256[0] = shiftright_int16_simd256(y256[0],1);
+ y256[1] = shiftright_int16_simd256(y256[1],1);
+ y256[2] = shiftright_int16_simd256(y256[2],1);
+ y256[3] = shiftright_int16_simd256(y256[3],1);
+ y256[4] = shiftright_int16_simd256(y256[4],1);
+ y256[5] = shiftright_int16_simd256(y256[5],1);
+ y256[6] = shiftright_int16_simd256(y256[6],1);
+ y256[7] = shiftright_int16_simd256(y256[7],1);
+ y256[8] = shiftright_int16_simd256(y256[8],1);
+ y256[9] = shiftright_int16_simd256(y256[9],1);
+ y256[10] = shiftright_int16_simd256(y256[10],1);
+ y256[11] = shiftright_int16_simd256(y256[11],1);
+ y256[12] = shiftright_int16_simd256(y256[12],1);
+ y256[13] = shiftright_int16_simd256(y256[13],1);
+ y256[14] = shiftright_int16_simd256(y256[14],1);
+ y256[15] = shiftright_int16_simd256(y256[15],1);
+
+ y256+=16;
+ }
+
+ }
+
+ _mm_empty();
+ _m_empty();
+
+}
+
+#endif //__AVX2__
+
+
+#include "twiddles8192.h"
+
+#ifndef __AVX2__
void dft8192(int16_t *x,int16_t *y,int scale)
{
@@ -3175,13 +5217,197 @@ void idft8192(int16_t *x,int16_t *y,int scale)
}
+#else // __AVX2__
+void dft8192(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[1024],*xtmpp,*x256 = (simd256_q15_t *)x;
+ simd256_q15_t ytmp[1024],*tw8192_256p=(simd256_q15_t *)tw8192,*y256=(simd256_q15_t *)y,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i;
+ simd256_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16_simd256(ONE_OVER_SQRT2_Q15);
+
+ xtmpp = xtmp;
+
+ for (i=0; i<32; i++) {
+ transpose4_ooff_simd256(x256 ,xtmpp,512);
+ transpose4_ooff_simd256(x256+2,xtmpp+1,512);
+ transpose4_ooff_simd256(x256+4,xtmpp+2,512);
+ transpose4_ooff_simd256(x256+6,xtmpp+3,512);
+ transpose4_ooff_simd256(x256+8,xtmpp+4,512);
+ transpose4_ooff_simd256(x256+10,xtmpp+5,512);
+ transpose4_ooff_simd256(x256+12,xtmpp+6,512);
+ transpose4_ooff_simd256(x256+14,xtmpp+7,512);
+ transpose4_ooff_simd256(x256+16,xtmpp+8,512);
+ transpose4_ooff_simd256(x256+18,xtmpp+9,512);
+ transpose4_ooff_simd256(x256+20,xtmpp+10,512);
+ transpose4_ooff_simd256(x256+22,xtmpp+11,512);
+ transpose4_ooff_simd256(x256+24,xtmpp+12,512);
+ transpose4_ooff_simd256(x256+26,xtmpp+13,512);
+ transpose4_ooff_simd256(x256+28,xtmpp+14,512);
+ transpose4_ooff_simd256(x256+30,xtmpp+15,512);
+ transpose4_ooff_simd256(x256+32,xtmpp+16,512);
+ transpose4_ooff_simd256(x256+34,xtmpp+17,512);
+ transpose4_ooff_simd256(x256+36,xtmpp+18,512);
+ transpose4_ooff_simd256(x256+38,xtmpp+19,512);
+ transpose4_ooff_simd256(x256+40,xtmpp+20,512);
+ transpose4_ooff_simd256(x256+42,xtmpp+21,512);
+ transpose4_ooff_simd256(x256+44,xtmpp+22,512);
+ transpose4_ooff_simd256(x256+46,xtmpp+23,512);
+ transpose4_ooff_simd256(x256+48,xtmpp+24,512);
+ transpose4_ooff_simd256(x256+50,xtmpp+25,512);
+ transpose4_ooff_simd256(x256+52,xtmpp+26,512);
+ transpose4_ooff_simd256(x256+54,xtmpp+27,512);
+ transpose4_ooff_simd256(x256+56,xtmpp+28,512);
+ transpose4_ooff_simd256(x256+58,xtmpp+29,512);
+ transpose4_ooff_simd256(x256+60,xtmpp+30,512);
+ transpose4_ooff_simd256(x256+62,xtmpp+31,512);
+ x256+=64;
+ xtmpp+=32;
+ }
+
+ dft4096((int16_t*)(xtmp),(int16_t*)ytmp,1);
+ dft4096((int16_t*)(xtmp+1024),(int16_t*)(ytmp+512),1);
+
+
+ for (i=0; i<512; i++) {
+ bfly2_256(ytmpp,ytmpp+512,
+ y256p,y256p+512,
+ tw8192_256p);
+ tw8192_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+ y256p = y256;
+
+ for (i=0; i<64; i++) {
+ y256p[0] = mulhi_int16_simd256(y256p[0],ONE_OVER_SQRT2_Q15_128);
+ y256p[1] = mulhi_int16_simd256(y256p[1],ONE_OVER_SQRT2_Q15_128);
+ y256p[2] = mulhi_int16_simd256(y256p[2],ONE_OVER_SQRT2_Q15_128);
+ y256p[3] = mulhi_int16_simd256(y256p[3],ONE_OVER_SQRT2_Q15_128);
+ y256p[4] = mulhi_int16_simd256(y256p[4],ONE_OVER_SQRT2_Q15_128);
+ y256p[5] = mulhi_int16_simd256(y256p[5],ONE_OVER_SQRT2_Q15_128);
+ y256p[6] = mulhi_int16_simd256(y256p[6],ONE_OVER_SQRT2_Q15_128);
+ y256p[7] = mulhi_int16_simd256(y256p[7],ONE_OVER_SQRT2_Q15_128);
+ y256p[8] = mulhi_int16_simd256(y256p[8],ONE_OVER_SQRT2_Q15_128);
+ y256p[9] = mulhi_int16_simd256(y256p[9],ONE_OVER_SQRT2_Q15_128);
+ y256p[10] = mulhi_int16_simd256(y256p[10],ONE_OVER_SQRT2_Q15_128);
+ y256p[11] = mulhi_int16_simd256(y256p[11],ONE_OVER_SQRT2_Q15_128);
+ y256p[12] = mulhi_int16_simd256(y256p[12],ONE_OVER_SQRT2_Q15_128);
+ y256p[13] = mulhi_int16_simd256(y256p[13],ONE_OVER_SQRT2_Q15_128);
+ y256p[14] = mulhi_int16_simd256(y256p[14],ONE_OVER_SQRT2_Q15_128);
+ y256p[15] = mulhi_int16_simd256(y256p[15],ONE_OVER_SQRT2_Q15_128);
+ y256p+=16;
+ }
+ }
+
+ _mm_empty();
+ _m_empty();
+
+}
+
+void idft8192(int16_t *x,int16_t *y,int scale)
+{
+
+ simd256_q15_t xtmp[1024],*xtmpp,*x256 = (simd256_q15_t *)x;
+ simd256_q15_t ytmp[1024],*tw8192_256p=(simd256_q15_t *)tw8192,*y256=(simd256_q15_t *)y,*y256p=(simd256_q15_t *)y;
+ simd256_q15_t *ytmpp = &ytmp[0];
+ int i;
+ simd256_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16_simd256(ONE_OVER_SQRT2_Q15);
+
+ xtmpp = xtmp;
+
+ for (i=0; i<32; i++) {
+ transpose4_ooff_simd256(x256 ,xtmpp,512);
+ transpose4_ooff_simd256(x256+2,xtmpp+1,512);
+ transpose4_ooff_simd256(x256+4,xtmpp+2,512);
+ transpose4_ooff_simd256(x256+6,xtmpp+3,512);
+ transpose4_ooff_simd256(x256+8,xtmpp+4,512);
+ transpose4_ooff_simd256(x256+10,xtmpp+5,512);
+ transpose4_ooff_simd256(x256+12,xtmpp+6,512);
+ transpose4_ooff_simd256(x256+14,xtmpp+7,512);
+ transpose4_ooff_simd256(x256+16,xtmpp+8,512);
+ transpose4_ooff_simd256(x256+18,xtmpp+9,512);
+ transpose4_ooff_simd256(x256+20,xtmpp+10,512);
+ transpose4_ooff_simd256(x256+22,xtmpp+11,512);
+ transpose4_ooff_simd256(x256+24,xtmpp+12,512);
+ transpose4_ooff_simd256(x256+26,xtmpp+13,512);
+ transpose4_ooff_simd256(x256+28,xtmpp+14,512);
+ transpose4_ooff_simd256(x256+30,xtmpp+15,512);
+ transpose4_ooff_simd256(x256+32,xtmpp+16,512);
+ transpose4_ooff_simd256(x256+34,xtmpp+17,512);
+ transpose4_ooff_simd256(x256+36,xtmpp+18,512);
+ transpose4_ooff_simd256(x256+38,xtmpp+19,512);
+ transpose4_ooff_simd256(x256+40,xtmpp+20,512);
+ transpose4_ooff_simd256(x256+42,xtmpp+21,512);
+ transpose4_ooff_simd256(x256+44,xtmpp+22,512);
+ transpose4_ooff_simd256(x256+46,xtmpp+23,512);
+ transpose4_ooff_simd256(x256+48,xtmpp+24,512);
+ transpose4_ooff_simd256(x256+50,xtmpp+25,512);
+ transpose4_ooff_simd256(x256+52,xtmpp+26,512);
+ transpose4_ooff_simd256(x256+54,xtmpp+27,512);
+ transpose4_ooff_simd256(x256+56,xtmpp+28,512);
+ transpose4_ooff_simd256(x256+58,xtmpp+29,512);
+ transpose4_ooff_simd256(x256+60,xtmpp+30,512);
+ transpose4_ooff_simd256(x256+62,xtmpp+31,512);
+ x256+=64;
+ xtmpp+=32;
+ }
+
+ idft4096((int16_t*)(xtmp),(int16_t*)ytmp,1);
+ idft4096((int16_t*)(xtmp+1024),(int16_t*)(ytmp+512),1);
+
+
+ for (i=0; i<512; i++) {
+ ibfly2_256(ytmpp,ytmpp+512,
+ y256p,y256p+512,
+ tw8192_256p);
+ tw8192_256p++;
+ y256p++;
+ ytmpp++;
+ }
+
+ if (scale>0) {
+ y256p = y256;
+
+ for (i=0; i<64; i++) {
+ y256p[0] = mulhi_int16_simd256(y256p[0],ONE_OVER_SQRT2_Q15_128);
+ y256p[1] = mulhi_int16_simd256(y256p[1],ONE_OVER_SQRT2_Q15_128);
+ y256p[2] = mulhi_int16_simd256(y256p[2],ONE_OVER_SQRT2_Q15_128);
+ y256p[3] = mulhi_int16_simd256(y256p[3],ONE_OVER_SQRT2_Q15_128);
+ y256p[4] = mulhi_int16_simd256(y256p[4],ONE_OVER_SQRT2_Q15_128);
+ y256p[5] = mulhi_int16_simd256(y256p[5],ONE_OVER_SQRT2_Q15_128);
+ y256p[6] = mulhi_int16_simd256(y256p[6],ONE_OVER_SQRT2_Q15_128);
+ y256p[7] = mulhi_int16_simd256(y256p[7],ONE_OVER_SQRT2_Q15_128);
+ y256p[8] = mulhi_int16_simd256(y256p[8],ONE_OVER_SQRT2_Q15_128);
+ y256p[9] = mulhi_int16_simd256(y256p[9],ONE_OVER_SQRT2_Q15_128);
+ y256p[10] = mulhi_int16_simd256(y256p[10],ONE_OVER_SQRT2_Q15_128);
+ y256p[11] = mulhi_int16_simd256(y256p[11],ONE_OVER_SQRT2_Q15_128);
+ y256p[12] = mulhi_int16_simd256(y256p[12],ONE_OVER_SQRT2_Q15_128);
+ y256p[13] = mulhi_int16_simd256(y256p[13],ONE_OVER_SQRT2_Q15_128);
+ y256p[14] = mulhi_int16_simd256(y256p[14],ONE_OVER_SQRT2_Q15_128);
+ y256p[15] = mulhi_int16_simd256(y256p[15],ONE_OVER_SQRT2_Q15_128);
+ y256p+=16;
+ }
+ }
+
+ _mm_empty();
+ _m_empty();
+
+}
+
+
+#endif
+
#include "twiddle1536.h"
// 512 x 3
void idft1536(int16_t *input, int16_t *output)
{
int i,i2,j;
- uint32_t tmp[3][512 ]__attribute__((aligned(16)));
- uint32_t tmpo[3][512] __attribute__((aligned(16)));
+ uint32_t tmp[3][512 ]__attribute__((aligned(32)));
+ uint32_t tmpo[3][512] __attribute__((aligned(32)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
@@ -3230,8 +5456,8 @@ void idft1536(int16_t *input, int16_t *output)
void dft1536(int16_t *input, int16_t *output)
{
int i,i2,j;
- uint32_t tmp[3][512] __attribute__((aligned(16)));
- uint32_t tmpo[3][512] __attribute__((aligned(16)));
+ uint32_t tmp[3][512] __attribute__((aligned(32)));
+ uint32_t tmpo[3][512] __attribute__((aligned(32)));
for (i=0,j=0; i<512; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
@@ -3280,8 +5506,8 @@ void idft3072(int16_t *input, int16_t *output)
void idft6144(int16_t *input, int16_t *output)
{
int i,i2,j;
- uint32_t tmp[3][2048] __attribute__((aligned(16)));
- uint32_t tmpo[3][2048] __attribute__((aligned(16)));
+ uint32_t tmp[3][2048] __attribute__((aligned(32)));
+ uint32_t tmpo[3][2048] __attribute__((aligned(32)));
for (i=0,j=0; i<2048; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
@@ -3321,8 +5547,8 @@ void idft6144(int16_t *input, int16_t *output)
void dft6144(int16_t *input, int16_t *output)
{
int i,i2,j;
- uint32_t tmp[3][2048] __attribute__((aligned(16)));
- uint32_t tmpo[3][2048] __attribute__((aligned(16)));
+ uint32_t tmp[3][2048] __attribute__((aligned(32)));
+ uint32_t tmpo[3][2048] __attribute__((aligned(32)));
for (i=0,j=0; i<2048; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
@@ -3361,8 +5587,8 @@ void dft6144(int16_t *input, int16_t *output)
void dft12288(int16_t *input, int16_t *output)
{
int i,i2,j;
- uint32_t tmp[3][4096] __attribute__((aligned(16)));
- uint32_t tmpo[3][4096] __attribute__((aligned(16)));
+ uint32_t tmp[3][4096] __attribute__((aligned(32)));
+ uint32_t tmpo[3][4096] __attribute__((aligned(32)));
for (i=0,j=0; i<4096; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
@@ -3397,8 +5623,8 @@ void dft12288(int16_t *input, int16_t *output)
void idft12288(int16_t *input, int16_t *output)
{
int i,i2,j;
- uint32_t tmp[3][4096] __attribute__((aligned(16)));
- uint32_t tmpo[3][4096] __attribute__((aligned(16)));
+ uint32_t tmp[3][4096] __attribute__((aligned(32)));
+ uint32_t tmpo[3][4096] __attribute__((aligned(32)));
for (i=0,j=0; i<4096; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
@@ -3444,8 +5670,8 @@ void idft18432(int16_t *input, int16_t *output)
void dft24576(int16_t *input, int16_t *output)
{
int i,i2,j;
- uint32_t tmp[3][8192] __attribute__((aligned(16)));
- uint32_t tmpo[3][8192] __attribute__((aligned(16)));
+ uint32_t tmp[3][8192] __attribute__((aligned(32)));
+ uint32_t tmpo[3][8192] __attribute__((aligned(32)));
for (i=0,j=0; i<8192; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
@@ -3481,8 +5707,8 @@ void dft24576(int16_t *input, int16_t *output)
void idft24576(int16_t *input, int16_t *output)
{
int i,i2,j;
- uint32_t tmp[3][16384] __attribute__((aligned(16)));
- uint32_t tmpo[3][16384] __attribute__((aligned(16)));
+ uint32_t tmp[3][16384] __attribute__((aligned(32)));
+ uint32_t tmpo[3][16384] __attribute__((aligned(32)));
for (i=0,j=0; i<8192; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
@@ -3523,11 +5749,11 @@ void idft24576(int16_t *input, int16_t *output)
/// THIS SECTION IS FOR ALL PUSCH DFTS (i.e. radix 2^a * 3^b * 4^c * 5^d)
/// They use twiddles for 4-way parallel DFTS (i.e. 4 DFTS with interleaved input/output)
-static int16_t W1_12s[8]__attribute__((aligned(16))) = {28377,-16383,28377,-16383,28377,-16383,28377,-16383};
-static int16_t W2_12s[8]__attribute__((aligned(16))) = {16383,-28377,16383,-28377,16383,-28377,16383,-28377};
-static int16_t W3_12s[8]__attribute__((aligned(16))) = {0,-32767,0,-32767,0,-32767,0,-32767};
-static int16_t W4_12s[8]__attribute__((aligned(16))) = {-16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377};
-static int16_t W6_12s[8]__attribute__((aligned(16))) = {-32767,0,-32767,0,-32767,0,-32767,0};
+static int16_t W1_12s[8]__attribute__((aligned(32))) = {28377,-16383,28377,-16383,28377,-16383,28377,-16383};
+static int16_t W2_12s[8]__attribute__((aligned(32))) = {16383,-28377,16383,-28377,16383,-28377,16383,-28377};
+static int16_t W3_12s[8]__attribute__((aligned(32))) = {0,-32767,0,-32767,0,-32767,0,-32767};
+static int16_t W4_12s[8]__attribute__((aligned(32))) = {-16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377};
+static int16_t W6_12s[8]__attribute__((aligned(32))) = {-32767,0,-32767,0,-32767,0,-32767,0};
simd_q15_t *W1_12=(simd_q15_t *)W1_12s;
simd_q15_t *W2_12=(simd_q15_t *)W2_12s;
@@ -3706,7 +5932,194 @@ void dft12(int16_t *x,int16_t *y)
}
-static int16_t tw24[88]__attribute__((aligned(16))) = {31650,-8480,31650,-8480,31650,-8480,31650,-8480,
+#ifdef __AVX2__
+
+static int16_t W1_12s_256[16]__attribute__((aligned(32))) = {28377,-16383,28377,-16383,28377,-16383,28377,-16383,28377,-16383,28377,-16383,28377,-16383,28377,-16383};
+static int16_t W2_12s_256[16]__attribute__((aligned(32))) = {16383,-28377,16383,-28377,16383,-28377,16383,-28377,16383,-28377,16383,-28377,16383,-28377,16383,-28377};
+static int16_t W3_12s_256[16]__attribute__((aligned(32))) = {0,-32767,0,-32767,0,-32767,0,-32767,0,-32767,0,-32767,0,-32767,0,-32767};
+static int16_t W4_12s_256[16]__attribute__((aligned(32))) = {-16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377};
+static int16_t W6_12s_256[16]__attribute__((aligned(32))) = {-32767,0,-32767,0,-32767,0,-32767,0,-32767,0,-32767,0,-32767,0,-32767,0};
+
+simd256_q15_t *W1_12_256=(simd256_q15_t *)W1_12s_256;
+simd256_q15_t *W2_12_256=(simd256_q15_t *)W2_12s_256;
+simd256_q15_t *W3_12_256=(simd256_q15_t *)W3_12s_256;
+simd256_q15_t *W4_12_256=(simd256_q15_t *)W4_12s_256;
+simd256_q15_t *W6_12_256=(simd256_q15_t *)W6_12s_256;
+
+
+static simd256_q15_t norm256;
+
+static inline void dft12f_simd256(simd256_q15_t *x0,
+ simd256_q15_t *x1,
+ simd256_q15_t *x2,
+ simd256_q15_t *x3,
+ simd256_q15_t *x4,
+ simd256_q15_t *x5,
+ simd256_q15_t *x6,
+ simd256_q15_t *x7,
+ simd256_q15_t *x8,
+ simd256_q15_t *x9,
+ simd256_q15_t *x10,
+ simd256_q15_t *x11,
+ simd256_q15_t *y0,
+ simd256_q15_t *y1,
+ simd256_q15_t *y2,
+ simd256_q15_t *y3,
+ simd256_q15_t *y4,
+ simd256_q15_t *y5,
+ simd256_q15_t *y6,
+ simd256_q15_t *y7,
+ simd256_q15_t *y8,
+ simd256_q15_t *y9,
+ simd256_q15_t *y10,
+ simd256_q15_t *y11) __attribute__((always_inline));
+
+static inline void dft12f_simd256(simd256_q15_t *x0,
+ simd256_q15_t *x1,
+ simd256_q15_t *x2,
+ simd256_q15_t *x3,
+ simd256_q15_t *x4,
+ simd256_q15_t *x5,
+ simd256_q15_t *x6,
+ simd256_q15_t *x7,
+ simd256_q15_t *x8,
+ simd256_q15_t *x9,
+ simd256_q15_t *x10,
+ simd256_q15_t *x11,
+ simd256_q15_t *y0,
+ simd256_q15_t *y1,
+ simd256_q15_t *y2,
+ simd256_q15_t *y3,
+ simd256_q15_t *y4,
+ simd256_q15_t *y5,
+ simd256_q15_t *y6,
+ simd256_q15_t *y7,
+ simd256_q15_t *y8,
+ simd256_q15_t *y9,
+ simd256_q15_t *y10,
+ simd256_q15_t *y11)
+{
+
+
+ simd256_q15_t tmp_dft12[12];
+
+ simd256_q15_t *tmp_dft12_ptr = &tmp_dft12[0];
+
+ // msg("dft12\n");
+
+ bfly4_tw1_256(x0,
+ x3,
+ x6,
+ x9,
+ tmp_dft12_ptr,
+ tmp_dft12_ptr+3,
+ tmp_dft12_ptr+6,
+ tmp_dft12_ptr+9);
+
+
+ bfly4_tw1_256(x1,
+ x4,
+ x7,
+ x10,
+ tmp_dft12_ptr+1,
+ tmp_dft12_ptr+4,
+ tmp_dft12_ptr+7,
+ tmp_dft12_ptr+10);
+
+
+ bfly4_tw1_256(x2,
+ x5,
+ x8,
+ x11,
+ tmp_dft12_ptr+2,
+ tmp_dft12_ptr+5,
+ tmp_dft12_ptr+8,
+ tmp_dft12_ptr+11);
+
+ // k2=0;
+ bfly3_tw1_256(tmp_dft12_ptr,
+ tmp_dft12_ptr+1,
+ tmp_dft12_ptr+2,
+ y0,
+ y4,
+ y8);
+
+
+
+ // k2=1;
+ bfly3_256(tmp_dft12_ptr+3,
+ tmp_dft12_ptr+4,
+ tmp_dft12_ptr+5,
+ y1,
+ y5,
+ y9,
+ W1_12_256,
+ W2_12_256);
+
+
+
+ // k2=2;
+ bfly3_256(tmp_dft12_ptr+6,
+ tmp_dft12_ptr+7,
+ tmp_dft12_ptr+8,
+ y2,
+ y6,
+ y10,
+ W2_12_256,
+ W4_12_256);
+
+ // k2=3;
+ bfly3_256(tmp_dft12_ptr+9,
+ tmp_dft12_ptr+10,
+ tmp_dft12_ptr+11,
+ y3,
+ y7,
+ y11,
+ W3_12_256,
+ W6_12_256);
+
+}
+
+
+
+
+void dft12_simd256(int16_t *x,int16_t *y)
+{
+
+ simd256_q15_t *x256 = (simd256_q15_t *)x,*y256 = (simd256_q15_t *)y;
+ dft12f_simd256(&x256[0],
+ &x256[1],
+ &x256[2],
+ &x256[3],
+ &x256[4],
+ &x256[5],
+ &x256[6],
+ &x256[7],
+ &x256[8],
+ &x256[9],
+ &x256[10],
+ &x256[11],
+ &y256[0],
+ &y256[1],
+ &y256[2],
+ &y256[3],
+ &y256[4],
+ &y256[5],
+ &y256[6],
+ &y256[7],
+ &y256[8],
+ &y256[9],
+ &y256[10],
+ &y256[11]);
+
+ _mm_empty();
+ _m_empty();
+
+}
+
+#endif
+
+static int16_t tw24[88]__attribute__((aligned(32))) = {31650,-8480,31650,-8480,31650,-8480,31650,-8480,
28377,-16383,28377,-16383,28377,-16383,28377,-16383,
23169,-23169,23169,-23169,23169,-23169,23169,-23169,
16383,-28377,16383,-28377,16383,-28377,16383,-28377,
@@ -3817,7 +6230,7 @@ void dft24(int16_t *x,int16_t *y,unsigned char scale_flag)
}
-static int16_t twa36[88]__attribute__((aligned(16))) = {32269,-5689,32269,-5689,32269,-5689,32269,-5689,
+static int16_t twa36[88]__attribute__((aligned(32))) = {32269,-5689,32269,-5689,32269,-5689,32269,-5689,
30790,-11206,30790,-11206,30790,-11206,30790,-11206,
28377,-16383,28377,-16383,28377,-16383,28377,-16383,
25100,-21062,25100,-21062,25100,-21062,25100,-21062,
@@ -3830,7 +6243,7 @@ static int16_t twa36[88]__attribute__((aligned(16))) = {32269,-5689,32269,-5689,
-11206,-30790,-11206,-30790,-11206,-30790,-11206,-30790
};
-static int16_t twb36[88]__attribute__((aligned(16))) = {30790,-11206,30790,-11206,30790,-11206,30790,-11206,
+static int16_t twb36[88]__attribute__((aligned(32))) = {30790,-11206,30790,-11206,30790,-11206,30790,-11206,
25100,-21062,25100,-21062,25100,-21062,25100,-21062,
16383,-28377,16383,-28377,16383,-28377,16383,-28377,
5689,-32269,5689,-32269,5689,-32269,5689,-32269,
@@ -3963,7 +6376,7 @@ void dft36(int16_t *x,int16_t *y,unsigned char scale_flag)
}
-static int16_t twa48[88]__attribute__((aligned(16))) = {32486,-4276,32486,-4276,32486,-4276,32486,-4276,
+static int16_t twa48[88]__attribute__((aligned(32))) = {32486,-4276,32486,-4276,32486,-4276,32486,-4276,
31650,-8480,31650,-8480,31650,-8480,31650,-8480,
30272,-12539,30272,-12539,30272,-12539,30272,-12539,
28377,-16383,28377,-16383,28377,-16383,28377,-16383,
@@ -3976,7 +6389,7 @@ static int16_t twa48[88]__attribute__((aligned(16))) = {32486,-4276,32486,-4276,
4276,-32486,4276,-32486,4276,-32486,4276,-32486
};
-static int16_t twb48[88]__attribute__((aligned(16))) = {31650,-8480,31650,-8480,31650,-8480,31650,-8480,
+static int16_t twb48[88]__attribute__((aligned(32))) = {31650,-8480,31650,-8480,31650,-8480,31650,-8480,
28377,-16383,28377,-16383,28377,-16383,28377,-16383,
23169,-23169,23169,-23169,23169,-23169,23169,-23169,
16383,-28377,16383,-28377,16383,-28377,16383,-28377,
@@ -3989,7 +6402,7 @@ static int16_t twb48[88]__attribute__((aligned(16))) = {31650,-8480,31650,-8480,
-31650,-8480,-31650,-8480,-31650,-8480,-31650,-8480
};
-static int16_t twc48[88]__attribute__((aligned(16))) = {30272,-12539,30272,-12539,30272,-12539,30272,-12539,
+static int16_t twc48[88]__attribute__((aligned(32))) = {30272,-12539,30272,-12539,30272,-12539,30272,-12539,
23169,-23169,23169,-23169,23169,-23169,23169,-23169,
12539,-30272,12539,-30272,12539,-30272,12539,-30272,
0,-32767,0,-32767,0,-32767,0,-32767,
@@ -4159,7 +6572,7 @@ void dft48(int16_t *x, int16_t *y,unsigned char scale_flag)
}
-static int16_t twa60[88]__attribute__((aligned(16))) = {32587,-3425,32587,-3425,32587,-3425,32587,-3425,
+static int16_t twa60[88]__attribute__((aligned(32))) = {32587,-3425,32587,-3425,32587,-3425,32587,-3425,
32050,-6812,32050,-6812,32050,-6812,32050,-6812,
31163,-10125,31163,-10125,31163,-10125,31163,-10125,
29934,-13327,29934,-13327,29934,-13327,29934,-13327,
@@ -4171,7 +6584,7 @@ static int16_t twa60[88]__attribute__((aligned(16))) = {32587,-3425,32587,-3425,
16383,-28377,16383,-28377,16383,-28377,16383,-28377,
13327,-29934,13327,-29934,13327,-29934,13327,-29934
};
-static int16_t twb60[88]__attribute__((aligned(16))) = {32050,-6812,32050,-6812,32050,-6812,32050,-6812,
+static int16_t twb60[88]__attribute__((aligned(32))) = {32050,-6812,32050,-6812,32050,-6812,32050,-6812,
29934,-13327,29934,-13327,29934,-13327,29934,-13327,
26509,-19259,26509,-19259,26509,-19259,26509,-19259,
21925,-24350,21925,-24350,21925,-24350,21925,-24350,
@@ -4183,7 +6596,7 @@ static int16_t twb60[88]__attribute__((aligned(16))) = {32050,-6812,32050,-6812,
-16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377,
-21925,-24350,-21925,-24350,-21925,-24350,-21925,-24350
};
-static int16_t twc60[88]__attribute__((aligned(16))) = {31163,-10125,31163,-10125,31163,-10125,31163,-10125,
+static int16_t twc60[88]__attribute__((aligned(32))) = {31163,-10125,31163,-10125,31163,-10125,31163,-10125,
26509,-19259,26509,-19259,26509,-19259,26509,-19259,
19259,-26509,19259,-26509,19259,-26509,19259,-26509,
10125,-31163,10125,-31163,10125,-31163,10125,-31163,
@@ -4195,7 +6608,7 @@ static int16_t twc60[88]__attribute__((aligned(16))) = {31163,-10125,31163,-1012
-32767,0,-32767,0,-32767,0,-32767,0,
-31163,10125,-31163,10125,-31163,10125,-31163,10125
};
-static int16_t twd60[88]__attribute__((aligned(16))) = {29934,-13327,29934,-13327,29934,-13327,29934,-13327,
+static int16_t twd60[88]__attribute__((aligned(32))) = {29934,-13327,29934,-13327,29934,-13327,29934,-13327,
21925,-24350,21925,-24350,21925,-24350,21925,-24350,
10125,-31163,10125,-31163,10125,-31163,10125,-31163,
-3425,-32587,-3425,-32587,-3425,-32587,-3425,-32587,
@@ -4387,7 +6800,7 @@ void dft60(int16_t *x,int16_t *y,unsigned char scale)
}
-static int16_t tw72[280]__attribute__((aligned(16))) = {32642,-2855,32642,-2855,32642,-2855,32642,-2855,
+static int16_t tw72[280]__attribute__((aligned(32))) = {32642,-2855,32642,-2855,32642,-2855,32642,-2855,
32269,-5689,32269,-5689,32269,-5689,32269,-5689,
31650,-8480,31650,-8480,31650,-8480,31650,-8480,
30790,-11206,30790,-11206,30790,-11206,30790,-11206,
@@ -4466,7 +6879,7 @@ void dft72(int16_t *x,int16_t *y,unsigned char scale_flag)
}
-static int16_t tw96[376]__attribute__((aligned(16))) = {32696,-2143,32696,-2143,32696,-2143,32696,-2143,
+static int16_t tw96[376]__attribute__((aligned(32))) = {32696,-2143,32696,-2143,32696,-2143,32696,-2143,
32486,-4276,32486,-4276,32486,-4276,32486,-4276,
32137,-6392,32137,-6392,32137,-6392,32137,-6392,
31650,-8480,31650,-8480,31650,-8480,31650,-8480,
@@ -4559,7 +6972,7 @@ void dft96(int16_t *x,int16_t *y,unsigned char scale_flag)
}
-static int16_t twa108[280]__attribute__((aligned(16))) = {32711,-1905,32711,-1905,32711,-1905,32711,-1905,
+static int16_t twa108[280]__attribute__((aligned(32))) = {32711,-1905,32711,-1905,32711,-1905,32711,-1905,
32545,-3804,32545,-3804,32545,-3804,32545,-3804,
32269,-5689,32269,-5689,32269,-5689,32269,-5689,
31883,-7556,31883,-7556,31883,-7556,31883,-7556,
@@ -4596,7 +7009,7 @@ static int16_t twa108[280]__attribute__((aligned(16))) = {32711,-1905,32711,-190
-14705,-29281,-14705,-29281,-14705,-29281,-14705,-29281
};
-static int16_t twb108[280]__attribute__((aligned(16))) = {32545,-3804,32545,-3804,32545,-3804,32545,-3804,
+static int16_t twb108[280]__attribute__((aligned(32))) = {32545,-3804,32545,-3804,32545,-3804,32545,-3804,
31883,-7556,31883,-7556,31883,-7556,31883,-7556,
30790,-11206,30790,-11206,30790,-11206,30790,-11206,
29281,-14705,29281,-14705,29281,-14705,29281,-14705,
@@ -4683,7 +7096,7 @@ void dft108(int16_t *x,int16_t *y,unsigned char scale_flag)
}
-static int16_t tw120[472]__attribute__((aligned(16))) = {32722,-1714,32722,-1714,32722,-1714,32722,-1714,
+static int16_t tw120[472]__attribute__((aligned(32))) = {32722,-1714,32722,-1714,32722,-1714,32722,-1714,
32587,-3425,32587,-3425,32587,-3425,32587,-3425,
32363,-5125,32363,-5125,32363,-5125,32363,-5125,
32050,-6812,32050,-6812,32050,-6812,32050,-6812,
@@ -4788,7 +7201,7 @@ void dft120(int16_t *x,int16_t *y, unsigned char scale_flag)
}
-static int16_t twa144[376]__attribute__((aligned(16))) = {32735,-1429,32735,-1429,32735,-1429,32735,-1429,
+static int16_t twa144[376]__attribute__((aligned(32))) = {32735,-1429,32735,-1429,32735,-1429,32735,-1429,
32642,-2855,32642,-2855,32642,-2855,32642,-2855,
32486,-4276,32486,-4276,32486,-4276,32486,-4276,
32269,-5689,32269,-5689,32269,-5689,32269,-5689,
@@ -4837,7 +7250,7 @@ static int16_t twa144[376]__attribute__((aligned(16))) = {32735,-1429,32735,-142
-15130,-29064,-15130,-29064,-15130,-29064,-15130,-29064
};
-static int16_t twb144[376]__attribute__((aligned(16))) = {32642,-2855,32642,-2855,32642,-2855,32642,-2855,
+static int16_t twb144[376]__attribute__((aligned(32))) = {32642,-2855,32642,-2855,32642,-2855,32642,-2855,
32269,-5689,32269,-5689,32269,-5689,32269,-5689,
31650,-8480,31650,-8480,31650,-8480,31650,-8480,
30790,-11206,30790,-11206,30790,-11206,30790,-11206,
@@ -4935,7 +7348,7 @@ void dft144(int16_t *x,int16_t *y,unsigned char scale_flag)
}
-static int16_t twa180[472]__attribute__((aligned(16))) = {32747,-1143,32747,-1143,32747,-1143,32747,-1143,
+static int16_t twa180[472]__attribute__((aligned(32))) = {32747,-1143,32747,-1143,32747,-1143,32747,-1143,
32687,-2285,32687,-2285,32687,-2285,32687,-2285,
32587,-3425,32587,-3425,32587,-3425,32587,-3425,
32448,-4560,32448,-4560,32448,-4560,32448,-4560,
@@ -4996,7 +7409,7 @@ static int16_t twa180[472]__attribute__((aligned(16))) = {32747,-1143,32747,-114
-15383,-28931,-15383,-28931,-15383,-28931,-15383,-28931
};
-static int16_t twb180[472]__attribute__((aligned(16))) = {32687,-2285,32687,-2285,32687,-2285,32687,-2285,
+static int16_t twb180[472]__attribute__((aligned(32))) = {32687,-2285,32687,-2285,32687,-2285,32687,-2285,
32448,-4560,32448,-4560,32448,-4560,32448,-4560,
32050,-6812,32050,-6812,32050,-6812,32050,-6812,
31497,-9031,31497,-9031,31497,-9031,31497,-9031,
@@ -5106,7 +7519,7 @@ void dft180(int16_t *x,int16_t *y,unsigned char scale_flag)
}
-static int16_t twa192[376]__attribute__((aligned(16))) = {32749,-1072,32749,-1072,32749,-1072,32749,-1072,
+static int16_t twa192[376]__attribute__((aligned(32))) = {32749,-1072,32749,-1072,32749,-1072,32749,-1072,
32696,-2143,32696,-2143,32696,-2143,32696,-2143,
32609,-3211,32609,-3211,32609,-3211,32609,-3211,
32486,-4276,32486,-4276,32486,-4276,32486,-4276,
@@ -5155,7 +7568,7 @@ static int16_t twa192[376]__attribute__((aligned(16))) = {32749,-1072,32749,-107
1072,-32749,1072,-32749,1072,-32749,1072,-32749
};
-static int16_t twb192[376]__attribute__((aligned(16))) = {32696,-2143,32696,-2143,32696,-2143,32696,-2143,
+static int16_t twb192[376]__attribute__((aligned(32))) = {32696,-2143,32696,-2143,32696,-2143,32696,-2143,
32486,-4276,32486,-4276,32486,-4276,32486,-4276,
32137,-6392,32137,-6392,32137,-6392,32137,-6392,
31650,-8480,31650,-8480,31650,-8480,31650,-8480,
@@ -5204,7 +7617,7 @@ static int16_t twb192[376]__attribute__((aligned(16))) = {32696,-2143,32696,-214
-32696,-2143,-32696,-2143,-32696,-2143,-32696,-2143
};
-static int16_t twc192[376]__attribute__((aligned(16))) = {32609,-3211,32609,-3211,32609,-3211,32609,-3211,
+static int16_t twc192[376]__attribute__((aligned(32))) = {32609,-3211,32609,-3211,32609,-3211,32609,-3211,
32137,-6392,32137,-6392,32137,-6392,32137,-6392,
31356,-9511,31356,-9511,31356,-9511,31356,-9511,
30272,-12539,30272,-12539,30272,-12539,30272,-12539,
@@ -5308,7 +7721,7 @@ void dft192(int16_t *x,int16_t *y,unsigned char scale_flag)
}
-static int16_t twa216[568]__attribute__((aligned(16))) = {32753,-953,32753,-953,32753,-953,32753,-953,
+static int16_t twa216[568]__attribute__((aligned(32))) = {32753,-953,32753,-953,32753,-953,32753,-953,
32711,-1905,32711,-1905,32711,-1905,32711,-1905,
32642,-2855,32642,-2855,32642,-2855,32642,-2855,
32545,-3804,32545,-3804,32545,-3804,32545,-3804,
@@ -5381,7 +7794,7 @@ static int16_t twa216[568]__attribute__((aligned(16))) = {32753,-953,32753,-953,
-15551,-28841,-15551,-28841,-15551,-28841,-15551,-28841
};
-static int16_t twb216[568]__attribute__((aligned(16))) = {32711,-1905,32711,-1905,32711,-1905,32711,-1905,
+static int16_t twb216[568]__attribute__((aligned(32))) = {32711,-1905,32711,-1905,32711,-1905,32711,-1905,
32545,-3804,32545,-3804,32545,-3804,32545,-3804,
32269,-5689,32269,-5689,32269,-5689,32269,-5689,
31883,-7556,31883,-7556,31883,-7556,31883,-7556,
@@ -5503,7 +7916,7 @@ void dft216(int16_t *x,int16_t *y,unsigned char scale_flag)
}
-static int16_t twa240[472]__attribute__((aligned(16))) = {32755,-857,32755,-857,32755,-857,32755,-857,
+static int16_t twa240[472]__attribute__((aligned(32))) = {32755,-857,32755,-857,32755,-857,32755,-857,
32722,-1714,32722,-1714,32722,-1714,32722,-1714,
32665,-2570,32665,-2570,32665,-2570,32665,-2570,
32587,-3425,32587,-3425,32587,-3425,32587,-3425,
@@ -5564,7 +7977,7 @@ static int16_t twa240[472]__attribute__((aligned(16))) = {32755,-857,32755,-857,
857,-32755,857,-32755,857,-32755,857,-32755
};
-static int16_t twb240[472]__attribute__((aligned(16))) = {32722,-1714,32722,-1714,32722,-1714,32722,-1714,
+static int16_t twb240[472]__attribute__((aligned(32))) = {32722,-1714,32722,-1714,32722,-1714,32722,-1714,
32587,-3425,32587,-3425,32587,-3425,32587,-3425,
32363,-5125,32363,-5125,32363,-5125,32363,-5125,
32050,-6812,32050,-6812,32050,-6812,32050,-6812,
@@ -5625,7 +8038,7 @@ static int16_t twb240[472]__attribute__((aligned(16))) = {32722,-1714,32722,-171
-32722,-1714,-32722,-1714,-32722,-1714,-32722,-1714
};
-static int16_t twc240[472]__attribute__((aligned(16))) = {32665,-2570,32665,-2570,32665,-2570,32665,-2570,
+static int16_t twc240[472]__attribute__((aligned(32))) = {32665,-2570,32665,-2570,32665,-2570,32665,-2570,
32363,-5125,32363,-5125,32363,-5125,32363,-5125,
31861,-7649,31861,-7649,31861,-7649,31861,-7649,
31163,-10125,31163,-10125,31163,-10125,31163,-10125,
@@ -5753,7 +8166,7 @@ twb2(2:2:end) = imag(twb);
*/
-static int16_t twa288[760]__attribute__((aligned(16))) = {32759,-714,32759,-714,32759,-714,32759,-714,
+static int16_t twa288[760]__attribute__((aligned(32))) = {32759,-714,32759,-714,32759,-714,32759,-714,
32735,-1429,32735,-1429,32735,-1429,32735,-1429,
32696,-2143,32696,-2143,32696,-2143,32696,-2143,
32642,-2855,32642,-2855,32642,-2855,32642,-2855,
@@ -5850,7 +8263,7 @@ static int16_t twa288[760]__attribute__((aligned(16))) = {32759,-714,32759,-714,
-15760,-28727,-15760,-28727,-15760,-28727,-15760,-28727
};
-static int16_t twb288[760]__attribute__((aligned(16))) = {32735,-1429,32735,-1429,32735,-1429,32735,-1429,
+static int16_t twb288[760]__attribute__((aligned(32))) = {32735,-1429,32735,-1429,32735,-1429,32735,-1429,
32642,-2855,32642,-2855,32642,-2855,32642,-2855,
32486,-4276,32486,-4276,32486,-4276,32486,-4276,
32269,-5689,32269,-5689,32269,-5689,32269,-5689,
@@ -5996,7 +8409,7 @@ void dft288(int16_t *x,int16_t *y,unsigned char scale_flag)
}
-static int16_t twa300[472]__attribute__((aligned(16))) = {32759,-686,32759,-686,32759,-686,32759,-686,
+static int16_t twa300[472]__attribute__((aligned(32))) = {32759,-686,32759,-686,32759,-686,32759,-686,
32738,-1372,32738,-1372,32738,-1372,32738,-1372,
32702,-2057,32702,-2057,32702,-2057,32702,-2057,
32652,-2741,32652,-2741,32652,-2741,32652,-2741,
@@ -6057,7 +8470,7 @@ static int16_t twa300[472]__attribute__((aligned(16))) = {32759,-686,32759,-686,
10775,-30944,10775,-30944,10775,-30944,10775,-30944
};
-static int16_t twb300[472]__attribute__((aligned(16))) = {32738,-1372,32738,-1372,32738,-1372,32738,-1372,
+static int16_t twb300[472]__attribute__((aligned(32))) = {32738,-1372,32738,-1372,32738,-1372,32738,-1372,
32652,-2741,32652,-2741,32652,-2741,32652,-2741,
32508,-4106,32508,-4106,32508,-4106,32508,-4106,
32308,-5464,32308,-5464,32308,-5464,32308,-5464,
@@ -6118,7 +8531,7 @@ static int16_t twb300[472]__attribute__((aligned(16))) = {32738,-1372,32738,-137
-25679,-20353,-25679,-20353,-25679,-20353,-25679,-20353
};
-static int16_t twc300[472]__attribute__((aligned(16))) = {32702,-2057,32702,-2057,32702,-2057,32702,-2057,
+static int16_t twc300[472]__attribute__((aligned(32))) = {32702,-2057,32702,-2057,32702,-2057,32702,-2057,
32508,-4106,32508,-4106,32508,-4106,32508,-4106,
32186,-6139,32186,-6139,32186,-6139,32186,-6139,
31737,-8148,31737,-8148,31737,-8148,31737,-8148,
@@ -6179,7 +8592,7 @@ static int16_t twc300[472]__attribute__((aligned(16))) = {32702,-2057,32702,-205
-27666,17557,-27666,17557,-27666,17557,-27666,17557
};
-static int16_t twd300[472]__attribute__((aligned(16))) = {32652,-2741,32652,-2741,32652,-2741,32652,-2741,
+static int16_t twd300[472]__attribute__((aligned(32))) = {32652,-2741,32652,-2741,32652,-2741,32652,-2741,
32308,-5464,32308,-5464,32308,-5464,32308,-5464,
31737,-8148,31737,-8148,31737,-8148,31737,-8148,
30944,-10775,30944,-10775,30944,-10775,30944,-10775,
@@ -16088,7 +18501,6 @@ void dft1200(int16_t *x,int16_t *y,unsigned char scale_flag)
if (scale_flag==1) {
norm128 = set1_int16(16384);//dft_norm_table[13]);
-
for (i=0; i<1200; i++) {
y128[i] = mulhi_int16(y128[i],norm128);
}
@@ -16110,9 +18522,11 @@ int main(int argc, char**argv)
time_stats_t ts;
- simd_q15_t x[2048],y[2048],tw0,tw1,tw2,tw3;
-
-
+#ifdef __AVX2__
+ simd256_q15_t x[2048],y[2048],tw0,tw1,tw2,tw3;
+#else
+ simd_q15_t x[4096],y[4096],tw0,tw1,tw2,tw3;
+#endif
int i;
set_taus_seed(0);
@@ -16439,10 +18853,10 @@ int main(int argc, char**argv)
for (i=0;i<4;i++)
printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&y[i])[0],((int16_t *)&y[i])[1],((int16_t*)&y[i])[2],((int16_t *)&y[i])[3],((int16_t*)&y[i])[4],((int16_t *)&y[i])[5],((int16_t*)&y[i])[6],((int16_t *)&y[i])[7]);
printf("\n");
- */
- memset((void*)&x[0],0,64*4);
-/*
- for (i=0; i<64; i+=4) {
+ */
+ memset((void*)&x[0],0,2048*4);
+
+ for (i=0; i<2048; i+=4) {
((int16_t*)x)[i<<1] = 1024;
((int16_t*)x)[1+(i<<1)] = 0;
((int16_t*)x)[2+(i<<1)] = 0;
@@ -16451,40 +18865,65 @@ int main(int argc, char**argv)
((int16_t*)x)[5+(i<<1)] = 0;
((int16_t*)x)[6+(i<<1)] = 0;
((int16_t*)x)[7+(i<<1)] = -1024;
+ }
+ /*
+ for (i=0; i<2048; i+=2) {
+ ((int16_t*)x)[i<<1] = 1024;
+ ((int16_t*)x)[1+(i<<1)] = 0;
+ ((int16_t*)x)[2+(i<<1)] = -1024;
+ ((int16_t*)x)[3+(i<<1)] = 0;
+ }
+
+ for (i=0;i<2048*2;i++) {
+ ((int16_t*)x)[i] = i/2;//(int16_t)((taus()&0xffff))>>5;
}
-*/
- for (i=0;i<64;i++) {
- ((int16_t*)x)[i] = (int16_t)((taus()&0xffff))>>5;
+ */
+ memset((void*)&x[0],0,64*sizeof(int32_t));
+ for (i=2;i<36;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
}
- memset((void*)&y[0],0,64*4);
-/*
- dft16((int16_t *)x,(int16_t *)y);
- printf("16-point\n");
+ for (i=(128-36);i<128;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
+ }
+ idft64((int16_t *)x,(int16_t *)y,1);
+
+
+ printf("64-point\n");
printf("X: ");
- for (i=0;i<4;i++)
- printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&x[i])[0],((int16_t *)&x[i])[1],((int16_t*)&x[i])[2],((int16_t *)&x[i])[3],((int16_t*)&x[i])[4],((int16_t*)&x[i])[5],((int16_t*)&x[i])[6],((int16_t*)&x[i])[7]);
+ for (i=0;i<8;i++)
+ print_shorts256("",((int16_t *)x)+(i*16));
+
printf("\nY:");
- for (i=0;i<4;i++)
- printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&y[i])[0],((int16_t *)&y[i])[1],((int16_t*)&y[i])[2],((int16_t *)&y[i])[3],((int16_t*)&y[i])[4],((int16_t *)&y[i])[5],((int16_t*)&y[i])[6],((int16_t *)&y[i])[7]);
+ for (i=0;i<8;i++)
+ print_shorts256("",((int16_t *)y)+(i*16));
printf("\n");
- exit(-1);
-*/
- dft64((int16_t *)x,(int16_t *)y,1);
- dft64((int16_t *)x,(int16_t *)y,1);
- dft64((int16_t *)x,(int16_t *)y,1);
+
+
+
+
+ idft64((int16_t *)x,(int16_t *)y,1);
+ idft64((int16_t *)x,(int16_t *)y,1);
+ idft64((int16_t *)x,(int16_t *)y,1);
reset_meas(&ts);
for (i=0; i<10000000; i++) {
start_meas(&ts);
- dft64((int16_t *)x,(int16_t *)y,1);
+ idft64((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n64-point (%f cycles, #trials %d)\n",(double)ts.diff/(double)ts.trials,ts.trials);
- write_output("x64.m","x64",x,64,1,1);
+ // write_output("x64.m","x64",x,64,1,1);
write_output("y64.m","y64",y,64,1,1);
+ write_output("x64.m","x64",x,64,1,1);
/*
printf("X: ");
@@ -16506,18 +18945,32 @@ int main(int argc, char**argv)
}
*/
- memset((void*)&y[0],0,128*4);
+ memset((void*)&x[0],0,128*4);
+ for (i=2;i<72;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
+ }
+ for (i=(256-72);i<256;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
+ }
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
- dft128((int16_t *)x,(int16_t *)y,0);
+ idft128((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n128-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
-
- /* printf("X: ");
+ write_output("y128.m","y128",y,128,1,1);
+ write_output("x128.m","x128",x,128,1,1);
+/*
+ printf("X: ");
for (i=0;i<32;i++)
printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&x[i])[0],((int16_t *)&x[i])[1],((int16_t*)&x[i])[2],((int16_t *)&x[i])[3],((int16_t*)&x[i])[4],((int16_t*)&x[i])[5],((int16_t*)&x[i])[6],((int16_t*)&x[i])[7]);
printf("\nY:");
@@ -16525,35 +18978,64 @@ int main(int argc, char**argv)
for (i=0;i<32;i++)
printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&y[i])[0],((int16_t *)&y[i])[1],((int16_t*)&y[i])[2],((int16_t *)&y[i])[3],((int16_t*)&y[i])[4],((int16_t *)&y[i])[5],((int16_t*)&y[i])[6],((int16_t *)&y[i])[7]);
printf("\n");
- */
+*/
+
+ /*
for (i=0; i<512; i++) {
((int16_t*)x)[i] = (int16_t)((taus()&0xffff))>>5;
}
-
+
memset((void*)&y[0],0,256*4);
+ */
+ memset((void*)&x[0],0,256*sizeof(int32_t));
+ for (i=2;i<144;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
+ }
+ for (i=(512-144);i<512;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
+ }
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
- dft256((int16_t *)x,(int16_t *)y,1);
+ idft256((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n256-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
+ write_output("y256.m","y256",y,256,1,1);
+ write_output("x256.m","x256",x,256,1,1);
+
+ memset((void*)&x[0],0,512*sizeof(int32_t));
+ for (i=2;i<302;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
+ }
+ for (i=(1024-300);i<1024;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
+ }
reset_meas(&ts);
-
for (i=0; i<10000; i++) {
start_meas(&ts);
- dft512((int16_t *)x,(int16_t *)y,1);
+ idft512((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n512-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
-
- write_output("x.m","x",x,512,1,1);
- write_output("y.m","y",y,512,1,1);
-
+ write_output("y512.m","y512",y,512,1,1);
+ write_output("x512.m","x512",x,512,1,1);
/*
printf("X: ");
for (i=0;i<64;i++)
@@ -16565,25 +19047,56 @@ int main(int argc, char**argv)
printf("\n");
*/
+ memset((void*)x,0,1024*sizeof(int32_t));
+ for (i=2;i<602;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
+ }
+ for (i=2*724;i<2048;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
+ }
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
- dft1024((int16_t *)x,(int16_t *)y,1);
+ idft1024((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n1024-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
+ write_output("y1024.m","y1024",y,1024,1,1);
+ write_output("x1024.m","x1024",x,1024,1,1);
+ memset((void*)x,0,2048*sizeof(int32_t));
+ for (i=2;i<1202;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
+ }
+ for (i=2*(2048-600);i<4096;i++) {
+ if ((taus() & 1)==0)
+ ((int16_t*)x)[i] = 364;
+ else
+ ((int16_t*)x)[i] = -364;
+ }
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
- dft2048((int16_t *)x,(int16_t *)y,1);
+ idft2048((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n2048-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
+ write_output("y2048.m","y2048",y,2048,1,1);
+ write_output("x2048.m","x2048",x,2048,1,1);
+
return(0);
}
diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c
index 31db339ecc..4b623fb9dc 100644
--- a/openair1/PHY/TOOLS/lte_phy_scope.c
+++ b/openair1/PHY/TOOLS/lte_phy_scope.c
@@ -719,13 +719,13 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
// PDSCH LLRs
if (pdsch_llr != NULL) {
- for (i=0; ipdsch_llr,0,coded_bits_per_codeword/4);
- fl_set_xyplot_data(form->pdsch_llr,bit,llr,coded_bits_per_codeword/4,"","","");
+ fl_set_xyplot_xbounds(form->pdsch_llr,0,coded_bits_per_codeword);
+ fl_set_xyplot_data(form->pdsch_llr,bit,llr,coded_bits_per_codeword,"","","");
}
// PDSCH I/Q of MF Output
diff --git a/openair1/PHY/TOOLS/time_meas.h b/openair1/PHY/TOOLS/time_meas.h
index a3df897053..3e621ac281 100644
--- a/openair1/PHY/TOOLS/time_meas.h
+++ b/openair1/PHY/TOOLS/time_meas.h
@@ -26,6 +26,9 @@
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
+#ifndef __TIME_MEAS_DEFS__H__
+#define __TIME_MEAS_DEFS__H__
+
#include
#include
#include
@@ -148,3 +151,4 @@ static inline void copy_meas(time_stats_t *dst_ts,time_stats_t *src_ts)
dst_ts->max=src_ts->max;
}
}
+#endif
diff --git a/openair1/PHY/TOOLS/twiddles8192.h b/openair1/PHY/TOOLS/twiddles8192.h
new file mode 100644
index 0000000000..ddb8ab2273
--- /dev/null
+++ b/openair1/PHY/TOOLS/twiddles8192.h
@@ -0,0 +1,12 @@
+/* Twiddles generated with
+twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:4095)/8192));
+twa2 = zeros(1,2*4096);
+twa2(1:2:end) = real(twa);
+twa2(2:2:end) = imag(twa);
+fd=fopen("twiddle_tmp.txt","w");
+fprintf(fd,"static int16_t tw8192[4096*2] = {");
+fprintf(fd,"%d,",twa2(1:(4096*2)-1));
+fprintf(fd,"%d};\n",twa2(end));
+fclose(fd);
+*/
+static int16_t tw8192[4096*2] = {32767,0,32766,-26,32766,-51,32766,-76,32766,-101,32766,-126,32766,-151,32766,-176,32766,-202,32766,-227,32766,-252,32765,-277,32765,-302,32765,-327,32765,-352,32764,-377,32764,-403,32764,-428,32763,-453,32763,-478,32763,-503,32762,-528,32762,-553,32761,-579,32761,-604,32760,-629,32760,-654,32759,-679,32759,-704,32758,-729,32758,-754,32757,-780,32757,-805,32756,-830,32755,-855,32755,-880,32754,-905,32753,-930,32753,-955,32752,-981,32751,-1006,32750,-1031,32750,-1056,32749,-1081,32748,-1106,32747,-1131,32746,-1156,32745,-1181,32744,-1207,32743,-1232,32742,-1257,32741,-1282,32740,-1307,32739,-1332,32738,-1357,32737,-1382,32736,-1407,32735,-1433,32734,-1458,32733,-1483,32732,-1508,32731,-1533,32729,-1558,32728,-1583,32727,-1608,32726,-1633,32725,-1659,32723,-1684,32722,-1709,32721,-1734,32719,-1759,32718,-1784,32717,-1809,32715,-1834,32714,-1859,32712,-1884,32711,-1909,32709,-1935,32708,-1960,32706,-1985,32705,-2010,32703,-2035,32702,-2060,32700,-2085,32699,-2110,32697,-2135,32695,-2160,32694,-2185,32692,-2210,32690,-2236,32688,-2261,32687,-2286,32685,-2311,32683,-2336,32681,-2361,32680,-2386,32678,-2411,32676,-2436,32674,-2461,32672,-2486,32670,-2511,32668,-2536,32666,-2561,32664,-2586,32662,-2611,32660,-2637,32658,-2662,32656,-2687,32654,-2712,32652,-2737,32650,-2762,32648,-2787,32646,-2812,32644,-2837,32641,-2862,32639,-2887,32637,-2912,32635,-2937,32632,-2962,32630,-2987,32628,-3012,32625,-3037,32623,-3062,32621,-3087,32618,-3112,32616,-3137,32614,-3162,32611,-3187,32609,-3212,32606,-3237,32604,-3262,32601,-3287,32599,-3312,32596,-3337,32594,-3362,32591,-3387,32588,-3412,32586,-3437,32583,-3462,32580,-3487,32578,-3512,32575,-3537,32572,-3562,32570,-3587,32567,-3612,32564,-3637,32561,-3662,32558,-3687,32556,-3712,32553,-3737,32550,-3762,32547,-3787,32544,-3812,32541,-3837,32538,-3862,32535,-3887,32532,-3912,32529,-3937,32526,-3962,32523,-3987,32520,-4012,32517,-4036,32514,-4061,32511,-4086,32508,-4111,32504,-4136,32501,-4161,32498,-4186,32495,-4211,32492,-4236,32488,-4261,32485,-4286,32482,-4311,32478,-4336,32475,-4360,32472,-4385,32468,-4410,32465,-4435,32462,-4460,32458,-4485,32455,-4510,32451,-4535,32448,-4560,32444,-4585,32441,-4609,32437,-4634,32434,-4659,32430,-4684,32426,-4709,32423,-4734,32419,-4759,32416,-4784,32412,-4808,32408,-4833,32404,-4858,32401,-4883,32397,-4908,32393,-4933,32389,-4958,32386,-4982,32382,-5007,32378,-5032,32374,-5057,32370,-5082,32366,-5107,32362,-5131,32358,-5156,32354,-5181,32350,-5206,32346,-5231,32342,-5255,32338,-5280,32334,-5305,32330,-5330,32326,-5355,32322,-5379,32318,-5404,32314,-5429,32310,-5454,32305,-5479,32301,-5503,32297,-5528,32293,-5553,32288,-5578,32284,-5602,32280,-5627,32275,-5652,32271,-5677,32267,-5701,32262,-5726,32258,-5751,32254,-5776,32249,-5800,32245,-5825,32240,-5850,32236,-5875,32231,-5899,32227,-5924,32222,-5949,32218,-5973,32213,-5998,32208,-6023,32204,-6048,32199,-6072,32194,-6097,32190,-6122,32185,-6146,32180,-6171,32176,-6196,32171,-6220,32166,-6245,32161,-6270,32156,-6294,32152,-6319,32147,-6344,32142,-6368,32137,-6393,32132,-6418,32127,-6442,32122,-6467,32117,-6492,32112,-6516,32107,-6541,32102,-6565,32097,-6590,32092,-6615,32087,-6639,32082,-6664,32077,-6689,32072,-6713,32066,-6738,32061,-6762,32056,-6787,32051,-6812,32046,-6836,32040,-6861,32035,-6885,32030,-6910,32024,-6934,32019,-6959,32014,-6983,32008,-7008,32003,-7033,31998,-7057,31992,-7082,31987,-7106,31981,-7131,31976,-7155,31970,-7180,31965,-7204,31959,-7229,31954,-7253,31948,-7278,31943,-7302,31937,-7327,31931,-7351,31926,-7376,31920,-7400,31914,-7425,31909,-7449,31903,-7474,31897,-7498,31891,-7523,31886,-7547,31880,-7572,31874,-7596,31868,-7620,31862,-7645,31856,-7669,31851,-7694,31845,-7718,31839,-7743,31833,-7767,31827,-7791,31821,-7816,31815,-7840,31809,-7865,31803,-7889,31797,-7913,31791,-7938,31785,-7962,31778,-7987,31772,-8011,31766,-8035,31760,-8060,31754,-8084,31748,-8108,31741,-8133,31735,-8157,31729,-8181,31723,-8206,31716,-8230,31710,-8254,31704,-8279,31697,-8303,31691,-8327,31684,-8352,31678,-8376,31672,-8400,31665,-8425,31659,-8449,31652,-8473,31646,-8497,31639,-8522,31633,-8546,31626,-8570,31619,-8594,31613,-8619,31606,-8643,31600,-8667,31593,-8691,31586,-8716,31580,-8740,31573,-8764,31566,-8788,31559,-8813,31553,-8837,31546,-8861,31539,-8885,31532,-8909,31525,-8933,31518,-8958,31512,-8982,31505,-9006,31498,-9030,31491,-9054,31484,-9078,31477,-9103,31470,-9127,31463,-9151,31456,-9175,31449,-9199,31442,-9223,31435,-9247,31428,-9271,31420,-9296,31413,-9320,31406,-9344,31399,-9368,31392,-9392,31385,-9416,31377,-9440,31370,-9464,31363,-9488,31356,-9512,31348,-9536,31341,-9560,31334,-9584,31326,-9608,31319,-9632,31311,-9656,31304,-9680,31297,-9704,31289,-9728,31282,-9752,31274,-9776,31267,-9800,31259,-9824,31252,-9848,31244,-9872,31236,-9896,31229,-9920,31221,-9944,31214,-9968,31206,-9992,31198,-10016,31191,-10040,31183,-10064,31175,-10088,31167,-10112,31160,-10136,31152,-10160,31144,-10183,31136,-10207,31128,-10231,31121,-10255,31113,-10279,31105,-10303,31097,-10327,31089,-10350,31081,-10374,31073,-10398,31065,-10422,31057,-10446,31049,-10470,31041,-10493,31033,-10517,31025,-10541,31017,-10565,31009,-10589,31001,-10612,30992,-10636,30984,-10660,30976,-10684,30968,-10707,30960,-10731,30951,-10755,30943,-10779,30935,-10802,30927,-10826,30918,-10850,30910,-10874,30902,-10897,30893,-10921,30885,-10945,30876,-10968,30868,-10992,30860,-11016,30851,-11039,30843,-11063,30834,-11087,30826,-11110,30817,-11134,30809,-11158,30800,-11181,30791,-11205,30783,-11228,30774,-11252,30766,-11276,30757,-11299,30748,-11323,30739,-11346,30731,-11370,30722,-11394,30713,-11417,30705,-11441,30696,-11464,30687,-11488,30678,-11511,30669,-11535,30660,-11558,30652,-11582,30643,-11605,30634,-11629,30625,-11652,30616,-11676,30607,-11699,30598,-11723,30589,-11746,30580,-11770,30571,-11793,30562,-11817,30553,-11840,30544,-11863,30535,-11887,30525,-11910,30516,-11934,30507,-11957,30498,-11981,30489,-12004,30480,-12027,30470,-12051,30461,-12074,30452,-12097,30442,-12121,30433,-12144,30424,-12167,30415,-12191,30405,-12214,30396,-12237,30386,-12261,30377,-12284,30368,-12307,30358,-12331,30349,-12354,30339,-12377,30330,-12400,30320,-12424,30311,-12447,30301,-12470,30291,-12493,30282,-12517,30272,-12540,30263,-12563,30253,-12586,30243,-12610,30234,-12633,30224,-12656,30214,-12679,30205,-12702,30195,-12725,30185,-12749,30175,-12772,30165,-12795,30156,-12818,30146,-12841,30136,-12864,30126,-12887,30116,-12910,30106,-12934,30096,-12957,30086,-12980,30076,-13003,30066,-13026,30056,-13049,30046,-13072,30036,-13095,30026,-13118,30016,-13141,30006,-13164,29996,-13187,29986,-13210,29976,-13233,29966,-13256,29955,-13279,29945,-13302,29935,-13325,29925,-13348,29915,-13371,29904,-13394,29894,-13417,29884,-13440,29873,-13463,29863,-13486,29853,-13508,29842,-13531,29832,-13554,29822,-13577,29811,-13600,29801,-13623,29790,-13646,29780,-13668,29769,-13691,29759,-13714,29748,-13737,29738,-13760,29727,-13783,29717,-13805,29706,-13828,29695,-13851,29685,-13874,29674,-13896,29663,-13919,29653,-13942,29642,-13965,29631,-13987,29621,-14010,29610,-14033,29599,-14056,29588,-14078,29577,-14101,29567,-14124,29556,-14146,29545,-14169,29534,-14192,29523,-14214,29512,-14237,29501,-14260,29490,-14282,29479,-14305,29468,-14327,29457,-14350,29446,-14373,29435,-14395,29424,-14418,29413,-14440,29402,-14463,29391,-14485,29380,-14508,29369,-14531,29358,-14553,29346,-14576,29335,-14598,29324,-14621,29313,-14643,29302,-14666,29290,-14688,29279,-14710,29268,-14733,29256,-14755,29245,-14778,29234,-14800,29222,-14823,29211,-14845,29200,-14867,29188,-14890,29177,-14912,29165,-14935,29154,-14957,29142,-14979,29131,-15002,29119,-15024,29108,-15046,29096,-15069,29085,-15091,29073,-15113,29062,-15136,29050,-15158,29038,-15180,29027,-15202,29015,-15225,29003,-15247,28992,-15269,28980,-15291,28968,-15314,28956,-15336,28945,-15358,28933,-15380,28921,-15402,28909,-15425,28897,-15447,28886,-15469,28874,-15491,28862,-15513,28850,-15535,28838,-15557,28826,-15580,28814,-15602,28802,-15624,28790,-15646,28778,-15668,28766,-15690,28754,-15712,28742,-15734,28730,-15756,28718,-15778,28706,-15800,28694,-15822,28681,-15844,28669,-15866,28657,-15888,28645,-15910,28633,-15932,28620,-15954,28608,-15976,28596,-15998,28584,-16020,28571,-16042,28559,-16064,28547,-16086,28534,-16108,28522,-16129,28510,-16151,28497,-16173,28485,-16195,28472,-16217,28460,-16239,28447,-16261,28435,-16282,28423,-16304,28410,-16326,28397,-16348,28385,-16369,28372,-16391,28360,-16413,28347,-16435,28335,-16456,28322,-16478,28309,-16500,28297,-16522,28284,-16543,28271,-16565,28259,-16587,28246,-16608,28233,-16630,28220,-16652,28208,-16673,28195,-16695,28182,-16717,28169,-16738,28156,-16760,28143,-16781,28131,-16803,28118,-16825,28105,-16846,28092,-16868,28079,-16889,28066,-16911,28053,-16932,28040,-16954,28027,-16975,28014,-16997,28001,-17018,27988,-17040,27975,-17061,27962,-17083,27948,-17104,27935,-17125,27922,-17147,27909,-17168,27896,-17190,27883,-17211,27869,-17233,27856,-17254,27843,-17275,27830,-17297,27816,-17318,27803,-17339,27790,-17361,27777,-17382,27763,-17403,27750,-17424,27736,-17446,27723,-17467,27710,-17488,27696,-17510,27683,-17531,27669,-17552,27656,-17573,27642,-17594,27629,-17616,27615,-17637,27602,-17658,27588,-17679,27575,-17700,27561,-17721,27548,-17743,27534,-17764,27520,-17785,27507,-17806,27493,-17827,27479,-17848,27466,-17869,27452,-17890,27438,-17911,27424,-17932,27411,-17953,27397,-17974,27383,-17995,27369,-18016,27355,-18037,27342,-18058,27328,-18079,27314,-18100,27300,-18121,27286,-18142,27272,-18163,27258,-18184,27244,-18205,27230,-18226,27216,-18247,27202,-18268,27188,-18288,27174,-18309,27160,-18330,27146,-18351,27132,-18372,27118,-18393,27104,-18413,27090,-18434,27076,-18455,27061,-18476,27047,-18496,27033,-18517,27019,-18538,27005,-18559,26990,-18579,26976,-18600,26962,-18621,26948,-18641,26933,-18662,26919,-18683,26905,-18703,26890,-18724,26876,-18745,26861,-18765,26847,-18786,26833,-18806,26818,-18827,26804,-18847,26789,-18868,26775,-18889,26760,-18909,26746,-18930,26731,-18950,26717,-18971,26702,-18991,26688,-19012,26673,-19032,26658,-19052,26644,-19073,26629,-19093,26615,-19114,26600,-19134,26585,-19155,26570,-19175,26556,-19195,26541,-19216,26526,-19236,26512,-19256,26497,-19277,26482,-19297,26467,-19317,26452,-19338,26437,-19358,26423,-19378,26408,-19398,26393,-19419,26378,-19439,26363,-19459,26348,-19479,26333,-19500,26318,-19520,26303,-19540,26288,-19560,26273,-19580,26258,-19600,26243,-19621,26228,-19641,26213,-19661,26198,-19681,26183,-19701,26168,-19721,26153,-19741,26137,-19761,26122,-19781,26107,-19801,26092,-19821,26077,-19841,26061,-19861,26046,-19881,26031,-19901,26016,-19921,26000,-19941,25985,-19961,25970,-19981,25954,-20001,25939,-20021,25924,-20041,25908,-20061,25893,-20080,25878,-20100,25862,-20120,25847,-20140,25831,-20160,25816,-20180,25800,-20199,25785,-20219,25769,-20239,25754,-20259,25738,-20278,25723,-20298,25707,-20318,25691,-20338,25676,-20357,25660,-20377,25645,-20397,25629,-20416,25613,-20436,25598,-20456,25582,-20475,25566,-20495,25550,-20514,25535,-20534,25519,-20554,25503,-20573,25487,-20593,25472,-20612,25456,-20632,25440,-20651,25424,-20671,25408,-20690,25392,-20710,25376,-20729,25361,-20749,25345,-20768,25329,-20788,25313,-20807,25297,-20826,25281,-20846,25265,-20865,25249,-20885,25233,-20904,25217,-20923,25201,-20943,25185,-20962,25169,-20981,25152,-21001,25136,-21020,25120,-21039,25104,-21058,25088,-21078,25072,-21097,25056,-21116,25039,-21135,25023,-21155,25007,-21174,24991,-21193,24974,-21212,24958,-21231,24942,-21250,24926,-21269,24909,-21289,24893,-21308,24877,-21327,24860,-21346,24844,-21365,24827,-21384,24811,-21403,24795,-21422,24778,-21441,24762,-21460,24745,-21479,24729,-21498,24712,-21517,24696,-21536,24679,-21555,24663,-21574,24646,-21593,24630,-21612,24613,-21630,24596,-21649,24580,-21668,24563,-21687,24546,-21706,24530,-21725,24513,-21744,24496,-21762,24480,-21781,24463,-21800,24446,-21819,24430,-21837,24413,-21856,24396,-21875,24379,-21894,24362,-21912,24346,-21931,24329,-21950,24312,-21968,24295,-21987,24278,-22005,24261,-22024,24244,-22043,24228,-22061,24211,-22080,24194,-22098,24177,-22117,24160,-22136,24143,-22154,24126,-22173,24109,-22191,24092,-22210,24075,-22228,24058,-22246,24041,-22265,24023,-22283,24006,-22302,23989,-22320,23972,-22339,23955,-22357,23938,-22375,23921,-22394,23903,-22412,23886,-22430,23869,-22449,23852,-22467,23835,-22485,23817,-22504,23800,-22522,23783,-22540,23766,-22558,23748,-22576,23731,-22595,23714,-22613,23696,-22631,23679,-22649,23661,-22667,23644,-22686,23627,-22704,23609,-22722,23592,-22740,23574,-22758,23557,-22776,23539,-22794,23522,-22812,23504,-22830,23487,-22848,23469,-22866,23452,-22884,23434,-22902,23417,-22920,23399,-22938,23382,-22956,23364,-22974,23346,-22992,23329,-23010,23311,-23028,23293,-23046,23276,-23063,23258,-23081,23240,-23099,23223,-23117,23205,-23135,23187,-23152,23169,-23170,23151,-23188,23134,-23206,23116,-23224,23098,-23241,23080,-23259,23062,-23277,23045,-23294,23027,-23312,23009,-23330,22991,-23347,22973,-23365,22955,-23383,22937,-23400,22919,-23418,22901,-23435,22883,-23453,22865,-23470,22847,-23488,22829,-23505,22811,-23523,22793,-23540,22775,-23558,22757,-23575,22739,-23593,22721,-23610,22703,-23628,22685,-23645,22666,-23662,22648,-23680,22630,-23697,22612,-23715,22594,-23732,22575,-23749,22557,-23767,22539,-23784,22521,-23801,22503,-23818,22484,-23836,22466,-23853,22448,-23870,22429,-23887,22411,-23904,22393,-23922,22374,-23939,22356,-23956,22338,-23973,22319,-23990,22301,-24007,22282,-24024,22264,-24042,22245,-24059,22227,-24076,22209,-24093,22190,-24110,22172,-24127,22153,-24144,22135,-24161,22116,-24178,22097,-24195,22079,-24212,22060,-24229,22042,-24245,22023,-24262,22004,-24279,21986,-24296,21967,-24313,21949,-24330,21930,-24347,21911,-24363,21893,-24380,21874,-24397,21855,-24414,21836,-24431,21818,-24447,21799,-24464,21780,-24481,21761,-24497,21743,-24514,21724,-24531,21705,-24547,21686,-24564,21667,-24581,21648,-24597,21629,-24614,21611,-24631,21592,-24647,21573,-24664,21554,-24680,21535,-24697,21516,-24713,21497,-24730,21478,-24746,21459,-24763,21440,-24779,21421,-24796,21402,-24812,21383,-24828,21364,-24845,21345,-24861,21326,-24878,21307,-24894,21288,-24910,21268,-24927,21249,-24943,21230,-24959,21211,-24975,21192,-24992,21173,-25008,21154,-25024,21134,-25040,21115,-25057,21096,-25073,21077,-25089,21057,-25105,21038,-25121,21019,-25137,21000,-25153,20980,-25170,20961,-25186,20942,-25202,20922,-25218,20903,-25234,20884,-25250,20864,-25266,20845,-25282,20825,-25298,20806,-25314,20787,-25330,20767,-25346,20748,-25362,20728,-25377,20709,-25393,20689,-25409,20670,-25425,20650,-25441,20631,-25457,20611,-25473,20592,-25488,20572,-25504,20553,-25520,20533,-25536,20513,-25551,20494,-25567,20474,-25583,20455,-25599,20435,-25614,20415,-25630,20396,-25646,20376,-25661,20356,-25677,20337,-25692,20317,-25708,20297,-25724,20277,-25739,20258,-25755,20238,-25770,20218,-25786,20198,-25801,20179,-25817,20159,-25832,20139,-25848,20119,-25863,20099,-25879,20079,-25894,20060,-25909,20040,-25925,20020,-25940,20000,-25955,19980,-25971,19960,-25986,19940,-26001,19920,-26017,19900,-26032,19880,-26047,19860,-26062,19840,-26078,19820,-26093,19800,-26108,19780,-26123,19760,-26138,19740,-26154,19720,-26169,19700,-26184,19680,-26199,19660,-26214,19640,-26229,19620,-26244,19599,-26259,19579,-26274,19559,-26289,19539,-26304,19519,-26319,19499,-26334,19478,-26349,19458,-26364,19438,-26379,19418,-26394,19397,-26409,19377,-26424,19357,-26438,19337,-26453,19316,-26468,19296,-26483,19276,-26498,19255,-26513,19235,-26527,19215,-26542,19194,-26557,19174,-26571,19154,-26586,19133,-26601,19113,-26616,19092,-26630,19072,-26645,19051,-26659,19031,-26674,19011,-26689,18990,-26703,18970,-26718,18949,-26732,18929,-26747,18908,-26761,18888,-26776,18867,-26790,18846,-26805,18826,-26819,18805,-26834,18785,-26848,18764,-26862,18744,-26877,18723,-26891,18702,-26906,18682,-26920,18661,-26934,18640,-26949,18620,-26963,18599,-26977,18578,-26991,18558,-27006,18537,-27020,18516,-27034,18495,-27048,18475,-27062,18454,-27077,18433,-27091,18412,-27105,18392,-27119,18371,-27133,18350,-27147,18329,-27161,18308,-27175,18287,-27189,18267,-27203,18246,-27217,18225,-27231,18204,-27245,18183,-27259,18162,-27273,18141,-27287,18120,-27301,18099,-27315,18078,-27329,18057,-27343,18036,-27356,18015,-27370,17994,-27384,17973,-27398,17952,-27412,17931,-27425,17910,-27439,17889,-27453,17868,-27467,17847,-27480,17826,-27494,17805,-27508,17784,-27521,17763,-27535,17742,-27549,17720,-27562,17699,-27576,17678,-27589,17657,-27603,17636,-27616,17615,-27630,17593,-27643,17572,-27657,17551,-27670,17530,-27684,17509,-27697,17487,-27711,17466,-27724,17445,-27737,17423,-27751,17402,-27764,17381,-27778,17360,-27791,17338,-27804,17317,-27817,17296,-27831,17274,-27844,17253,-27857,17232,-27870,17210,-27884,17189,-27897,17167,-27910,17146,-27923,17124,-27936,17103,-27949,17082,-27963,17060,-27976,17039,-27989,17017,-28002,16996,-28015,16974,-28028,16953,-28041,16931,-28054,16910,-28067,16888,-28080,16867,-28093,16845,-28106,16824,-28119,16802,-28132,16780,-28144,16759,-28157,16737,-28170,16716,-28183,16694,-28196,16672,-28209,16651,-28221,16629,-28234,16607,-28247,16586,-28260,16564,-28272,16542,-28285,16521,-28298,16499,-28310,16477,-28323,16455,-28336,16434,-28348,16412,-28361,16390,-28373,16368,-28386,16347,-28398,16325,-28411,16303,-28424,16281,-28436,16260,-28448,16238,-28461,16216,-28473,16194,-28486,16172,-28498,16150,-28511,16128,-28523,16107,-28535,16085,-28548,16063,-28560,16041,-28572,16019,-28585,15997,-28597,15975,-28609,15953,-28621,15931,-28634,15909,-28646,15887,-28658,15865,-28670,15843,-28682,15821,-28695,15799,-28707,15777,-28719,15755,-28731,15733,-28743,15711,-28755,15689,-28767,15667,-28779,15645,-28791,15623,-28803,15601,-28815,15579,-28827,15556,-28839,15534,-28851,15512,-28863,15490,-28875,15468,-28887,15446,-28898,15424,-28910,15401,-28922,15379,-28934,15357,-28946,15335,-28957,15313,-28969,15290,-28981,15268,-28993,15246,-29004,15224,-29016,15201,-29028,15179,-29039,15157,-29051,15135,-29063,15112,-29074,15090,-29086,15068,-29097,15045,-29109,15023,-29120,15001,-29132,14978,-29143,14956,-29155,14934,-29166,14911,-29178,14889,-29189,14866,-29201,14844,-29212,14822,-29223,14799,-29235,14777,-29246,14754,-29257,14732,-29269,14709,-29280,14687,-29291,14665,-29303,14642,-29314,14620,-29325,14597,-29336,14575,-29347,14552,-29359,14530,-29370,14507,-29381,14484,-29392,14462,-29403,14439,-29414,14417,-29425,14394,-29436,14372,-29447,14349,-29458,14326,-29469,14304,-29480,14281,-29491,14259,-29502,14236,-29513,14213,-29524,14191,-29535,14168,-29546,14145,-29557,14123,-29568,14100,-29578,14077,-29589,14055,-29600,14032,-29611,14009,-29622,13986,-29632,13964,-29643,13941,-29654,13918,-29664,13895,-29675,13873,-29686,13850,-29696,13827,-29707,13804,-29718,13782,-29728,13759,-29739,13736,-29749,13713,-29760,13690,-29770,13667,-29781,13645,-29791,13622,-29802,13599,-29812,13576,-29823,13553,-29833,13530,-29843,13507,-29854,13485,-29864,13462,-29874,13439,-29885,13416,-29895,13393,-29905,13370,-29916,13347,-29926,13324,-29936,13301,-29946,13278,-29956,13255,-29967,13232,-29977,13209,-29987,13186,-29997,13163,-30007,13140,-30017,13117,-30027,13094,-30037,13071,-30047,13048,-30057,13025,-30067,13002,-30077,12979,-30087,12956,-30097,12933,-30107,12909,-30117,12886,-30127,12863,-30137,12840,-30147,12817,-30157,12794,-30166,12771,-30176,12748,-30186,12724,-30196,12701,-30206,12678,-30215,12655,-30225,12632,-30235,12609,-30244,12585,-30254,12562,-30264,12539,-30273,12516,-30283,12492,-30292,12469,-30302,12446,-30312,12423,-30321,12399,-30331,12376,-30340,12353,-30350,12330,-30359,12306,-30369,12283,-30378,12260,-30387,12236,-30397,12213,-30406,12190,-30416,12166,-30425,12143,-30434,12120,-30443,12096,-30453,12073,-30462,12050,-30471,12026,-30481,12003,-30490,11980,-30499,11956,-30508,11933,-30517,11909,-30526,11886,-30536,11862,-30545,11839,-30554,11816,-30563,11792,-30572,11769,-30581,11745,-30590,11722,-30599,11698,-30608,11675,-30617,11651,-30626,11628,-30635,11604,-30644,11581,-30653,11557,-30661,11534,-30670,11510,-30679,11487,-30688,11463,-30697,11440,-30706,11416,-30714,11393,-30723,11369,-30732,11345,-30740,11322,-30749,11298,-30758,11275,-30767,11251,-30775,11227,-30784,11204,-30792,11180,-30801,11157,-30810,11133,-30818,11109,-30827,11086,-30835,11062,-30844,11038,-30852,11015,-30861,10991,-30869,10967,-30877,10944,-30886,10920,-30894,10896,-30903,10873,-30911,10849,-30919,10825,-30928,10801,-30936,10778,-30944,10754,-30952,10730,-30961,10706,-30969,10683,-30977,10659,-30985,10635,-30993,10611,-31002,10588,-31010,10564,-31018,10540,-31026,10516,-31034,10492,-31042,10469,-31050,10445,-31058,10421,-31066,10397,-31074,10373,-31082,10349,-31090,10326,-31098,10302,-31106,10278,-31114,10254,-31122,10230,-31129,10206,-31137,10182,-31145,10159,-31153,10135,-31161,10111,-31168,10087,-31176,10063,-31184,10039,-31192,10015,-31199,9991,-31207,9967,-31215,9943,-31222,9919,-31230,9895,-31237,9871,-31245,9847,-31253,9823,-31260,9799,-31268,9775,-31275,9751,-31283,9727,-31290,9703,-31298,9679,-31305,9655,-31312,9631,-31320,9607,-31327,9583,-31335,9559,-31342,9535,-31349,9511,-31357,9487,-31364,9463,-31371,9439,-31378,9415,-31386,9391,-31393,9367,-31400,9343,-31407,9319,-31414,9295,-31421,9270,-31429,9246,-31436,9222,-31443,9198,-31450,9174,-31457,9150,-31464,9126,-31471,9102,-31478,9077,-31485,9053,-31492,9029,-31499,9005,-31506,8981,-31513,8957,-31519,8932,-31526,8908,-31533,8884,-31540,8860,-31547,8836,-31554,8812,-31560,8787,-31567,8763,-31574,8739,-31581,8715,-31587,8690,-31594,8666,-31601,8642,-31607,8618,-31614,8593,-31620,8569,-31627,8545,-31634,8521,-31640,8496,-31647,8472,-31653,8448,-31660,8424,-31666,8399,-31673,8375,-31679,8351,-31685,8326,-31692,8302,-31698,8278,-31705,8253,-31711,8229,-31717,8205,-31724,8180,-31730,8156,-31736,8132,-31742,8107,-31749,8083,-31755,8059,-31761,8034,-31767,8010,-31773,7986,-31779,7961,-31786,7937,-31792,7912,-31798,7888,-31804,7864,-31810,7839,-31816,7815,-31822,7790,-31828,7766,-31834,7742,-31840,7717,-31846,7693,-31852,7668,-31857,7644,-31863,7619,-31869,7595,-31875,7571,-31881,7546,-31887,7522,-31892,7497,-31898,7473,-31904,7448,-31910,7424,-31915,7399,-31921,7375,-31927,7350,-31932,7326,-31938,7301,-31944,7277,-31949,7252,-31955,7228,-31960,7203,-31966,7179,-31971,7154,-31977,7130,-31982,7105,-31988,7081,-31993,7056,-31999,7032,-32004,7007,-32009,6982,-32015,6958,-32020,6933,-32025,6909,-32031,6884,-32036,6860,-32041,6835,-32047,6811,-32052,6786,-32057,6761,-32062,6737,-32067,6712,-32073,6688,-32078,6663,-32083,6638,-32088,6614,-32093,6589,-32098,6564,-32103,6540,-32108,6515,-32113,6491,-32118,6466,-32123,6441,-32128,6417,-32133,6392,-32138,6367,-32143,6343,-32148,6318,-32153,6293,-32157,6269,-32162,6244,-32167,6219,-32172,6195,-32177,6170,-32181,6145,-32186,6121,-32191,6096,-32195,6071,-32200,6047,-32205,6022,-32209,5997,-32214,5972,-32219,5948,-32223,5923,-32228,5898,-32232,5874,-32237,5849,-32241,5824,-32246,5799,-32250,5775,-32255,5750,-32259,5725,-32263,5700,-32268,5676,-32272,5651,-32276,5626,-32281,5601,-32285,5577,-32289,5552,-32294,5527,-32298,5502,-32302,5478,-32306,5453,-32311,5428,-32315,5403,-32319,5378,-32323,5354,-32327,5329,-32331,5304,-32335,5279,-32339,5254,-32343,5230,-32347,5205,-32351,5180,-32355,5155,-32359,5130,-32363,5106,-32367,5081,-32371,5056,-32375,5031,-32379,5006,-32383,4981,-32387,4957,-32390,4932,-32394,4907,-32398,4882,-32402,4857,-32405,4832,-32409,4807,-32413,4783,-32417,4758,-32420,4733,-32424,4708,-32427,4683,-32431,4658,-32435,4633,-32438,4608,-32442,4584,-32445,4559,-32449,4534,-32452,4509,-32456,4484,-32459,4459,-32463,4434,-32466,4409,-32469,4384,-32473,4359,-32476,4335,-32479,4310,-32483,4285,-32486,4260,-32489,4235,-32493,4210,-32496,4185,-32499,4160,-32502,4135,-32505,4110,-32509,4085,-32512,4060,-32515,4035,-32518,4011,-32521,3986,-32524,3961,-32527,3936,-32530,3911,-32533,3886,-32536,3861,-32539,3836,-32542,3811,-32545,3786,-32548,3761,-32551,3736,-32554,3711,-32557,3686,-32559,3661,-32562,3636,-32565,3611,-32568,3586,-32571,3561,-32573,3536,-32576,3511,-32579,3486,-32581,3461,-32584,3436,-32587,3411,-32589,3386,-32592,3361,-32595,3336,-32597,3311,-32600,3286,-32602,3261,-32605,3236,-32607,3211,-32610,3186,-32612,3161,-32615,3136,-32617,3111,-32619,3086,-32622,3061,-32624,3036,-32626,3011,-32629,2986,-32631,2961,-32633,2936,-32636,2911,-32638,2886,-32640,2861,-32642,2836,-32645,2811,-32647,2786,-32649,2761,-32651,2736,-32653,2711,-32655,2686,-32657,2661,-32659,2636,-32661,2610,-32663,2585,-32665,2560,-32667,2535,-32669,2510,-32671,2485,-32673,2460,-32675,2435,-32677,2410,-32679,2385,-32681,2360,-32682,2335,-32684,2310,-32686,2285,-32688,2260,-32689,2235,-32691,2209,-32693,2184,-32695,2159,-32696,2134,-32698,2109,-32700,2084,-32701,2059,-32703,2034,-32704,2009,-32706,1984,-32707,1959,-32709,1934,-32710,1908,-32712,1883,-32713,1858,-32715,1833,-32716,1808,-32718,1783,-32719,1758,-32720,1733,-32722,1708,-32723,1683,-32724,1658,-32726,1632,-32727,1607,-32728,1582,-32729,1557,-32730,1532,-32732,1507,-32733,1482,-32734,1457,-32735,1432,-32736,1406,-32737,1381,-32738,1356,-32739,1331,-32740,1306,-32741,1281,-32742,1256,-32743,1231,-32744,1206,-32745,1180,-32746,1155,-32747,1130,-32748,1105,-32749,1080,-32750,1055,-32751,1030,-32751,1005,-32752,980,-32753,954,-32754,929,-32754,904,-32755,879,-32756,854,-32756,829,-32757,804,-32758,779,-32758,753,-32759,728,-32759,703,-32760,678,-32760,653,-32761,628,-32761,603,-32762,578,-32762,552,-32763,527,-32763,502,-32764,477,-32764,452,-32764,427,-32765,402,-32765,376,-32765,351,-32766,326,-32766,301,-32766,276,-32766,251,-32767,226,-32767,201,-32767,175,-32767,150,-32767,125,-32767,100,-32767,75,-32767,50,-32767,25,-32767,0,-32767,-26,-32767,-51,-32767,-76,-32767,-101,-32767,-126,-32767,-151,-32767,-176,-32767,-202,-32767,-227,-32767,-252,-32767,-277,-32766,-302,-32766,-327,-32766,-352,-32766,-377,-32765,-403,-32765,-428,-32765,-453,-32764,-478,-32764,-503,-32764,-528,-32763,-553,-32763,-579,-32762,-604,-32762,-629,-32761,-654,-32761,-679,-32760,-704,-32760,-729,-32759,-754,-32759,-780,-32758,-805,-32758,-830,-32757,-855,-32756,-880,-32756,-905,-32755,-930,-32754,-955,-32754,-981,-32753,-1006,-32752,-1031,-32751,-1056,-32751,-1081,-32750,-1106,-32749,-1131,-32748,-1156,-32747,-1181,-32746,-1207,-32745,-1232,-32744,-1257,-32743,-1282,-32742,-1307,-32741,-1332,-32740,-1357,-32739,-1382,-32738,-1407,-32737,-1433,-32736,-1458,-32735,-1483,-32734,-1508,-32733,-1533,-32732,-1558,-32730,-1583,-32729,-1608,-32728,-1633,-32727,-1659,-32726,-1684,-32724,-1709,-32723,-1734,-32722,-1759,-32720,-1784,-32719,-1809,-32718,-1834,-32716,-1859,-32715,-1884,-32713,-1909,-32712,-1935,-32710,-1960,-32709,-1985,-32707,-2010,-32706,-2035,-32704,-2060,-32703,-2085,-32701,-2110,-32700,-2135,-32698,-2160,-32696,-2185,-32695,-2210,-32693,-2236,-32691,-2261,-32689,-2286,-32688,-2311,-32686,-2336,-32684,-2361,-32682,-2386,-32681,-2411,-32679,-2436,-32677,-2461,-32675,-2486,-32673,-2511,-32671,-2536,-32669,-2561,-32667,-2586,-32665,-2611,-32663,-2637,-32661,-2662,-32659,-2687,-32657,-2712,-32655,-2737,-32653,-2762,-32651,-2787,-32649,-2812,-32647,-2837,-32645,-2862,-32642,-2887,-32640,-2912,-32638,-2937,-32636,-2962,-32633,-2987,-32631,-3012,-32629,-3037,-32626,-3062,-32624,-3087,-32622,-3112,-32619,-3137,-32617,-3162,-32615,-3187,-32612,-3212,-32610,-3237,-32607,-3262,-32605,-3287,-32602,-3312,-32600,-3337,-32597,-3362,-32595,-3387,-32592,-3412,-32589,-3437,-32587,-3462,-32584,-3487,-32581,-3512,-32579,-3537,-32576,-3562,-32573,-3587,-32571,-3612,-32568,-3637,-32565,-3662,-32562,-3687,-32559,-3712,-32557,-3737,-32554,-3762,-32551,-3787,-32548,-3812,-32545,-3837,-32542,-3862,-32539,-3887,-32536,-3912,-32533,-3937,-32530,-3962,-32527,-3987,-32524,-4012,-32521,-4036,-32518,-4061,-32515,-4086,-32512,-4111,-32509,-4136,-32505,-4161,-32502,-4186,-32499,-4211,-32496,-4236,-32493,-4261,-32489,-4286,-32486,-4311,-32483,-4336,-32479,-4360,-32476,-4385,-32473,-4410,-32469,-4435,-32466,-4460,-32463,-4485,-32459,-4510,-32456,-4535,-32452,-4560,-32449,-4585,-32445,-4609,-32442,-4634,-32438,-4659,-32435,-4684,-32431,-4709,-32427,-4734,-32424,-4759,-32420,-4784,-32417,-4808,-32413,-4833,-32409,-4858,-32405,-4883,-32402,-4908,-32398,-4933,-32394,-4958,-32390,-4982,-32387,-5007,-32383,-5032,-32379,-5057,-32375,-5082,-32371,-5107,-32367,-5131,-32363,-5156,-32359,-5181,-32355,-5206,-32351,-5231,-32347,-5255,-32343,-5280,-32339,-5305,-32335,-5330,-32331,-5355,-32327,-5379,-32323,-5404,-32319,-5429,-32315,-5454,-32311,-5479,-32306,-5503,-32302,-5528,-32298,-5553,-32294,-5578,-32289,-5602,-32285,-5627,-32281,-5652,-32276,-5677,-32272,-5701,-32268,-5726,-32263,-5751,-32259,-5776,-32255,-5800,-32250,-5825,-32246,-5850,-32241,-5875,-32237,-5899,-32232,-5924,-32228,-5949,-32223,-5973,-32219,-5998,-32214,-6023,-32209,-6048,-32205,-6072,-32200,-6097,-32195,-6122,-32191,-6146,-32186,-6171,-32181,-6196,-32177,-6220,-32172,-6245,-32167,-6270,-32162,-6294,-32157,-6319,-32153,-6344,-32148,-6368,-32143,-6393,-32138,-6418,-32133,-6442,-32128,-6467,-32123,-6492,-32118,-6516,-32113,-6541,-32108,-6565,-32103,-6590,-32098,-6615,-32093,-6639,-32088,-6664,-32083,-6689,-32078,-6713,-32073,-6738,-32067,-6762,-32062,-6787,-32057,-6812,-32052,-6836,-32047,-6861,-32041,-6885,-32036,-6910,-32031,-6934,-32025,-6959,-32020,-6983,-32015,-7008,-32009,-7033,-32004,-7057,-31999,-7082,-31993,-7106,-31988,-7131,-31982,-7155,-31977,-7180,-31971,-7204,-31966,-7229,-31960,-7253,-31955,-7278,-31949,-7302,-31944,-7327,-31938,-7351,-31932,-7376,-31927,-7400,-31921,-7425,-31915,-7449,-31910,-7474,-31904,-7498,-31898,-7523,-31892,-7547,-31887,-7572,-31881,-7596,-31875,-7620,-31869,-7645,-31863,-7669,-31857,-7694,-31852,-7718,-31846,-7743,-31840,-7767,-31834,-7791,-31828,-7816,-31822,-7840,-31816,-7865,-31810,-7889,-31804,-7913,-31798,-7938,-31792,-7962,-31786,-7987,-31779,-8011,-31773,-8035,-31767,-8060,-31761,-8084,-31755,-8108,-31749,-8133,-31742,-8157,-31736,-8181,-31730,-8206,-31724,-8230,-31717,-8254,-31711,-8279,-31705,-8303,-31698,-8327,-31692,-8352,-31685,-8376,-31679,-8400,-31673,-8425,-31666,-8449,-31660,-8473,-31653,-8497,-31647,-8522,-31640,-8546,-31634,-8570,-31627,-8594,-31620,-8619,-31614,-8643,-31607,-8667,-31601,-8691,-31594,-8716,-31587,-8740,-31581,-8764,-31574,-8788,-31567,-8813,-31560,-8837,-31554,-8861,-31547,-8885,-31540,-8909,-31533,-8933,-31526,-8958,-31519,-8982,-31513,-9006,-31506,-9030,-31499,-9054,-31492,-9078,-31485,-9103,-31478,-9127,-31471,-9151,-31464,-9175,-31457,-9199,-31450,-9223,-31443,-9247,-31436,-9271,-31429,-9296,-31421,-9320,-31414,-9344,-31407,-9368,-31400,-9392,-31393,-9416,-31386,-9440,-31378,-9464,-31371,-9488,-31364,-9512,-31357,-9536,-31349,-9560,-31342,-9584,-31335,-9608,-31327,-9632,-31320,-9656,-31312,-9680,-31305,-9704,-31298,-9728,-31290,-9752,-31283,-9776,-31275,-9800,-31268,-9824,-31260,-9848,-31253,-9872,-31245,-9896,-31237,-9920,-31230,-9944,-31222,-9968,-31215,-9992,-31207,-10016,-31199,-10040,-31192,-10064,-31184,-10088,-31176,-10112,-31168,-10136,-31161,-10160,-31153,-10183,-31145,-10207,-31137,-10231,-31129,-10255,-31122,-10279,-31114,-10303,-31106,-10327,-31098,-10350,-31090,-10374,-31082,-10398,-31074,-10422,-31066,-10446,-31058,-10470,-31050,-10493,-31042,-10517,-31034,-10541,-31026,-10565,-31018,-10589,-31010,-10612,-31002,-10636,-30993,-10660,-30985,-10684,-30977,-10707,-30969,-10731,-30961,-10755,-30952,-10779,-30944,-10802,-30936,-10826,-30928,-10850,-30919,-10874,-30911,-10897,-30903,-10921,-30894,-10945,-30886,-10968,-30877,-10992,-30869,-11016,-30861,-11039,-30852,-11063,-30844,-11087,-30835,-11110,-30827,-11134,-30818,-11158,-30810,-11181,-30801,-11205,-30792,-11228,-30784,-11252,-30775,-11276,-30767,-11299,-30758,-11323,-30749,-11346,-30740,-11370,-30732,-11394,-30723,-11417,-30714,-11441,-30706,-11464,-30697,-11488,-30688,-11511,-30679,-11535,-30670,-11558,-30661,-11582,-30653,-11605,-30644,-11629,-30635,-11652,-30626,-11676,-30617,-11699,-30608,-11723,-30599,-11746,-30590,-11770,-30581,-11793,-30572,-11817,-30563,-11840,-30554,-11863,-30545,-11887,-30536,-11910,-30526,-11934,-30517,-11957,-30508,-11981,-30499,-12004,-30490,-12027,-30481,-12051,-30471,-12074,-30462,-12097,-30453,-12121,-30443,-12144,-30434,-12167,-30425,-12191,-30416,-12214,-30406,-12237,-30397,-12261,-30387,-12284,-30378,-12307,-30369,-12331,-30359,-12354,-30350,-12377,-30340,-12400,-30331,-12424,-30321,-12447,-30312,-12470,-30302,-12493,-30292,-12517,-30283,-12540,-30273,-12563,-30264,-12586,-30254,-12610,-30244,-12633,-30235,-12656,-30225,-12679,-30215,-12702,-30206,-12725,-30196,-12749,-30186,-12772,-30176,-12795,-30166,-12818,-30157,-12841,-30147,-12864,-30137,-12887,-30127,-12910,-30117,-12934,-30107,-12957,-30097,-12980,-30087,-13003,-30077,-13026,-30067,-13049,-30057,-13072,-30047,-13095,-30037,-13118,-30027,-13141,-30017,-13164,-30007,-13187,-29997,-13210,-29987,-13233,-29977,-13256,-29967,-13279,-29956,-13302,-29946,-13325,-29936,-13348,-29926,-13371,-29916,-13394,-29905,-13417,-29895,-13440,-29885,-13463,-29874,-13486,-29864,-13508,-29854,-13531,-29843,-13554,-29833,-13577,-29823,-13600,-29812,-13623,-29802,-13646,-29791,-13668,-29781,-13691,-29770,-13714,-29760,-13737,-29749,-13760,-29739,-13783,-29728,-13805,-29718,-13828,-29707,-13851,-29696,-13874,-29686,-13896,-29675,-13919,-29664,-13942,-29654,-13965,-29643,-13987,-29632,-14010,-29622,-14033,-29611,-14056,-29600,-14078,-29589,-14101,-29578,-14124,-29568,-14146,-29557,-14169,-29546,-14192,-29535,-14214,-29524,-14237,-29513,-14260,-29502,-14282,-29491,-14305,-29480,-14327,-29469,-14350,-29458,-14373,-29447,-14395,-29436,-14418,-29425,-14440,-29414,-14463,-29403,-14485,-29392,-14508,-29381,-14531,-29370,-14553,-29359,-14576,-29347,-14598,-29336,-14621,-29325,-14643,-29314,-14666,-29303,-14688,-29291,-14710,-29280,-14733,-29269,-14755,-29257,-14778,-29246,-14800,-29235,-14823,-29223,-14845,-29212,-14867,-29201,-14890,-29189,-14912,-29178,-14935,-29166,-14957,-29155,-14979,-29143,-15002,-29132,-15024,-29120,-15046,-29109,-15069,-29097,-15091,-29086,-15113,-29074,-15136,-29063,-15158,-29051,-15180,-29039,-15202,-29028,-15225,-29016,-15247,-29004,-15269,-28993,-15291,-28981,-15314,-28969,-15336,-28957,-15358,-28946,-15380,-28934,-15402,-28922,-15425,-28910,-15447,-28898,-15469,-28887,-15491,-28875,-15513,-28863,-15535,-28851,-15557,-28839,-15580,-28827,-15602,-28815,-15624,-28803,-15646,-28791,-15668,-28779,-15690,-28767,-15712,-28755,-15734,-28743,-15756,-28731,-15778,-28719,-15800,-28707,-15822,-28695,-15844,-28682,-15866,-28670,-15888,-28658,-15910,-28646,-15932,-28634,-15954,-28621,-15976,-28609,-15998,-28597,-16020,-28585,-16042,-28572,-16064,-28560,-16086,-28548,-16108,-28535,-16129,-28523,-16151,-28511,-16173,-28498,-16195,-28486,-16217,-28473,-16239,-28461,-16261,-28448,-16282,-28436,-16304,-28424,-16326,-28411,-16348,-28398,-16369,-28386,-16391,-28373,-16413,-28361,-16435,-28348,-16456,-28336,-16478,-28323,-16500,-28310,-16522,-28298,-16543,-28285,-16565,-28272,-16587,-28260,-16608,-28247,-16630,-28234,-16652,-28221,-16673,-28209,-16695,-28196,-16717,-28183,-16738,-28170,-16760,-28157,-16781,-28144,-16803,-28132,-16825,-28119,-16846,-28106,-16868,-28093,-16889,-28080,-16911,-28067,-16932,-28054,-16954,-28041,-16975,-28028,-16997,-28015,-17018,-28002,-17040,-27989,-17061,-27976,-17083,-27963,-17104,-27949,-17125,-27936,-17147,-27923,-17168,-27910,-17190,-27897,-17211,-27884,-17233,-27870,-17254,-27857,-17275,-27844,-17297,-27831,-17318,-27817,-17339,-27804,-17361,-27791,-17382,-27778,-17403,-27764,-17424,-27751,-17446,-27737,-17467,-27724,-17488,-27711,-17510,-27697,-17531,-27684,-17552,-27670,-17573,-27657,-17594,-27643,-17616,-27630,-17637,-27616,-17658,-27603,-17679,-27589,-17700,-27576,-17721,-27562,-17743,-27549,-17764,-27535,-17785,-27521,-17806,-27508,-17827,-27494,-17848,-27480,-17869,-27467,-17890,-27453,-17911,-27439,-17932,-27425,-17953,-27412,-17974,-27398,-17995,-27384,-18016,-27370,-18037,-27356,-18058,-27343,-18079,-27329,-18100,-27315,-18121,-27301,-18142,-27287,-18163,-27273,-18184,-27259,-18205,-27245,-18226,-27231,-18247,-27217,-18268,-27203,-18288,-27189,-18309,-27175,-18330,-27161,-18351,-27147,-18372,-27133,-18393,-27119,-18413,-27105,-18434,-27091,-18455,-27077,-18476,-27062,-18496,-27048,-18517,-27034,-18538,-27020,-18559,-27006,-18579,-26991,-18600,-26977,-18621,-26963,-18641,-26949,-18662,-26934,-18683,-26920,-18703,-26906,-18724,-26891,-18745,-26877,-18765,-26862,-18786,-26848,-18806,-26834,-18827,-26819,-18847,-26805,-18868,-26790,-18889,-26776,-18909,-26761,-18930,-26747,-18950,-26732,-18971,-26718,-18991,-26703,-19012,-26689,-19032,-26674,-19052,-26659,-19073,-26645,-19093,-26630,-19114,-26616,-19134,-26601,-19155,-26586,-19175,-26571,-19195,-26557,-19216,-26542,-19236,-26527,-19256,-26513,-19277,-26498,-19297,-26483,-19317,-26468,-19338,-26453,-19358,-26438,-19378,-26424,-19398,-26409,-19419,-26394,-19439,-26379,-19459,-26364,-19479,-26349,-19500,-26334,-19520,-26319,-19540,-26304,-19560,-26289,-19580,-26274,-19600,-26259,-19621,-26244,-19641,-26229,-19661,-26214,-19681,-26199,-19701,-26184,-19721,-26169,-19741,-26154,-19761,-26138,-19781,-26123,-19801,-26108,-19821,-26093,-19841,-26078,-19861,-26062,-19881,-26047,-19901,-26032,-19921,-26017,-19941,-26001,-19961,-25986,-19981,-25971,-20001,-25955,-20021,-25940,-20041,-25925,-20061,-25909,-20080,-25894,-20100,-25879,-20120,-25863,-20140,-25848,-20160,-25832,-20180,-25817,-20199,-25801,-20219,-25786,-20239,-25770,-20259,-25755,-20278,-25739,-20298,-25724,-20318,-25708,-20338,-25692,-20357,-25677,-20377,-25661,-20397,-25646,-20416,-25630,-20436,-25614,-20456,-25599,-20475,-25583,-20495,-25567,-20514,-25551,-20534,-25536,-20554,-25520,-20573,-25504,-20593,-25488,-20612,-25473,-20632,-25457,-20651,-25441,-20671,-25425,-20690,-25409,-20710,-25393,-20729,-25377,-20749,-25362,-20768,-25346,-20788,-25330,-20807,-25314,-20826,-25298,-20846,-25282,-20865,-25266,-20885,-25250,-20904,-25234,-20923,-25218,-20943,-25202,-20962,-25186,-20981,-25170,-21001,-25153,-21020,-25137,-21039,-25121,-21058,-25105,-21078,-25089,-21097,-25073,-21116,-25057,-21135,-25040,-21155,-25024,-21174,-25008,-21193,-24992,-21212,-24975,-21231,-24959,-21250,-24943,-21269,-24927,-21289,-24910,-21308,-24894,-21327,-24878,-21346,-24861,-21365,-24845,-21384,-24828,-21403,-24812,-21422,-24796,-21441,-24779,-21460,-24763,-21479,-24746,-21498,-24730,-21517,-24713,-21536,-24697,-21555,-24680,-21574,-24664,-21593,-24647,-21612,-24631,-21630,-24614,-21649,-24597,-21668,-24581,-21687,-24564,-21706,-24547,-21725,-24531,-21744,-24514,-21762,-24497,-21781,-24481,-21800,-24464,-21819,-24447,-21837,-24431,-21856,-24414,-21875,-24397,-21894,-24380,-21912,-24363,-21931,-24347,-21950,-24330,-21968,-24313,-21987,-24296,-22005,-24279,-22024,-24262,-22043,-24245,-22061,-24229,-22080,-24212,-22098,-24195,-22117,-24178,-22136,-24161,-22154,-24144,-22173,-24127,-22191,-24110,-22210,-24093,-22228,-24076,-22246,-24059,-22265,-24042,-22283,-24024,-22302,-24007,-22320,-23990,-22339,-23973,-22357,-23956,-22375,-23939,-22394,-23922,-22412,-23904,-22430,-23887,-22449,-23870,-22467,-23853,-22485,-23836,-22504,-23818,-22522,-23801,-22540,-23784,-22558,-23767,-22576,-23749,-22595,-23732,-22613,-23715,-22631,-23697,-22649,-23680,-22667,-23662,-22686,-23645,-22704,-23628,-22722,-23610,-22740,-23593,-22758,-23575,-22776,-23558,-22794,-23540,-22812,-23523,-22830,-23505,-22848,-23488,-22866,-23470,-22884,-23453,-22902,-23435,-22920,-23418,-22938,-23400,-22956,-23383,-22974,-23365,-22992,-23347,-23010,-23330,-23028,-23312,-23046,-23294,-23063,-23277,-23081,-23259,-23099,-23241,-23117,-23224,-23135,-23206,-23152,-23188,-23170,-23170,-23188,-23152,-23206,-23135,-23224,-23117,-23241,-23099,-23259,-23081,-23277,-23063,-23294,-23046,-23312,-23028,-23330,-23010,-23347,-22992,-23365,-22974,-23383,-22956,-23400,-22938,-23418,-22920,-23435,-22902,-23453,-22884,-23470,-22866,-23488,-22848,-23505,-22830,-23523,-22812,-23540,-22794,-23558,-22776,-23575,-22758,-23593,-22740,-23610,-22722,-23628,-22704,-23645,-22686,-23662,-22667,-23680,-22649,-23697,-22631,-23715,-22613,-23732,-22595,-23749,-22576,-23767,-22558,-23784,-22540,-23801,-22522,-23818,-22504,-23836,-22485,-23853,-22467,-23870,-22449,-23887,-22430,-23904,-22412,-23922,-22394,-23939,-22375,-23956,-22357,-23973,-22339,-23990,-22320,-24007,-22302,-24024,-22283,-24042,-22265,-24059,-22246,-24076,-22228,-24093,-22210,-24110,-22191,-24127,-22173,-24144,-22154,-24161,-22136,-24178,-22117,-24195,-22098,-24212,-22080,-24229,-22061,-24245,-22043,-24262,-22024,-24279,-22005,-24296,-21987,-24313,-21968,-24330,-21950,-24347,-21931,-24363,-21912,-24380,-21894,-24397,-21875,-24414,-21856,-24431,-21837,-24447,-21819,-24464,-21800,-24481,-21781,-24497,-21762,-24514,-21744,-24531,-21725,-24547,-21706,-24564,-21687,-24581,-21668,-24597,-21649,-24614,-21630,-24631,-21612,-24647,-21593,-24664,-21574,-24680,-21555,-24697,-21536,-24713,-21517,-24730,-21498,-24746,-21479,-24763,-21460,-24779,-21441,-24796,-21422,-24812,-21403,-24828,-21384,-24845,-21365,-24861,-21346,-24878,-21327,-24894,-21308,-24910,-21289,-24927,-21269,-24943,-21250,-24959,-21231,-24975,-21212,-24992,-21193,-25008,-21174,-25024,-21155,-25040,-21135,-25057,-21116,-25073,-21097,-25089,-21078,-25105,-21058,-25121,-21039,-25137,-21020,-25153,-21001,-25170,-20981,-25186,-20962,-25202,-20943,-25218,-20923,-25234,-20904,-25250,-20885,-25266,-20865,-25282,-20846,-25298,-20826,-25314,-20807,-25330,-20788,-25346,-20768,-25362,-20749,-25377,-20729,-25393,-20710,-25409,-20690,-25425,-20671,-25441,-20651,-25457,-20632,-25473,-20612,-25488,-20593,-25504,-20573,-25520,-20554,-25536,-20534,-25551,-20514,-25567,-20495,-25583,-20475,-25599,-20456,-25614,-20436,-25630,-20416,-25646,-20397,-25661,-20377,-25677,-20357,-25692,-20338,-25708,-20318,-25724,-20298,-25739,-20278,-25755,-20259,-25770,-20239,-25786,-20219,-25801,-20199,-25817,-20180,-25832,-20160,-25848,-20140,-25863,-20120,-25879,-20100,-25894,-20080,-25909,-20061,-25925,-20041,-25940,-20021,-25955,-20001,-25971,-19981,-25986,-19961,-26001,-19941,-26017,-19921,-26032,-19901,-26047,-19881,-26062,-19861,-26078,-19841,-26093,-19821,-26108,-19801,-26123,-19781,-26138,-19761,-26154,-19741,-26169,-19721,-26184,-19701,-26199,-19681,-26214,-19661,-26229,-19641,-26244,-19621,-26259,-19600,-26274,-19580,-26289,-19560,-26304,-19540,-26319,-19520,-26334,-19500,-26349,-19479,-26364,-19459,-26379,-19439,-26394,-19419,-26409,-19398,-26424,-19378,-26438,-19358,-26453,-19338,-26468,-19317,-26483,-19297,-26498,-19277,-26513,-19256,-26527,-19236,-26542,-19216,-26557,-19195,-26571,-19175,-26586,-19155,-26601,-19134,-26616,-19114,-26630,-19093,-26645,-19073,-26659,-19052,-26674,-19032,-26689,-19012,-26703,-18991,-26718,-18971,-26732,-18950,-26747,-18930,-26761,-18909,-26776,-18889,-26790,-18868,-26805,-18847,-26819,-18827,-26834,-18806,-26848,-18786,-26862,-18765,-26877,-18745,-26891,-18724,-26906,-18703,-26920,-18683,-26934,-18662,-26949,-18641,-26963,-18621,-26977,-18600,-26991,-18579,-27006,-18559,-27020,-18538,-27034,-18517,-27048,-18496,-27062,-18476,-27077,-18455,-27091,-18434,-27105,-18413,-27119,-18393,-27133,-18372,-27147,-18351,-27161,-18330,-27175,-18309,-27189,-18288,-27203,-18268,-27217,-18247,-27231,-18226,-27245,-18205,-27259,-18184,-27273,-18163,-27287,-18142,-27301,-18121,-27315,-18100,-27329,-18079,-27343,-18058,-27356,-18037,-27370,-18016,-27384,-17995,-27398,-17974,-27412,-17953,-27425,-17932,-27439,-17911,-27453,-17890,-27467,-17869,-27480,-17848,-27494,-17827,-27508,-17806,-27521,-17785,-27535,-17764,-27549,-17743,-27562,-17721,-27576,-17700,-27589,-17679,-27603,-17658,-27616,-17637,-27630,-17616,-27643,-17594,-27657,-17573,-27670,-17552,-27684,-17531,-27697,-17510,-27711,-17488,-27724,-17467,-27737,-17446,-27751,-17424,-27764,-17403,-27778,-17382,-27791,-17361,-27804,-17339,-27817,-17318,-27831,-17297,-27844,-17275,-27857,-17254,-27870,-17233,-27884,-17211,-27897,-17190,-27910,-17168,-27923,-17147,-27936,-17125,-27949,-17104,-27963,-17083,-27976,-17061,-27989,-17040,-28002,-17018,-28015,-16997,-28028,-16975,-28041,-16954,-28054,-16932,-28067,-16911,-28080,-16889,-28093,-16868,-28106,-16846,-28119,-16825,-28132,-16803,-28144,-16781,-28157,-16760,-28170,-16738,-28183,-16717,-28196,-16695,-28209,-16673,-28221,-16652,-28234,-16630,-28247,-16608,-28260,-16587,-28272,-16565,-28285,-16543,-28298,-16522,-28310,-16500,-28323,-16478,-28336,-16456,-28348,-16435,-28361,-16413,-28373,-16391,-28386,-16369,-28398,-16348,-28411,-16326,-28424,-16304,-28436,-16282,-28448,-16261,-28461,-16239,-28473,-16217,-28486,-16195,-28498,-16173,-28511,-16151,-28523,-16129,-28535,-16108,-28548,-16086,-28560,-16064,-28572,-16042,-28585,-16020,-28597,-15998,-28609,-15976,-28621,-15954,-28634,-15932,-28646,-15910,-28658,-15888,-28670,-15866,-28682,-15844,-28695,-15822,-28707,-15800,-28719,-15778,-28731,-15756,-28743,-15734,-28755,-15712,-28767,-15690,-28779,-15668,-28791,-15646,-28803,-15624,-28815,-15602,-28827,-15580,-28839,-15557,-28851,-15535,-28863,-15513,-28875,-15491,-28887,-15469,-28898,-15447,-28910,-15425,-28922,-15402,-28934,-15380,-28946,-15358,-28957,-15336,-28969,-15314,-28981,-15291,-28993,-15269,-29004,-15247,-29016,-15225,-29028,-15202,-29039,-15180,-29051,-15158,-29063,-15136,-29074,-15113,-29086,-15091,-29097,-15069,-29109,-15046,-29120,-15024,-29132,-15002,-29143,-14979,-29155,-14957,-29166,-14935,-29178,-14912,-29189,-14890,-29201,-14867,-29212,-14845,-29223,-14823,-29235,-14800,-29246,-14778,-29257,-14755,-29269,-14733,-29280,-14710,-29291,-14688,-29303,-14666,-29314,-14643,-29325,-14621,-29336,-14598,-29347,-14576,-29359,-14553,-29370,-14531,-29381,-14508,-29392,-14485,-29403,-14463,-29414,-14440,-29425,-14418,-29436,-14395,-29447,-14373,-29458,-14350,-29469,-14327,-29480,-14305,-29491,-14282,-29502,-14260,-29513,-14237,-29524,-14214,-29535,-14192,-29546,-14169,-29557,-14146,-29568,-14124,-29578,-14101,-29589,-14078,-29600,-14056,-29611,-14033,-29622,-14010,-29632,-13987,-29643,-13965,-29654,-13942,-29664,-13919,-29675,-13896,-29686,-13874,-29696,-13851,-29707,-13828,-29718,-13805,-29728,-13783,-29739,-13760,-29749,-13737,-29760,-13714,-29770,-13691,-29781,-13668,-29791,-13646,-29802,-13623,-29812,-13600,-29823,-13577,-29833,-13554,-29843,-13531,-29854,-13508,-29864,-13486,-29874,-13463,-29885,-13440,-29895,-13417,-29905,-13394,-29916,-13371,-29926,-13348,-29936,-13325,-29946,-13302,-29956,-13279,-29967,-13256,-29977,-13233,-29987,-13210,-29997,-13187,-30007,-13164,-30017,-13141,-30027,-13118,-30037,-13095,-30047,-13072,-30057,-13049,-30067,-13026,-30077,-13003,-30087,-12980,-30097,-12957,-30107,-12934,-30117,-12910,-30127,-12887,-30137,-12864,-30147,-12841,-30157,-12818,-30166,-12795,-30176,-12772,-30186,-12749,-30196,-12725,-30206,-12702,-30215,-12679,-30225,-12656,-30235,-12633,-30244,-12610,-30254,-12586,-30264,-12563,-30273,-12540,-30283,-12517,-30292,-12493,-30302,-12470,-30312,-12447,-30321,-12424,-30331,-12400,-30340,-12377,-30350,-12354,-30359,-12331,-30369,-12307,-30378,-12284,-30387,-12261,-30397,-12237,-30406,-12214,-30416,-12191,-30425,-12167,-30434,-12144,-30443,-12121,-30453,-12097,-30462,-12074,-30471,-12051,-30481,-12027,-30490,-12004,-30499,-11981,-30508,-11957,-30517,-11934,-30526,-11910,-30536,-11887,-30545,-11863,-30554,-11840,-30563,-11817,-30572,-11793,-30581,-11770,-30590,-11746,-30599,-11723,-30608,-11699,-30617,-11676,-30626,-11652,-30635,-11629,-30644,-11605,-30653,-11582,-30661,-11558,-30670,-11535,-30679,-11511,-30688,-11488,-30697,-11464,-30706,-11441,-30714,-11417,-30723,-11394,-30732,-11370,-30740,-11346,-30749,-11323,-30758,-11299,-30767,-11276,-30775,-11252,-30784,-11228,-30792,-11205,-30801,-11181,-30810,-11158,-30818,-11134,-30827,-11110,-30835,-11087,-30844,-11063,-30852,-11039,-30861,-11016,-30869,-10992,-30877,-10968,-30886,-10945,-30894,-10921,-30903,-10897,-30911,-10874,-30919,-10850,-30928,-10826,-30936,-10802,-30944,-10779,-30952,-10755,-30961,-10731,-30969,-10707,-30977,-10684,-30985,-10660,-30993,-10636,-31002,-10612,-31010,-10589,-31018,-10565,-31026,-10541,-31034,-10517,-31042,-10493,-31050,-10470,-31058,-10446,-31066,-10422,-31074,-10398,-31082,-10374,-31090,-10350,-31098,-10327,-31106,-10303,-31114,-10279,-31122,-10255,-31129,-10231,-31137,-10207,-31145,-10183,-31153,-10160,-31161,-10136,-31168,-10112,-31176,-10088,-31184,-10064,-31192,-10040,-31199,-10016,-31207,-9992,-31215,-9968,-31222,-9944,-31230,-9920,-31237,-9896,-31245,-9872,-31253,-9848,-31260,-9824,-31268,-9800,-31275,-9776,-31283,-9752,-31290,-9728,-31298,-9704,-31305,-9680,-31312,-9656,-31320,-9632,-31327,-9608,-31335,-9584,-31342,-9560,-31349,-9536,-31357,-9512,-31364,-9488,-31371,-9464,-31378,-9440,-31386,-9416,-31393,-9392,-31400,-9368,-31407,-9344,-31414,-9320,-31421,-9296,-31429,-9271,-31436,-9247,-31443,-9223,-31450,-9199,-31457,-9175,-31464,-9151,-31471,-9127,-31478,-9103,-31485,-9078,-31492,-9054,-31499,-9030,-31506,-9006,-31513,-8982,-31519,-8958,-31526,-8933,-31533,-8909,-31540,-8885,-31547,-8861,-31554,-8837,-31560,-8813,-31567,-8788,-31574,-8764,-31581,-8740,-31587,-8716,-31594,-8691,-31601,-8667,-31607,-8643,-31614,-8619,-31620,-8594,-31627,-8570,-31634,-8546,-31640,-8522,-31647,-8497,-31653,-8473,-31660,-8449,-31666,-8425,-31673,-8400,-31679,-8376,-31685,-8352,-31692,-8327,-31698,-8303,-31705,-8279,-31711,-8254,-31717,-8230,-31724,-8206,-31730,-8181,-31736,-8157,-31742,-8133,-31749,-8108,-31755,-8084,-31761,-8060,-31767,-8035,-31773,-8011,-31779,-7987,-31786,-7962,-31792,-7938,-31798,-7913,-31804,-7889,-31810,-7865,-31816,-7840,-31822,-7816,-31828,-7791,-31834,-7767,-31840,-7743,-31846,-7718,-31852,-7694,-31857,-7669,-31863,-7645,-31869,-7620,-31875,-7596,-31881,-7572,-31887,-7547,-31892,-7523,-31898,-7498,-31904,-7474,-31910,-7449,-31915,-7425,-31921,-7400,-31927,-7376,-31932,-7351,-31938,-7327,-31944,-7302,-31949,-7278,-31955,-7253,-31960,-7229,-31966,-7204,-31971,-7180,-31977,-7155,-31982,-7131,-31988,-7106,-31993,-7082,-31999,-7057,-32004,-7033,-32009,-7008,-32015,-6983,-32020,-6959,-32025,-6934,-32031,-6910,-32036,-6885,-32041,-6861,-32047,-6836,-32052,-6812,-32057,-6787,-32062,-6762,-32067,-6738,-32073,-6713,-32078,-6689,-32083,-6664,-32088,-6639,-32093,-6615,-32098,-6590,-32103,-6565,-32108,-6541,-32113,-6516,-32118,-6492,-32123,-6467,-32128,-6442,-32133,-6418,-32138,-6393,-32143,-6368,-32148,-6344,-32153,-6319,-32157,-6294,-32162,-6270,-32167,-6245,-32172,-6220,-32177,-6196,-32181,-6171,-32186,-6146,-32191,-6122,-32195,-6097,-32200,-6072,-32205,-6048,-32209,-6023,-32214,-5998,-32219,-5973,-32223,-5949,-32228,-5924,-32232,-5899,-32237,-5875,-32241,-5850,-32246,-5825,-32250,-5800,-32255,-5776,-32259,-5751,-32263,-5726,-32268,-5701,-32272,-5677,-32276,-5652,-32281,-5627,-32285,-5602,-32289,-5578,-32294,-5553,-32298,-5528,-32302,-5503,-32306,-5479,-32311,-5454,-32315,-5429,-32319,-5404,-32323,-5379,-32327,-5355,-32331,-5330,-32335,-5305,-32339,-5280,-32343,-5255,-32347,-5231,-32351,-5206,-32355,-5181,-32359,-5156,-32363,-5131,-32367,-5107,-32371,-5082,-32375,-5057,-32379,-5032,-32383,-5007,-32387,-4982,-32390,-4958,-32394,-4933,-32398,-4908,-32402,-4883,-32405,-4858,-32409,-4833,-32413,-4808,-32417,-4784,-32420,-4759,-32424,-4734,-32427,-4709,-32431,-4684,-32435,-4659,-32438,-4634,-32442,-4609,-32445,-4585,-32449,-4560,-32452,-4535,-32456,-4510,-32459,-4485,-32463,-4460,-32466,-4435,-32469,-4410,-32473,-4385,-32476,-4360,-32479,-4336,-32483,-4311,-32486,-4286,-32489,-4261,-32493,-4236,-32496,-4211,-32499,-4186,-32502,-4161,-32505,-4136,-32509,-4111,-32512,-4086,-32515,-4061,-32518,-4036,-32521,-4012,-32524,-3987,-32527,-3962,-32530,-3937,-32533,-3912,-32536,-3887,-32539,-3862,-32542,-3837,-32545,-3812,-32548,-3787,-32551,-3762,-32554,-3737,-32557,-3712,-32559,-3687,-32562,-3662,-32565,-3637,-32568,-3612,-32571,-3587,-32573,-3562,-32576,-3537,-32579,-3512,-32581,-3487,-32584,-3462,-32587,-3437,-32589,-3412,-32592,-3387,-32595,-3362,-32597,-3337,-32600,-3312,-32602,-3287,-32605,-3262,-32607,-3237,-32610,-3212,-32612,-3187,-32615,-3162,-32617,-3137,-32619,-3112,-32622,-3087,-32624,-3062,-32626,-3037,-32629,-3012,-32631,-2987,-32633,-2962,-32636,-2937,-32638,-2912,-32640,-2887,-32642,-2862,-32645,-2837,-32647,-2812,-32649,-2787,-32651,-2762,-32653,-2737,-32655,-2712,-32657,-2687,-32659,-2662,-32661,-2637,-32663,-2611,-32665,-2586,-32667,-2561,-32669,-2536,-32671,-2511,-32673,-2486,-32675,-2461,-32677,-2436,-32679,-2411,-32681,-2386,-32682,-2361,-32684,-2336,-32686,-2311,-32688,-2286,-32689,-2261,-32691,-2236,-32693,-2210,-32695,-2185,-32696,-2160,-32698,-2135,-32700,-2110,-32701,-2085,-32703,-2060,-32704,-2035,-32706,-2010,-32707,-1985,-32709,-1960,-32710,-1935,-32712,-1909,-32713,-1884,-32715,-1859,-32716,-1834,-32718,-1809,-32719,-1784,-32720,-1759,-32722,-1734,-32723,-1709,-32724,-1684,-32726,-1659,-32727,-1633,-32728,-1608,-32729,-1583,-32730,-1558,-32732,-1533,-32733,-1508,-32734,-1483,-32735,-1458,-32736,-1433,-32737,-1407,-32738,-1382,-32739,-1357,-32740,-1332,-32741,-1307,-32742,-1282,-32743,-1257,-32744,-1232,-32745,-1207,-32746,-1181,-32747,-1156,-32748,-1131,-32749,-1106,-32750,-1081,-32751,-1056,-32751,-1031,-32752,-1006,-32753,-981,-32754,-955,-32754,-930,-32755,-905,-32756,-880,-32756,-855,-32757,-830,-32758,-805,-32758,-780,-32759,-754,-32759,-729,-32760,-704,-32760,-679,-32761,-654,-32761,-629,-32762,-604,-32762,-579,-32763,-553,-32763,-528,-32764,-503,-32764,-478,-32764,-453,-32765,-428,-32765,-403,-32765,-377,-32766,-352,-32766,-327,-32766,-302,-32766,-277,-32767,-252,-32767,-227,-32767,-202,-32767,-176,-32767,-151,-32767,-126,-32767,-101,-32767,-76,-32767,-51,-32767,-26};
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index 189629566b..db8d5dc7c3 100755
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -278,6 +278,9 @@ typedef struct PHY_VARS_eNB_s {
int **dl_precoder_SeNB[3];
char log2_maxp; /// holds the maximum channel/precoder coefficient
+ /// if ==0 enables phy only test mode
+ int mac_enabled;
+
/// For emulation only (used by UE abstraction to retrieve DCI)
uint8_t num_common_dci[2]; // num_dci in even/odd subframes
uint8_t num_ue_spec_dci[2]; // num_dci in even/odd subframes
@@ -583,6 +586,9 @@ typedef struct {
/// holds the maximum channel/precoder coefficient
char log2_maxp;
+ /// if ==0 enables phy only test mode
+ int mac_enabled;
+
/// Flag to initialize averaging of PHY measurements
int init_averaging;
diff --git a/openair1/SCHED/phy_mac_stub.c b/openair1/SCHED/phy_mac_stub.c
new file mode 100644
index 0000000000..9bcba1072c
--- /dev/null
+++ b/openair1/SCHED/phy_mac_stub.c
@@ -0,0 +1,756 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+
+/*! \file phy_mac_stub.c
+ * \brief stimulates the phy without mac
+ * \author R. Knopp, F. Kaltenberger, N. Nikaein
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,navid.nikaein@eurecom.fr
+ * \note
+ * \warning
+ */
+
+#include "PHY/defs.h"
+#include "PHY/extern.h"
+#include "MAC_INTERFACE/defs.h"
+#include "MAC_INTERFACE/extern.h"
+#include "SCHED/defs.h"
+#include "SCHED/extern.h"
+#include "LAYER2/MAC/extern.h"
+
+#ifdef EMOS
+#include "SCHED/phy_procedures_emos.h"
+#endif
+
+void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_eNB)
+{
+
+ int i;
+ uint8_t cooperation_flag = phy_vars_eNB->cooperation_flag;
+ uint8_t transmission_mode = phy_vars_eNB->transmission_mode[0];
+
+ uint32_t rballoc = 0x7FFF;
+ uint32_t rballoc2 = 0x000F;
+ int subframe = phy_vars_eNB->proc[sched_subframe].subframe_tx;
+
+ LTE_eNB_DLSCH_t *DLSCH_ptr = phy_vars_eNB->dlsch_eNB[0][0];
+
+ /*
+ uint32_t rand = taus();
+ if ((subframe==8) || (subframe==9) || (subframe==0))
+ rand = (rand%5)+5;
+ else
+ rand = (rand%4)+5;
+ */
+ uint32_t bcch_pdu;
+ uint64_t dlsch_pdu;
+
+ DCI_pdu->Num_common_dci = 0;
+ DCI_pdu->Num_ue_spec_dci=0;
+
+ switch (subframe) {
+ case 5:
+ DCI_pdu->Num_common_dci = 1;
+ DCI_pdu->dci_alloc[0].L = 2;
+ DCI_pdu->dci_alloc[0].rnti = SI_RNTI;
+ DCI_pdu->dci_alloc[0].format = format1A;
+ DCI_pdu->dci_alloc[0].ra_flag = 0;
+
+ switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
+ case 6:
+ if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_1_5MHz_FDD_t;
+ ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->type = 1;
+ ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
+ ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
+ ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->rv = 1;
+ ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->mcs = 1;
+ ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
+ ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_1_5MHz_TDD_1_6_t));
+ } else {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_1_5MHz_TDD_1_6_t;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0;
+ ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_1_5MHz_TDD_1_6_t));
+ }
+
+ break;
+
+ case 25:
+ default:
+ if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_FDD_t;
+ ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->type = 1;
+ ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
+ ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
+ ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->rv = 1;
+ ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->mcs = 1;
+ ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
+ ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
+ } else {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
+ ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
+ ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
+ ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0;
+ ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
+ }
+
+ break;
+
+ case 50:
+ if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_10MHz_FDD_t;
+ ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->type = 1;
+ ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
+ ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
+ ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->rv = 1;
+ ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->mcs = 1;
+ ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
+ ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_10MHz_TDD_1_6_t));
+ } else {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_10MHz_TDD_1_6_t;
+ ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
+ ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
+ ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
+ ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
+ ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
+ ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
+ ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_10MHz_TDD_1_6_t));
+ }
+
+ break;
+
+ case 100:
+ if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_20MHz_FDD_t;
+ ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->type = 1;
+ ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
+ ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
+ ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->rv = 1;
+ ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->mcs = 1;
+ ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
+ ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_20MHz_TDD_1_6_t));
+ } else {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_20MHz_TDD_1_6_t;
+ ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
+ ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
+ ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
+ ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
+ ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
+ ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0;
+ ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_20MHz_TDD_1_6_t));
+ }
+
+ break;
+ }
+ break; //subframe switch
+
+ /*
+ case 6:
+ DCI_pdu->Num_ue_spec_dci = 1;
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI2_5MHz_2A_M10PRB_TDD_t;
+ DCI_pdu->dci_alloc[0].L = 2;
+ DCI_pdu->dci_alloc[0].rnti = 0x1236;
+ DCI_pdu->dci_alloc[0].format = format2_2A_M10PRB;
+ DCI_pdu->dci_alloc[0].ra_flag = 0;
+
+ DLSCH_alloc_pdu1.rballoc = 0x00ff;
+ DLSCH_alloc_pdu1.TPC = 0;
+ DLSCH_alloc_pdu1.dai = 0;
+ DLSCH_alloc_pdu1.harq_pid = 0;
+ DLSCH_alloc_pdu1.tb_swap = 0;
+ DLSCH_alloc_pdu1.mcs1 = 0;
+ DLSCH_alloc_pdu1.ndi1 = 1;
+ DLSCH_alloc_pdu1.rv1 = 0;
+ DLSCH_alloc_pdu1.tpmi = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu1,sizeof(DCI2_5MHz_2A_M10PRB_TDD_t));
+ break;
+ */
+
+ default:
+ case 7:
+ DCI_pdu->Num_ue_spec_dci = 1;
+ DCI_pdu->dci_alloc[0].L = 2;
+ DCI_pdu->dci_alloc[0].rnti = 0x1235;
+ DCI_pdu->dci_alloc[0].format = format1;
+ DCI_pdu->dci_alloc[0].ra_flag = 0;
+
+ if (transmission_mode<3) {
+ //user 1
+ switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
+ case 25:
+ if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t;
+
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t));
+
+ /*
+ //user2
+ DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t;
+ DCI_pdu->dci_alloc[1].L = 2;
+ DCI_pdu->dci_alloc[1].rnti = 0x1236;
+ DCI_pdu->dci_alloc[1].format = format1;
+ DCI_pdu->dci_alloc[1].ra_flag = 0;
+
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->dai = 0;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
+ //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_5MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
+ */
+ } else {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_TDD_t;
+
+ ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->rballoc = rballoc;
+ ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->dai = 0;
+ ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
+ ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ //((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
+ ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t));
+
+ /*
+ //user2
+ DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t;
+ DCI_pdu->dci_alloc[1].L = 2;
+ DCI_pdu->dci_alloc[1].rnti = 0x1236;
+ DCI_pdu->dci_alloc[1].format = format1;
+ DCI_pdu->dci_alloc[1].ra_flag = 0;
+
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->dai = 0;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
+ //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_5MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
+ */
+ }
+
+ break;
+
+ case 50:
+
+ if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_10MHz_FDD_t;
+
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_10MHz_TDD_t));
+
+ /*
+ //user2
+ DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_10MHz_TDD_t;
+ DCI_pdu->dci_alloc[1].L = 2;
+ DCI_pdu->dci_alloc[1].rnti = 0x1236;
+ DCI_pdu->dci_alloc[1].format = format1;
+ DCI_pdu->dci_alloc[1].ra_flag = 0;
+
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->dai = 0;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
+ //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_10MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_10MHz_TDD_t));
+ */
+ } else {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_10MHz_TDD_t;
+
+ ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->rballoc = rballoc;
+ ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->dai = 0;
+ ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
+ ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ //((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
+ ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_10MHz_TDD_t));
+
+ /*
+ //user2
+ DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_10MHz_TDD_t;
+ DCI_pdu->dci_alloc[1].L = 2;
+ DCI_pdu->dci_alloc[1].rnti = 0x1236;
+ DCI_pdu->dci_alloc[1].format = format1;
+ DCI_pdu->dci_alloc[1].ra_flag = 0;
+
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->dai = 0;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
+ //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
+ ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_10MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_10MHz_TDD_t));
+ */
+ }
+
+ break;
+
+ case 100:
+ if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t;
+
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t));
+
+ /*
+ //user2
+ DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t;
+ DCI_pdu->dci_alloc[1].L = 2;
+ DCI_pdu->dci_alloc[1].rnti = 0x1236;
+ DCI_pdu->dci_alloc[1].format = format1;
+ DCI_pdu->dci_alloc[1].ra_flag = 0;
+
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->dai = 0;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
+ //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
+ ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_5MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
+ */
+ } else {
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_20MHz_TDD_t;
+
+ ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->rballoc = rballoc;
+ ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->dai = 0;
+ ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
+ ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ //((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
+ ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_20MHz_TDD_t));
+
+ /*
+ //user2
+ DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_20MHz_TDD_t;
+ DCI_pdu->dci_alloc[1].L = 2;
+ DCI_pdu->dci_alloc[1].rnti = 0x1236;
+ DCI_pdu->dci_alloc[1].format = format1;
+ DCI_pdu->dci_alloc[1].ra_flag = 0;
+
+ ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
+ ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
+ ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->dai = 0;
+ ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
+ //((DCI1_20MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
+ ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
+ ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
+ ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_20MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
+ */
+ }
+
+ break;
+ }
+ } else if (transmission_mode==4) {
+ DCI_pdu->Num_ue_spec_dci = 1;
+ // user 1
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI2_5MHz_2A_FDD_t;
+ DCI_pdu->dci_alloc[0].L = 3;
+ DCI_pdu->dci_alloc[0].rnti = 0x1235;
+ DCI_pdu->dci_alloc[0].format = format2;
+ DCI_pdu->dci_alloc[0].ra_flag = 0;
+
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->tpmi = 0;
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rv1 = 0;
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi1 = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->mcs1 = openair_daq_vars.target_ue_dl_mcs;
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rv2 = 0;
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi2 = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->mcs2 = openair_daq_vars.target_ue_dl_mcs;
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->tb_swap = 0;
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->TPC = 0;
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rballoc = openair_daq_vars.ue_dl_rb_alloc;
+ ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rah = 0;
+
+ } else if (transmission_mode==5) {
+ DCI_pdu->Num_ue_spec_dci = 2;
+ // user 1
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
+ DCI_pdu->dci_alloc[0].L = 3;
+ DCI_pdu->dci_alloc[0].rnti = 0x1235;
+ DCI_pdu->dci_alloc[0].format = format1E_2A_M10PRB;
+ DCI_pdu->dci_alloc[0].ra_flag = 0;
+
+ DLSCH_alloc_pdu1E.tpmi = 5; //5=use feedback
+ DLSCH_alloc_pdu1E.rv = 0;
+ DLSCH_alloc_pdu1E.ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ //DLSCH_alloc_pdu1E.mcs = cqi_to_mcs[phy_vars_eNB->eNB_UE_stats->DL_cqi[0]];
+ //DLSCH_alloc_pdu1E.mcs = (unsigned char) (taus()%28);
+ DLSCH_alloc_pdu1E.mcs = openair_daq_vars.target_ue_dl_mcs;
+ //DLSCH_alloc_pdu1E.mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
+ phy_vars_eNB->eNB_UE_stats[0].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
+ DLSCH_alloc_pdu1E.harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist];
+ DLSCH_alloc_pdu1E.dai = 0;
+ DLSCH_alloc_pdu1E.TPC = 0;
+ DLSCH_alloc_pdu1E.rballoc = openair_daq_vars.ue_dl_rb_alloc;
+ DLSCH_alloc_pdu1E.rah = 0;
+ DLSCH_alloc_pdu1E.dl_power_off = 0; //0=second user present
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
+
+ //user 2
+ DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
+ DCI_pdu->dci_alloc[1].L = 0;
+ DCI_pdu->dci_alloc[1].rnti = 0x1236;
+ DCI_pdu->dci_alloc[1].format = format1E_2A_M10PRB;
+ DCI_pdu->dci_alloc[1].ra_flag = 0;
+ //DLSCH_alloc_pdu1E.mcs = openair_daq_vars.target_ue_dl_mcs;
+ //DLSCH_alloc_pdu1E.mcs = (unsigned char) (taus()%28);
+ //DLSCH_alloc_pdu1E.mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
+ DLSCH_alloc_pdu1E.mcs = (unsigned char) (((phy_vars_eNB->proc[sched_subframe].frame_tx%1024)/3)%28);
+ phy_vars_eNB->eNB_UE_stats[1].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
+
+ memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
+
+ // set the precoder of the second UE orthogonal to the first
+ phy_vars_eNB->eNB_UE_stats[1].DL_pmi_single = (phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single ^ 0x1555);
+ }
+
+ break; //subframe switch
+
+ /*
+ case 8:
+ DCI_pdu->Num_common_dci = 1;
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
+ DCI_pdu->dci_alloc[0].L = 2;
+ DCI_pdu->dci_alloc[0].rnti = 0xbeef;
+ DCI_pdu->dci_alloc[0].format = format1A;
+ DCI_pdu->dci_alloc[0].ra_flag = 1;
+
+ RA_alloc_pdu.type = 1;
+ RA_alloc_pdu.vrb_type = 0;
+ RA_alloc_pdu.rballoc = computeRIV(25,12,3);
+ RA_alloc_pdu.ndi = 1;
+ RA_alloc_pdu.rv = 1;
+ RA_alloc_pdu.mcs = 4;
+ RA_alloc_pdu.harq_pid = 0;
+ RA_alloc_pdu.TPC = 1;
+
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&RA_alloc_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
+ break;
+ */
+ /*
+ case 9:
+ DCI_pdu->Num_ue_spec_dci = 1;
+
+ //user 1
+ if (phy_vars_eNB->lte_frame_parms.frame_type == FDD)
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI0_5MHz_FDD_t ;
+ else
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI0_5MHz_TDD_1_6_t ;
+
+ DCI_pdu->dci_alloc[0].L = 2;
+ DCI_pdu->dci_alloc[0].rnti = 0x1235;
+ DCI_pdu->dci_alloc[0].format = format0;
+ DCI_pdu->dci_alloc[0].ra_flag = 0;
+
+ UL_alloc_pdu.type = 0;
+ UL_alloc_pdu.hopping = 0;
+ UL_alloc_pdu.rballoc = computeRIV(25,2,openair_daq_vars.ue_ul_nb_rb);
+ UL_alloc_pdu.mcs = openair_daq_vars.target_ue_ul_mcs;
+ UL_alloc_pdu.ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ UL_alloc_pdu.TPC = 0;
+ UL_alloc_pdu.cshift = 0;
+ UL_alloc_pdu.dai = 0;
+ UL_alloc_pdu.cqi_req = 1;
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&UL_alloc_pdu,sizeof(DCI0_5MHz_TDD_1_6_t));
+ */
+ // user 2
+ /*
+ DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI0_5MHz_TDD_1_6_t ;
+ DCI_pdu->dci_alloc[1].L = 2;
+ DCI_pdu->dci_alloc[1].rnti = 0x1236;
+ DCI_pdu->dci_alloc[1].format = format0;
+ DCI_pdu->dci_alloc[1].ra_flag = 0;
+
+ UL_alloc_pdu.type = 0;
+ UL_alloc_pdu.hopping = 0;
+ if (cooperation_flag==0)
+ UL_alloc_pdu.rballoc = computeRIV(25,2+openair_daq_vars.ue_ul_nb_rb,openair_daq_vars.ue_ul_nb_rb);
+ else
+ UL_alloc_pdu.rballoc = computeRIV(25,0,openair_daq_vars.ue_ul_nb_rb);
+ UL_alloc_pdu.mcs = openair_daq_vars.target_ue_ul_mcs;
+ UL_alloc_pdu.ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
+ UL_alloc_pdu.TPC = 0;
+ if ((cooperation_flag==0) || (cooperation_flag==1))
+ UL_alloc_pdu.cshift = 0;
+ else
+ UL_alloc_pdu.cshift = 1;
+ UL_alloc_pdu.dai = 0;
+ UL_alloc_pdu.cqi_req = 1;
+ memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&UL_alloc_pdu,sizeof(DCI0_5MHz_TDD_1_6_t));
+ break;
+ */
+
+ /*default:
+ break;*/
+ }
+
+ DCI_pdu->nCCE = 0;
+
+ for (i=0; iNum_common_dci+DCI_pdu->Num_ue_spec_dci; i++) {
+ DCI_pdu->nCCE += (1<<(DCI_pdu->dci_alloc[i].L));
+ }
+
+}
+
+void fill_dci_emos(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB)
+{
+
+ int i;
+ uint8_t cooperation_flag = phy_vars_eNB->cooperation_flag;
+ uint8_t transmission_mode = phy_vars_eNB->transmission_mode[0];
+
+ //uint32_t rballoc = 0x00F0;
+ //uint32_t rballoc2 = 0x000F;
+ /*
+ uint32_t rand = taus();
+ if ((subframe==8) || (subframe==9) || (subframe==0))
+ rand = (rand%5)+5;
+ else
+ rand = (rand%4)+5;
+ */
+
+ DCI_pdu->Num_common_dci = 0;
+ DCI_pdu->Num_ue_spec_dci=0;
+
+ switch (subframe) {
+ case 5:
+ DCI_pdu->Num_ue_spec_dci = 1;
+
+ if (transmission_mode<3) {
+ //user 1
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_TDD_t;
+ DCI_pdu->dci_alloc[0].L = 2;
+ DCI_pdu->dci_alloc[0].rnti = 0x1235;
+ DCI_pdu->dci_alloc[0].format = format1;
+ DCI_pdu->dci_alloc[0].ra_flag = 0;
+
+ DLSCH_alloc_pdu.rballoc = openair_daq_vars.ue_dl_rb_alloc;
+ DLSCH_alloc_pdu.TPC = 0;
+ DLSCH_alloc_pdu.dai = 0;
+ DLSCH_alloc_pdu.harq_pid = 1;
+ DLSCH_alloc_pdu.mcs = openair_daq_vars.target_ue_dl_mcs;
+ DLSCH_alloc_pdu.ndi = 1;
+ DLSCH_alloc_pdu.rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t));
+
+ /*
+ //user2
+ DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t;
+ DCI_pdu->dci_alloc[1].L = 2;
+ DCI_pdu->dci_alloc[1].rnti = 0x1236;
+ DCI_pdu->dci_alloc[1].format = format1;
+ DCI_pdu->dci_alloc[1].ra_flag = 0;
+
+ DLSCH_alloc_pdu.rballoc = rballoc2;
+ DLSCH_alloc_pdu.TPC = 0;
+ DLSCH_alloc_pdu.dai = 0;
+ DLSCH_alloc_pdu.harq_pid = 1;
+ DLSCH_alloc_pdu.mcs = openair_daq_vars.target_ue_dl_mcs;
+ DLSCH_alloc_pdu.ndi = 1;
+ DLSCH_alloc_pdu.rv = 0;
+ memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t));
+ */
+ } else if (transmission_mode==5) {
+ DCI_pdu->Num_ue_spec_dci = 2;
+ // user 1
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
+ DCI_pdu->dci_alloc[0].L = 2;
+ DCI_pdu->dci_alloc[0].rnti = 0x1235;
+ DCI_pdu->dci_alloc[0].format = format1E_2A_M10PRB;
+ DCI_pdu->dci_alloc[0].ra_flag = 0;
+
+ DLSCH_alloc_pdu1E.tpmi = 5; //5=use feedback
+ DLSCH_alloc_pdu1E.rv = 0;
+ DLSCH_alloc_pdu1E.ndi = 1;
+ DLSCH_alloc_pdu1E.mcs = openair_daq_vars.target_ue_dl_mcs;
+ DLSCH_alloc_pdu1E.harq_pid = 1;
+ DLSCH_alloc_pdu1E.dai = 0;
+ DLSCH_alloc_pdu1E.TPC = 0;
+ DLSCH_alloc_pdu1E.rballoc = openair_daq_vars.ue_dl_rb_alloc;
+ DLSCH_alloc_pdu1E.rah = 0;
+ DLSCH_alloc_pdu1E.dl_power_off = 0; //0=second user present
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
+
+ //user 2
+ DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
+ DCI_pdu->dci_alloc[1].L = 2;
+ DCI_pdu->dci_alloc[1].rnti = 0x1236;
+ DCI_pdu->dci_alloc[1].format = format1E_2A_M10PRB;
+ DCI_pdu->dci_alloc[1].ra_flag = 0;
+
+ memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
+
+ // set the precoder of the second UE orthogonal to the first
+ phy_vars_eNB->eNB_UE_stats[1].DL_pmi_single = (phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single ^ 0x1555);
+ }
+
+ break;
+
+ case 7:
+ DCI_pdu->Num_common_dci = 1;
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
+ DCI_pdu->dci_alloc[0].L = 2;
+ DCI_pdu->dci_alloc[0].rnti = 0xbeef;
+ DCI_pdu->dci_alloc[0].format = format1A;
+ DCI_pdu->dci_alloc[0].ra_flag = 1;
+
+ RA_alloc_pdu.type = 1;
+ RA_alloc_pdu.vrb_type = 0;
+ RA_alloc_pdu.rballoc = computeRIV(25,12,3);
+ RA_alloc_pdu.ndi = 1;
+ RA_alloc_pdu.rv = 1;
+ RA_alloc_pdu.mcs = 4;
+ RA_alloc_pdu.harq_pid = 0;
+ RA_alloc_pdu.TPC = 1;
+
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&RA_alloc_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
+ break;
+
+ case 9:
+ DCI_pdu->Num_ue_spec_dci = 1;
+
+ //user 1
+ DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI0_5MHz_TDD_1_6_t ;
+ DCI_pdu->dci_alloc[0].L = 2;
+ DCI_pdu->dci_alloc[0].rnti = 0x1235;
+ DCI_pdu->dci_alloc[0].format = format0;
+ DCI_pdu->dci_alloc[0].ra_flag = 0;
+
+ UL_alloc_pdu.type = 0;
+ UL_alloc_pdu.hopping = 0;
+ UL_alloc_pdu.rballoc = computeRIV(25,0,openair_daq_vars.ue_ul_nb_rb);
+ UL_alloc_pdu.mcs = openair_daq_vars.target_ue_ul_mcs;
+ UL_alloc_pdu.ndi = 1;
+ UL_alloc_pdu.TPC = 0;
+ UL_alloc_pdu.cshift = 0;
+ UL_alloc_pdu.dai = 0;
+ UL_alloc_pdu.cqi_req = 1;
+ memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&UL_alloc_pdu,sizeof(DCI0_5MHz_TDD_1_6_t));
+
+ /*
+ //user 2
+ DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI0_5MHz_TDD_1_6_t ;
+ DCI_pdu->dci_alloc[1].L = 2;
+ DCI_pdu->dci_alloc[1].rnti = 0x1236;
+ DCI_pdu->dci_alloc[1].format = format0;
+ DCI_pdu->dci_alloc[1].ra_flag = 0;
+
+ UL_alloc_pdu.type = 0;
+ UL_alloc_pdu.hopping = 0;
+ if (cooperation_flag==0)
+ UL_alloc_pdu.rballoc = computeRIV(25,2+openair_daq_vars.ue_ul_nb_rb,openair_daq_vars.ue_ul_nb_rb);
+ else
+ UL_alloc_pdu.rballoc = computeRIV(25,0,openair_daq_vars.ue_ul_nb_rb);
+ UL_alloc_pdu.mcs = openair_daq_vars.target_ue_ul_mcs;
+ UL_alloc_pdu.ndi = 1;
+ UL_alloc_pdu.TPC = 0;
+ if ((cooperation_flag==0) || (cooperation_flag==1))
+ UL_alloc_pdu.cshift = 0;
+ else
+ UL_alloc_pdu.cshift = 1;
+ UL_alloc_pdu.dai = 0;
+ UL_alloc_pdu.cqi_req = 1;
+ memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&UL_alloc_pdu,sizeof(DCI0_5MHz_TDD_1_6_t));
+ */
+ break;
+
+ default:
+ break;
+ }
+
+ DCI_pdu->nCCE = 0;
+
+ for (i=0; iNum_common_dci+DCI_pdu->Num_ue_spec_dci; i++) {
+ DCI_pdu->nCCE += (1<<(DCI_pdu->dci_alloc[i].L));
+ }
+
+}
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 68ea6270e9..2e6023846d 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -52,12 +52,10 @@
//#define DEBUG_PHY_PROC (Already defined in cmake)
//#define DEBUG_ULSCH
-//#ifdef OPENAIR2
#include "LAYER2/MAC/extern.h"
#include "LAYER2/MAC/defs.h"
#include "UTIL/LOG/log.h"
#include "UTIL/LOG/vcd_signal_dumper.h"
-//#endif
#include "assertions.h"
#include "msc.h"
@@ -79,9 +77,9 @@ extern int exit_openair;
//extern void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms);
-unsigned char dlsch_input_buffer[2700] __attribute__ ((aligned(16)));
-int eNB_sync_buffer0[640*6] __attribute__ ((aligned(16)));
-int eNB_sync_buffer1[640*6] __attribute__ ((aligned(16)));
+unsigned char dlsch_input_buffer[2700] __attribute__ ((aligned(32)));
+int eNB_sync_buffer0[640*6] __attribute__ ((aligned(32)));
+int eNB_sync_buffer1[640*6] __attribute__ ((aligned(32)));
int *eNB_sync_buffer[2] = {eNB_sync_buffer0, eNB_sync_buffer1};
extern uint16_t hundred_times_log10_NPRB[100];
@@ -430,689 +428,6 @@ void phy_procedures_emos_eNB_RX(unsigned char subframe,PHY_VARS_eNB *phy_vars_eN
}
#endif
-#ifndef OPENAIR2
-void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_eNB)
-{
-
- int i;
- uint8_t cooperation_flag = phy_vars_eNB->cooperation_flag;
- uint8_t transmission_mode = phy_vars_eNB->transmission_mode[0];
-
- uint32_t rballoc = 0x7FFF;
- uint32_t rballoc2 = 0x000F;
- int subframe = phy_vars_eNB->proc[sched_subframe].subframe_tx;
- /*
- uint32_t rand = taus();
- if ((subframe==8) || (subframe==9) || (subframe==0))
- rand = (rand%5)+5;
- else
- rand = (rand%4)+5;
- */
- uint32_t bcch_pdu;
- uint64_t dlsch_pdu;
-
- DCI_pdu->Num_common_dci = 0;
- DCI_pdu->Num_ue_spec_dci=0;
-
-
-
- switch (subframe) {
- case 5:
- DCI_pdu->Num_common_dci = 1;
- DCI_pdu->dci_alloc[0].L = 2;
- DCI_pdu->dci_alloc[0].rnti = SI_RNTI;
- DCI_pdu->dci_alloc[0].format = format1A;
- DCI_pdu->dci_alloc[0].ra_flag = 0;
-
- switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
- case 6:
- if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_1_5MHz_FDD_t;
- ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->type = 1;
- ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
- ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
- ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->rv = 1;
- ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->mcs = 1;
- ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
- ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_1_5MHz_TDD_1_6_t));
- } else {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_1_5MHz_TDD_1_6_t;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
- ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0;
- ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_1_5MHz_TDD_1_6_t));
- }
-
- break;
-
- case 25:
- default:
- if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_FDD_t;
- ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->type = 1;
- ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
- ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
- ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->rv = 1;
- ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->mcs = 1;
- ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
- ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
- } else {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
- ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
- ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
- ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
- ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
- ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
- ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0;
- ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
- }
-
- break;
-
- case 50:
- if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_10MHz_FDD_t;
- ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->type = 1;
- ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
- ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
- ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->rv = 1;
- ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->mcs = 1;
- ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
- ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_10MHz_TDD_1_6_t));
- } else {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_10MHz_TDD_1_6_t;
- ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
- ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
- ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
- ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
- ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
- ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0;
- ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_10MHz_TDD_1_6_t));
- }
-
- break;
-
- case 100:
- if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_20MHz_FDD_t;
- ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->type = 1;
- ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->vrb_type = 0;
- ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
- ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->rv = 1;
- ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->mcs = 1;
- ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->harq_pid = 0;
- ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_20MHz_TDD_1_6_t));
- } else {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_20MHz_TDD_1_6_t;
- ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->type = 1;
- ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0;
- ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3);
- ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1;
- ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1;
- ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0;
- ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->TPC = 1; // set to 3 PRB
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&bcch_pdu,sizeof(DCI1A_20MHz_TDD_1_6_t));
- }
-
- break;
- }
-
- case 6:
- /*
- DCI_pdu->Num_ue_spec_dci = 1;
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI2_5MHz_2A_M10PRB_TDD_t;
- DCI_pdu->dci_alloc[0].L = 2;
- DCI_pdu->dci_alloc[0].rnti = 0x1236;
- DCI_pdu->dci_alloc[0].format = format2_2A_M10PRB;
- DCI_pdu->dci_alloc[0].ra_flag = 0;
-
- DLSCH_alloc_pdu1.rballoc = 0x00ff;
- DLSCH_alloc_pdu1.TPC = 0;
- DLSCH_alloc_pdu1.dai = 0;
- DLSCH_alloc_pdu1.harq_pid = 0;
- DLSCH_alloc_pdu1.tb_swap = 0;
- DLSCH_alloc_pdu1.mcs1 = 0;
- DLSCH_alloc_pdu1.ndi1 = 1;
- DLSCH_alloc_pdu1.rv1 = 0;
- DLSCH_alloc_pdu1.tpmi = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu1,sizeof(DCI2_5MHz_2A_M10PRB_TDD_t));
- */
- break;
-
- case 7:
- DCI_pdu->Num_ue_spec_dci = 1;
- DCI_pdu->dci_alloc[0].L = 2;
- DCI_pdu->dci_alloc[0].rnti = 0x1235;
- DCI_pdu->dci_alloc[0].format = format1;
- DCI_pdu->dci_alloc[0].ra_flag = 0;
-
- if (transmission_mode<3) {
- //user 1
- switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
- case 25:
- if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t;
-
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = 0;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t));
-
- /*
- //user2
- DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t;
- DCI_pdu->dci_alloc[1].L = 2;
- DCI_pdu->dci_alloc[1].rnti = 0x1236;
- DCI_pdu->dci_alloc[1].format = format1;
- DCI_pdu->dci_alloc[1].ra_flag = 0;
-
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->dai = 0;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
- //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_5MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
- */
- } else {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_TDD_t;
-
- ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->rballoc = rballoc;
- ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->dai = 0;
- ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->harq_pid = 0;
- ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- //((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
- ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t));
-
- /*
- //user2
- DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t;
- DCI_pdu->dci_alloc[1].L = 2;
- DCI_pdu->dci_alloc[1].rnti = 0x1236;
- DCI_pdu->dci_alloc[1].format = format1;
- DCI_pdu->dci_alloc[1].ra_flag = 0;
-
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->dai = 0;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
- //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_5MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
- */
- }
-
- break;
-
- case 50:
-
- if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_10MHz_FDD_t;
-
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = 0;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_10MHz_TDD_t));
-
- /*
- //user2
- DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_10MHz_TDD_t;
- DCI_pdu->dci_alloc[1].L = 2;
- DCI_pdu->dci_alloc[1].rnti = 0x1236;
- DCI_pdu->dci_alloc[1].format = format1;
- DCI_pdu->dci_alloc[1].ra_flag = 0;
-
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->dai = 0;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
- //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_10MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_10MHz_TDD_t));
- */
- } else {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_10MHz_TDD_t;
-
- ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->rballoc = rballoc;
- ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->dai = 0;
- ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->harq_pid = 0;
- ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- //((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
- ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_10MHz_TDD_t));
-
- /*
- //user2
- DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_10MHz_TDD_t;
- DCI_pdu->dci_alloc[1].L = 2;
- DCI_pdu->dci_alloc[1].rnti = 0x1236;
- DCI_pdu->dci_alloc[1].format = format1;
- DCI_pdu->dci_alloc[1].ra_flag = 0;
-
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->dai = 0;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
- //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
- ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_10MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_10MHz_TDD_t));
- */
- }
-
- break;
-
- case 100:
- if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t;
-
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = 0;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t));
-
- /*
- //user2
- DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t;
- DCI_pdu->dci_alloc[1].L = 2;
- DCI_pdu->dci_alloc[1].rnti = 0x1236;
- DCI_pdu->dci_alloc[1].format = format1;
- DCI_pdu->dci_alloc[1].ra_flag = 0;
-
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->dai = 0;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
- //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
- ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_5MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
- */
- } else {
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_20MHz_TDD_t;
-
- ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->rballoc = rballoc;
- ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->dai = 0;
- ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->harq_pid = 0;
- ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- //((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
- ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_20MHz_TDD_t));
-
- /*
- //user2
- DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_20MHz_TDD_t;
- DCI_pdu->dci_alloc[1].L = 2;
- DCI_pdu->dci_alloc[1].rnti = 0x1236;
- DCI_pdu->dci_alloc[1].format = format1;
- DCI_pdu->dci_alloc[1].ra_flag = 0;
-
- ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2;
- ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
- ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->dai = 0;
- ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1;
- //((DCI1_20MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
- ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->mcs = openair_daq_vars.target_ue_dl_mcs;
- ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->ndi = 1;
- ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_20MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_5MHz_TDD_t));
- */
- }
-
- break;
- }
-
- } else if (transmission_mode==5) {
- DCI_pdu->Num_ue_spec_dci = 2;
- // user 1
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
- DCI_pdu->dci_alloc[0].L = 3;
- DCI_pdu->dci_alloc[0].rnti = 0x1235;
- DCI_pdu->dci_alloc[0].format = format1E_2A_M10PRB;
- DCI_pdu->dci_alloc[0].ra_flag = 0;
-
- DLSCH_alloc_pdu1E.tpmi = 5; //5=use feedback
- DLSCH_alloc_pdu1E.rv = 0;
- DLSCH_alloc_pdu1E.ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- //DLSCH_alloc_pdu1E.mcs = cqi_to_mcs[phy_vars_eNB->eNB_UE_stats->DL_cqi[0]];
- //DLSCH_alloc_pdu1E.mcs = (unsigned char) (taus()%28);
- DLSCH_alloc_pdu1E.mcs = openair_daq_vars.target_ue_dl_mcs;
- //DLSCH_alloc_pdu1E.mcs = (unsigned char) ((phy_vars_eNB->proc[subframe].frame%1024)%28);
- phy_vars_eNB->eNB_UE_stats[0].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
- DLSCH_alloc_pdu1E.harq_pid = 0;
- DLSCH_alloc_pdu1E.dai = 0;
- DLSCH_alloc_pdu1E.TPC = 0;
- DLSCH_alloc_pdu1E.rballoc = openair_daq_vars.ue_dl_rb_alloc;
- DLSCH_alloc_pdu1E.rah = 0;
- DLSCH_alloc_pdu1E.dl_power_off = 0; //0=second user present
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
-
- //user 2
- DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
- DCI_pdu->dci_alloc[1].L = 0;
- DCI_pdu->dci_alloc[1].rnti = 0x1236;
- DCI_pdu->dci_alloc[1].format = format1E_2A_M10PRB;
- DCI_pdu->dci_alloc[1].ra_flag = 0;
- //DLSCH_alloc_pdu1E.mcs = openair_daq_vars.target_ue_dl_mcs;
- //DLSCH_alloc_pdu1E.mcs = (unsigned char) (taus()%28);
- //DLSCH_alloc_pdu1E.mcs = (unsigned char) ((phy_vars_eNB->frame%1024)%28);
- DLSCH_alloc_pdu1E.mcs = (unsigned char) (((phy_vars_eNB->proc[sched_subframe].frame_tx%1024)/3)%28);
- phy_vars_eNB->eNB_UE_stats[1].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs;
-
- memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
-
- // set the precoder of the second UE orthogonal to the first
- phy_vars_eNB->eNB_UE_stats[1].DL_pmi_single = (phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single ^ 0x1555);
- }
-
- break;
-
- /*
- case 8:
- DCI_pdu->Num_common_dci = 1;
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
- DCI_pdu->dci_alloc[0].L = 2;
- DCI_pdu->dci_alloc[0].rnti = 0xbeef;
- DCI_pdu->dci_alloc[0].format = format1A;
- DCI_pdu->dci_alloc[0].ra_flag = 1;
-
- RA_alloc_pdu.type = 1;
- RA_alloc_pdu.vrb_type = 0;
- RA_alloc_pdu.rballoc = computeRIV(25,12,3);
- RA_alloc_pdu.ndi = 1;
- RA_alloc_pdu.rv = 1;
- RA_alloc_pdu.mcs = 4;
- RA_alloc_pdu.harq_pid = 0;
- RA_alloc_pdu.TPC = 1;
-
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&RA_alloc_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
- break;
- */
- case 9:
- DCI_pdu->Num_ue_spec_dci = 1;
-
- //user 1
- if (phy_vars_eNB->lte_frame_parms.frame_type == FDD)
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI0_5MHz_FDD_t ;
- else
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI0_5MHz_TDD_1_6_t ;
-
- DCI_pdu->dci_alloc[0].L = 2;
- DCI_pdu->dci_alloc[0].rnti = 0x1235;
- DCI_pdu->dci_alloc[0].format = format0;
- DCI_pdu->dci_alloc[0].ra_flag = 0;
-
- UL_alloc_pdu.type = 0;
- UL_alloc_pdu.hopping = 0;
- UL_alloc_pdu.rballoc = computeRIV(25,2,openair_daq_vars.ue_ul_nb_rb);
- UL_alloc_pdu.mcs = openair_daq_vars.target_ue_ul_mcs;
- UL_alloc_pdu.ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- UL_alloc_pdu.TPC = 0;
- UL_alloc_pdu.cshift = 0;
- UL_alloc_pdu.dai = 0;
- UL_alloc_pdu.cqi_req = 1;
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&UL_alloc_pdu,sizeof(DCI0_5MHz_TDD_1_6_t));
-
- // user 2
- /*
- DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI0_5MHz_TDD_1_6_t ;
- DCI_pdu->dci_alloc[1].L = 2;
- DCI_pdu->dci_alloc[1].rnti = 0x1236;
- DCI_pdu->dci_alloc[1].format = format0;
- DCI_pdu->dci_alloc[1].ra_flag = 0;
-
- UL_alloc_pdu.type = 0;
- UL_alloc_pdu.hopping = 0;
- if (cooperation_flag==0)
- UL_alloc_pdu.rballoc = computeRIV(25,2+openair_daq_vars.ue_ul_nb_rb,openair_daq_vars.ue_ul_nb_rb);
- else
- UL_alloc_pdu.rballoc = computeRIV(25,0,openair_daq_vars.ue_ul_nb_rb);
- UL_alloc_pdu.mcs = openair_daq_vars.target_ue_ul_mcs;
- UL_alloc_pdu.ndi = phy_vars_eNB->proc[sched_subframe].frame_tx&1;
- UL_alloc_pdu.TPC = 0;
- if ((cooperation_flag==0) || (cooperation_flag==1))
- UL_alloc_pdu.cshift = 0;
- else
- UL_alloc_pdu.cshift = 1;
- UL_alloc_pdu.dai = 0;
- UL_alloc_pdu.cqi_req = 1;
- memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&UL_alloc_pdu,sizeof(DCI0_5MHz_TDD_1_6_t));
- */
- break;
-
- default:
- break;
- }
-
- DCI_pdu->nCCE = 0;
-
- for (i=0; iNum_common_dci+DCI_pdu->Num_ue_spec_dci; i++) {
- DCI_pdu->nCCE += (1<<(DCI_pdu->dci_alloc[i].L));
- }
-
-}
-
-#ifdef EMOS
-void fill_dci_emos(DCI_PDU *DCI_pdu, uint8_t subframe, PHY_VARS_eNB *phy_vars_eNB)
-{
-
- int i;
- uint8_t cooperation_flag = phy_vars_eNB->cooperation_flag;
- uint8_t transmission_mode = phy_vars_eNB->transmission_mode[0];
-
- //uint32_t rballoc = 0x00F0;
- //uint32_t rballoc2 = 0x000F;
- /*
- uint32_t rand = taus();
- if ((subframe==8) || (subframe==9) || (subframe==0))
- rand = (rand%5)+5;
- else
- rand = (rand%4)+5;
- */
-
- DCI_pdu->Num_common_dci = 0;
- DCI_pdu->Num_ue_spec_dci=0;
-
- switch (subframe) {
- case 5:
- DCI_pdu->Num_ue_spec_dci = 1;
-
- if (transmission_mode<3) {
- //user 1
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_TDD_t;
- DCI_pdu->dci_alloc[0].L = 2;
- DCI_pdu->dci_alloc[0].rnti = 0x1235;
- DCI_pdu->dci_alloc[0].format = format1;
- DCI_pdu->dci_alloc[0].ra_flag = 0;
-
- DLSCH_alloc_pdu.rballoc = openair_daq_vars.ue_dl_rb_alloc;
- DLSCH_alloc_pdu.TPC = 0;
- DLSCH_alloc_pdu.dai = 0;
- DLSCH_alloc_pdu.harq_pid = 1;
- DLSCH_alloc_pdu.mcs = openair_daq_vars.target_ue_dl_mcs;
- DLSCH_alloc_pdu.ndi = 1;
- DLSCH_alloc_pdu.rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t));
-
- /*
- //user2
- DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t;
- DCI_pdu->dci_alloc[1].L = 2;
- DCI_pdu->dci_alloc[1].rnti = 0x1236;
- DCI_pdu->dci_alloc[1].format = format1;
- DCI_pdu->dci_alloc[1].ra_flag = 0;
-
- DLSCH_alloc_pdu.rballoc = rballoc2;
- DLSCH_alloc_pdu.TPC = 0;
- DLSCH_alloc_pdu.dai = 0;
- DLSCH_alloc_pdu.harq_pid = 1;
- DLSCH_alloc_pdu.mcs = openair_daq_vars.target_ue_dl_mcs;
- DLSCH_alloc_pdu.ndi = 1;
- DLSCH_alloc_pdu.rv = 0;
- memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_TDD_t));
- */
- } else if (transmission_mode==5) {
- DCI_pdu->Num_ue_spec_dci = 2;
- // user 1
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
- DCI_pdu->dci_alloc[0].L = 2;
- DCI_pdu->dci_alloc[0].rnti = 0x1235;
- DCI_pdu->dci_alloc[0].format = format1E_2A_M10PRB;
- DCI_pdu->dci_alloc[0].ra_flag = 0;
-
- DLSCH_alloc_pdu1E.tpmi = 5; //5=use feedback
- DLSCH_alloc_pdu1E.rv = 0;
- DLSCH_alloc_pdu1E.ndi = 1;
- DLSCH_alloc_pdu1E.mcs = openair_daq_vars.target_ue_dl_mcs;
- DLSCH_alloc_pdu1E.harq_pid = 1;
- DLSCH_alloc_pdu1E.dai = 0;
- DLSCH_alloc_pdu1E.TPC = 0;
- DLSCH_alloc_pdu1E.rballoc = openair_daq_vars.ue_dl_rb_alloc;
- DLSCH_alloc_pdu1E.rah = 0;
- DLSCH_alloc_pdu1E.dl_power_off = 0; //0=second user present
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
-
- //user 2
- DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
- DCI_pdu->dci_alloc[1].L = 2;
- DCI_pdu->dci_alloc[1].rnti = 0x1236;
- DCI_pdu->dci_alloc[1].format = format1E_2A_M10PRB;
- DCI_pdu->dci_alloc[1].ra_flag = 0;
-
- memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
-
- // set the precoder of the second UE orthogonal to the first
- phy_vars_eNB->eNB_UE_stats[1].DL_pmi_single = (phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single ^ 0x1555);
- }
-
- break;
-
- case 7:
- DCI_pdu->Num_common_dci = 1;
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_TDD_1_6_t;
- DCI_pdu->dci_alloc[0].L = 2;
- DCI_pdu->dci_alloc[0].rnti = 0xbeef;
- DCI_pdu->dci_alloc[0].format = format1A;
- DCI_pdu->dci_alloc[0].ra_flag = 1;
-
- RA_alloc_pdu.type = 1;
- RA_alloc_pdu.vrb_type = 0;
- RA_alloc_pdu.rballoc = computeRIV(25,12,3);
- RA_alloc_pdu.ndi = 1;
- RA_alloc_pdu.rv = 1;
- RA_alloc_pdu.mcs = 4;
- RA_alloc_pdu.harq_pid = 0;
- RA_alloc_pdu.TPC = 1;
-
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],&RA_alloc_pdu,sizeof(DCI1A_5MHz_TDD_1_6_t));
- break;
-
- case 9:
- DCI_pdu->Num_ue_spec_dci = 1;
-
- //user 1
- DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI0_5MHz_TDD_1_6_t ;
- DCI_pdu->dci_alloc[0].L = 2;
- DCI_pdu->dci_alloc[0].rnti = 0x1235;
- DCI_pdu->dci_alloc[0].format = format0;
- DCI_pdu->dci_alloc[0].ra_flag = 0;
-
- UL_alloc_pdu.type = 0;
- UL_alloc_pdu.hopping = 0;
- UL_alloc_pdu.rballoc = computeRIV(25,0,openair_daq_vars.ue_ul_nb_rb);
- UL_alloc_pdu.mcs = openair_daq_vars.target_ue_ul_mcs;
- UL_alloc_pdu.ndi = 1;
- UL_alloc_pdu.TPC = 0;
- UL_alloc_pdu.cshift = 0;
- UL_alloc_pdu.dai = 0;
- UL_alloc_pdu.cqi_req = 1;
- memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&UL_alloc_pdu,sizeof(DCI0_5MHz_TDD_1_6_t));
-
- /*
- //user 2
- DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI0_5MHz_TDD_1_6_t ;
- DCI_pdu->dci_alloc[1].L = 2;
- DCI_pdu->dci_alloc[1].rnti = 0x1236;
- DCI_pdu->dci_alloc[1].format = format0;
- DCI_pdu->dci_alloc[1].ra_flag = 0;
-
- UL_alloc_pdu.type = 0;
- UL_alloc_pdu.hopping = 0;
- if (cooperation_flag==0)
- UL_alloc_pdu.rballoc = computeRIV(25,2+openair_daq_vars.ue_ul_nb_rb,openair_daq_vars.ue_ul_nb_rb);
- else
- UL_alloc_pdu.rballoc = computeRIV(25,0,openair_daq_vars.ue_ul_nb_rb);
- UL_alloc_pdu.mcs = openair_daq_vars.target_ue_ul_mcs;
- UL_alloc_pdu.ndi = 1;
- UL_alloc_pdu.TPC = 0;
- if ((cooperation_flag==0) || (cooperation_flag==1))
- UL_alloc_pdu.cshift = 0;
- else
- UL_alloc_pdu.cshift = 1;
- UL_alloc_pdu.dai = 0;
- UL_alloc_pdu.cqi_req = 1;
- memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&UL_alloc_pdu,sizeof(DCI0_5MHz_TDD_1_6_t));
- */
- break;
-
- default:
- break;
- }
-
- DCI_pdu->nCCE = 0;
-
- for (i=0; iNum_common_dci+DCI_pdu->Num_ue_spec_dci; i++) {
- DCI_pdu->nCCE += (1<<(DCI_pdu->dci_alloc[i].L));
- }
-
-}
-#endif //EMOS
-#endif //OPENAIR2
#define AMP_OVER_SQRT2 ((AMP*ONE_OVER_SQRT2_Q15)>>15)
#define AMP_OVER_2 (AMP>>1)
@@ -1259,10 +574,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
uint8_t harq_pid;
DCI_PDU *DCI_pdu;
uint8_t *DLSCH_pdu=NULL;
-#ifndef OPENAIR2
DCI_PDU DCI_pdu_tmp;
uint8_t DLSCH_pdu_tmp[768*8];
-#endif
int8_t UE_id;
uint8_t num_pdcch_symbols=0;
uint8_t ul_subframe;
@@ -1312,13 +625,12 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
}
-#ifdef OPENAIR2
-
// Get scheduling info for next subframe
- if (phy_vars_eNB->CC_id == 0)
- mac_xface->eNB_dlsch_ulsch_scheduler(phy_vars_eNB->Mod_id,0,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);//,1);
-
-#endif
+ if (phy_vars_eNB->mac_enabled==1) {
+ if (phy_vars_eNB->CC_id == 0) {
+ mac_xface->eNB_dlsch_ulsch_scheduler(phy_vars_eNB->Mod_id,0,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);//,1);
+ }
+ }
if (abstraction_flag==0) {
// clear the transmit data array for the current subframe
@@ -1644,36 +956,22 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
#endif
-#ifdef OPENAIR2
-
- // Parse DCI received from MAC
- VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,1);
- DCI_pdu = mac_xface->get_dci_sdu(phy_vars_eNB->Mod_id,
- phy_vars_eNB->CC_id,
- phy_vars_eNB->proc[sched_subframe].frame_tx,
- subframe);
-#else
- DCI_pdu = &DCI_pdu_tmp;
-#ifdef EMOS
- /*
- if (((phy_vars_eNB->proc[sched_subframe].frame_tx%1024)%3 == 0) && (next_slot == 0)) {
- //openair_daq_vars.target_ue_dl_mcs = (openair_daq_vars.target_ue_dl_mcs+1)%28;
- openair_daq_vars.target_ue_dl_mcs = taus()%28;
- LOG_D(PHY,"[MYEMOS] frame %d, increasing MCS to %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,openair_daq_vars.target_ue_dl_mcs);
- }
- */
- /*
- if (phy_vars_eNB->proc[sched_subframe].frame_tx > 28000) {
- LOG_E(PHY,"More that 28000 frames reached! Exiting!\n");
- }
- */
-#endif
+ if (phy_vars_eNB->mac_enabled==1) {
+ // Parse DCI received from MAC
+ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,1);
+ DCI_pdu = mac_xface->get_dci_sdu(phy_vars_eNB->Mod_id,
+ phy_vars_eNB->CC_id,
+ phy_vars_eNB->proc[sched_subframe].frame_tx,
+ subframe);
+ }
+ else {
+ DCI_pdu = &DCI_pdu_tmp;
#ifdef EMOS_CHANNEL
- fill_dci_emos(DCI_pdu,sched_subframe,phy_vars_eNB);
+ fill_dci_emos(DCI_pdu,sched_subframe,phy_vars_eNB);
#else
- fill_dci(DCI_pdu,sched_subframe,phy_vars_eNB);
-#endif
+ fill_dci(DCI_pdu,sched_subframe,phy_vars_eNB);
#endif
+ }
// clear existing ulsch dci allocations before applying info from MAC (this is table
ul_subframe = pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,subframe);
@@ -1731,6 +1029,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[eNB %"PRIu8"] SI generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
#endif
+
generate_eNB_dlsch_params_from_dci(frame,
subframe,
&DCI_pdu->dci_alloc[i].dci_pdu[0],
@@ -1765,6 +1064,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[eNB %"PRIu8"] RA generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
#endif
+
generate_eNB_dlsch_params_from_dci(frame,
subframe,
&DCI_pdu->dci_alloc[i].dci_pdu[0],
@@ -1799,17 +1099,20 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
else if (DCI_pdu->dci_alloc[i].format != format0) { // this is a normal DLSCH allocation
-#ifdef OPENAIR2
#ifdef DEBUG_PHY_PROC
LOG_D(PHY,"[eNB] Searching for RNTI %"PRIx16"\n",DCI_pdu->dci_alloc[i].rnti);
#endif
- UE_id = find_ue((int16_t)DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB);
-#else
- UE_id = i;
-#endif
+
+ if (phy_vars_eNB->mac_enabled==1)
+ UE_id = find_ue((int16_t)DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB);
+ else
+ UE_id = i;
if (UE_id>=0) {
- // dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[i]);
+ if ((frame%100)==0) {
+ LOG_D(PHY,"Frame %3d, SF %d \n",frame,subframe);
+ dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[i]);
+ }
#if defined(SMBV) && !defined(EXMIMO)
// Configure this user
if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
@@ -1819,6 +1122,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
}
#endif
+
generate_eNB_dlsch_params_from_dci(frame,
subframe,
&DCI_pdu->dci_alloc[i].dci_pdu[0],
@@ -1879,14 +1183,13 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
if (harq_pid==255) {
LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Bad harq_pid for ULSCH allocation\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx);
//mac_exit_wrapper("Invalid harq_pid (255) detected");
- return; // not reached
+ return;
}
-#ifdef OPENAIR2
- UE_id = find_ue((int16_t)DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB);
-#else
- UE_id = i;
-#endif
+ if (phy_vars_eNB->mac_enabled==1)
+ UE_id = find_ue((int16_t)DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB);
+ else
+ UE_id = i;
if (UE_id<0) {
LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Unknown UE_id for rnti %"PRIx16"\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,DCI_pdu->dci_alloc[i].rnti);
@@ -1915,6 +1218,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
//dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[i]);
//LOG_D(PHY,"[eNB] cba generate_eNB_ulsch_params_from_dci for ue %d for dci rnti %x\n", UE_id, DCI_pdu->dci_alloc[i].rnti);
+
generate_eNB_ulsch_params_from_dci(&DCI_pdu->dci_alloc[i].dci_pdu[0],
DCI_pdu->dci_alloc[i].rnti,
sched_subframe,
@@ -2015,19 +1319,19 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
input_buffer_length = phy_vars_eNB->dlsch_eNB_SI->harq_processes[0]->TBS/8;
-#ifdef OPENAIR2
- DLSCH_pdu = mac_xface->get_dlsch_sdu(phy_vars_eNB->Mod_id,
- phy_vars_eNB->CC_id,
- phy_vars_eNB->proc[sched_subframe].frame_tx,
- SI_RNTI,
- 0);
-#else
- DLSCH_pdu = DLSCH_pdu_tmp;
+ if (phy_vars_eNB->mac_enabled==1) {
+ DLSCH_pdu = mac_xface->get_dlsch_sdu(phy_vars_eNB->Mod_id,
+ phy_vars_eNB->CC_id,
+ phy_vars_eNB->proc[sched_subframe].frame_tx,
+ SI_RNTI,
+ 0);
+ }
+ else {
+ DLSCH_pdu = DLSCH_pdu_tmp;
- for (i=0; idlsch_eNB_ra->harq_processes[0]->TBS/8;
-#ifdef OPENAIR2
int16_t crnti = mac_xface->fill_rar(phy_vars_eNB->Mod_id,
phy_vars_eNB->CC_id,
phy_vars_eNB->proc[sched_subframe].frame_tx,
@@ -2166,15 +1469,14 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame,
phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_subframe);
-#else
-
- for (i=0; ieNB_UE_stats[0].UE_timing_offset)>>(2+4); // 7 MSBs of timing advance + divide by 4
- dlsch_input_buffer[2] = ((phy_vars_eNB->eNB_UE_stats[0].UE_timing_offset)<<(4-2))&0xf0; // 4 LSBs of timing advance + divide by 4
- //LOG_I(PHY,"UE %d: timing_offset = %d\n",UE_id,phy_vars_eNB->eNB_UE_stats[0].UE_timing_offset);
-#endif
+ /*
+ for (i=0; ieNB_UE_stats[0].UE_timing_offset)>>(2+4); // 7 MSBs of timing advance + divide by 4
+ dlsch_input_buffer[2] = ((phy_vars_eNB->eNB_UE_stats[0].UE_timing_offset)<<(4-2))&0xf0; // 4 LSBs of timing advance + divide by 4
+ //LOG_I(PHY,"UE %d: timing_offset = %d\n",UE_id,phy_vars_eNB->eNB_UE_stats[0].UE_timing_offset);
+ */
#if defined(SMBV) && !defined(EXMIMO)
@@ -2243,10 +1545,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
phy_vars_eNB->proc[sched_subframe].frame_tx, subframe, re_allocated);
#endif
-#ifdef OPENAIR2
} //max user count
-#endif
phy_vars_eNB->dlsch_eNB_ra->active = 0;
}
@@ -2303,21 +1603,21 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].dlsch_trials[harq_pid][0]++;
-#ifdef OPENAIR2
- DLSCH_pdu = mac_xface->get_dlsch_sdu(phy_vars_eNB->Mod_id,
- phy_vars_eNB->CC_id,
- phy_vars_eNB->proc[sched_subframe].frame_tx,
- phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->rnti,
- 0);
- phy_vars_eNB->eNB_UE_stats[UE_id].total_TBS_MAC += phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->TBS;
-#else
- DLSCH_pdu = DLSCH_pdu_tmp;
-
- for (i=0; imac_enabled==1) {
+ DLSCH_pdu = mac_xface->get_dlsch_sdu(phy_vars_eNB->Mod_id,
+ phy_vars_eNB->CC_id,
+ phy_vars_eNB->proc[sched_subframe].frame_tx,
+ phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->rnti,
+ 0);
+ phy_vars_eNB->eNB_UE_stats[UE_id].total_TBS_MAC += phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->TBS;
+ }
+ else {
+ DLSCH_pdu = DLSCH_pdu_tmp;
+
+ for (i=0; iround++;
- if (dlsch_harq_proc->round == dlsch->Mdlharq) {
+ if (dlsch_harq_proc->round == 1/*dlsch->Mdlharq*/) {
// This was the last round for DLSCH so reset round and increment l2_error counter
#ifdef DEBUG_PHY_PROC
LOG_W(PHY,"[eNB %d][PDSCH %x/%d] DLSCH retransmissions exhausted, dropping packet\n",phy_vars_eNB->Mod_id,
@@ -2996,7 +2296,8 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,uint8_t sched_subframe,uint8_t
preamble_energy_max/10,
preamble_energy_max%10,
preamble_delay_list[preamble_max]);
-#ifdef OPENAIR2
+
+ if (phy_vars_eNB->mac_enabled==1) {
uint8_t update_TA=4;
switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
@@ -3017,16 +2318,14 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,uint8_t sched_subframe,uint8_t
break;
}
-
-
mac_xface->initiate_ra_proc(phy_vars_eNB->Mod_id,
phy_vars_eNB->CC_id,
frame,
preamble_max,
preamble_delay_list[preamble_max]*update_TA,
0,subframe,0);
-
-#endif
+ }
+
} else {
MSC_LOG_EVENT(MSC_PHY_ENB, "0 RA Failed add user, too many");
LOG_I(PHY,"[eNB %d][RAPROC] frame %d, subframe %d: Unable to add user, max user count reached\n",
@@ -3128,11 +2427,12 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
for (i=0; ieNB_UE_stats[i].mode == RA_RESPONSE)
- process_Msg3(phy_vars_eNB,sched_subframe,i,harq_pid);
+ if (phy_vars_eNB->mac_enabled==1) {
+ if (phy_vars_eNB->eNB_UE_stats[i].mode == RA_RESPONSE) {
+ process_Msg3(phy_vars_eNB,sched_subframe,i,harq_pid);
+ }
+ }
-#endif
phy_vars_eNB->pusch_stats_rb[i][(frame*10)+subframe] = -63;
phy_vars_eNB->pusch_stats_round[i][(frame*10)+subframe] = 0;
@@ -3332,13 +2632,14 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
LOG_D(PHY,"[eNB %d][RAPROC] maxHARQ_Msg3Tx reached, abandoning RA procedure for UE %d\n",
phy_vars_eNB->Mod_id, i);
phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
-#ifdef OPENAIR2
- mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
- phy_vars_eNB->CC_id,
- frame,
- phy_vars_eNB->eNB_UE_stats[i].crnti);
-#endif
+ if (phy_vars_eNB->mac_enabled==1) {
+ mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
+ phy_vars_eNB->CC_id,
+ frame,
+ phy_vars_eNB->eNB_UE_stats[i].crnti);
+ }
mac_phy_remove_ue(phy_vars_eNB->Mod_id,phy_vars_eNB->eNB_UE_stats[i].crnti);
+
phy_vars_eNB->ulsch_eNB[(uint32_t)i]->Msg3_active = 0;
//phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 0;
@@ -3472,7 +2773,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors = 0;
if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1) {
-#ifdef OPENAIR2
+ if (phy_vars_eNB->mac_enabled==1) {
//#ifdef DEBUG_PHY_PROC
LOG_I(PHY,"[eNB %d][RAPROC] Frame %d Terminating ra_proc for harq %d, UE %d\n",
phy_vars_eNB->Mod_id,
@@ -3505,7 +2806,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
*/
-#endif
+ }
phy_vars_eNB->eNB_UE_stats[i].mode = PUSCH;
phy_vars_eNB->ulsch_eNB[i]->Msg3_flag = 0;
@@ -3554,7 +2855,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
//dump_ulsch(phy_vars_eNB,sched_subframe,i);
-#ifdef OPENAIR2
+ if (phy_vars_eNB->mac_enabled==1) {
// if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->calibration_flag == 0) {
mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
phy_vars_eNB->CC_id,
@@ -3581,7 +2882,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
stop_meas(&phy_vars_eNB->localization_stats);
#endif
-#endif
+ }
}
// estimate timing advance for MAC
@@ -3736,12 +3037,12 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
phy_vars_eNB->ulsch_eNB[i]->rnti,frame,subframe);
}
-#ifdef OPENAIR2
- mac_xface->SR_indication(phy_vars_eNB->Mod_id,
- phy_vars_eNB->CC_id,
- frame,
- phy_vars_eNB->dlsch_eNB[i][0]->rnti,subframe);
-#endif
+ if (phy_vars_eNB->mac_enabled==1) {
+ mac_xface->SR_indication(phy_vars_eNB->Mod_id,
+ phy_vars_eNB->CC_id,
+ frame,
+ phy_vars_eNB->dlsch_eNB[i][0]->rnti,subframe);
+ }
}
}// do_SR==1
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index c96d277b96..913321bb98 100755
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -59,20 +59,15 @@ extern int card;
#endif
#endif
-//#define DEBUG_PHY_PROC
-#define UE_TX_POWER (-10)
+#define DEBUG_PHY_PROC
-//#ifdef OPENAIR2
#ifndef PUCCH
#define PUCCH
#endif
-//#endif
-//#ifdef OPENAIR2
#include "LAYER2/MAC/extern.h"
#include "LAYER2/MAC/defs.h"
#include "UTIL/LOG/log.h"
-//#endif
#ifdef EMOS
fifo_dump_emos_UE emos_dump_UE;
@@ -87,9 +82,6 @@ fifo_dump_emos_UE emos_dump_UE;
# endif
#endif
-#ifndef OPENAIR2
-//#define DIAG_PHY
-#endif
#define DLSCH_RB_ALLOC 0x1fbf // skip DC RB (total 23/25 RBs)
#define DLSCH_RB_ALLOC_12 0x0aaa // skip DC RB (total 23/25 RBs)
@@ -454,7 +446,7 @@ uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue,
if (frame_parms->frame_type == FDD ) { // FDD
sf = (subframe<4)? subframe+6 : subframe-4;
- printf("n1_pucch_UE: subframe %d, nCCE %d\n",sf,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->nCCE[sf]);
+ LOG_D(PHY,"n1_pucch_UE: subframe %d, nCCE %d\n",sf,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->nCCE[sf]);
if (SR == 0)
return(frame_parms->pucch_config_common.n1PUCCH_AN + phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->nCCE[sf]);
@@ -642,16 +634,12 @@ void phy_procedures_emos_UE_TX(uint8_t next_slot,uint8_t eNB_id) {
#endif
int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
-#ifndef OPENAIR2
PRACH_RESOURCES_t prach_resources_local;
-#endif
void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type)
{
-#ifndef OPENAIR2
int i;
-#endif
uint16_t first_rb, nb_rb;
uint8_t harq_pid;
unsigned int input_buffer_length;
@@ -724,8 +712,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
subframe_tx);
-#ifdef OPENAIR2
-
+ if (phy_vars_ue->mac_enabled == 1) {
if ((phy_vars_ue->ulsch_ue_Msg3_active[eNB_id] == 1) &&
(phy_vars_ue->ulsch_ue_Msg3_frame[eNB_id] == frame_tx) &&
(phy_vars_ue->ulsch_ue_Msg3_subframe[eNB_id] == subframe_tx)) { // Initial Transmission of Msg3
@@ -756,8 +743,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
Msg3_flag=0;
}
-
-#endif
+ }
if (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag == 1) {
@@ -856,19 +842,17 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
#endif
stop_meas(&phy_vars_ue->ulsch_encoding_stats);
-
-#ifdef OPENAIR2
- // signal MAC that Msg3 was sent
- mac_xface->Msg3_transmitted(Mod_id,
- CC_id,
- frame_tx,
- eNB_id);
-#endif
+ if (phy_vars_ue->mac_enabled == 1) {
+ // signal MAC that Msg3 was sent
+ mac_xface->Msg3_transmitted(Mod_id,
+ CC_id,
+ frame_tx,
+ eNB_id);
+ }
} else {
input_buffer_length = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS/8;
-#ifdef OPENAIR2
-
+ if (phy_vars_ue->mac_enabled==1) {
// LOG_D(PHY,"[UE %d] ULSCH : Searching for MAC SDUs\n",Mod_id);
if (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->round==0) {
//if (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->calibration_flag == 0) {
@@ -905,7 +889,8 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
LOG_T(PHY,"\n");
#endif
#endif
-#else //OPENAIR2
+ }
+ else {
// the following lines were necessary for the calibration in CROWN
/*
if (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->calibration_flag == 0) {
@@ -928,8 +913,8 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
for (i=0;iulsch_encoding_stats);
if (abstraction_flag==0) {
@@ -961,12 +946,13 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
}
if (abstraction_flag == 0) {
-#ifdef OPENAIR2
- pusch_power_cntl(phy_vars_ue,subframe_tx,eNB_id,1, abstraction_flag);
- phy_vars_ue->tx_power_dBm = phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH;
-#else
- phy_vars_ue->tx_power_dBm = UE_TX_POWER;
-#endif
+ if (phy_vars_ue->mac_enabled==1) {
+ pusch_power_cntl(phy_vars_ue,subframe_tx,eNB_id,1, abstraction_flag);
+ phy_vars_ue->tx_power_dBm = phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH;
+ }
+ else {
+ phy_vars_ue->tx_power_dBm = phy_vars_ue->tx_power_max_dBm;
+ }
phy_vars_ue->tx_total_RE = nb_rb*12;
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
@@ -1023,17 +1009,19 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
if (is_SR_TXOp(phy_vars_ue,eNB_id,subframe_tx)==1) {
LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d: got SR_TXOp, Checking for SR for PUSCH from MAC\n",
Mod_id,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,frame_tx,subframe_tx);
-#ifdef OPENAIR2
- SR_payload = mac_xface->ue_get_SR(Mod_id,
- CC_id,
- frame_tx,
- eNB_id,
- phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
- subframe_tx); // subframe used for meas gap
-#else
- SR_payload = 1;
-#endif
+ if (phy_vars_ue->mac_enabled==1) {
+ SR_payload = mac_xface->ue_get_SR(Mod_id,
+ CC_id,
+ frame_tx,
+ eNB_id,
+ phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,
+ subframe_tx); // subframe used for meas gap
+ }
+ else {
+ SR_payload = 1;
+ }
+
if (SR_payload>0) {
generate_ul_signal = 1;
LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d got the SR for PUSCH is %d\n",
@@ -1041,8 +1029,9 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
} else {
phy_vars_ue->sr[subframe_tx]=0;
}
- } else
+ } else {
SR_payload=0;
+ }
if (get_ack(&phy_vars_ue->lte_frame_parms,
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack,
@@ -1057,12 +1046,13 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
pucch_ack_payload,
SR_payload);
-#ifdef OPENAIR2
- Po_PUCCH = pucch_power_cntl(phy_vars_ue,subframe_tx,eNB_id,format);
- phy_vars_ue->tx_power_dBm = Po_PUCCH;
-#else
- phy_vars_ue->tx_power_dBm = UE_TX_POWER;
-#endif
+ if (phy_vars_ue->mac_enabled == 1) {
+ Po_PUCCH = pucch_power_cntl(phy_vars_ue,subframe_tx,eNB_id,format);
+ }
+ else {
+ Po_PUCCH = phy_vars_ue->tx_power_max_dBm;
+ }
+ phy_vars_ue->tx_power_dBm = Po_PUCCH;
phy_vars_ue->tx_total_RE = 12;
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
@@ -1120,12 +1110,13 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
}
} else if (SR_payload==1) { // no ACK/NAK but SR is triggered by MAC
-#ifdef OPENAIR2
- Po_PUCCH = pucch_power_cntl(phy_vars_ue,subframe_tx,eNB_id,pucch_format1);
- phy_vars_ue->tx_power_dBm = Po_PUCCH;
-#else
- phy_vars_ue->tx_power_dBm = UE_TX_POWER;
-#endif
+ if (phy_vars_ue->mac_enabled == 1) {
+ Po_PUCCH = pucch_power_cntl(phy_vars_ue,subframe_tx,eNB_id,pucch_format1);
+ }
+ else {
+ Po_PUCCH = phy_vars_ue->tx_power_max_dBm;
+ }
+ phy_vars_ue->tx_power_dBm = Po_PUCCH;
phy_vars_ue->tx_total_RE = 12;
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
@@ -1345,30 +1336,23 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
// }// slot_tx is even
// else { // slot_tx is odd, do the PRACH here
-#ifdef OPENAIR2
-
if ((phy_vars_ue->UE_mode[eNB_id] == PRACH) && (phy_vars_ue->lte_frame_parms.prach_config_common.prach_Config_enabled==1)) {
-#else
-
- if (1) {
-#endif
-
// check if we have PRACH opportunity
if (is_prach_subframe(&phy_vars_ue->lte_frame_parms,frame_tx,subframe_tx)) {
phy_vars_ue->generate_prach=0;
-#ifdef OPENAIR2
- // ask L2 for RACH transport
- if ((mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) && (mode != no_L2_connect) ) {
- phy_vars_ue->prach_resources[eNB_id] = mac_xface->ue_get_rach(Mod_id,
- CC_id,
- frame_tx,
- eNB_id,
- subframe_tx);
- // LOG_I(PHY,"Got prach_resources for eNB %d address %d, RRCCommon %d\n",eNB_id,phy_vars_ue->prach_resources[eNB_id],UE_mac_inst[Mod_id].radioResourceConfigCommon);
- }
-#endif
+ if (phy_vars_ue->mac_enabled==1){
+ // ask L2 for RACH transport
+ if ((mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) && (mode != no_L2_connect) ) {
+ phy_vars_ue->prach_resources[eNB_id] = mac_xface->ue_get_rach(Mod_id,
+ CC_id,
+ frame_tx,
+ eNB_id,
+ subframe_tx);
+ // LOG_I(PHY,"Got prach_resources for eNB %d address %d, RRCCommon %d\n",eNB_id,phy_vars_ue->prach_resources[eNB_id],UE_mac_inst[Mod_id].radioResourceConfigCommon);
+ }
+ }
if (phy_vars_ue->prach_resources[eNB_id]!=NULL) {
@@ -1391,16 +1375,13 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
phy_vars_ue->prach_resources[eNB_id]->ra_TDD_map_index,
phy_vars_ue->prach_resources[eNB_id]->ra_RNTI);
-#ifdef OPENAIR2
- if (mode != calib_prach_tx)
+ if ((phy_vars_ue->mac_enabled==1) && (mode != calib_prach_tx)) {
phy_vars_ue->tx_power_dBm = phy_vars_ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(Mod_id,CC_id,eNB_id);
+ }
else {
phy_vars_ue->tx_power_dBm = phy_vars_ue->tx_power_max_dBm;
phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex = 19;
}
-#else
- phy_vars_ue->tx_power_dBm = UE_TX_POWER;
-#endif
phy_vars_ue->tx_total_RE = 96;
@@ -1431,12 +1412,12 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
} else {
UE_transport_info[Mod_id][CC_id].cntl.prach_flag=1;
UE_transport_info[Mod_id][CC_id].cntl.prach_id=phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex;
-#ifdef OPENAIR2
- mac_xface->Msg1_transmitted(Mod_id,
- CC_id,
- frame_tx,
- eNB_id);
-#endif
+ if (phy_vars_ue->mac_enabled==1){
+ mac_xface->Msg1_transmitted(Mod_id,
+ CC_id,
+ frame_tx,
+ eNB_id);
+ }
}
LOG_D(PHY,"[UE %d][RAPROC] Frame %d, subframe %d: Generating PRACH (eNB %d) preamble index %d for UL, TX power %d dBm (PL %d dB), l3msg \n",
@@ -1549,13 +1530,13 @@ void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t
if ((openair_daq_vars.rx_gain_mode == DAQ_AGC_ON) &&
(mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) )
if (phy_vars_ue->frame_rx%100==0)
- gain_control_all(phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id],0);
+ gain_control_all(dB_fixed(phy_vars_ue->PHY_measurements.rssi),0);
#else
#ifndef OAI_USRP
#ifndef OAI_BLADERF
#ifndef OAI_LMSSDR
- phy_adjust_gain (phy_vars_ue,0);
+ phy_adjust_gain (phy_vars_ue,dB_fixed(phy_vars_ue->PHY_measurements.rssi),0);
#endif
#endif
#endif
@@ -1822,11 +1803,11 @@ void lte_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
frame_tx += ((int)(phy_vars_ue->lte_ue_pbch_vars[eNB_id]->decoded_output[1]&0xfc));
frame_tx += pbch_phase;
-#ifdef OPENAIR2
- mac_xface->dl_phy_sync_success(phy_vars_ue->Mod_id,frame_rx,eNB_id,
- phy_vars_ue->UE_mode[eNB_id]==NOT_SYNCHED ? 1 : 0);
-#endif
-
+ if (phy_vars_ue->mac_enabled==1) {
+ mac_xface->dl_phy_sync_success(phy_vars_ue->Mod_id,frame_rx,eNB_id,
+ phy_vars_ue->UE_mode[eNB_id]==NOT_SYNCHED ? 1 : 0);
+ }
+
#ifdef EMOS
//emos_dump_UE.frame_tx = frame_tx;
//emos_dump_UE.mimo_mode = phy_vars_ue->lte_ue_pbch_vars[eNB_id]->decoded_output[1];
@@ -1906,16 +1887,15 @@ void lte_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
phy_vars_ue->Mod_id,frame_rx, slot_rx);
phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_conseq++;
phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors++;
-#ifdef OPENAIR2
- mac_xface->out_of_sync_ind(phy_vars_ue->Mod_id,frame_rx,eNB_id);
-#else
-
- if (phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_conseq>=100) {
- LOG_E(PHY,"More that 100 consecutive PBCH errors! Exiting!\n");
- mac_xface->macphy_exit("More that 100 consecutive PBCH errors!");
+ if (phy_vars_ue->mac_enabled == 1) {
+ mac_xface->out_of_sync_ind(phy_vars_ue->Mod_id,frame_rx,eNB_id);
+ }
+ else{
+ if (phy_vars_ue->lte_ue_pbch_vars[eNB_id]->pdu_errors_conseq>=100) {
+ LOG_E(PHY,"More that 100 consecutive PBCH errors! Exiting!\n");
+ mac_xface->macphy_exit("More that 100 consecutive PBCH errors!");
+ }
}
-
-#endif
}
if (frame_rx % 100 == 0) {
@@ -2105,10 +2085,10 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
#ifdef DEBUG_PHY_PROC
- // if (subframe_rx == 9) { //( frame_rx % 100 == 0) {
+ if ( frame_rx % 100 == 0) {
LOG_D(PHY,"frame %d, subframe %d, rnti %x: dci %d/%d\n",frame_rx,subframe_rx,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,i,dci_cnt);
- //dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
- // }
+ dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]);
+ }
#endif
@@ -2416,9 +2396,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
int eNB_id_i = 1;
uint8_t dual_stream_UE = 0;
#endif
-#ifndef OPENAIR2
uint8_t *rar;
-#endif
int pmch_flag=0;
uint8_t sync_area=255;
int pmch_mcs=-1;
@@ -2427,9 +2405,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
int slot_rx = phy_vars_ue->slot_rx;
int subframe_rx = slot_rx>>1;
int subframe_prev = (subframe_rx+9)%10;
-#ifdef OPENAIR2
int CC_id = phy_vars_ue->CC_id;
-#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_IN);
@@ -2661,7 +2637,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid],
subframe_prev,
harq_pid,
- 1,0);
+ 1,1);
stop_meas(&phy_vars_ue->dlsch_decoding_stats);
}
@@ -2685,10 +2661,11 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx,
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs,
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS);
-
- // if (abstraction_flag ==0 )
- dump_dlsch(phy_vars_ue,eNB_id,subframe_prev,harq_pid);
- mac_xface->macphy_exit("DLSCH in error");
+/*
+ if (abstraction_flag ==0 )
+ dump_dlsch(phy_vars_ue,eNB_id,subframe_prev,harq_pid);
+ mac_xface->macphy_exit("");
+*/
#endif
} else {
LOG_D(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d (slot_rx %d): Received DLSCH (rv %d,mcs %d,TBS %d)\n",
@@ -2708,14 +2685,14 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
LOG_T(PHY,"\n");
#endif
#endif
-#ifdef OPENAIR2
- mac_xface->ue_send_sdu(phy_vars_ue->Mod_id,
- CC_id,
- frame_rx,
- phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->b,
- phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->TBS>>3,
- eNB_id);
-#endif
+ if (phy_vars_ue->mac_enabled == 1) {
+ mac_xface->ue_send_sdu(phy_vars_ue->Mod_id,
+ CC_id,
+ frame_rx,
+ phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->b,
+ phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->TBS>>3,
+ eNB_id);
+ }
phy_vars_ue->total_TBS[eNB_id] = phy_vars_ue->total_TBS[eNB_id] +
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->TBS;
phy_vars_ue->total_received_bits[eNB_id] = phy_vars_ue->total_TBS[eNB_id] +
@@ -2885,24 +2862,20 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[3]);
#endif
-#ifdef OPENAIR2
- /*
- printf("\n\n");
- for (i=0;idlsch_ue_SI[eNB_id]->harq_processes[0]->TBS>>3;i++)
- printf("%02x ",phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->b[i]);
- printf("\n");
- */
- mac_xface->ue_decode_si(phy_vars_ue->Mod_id,
- CC_id,
- frame_rx,
- eNB_id,
- phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->b,
- phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS>>3);
- /*
- if ((frame_rx % 160) < 10)
- printf("sending SI to L2 in frame %d\n",frame_rx);
- */
-#endif
+ if (phy_vars_ue->mac_enabled == 1) {
+ /*
+ printf("\n\n");
+ for (i=0;idlsch_ue_SI[eNB_id]->harq_processes[0]->TBS>>3;i++)
+ printf("%02x ",phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->b[i]);
+ printf("\n");
+ */
+ mac_xface->ue_decode_si(phy_vars_ue->Mod_id,
+ CC_id,
+ frame_rx,
+ eNB_id,
+ phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->b,
+ phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS>>3);
+ }
}
}
@@ -3018,8 +2991,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
subframe_prev, phy_vars_ue->UE_mode[eNB_id]);
#endif
-#ifdef OPENAIR2
-
+ if (phy_vars_ue->mac_enabled == 1) {
if ((phy_vars_ue->UE_mode[eNB_id] != PUSCH) && (phy_vars_ue->prach_resources[eNB_id]->Msg3!=NULL)) {
LOG_D(PHY,"[UE %d][RAPROC] Frame %d subframe %d Invoking MAC for RAR (current preamble %d)\n",
phy_vars_ue->Mod_id,frame_rx-((subframe_prev==9) ? 1 : 0),
@@ -3076,14 +3048,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex);
}
} // mode != PUSCH
-
-#else //OPENAIR2
-
- rar = phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->b+1;
- timing_advance = ((((uint16_t)(rar[0]&0x7f))<<4) + (rar[1]>>4));
- //timing_advance = phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->b[0];
- process_timing_advance_rar(phy_vars_ue,timing_advance);
-#endif
+ }
+ else {
+ rar = phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->b+1;
+ timing_advance = ((((uint16_t)(rar[0]&0x7f))<<4) + (rar[1]>>4));
+ //timing_advance = phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->b[0];
+ process_timing_advance_rar(phy_vars_ue,timing_advance);
+ }
} //ret <= MAX_ITERATIONS
/*
@@ -3352,7 +3323,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac
phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0],
subframe_prev,
0,
- 0,0);
+ 0,1);
} else { // abstraction
#ifdef PHY_ABSTRACTION
ret = dlsch_decoding_emul(phy_vars_ue,
@@ -3635,24 +3606,21 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr
int CC_id =0;
#endif
int frame_rx = phy_vars_ue->frame_rx;
-#ifdef OPENAIR2
int frame_tx = phy_vars_ue->frame_tx;
-#endif
int slot_rx = phy_vars_ue->slot_rx;
int slot_tx = phy_vars_ue->slot_tx;
int subframe_tx = slot_tx>>1;
int subframe_rx = slot_rx>>1;
#undef DEBUG_PHY_PROC
-#ifdef OPENAIR2
UE_L2_STATE_t ret;
-#endif
-#ifndef OPENAIR2
- phy_vars_ue->UE_mode[eNB_id]=PUSCH;
- phy_vars_ue->prach_resources[eNB_id] = &prach_resources_local;
- prach_resources_local.ra_RNTI = 0xbeef;
- prach_resources_local.ra_PreambleIndex = 0;
-#endif
+
+ if (phy_vars_ue->mac_enabled == 0) {
+ phy_vars_ue->UE_mode[eNB_id]=PUSCH;
+ phy_vars_ue->prach_resources[eNB_id] = &prach_resources_local;
+ prach_resources_local.ra_RNTI = 0xbeef;
+ prach_resources_local.ra_PreambleIndex = 0;
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,1);
@@ -3851,16 +3819,14 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr
phy_procedures_UE_RX(phy_vars_ue,eNB_id,abstraction_flag,mode,r_type,phy_vars_rn);
}
-#ifdef OPENAIR2
-
- if (slot_rx%2==0) {
-
- ret = mac_xface->ue_scheduler(phy_vars_ue->Mod_id,
- frame_tx,
- subframe_rx,
- subframe_select(&phy_vars_ue->lte_frame_parms,subframe_tx),
- eNB_id,
- 0/*FIXME CC_id*/);
+ if (phy_vars_ue->mac_enabled==1) {
+ if (slot_rx%2==0) {
+ ret = mac_xface->ue_scheduler(phy_vars_ue->Mod_id,
+ frame_tx,
+ subframe_rx,
+ subframe_select(&phy_vars_ue->lte_frame_parms,subframe_tx),
+ eNB_id,
+ 0/*FIXME CC_id*/);
if (ret == CONNECTION_LOST) {
LOG_E(PHY,"[UE %d] Frame %d, subframe %d RRC Connection lost, returning to PRACH\n",phy_vars_ue->Mod_id,
@@ -3879,11 +3845,7 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr
phy_vars_ue->UE_mode[eNB_id] = PRACH;
}
}
-
-#endif
-
- // if (last_slot == 19)
- // phy_vars_ue->frame++;
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,0);
stop_meas(&phy_vars_ue->phy_proc);
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index 2c3d0848c2..7bdc6ffd31 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -61,25 +61,7 @@
extern unsigned int dlsch_tbs25[27][25],TBStable[27][110];
extern unsigned char offset_mumimo_llr_drange_fix;
-#ifdef XFORMS
#include "PHY/TOOLS/lte_phy_scope.h"
-#endif
-
-
-
-//#define AWGN
-//#define NO_DCI
-
-
-
-//#define ABSTRACTION
-
-/*
- #define RBmask0 0x00fc00fc
- #define RBmask1 0x0
- #define RBmask2 0x0
- #define RBmask3 0x0
-*/
PHY_VARS_eNB *PHY_vars_eNB;
PHY_VARS_UE *PHY_vars_UE;
@@ -233,14 +215,13 @@ int main(int argc, char **argv)
// void *data;
// int ii;
// int bler;
- double blerr[4],uncoded_ber;//,avg_ber;
+ double blerr[4],uncoded_ber,avg_ber;
short *uncoded_ber_bit=NULL;
uint8_t N_RB_DL=25,osf=1;
frame_t frame_type = FDD;
-#ifdef XFORMS
+ int xforms=0;
FD_lte_phy_scope_ue *form_ue;
char title[255];
-#endif
uint32_t DLSCH_RB_ALLOC = 0x1fff;
int numCCE=0;
int dci_length_bytes=0,dci_length=0;
@@ -305,7 +286,7 @@ int main(int argc, char **argv)
// num_layers = 1;
perfect_ce = 0;
- while ((c = getopt (argc, argv, "ahdpZDe:Em:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:Y")) != -1) {
+ while ((c = getopt (argc, argv, "ahdpZDe:Em:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:XY")) != -1) {
switch (c) {
case 'a':
awgn_flag = 1;
@@ -557,6 +538,10 @@ int main(int argc, char **argv)
break;
+ case 'X':
+ xforms=1;
+ break;
+
case 'Y':
perfect_ce=1;
break;
@@ -636,21 +621,20 @@ int main(int argc, char **argv)
if ((transmission_mode > 1) && (n_tx != 2))
printf("n_tx must be >1 for transmission_mode %d\n",transmission_mode);
-#ifdef XFORMS
- fl_initialize (&argc, argv, NULL, 0, 0);
- form_ue = create_lte_phy_scope_ue();
- sprintf (title, "LTE PHY SCOPE eNB");
- fl_show_form (form_ue->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
-
- if (!dual_stream_UE==0) {
- openair_daq_vars.use_ia_receiver = 1;
- fl_set_button(form_ue->button_0,1);
- fl_set_object_label(form_ue->button_0, "IA Receiver ON");
- fl_set_object_color(form_ue->button_0, FL_GREEN, FL_GREEN);
+ if (xforms==1) {
+ fl_initialize (&argc, argv, NULL, 0, 0);
+ form_ue = create_lte_phy_scope_ue();
+ sprintf (title, "LTE PHY SCOPE eNB");
+ fl_show_form (form_ue->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
+
+ if (!dual_stream_UE==0) {
+ openair_daq_vars.use_ia_receiver = 1;
+ fl_set_button(form_ue->button_0,1);
+ fl_set_object_label(form_ue->button_0, "IA Receiver ON");
+ fl_set_object_color(form_ue->button_0, FL_GREEN, FL_GREEN);
+ }
}
-#endif
-
if (transmission_mode==5) {
n_users = 2;
printf("dual_stream_UE=%d\n", dual_stream_UE);
@@ -3306,7 +3290,7 @@ PMI_FEEDBACK:
PHY_vars_UE->dlsch_ue[0][cw]->harq_processes[PHY_vars_UE->dlsch_ue[0][cw]->current_harq_pid]->G = coded_bits_per_codeword;
- /*
+
// calculate uncoded BLER
uncoded_ber=0;
for (i=0;idlsch_unscrambling_stats);
dlsch_unscrambling(&PHY_vars_UE->lte_frame_parms,
@@ -3433,12 +3417,12 @@ PMI_FEEDBACK:
}
sprintf(fname,"rxsig0_r%d.m",round);
- sprintf(vname,"rxs0_r%d.m",round);
+ sprintf(vname,"rxs0_r%d",round);
write_output(fname,vname, &PHY_vars_UE->lte_ue_common_vars.rxdata[0][0],10*PHY_vars_UE->lte_frame_parms.samples_per_tti,1,1);
sprintf(fname,"rxsigF0_r%d.m",round);
- sprintf(vname,"rxs0F_r%d.m",round);
+ sprintf(vname,"rxs0F_r%d",round);
write_output(fname,vname, &PHY_vars_UE->lte_ue_common_vars.rxdataF[0][0],2*PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,2,1);
-
+
if (PHY_vars_UE->lte_frame_parms.nb_antennas_rx>1) {
sprintf(fname,"rxsig1_r%d.m",round);
sprintf(vname,"rxs1_r%d.m",round);
@@ -3449,14 +3433,14 @@ PMI_FEEDBACK:
}
sprintf(fname,"dlsch00_r%d.m",round);
- sprintf(vname,"dl00_r%d.m",round);
+ sprintf(vname,"dl00_r%d",round);
write_output(fname,vname,
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][0][0]),
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
if (PHY_vars_UE->lte_frame_parms.nb_antennas_rx>1) {
sprintf(fname,"dlsch01_r%d.m",round);
- sprintf(vname,"dl01_r%d.m",round);
+ sprintf(vname,"dl01_r%d",round);
write_output(fname,vname,
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][1][0]),
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb/2,1,1);
@@ -3464,7 +3448,7 @@ PMI_FEEDBACK:
if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1) {
sprintf(fname,"dlsch10_r%d.m",round);
- sprintf(vname,"dl10_r%d.m",round);
+ sprintf(vname,"dl10_r%d",round);
write_output(fname,vname,
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][2][0]),
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb/2,1,1);
@@ -3472,7 +3456,7 @@ PMI_FEEDBACK:
if ((PHY_vars_UE->lte_frame_parms.nb_antennas_rx>1) && (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)) {
sprintf(fname,"dlsch11_r%d.m",round);
- sprintf(vname,"dl11_r%d.m",round);
+ sprintf(vname,"dl11_r%d",round);
write_output(fname,vname,
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][3][0]),
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb/2,1,1);
@@ -3496,13 +3480,13 @@ PMI_FEEDBACK:
// PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->round++;
}
-#ifdef XFORMS
- phy_scope_UE(form_ue,
- PHY_vars_UE,
- eNB_id,
- 0,// UE_id
- subframe);
-#endif
+ if (xforms==1) {
+ phy_scope_UE(form_ue,
+ PHY_vars_UE,
+ eNB_id,
+ 0,// UE_id
+ subframe);
+ }
} //round
@@ -4003,7 +3987,7 @@ PMI_FEEDBACK:
printf("[continue] effective rate : %f (%2.1f%%,%f)): increase snr \n",rate*effective_rate, 100*effective_rate, rate);
}
- if (((double)errs[0]/(round_trials[0]))<1e-2)
+ if (((double)errs[0]/(round_trials[0]))<(10.0/n_frames))
break;
}// SNR
diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c
index 98d1b68a15..0044b2ff51 100644
--- a/openair1/SIMULATION/LTE_PHY/mbmssim.c
+++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c
@@ -173,7 +173,9 @@ int main(int argc, char **argv)
lte_frame_type_t frame_type = FDD;
+ uint32_t Nsoft = 1827072;
+ /*
#ifdef XFORMS
FD_lte_phy_scope_ue *form_ue;
char title[255];
@@ -183,6 +185,7 @@ int main(int argc, char **argv)
sprintf (title, "LTE DL SCOPE UE");
fl_show_form (form_ue->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
#endif
+ */
logInit();
number_of_cards = 1;
@@ -382,14 +385,14 @@ int main(int argc, char **argv)
0);
// Create transport channel structures for 2 transport blocks (MIMO)
- PHY_vars_eNB->dlsch_eNB_MCH = new_eNB_dlsch(1,8,N_RB_DL,0);
+ PHY_vars_eNB->dlsch_eNB_MCH = new_eNB_dlsch(1,8,Nsoft,N_RB_DL,0);
if (!PHY_vars_eNB->dlsch_eNB_MCH) {
printf("Can't get eNB dlsch structures\n");
exit(-1);
}
- PHY_vars_UE->dlsch_ue_MCH[0] = new_ue_dlsch(1,8,MAX_TURBO_ITERATIONS_MBSFN,N_RB_DL,0);
+ PHY_vars_UE->dlsch_ue_MCH[0] = new_ue_dlsch(1,8,Nsoft,MAX_TURBO_ITERATIONS_MBSFN,N_RB_DL,0);
PHY_vars_eNB->lte_frame_parms.num_MBSFN_config = 1;
PHY_vars_eNB->lte_frame_parms.MBSFN_config[0].radioframeAllocationPeriod = 0;
diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c
index c8e793a5d9..4117ac1a7d 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsim.c
+++ b/openair1/SIMULATION/LTE_PHY/ulsim.c
@@ -52,9 +52,7 @@
#include "LAYER2/MAC/vars.h"
#include "OCG_vars.h"
-#ifdef XFORMS
#include "PHY/TOOLS/lte_phy_scope.h"
-#endif
extern unsigned short dftsizes[33];
extern short *ul_ref_sigs[30][2][33];
@@ -74,12 +72,9 @@ node_desc_t *ue_data[NUMBER_OF_UE_MAX];
extern uint16_t beta_ack[16],beta_ri[16],beta_cqi[16];
//extern char* namepointer_chMag ;
-
-
-#ifdef XFORMS
+int xforms=0;
FD_lte_phy_scope_enb *form_enb;
char title[255];
-#endif
/*the following parameters are used to control the processing times*/
double t_tx_max = -1000000000; /*!< \brief initial max process time for tx */
@@ -204,7 +199,7 @@ int main(int argc, char **argv)
logInit();
- while ((c = getopt (argc, argv, "hapZEbm:n:Y:X:x:s:w:e:q:d:D:O:c:r:i:f:y:c:oA:C:R:g:N:l:S:T:QB:PI:L")) != -1) {
+ while ((c = getopt (argc, argv, "hapZEbm:n:Y:X:x:s:w:e:q:d:D:O:c:r:i:f:y:c:oA:C:R:g:N:l:S:T:QB:PI:LF")) != -1) {
switch (c) {
case 'a':
channel_model = AWGN;
@@ -454,6 +449,10 @@ int main(int argc, char **argv)
max_turbo_iterations=atoi(optarg);
break;
+ case 'F':
+ xforms=1;
+ break;
+
case 'Z':
dump_table = 1;
break;
@@ -589,12 +588,12 @@ int main(int argc, char **argv)
}
-#ifdef XFORMS
- fl_initialize (&argc, argv, NULL, 0, 0);
- form_enb = create_lte_phy_scope_enb();
- sprintf (title, "LTE PHY SCOPE eNB");
- fl_show_form (form_enb->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
-#endif
+ if (xforms==1) {
+ fl_initialize (&argc, argv, NULL, 0, 0);
+ form_enb = create_lte_phy_scope_enb();
+ sprintf (title, "LTE PHY SCOPE eNB");
+ fl_show_form (form_enb->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
+ }
PHY_vars_UE->lte_ue_pdcch_vars[0]->crnti = 14;
@@ -1356,9 +1355,9 @@ int main(int argc, char **argv)
if ((errs[0]>=100) && (trials>(n_frames/2)))
break;
-#ifdef XFORMS
- phy_scope_eNB(form_enb,PHY_vars_eNB,0);
-#endif
+ if (xforms==1)
+ phy_scope_eNB(form_enb,PHY_vars_eNB,0);
+
/*calculate the total processing time for each packet, get the max, min, and number of packets that exceed t>3000us*/
double t_tx = (double)PHY_vars_UE->phy_proc_tx.p_time/cpu_freq_GHz/1000.0;
diff --git a/openair2/COMMON/commonDef.h b/openair2/COMMON/commonDef.h
index e33e64ec06..64216b0094 100644
--- a/openair2/COMMON/commonDef.h
+++ b/openair2/COMMON/commonDef.h
@@ -48,7 +48,19 @@ Description Contains global common definitions
#include
#include
+#include
+typedef signed char boolean_t;
+
+#if !defined(TRUE)
+#define TRUE (boolean_t)0x01
+#endif
+
+#if !defined(FALSE)
+#define FALSE (boolean_t)0x00
+#endif
+
+#define BOOL_NOT(b) (b^TRUE)
#define NAS_UE_ID_FMT "0x%06x"
@@ -59,13 +71,6 @@ Description Contains global common definitions
#define RETURNok (0)
#define RETURNerror (-1)
-#ifndef FALSE
-#define FALSE (0)
-#endif
-#ifndef TRUE
-#define TRUE (1)
-#endif
-
/*
* Name of the environment variable which defines the default directory
* where the NAS application is executed and where are located files
diff --git a/openair2/COMMON/s1ap_messages_types.h b/openair2/COMMON/s1ap_messages_types.h
index c39725b737..f2c6a2a3a2 100644
--- a/openair2/COMMON/s1ap_messages_types.h
+++ b/openair2/COMMON/s1ap_messages_types.h
@@ -112,7 +112,7 @@ typedef struct net_ip_address_s {
unsigned ipv4:1;
unsigned ipv6:1;
char ipv4_address[16];
- char ipv6_address[40];
+ char ipv6_address[46];
} net_ip_address_t;
typedef uint64_t bitrate_t;
diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c
index 4c532285f2..cc63eb8671 100755
--- a/openair2/ENB_APP/enb_config.c
+++ b/openair2/ENB_APP/enb_config.c
@@ -265,7 +265,7 @@ static const eutra_band_t eutra_bands[] = {
Enb_properties_array_t enb_properties;
-static void enb_config_display(void)
+void enb_config_display(void)
{
int i,j;
@@ -1019,7 +1019,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
enb_properties.properties[enb_properties_index]->prach_zero_correlation[j] =prach_zero_correlation;
- if ((prach_zero_correlation <0) || (prach_zero_correlation > 63))
+ if ((prach_zero_correlation <0) || (prach_zero_correlation > 15))
AssertError (0, parse_errors ++,
"Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_zero_correlation choice: 0..15!\n",
lib_config_file_name_pP, i, prach_zero_correlation);
diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h
index 422ef67cd3..5f7f2636a3 100755
--- a/openair2/ENB_APP/enb_config.h
+++ b/openair2/ENB_APP/enb_config.h
@@ -264,6 +264,7 @@ typedef struct Enb_properties_array_s {
Enb_properties_t *properties[MAX_ENB];
} Enb_properties_array_t;
+void enb_config_display(void);
const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP);
const Enb_properties_array_t *enb_config_get(void);
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index ea10f5a9fd..b1410003c2 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -525,54 +525,6 @@ uint32_t bytes_to_bsr_index(int32_t nbytes)
return(i-1);
}
-/*
-void adjust_bsr_info(int buffer_occupancy,
- uint16_t TBS,
- UE_TEMPLATE *UE_template)
-{
-
- uint32_t tmp_bsr;
-
- // could not serve all the uplink traffic
- if (buffer_occupancy > 0 ) {
- if (BSR_TABLE[UE_template->bsr_info[LCGID0]] <= TBS ) {
- tmp_bsr = BSR_TABLE[UE_template->bsr_info[LCGID0]]; // serving this amout of bytes
- UE_template->bsr_info[LCGID0] = 0;
-
- if (BSR_TABLE[UE_template->bsr_info[LCGID1]] <= (TBS-tmp_bsr)) {
- tmp_bsr += BSR_TABLE[UE_template->bsr_info[LCGID1]];
- UE_template->bsr_info[LCGID1] = 0;
-
- if (BSR_TABLE[UE_template->bsr_info[LCGID2]] <= (TBS-tmp_bsr)) {
- tmp_bsr += BSR_TABLE[UE_template->bsr_info[LCGID2]];
- UE_template->bsr_info[LCGID2] = 0;
-
- if (BSR_TABLE[UE_template->bsr_info[LCGID3]] <= (TBS-tmp_bsr)) {
- tmp_bsr += BSR_TABLE[UE_template->bsr_info[LCGID3]];
- UE_template->bsr_info[LCGID3] = 0;
- } else {
- UE_template->bsr_info[LCGID3] = bytes_to_bsr_index((int32_t)BSR_TABLE[UE_template->bsr_info[LCGID3]] - ((int32_t) TBS - (int32_t)tmp_bsr));
- }
- } else {
- UE_template->bsr_info[LCGID2] = bytes_to_bsr_index((int32_t)BSR_TABLE[UE_template->bsr_info[LCGID2]] - ((int32_t)TBS - (int32_t)tmp_bsr));
- }
- } else {
- UE_template->bsr_info[LCGID1] = bytes_to_bsr_index((int32_t)BSR_TABLE[UE_template->bsr_info[LCGID1]] - ((int32_t)TBS - (int32_t)tmp_bsr));
- }
- } else {
- UE_template->bsr_info[LCGID0] = bytes_to_bsr_index((int32_t)BSR_TABLE[UE_template->bsr_info[LCGID0]] - (int32_t)TBS);
- }
- } else { // we have flushed all buffers so clear bsr
- UE_template->bsr_info[LCGID0] = 0;
- UE_template->bsr_info[LCGID1] = 0;
- UE_template->bsr_info[LCGID2] = 0;
- UE_template->bsr_info[LCGID3] = 0;
- }
-
-
-}
-*/
-
void add_ue_ulsch_info(module_id_t module_idP, int CC_id, int UE_id, sub_frame_t subframeP, UE_ULSCH_STATUS status)
{
@@ -584,66 +536,6 @@ void add_ue_ulsch_info(module_id_t module_idP, int CC_id, int UE_id, sub_frame_t
}
-// This seems not to be used anymore
-/*
-int schedule_next_ulue(module_id_t module_idP, int UE_id, sub_frame_t subframeP){
-
- int next_ue;
-
- // first phase: scheduling for ACK
- switch (subframeP) {
- // scheduling for subframeP 2: for scheduled user during subframeP 5 and 6
- case 8:
- if ((eNB_dlsch_info[module_idP][UE_id].status == S_DL_SCHEDULED) &&
- (eNB_dlsch_info[module_idP][UE_id].subframe == 5 || eNB_dlsch_info[module_idP][UE_id].subframe == 6)){
- // set the downlink status
- eNB_dlsch_info[module_idP][UE_id].status = S_DL_BUFFERED;
- return UE_id;
- }
- break;
- // scheduling for subframeP 3: for scheduled user during subframeP 7 and 8
- case 9:
- if ((eNB_dlsch_info[module_idP][UE_id].status == S_DL_SCHEDULED) &&
- (eNB_dlsch_info[module_idP][UE_id].subframe == 7 || eNB_dlsch_info[module_idP][UE_id].subframe == 8)){
- eNB_dlsch_info[module_idP][UE_id].status = S_DL_BUFFERED;
- return UE_id;
- }
- break;
- // scheduling UL subframeP 4: for scheduled user during subframeP 9 and 0
- case 0 :
- if ((eNB_dlsch_info[module_idP][UE_id].status == S_DL_SCHEDULED) &&
- (eNB_dlsch_info[module_idP][UE_id].subframe == 9 || eNB_dlsch_info[module_idP][UE_id].subframe == 0)){
- eNB_dlsch_info[module_idP][UE_id].status = S_DL_BUFFERED;
- return UE_id;
- }
- break;
- default:
- break;
- }
-
- // second phase
- for (next_ue=0; next_ue ul_total_buffer;
while (((rb_table[rb_table_index]>(frame_parms->N_RB_UL-1-first_rb[CC_id])) ||
- (rb_table[rb_table_index]>39)) &&
+ (rb_table[rb_table_index]>45)) &&
(rb_table_index>0)) {
rb_table_index--;
}
@@ -984,12 +876,6 @@ void schedule_ulsch_rnti(module_id_t module_idP,
first_rb[CC_id],rb_table[rb_table_index],
rb_table_index,TBS,harq_pid);
- /*
- // Adjust BSR entries for LCGIDs
- adjust_bsr_info(buffer_occupancy,
- TBS,
- UE_template);
- */
// adjust total UL buffer status by TBS, wait for UL sdus to do final update
LOG_D(MAC,"[eNB %d] CC_id %d UE %d/%x : adjusting ul_total_buffer, old %d, TBS %d\n", module_idP,CC_id,UE_id,rnti,UE_template->ul_total_buffer,TBS);
if (UE_template->ul_total_buffer > TBS)
@@ -998,16 +884,8 @@ void schedule_ulsch_rnti(module_id_t module_idP,
UE_template->ul_total_buffer = 0;
LOG_D(MAC,"ul_total_buffer, new %d\n", UE_template->ul_total_buffer);
// Cyclic shift for DM RS
- if(cooperation_flag == 2) {
- if(UE_id == 1) { // For Distriibuted Alamouti, cyclic shift applied to 2nd UE
- cshift = 1;
- } else {
- cshift = 0;
- }
- } else {
- cshift = 0;// values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
- }
-
+ cshift = 0;// values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
+
if (frame_parms->frame_type == TDD) {
switch (frame_parms->N_RB_UL) {
case 6:
diff --git a/openair2/LAYER2/MAC/l1_helpers.c b/openair2/LAYER2/MAC/l1_helpers.c
index 3b4c78ea92..44bdbfe00e 100644
--- a/openair2/LAYER2/MAC/l1_helpers.c
+++ b/openair2/LAYER2/MAC/l1_helpers.c
@@ -47,8 +47,8 @@ int8_t get_Po_NOMINAL_PUSCH(module_id_t module_idP,uint8_t CC_id)
if (CC_id>0) {
LOG_E(MAC,"Transmission on secondary CCs is not supported yet\n");
- mac_xface->macphy_exit("MAC FATAL CC_id>0");
- return 0; // not reached
+ //mac_xface->macphy_exit("MAC FATAL CC_id>0");
+ return 0;
}
if (UE_mac_inst[module_idP].radioResourceConfigCommon) {
@@ -56,7 +56,8 @@ int8_t get_Po_NOMINAL_PUSCH(module_id_t module_idP,uint8_t CC_id)
}
else {
LOG_E(MAC,"[UE %d] CCid %d FATAL radioResourceConfigCommon is NULL !!!\n",module_idP,CC_id);
- mac_xface->macphy_exit("FATAL radioResourceConfigCommon is NULL");
+ //mac_xface->macphy_exit("FATAL radioResourceConfigCommon is NULL");
+ return 0;
}
return(-120 + (rach_ConfigCommon->powerRampingParameters.preambleInitialReceivedTargetPower<<1) +
diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c
index 2acda1c746..3cbecbb69c 100644
--- a/openair2/LAYER2/MAC/pre_processor.c
+++ b/openair2/LAYER2/MAC/pre_processor.c
@@ -47,6 +47,7 @@
#include "LAYER2/MAC/proto.h"
#include "LAYER2/MAC/extern.h"
#include "UTIL/LOG/log.h"
+#include "UTIL/LOG/vcd_signal_dumper.h"
#include "UTIL/OPT/opt.h"
#include "OCG.h"
#include "OCG_extern.h"
@@ -807,6 +808,9 @@ void dlsch_scheduler_pre_processor_reset (int module_idP,
ue_sched_ctl->ta_timer--;
ue_sched_ctl->ta_update =0; // don't trigger a timing advance command
}
+ if (UE_id==0) {
+ VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_TIMING_ADVANCE,ue_sched_ctl->ta_update);
+ }
nb_rbs_required[CC_id][UE_id]=0;
ue_sched_ctl->pre_nb_available_rbs[CC_id] = 0;
ue_sched_ctl->dl_pow_off[CC_id] = 2;
@@ -937,9 +941,6 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
UE_TEMPLATE *UE_template = 0;
LTE_DL_FRAME_PARMS *frame_parms = 0;
- // LOG_I(MAC,"store ulsch buffers\n");
- // convert BSR to bytes for comparison with tbs
- // store_ulsch_buffer(module_idP,frameP, subframeP);
//LOG_I(MAC,"assign max mcs min rb\n");
// maximize MCS and then allocate required RB according to the buffer occupancy with the limit of max available UL RB
@@ -1097,51 +1098,6 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
}
}
-/*
-void store_ulsch_buffer(module_id_t module_idP, int frameP, sub_frame_t subframeP)
-{
-
- int UE_id,pCC_id,lcgid;
- UE_list_t *UE_list = &eNB_mac_inst[module_idP].UE_list;
- UE_TEMPLATE *UE_template;
-
- for (UE_id=UE_list->head_ul; UE_id>=0; UE_id=UE_list->next_ul[UE_id]) {
-
-
- if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 1)
- continue;
-
- UE_template = &UE_list->UE_template[UE_PCCID(module_idP,UE_id)][UE_id];
- //LOG_I(MAC,"[UE %d next %d] SR is %d\n",UE_id, UE_list->next_ul[UE_id], UE_template->ul_SR);
-
- UE_template->ul_total_buffer=0;
-
- for (lcgid=0; lcgidul_buffer_info[lcgid]=BSR_TABLE[UE_template->bsr_info[lcgid]];
- UE_template->ul_total_buffer+= UE_template->ul_buffer_info[lcgid]; // apply traffic aggregtaion if packets are small
- // UE_template->ul_buffer_creation_time_max=cmax(UE_template->ul_buffer_creation_time_max, frame_cycle*1024 + frameP-UE_template->ul_buffer_creation_time[lcgid]));
- }
-
- if ( UE_template->ul_total_buffer >0)
- LOG_D(MAC,"[eNB %d] Frame %d subframe %d UE %d CC id %d: LCGID0 %d, LCGID1 %d, LCGID2 %d LCGID3 %d, BO %d\n",
- module_idP, frameP,subframeP, UE_id, UE_PCCID(module_idP,UE_id),
- UE_template->ul_buffer_info[LCGID0],
- UE_template->ul_buffer_info[LCGID1],
- UE_template->ul_buffer_info[LCGID2],
- UE_template->ul_buffer_info[LCGID3],
- UE_template->ul_total_buffer);
- else if (UE_is_to_be_scheduled(module_idP,UE_PCCID(module_idP,UE_id),UE_id) > 0 ) {
- if (UE_template->ul_total_buffer == 0 ) {
- UE_template->ul_total_buffer = BSR_TABLE[11];
- }
-
- LOG_D(MAC,"[eNB %d] Frame %d subframe %d UE %d CC id %d: SR active, set BO to %d \n",
- module_idP, frameP,subframeP, UE_id, UE_PCCID(module_idP,UE_id),
- UE_template->ul_total_buffer);
- }
- }
-}
-*/
void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subframeP, uint16_t *first_rb)
diff --git a/openair2/LAYER2/RLC/rlc.h b/openair2/LAYER2/RLC/rlc.h
index 392ae88cf8..72fde0b746 100755
--- a/openair2/LAYER2/RLC/rlc.h
+++ b/openair2/LAYER2/RLC/rlc.h
@@ -60,6 +60,8 @@
# include "DRB-ToAddModList.h"
# include "SRB-ToAddMod.h"
# include "SRB-ToAddModList.h"
+# include "DRB-ToReleaseList.h"
+
#ifdef Rel10
#include "PMCH-InfoList-r9.h"
#endif
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c
index abf552c633..4038c33bda 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.c
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.c
@@ -122,6 +122,7 @@ const char* eurecomVariablesNames[] = {
"ue0_BSR",
"ue0_BO",
"ue0_scheduled",
+ "ue0_timing_advance",
"ue0_SR_ENERGY",
"ue0_SR_THRES",
"ue0_rssi0",
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h
index 6eb125786f..24a0efee27 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.h
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.h
@@ -94,6 +94,7 @@ typedef enum {
VCD_SIGNAL_DUMPER_VARIABLES_UE0_BSR,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_BO,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED,
+ VCD_SIGNAL_DUMPER_VARIABLES_UE0_TIMING_ADVANCE,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SR_ENERGY,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SR_THRES,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RSSI0,
diff --git a/openair2/UTIL/OCG/OCG_parse_XML.c b/openair2/UTIL/OCG/OCG_parse_XML.c
index 5397cdbd98..0100d742e1 100644
--- a/openair2/UTIL/OCG/OCG_parse_XML.c
+++ b/openair2/UTIL/OCG/OCG_parse_XML.c
@@ -51,10 +51,6 @@
#include "UTIL/OPT/opt.h"
/*----------------------------------------------------------------------------*/
-#ifndef HAVE_STRNDUP
-char * strndup (const char *s, size_t size);
-#endif
-
static int oai_emulation_; /*!< \brief indicating that the parsing position is now within OAI_Emulation_*/
static int environment_system_config_; /*!< \brief indicating that the parsing position is now within Envi_Config_*/
diff --git a/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_3.p0 b/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_3.p0
new file mode 100644
index 0000000000..3986a6a83b
--- /dev/null
+++ b/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_3.p0
@@ -0,0 +1,1266 @@
+--- asn1c/unber.c 2015-12-08 14:39:33.282543533 +0100
++++ asn1c/unber.c 2015-12-07 10:46:18.382647000 +0100
+@@ -779,4 +779,6 @@
+
+ asn_enc_rval_t OCTET_STRING_encode_aper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *cts, void *sptr, asn_per_outp_t *po) { asn_enc_rval_t er = { 0, 0, 0 }; (void)td; (void)cts; (void)sptr; (void)po; return er; }
+
++asn_comp_rval_t * OCTET_STRING_compare(asn_TYPE_descriptor_t *td1, void *sptr1, asn_TYPE_descriptor_t *td2, void *sptr2) { (void)td1; (void)sptr1; (void)td2; (void)sptr2; return 0; }
++
+ size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { (void)chunk_buf; (void)chunk_size; return 0; }
+--- libasn1compiler/asn1c_C.c 2015-12-08 14:39:33.366543533 +0100
++++ libasn1compiler/asn1c_C.c 2015-12-08 08:38:29.002565000 +0100
+@@ -1082,6 +1082,8 @@
+ enum tvm_compat tv_mode;
+ enum etd_spec etd_spec;
+ char *p;
++ //char tmp_buf[512];
++ //int i = 0;
+
+ if(arg->embed) {
+ enum tnfmt tnfmt = TNF_CTYPE;
+@@ -1243,7 +1245,8 @@
+ OUT("td->uper_decoder = asn_DEF_%s.uper_decoder;\n", type_name);
+ OUT("td->uper_encoder = asn_DEF_%s.uper_encoder;\n", type_name);
+ OUT("td->aper_decoder = asn_DEF_%s.aper_decoder;\n", type_name);
+- OUT("td->aper_encoder = asn_DEF_%s.aper_encoder;\n", type_name);
++ OUT("td->aper_encoder = asn_DEF_%s.aper_encoder;\n", type_name);
++ OUT("td->compare = asn_DEF_%s.compare;\n", type_name);
+ if(!terminal && !tags_count) {
+ OUT("/* The next four lines are here because of -fknown-extern-type */\n");
+ OUT("td->tags = asn_DEF_%s.tags;\n", type_name);
+@@ -1413,6 +1416,39 @@
+ OUT("}\n");
+ OUT("\n");
+
++
++ //i = 0;
++ //while ((p[i] != '_') && (i < sizeof(tmp_buf))) {
++ // tmp_buf[i] = p[i];
++ // i++;
++ //}
++ //tmp_buf[i] = '\0';
++ // hack, only for s1ap
++ //if ((strcmp("S1ap", tmp_buf) == 0) || (strcmp("X2ap", tmp_buf) == 0))
++ // OUT("#include \"%s-ProtocolIE-ID.h\"\n", tmp_buf);
++
++
++ p = MKID(expr);
++ if(HIDE_INNER_DEFS) OUT("static ");
++ OUT("asn_comp_rval_t * \n");
++ OUT("%s", p);
++ if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
++ OUT("_compare(asn_TYPE_descriptor_t *td1,\n");
++ INDENTED(
++ OUT("\tvoid *structure1,\n");
++ OUT("\tasn_TYPE_descriptor_t *td2,\n");
++ OUT("\tvoid *structure2) {\n");
++ OUT("asn_comp_rval_t * res = NULL;\n");
++ OUT("%s_%d_inherit_TYPE_descriptor(td1);\n",
++ p, expr->_type_unique_index);
++ OUT("%s_%d_inherit_TYPE_descriptor(td2);\n",
++ p, expr->_type_unique_index);
++ OUT("res = td1->compare(td1, structure1, td2, structure2);\n");
++ OUT("return res;\n");
++ );
++ OUT("}\n");
++ OUT("\n");
++
+ p = MKID(expr);
+
+ if(HIDE_INNER_DEFS) OUT("static ");
+@@ -1450,7 +1486,8 @@
+ OUT("per_type_decoder_f %s_decode_uper;\n", p);
+ OUT("per_type_encoder_f %s_encode_uper;\n", p);
+ OUT("per_type_decoder_f %s_decode_aper;\n", p);
+- OUT("per_type_encoder_f %s_encode_aper;\n", p);
++ OUT("per_type_encoder_f %s_encode_aper;\n", p);
++ OUT("type_compare_f %s_compare;\n", p);
+ }
+ }
+
+@@ -2501,6 +2538,7 @@
+ OUT("0, 0,\t/* No APER support, "
+ "use \"-gen-PER\" to enable */\n");
+ }
++ FUNCREF(compare);
+
+ if(!terminal || terminal->expr_type == ASN_CONSTR_CHOICE) {
+ //if(expr->expr_type == ASN_CONSTR_CHOICE) {
+--- skeletons/ANY.c 2015-12-08 14:39:33.350543533 +0100
++++ skeletons/ANY.c 2015-11-26 14:40:56.547616000 +0100
+@@ -24,7 +24,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ 0, 0, 0, 0,
+ 0, /* No PER visible constraints */
+--- skeletons/asn_application.h 2015-12-08 14:39:12.674543554 +0100
++++ skeletons/asn_application.h 2015-12-07 14:36:32.950633000 +0100
+@@ -9,7 +9,8 @@
+ #define _ASN_APPLICATION_H_
+
+ #include "asn_system.h" /* for platform-dependent types */
+-#include "asn_codecs.h" /* for ASN.1 codecs specifics */
++#include "asn_codecs.h" /* for ASN.1 codecs specifics */
++#include "asn_compare.h"
+
+ #ifdef __cplusplus
+ extern "C" {
+--- skeletons/asn_compare.h 1970-01-01 01:00:00.000000000 +0100
++++ skeletons/asn_compare.h 2015-12-08 10:34:58.090558000 +0100
+@@ -0,0 +1,78 @@
++#ifndef _ASN_COMPARE_H_
++#define _ASN_COMPARE_H_
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++struct asn_TYPE_descriptor_s; /* Forward declaration */
++
++
++typedef enum COMPARE_ERR_CODE_e {
++ COMPARE_ERR_CODE_START = 0,
++ COMPARE_ERR_CODE_NONE = COMPARE_ERR_CODE_START,
++ COMPARE_ERR_CODE_NO_MATCH,
++ COMPARE_ERR_CODE_TYPE_MISMATCH,
++ COMPARE_ERR_CODE_TYPE_ARG_NULL,
++ COMPARE_ERR_CODE_VALUE_NULL,
++ COMPARE_ERR_CODE_VALUE_ARG_NULL,
++ COMPARE_ERR_CODE_CHOICE_NUM,
++ COMPARE_ERR_CODE_CHOICE_PRESENT,
++ COMPARE_ERR_CODE_CHOICE_MALFORMED,
++ COMPARE_ERR_CODE_SET_MALFORMED,
++ COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS,
++ COMPARE_ERR_CODE_END
++} COMPARE_ERR_CODE_t;
++
++typedef struct asn_comp_rval_s {
++ enum COMPARE_ERR_CODE_e err_code;
++ char *name; // e_S1ap_ProtocolIE_ID not available for all ASN1 use (RRC vs S1AP, X2AP)
++ void *structure1;
++ void *structure2;
++ struct asn_comp_rval_s *next;
++} asn_comp_rval_t;
++
++#define COMPARE_CHECK_ARGS(aRg_tYpE_dEf1, aRg_tYpE_dEf2, aRg_vAl1, aRg_vAl2, rEsUlT) \
++ do {\
++ if ((aRg_tYpE_dEf1) && (aRg_tYpE_dEf2)) {\
++ if ((aRg_tYpE_dEf1->name) && (aRg_tYpE_dEf2->name)) {\
++ if (strcmp(aRg_tYpE_dEf1->name, aRg_tYpE_dEf2->name)) {\
++ rEsUlT = (asn_comp_rval_t *)calloc(1, sizeof(asn_comp_rval_t));\
++ rEsUlT->err_code = COMPARE_ERR_CODE_TYPE_MISMATCH;\
++ rEsUlT->name = aRg_tYpE_dEf1->name;\
++ return rEsUlT;\
++ }\
++ } else {\
++ if ((aRg_tYpE_dEf1->xml_tag) && (aRg_tYpE_dEf2->xml_tag)) {\
++ if (strcmp(aRg_tYpE_dEf1->xml_tag, aRg_tYpE_dEf2->xml_tag)) {\
++ rEsUlT = (asn_comp_rval_t *)calloc(1, sizeof(asn_comp_rval_t));\
++ rEsUlT->err_code = COMPARE_ERR_CODE_TYPE_MISMATCH;\
++ rEsUlT->name = aRg_tYpE_dEf1->xml_tag;\
++ return rEsUlT;\
++ }\
++ }\
++ }\
++ } else {\
++ rEsUlT = (asn_comp_rval_t *)calloc(1, sizeof(asn_comp_rval_t));\
++ rEsUlT->name = aRg_tYpE_dEf1->name;\
++ rEsUlT->structure1 = aRg_vAl1;\
++ rEsUlT->structure2 = aRg_vAl2;\
++ rEsUlT->err_code = COMPARE_ERR_CODE_TYPE_ARG_NULL;\
++ return rEsUlT;\
++ }\
++ if ((NULL == aRg_vAl1) || (NULL == aRg_vAl2)){\
++ rEsUlT = (asn_comp_rval_t *)calloc(1, sizeof(asn_comp_rval_t));\
++ rEsUlT->name = aRg_tYpE_dEf1->name;\
++ rEsUlT->structure1 = aRg_vAl1;\
++ rEsUlT->structure2 = aRg_vAl2;\
++ rEsUlT->err_code = COMPARE_ERR_CODE_VALUE_ARG_NULL;\
++ return rEsUlT;\
++ }\
++ } while (0);
++
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* _ASN_COMPARE_H_ */
+--- skeletons/BIT_STRING.c 2015-12-08 14:39:33.346543533 +0100
++++ skeletons/BIT_STRING.c 2015-11-26 14:41:50.159616000 +0100
+@@ -30,7 +30,8 @@
+ OCTET_STRING_decode_uper, /* Unaligned PER decoder */
+ OCTET_STRING_encode_uper, /* Unaligned PER encoder */
+ OCTET_STRING_decode_aper, /* Aligned PER decoder */
+- OCTET_STRING_encode_aper, /* Aligned PER encoder */
++ OCTET_STRING_encode_aper, /* Aligned PER encoder */
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_BIT_STRING_tags,
+ sizeof(asn_DEF_BIT_STRING_tags)
+--- skeletons/BMPString.c 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/BMPString.c 2015-11-26 14:42:08.487616000 +0100
+@@ -36,7 +36,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper, /* Aligned PER decoder */
+- OCTET_STRING_encode_aper, /* Aligned PER encoder */
++ OCTET_STRING_encode_aper, /* Aligned PER encoder */
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_BMPString_tags,
+ sizeof(asn_DEF_BMPString_tags)
+--- skeletons/BOOLEAN.c 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/BOOLEAN.c 2015-12-08 10:37:11.866558000 +0100
+@@ -25,7 +25,8 @@
+ BOOLEAN_decode_uper, /* Unaligned PER decoder */
+ BOOLEAN_encode_uper, /* Unaligned PER encoder */
+ BOOLEAN_decode_aper, /* Aligned PER decoder */
+- BOOLEAN_encode_aper, /* Aligned PER encoder */
++ BOOLEAN_encode_aper, /* Aligned PER encoder */
++ BOOLEAN_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_BOOLEAN_tags,
+ sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]),
+@@ -326,3 +327,22 @@
+
+ _ASN_ENCODED_OK(er);
+ }
++
++asn_comp_rval_t *
++BOOLEAN_compare(asn_TYPE_descriptor_t *td1,
++ void *sptr1, asn_TYPE_descriptor_t *td2, void *sptr2) {
++ const BOOLEAN_t *st1 = (const BOOLEAN_t *)sptr1;
++ const BOOLEAN_t *st2 = (const BOOLEAN_t *)sptr2;
++ asn_comp_rval_t *res = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ if (*st1 == *st2) return NULL;
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++}
++
+--- skeletons/BOOLEAN.h 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/BOOLEAN.h 2015-11-26 12:46:58.491623000 +0100
+@@ -30,6 +30,7 @@
+ per_type_encoder_f BOOLEAN_encode_uper;
+ per_type_decoder_f BOOLEAN_decode_aper;
+ per_type_encoder_f BOOLEAN_encode_aper;
++type_compare_f BOOLEAN_compare;
+
+ #ifdef __cplusplus
+ }
+--- skeletons/compare.h 1970-01-01 01:00:00.000000000 +0100
++++ skeletons/compare.h 2015-12-08 08:23:03.694566000 +0100
+@@ -0,0 +1,28 @@
++/*-
++ * Eurecom 2015.
++ */
++#ifndef _COMPARE_H_
++#define _COMPARE_H_
++
++#include
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++struct asn_TYPE_descriptor_s; /* Forward declaration */
++
++typedef asn_comp_rval_t * (type_compare_f)(
++ struct asn_TYPE_descriptor_s *type_descriptor1,
++ void *struct_ptr1,
++ struct asn_TYPE_descriptor_s *type_descriptor2,
++ void *struct_ptr2
++);
++
++
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* _COMPARE_H_ */
+--- skeletons/constr_CHOICE.c 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/constr_CHOICE.c 2015-12-08 10:39:16.670558000 +0100
+@@ -1272,3 +1272,75 @@
+ assert(pres_size != sizeof(int));
+ }
+ }
++
++asn_comp_rval_t *
++CHOICE_compare(asn_TYPE_descriptor_t *td1, void *sptr1, asn_TYPE_descriptor_t *td2, void *sptr2)
++{
++ asn_CHOICE_specifics_t *specs1 = (asn_CHOICE_specifics_t *)td1->specifics;
++ asn_CHOICE_specifics_t *specs2 = (asn_CHOICE_specifics_t *)td2->specifics;
++ int present1;
++ int present2;
++ asn_comp_rval_t *res = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ /*
++ * Figure out which CHOICE element is encoded.
++ */
++ present1 = _fetch_present_idx(sptr1, specs1->pres_offset,specs1->pres_size);
++ // same specs
++ present2 = _fetch_present_idx(sptr2, specs2->pres_offset,specs2->pres_size);
++
++ if (td1->elements_count != td2->elements_count) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_CHOICE_NUM;
++ return res;
++ }
++ if (present1 != present2) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_CHOICE_PRESENT;
++ return res;
++ }
++ if(present1 > 0 && present1 <= td1->elements_count) {
++ asn_TYPE_member_t *elm1 = &td1->elements[present1-1];
++ asn_TYPE_member_t *elm2 = &td2->elements[present2-1];
++ const void *memb_ptr1;
++ const void *memb_ptr2;
++
++ if((elm1->flags & ATF_POINTER) && (elm1->flags & ATF_POINTER)){
++ memb_ptr1 = *(const void * const *)((const char *)sptr1 + elm1->memb_offset);
++ memb_ptr2 = *(const void * const *)((const char *)sptr2 + elm2->memb_offset);
++ if((!memb_ptr1) || (!memb_ptr2)) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_VALUE_NULL;
++ return res;
++ }
++ } else if (!(elm1->flags & ATF_POINTER) && !(elm1->flags & ATF_POINTER)){
++ memb_ptr1 = (const void *)((const char *)sptr1 + elm1->memb_offset);
++ memb_ptr2 = (const void *)((const char *)sptr2 + elm2->memb_offset);
++ } else {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_CHOICE_MALFORMED;
++ return res;
++ }
++ return elm1->type->compare(elm1->type, memb_ptr1, elm2->type, memb_ptr2);
++ }
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_CHOICE_MALFORMED;
++ return res;
++}
+--- skeletons/constr_CHOICE.h 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/constr_CHOICE.h 2015-11-26 14:43:57.647616000 +0100
+@@ -39,7 +39,7 @@
+ /*
+ * A set specialized functions dealing with the CHOICE type.
+ */
+-asn_struct_free_f CHOICE_free;
++asn_struct_free_f CHOICE_free;
+ asn_struct_print_f CHOICE_print;
+ asn_constr_check_f CHOICE_constraint;
+ ber_type_decoder_f CHOICE_decode_ber;
+@@ -50,7 +50,8 @@
+ per_type_encoder_f CHOICE_encode_uper;
+ per_type_decoder_f CHOICE_decode_aper;
+ per_type_encoder_f CHOICE_encode_aper;
+-asn_outmost_tag_f CHOICE_outmost_tag;
++type_compare_f CHOICE_compare;
++asn_outmost_tag_f CHOICE_outmost_tag;
+
+ #ifdef __cplusplus
+ }
+--- skeletons/constr_SEQUENCE.c 2015-12-08 14:39:33.346543533 +0100
++++ skeletons/constr_SEQUENCE.c 2015-12-08 10:39:52.442558000 +0100
+@@ -1761,3 +1761,66 @@
+
+ _ASN_ENCODED_OK(er);
+ }
++
++asn_comp_rval_t * SEQUENCE_compare(asn_TYPE_descriptor_t *td1, void *sptr1, asn_TYPE_descriptor_t *td2, void *sptr2) {
++ int edx;
++ int ret;
++ asn_comp_rval_t *res = NULL;
++ asn_comp_rval_t *res2 = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ if (td1->elements_count != td2->elements_count) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS;
++ return res;
++ }
++
++ for(edx = 0; edx < td1->elements_count; edx++) {
++ asn_TYPE_member_t *elm1 = &td1->elements[edx];
++ asn_TYPE_member_t *elm2 = &td1->elements[edx];
++ const void *memb_ptr1;
++ const void *memb_ptr2;
++
++ if(elm1->flags & ATF_POINTER) {
++ memb_ptr1 = *(const void * const *)((const char *)sptr1 + elm1->memb_offset);
++ memb_ptr2 = *(const void * const *)((const char *)sptr2 + elm2->memb_offset);
++ if((!memb_ptr1) && (!memb_ptr2)) {
++ if(elm1->optional) continue;
++ }
++ if ((!memb_ptr1) || (!memb_ptr2)) {
++ res2 = calloc(1, sizeof(asn_comp_rval_t));
++ res2->name = elm1->name;
++ res2->structure1 = memb_ptr1;
++ res2->structure2 = memb_ptr2;
++ res->err_code = COMPARE_ERR_CODE_VALUE_NULL;
++ if (NULL == res) {
++ res = res2;
++ } else {
++ res2->next = res;
++ res = res2;
++ }
++ res2 = NULL;
++ }
++ } else {
++ memb_ptr1 = (const void *)((const char *)sptr1 + elm1->memb_offset);
++ memb_ptr2 = (const void *)((const char *)sptr2 + elm2->memb_offset);
++ }
++
++ /* Compare the member itself */
++ res2 = elm1->type->compare(elm1->type, memb_ptr1, elm2->type, memb_ptr2);
++ if(res2) {
++ if (NULL == res) {
++ res = res2;
++ } else {
++ res2->next = res;
++ res = res2;
++ }
++ res2 = NULL;
++ }
++ }
++ return res;
++}
+--- skeletons/constr_SEQUENCE.h 2015-12-08 14:39:33.346543533 +0100
++++ skeletons/constr_SEQUENCE.h 2015-11-26 14:48:14.123616000 +0100
+@@ -54,6 +54,7 @@
+ per_type_encoder_f SEQUENCE_encode_uper;
+ per_type_decoder_f SEQUENCE_decode_aper;
+ per_type_encoder_f SEQUENCE_encode_aper;
++type_compare_f SEQUENCE_compare;
+
+ #ifdef __cplusplus
+ }
+--- skeletons/constr_SEQUENCE_OF.h 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/constr_SEQUENCE_OF.h 2015-11-26 15:05:25.399615000 +0100
+@@ -22,7 +22,8 @@
+ #define SEQUENCE_OF_decode_ber SET_OF_decode_ber
+ #define SEQUENCE_OF_decode_xer SET_OF_decode_xer
+ #define SEQUENCE_OF_decode_uper SET_OF_decode_uper
+-#define SEQUENCE_OF_decode_aper SET_OF_decode_aper
++#define SEQUENCE_OF_decode_aper SET_OF_decode_aper
++#define SEQUENCE_OF_compare SET_OF_compare
+ der_type_encoder_f SEQUENCE_OF_encode_der;
+ xer_type_encoder_f SEQUENCE_OF_encode_xer;
+ per_type_encoder_f SEQUENCE_OF_encode_uper;
+--- skeletons/constr_SET.c 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/constr_SET.c 2015-12-08 10:40:35.066558000 +0100
+@@ -1108,7 +1108,7 @@
+ }
+ }
+
+-int
++long
+ SET_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ int edx;
+@@ -1159,3 +1159,58 @@
+
+ return 0;
+ }
++
++asn_comp_rval_t *
++SET_compare(asn_TYPE_descriptor_t *td1, void *sptr1, asn_TYPE_descriptor_t *td2, void *sptr2)
++{
++ int edx;
++ asn_comp_rval_t *res = NULL;
++ asn_comp_rval_t *res2 = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ if (td1->elements_count != td2->elements_count) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS;
++ return res;
++ }
++
++ for(edx = 0; edx < td1->elements_count; edx++) {
++ asn_TYPE_member_t *elm1 = &td1->elements[edx];
++ asn_TYPE_member_t *elm2 = &td2->elements[edx];
++ const void *memb_ptr1;
++ const void *memb_ptr2;
++
++ if(elm1->flags & ATF_POINTER) {
++ memb_ptr1 = *(const void * const *)((const char *)sptr1 + elm1->memb_offset);
++ memb_ptr2 = *(const void * const *)((const char *)sptr2 + elm2->memb_offset);
++ if(!memb_ptr1) {
++ if(elm1->optional)
++ continue;
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_SET_MALFORMED;
++ return res;
++ }
++ } else {
++ memb_ptr1 = (const void *)((const char *)sptr1 + elm1->memb_offset);
++ memb_ptr2 = (const void *)((const char *)sptr2 + elm2->memb_offset);
++ }
++ res2 = elm1->type->compare(elm1->type, memb_ptr1, elm2->type, memb_ptr2);
++ if(res2) {
++ if (NULL == res) {
++ res = res2;
++ } else {
++ res2->next = res;
++ res = res2;
++ }
++ res2 = NULL;
++ }
++ }
++ return res;
++}
+--- skeletons/constr_SET.h 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/constr_SET.h 2015-11-26 14:49:09.243616000 +0100
+@@ -56,6 +56,7 @@
+ per_type_decoder_f SET_decode_aper;
+ per_type_encoder_f SET_encode_uper;
+ per_type_encoder_f SET_encode_aper;
++type_compare_f SET_compare;
+
+ /***********************
+ * Some handy helpers. *
+--- skeletons/constr_SET_OF.c 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/constr_SET_OF.c 2015-12-08 10:45:54.466557000 +0100
+@@ -1039,3 +1039,55 @@
+ rv.consumed = 0;
+ return rv;
+ }
++
++asn_comp_rval_t *
++SET_OF_compare(asn_TYPE_descriptor_t *td1, void *sptr1, asn_TYPE_descriptor_t *td2, void *sptr2)
++{
++ asn_TYPE_member_t *elm1 = td1->elements;
++ asn_TYPE_member_t *elm2 = td2->elements;
++ const asn_anonymous_set_ *list1 = _A_CSET_FROM_VOID(sptr1);
++ const asn_anonymous_set_ *list2 = _A_CSET_FROM_VOID(sptr2);
++ int ret;
++ int i;
++ asn_comp_rval_t *res = NULL;
++ asn_comp_rval_t *res2 = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ if (td1->elements_count != td2->elements_count) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS;
++ return res;
++ }
++
++
++ if (list1->count != list2->count ) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS;
++ return res;
++ }
++
++ for(i = 0; i < list1->count; i++) {
++ const void *memb_ptr1 = list1->array[i];
++ const void *memb_ptr2 = list2->array[i];
++ if ((!memb_ptr1) & (!memb_ptr2)) continue;
++
++ res2 = elm1->type->compare(elm1->type, memb_ptr1, elm2->type, memb_ptr2);
++ if(res2) {
++ if (NULL == res) {
++ res = res2;
++ } else {
++ res2->next = res;
++ res = res2;
++ }
++ res2 = NULL;
++ }
++ }
++ return res;
++}
+--- skeletons/constr_SET_OF.h 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/constr_SET_OF.h 2015-11-26 14:48:45.067616000 +0100
+@@ -36,6 +36,7 @@
+ per_type_encoder_f SET_OF_encode_uper;
+ per_type_decoder_f SET_OF_decode_aper;
+ per_type_encoder_f SET_OF_encode_aper;
++type_compare_f SET_OF_compare;
+
+ #ifdef __cplusplus
+ }
+--- skeletons/constr_TYPE.h 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/constr_TYPE.h 2015-11-26 15:28:05.495613000 +0100
+@@ -41,7 +41,8 @@
+ #include /* Encoder into XER (XML, text) */
+ #include /* Packet Encoding Rules decoder */
+ #include /* Packet Encoding Rules encoder */
+-#include /* Subtype constraints support */
++#include /* Subtype constraints support */
++#include /* Comparison */
+
+ /*
+ * Free the structure according to its specification.
+@@ -101,6 +102,7 @@
+ per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */
+ per_type_decoder_f *aper_decoder; /* Aligned PER decoder */
+ per_type_encoder_f *aper_encoder; /* Aligned PER encoder */
++ type_compare_f *compare; /* Comparison between 2 instances */
+
+ /***********************************************************************
+ * Internally useful members. Not to be used by applications directly. *
+--- skeletons/ENUMERATED.c 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/ENUMERATED.c 2015-12-08 10:40:55.986558000 +0100
+@@ -27,7 +27,8 @@
+ ENUMERATED_decode_uper, /* Unaligned PER decoder */
+ ENUMERATED_encode_uper, /* Unaligned PER encoder */
+ ENUMERATED_decode_aper, /* Aligned PER decoder */
+- ENUMERATED_encode_aper, /* Aligned PER encoder */
++ ENUMERATED_encode_aper, /* Aligned PER encoder */
++ ENUMERATED_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ENUMERATED_tags,
+ sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]),
+@@ -103,3 +104,22 @@
+
+ return NativeEnumerated_encode_aper(td, constraints, &value, po);
+ }
++
++asn_comp_rval_t *
++ENUMERATED_compare(asn_TYPE_descriptor_t *td1, void *sptr1,
++ asn_TYPE_descriptor_t *td2, void *sptr2) {
++ ENUMERATED_t *st1 = (ENUMERATED_t *)sptr1;
++ ENUMERATED_t *st2 = (ENUMERATED_t *)sptr2;
++ asn_comp_rval_t *res = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ if (*st1 == *st2) return NULL;
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++}
++
+--- skeletons/ENUMERATED.h 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/ENUMERATED.h 2015-11-26 12:46:35.523623000 +0100
+@@ -19,6 +19,7 @@
+ per_type_encoder_f ENUMERATED_encode_uper;
+ per_type_decoder_f ENUMERATED_decode_aper;
+ per_type_encoder_f ENUMERATED_encode_aper;
++type_compare_f ENUMERATED_compare;
+
+ #ifdef __cplusplus
+ }
+--- skeletons/file-dependencies 2015-12-08 14:39:12.678543554 +0100
++++ skeletons/file-dependencies 2015-12-07 15:34:40.454629000 +0100
+@@ -39,12 +39,13 @@
+ constr_SEQUENCE.h constr_SEQUENCE.c
+ constr_SEQUENCE_OF.h constr_SEQUENCE_OF.c asn_SEQUENCE_OF.h constr_SET_OF.h
+ constr_SET.h constr_SET.c
+-constr_SET_OF.h constr_SET_OF.c asn_SET_OF.h
++constr_SET_OF.h constr_SET_OF.c asn_SET_OF.h compare.h
+
+ COMMON-FILES: # THIS IS A SPECIAL SECTION
+-asn_application.h # Applications should include this file
++asn_application.h # Applications should include this file
+ asn_system.h # Platform-dependent types
+-asn_codecs.h # Return types of encoders and decoders
++asn_codecs.h # Return types of encoders and decoders
++asn_compare.h # Return type of compare
+ asn_internal.h # Internal stuff
+ OCTET_STRING.h OCTET_STRING.c # This one is used too widely
+ BIT_STRING.h BIT_STRING.c # This one is necessary for the above one
+--- skeletons/GeneralizedTime.c 2015-12-08 14:39:33.350543533 +0100
++++ skeletons/GeneralizedTime.c 2015-11-26 15:09:03.899615000 +0100
+@@ -168,7 +168,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_GeneralizedTime_tags,
+ sizeof(asn_DEF_GeneralizedTime_tags)
+--- skeletons/GeneralString.c 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/GeneralString.c 2015-11-26 14:50:11.843616000 +0100
+@@ -25,7 +25,8 @@
+ OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_GeneralString_tags,
+ sizeof(asn_DEF_GeneralString_tags)
+--- skeletons/GraphicString.c 2015-12-08 14:39:33.350543533 +0100
++++ skeletons/GraphicString.c 2015-11-26 15:33:33.255613000 +0100
+@@ -25,7 +25,8 @@
+ OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_GraphicString_tags,
+ sizeof(asn_DEF_GraphicString_tags)
+--- skeletons/IA5String.c 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/IA5String.c 2015-11-26 14:50:44.219616000 +0100
+@@ -31,6 +31,7 @@
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_IA5String_tags,
+ sizeof(asn_DEF_IA5String_tags)
+--- skeletons/INTEGER.c 2015-12-08 14:39:33.346543533 +0100
++++ skeletons/INTEGER.c 2015-12-08 10:41:08.526558000 +0100
+@@ -35,6 +35,7 @@
+ INTEGER_decode_aper,
+ INTEGER_encode_aper,
+ #endif /* ASN_DISABLE_PER_SUPPORT */
++ INTEGER_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_INTEGER_tags,
+ sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]),
+@@ -1501,3 +1502,30 @@
+ }
+
+
++asn_comp_rval_t *
++INTEGER_compare(asn_TYPE_descriptor_t *td1, void *sptr1,
++ asn_TYPE_descriptor_t *td2, void *sptr2) {
++ INTEGER_t *st1 = (INTEGER_t *)sptr1;
++ INTEGER_t *st2 = (INTEGER_t *)sptr2;
++ asn_comp_rval_t *res = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ if (st1->size != st2->size) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++ }
++ if (0 != memcmp(st1->buf, st2->buf, st1->size)) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++ }
++ return NULL;
++}
+--- skeletons/INTEGER.h 2015-12-08 14:39:33.346543533 +0100
++++ skeletons/INTEGER.h 2015-11-26 12:50:41.551623000 +0100
+@@ -43,6 +43,7 @@
+ per_type_encoder_f INTEGER_encode_uper;
+ per_type_decoder_f INTEGER_decode_aper;
+ per_type_encoder_f INTEGER_encode_aper;
++type_compare_f INTEGER_compare;
+
+ /***********************************
+ * Some handy conversion routines. *
+--- skeletons/ISO646String.c 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/ISO646String.c 2015-11-26 12:55:48.327623000 +0100
+@@ -30,7 +30,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ISO646String_tags,
+ sizeof(asn_DEF_ISO646String_tags)
+--- skeletons/Makefile.am 2015-12-08 14:39:12.666543554 +0100
++++ skeletons/Makefile.am 2015-12-07 15:54:00.150628000 +0100
+@@ -46,11 +46,11 @@
+ asn_SET_OF.c asn_SET_OF.h \
+ asn_application.h asn_codecs.h \
+ asn_codecs_prim.c asn_codecs_prim.h \
+- asn_internal.h asn_system.h \
++ asn_internal.h asn_system.h asn_compare.h \
+ ber_decoder.c ber_decoder.h \
+ ber_tlv_length.c ber_tlv_length.h \
+- ber_tlv_tag.c ber_tlv_tag.h \
+- constr_CHOICE.c constr_CHOICE.h \
++ ber_tlv_tag.c ber_tlv_tag.h compare.h \
++ comparison.h constr_CHOICE.c constr_CHOICE.h \
+ constr_SEQUENCE.c constr_SEQUENCE.h \
+ constr_SEQUENCE_OF.c constr_SEQUENCE_OF.h \
+ constr_SET.c constr_SET.h \
+--- skeletons/NativeEnumerated.c 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/NativeEnumerated.c 2015-12-08 10:41:17.662558000 +0100
+@@ -31,7 +31,8 @@
+ NativeEnumerated_decode_uper,
+ NativeEnumerated_encode_uper,
+ NativeEnumerated_decode_aper,
+- NativeEnumerated_encode_aper,
++ NativeEnumerated_encode_aper,
++ NativeEnumerated_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_NativeEnumerated_tags,
+ sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]),
+@@ -335,3 +336,22 @@
+
+ _ASN_ENCODED_OK(er);
+ }
++
++asn_comp_rval_t *
++NativeEnumerated_compare(asn_TYPE_descriptor_t *td1, void *sptr1,
++ asn_TYPE_descriptor_t *td2, void *sptr2) {
++ const asn_INTEGER_enum_map_t *a = sptr1;
++ const asn_INTEGER_enum_map_t *b = sptr2;
++ asn_comp_rval_t *res = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ if(a->nat_value == b->nat_value)
++ return NULL;
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++}
+--- skeletons/NativeEnumerated.h 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/NativeEnumerated.h 2015-11-26 14:51:43.315616000 +0100
+@@ -26,6 +26,7 @@
+ per_type_encoder_f NativeEnumerated_encode_uper;
+ per_type_decoder_f NativeEnumerated_decode_aper;
+ per_type_encoder_f NativeEnumerated_encode_aper;
++type_compare_f NativeEnumerated_compare;
+
+ #ifdef __cplusplus
+ }
+--- skeletons/NativeInteger.c 2015-12-08 14:39:33.346543533 +0100
++++ skeletons/NativeInteger.c 2015-12-08 10:41:24.550558000 +0100
+@@ -32,7 +32,8 @@
+ NativeInteger_decode_uper, /* Unaligned PER decoder */
+ NativeInteger_encode_uper, /* Unaligned PER encoder */
+ NativeInteger_decode_aper, /* Aligned PER decoder */
+- NativeInteger_encode_aper, /* Aligned PER encoder */
++ NativeInteger_encode_aper, /* Aligned PER encoder */
++ NativeInteger_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_NativeInteger_tags,
+ sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]),
+@@ -410,3 +411,21 @@
+ }
+ }
+
++
++asn_comp_rval_t *
++NativeInteger_compare(asn_TYPE_descriptor_t *td1, void *sptr1,
++ asn_TYPE_descriptor_t *td2, void *sptr2) {
++ const long *native1 = (const long *)sptr1;
++ const long *native2 = (const long *)sptr2;
++ asn_comp_rval_t *res = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ if (*native1 == *native2) return NULL;
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++}
+--- skeletons/NativeInteger.h 2015-12-08 14:39:33.346543533 +0100
++++ skeletons/NativeInteger.h 2015-11-26 14:52:13.931616000 +0100
+@@ -31,6 +31,7 @@
+ per_type_encoder_f NativeInteger_encode_uper;
+ per_type_decoder_f NativeInteger_decode_aper;
+ per_type_encoder_f NativeInteger_encode_aper;
++type_compare_f NativeInteger_compare;
+
+ #ifdef __cplusplus
+ }
+--- skeletons/NativeReal.c 2015-12-08 14:39:33.350543533 +0100
++++ skeletons/NativeReal.c 2015-12-08 10:41:32.666558000 +0100
+@@ -33,7 +33,8 @@
+ NativeReal_decode_uper,
+ NativeReal_encode_uper,
+ NativeReal_decode_aper,
+- NativeReal_encode_aper,
++ NativeReal_encode_aper,
++ NativeReal_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_NativeReal_tags,
+ sizeof(asn_DEF_NativeReal_tags) / sizeof(asn_DEF_NativeReal_tags[0]),
+@@ -405,3 +406,30 @@
+ }
+ }
+
++asn_comp_rval_t *
++NativeReal_compare(asn_TYPE_descriptor_t *td1, void *sptr1,
++ asn_TYPE_descriptor_t *td2, void *sptr2) {
++ REAL_t *st1 = (REAL_t *)sptr1;
++ REAL_t *st2 = (REAL_t *)sptr2;
++ asn_comp_rval_t *res = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ if (st1->size != st2->size) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++ }
++ if (0 != memcmp(st1->buf, st2->buf, st1->size)) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++ }
++ return NULL;
++}
+--- skeletons/NativeReal.h 2015-12-08 14:39:33.350543533 +0100
++++ skeletons/NativeReal.h 2015-11-26 14:31:12.631617000 +0100
+@@ -29,6 +29,7 @@
+ per_type_encoder_f NativeReal_encode_uper;
+ per_type_decoder_f NativeReal_decode_aper;
+ per_type_encoder_f NativeReal_encode_aper;
++type_compare_f NativeReal_compare;
+
+ #ifdef __cplusplus
+ }
+--- skeletons/NULL.c 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/NULL.c 2015-12-07 10:49:05.178647000 +0100
+@@ -26,7 +26,8 @@
+ NULL_decode_uper, /* Unaligned PER decoder */
+ NULL_encode_uper, /* Unaligned PER encoder */
+ NULL_decode_aper, /* Aligned PER decoder */
+- NULL_encode_aper, /* Aligned PER encoder */
++ NULL_encode_aper, /* Aligned PER encoder */
++ NULL_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_NULL_tags,
+ sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]),
+@@ -192,3 +193,10 @@
+ er.encoded = 0;
+ _ASN_ENCODED_OK(er);
+ }
++
++asn_comp_rval_t *
++NULL_compare(asn_TYPE_descriptor_t *td1, void *sptr1,
++ asn_TYPE_descriptor_t *td2, void *sptr2) {
++
++ return NULL;
++}
+--- skeletons/NULL.h 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/NULL.h 2015-11-26 14:53:03.875616000 +0100
+@@ -27,6 +27,7 @@
+ per_type_encoder_f NULL_encode_uper;
+ per_type_decoder_f NULL_decode_aper;
+ per_type_encoder_f NULL_encode_aper;
++type_compare_f NULL_compare;
+
+ #ifdef __cplusplus
+ }
+--- skeletons/NumericString.c 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/NumericString.c 2015-11-26 14:40:39.407616000 +0100
+@@ -50,7 +50,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_NumericString_tags,
+ sizeof(asn_DEF_NumericString_tags)
+--- skeletons/ObjectDescriptor.c 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/ObjectDescriptor.c 2015-11-26 14:55:46.227615000 +0100
+@@ -25,7 +25,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ObjectDescriptor_tags,
+ sizeof(asn_DEF_ObjectDescriptor_tags)
+--- skeletons/OBJECT_IDENTIFIER.c 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/OBJECT_IDENTIFIER.c 2015-11-26 14:55:13.311615000 +0100
+@@ -28,7 +28,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_OBJECT_IDENTIFIER_tags,
+ sizeof(asn_DEF_OBJECT_IDENTIFIER_tags)
+--- skeletons/OCTET_STRING.c 2015-12-08 14:39:44.554543521 +0100
++++ skeletons/OCTET_STRING.c 2015-12-08 10:41:42.838558000 +0100
+@@ -37,7 +37,8 @@
+ OCTET_STRING_decode_uper, /* Unaligned PER decoder */
+ OCTET_STRING_encode_uper, /* Unaligned PER encoder */
+ OCTET_STRING_decode_aper, /* Aligned PER decoder */
+- OCTET_STRING_encode_aper, /* Aligned PER encoder */
++ OCTET_STRING_encode_aper, /* Aligned PER encoder */
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_OCTET_STRING_tags,
+ sizeof(asn_DEF_OCTET_STRING_tags)
+@@ -2160,3 +2161,30 @@
+ return st;
+ }
+
++asn_comp_rval_t *
++OCTET_STRING_compare(asn_TYPE_descriptor_t *td1,
++ void *sptr1, asn_TYPE_descriptor_t *td2, void *sptr2) {
++ OCTET_STRING_t *st1 = (OCTET_STRING_t *)sptr1;
++ OCTET_STRING_t *st2 = (OCTET_STRING_t *)sptr2;
++ asn_comp_rval_t *res = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ if (st1->size != st2->size) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++ }
++ if (0 != memcmp(st1->buf, st2->buf, st1->size)) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++ }
++ return NULL;
++}
+--- skeletons/OCTET_STRING.h 2015-12-08 14:39:33.350543533 +0100
++++ skeletons/OCTET_STRING.h 2015-11-26 12:56:15.259623000 +0100
+@@ -34,6 +34,7 @@
+ per_type_encoder_f OCTET_STRING_encode_uper;
+ per_type_decoder_f OCTET_STRING_decode_aper;
+ per_type_encoder_f OCTET_STRING_encode_aper;
++type_compare_f OCTET_STRING_compare;
+
+ /******************************
+ * Handy conversion routines. *
+--- skeletons/PrintableString.c 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/PrintableString.c 2015-11-26 14:56:09.787615000 +0100
+@@ -60,7 +60,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_PrintableString_tags,
+ sizeof(asn_DEF_PrintableString_tags)
+--- skeletons/REAL.c 2015-12-08 14:39:33.350543533 +0100
++++ skeletons/REAL.c 2015-12-08 10:41:55.178558000 +0100
+@@ -46,7 +46,8 @@
+ REAL_decode_uper,
+ REAL_encode_uper,
+ REAL_decode_aper,
+- REAL_encode_aper,
++ REAL_encode_aper,
++ REAL_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_REAL_tags,
+ sizeof(asn_DEF_REAL_tags) / sizeof(asn_DEF_REAL_tags[0]),
+@@ -741,3 +742,32 @@
+
+ return 0;
+ }
++
++
++asn_comp_rval_t *
++REAL_compare(asn_TYPE_descriptor_t *td1, void *sptr1,
++ asn_TYPE_descriptor_t *td2, void *sptr2) {
++ REAL_t *st1 = (REAL_t *)sptr1;
++ REAL_t *st2 = (REAL_t *)sptr2;
++ asn_comp_rval_t *res = NULL;
++
++ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res)
++
++ if (st1->size != st2->size) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++ }
++ if (0 != memcmp(st1->buf, st2->buf, st1->size)) {
++ res = calloc(1, sizeof(asn_comp_rval_t));
++ res->name = td1->name;
++ res->structure1 = sptr1;
++ res->structure2 = sptr2;
++ res->err_code = COMPARE_ERR_CODE_NO_MATCH;
++ return res;
++ }
++ return NULL;
++}
+--- skeletons/REAL.h 2015-12-08 14:39:33.350543533 +0100
++++ skeletons/REAL.h 2015-11-26 13:00:46.183623000 +0100
+@@ -23,6 +23,7 @@
+ per_type_encoder_f REAL_encode_uper;
+ per_type_decoder_f REAL_decode_aper;
+ per_type_encoder_f REAL_encode_aper;
++type_compare_f REAL_compare;
+
+ /***********************************
+ * Some handy conversion routines. *
+--- skeletons/RELATIVE-OID.c 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/RELATIVE-OID.c 2015-11-26 14:56:31.703615000 +0100
+@@ -29,7 +29,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_RELATIVE_OID_tags,
+ sizeof(asn_DEF_RELATIVE_OID_tags)
+--- skeletons/T61String.c 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/T61String.c 2015-11-26 14:57:07.235615000 +0100
+@@ -25,7 +25,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_T61String_tags,
+ sizeof(asn_DEF_T61String_tags)
+--- skeletons/TeletexString.c 2015-12-08 14:39:33.338543533 +0100
++++ skeletons/TeletexString.c 2015-11-26 14:57:17.643615000 +0100
+@@ -25,7 +25,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_TeletexString_tags,
+ sizeof(asn_DEF_TeletexString_tags)
+--- skeletons/UniversalString.c 2015-12-08 14:39:33.350543533 +0100
++++ skeletons/UniversalString.c 2015-11-26 14:57:29.015615000 +0100
+@@ -36,7 +36,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_UniversalString_tags,
+ sizeof(asn_DEF_UniversalString_tags)
+--- skeletons/UTCTime.c 2015-12-08 14:39:33.350543533 +0100
++++ skeletons/UTCTime.c 2015-11-26 14:57:44.127615000 +0100
+@@ -41,7 +41,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_UTCTime_tags,
+ sizeof(asn_DEF_UTCTime_tags)
+--- skeletons/UTF8String.c 2015-12-08 14:39:33.314543533 +0100
++++ skeletons/UTF8String.c 2015-11-26 14:06:54.563618000 +0100
+@@ -27,6 +27,7 @@
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_UTF8String_tags,
+ sizeof(asn_DEF_UTF8String_tags)
+--- skeletons/VideotexString.c 2015-12-08 14:39:33.342543533 +0100
++++ skeletons/VideotexString.c 2015-11-26 14:07:06.139618000 +0100
+@@ -25,7 +25,8 @@
+ OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_VideotexString_tags,
+ sizeof(asn_DEF_VideotexString_tags)
+--- skeletons/VisibleString.c 2015-12-08 14:39:33.350543533 +0100
++++ skeletons/VisibleString.c 2015-11-26 14:07:15.283618000 +0100
+@@ -30,7 +30,8 @@
+ OCTET_STRING_decode_uper,
+ OCTET_STRING_encode_uper,
+ OCTET_STRING_decode_aper,
+- OCTET_STRING_encode_aper,
++ OCTET_STRING_encode_aper,
++ OCTET_STRING_compare,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_VisibleString_tags,
+ sizeof(asn_DEF_VisibleString_tags)
diff --git a/openair3/S1AP/MESSAGES/ASN1/asn1tostruct.py b/openair3/S1AP/MESSAGES/ASN1/asn1tostruct.py
index c298e8ae87..446266d6a3 100644
--- a/openair3/S1AP/MESSAGES/ASN1/asn1tostruct.py
+++ b/openair3/S1AP/MESSAGES/ASN1/asn1tostruct.py
@@ -36,7 +36,7 @@ def outputHeaderToFile(f, filename):
f.write("""/*******************************************************************************
Eurecom OpenAirInterface
- Copyright(c) 1999 - 2013 Eurecom
+ Copyright(c) 1999 - 2015 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
@@ -250,20 +250,31 @@ for key in iesDefs:
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
keylowerunderscore = re.sub('-', '_', key.lower())
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
+
+ f.write("/* %s in iesDefs not in ieofielist.values() */\n" % (key))
f.write("/** \\brief Decode function for %s ies.\n" % (key))
if len(iesDefs[key]["ies"]) != 0:
f.write(" * \\param %s Pointer to ASN1 structure in which data will be stored\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" * \\param any_p Pointer to the ANY value to decode.\n")
f.write(" **/\n")
f.write("int %s_decode_%s(\n" % (fileprefix, keylowerunderscore))
-
if len(iesDefs[key]["ies"]) != 0:
f.write(" %s_t *%s,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" ANY_t *any_p);\n\n")
+ f.write("/* %s in iesDefs not in ieofielist.values() */\n" % (key))
+ f.write("/** \\brief Compare function for %s ies.\n" % (key))
+ f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
+ f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
+ f.write(" **/\n")
+ f.write("asn_comp_rval_t * %s_compare_%s(\n" % (fileprefix, keylowerunderscore))
+ f.write(" %s_t *%s1,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
+ f.write(" %s_t *%s2);\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
+
if len(iesDefs[key]["ies"]) == 0:
continue
+ f.write("/* %s in iesDefs not in ieofielist.values() */\n" % (key))
f.write("/** \\brief Encode function for %s ies.\n" % (key))
f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
@@ -272,16 +283,19 @@ for key in iesDefs:
f.write(" %s_t *%s,\n" % (asn1cStruct, firstlower))
f.write(" %s_t *%s);\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
+
for key in iesDefs:
if key not in ieofielist.values():
continue
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
+ f.write("/* %s in iesDefs in ieofielist.values() */\n" % (key))
f.write("/** \\brief Encode function for %s ies.\n" % (key))
f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" **/\n")
+ f.write("/* %s in iesDefs in ieofielist.values() */\n" % (key))
f.write("int %s_encode_%s(\n" % (fileprefix, firstlower.lower()))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstlower))
f.write(" %sIEs_t *%sIEs);\n\n" % (asn1cStruct, firstlower))
@@ -289,9 +303,19 @@ for key in iesDefs:
f.write(" * \\param any_p Pointer to the ANY value to decode.\n")
f.write(" * \\param callback Callback function called when any_p is successfully decoded.\n")
f.write(" **/\n")
+ f.write("/* %s in iesDefs in ieofielist.values() */\n" % (key))
f.write("int %s_decode_%s(\n" % (fileprefix, firstlower.lower()))
f.write(" %sIEs_t *%sIEs,\n" % (asn1cStruct, firstlower))
f.write(" %s_t *%s);\n\n" % (asn1cStruct, lowerFirstCamelWord(asn1cStruct)))
+ f.write("/** \\brief Compare function for %s ies.\n" % (key))
+ f.write(" * \\param %s Pointer to the IES structure.\n" % (firstlower))
+ f.write(" * \\param %s Pointer to the IES structure.\n" % (firstlower))
+ f.write(" **/\n")
+ f.write("asn_comp_rval_t * %s_compare_%s(\n" % (fileprefix, firstlower.lower()))
+ f.write(" %sIEs_t *%s1,\n" % (asn1cStruct, firstlower))
+ f.write(" %sIEs_t *%s2);\n\n" % (asn1cStruct, firstlower))
+
+
for key in iesDefs:
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
@@ -704,3 +728,170 @@ for (key, value) in iesDefs.items():
#f.write("cb_failed:\n")
#f.write(" return er;\n")
f.write("}\n\n")
+
+
+#Generate xer print functions
+f = open(outdir + fileprefix + '_compare.c', 'w')
+outputHeaderToFile(f, filename)
+f.write("#include \n")
+f.write("#include \n\n")
+f.write("#include \n#include \n\n")
+f.write("#include \"%s_common.h\"\n#include \"%s_ies_defs.h\"\n" % (fileprefix, fileprefix))
+f.write("#include \"%s-ProtocolIE-ID.h\"\n\n" % (fileprefix_first_upper))
+
+
+for key in iesDefs:
+ if key in ieofielist.values():
+ continue
+ structName = re.sub('ies', '', key)
+ asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
+ asn1cStruct = re.sub('Item', 'List', asn1cStruct)
+ if asn1cStruct.rfind('_') == len(asn1cStruct) - 1:
+ asn1cStruct = asn1cStruct[:-1]
+ asn1cStructfirstlower = asn1cStruct[:1].lower() + asn1cStruct[1:]
+ firstwordlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
+
+ iesaccess = ""
+ if key not in ieofielist.values():
+ iesaccess = "%s_ies." % (firstwordlower)
+
+ keyName = re.sub('-', '_', key)
+ keyupperunderscore = keyName.upper()
+ # No IE to encode...
+ if len(iesDefs[key]["ies"]) == 0:
+ continue
+
+ f.write("asn_comp_rval_t * %s_compare_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
+ f.write(" %s_t *%s1,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
+ f.write(" %s_t *%s2) {\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
+
+ f.write(" asn_comp_rval_t *rv = NULL;\n\n")
+ f.write(" asn_comp_rval_t *rv2 = NULL;\n\n")
+
+ f.write(" assert(%s1 != NULL);\n" % (lowerFirstCamelWord(re.sub('-', '_', key))));
+ f.write(" assert(%s2 != NULL);\n" % (lowerFirstCamelWord(re.sub('-', '_', key))));
+
+ loop = 0
+ for ie in iesDefs[key]["ies"]:
+ iename = re.sub('-', '_', re.sub('id-', '', ie[0]))
+ ienameunderscore = re.sub('-', '_', iename)
+ ienamefirstwordlower = lowerFirstCamelWord(iename)
+ ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper()
+ ietypeunderscore = re.sub('-', '_', ie[2])
+
+ if ie[3] != "mandatory":
+
+ loop = loop + 1
+ if loop == 1:
+ #f.write(" %s_IE_t *ie1 = NULL;\n" % (fileprefix_first_upper))
+ #f.write(" %s_IE_t *ie2 = NULL;\n" % (fileprefix_first_upper))
+ f.write(" if (%s1->presenceMask != %s2->presenceMask) {rv=calloc(1,sizeof(asn_comp_rval_t));rv->name = asn_DEF_%s.name;rv->structure1 = %s1;rv->structure2 = %s2;rv->err_code = COMPARE_ERR_CODE_VALUE_NULL; return rv;}\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), lowerFirstCamelWord(re.sub('-', '_', key)), ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), lowerFirstCamelWord(re.sub('-', '_', key))))
+
+ if ie[3] == "optional":
+ f.write(" /* Optional field */\n")
+ elif ie[3] == "conditional":
+ f.write(" /* Conditional field */\n")
+ f.write(" if (%s1->presenceMask & %s_%s_PRESENT) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), keyupperunderscore, ieupperunderscore))
+
+
+ if ie[2] in ieofielist.keys():
+ f.write(" /* collection field */\n")
+ f.write(" rv2 = %s_compare_%s(&%s1->%s, &%s2->%s);\n" % (fileprefix, ietypeunderscore.lower(), lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
+ f.write(" if(rv2) {")
+ f.write(" if (NULL == rv) {")
+ f.write(" rv = rv2;")
+ f.write(" } else {")
+ f.write(" rv2->next = rv;")
+ f.write(" rv = rv2;")
+ f.write(" }")
+ f.write(" rv2 = NULL;")
+ f.write(" }")
+ else:
+ f.write(" /* simple field */\n")
+ f.write(" rv2 = asn_DEF_%s.compare(&asn_DEF_%s, &%s1->%s, &asn_DEF_%s, &%s2->%s); \n" % (ietypeunderscore, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
+ f.write(" if (rv2) {")
+ f.write(" if (NULL == rv) {")
+ f.write(" rv = rv2;")
+ f.write(" } else {")
+ f.write(" rv2->next = rv;")
+ f.write(" rv = rv2;")
+ f.write(" }")
+ f.write(" rv2 = NULL;")
+ f.write(" if (!rv->name) rv->name = asn_DEF_%s.name;" % (ietypeunderscore))
+ f.write(" }")
+
+ f.write(" assert(0);\n");
+ f.write(" }\n\n")
+
+ else:
+ if ie[2] in ieofielist.keys():
+ f.write(" /* Mandatory collection field */\n")
+ f.write(" rv2 = %s_compare_%s(&%s1->%s, &%s2->%s);\n" % (fileprefix, ietypeunderscore.lower(), lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
+ f.write(" if (rv2) {\n")
+ f.write(" if (NULL == rv) {\n")
+ f.write(" rv = rv2;\n")
+ f.write(" } else {\n")
+ f.write(" rv2->next = rv;\n")
+ f.write(" rv = rv2;\n")
+ f.write(" }\n")
+ f.write(" rv2 = NULL;\n")
+ f.write(" }\n")
+
+ else:
+ f.write(" /* Mandatory simple field */\n")
+ f.write(" rv2 = asn_DEF_%s.compare(&asn_DEF_%s, &%s1->%s, &asn_DEF_%s, &%s2->%s);\n" % (ietypeunderscore, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower ))
+ f.write(" if(rv2) {\n")
+ f.write(" if (NULL == rv) {\n")
+ f.write(" rv = rv2;\n")
+ f.write(" } else {\n")
+ f.write(" rv2->next = rv;\n")
+ f.write(" rv = rv2;\n")
+ f.write(" }\n")
+ f.write(" rv2 = NULL;\n")
+ f.write(" if (!rv->name) rv->name = asn_DEF_%s.name;\n" % (ietypeunderscore))
+ f.write(" }\n")
+ f.write(" return rv;\n")
+ f.write("}\n\n")
+
+for (key, value) in iesDefs.items():
+ if key not in ieofielist.values():
+ continue
+
+ ie = value["ies"][0]
+ ietypeunderscore = re.sub('-', '_', ie[2])
+ asn1cStruct = re.sub('-', '_', re.sub('IEs', '', re.sub('-IEs', '', key)))
+ asn1cStruct = re.sub('Item', 'List', asn1cStruct)
+ firstwordlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
+
+ for (i, j) in ieofielist.items():
+ if j == key:
+ break
+
+ f.write("extern asn_TYPE_descriptor_t asn_DEF_%s;\n" % (ietypeunderscore))
+
+ f.write("asn_comp_rval_t * %s_compare_%s(\n" % (fileprefix, re.sub('-', '_', i).lower()))
+ f.write(" %sIEs_t *%sIEs1,\n" % (re.sub('-', '_', i), lowerFirstCamelWord(re.sub('-', '_', i))))
+ f.write(" %sIEs_t *%sIEs2) {\n\n" % (re.sub('-', '_', i), lowerFirstCamelWord(re.sub('-', '_', i))))
+ f.write(" int i;\n")
+ f.write(" asn_comp_rval_t *rv = NULL;\n\n")
+ f.write(" asn_comp_rval_t *rv2 = NULL;\n\n")
+
+
+ f.write(" assert(%sIEs1 != NULL);\n" % (lowerFirstCamelWord(re.sub('-', '_', i))));
+ f.write(" assert(%sIEs2 != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', i))));
+
+ f.write(" for (i = 0; i < %sIEs1->%s.count; i++) {\n" % (lowerFirstCamelWord(re.sub('-', '_', i)), re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
+ f.write(" rv2 = asn_DEF_%s.compare(&asn_DEF_%s, %sIEs1->%s.array[i], &asn_DEF_%s, %sIEs2->%s.array[i]);\n" % (ietypeunderscore, ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', i)), re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))), ietypeunderscore, lowerFirstCamelWord(re.sub('-', '_', i)), re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
+ f.write(" if(rv2) {")
+ f.write(" if (NULL == rv) {")
+ f.write(" rv = rv2;")
+ f.write(" } else {")
+ f.write(" rv2->next = rv;")
+ f.write(" rv = rv2;")
+ f.write(" }")
+ f.write(" rv2 = NULL;")
+ f.write(" }")
+ f.write(" }\n")
+ f.write(" return rv;\n")
+ f.write("}\n\n")
+
diff --git a/openair3/S1AP/s1ap_eNB.c b/openair3/S1AP/s1ap_eNB.c
index c880c3f3b4..1b683d4aa3 100644
--- a/openair3/S1AP/s1ap_eNB.c
+++ b/openair3/S1AP/s1ap_eNB.c
@@ -72,9 +72,9 @@ s1ap_eNB_config_t s1ap_config;
static int s1ap_eNB_generate_s1_setup_request(
s1ap_eNB_instance_t *instance_p, s1ap_eNB_mme_data_t *s1ap_mme_data_p);
-static
+
void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t *s1ap_register_eNB);
-static
+
void s1ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp);
uint32_t s1ap_generate_eNB_id(void)
@@ -150,7 +150,7 @@ static void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p,
itti_send_msg_to_task(TASK_SCTP, instance_p->instance, message_p);
}
-static
+
void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t *s1ap_register_eNB)
{
s1ap_eNB_instance_t *new_instance;
@@ -210,7 +210,6 @@ void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t *
}
}
-static
void s1ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp)
{
s1ap_eNB_instance_t *instance_p;
diff --git a/openair3/SCTP/sctp_eNB_task.c b/openair3/SCTP/sctp_eNB_task.c
index c1e7d989e9..357803ac4f 100644
--- a/openair3/SCTP/sctp_eNB_task.c
+++ b/openair3/SCTP/sctp_eNB_task.c
@@ -100,6 +100,7 @@ static STAILQ_HEAD(sctp_cnx_list_head, sctp_cnx_list_elm_s) sctp_cnx_list;
static uint16_t sctp_nb_cnx = 0;
+//------------------------------------------------------------------------------
struct sctp_cnx_list_elm_s *sctp_get_cnx(int32_t assoc_id, int sd)
{
struct sctp_cnx_list_elm_s *elm;
@@ -119,6 +120,7 @@ struct sctp_cnx_list_elm_s *sctp_get_cnx(int32_t assoc_id, int sd)
return NULL;
}
+//------------------------------------------------------------------------------
void
sctp_handle_new_association_req(
const instance_t instance,
@@ -388,6 +390,7 @@ sctp_handle_new_association_req(
sd, sctp_nb_cnx, assoc_id);
}
+ //------------------------------------------------------------------------------
void sctp_send_data(
instance_t instance,
task_id_t task_id,
@@ -430,6 +433,7 @@ void sctp_send_data(
sctp_cnx->assoc_id);
}
+//------------------------------------------------------------------------------
static int sctp_close_association(
const instance_t instance,
const task_id_t requestor,
@@ -456,6 +460,7 @@ static int sctp_close_association(
return 0;
}
+//------------------------------------------------------------------------------
static int sctp_create_new_listener(
const instance_t instance,
const task_id_t requestor,
@@ -580,6 +585,7 @@ err:
return -1;
}
+//------------------------------------------------------------------------------
static inline
void
sctp_eNB_accept_associations(
@@ -646,6 +652,7 @@ sctp_eNB_accept_associations(
}
}
+//------------------------------------------------------------------------------
static inline
void
sctp_eNB_read_from_socket(
@@ -770,6 +777,7 @@ sctp_eNB_read_from_socket(
}
}
+//------------------------------------------------------------------------------
void
sctp_eNB_flush_sockets(
struct epoll_event *events, int nb_events)
@@ -799,6 +807,7 @@ sctp_eNB_flush_sockets(
}
+//------------------------------------------------------------------------------
void *sctp_eNB_task(void *arg)
{
int nb_events;
diff --git a/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/attach_complete.pdml b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/attach_complete.pdml
new file mode 100644
index 0000000000..f7c27272aa
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/attach_complete.pdml
@@ -0,0 +1,4242 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf
new file mode 100644
index 0000000000..e864f47edb
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf
@@ -0,0 +1,174 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+ ////////// Identification parameters:
+ eNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_ENB";
+
+ eNB_name = "eNB_Eurecom_LTEBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = "1";
+
+ mobile_country_code = "208";
+
+ mobile_network_code = "95";
+
+ ////////// Physical parameters:
+
+ component_carriers = (
+ {
+ frame_type = "FDD";
+ tdd_config = 3;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 7;
+ downlink_frequency = 2660000000L;
+ uplink_frequency_offset = -120000000;
+ Nid_cell = 0;
+ N_RB_DL = 25;
+ Nid_cell_mbsfn = 0;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 90;
+ rx_gain = 120;
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 1;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 32;
+ pdsch_referenceSignalPower = -26;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 1;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
+ srs_enable = "DISABLE";
+ /* srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;*/
+
+ pusch_p0_Nominal = -90;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -108;
+ msg3_delta_Preamble = 6;
+ pucch_deltaF_Format1 = "deltaF2";
+ pucch_deltaF_Format1b = "deltaF3";
+ pucch_deltaF_Format2 = "deltaF0";
+ pucch_deltaF_Format2a = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
+
+ rach_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
+ /*
+ rach_sizeOfRA_PreamblesGroupA = ;
+ rach_messageSizeGroupA = ;
+ rach_messagePowerOffsetGroupB = ;
+ */
+ rach_powerRampingStep = 4;
+ rach_preambleInitialReceivedTargetPower = -108;
+ rach_preambleTransMax = 10;
+ rach_raResponseWindowSize = 10;
+ rach_macContentionResolutionTimer = 48;
+ rach_maxHARQ_Msg3Tx = 4;
+
+ pcch_default_PagingCycle = 128;
+ pcch_nB = "oneT";
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
+ }
+ );
+
+ srb1_parameters :
+ {
+ # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+ timer_poll_retransmit = 80;
+
+ # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+ timer_reordering = 35;
+
+ # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+ timer_status_prohibit = 0;
+
+ # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+ poll_pdu = 4;
+
+ # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+ poll_byte = 99999;
+
+ # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+ max_retx_threshold = 4;
+ }
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "192.188.2.2";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ ENB_INTERFACE_NAME_FOR_S1_MME = "tun2";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "192.188.2.2/24";
+
+ ENB_INTERFACE_NAME_FOR_S1U = "lo";
+ ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.1/24";
+ ENB_PORT_FOR_S1U = 2153; # Spec 2152
+ };
+
+ log_config :
+ {
+ global_log_level ="info";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="info";
+ phy_log_verbosity ="medium";
+ mac_log_level ="info";
+ mac_log_verbosity ="high";
+ rlc_log_level ="info";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="info";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="info";
+ rrc_log_verbosity ="medium";
+ gtpu_log_level ="info";
+ gtpu_log_verbosity ="medium";
+ udp_log_level ="info";
+ udp_log_verbosity ="medium";
+ };
+
+ }
+);
diff --git a/openair3/TEST/EPC_TEST/generate_scenario.c b/openair3/TEST/EPC_TEST/generate_scenario.c
index bd181ce878..69e707dcf9 100644
--- a/openair3/TEST/EPC_TEST/generate_scenario.c
+++ b/openair3/TEST/EPC_TEST/generate_scenario.c
@@ -36,18 +36,33 @@
*/
#include
+#include
#include
#include
#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
#include "assertions.h"
-#include "enb_config.h"
+#include "generate_scenario.h"
#include "s1ap_eNB.h"
-#if defined(ENABLE_ITTI)
-# include "intertask_interface.h"
-#endif
-
-#define EPC_TEST_SCENARIO_MAX_ENB 2
+#include "intertask_interface.h"
#define ENB_CONFIG_STRING_ACTIVE_ENBS "Active_eNBs"
@@ -79,29 +94,201 @@
#define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U "ENB_PORT_FOR_S1U"
+#define ENB_CONFIG_MAX_XSLT_PARAMS 32
+
Enb_properties_array_t g_enb_properties;
+char *g_test_dir = NULL;
+char *g_pdml_in_origin = NULL;
+extern int xmlLoadExtDtdDefaultValue;
+
+#define GENERATE_PDML_FILE 1
+#define GENERATE_SCENARIO 2
+
+#define GS_IS_FILE 1
+#define GS_IS_DIR 2
+
+//------------------------------------------------------------------------------
+// test if file exist in current directory
+int is_file_exists( const char const * file_nameP, const char const *file_roleP)
+{
+ struct stat s;
+ int err = stat(file_nameP, &s);
+ if(-1 == err) {
+ if(ENOENT == errno) {
+ fprintf(stderr, "Please provide a valid %s, %s does not exist\n", file_roleP, file_nameP);
+ } else {
+ perror("stat");
+ exit(1);
+ }
+ } else {
+ if(S_ISREG(s.st_mode)) {
+ return GS_IS_FILE;
+ } else if(S_ISDIR(s.st_mode)) {
+ return GS_IS_DIR;
+ } else {
+ fprintf(stderr, "Please provide a valid test %s, %s exists but is not found valid\n", file_roleP, file_nameP);
+ }
+ }
+ return 0;
+}
+
+
+//------------------------------------------------------------------------------
+int strip_extension(char *in_filename)
+{
+ static const uint8_t name_min_len = 1;
+ static const uint8_t max_ext_len = 5; // .pdml !
+ fprintf(stdout, "strip_extension %s\n", in_filename);
+
+ if (NULL != in_filename) {
+ /* Check chars starting at end of string to find last '.' */
+ for (ssize_t i = strlen(in_filename); i >= name_min_len; i--) {
+ if (in_filename[i] == '.') {
+ in_filename[i] = '\0';
+ return i;
+ }
+ }
+ }
+ return -1;
+}
+//------------------------------------------------------------------------------
+// return number of splitted items
+int split_path( char * pathP, char *** resP)
+{
+ char * saveptr1;
+ char * p = strtok_r (pathP, "/", &saveptr1);
+ int n_spaces = 0;
+
+ /// split string and append tokens to 'res'
+ while (p) {
+ *resP = realloc (*resP, sizeof (char*) * ++n_spaces);
+ AssertFatal (*resP, "realloc failed");
+ (*resP)[n_spaces-1] = p;
+ p = strtok_r (NULL, "/", &saveptr1);
+ }
+ return n_spaces;
+}
+
+//------------------------------------------------------------------------------
+int generate_test_scenario(const char const * test_nameP, const char const * pdml_in_basenameP)
+//------------------------------------------------------------------------------
+{
+ //int fd_pdml_in;
+ xsltStylesheetPtr cur = NULL;
+ xmlDocPtr doc, res;
+ FILE *test_scenario_file = NULL;
+ const char test_scenario_filename[NAME_MAX];
+ const char *params[2*ENB_CONFIG_MAX_XSLT_PARAMS];
+ int nb_params = 0;
+ int i,j;
+ char astring[1024];
+ char *astring2 = NULL;
+ struct in_addr addr;
+
+ memset(test_scenario_filename, 0, sizeof(test_scenario_filename));
+ memset(astring, 0, sizeof(astring));
+ if (getcwd(astring, sizeof(astring)) != NULL) {
+ fprintf(stdout, "working in %s directory\n", astring);
+ } else {
+ perror("getcwd() error");
+ exit(1);
+ }
+
+ xmlSubstituteEntitiesDefault(1);
+ xmlLoadExtDtdDefaultValue = 1;
+ cur = xsltParseStylesheetFile("/usr/share/oai/xsl/generic_scenario.xsl");
+ if (NULL == cur) {
+ AssertFatal (0, "Could not parse stylesheet file /usr/share/oai/xsl/generic_scenario.xsl!\n");
+ } else {
+ fprintf(stdout, "XSLT style sheet: /usr/share/oai/xsl/generic_scenario.xsl\n");
+ }
+
+ doc = xmlParseFile(pdml_in_basenameP);
+ if (NULL == doc) {
+ AssertFatal (0, "Could not parse pdml file %s!\n", pdml_in_basenameP);
+ } else {
+ fprintf(stdout, "pdml file: %s\n", pdml_in_basenameP);
+ }
+ params[nb_params++] = "test_name";
+ sprintf(astring, "%s", pdml_in_basenameP);
+ if (strip_extension(astring) > 0) {
+ astring2 = strdup(astring);
+ sprintf(astring, "\"%s\"", astring2);
+ free(astring2);
+ astring2 = NULL;
+ } else {
+ fprintf(stderr, "Assigning test name failed: %s\n", astring);
+ }
+ params[nb_params++] = strdup(astring);
+
+ for (i = 0; i < g_enb_properties.number; i++) {
+ // eNB S1-C IPv4 address
+ sprintf(astring, "enb%d_s1c", i);
+ params[nb_params++] = strdup(astring);
+ addr.s_addr = g_enb_properties.properties[i]->enb_ipv4_address_for_S1_MME;
+ sprintf(astring, "\"%s\"", inet_ntoa(addr));
+ params[nb_params++] = strdup(astring);
+
+ // MME S1-C IPv4 address
+ for (j = 0; j < g_enb_properties.properties[i]->nb_mme; j++) {
+ sprintf(astring, "mme%d_s1c_%d", i, j);
+ params[nb_params++] = strdup(astring);
+ AssertFatal (g_enb_properties.properties[i]->mme_ip_address[j].ipv4_address,
+ "Only support MME IPv4 address\n");
+ sprintf(astring, "\"%s\"", g_enb_properties.properties[i]->mme_ip_address[j].ipv4_address);
+ params[nb_params++] = strdup(astring);
+ }
+ }
+ params[nb_params] = NULL;
+ res = xsltApplyStylesheet(cur, doc, params);
+ if (NULL != res) {
+ // since pdml filename is not relative (no path), just filename in current directory we can safely remove
+ sprintf(test_scenario_filename,"%s",pdml_in_basenameP);
+ if (strip_extension(test_scenario_filename) > 0) {
+ strcat(test_scenario_filename, ".xml");
+ test_scenario_file = fopen( test_scenario_filename, "w+");
+ if (NULL != test_scenario_file) {
+ xsltSaveResultToFile(test_scenario_file, res, cur);
+ fclose(test_scenario_file);
+ fprintf(stdout, "Wrote test scenario to %s\n", test_scenario_filename);
+ } else {
+ fprintf(stderr, "Error in fopen(%s)\n", test_scenario_filename);
+ }
+ } else {
+ fprintf(stderr, "Error in strip_extension()\n");
+ }
+ } else {
+ fprintf(stderr, "Error in xsltApplyStylesheet()\n");
+ }
+ xsltFreeStylesheet(cur);
+ xmlFreeDoc(res);
+ xmlFreeDoc(doc);
+
+ xsltCleanupGlobals();
+ xmlCleanupParser();
+}
//------------------------------------------------------------------------------
static void enb_config_display(void)
//------------------------------------------------------------------------------
{
- int i,j;
+ int i;
printf( "\n----------------------------------------------------------------------\n");
- printf( " ENB CONFIG FILE CONTENT LOADED (TBC):\n");
+ printf( " ENB CONFIG FILE CONTENT LOADED:\n");
printf( "----------------------------------------------------------------------\n");
for (i = 0; i < g_enb_properties.number; i++) {
printf( "ENB CONFIG for instance %u:\n\n", i);
- printf( "\teNB name: \t%s:\n",g_enb_properties.properties[i]->eNB_name);
- printf( "\teNB ID: \t%"PRIu32":\n",g_enb_properties.properties[i]->eNB_id);
- printf( "\tCell type: \t%s:\n",g_enb_properties.properties[i]->cell_type == CELL_MACRO_ENB ? "CELL_MACRO_ENB":"CELL_HOME_ENB");
- printf( "\tTAC: \t%"PRIu16":\n",g_enb_properties.properties[i]->tac);
- printf( "\tMCC: \t%"PRIu16":\n",g_enb_properties.properties[i]->mcc);
+ printf( "\teNB name: \t%s\n",g_enb_properties.properties[i]->eNB_name);
+ printf( "\teNB ID: \t%"PRIu32"\n",g_enb_properties.properties[i]->eNB_id);
+ printf( "\tCell type: \t%s\n",g_enb_properties.properties[i]->cell_type == CELL_MACRO_ENB ? "CELL_MACRO_ENB":"CELL_HOME_ENB");
+ printf( "\tTAC: \t%"PRIu16"\n",g_enb_properties.properties[i]->tac);
+ printf( "\tMCC: \t%"PRIu16"\n",g_enb_properties.properties[i]->mcc);
if (g_enb_properties.properties[i]->mnc_digit_length == 3) {
- printf( "\tMNC: \t%03"PRIu16":\n",g_enb_properties.properties[i]->mnc);
+ printf( "\tMNC: \t%03"PRIu16"\n",g_enb_properties.properties[i]->mnc);
} else {
- printf( "\tMNC: \t%02"PRIu16":\n",g_enb_properties.properties[i]->mnc);
+ printf( "\tMNC: \t%02"PRIu16"\n",g_enb_properties.properties[i]->mnc);
}
printf( "\n--------------------------------------------------------\n");
}
@@ -114,13 +301,12 @@ static void enb_config_display(void)
#define libconfig_int int
#endif
//------------------------------------------------------------------------------
-const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
+void enb_config_init(const char const * lib_config_file_name_pP)
//------------------------------------------------------------------------------
{
config_t cfg;
config_setting_t *setting = NULL;
config_setting_t *subsetting = NULL;
- config_setting_t *setting_srb1 = NULL;
config_setting_t *setting_mme_addresses = NULL;
config_setting_t *setting_mme_address = NULL;
config_setting_t *setting_enb = NULL;
@@ -128,8 +314,6 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
int enb_properties_index = 0;
int num_enbs = 0;
int num_mme_address = 0;
- int num_otg_elements =0;
- int num_component_carriers =0;
int i = 0;
int j = 0;
int parse_errors = 0;
@@ -139,12 +323,6 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
const char* enb_name = NULL;
const char* mcc = 0;
const char* mnc = 0;
- const char* frame_type = NULL;
- const char* prefix_type = NULL;
- libconfig_int Nid_cell = 0;
-
- libconfig_int my_int;
-
char* ipv4 = NULL;
char* ipv6 = NULL;
char* active = NULL;
@@ -157,21 +335,20 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
char* enb_ipv4_address_for_S1_MME = NULL;
char *address = NULL;
char *cidr = NULL;
- char *astring = NULL;
+
+
+ AssertFatal (lib_config_file_name_pP != NULL,
+ "Bad parameter lib_config_file_name_pP %s , must reference a valid eNB config file\n",
+ lib_config_file_name_pP);
memset((char*)active_enb, 0 , EPC_TEST_SCENARIO_MAX_ENB * sizeof(char*));
config_init(&cfg);
- if (lib_config_file_name_pP != NULL) {
- /* Read the file. If there is an error, report it and exit. */
- if (! config_read_file(&cfg, lib_config_file_name_pP)) {
- config_destroy(&cfg);
- AssertFatal (0, "Failed to parse eNB configuration file %s!\n", lib_config_file_name_pP);
- }
- } else {
+ /* Read the file. If there is an error, report it and exit. */
+ if (! config_read_file(&cfg, lib_config_file_name_pP)) {
config_destroy(&cfg);
- AssertFatal (0, "No eNB configuration file provided!\n");
+ AssertFatal (0, "Failed to parse eNB configuration file %s!\n", lib_config_file_name_pP);
}
// Get list of active eNBs, (only these will be configured)
@@ -195,7 +372,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
setting = config_lookup(&cfg, ENB_CONFIG_STRING_ENB_LIST);
if (setting != NULL) {
- enb_properties_index = 0;
+ enb_properties_index = g_enb_properties.number;
parse_errors = 0;
num_enbs = config_setting_length(setting);
@@ -332,31 +509,19 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
IPV4_STR_ADDR_TO_INT_NWBO ( address, g_enb_properties.properties[enb_properties_index]->enb_ipv4_address_for_S1_MME, "BAD IP ADDRESS FORMAT FOR eNB S1_MME !\n" );
}
}
- }
- }
- }
- }
- }
+ } // if (subsetting != NULL) {
+ enb_properties_index += 1;
+ } // if (strcmp(active_enb[j], enb_name) == 0)
+ } // for (j=0; j < num_enb_properties; j++)
+ } // for (i = 0; i < num_enbs; i++)
+ } // if (setting != NULL) {
- g_enb_properties.number = num_enb_properties;
+ g_enb_properties.number += num_enb_properties;
- AssertError (enb_properties_index == num_enb_properties, parse_errors ++,
- "Failed to parse eNB configuration file %s, mismatch between %u active eNBs and %u corresponding defined eNBs !\n",
- lib_config_file_name_pP, num_enb_properties, enb_properties_index);
AssertFatal (parse_errors == 0,
"Failed to parse eNB configuration file %s, found %d error%s !\n",
lib_config_file_name_pP, parse_errors, parse_errors > 1 ? "s" : "");
- enb_config_display();
- return &g_enb_properties;
-
-}
-
-//------------------------------------------------------------------------------
-const Enb_properties_array_t *enb_config_get(void)
-//------------------------------------------------------------------------------
-{
- return &g_enb_properties;
}
@@ -366,19 +531,41 @@ static void usage (
char *argv[])
//------------------------------------------------------------------------------
{
- fprintf (stdout, "Please report any bug to: openair4g-devel@lists.eurecom.fr\n\n");
+ fprintf (stdout, "Please report any bug to: %s\n",PACKAGE_BUGREPORT);
fprintf (stdout, "Usage: %s [options]\n\n", argv[0]);
- fprintf (stdout, "Available options:\n");
- fprintf (stdout, "\t--help, -h Print this help and return\n");
- fprintf (stdout, "\t--test-dir \n");
- fprintf (stdout, " Set the test directory where pdml and original enb(s) config files are located\n");
- fprintf (stdout, " See README in openair3/TEST/EPC_TEST\n");
- fprintf (stdout, "\t--new-enb-conf-file \n");
- fprintf (stdout, " Provide an updated eNB config file for generating a copy of the original test\n");
- fprintf (stdout, " This option is set as many times as there are some eNB in the original test\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, "Mandatory options:\n");
+ fprintf (stdout, "\t-c | --enb-conf-file Provide the old eNB config file for generating a copy of the original test\n");
+ fprintf (stdout, "\t-d | --test-dir Directory where a set of files related to a particular test are located\n");
+ fprintf (stdout, "\t-p | --pdml File name (with no path) in 'test-dir' directory of an original scenario that has to be reworked (IP addresses) with new testbed\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, "Other options:\n");
+ fprintf (stdout, "\t-h | --help Print this help and return\n");
+ fprintf (stdout, "\t-v | --version Print informations about the version of this executable\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, "Example of generate_scenario use case: \n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, " Generate a generix xml scenario from a captured pcap file: \n");
+ fprintf (stdout, " +---------------------+ \n");
+ fprintf (stdout, " |captured pcap-ng file| \n");
+ fprintf (stdout, " +----------+----------+ \n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " mme_test_s1_pcap2pdml --pcap_file <`captured pcap-ng file`>\n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " +--------V----------+ +--------------------+\n");
+ fprintf (stdout, " |'pdml-in-orig' file| |'enb-conf-file' file|\n");
+ fprintf (stdout, " +--------+----------+ +--------------------+\n");
+ fprintf (stdout, " | |\n");
+ fprintf (stdout, " +----------------------------+\n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " generate_scenario -d -p <'pdml-in-orig' file> -c <'enb-conf-file' file> \n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " +------------V--------------+\n");
+ fprintf (stdout, " +'xml-test-scenario' file |\n");
+ fprintf (stdout, " +---------------------------+\n");
+ fprintf (stdout, "\n");
}
-
//------------------------------------------------------------------------------
int
config_parse_opt_line (
@@ -387,65 +574,119 @@ config_parse_opt_line (
//------------------------------------------------------------------------------
{
int option;
- char *enb_config_file_name = NULL;
- char *test_dir = NULL;
+ int rv = 0;
+ char *enb_config_file_name = NULL;
+ char *pdml_in_file_name = NULL;
+ char *test_dir_name = NULL;
enum long_option_e {
LONG_OPTION_START = 0x100, /* Start after regular single char options */
+ LONG_OPTION_ENB_CONF_FILE,
+ LONG_OPTION_PDML,
LONG_OPTION_TEST_DIR,
- LONG_OPTION_NEW_ENB_CONF_FILE,
LONG_OPTION_HELP,
+ LONG_OPTION_VERSION,
};
static struct option long_options[] = {
- {"test-dir", required_argument, 0, LONG_OPTION_TEST_DIR},
- {"new-enb-conf-file", required_argument, 0, LONG_OPTION_NEW_ENB_CONF_FILE},
- {"help", required_argument, 0, LONG_OPTION_HELP},
+ {"enb-conf-file", required_argument, 0, LONG_OPTION_ENB_CONF_FILE},
+ {"pdml ", required_argument, 0, LONG_OPTION_PDML},
+ {"test-dir", required_argument, 0, LONG_OPTION_TEST_DIR},
+ {"help", no_argument, 0, LONG_OPTION_HELP},
+ {"version", no_argument, 0, LONG_OPTION_VERSION},
{NULL, 0, NULL, 0}
};
/*
* Parsing command line
*/
- while ((option = getopt_long (argc, argv, "h", long_options, NULL)) != -1) {
+ while ((option = getopt_long (argc, argv, "vhp:n:c:s:d:", long_options, NULL)) != -1) {
switch (option) {
- case LONG_OPTION_TEST_DIR:
+ case LONG_OPTION_ENB_CONF_FILE:
+ case 'c':
if (optarg) {
- test_dir = strdup(optarg);
- printf("TEST DIRECTORY IS %s\n", test_dir);
- }
- break;
-
- case LONG_OPTION_NEW_ENB_CONF_FILE:
- if (optarg) {
- enb_config_file_name = strdup(optarg);
+ enb_config_file_name = optarg;
printf("eNB config file name is %s\n", enb_config_file_name);
- enb_config_init(enb_config_file_name);
+ rv |= GENERATE_SCENARIO;
}
break;
+ case LONG_OPTION_PDML:
+ case 'p':
if (optarg) {
- test_dir = strdup(optarg);
- printf("TEST DIRECTORY IS %s\n", test_dir);
+ pdml_in_file_name = strdup(optarg);
+ printf("PDML input file name is %s\n", pdml_in_file_name);
+ rv |= GENERATE_SCENARIO;
}
break;
+ case LONG_OPTION_TEST_DIR:
+ case 'd':
+ if (optarg) {
+ test_dir_name = strdup(optarg);
+ if (is_file_exists(test_dir_name, "test dirname") != GS_IS_DIR) {
+ fprintf(stderr, "Please provide a valid test dirname, %s is not a valid directory name\n", test_dir_name);
+ exit(1);
+ }
+ printf("Test dir name is %s\n", test_dir_name);
+ }
+ break;
+
+ case LONG_OPTION_VERSION:
+ case 'v':
+ printf("Version %s\n", PACKAGE_VERSION);
+ exit (0);
+ break;
+
case LONG_OPTION_HELP:
- case 'h': /* Fall through */
+ case 'h':
default:
usage (argc, argv);
exit (0);
}
}
- return 0;
+ if (NULL == test_dir_name) {
+ fprintf(stderr, "Please provide a valid test dirname\n");
+ exit(1);
+ }
+ g_test_dir = test_dir_name; test_dir_name = NULL;
+ if (chdir(g_test_dir) != 0) {
+ fprintf(stderr, "Error: chdir %s returned %s\n", g_test_dir, strerror(errno));
+ exit(1);
+ }
+ if (rv & GENERATE_SCENARIO) {
+ if (NULL == enb_config_file_name) {
+ fprintf(stderr, "Error: please provide the original eNB config file name that should be in %s\n", g_test_dir);
+ }
+ if (is_file_exists(enb_config_file_name, "ENB config file") != GS_IS_FILE) {
+ fprintf(stderr, "Error: eNB config file name %s is not found in dir %s\n", enb_config_file_name, g_test_dir);
+ }
+ enb_config_init(enb_config_file_name);
+ //enb_config_display();
+
+ if (NULL == pdml_in_file_name) {
+ fprintf(stderr, "Error: please provide the PDML file name that should be in %s\n", g_test_dir);
+ }
+ if (is_file_exists(pdml_in_file_name, "PDML file") != GS_IS_FILE) {
+ fprintf(stderr, "Error: PDML file name %s is not found in dir %s\n", pdml_in_file_name, g_test_dir);
+ }
+ g_pdml_in_origin = pdml_in_file_name; pdml_in_file_name = NULL;
+ }
+ return rv;
}
//------------------------------------------------------------------------------
int main( int argc, char **argv )
//------------------------------------------------------------------------------
{
+ int actions = 0;
+
memset((char*) &g_enb_properties, 0 , sizeof(g_enb_properties));
- config_parse_opt_line (argc, argv); //Command-line options
+
+ actions = config_parse_opt_line (argc, argv); //Command-line options
+ if (actions & GENERATE_SCENARIO) {
+ generate_test_scenario(g_test_dir, g_pdml_in_origin);
+ }
return 0;
}
diff --git a/openair3/TEST/EPC_TEST/generate_scenario.h b/openair3/TEST/EPC_TEST/generate_scenario.h
new file mode 100644
index 0000000000..88c0d28e17
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/generate_scenario.h
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+*******************************************************************************/
+
+/*
+ generate_scenario.h
+ -------------------
+ AUTHOR : Lionel GAUTHIER
+ COMPANY : EURECOM
+ EMAIL : Lionel.Gauthier@eurecom.fr
+*/
+
+#ifndef GENERATE_SCENARIO_H_
+#define GENERATE_SCENARIO_H_
+#include
+#include
+#include
+
+#include "commonDef.h"
+#include "platform_types.h"
+#include "platform_constants.h"
+#include "PHY/impl_defs_lte.h"
+#include "s1ap_messages_types.h"
+#ifdef CMAKER
+#include "SystemInformationBlockType2.h"
+#else
+#include "RRC/LITE/MESSAGES/SystemInformationBlockType2.h"
+#endif
+
+#define IPV4_STR_ADDR_TO_INT_NWBO(AdDr_StR,NwBo,MeSsAgE ) do {\
+ struct in_addr inp;\
+ if ( inet_aton(AdDr_StR, &inp ) < 0 ) {\
+ AssertFatal (0, MeSsAgE);\
+ } else {\
+ NwBo = inp.s_addr;\
+ }\
+ } while (0);
+
+/** @defgroup _enb_app ENB APP
+ * @ingroup _oai2
+ * @{
+ */
+
+// Hard to find a defined value for max enb...
+#define EPC_TEST_SCENARIO_MAX_ENB 4
+
+
+typedef struct mme_ip_address_s {
+ unsigned ipv4:1;
+ unsigned ipv6:1;
+ unsigned active:1;
+ char *ipv4_address;
+ char *ipv6_address;
+} mme_ip_address_t;
+
+typedef struct Enb_properties_s {
+ /* Unique eNB_id to identify the eNB within EPC.
+ * For macro eNB ids this field should be 20 bits long.
+ * For home eNB ids this field should be 28 bits long.
+ */
+ uint32_t eNB_id;
+
+ /* The type of the cell */
+ enum cell_type_e cell_type;
+
+ /* Optional name for the cell
+ * NOTE: the name can be NULL (i.e no name) and will be cropped to 150
+ * characters.
+ */
+ char *eNB_name;
+
+ /* Tracking area code */
+ uint16_t tac;
+
+ /* Mobile Country Code
+ * Mobile Network Code
+ */
+ uint16_t mcc;
+ uint16_t mnc;
+ uint8_t mnc_digit_length;
+
+ /* Nb of MME to connect to */
+ uint8_t nb_mme;
+ /* List of MME to connect to */
+ mme_ip_address_t mme_ip_address[S1AP_MAX_NB_MME_IP_ADDRESS];
+
+ int sctp_in_streams;
+ int sctp_out_streams;
+
+ char *enb_interface_name_for_S1U;
+ in_addr_t enb_ipv4_address_for_S1U;
+ tcp_udp_port_t enb_port_for_S1U;
+
+ char *enb_interface_name_for_S1_MME;
+ in_addr_t enb_ipv4_address_for_S1_MME;
+
+} Enb_properties_t;
+
+typedef struct Enb_properties_array_s {
+ int number;
+ Enb_properties_t *properties[EPC_TEST_SCENARIO_MAX_ENB];
+} Enb_properties_array_t;
+
+void enb_config_init(const char const * lib_config_file_name_pP);
+
+#endif /* ENB_CONFIG_H_ */
+/** @} */
diff --git a/openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml b/openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml
deleted file mode 100755
index b0a77e60f5..0000000000
--- a/openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-import sys
-import subprocess
-import re
-import socket
-import datetime
-from datetime import date
-import os, errno
-import argparse
-import tempfile
-from lxml import etree
-from xml.dom.minidom import parse, parseString
-
-#####################
-# program arguments
-#####################
-parser = argparse.ArgumentParser()
-parser.add_argument("--pcap_file", "-p", type=str,help="input pcap file to be translated")
-args = parser.parse_args()
-
-#####################
-# get xml document from pcap
-#####################
-orig_pcap_file_name = args.pcap_file.strip()
-orig_pdml_string = subprocess.check_output(["tshark", '-T', 'pdml', '-r', orig_pcap_file_name])
-
-orig_dom = parseString(orig_pdml_string)
-
-#####################
-# filtering unwanted packets
-#####################
-#cases = orig_etree.findall(".//proto[@name='sctp']")
-packets = orig_dom.getElementsByTagName("packet")
-for packet in packets:
- found_sctp = False
- found_s1ap = False
- protos = packet.getElementsByTagName("proto")
- for proto in protos:
- attrs = proto.attributes
- urlnode = attrs['name']
- if urlnode.nodeValue == 'sctp':
- found_sctp = True
- elif urlnode.nodeValue == 's1ap':
- found_s1ap = True
- elif urlnode.nodeValue == 'geninfo':
- packet.removeChild(proto)
- elif urlnode.nodeValue == 'eth':
- packet.removeChild(proto)
- if found_sctp == False:
- # hopefully it seems to work (remove iterated packet)
- packet.parentNode.removeChild(packet)
-
-#####################
-# dom to xml string
-#####################
-filtered_pdml_string = orig_dom.toxml()
-cleaned_pdml_string = ""
-#####################
-# remove blank lines in xml string
-#####################
-lines = filtered_pdml_string.splitlines()
-for line in lines:
- if line[:-1]:
- cleaned_pdml_string += line + '\r\n'
-#print "'%s'" % cleaned_pdml_string
-#####################
-# write pdml string to pdml file
-#####################
-out_pdml_file_name = os.path.dirname(orig_pcap_file_name) + os.path.splitext(os.path.basename(orig_pcap_file_name))[0] + '.pdml'
-out_file = open(out_pdml_file_name, "w")
-out_file.write(cleaned_pdml_string)
-out_file.close()
-
-############################################################
-# DECEIVING HTML BONUS: DO NOT SEEM TO WORK CORRECTLY IN FIREFOX
-# DID NOT INVESTIGATE
-#####################
-# write xml string to html file
-#####################
-xsl_root = etree.fromstring(open('/usr/share/wireshark/pdml2html.xsl').read())
-transform = etree.XSLT(xsl_root)
-xml_root = etree.fromstring(cleaned_pdml_string)
-trans_root = transform(xml_root)
-filtered_html_string = etree.tostring(trans_root)
-#####################
-# write html string to html file
-#####################
-out_html_file_name = os.path.dirname(orig_pcap_file_name) + os.path.splitext(os.path.basename(orig_pcap_file_name))[0] + '.html'
-out_file = open(out_html_file_name, "w")
-out_file.write(filtered_html_string)
-out_file.close()
diff --git a/openair3/TEST/EPC_TEST/play_scenario.c b/openair3/TEST/EPC_TEST/play_scenario.c
new file mode 100644
index 0000000000..b2207d39d7
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/play_scenario.c
@@ -0,0 +1,1250 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+
+/*
+ play_scenario.c
+ -------------------
+ AUTHOR : Lionel GAUTHIER
+ COMPANY : EURECOM
+ EMAIL : Lionel.Gauthier@eurecom.fr
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+#include "intertask_interface_init.h"
+#include "timer.h"
+#include "assertions.h"
+#include "s1ap_common.h"
+#include "intertask_interface.h"
+#include "play_scenario.h"
+#include "sctp_eNB_task.h"
+#include "sctp_default_values.h"
+#include "log.h"
+//------------------------------------------------------------------------------
+#define PLAY_SCENARIO 1
+#define GS_IS_FILE 1
+#define GS_IS_DIR 2
+//------------------------------------------------------------------------------
+Enb_properties_array_t g_enb_properties;
+int g_max_speed = 0;
+//------------------------------------------------------------------------------
+extern et_scenario_t *g_scenario;
+extern int xmlLoadExtDtdDefaultValue;
+extern int asn_debug;
+extern int asn1_xer_print;
+extern pthread_mutex_t g_fsm_lock;
+
+//------------------------------------------------------------------------------
+// MEMO:
+// Scenario with several eNBs: We may have to create ethx.y interfaces
+//
+
+
+
+//------------------------------------------------------------------------------
+// test if file exist in current directory
+int is_file_exists( const char const * file_nameP, const char const *file_roleP)
+{
+ struct stat s;
+ int err = stat(file_nameP, &s);
+ if(-1 == err) {
+ if(ENOENT == errno) {
+ fprintf(stderr, "Please provide a valid %s, %s does not exist\n", file_roleP, file_nameP);
+ } else {
+ perror("stat");
+ exit(1);
+ }
+ } else {
+ if(S_ISREG(s.st_mode)) {
+ return GS_IS_FILE;
+ } else if(S_ISDIR(s.st_mode)) {
+ return GS_IS_DIR;
+ } else {
+ fprintf(stderr, "Please provide a valid test %s, %s exists but is not found valid\n", file_roleP, file_nameP);
+ }
+ }
+ return 0;
+}
+
+
+//------------------------------------------------------------------------------
+int et_strip_extension(char *in_filename)
+{
+ static const uint8_t name_min_len = 1;
+ static const uint8_t max_ext_len = 5; // .pdml !
+ fprintf(stdout, "strip_extension %s\n", in_filename);
+
+ if (NULL != in_filename) {
+ /* Check chars starting at end of string to find last '.' */
+ for (ssize_t i = strlen(in_filename); i > name_min_len; i--) {
+ if (in_filename[i] == '.') {
+ in_filename[i] = '\0';
+ return i;
+ }
+ }
+ }
+ return -1;
+}
+//------------------------------------------------------------------------------
+// return number of splitted items
+void et_get_shift_arg( char * line_argument, shift_packet_t * const shift)
+{
+ int len = strlen(line_argument);
+ int i = 0;
+ int j = 0;
+ int num_milli = 0;
+ char my_num[64];
+ int negative = 0;
+
+
+ while ((line_argument[i] != ':') && (i < len)) {
+ if (isdigit(line_argument[i])) { // may occur '\"'
+ my_num[j++] = line_argument[i];
+ }
+ i += 1;
+ }
+ AssertFatal(':' == line_argument[i], "Bad format");
+ i += 1; // ':'
+ my_num[j++] = '\0';
+ shift->frame_number = atoi(my_num);
+ AssertFatal(ishift_seconds = atoi(my_num);
+ // may omit .mmm, accept .m or .mm or .mmm or ...
+ while ((i < len) && (num_milli++ < 3)){
+ my_num[j++] = line_argument[i++];
+ }
+ while (num_milli++ < 6){
+ my_num[j++] = '0';
+ }
+ my_num[j] = '\0';
+ shift->shift_microseconds = atoi(my_num);
+ if (negative == 1) {
+ shift->shift_seconds = - shift->shift_seconds;
+ shift->shift_microseconds = - shift->shift_microseconds;
+ }
+}
+//------------------------------------------------------------------------------
+// return number of splitted items
+int split_path( char * pathP, char *** resP)
+{
+ char * saveptr1;
+ char * p = strtok_r (pathP, "/", &saveptr1);
+ int n_spaces = 0;
+
+ /// split string and append tokens to 'res'
+ while (p) {
+ *resP = realloc (*resP, sizeof (char*) * ++n_spaces);
+ AssertFatal (*resP, "realloc failed");
+ (*resP)[n_spaces-1] = p;
+ p = strtok_r (NULL, "/", &saveptr1);
+ }
+ return n_spaces;
+}
+//------------------------------------------------------------------------------
+void et_free_packet(et_packet_t* packet)
+{
+ if (packet) {
+ switch (packet->sctp_hdr.chunk_type) {
+ case SCTP_CID_DATA:
+ et_free_pointer(packet->sctp_hdr.u.data_hdr.payload.binary_stream);
+ break;
+ default:
+ ;
+ }
+ et_free_pointer(packet);
+ }
+}
+
+//------------------------------------------------------------------------------
+void et_free_scenario(et_scenario_t* scenario)
+{
+ et_packet_t *packet = NULL;
+ et_packet_t *next_packet = NULL;
+ if (scenario) {
+ packet = scenario->list_packet;
+ while (packet) {
+ next_packet = packet->next;
+ et_free_packet(packet);
+ packet = next_packet->next;
+ }
+ et_free_pointer(scenario);
+ pthread_mutex_destroy(&g_fsm_lock);
+ }
+}
+
+//------------------------------------------------------------------------------
+char * et_ip2ip_str(const et_ip_t * const ip)
+{
+ static char str[INET6_ADDRSTRLEN];
+
+ sprintf(str, "ERROR");
+ switch (ip->address_family) {
+ case AF_INET6:
+ inet_ntop(AF_INET6, &(ip->address.ipv6), str, INET6_ADDRSTRLEN);
+ break;
+ case AF_INET:
+ inet_ntop(AF_INET, &(ip->address.ipv4), str, INET_ADDRSTRLEN);
+ break;
+ default:
+ ;
+ }
+ return str;
+}
+//------------------------------------------------------------------------------
+//convert hexstring to len bytes of data
+//returns 0 on success, negative on error
+//data is a buffer of at least len bytes
+//hexstring is upper or lower case hexadecimal, NOT prepended with "0x"
+int et_hex2data(unsigned char * const data, const unsigned char * const hexstring, const unsigned int len)
+{
+ unsigned const char *pos = hexstring;
+ char *endptr = NULL;
+ size_t count = 0;
+
+ fprintf(stdout, "%s(%s,%d)\n", __FUNCTION__, hexstring, len);
+
+ if ((len > 1) && (strlen((const char*)hexstring) % 2)) {
+ //or hexstring has an odd length
+ return -3;
+ }
+
+ if (len == 1) {
+ char buf[5] = {'0', 'x', 0, pos[0], '\0'};
+ data[0] = strtol(buf, &endptr, 16);
+ /* Check for various possible errors */
+ AssertFatal ((errno == 0) || (data[0] != 0), "ERROR %s() strtol: %s\n", __FUNCTION__, strerror(errno));
+ AssertFatal (endptr != buf, "ERROR %s() No digits were found\n", __FUNCTION__);
+ return 0;
+ }
+
+ for(count = 0; count < len/2; count++) {
+ char buf[5] = {'0', 'x', pos[0], pos[1], 0};
+ data[count] = strtol(buf, &endptr, 16);
+ pos += 2 * sizeof(char);
+ AssertFatal (endptr[0] == '\0', "ERROR %s() non-hexadecimal character encountered buf %p endptr %p buf %s count %zu pos %p\n", __FUNCTION__, buf, endptr, buf, count, pos);
+ AssertFatal (endptr != buf, "ERROR %s() No digits were found\n", __FUNCTION__);
+ }
+ return 0;
+}
+//------------------------------------------------------------------------------
+sctp_cid_t et_chunk_type_str2cid(const xmlChar * const chunk_type_str)
+{
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"DATA"))) { return SCTP_CID_DATA;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"INIT"))) { return SCTP_CID_INIT;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"INIT_ACK"))) { return SCTP_CID_INIT_ACK;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"SACK"))) { return SCTP_CID_SACK;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"HEARTBEAT"))) { return SCTP_CID_HEARTBEAT;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"HEARTBEAT_ACK"))) { return SCTP_CID_HEARTBEAT_ACK;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"ABORT"))) { return SCTP_CID_ABORT;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"SHUTDOWN"))) { return SCTP_CID_SHUTDOWN;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"SHUTDOWN_ACK"))) { return SCTP_CID_SHUTDOWN_ACK;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"ERROR"))) { return SCTP_CID_ERROR;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"COOKIE_ECHO"))) { return SCTP_CID_COOKIE_ECHO;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"COOKIE_ACK"))) { return SCTP_CID_COOKIE_ACK;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"ECN_ECNE"))) { return SCTP_CID_ECN_ECNE;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"ECN_CWR"))) { return SCTP_CID_ECN_CWR;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"SHUTDOWN_COMPLETE"))) { return SCTP_CID_SHUTDOWN_COMPLETE;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"AUTH"))) { return SCTP_CID_AUTH;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"FWD_TSN"))) { return SCTP_CID_FWD_TSN;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"ASCONF"))) { return SCTP_CID_ASCONF;}
+ if ((!xmlStrcmp(chunk_type_str, (const xmlChar *)"ASCONF_ACK"))) { return SCTP_CID_ASCONF_ACK;}
+ AssertFatal (0, "ERROR: %s() cannot convert: %s\n", __FUNCTION__, chunk_type_str);
+}
+//------------------------------------------------------------------------------
+const char * const et_chunk_type_cid2str(const sctp_cid_t chunk_type)
+{
+ switch (chunk_type) {
+ case SCTP_CID_DATA: return "DATA"; break;
+ case SCTP_CID_INIT: return "INIT"; break;
+ case SCTP_CID_INIT_ACK: return "INIT_ACK"; break;
+ case SCTP_CID_SACK: return "SACK"; break;
+ case SCTP_CID_HEARTBEAT: return "HEARTBEAT"; break;
+ case SCTP_CID_HEARTBEAT_ACK: return "HEARTBEAT_ACK"; break;
+ case SCTP_CID_ABORT: return "ABORT"; break;
+ case SCTP_CID_SHUTDOWN: return "SHUTDOWN"; break;
+ case SCTP_CID_SHUTDOWN_ACK: return "SHUTDOWN_ACK"; break;
+ case SCTP_CID_ERROR: return "ERROR"; break;
+ case SCTP_CID_COOKIE_ECHO: return "COOKIE_ECHO"; break;
+ case SCTP_CID_COOKIE_ACK: return "COOKIE_ACK"; break;
+ case SCTP_CID_ECN_ECNE: return "ECN_ECNE"; break;
+ case SCTP_CID_ECN_CWR: return "ECN_CWR"; break;
+ case SCTP_CID_SHUTDOWN_COMPLETE: return "SHUTDOWN_COMPLETE"; break;
+ case SCTP_CID_AUTH: return "AUTH"; break;
+ case SCTP_CID_FWD_TSN: return "FWD_TSN"; break;
+ case SCTP_CID_ASCONF: return "ASCONF"; break;
+ case SCTP_CID_ASCONF_ACK: return "ASCONF_ACK"; break;
+ default:
+ AssertFatal (0, "ERROR: Unknown chunk_type %d!\n", chunk_type);
+ }
+}
+//------------------------------------------------------------------------------
+const char * const et_error_match2str(const int err)
+{
+ switch (err) {
+ // from asn_compare.h
+ case COMPARE_ERR_CODE_NO_MATCH: return "CODE_NO_MATCH"; break;
+ case COMPARE_ERR_CODE_TYPE_MISMATCH: return "TYPE_MISMATCH"; break;
+ case COMPARE_ERR_CODE_TYPE_ARG_NULL: return "TYPE_ARG_NULL"; break;
+ case COMPARE_ERR_CODE_VALUE_NULL: return "VALUE_NULL"; break;
+ case COMPARE_ERR_CODE_VALUE_ARG_NULL: return "VALUE_ARG_NULL"; break;
+ case COMPARE_ERR_CODE_CHOICE_NUM: return "CHOICE_NUM"; break;
+ case COMPARE_ERR_CODE_CHOICE_PRESENT: return "CHOICE_PRESENT"; break;
+ case COMPARE_ERR_CODE_CHOICE_MALFORMED: return "CHOICE_MALFORMED"; break;
+ case COMPARE_ERR_CODE_SET_MALFORMED: return "SET_MALFORMED"; break;
+ case COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS: return "COLLECTION_NUM_ELEMENTS"; break;
+ // from play_scenario.h
+ case ET_ERROR_MATCH_PACKET_SCTP_CHUNK_TYPE: return "SCTP_CHUNK_TYPE"; break;
+ case ET_ERROR_MATCH_PACKET_SCTP_PPID: return "SCTP_PPID"; break;
+ case ET_ERROR_MATCH_PACKET_SCTP_ASSOC_ID: return "SCTP_ASSOC_ID"; break;
+ case ET_ERROR_MATCH_PACKET_SCTP_STREAM_ID: return "SCTP_STREAM_ID"; break;
+ case ET_ERROR_MATCH_PACKET_SCTP_SSN: return "SCTP_SSN"; break;
+ case ET_ERROR_MATCH_PACKET_S1AP_PRESENT: return "S1AP_PRESENT"; break;
+ case ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE: return "S1AP_PROCEDURE_CODE"; break;
+ case ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY: return "S1AP_CRITICALITY"; break;
+ default:
+ AssertFatal (0, "ERROR: Unknown match error %d!(TODO handle an1c error codes)\n", err);
+ }
+}
+//------------------------------------------------------------------------------
+et_packet_action_t et_action_str2et_action_t(const xmlChar * const action)
+{
+ if ((!xmlStrcmp(action, (const xmlChar *)"SEND"))) { return ET_PACKET_ACTION_S1C_SEND;}
+ if ((!xmlStrcmp(action, (const xmlChar *)"RECEIVE"))) { return ET_PACKET_ACTION_S1C_RECEIVE;}
+ AssertFatal (0, "ERROR: cannot convert: %s\n", action);
+ //if (NULL == action) {return ACTION_S1C_NULL;}
+}
+//------------------------------------------------------------------------------
+void et_ip_str2et_ip(const xmlChar * const ip_str, et_ip_t * const ip)
+{
+ AssertFatal (NULL != ip_str, "ERROR Cannot convert null string to ip address!\n");
+ AssertFatal (NULL != ip, "ERROR out parameter pointer is NULL!\n");
+ // store this IP address in sa:
+ if (inet_pton(AF_INET, (const char*)ip_str, (void*)&(ip->address.ipv4)) > 0) {
+ ip->address_family = AF_INET;
+ strncpy((char *)ip->str, (const char *)ip_str, INET_ADDRSTRLEN+1);
+ } else if (inet_pton(AF_INET6, (const char*)ip_str, (void*)&(ip->address.ipv6)) > 0) {
+ ip->address_family = AF_INET6;
+ strncpy((char *)ip->str, (const char *)ip_str, INET6_ADDRSTRLEN+1);
+ } else {
+ ip->address_family = AF_UNSPEC;
+ AssertFatal (0, "ERROR %s() Could not parse ip address %s!\n", __FUNCTION__, ip_str);
+ }
+}
+//------------------------------------------------------------------------------
+int et_compare_et_ip_to_net_ip_address(const et_ip_t * const ip, const net_ip_address_t * const net_ip)
+{
+ AssertFatal (NULL != ip, "ERROR ip parameter\n");
+ AssertFatal (NULL != net_ip, "ERROR net_ip parameter\n");
+ switch (ip->address_family) {
+ case AF_INET:
+ if (net_ip->ipv4) {
+ //S1AP_DEBUG("%s(%s,%s)=%d\n",__FUNCTION__,ip->str, net_ip->ipv4_address, strcmp(ip->str, net_ip->ipv4_address));
+ return strcmp(ip->str, net_ip->ipv4_address);
+ }
+ //S1AP_DEBUG("%s(%s,%s)=-1 (IP version (4) not matching)\n",__FUNCTION__,ip->str, net_ip->ipv4_address);
+ return -1;
+ break;
+ case AF_INET6:
+ if (net_ip->ipv6) {
+ //S1AP_DEBUG("%s(%s,%s)=%d\n",__FUNCTION__,ip->str, net_ip->ipv4_address, strcmp(ip->str, net_ip->ipv6_address));
+ return strcmp(ip->str, net_ip->ipv6_address);
+ }
+ //S1AP_DEBUG("%s(%s,%s)=-1 (IP version (6) not matching)\n",__FUNCTION__,ip->str, net_ip->ipv6_address);
+ return -1;
+ break;
+ default:
+ S1AP_DEBUG("%s(%s,...)=-1 (unknown IP version)\n",__FUNCTION__,ip->str);
+ return -1;
+ }
+}
+
+#ifdef LIBCONFIG_LONG
+#define libconfig_int long
+#else
+#define libconfig_int int
+#endif
+//------------------------------------------------------------------------------
+void et_enb_config_init(const char const * lib_config_file_name_pP)
+//------------------------------------------------------------------------------
+{
+ config_t cfg;
+ config_setting_t *setting = NULL;
+ config_setting_t *subsetting = NULL;
+ config_setting_t *setting_mme_addresses = NULL;
+ config_setting_t *setting_mme_address = NULL;
+ config_setting_t *setting_enb = NULL;
+ libconfig_int my_int;
+ int num_enb_properties = 0;
+ int enb_properties_index = 0;
+ int num_enbs = 0;
+ int num_mme_address = 0;
+ int i = 0;
+ int j = 0;
+ int parse_errors = 0;
+ libconfig_int enb_id = 0;
+ const char* cell_type = NULL;
+ const char* tac = 0;
+ const char* enb_name = NULL;
+ const char* mcc = 0;
+ const char* mnc = 0;
+ char* ipv4 = NULL;
+ char* ipv6 = NULL;
+ char* active = NULL;
+ char* preference = NULL;
+ const char* active_enb[MAX_ENB];
+ char* enb_interface_name_for_S1U = NULL;
+ char* enb_ipv4_address_for_S1U = NULL;
+ libconfig_int enb_port_for_S1U = 0;
+ char* enb_interface_name_for_S1_MME = NULL;
+ char* enb_ipv4_address_for_S1_MME = NULL;
+ char *address = NULL;
+ char *cidr = NULL;
+
+
+ AssertFatal (lib_config_file_name_pP != NULL,
+ "Bad parameter lib_config_file_name_pP %s , must reference a valid eNB config file\n",
+ lib_config_file_name_pP);
+
+ memset((char*)active_enb, 0 , MAX_ENB * sizeof(char*));
+
+ config_init(&cfg);
+
+ /* Read the file. If there is an error, report it and exit. */
+ if (! config_read_file(&cfg, lib_config_file_name_pP)) {
+ config_destroy(&cfg);
+ AssertFatal (0, "Failed to parse eNB configuration file %s!\n", lib_config_file_name_pP);
+ }
+
+ // Get list of active eNBs, (only these will be configured)
+ setting = config_lookup(&cfg, ENB_CONFIG_STRING_ACTIVE_ENBS);
+
+ if (setting != NULL) {
+ num_enbs = config_setting_length(setting);
+
+ for (i = 0; i < num_enbs; i++) {
+ setting_enb = config_setting_get_elem(setting, i);
+ active_enb[i] = config_setting_get_string (setting_enb);
+ AssertFatal (active_enb[i] != NULL,
+ "Failed to parse config file %s, %uth attribute %s \n",
+ lib_config_file_name_pP, i, ENB_CONFIG_STRING_ACTIVE_ENBS);
+ active_enb[i] = strdup(active_enb[i]);
+ num_enb_properties += 1;
+ }
+ }
+
+ /* Output a list of all eNBs. */
+ setting = config_lookup(&cfg, ENB_CONFIG_STRING_ENB_LIST);
+
+ if (setting != NULL) {
+ enb_properties_index = g_enb_properties.number;
+ parse_errors = 0;
+ num_enbs = config_setting_length(setting);
+
+ for (i = 0; i < num_enbs; i++) {
+ setting_enb = config_setting_get_elem(setting, i);
+
+ if (! config_setting_lookup_int(setting_enb, ENB_CONFIG_STRING_ENB_ID, &enb_id)) {
+ /* Calculate a default eNB ID */
+# if defined(ENABLE_USE_MME)
+ uint32_t hash;
+
+ hash = et_s1ap_generate_eNB_id ();
+ enb_id = i + (hash & 0xFFFF8);
+# else
+ enb_id = i;
+# endif
+ }
+
+ if ( !( config_setting_lookup_string(setting_enb, ENB_CONFIG_STRING_CELL_TYPE, &cell_type)
+ && config_setting_lookup_string(setting_enb, ENB_CONFIG_STRING_ENB_NAME, &enb_name)
+ && config_setting_lookup_string(setting_enb, ENB_CONFIG_STRING_TRACKING_AREA_CODE, &tac)
+ && config_setting_lookup_string(setting_enb, ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE, &mcc)
+ && config_setting_lookup_string(setting_enb, ENB_CONFIG_STRING_MOBILE_NETWORK_CODE, &mnc)
+
+
+ )
+ ) {
+ AssertError (0, parse_errors ++,
+ "Failed to parse eNB configuration file %s, %u th enb\n",
+ lib_config_file_name_pP, i);
+ continue; // FIXME this prevents segfaults below, not sure what happens after function exit
+ }
+
+ // search if in active list
+ for (j=0; j < num_enb_properties; j++) {
+ if (strcmp(active_enb[j], enb_name) == 0) {
+ g_enb_properties.properties[enb_properties_index] = calloc(1, sizeof(Enb_properties_t));
+
+ g_enb_properties.properties[enb_properties_index]->eNB_id = enb_id;
+
+ if (strcmp(cell_type, "CELL_MACRO_ENB") == 0) {
+ g_enb_properties.properties[enb_properties_index]->cell_type = CELL_MACRO_ENB;
+ } else if (strcmp(cell_type, "CELL_HOME_ENB") == 0) {
+ g_enb_properties.properties[enb_properties_index]->cell_type = CELL_HOME_ENB;
+ } else {
+ AssertError (0, parse_errors ++,
+ "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for cell_type choice: CELL_MACRO_ENB or CELL_HOME_ENB !\n",
+ lib_config_file_name_pP, i, cell_type);
+ }
+
+ g_enb_properties.properties[enb_properties_index]->eNB_name = strdup(enb_name);
+ g_enb_properties.properties[enb_properties_index]->tac = (uint16_t)atoi(tac);
+ g_enb_properties.properties[enb_properties_index]->mcc = (uint16_t)atoi(mcc);
+ g_enb_properties.properties[enb_properties_index]->mnc = (uint16_t)atoi(mnc);
+ g_enb_properties.properties[enb_properties_index]->mnc_digit_length = strlen(mnc);
+ AssertFatal((g_enb_properties.properties[enb_properties_index]->mnc_digit_length == 2) ||
+ (g_enb_properties.properties[enb_properties_index]->mnc_digit_length == 3),
+ "BAD MNC DIGIT LENGTH %d",
+ g_enb_properties.properties[i]->mnc_digit_length);
+
+
+ setting_mme_addresses = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_MME_IP_ADDRESS);
+ num_mme_address = config_setting_length(setting_mme_addresses);
+ g_enb_properties.properties[enb_properties_index]->nb_mme = 0;
+
+ for (j = 0; j < num_mme_address; j++) {
+ setting_mme_address = config_setting_get_elem(setting_mme_addresses, j);
+
+ if ( !(
+ config_setting_lookup_string(setting_mme_address, ENB_CONFIG_STRING_MME_IPV4_ADDRESS, (const char **)&ipv4)
+ && config_setting_lookup_string(setting_mme_address, ENB_CONFIG_STRING_MME_IPV6_ADDRESS, (const char **)&ipv6)
+ && config_setting_lookup_string(setting_mme_address, ENB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE, (const char **)&active)
+ && config_setting_lookup_string(setting_mme_address, ENB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE, (const char **)&preference)
+ )
+ ) {
+ AssertError (0, parse_errors ++,
+ "Failed to parse eNB configuration file %s, %u th enb %u th mme address !\n",
+ lib_config_file_name_pP, i, j);
+ continue; // FIXME will prevent segfaults below, not sure what happens at function exit...
+ }
+
+ g_enb_properties.properties[enb_properties_index]->nb_mme += 1;
+
+ g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv4_address = strdup(ipv4);
+ g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv6_address = strdup(ipv6);
+
+ if (strcmp(active, "yes") == 0) {
+ g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].active = 1;
+ } // else { (calloc)
+
+ if (strcmp(preference, "ipv4") == 0) {
+ g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv4 = 1;
+ } else if (strcmp(preference, "ipv6") == 0) {
+ g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv6 = 1;
+ } else if (strcmp(preference, "no") == 0) {
+ g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv4 = 1;
+ g_enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv6 = 1;
+ }
+ }
+ // SCTP SETTING
+ g_enb_properties.properties[enb_properties_index]->sctp_out_streams = SCTP_OUT_STREAMS;
+ g_enb_properties.properties[enb_properties_index]->sctp_in_streams = SCTP_IN_STREAMS;
+ subsetting = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_SCTP_CONFIG);
+
+ if (subsetting != NULL) {
+ if ( (config_setting_lookup_int( subsetting, ENB_CONFIG_STRING_SCTP_INSTREAMS, &my_int) )) {
+ g_enb_properties.properties[enb_properties_index]->sctp_in_streams = (uint16_t)my_int;
+ }
+
+ if ( (config_setting_lookup_int( subsetting, ENB_CONFIG_STRING_SCTP_OUTSTREAMS, &my_int) )) {
+ g_enb_properties.properties[enb_properties_index]->sctp_out_streams = (uint16_t)my_int;
+ }
+ }
+
+
+ // NETWORK_INTERFACES
+ subsetting = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG);
+
+ if (subsetting != NULL) {
+ if ( (
+ config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1_MME,
+ (const char **)&enb_interface_name_for_S1_MME)
+ && config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_ENB_IPV4_ADDRESS_FOR_S1_MME,
+ (const char **)&enb_ipv4_address_for_S1_MME)
+ && config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1U,
+ (const char **)&enb_interface_name_for_S1U)
+ && config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U,
+ (const char **)&enb_ipv4_address_for_S1U)
+ && config_setting_lookup_int(subsetting, ENB_CONFIG_STRING_ENB_PORT_FOR_S1U,
+ &enb_port_for_S1U)
+ )
+ ) {
+ g_enb_properties.properties[enb_properties_index]->enb_interface_name_for_S1U = strdup(enb_interface_name_for_S1U);
+ cidr = enb_ipv4_address_for_S1U;
+ address = strtok(cidr, "/");
+
+ if (address) {
+ IPV4_STR_ADDR_TO_INT_NWBO ( address, g_enb_properties.properties[enb_properties_index]->enb_ipv4_address_for_S1U, "BAD IP ADDRESS FORMAT FOR eNB S1_U !\n" );
+ }
+
+ g_enb_properties.properties[enb_properties_index]->enb_port_for_S1U = enb_port_for_S1U;
+
+ g_enb_properties.properties[enb_properties_index]->enb_interface_name_for_S1_MME = strdup(enb_interface_name_for_S1_MME);
+ cidr = enb_ipv4_address_for_S1_MME;
+ address = strtok(cidr, "/");
+
+ if (address) {
+ IPV4_STR_ADDR_TO_INT_NWBO ( address, g_enb_properties.properties[enb_properties_index]->enb_ipv4_address_for_S1_MME, "BAD IP ADDRESS FORMAT FOR eNB S1_MME !\n" );
+ }
+ }
+ } // if (subsetting != NULL) {
+ enb_properties_index += 1;
+ } // if (strcmp(active_enb[j], enb_name) == 0)
+ } // for (j=0; j < num_enb_properties; j++)
+ } // for (i = 0; i < num_enbs; i++)
+ } // if (setting != NULL) {
+
+ g_enb_properties.number += num_enb_properties;
+
+
+ AssertFatal (parse_errors == 0,
+ "Failed to parse eNB configuration file %s, found %d error%s !\n",
+ lib_config_file_name_pP, parse_errors, parse_errors > 1 ? "s" : "");
+}
+/*------------------------------------------------------------------------------*/
+const Enb_properties_array_t *et_enb_config_get(void)
+{
+ return &g_enb_properties;
+}
+/*------------------------------------------------------------------------------*/
+void et_eNB_app_register(const Enb_properties_array_t *enb_properties)
+{
+ uint32_t enb_id = 0;
+ uint32_t mme_id = 0;
+ MessageDef *msg_p = NULL;
+ char *str = NULL;
+ struct in_addr addr = {.s_addr = 0};
+
+
+ g_scenario->register_enb_pending = 0;
+ for (enb_id = 0; (enb_id < enb_properties->number) ; enb_id++) {
+ {
+ s1ap_register_enb_req_t *s1ap_register_eNB = NULL;
+
+ /* note: there is an implicit relationship between the data structure and the message name */
+ msg_p = itti_alloc_new_message (TASK_ENB_APP, S1AP_REGISTER_ENB_REQ);
+
+ s1ap_register_eNB = &S1AP_REGISTER_ENB_REQ(msg_p);
+
+ /* Some default/random parameters */
+ s1ap_register_eNB->eNB_id = enb_properties->properties[enb_id]->eNB_id;
+ s1ap_register_eNB->cell_type = enb_properties->properties[enb_id]->cell_type;
+ s1ap_register_eNB->eNB_name = enb_properties->properties[enb_id]->eNB_name;
+ s1ap_register_eNB->tac = enb_properties->properties[enb_id]->tac;
+ s1ap_register_eNB->mcc = enb_properties->properties[enb_id]->mcc;
+ s1ap_register_eNB->mnc = enb_properties->properties[enb_id]->mnc;
+ s1ap_register_eNB->mnc_digit_length = enb_properties->properties[enb_id]->mnc_digit_length;
+
+ s1ap_register_eNB->nb_mme = enb_properties->properties[enb_id]->nb_mme;
+ AssertFatal (s1ap_register_eNB->nb_mme <= S1AP_MAX_NB_MME_IP_ADDRESS, "Too many MME for eNB %d (%d/%d)!", enb_id, s1ap_register_eNB->nb_mme,
+ S1AP_MAX_NB_MME_IP_ADDRESS);
+
+ for (mme_id = 0; mme_id < s1ap_register_eNB->nb_mme; mme_id++) {
+ s1ap_register_eNB->mme_ip_address[mme_id].ipv4 = enb_properties->properties[enb_id]->mme_ip_address[mme_id].ipv4;
+ s1ap_register_eNB->mme_ip_address[mme_id].ipv6 = enb_properties->properties[enb_id]->mme_ip_address[mme_id].ipv6;
+ strncpy (s1ap_register_eNB->mme_ip_address[mme_id].ipv4_address,
+ enb_properties->properties[enb_id]->mme_ip_address[mme_id].ipv4_address,
+ sizeof(s1ap_register_eNB->mme_ip_address[0].ipv4_address));
+ strncpy (s1ap_register_eNB->mme_ip_address[mme_id].ipv6_address,
+ enb_properties->properties[enb_id]->mme_ip_address[mme_id].ipv6_address,
+ sizeof(s1ap_register_eNB->mme_ip_address[0].ipv6_address));
+ }
+
+ s1ap_register_eNB->sctp_in_streams = enb_properties->properties[enb_id]->sctp_in_streams;
+ s1ap_register_eNB->sctp_out_streams = enb_properties->properties[enb_id]->sctp_out_streams;
+
+
+ s1ap_register_eNB->enb_ip_address.ipv6 = 0;
+ s1ap_register_eNB->enb_ip_address.ipv4 = 1;
+ addr.s_addr = enb_properties->properties[enb_id]->enb_ipv4_address_for_S1_MME;
+ str = inet_ntoa(addr);
+ strcpy(s1ap_register_eNB->enb_ip_address.ipv4_address, str);
+
+ g_scenario->register_enb_pending++;
+ itti_send_msg_to_task (TASK_S1AP, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
+ }
+ }
+}
+/*------------------------------------------------------------------------------*/
+void *et_eNB_app_task(void *args_p)
+{
+ et_scenario_t *scenario = (et_scenario_t*)args_p;
+ MessageDef *msg_p = NULL;
+ const char *msg_name = NULL;
+ instance_t instance = 0;
+ int result = 0;
+
+ itti_mark_task_ready (TASK_ENB_APP);
+
+ do {
+ // Wait for a message
+ itti_receive_msg (TASK_ENB_APP, &msg_p);
+
+ msg_name = ITTI_MSG_NAME (msg_p);
+ instance = ITTI_MSG_INSTANCE (msg_p);
+
+ switch (ITTI_MSG_ID(msg_p)) {
+ case TERMINATE_MESSAGE:
+ itti_exit_task ();
+ break;
+
+ case S1AP_REGISTER_ENB_CNF:
+ LOG_I(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, msg_name,
+ S1AP_REGISTER_ENB_CNF(msg_p).nb_mme);
+
+ DevAssert(scenario->register_enb_pending > 0);
+ scenario->register_enb_pending--;
+
+ /* Check if at least eNB is registered with one MME */
+ if (S1AP_REGISTER_ENB_CNF(msg_p).nb_mme > 0) {
+ scenario->registered_enb++;
+ }
+
+ /* Check if all register eNB requests have been processed */
+ if (scenario->register_enb_pending == 0) {
+ timer_remove(scenario->enb_register_retry_timer_id);
+ if (scenario->registered_enb == scenario->enb_properties->number) {
+ /* If all eNB are registered, start scenario */
+ LOG_D(ENB_APP, " All eNB are now associated with a MME\n");
+ et_event_t event;
+ event.code = ET_EVENT_S1C_CONNECTED;
+ et_scenario_fsm_notify_event(event);
+ } else {
+ uint32_t not_associated = scenario->enb_properties->number - scenario->registered_enb;
+
+ LOG_W(ENB_APP, " %d eNB %s not associated with a MME, retrying registration in %d seconds ...\n",
+ not_associated, not_associated > 1 ? "are" : "is", ET_ENB_REGISTER_RETRY_DELAY);
+
+ /* Restart the eNB registration process in ENB_REGISTER_RETRY_DELAY seconds */
+ if (timer_setup (ET_ENB_REGISTER_RETRY_DELAY, 0, TASK_ENB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT,
+ NULL, &scenario->enb_register_retry_timer_id) < 0) {
+ LOG_E(ENB_APP, " Can not start eNB register retry timer, use \"sleep\" instead!\n");
+
+ sleep(ET_ENB_REGISTER_RETRY_DELAY);
+ /* Restart the registration process */
+ scenario->registered_enb = 0;
+ et_eNB_app_register (scenario->enb_properties);
+ }
+ }
+ }
+
+ break;
+
+ case S1AP_DEREGISTERED_ENB_IND:
+ LOG_W(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, msg_name,
+ S1AP_DEREGISTERED_ENB_IND(msg_p).nb_mme);
+
+ /* TODO handle recovering of registration */
+ break;
+
+ case TIMER_HAS_EXPIRED:
+ LOG_I(ENB_APP, " Received %s: timer_id %d\n", msg_name, TIMER_HAS_EXPIRED(msg_p).timer_id);
+
+ if (TIMER_HAS_EXPIRED (msg_p).timer_id == scenario->enb_register_retry_timer_id) {
+ /* Restart the registration process */
+ scenario->registered_enb = 0;
+ et_eNB_app_register (scenario->enb_properties);
+ }
+ break;
+
+ default:
+ LOG_E(ENB_APP, "Received unexpected message %s\n", msg_name);
+ break;
+ }
+
+ result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p);
+ AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
+ } while (1);
+ return NULL;
+}
+
+//------------------------------------------------------------------------------
+int et_play_scenario(et_scenario_t* const scenario, const struct shift_packet_s *shifts)
+{
+ et_event_t event;
+ struct shift_packet_s *shift = shifts;
+ et_packet_t *packet = NULL;
+ et_packet_t *next_packet = NULL;
+ struct timeval shift_all_packets = { .tv_sec = 0, .tv_usec = 0 };
+ struct timeval relative_last_sent_packet = { .tv_sec = 0, .tv_usec = 0 };
+ struct timeval relative_last_received_packet = { .tv_sec = 0, .tv_usec = 0 };
+ struct timeval initial_time = { .tv_sec = 0, .tv_usec = 0 };
+ char first_packet = 1;
+ char first_sent_packet = 1;
+ char first_received_packet = 1;
+
+ // first apply timing shifts if requested
+ while (shift) {
+ packet = scenario->list_packet;
+ while (packet) {
+ //fprintf(stdout, "*shift: %p\n", shift);
+ //fprintf(stdout, "\tframe_number: %d\n", shift->frame_number);
+ //fprintf(stdout, "\tshift_seconds: %ld\n", shift->shift_seconds);
+ //fprintf(stdout, "\tshift_microseconds: %ld\n", shift->shift_microseconds);
+ //fprintf(stdout, "\tsingle: %d\n\n", shift->single);
+ //fprintf(stdout, "\tshift_all_packets_seconds: %ld\n", shift_all_packets.tv_sec);
+ //fprintf(stdout, "\tshift_all_packets_microseconds: %ld\n", shift_all_packets.tv_usec);
+
+ AssertFatal((packet->time_relative_to_first_packet.tv_sec >= 0) && (packet->time_relative_to_first_packet.tv_usec >= 0),
+ "Bad timing result time_relative_to_first_packet=%d.%d packet num %u, original frame number %u",
+ packet->time_relative_to_first_packet.tv_sec,
+ packet->time_relative_to_first_packet.tv_usec,
+ packet->packet_number,
+ packet->original_frame_number);
+ AssertFatal((packet->time_relative_to_last_received_packet.tv_sec >= 0) && (packet->time_relative_to_last_received_packet.tv_usec >= 0),
+ "Bad timing result time_relative_to_last_received_packet=%d.%d packet num %u, original frame number %u",
+ packet->time_relative_to_last_received_packet.tv_sec,
+ packet->time_relative_to_last_received_packet.tv_usec,
+ packet->packet_number,
+ packet->original_frame_number);
+ AssertFatal((packet->time_relative_to_last_sent_packet.tv_sec >= 0) && (packet->time_relative_to_last_sent_packet.tv_usec >= 0),
+ "Bad timing result time_relative_to_last_sent_packet=%d.%d packet num %u, original frame number %u",
+ packet->time_relative_to_last_sent_packet.tv_sec,
+ packet->time_relative_to_last_sent_packet.tv_usec,
+ packet->packet_number,
+ packet->original_frame_number);
+// fprintf(stdout, "\tpacket num %u, original frame number %u time_relative_to_first_packet=%d.%d\n",
+// packet->packet_number,
+// packet->original_frame_number,
+// packet->time_relative_to_first_packet.tv_sec,
+// packet->time_relative_to_first_packet.tv_usec);
+// fprintf(stdout, "\tpacket num %u, original frame number %u time_relative_to_last_received_packet=%d.%d\n",
+// packet->packet_number,
+// packet->original_frame_number,
+// packet->time_relative_to_last_received_packet.tv_sec,
+// packet->time_relative_to_last_received_packet.tv_usec);
+// fprintf(stdout, "\tpacket num %u, original frame number %u time_relative_to_last_sent_packet=%d.%d\n",
+// packet->packet_number,
+// packet->original_frame_number,
+// packet->time_relative_to_last_sent_packet.tv_sec,
+// packet->time_relative_to_last_sent_packet.tv_usec);
+
+ if ((shift->single) && (shift->frame_number == packet->original_frame_number)) {
+ struct timeval t_offset = { .tv_sec = shift->shift_seconds, .tv_usec = shift->shift_microseconds };
+ et_packet_shift_timing(packet, &t_offset);
+ next_packet = packet->next;
+ if (next_packet) {
+ t_offset.tv_sec = -t_offset.tv_sec;
+ t_offset.tv_usec = -t_offset.tv_usec;
+
+ if (packet->action == ET_PACKET_ACTION_S1C_SEND) {
+ timeval_add(&next_packet->time_relative_to_last_sent_packet, &next_packet->time_relative_to_last_sent_packet, &t_offset);
+ } else if (packet->action == ET_PACKET_ACTION_S1C_RECEIVE) {
+ timeval_add(&next_packet->time_relative_to_last_received_packet, &next_packet->time_relative_to_last_received_packet, &t_offset);
+ }
+ }
+ }
+ if ((0 == shift->single) && (shift->frame_number == packet->original_frame_number)) {
+ shift_all_packets.tv_sec = shift->shift_seconds;
+ shift_all_packets.tv_usec = shift->shift_microseconds;
+ timeval_add(&packet->time_relative_to_first_packet, &packet->time_relative_to_first_packet, &shift_all_packets);
+ fprintf(stdout, "\tpacket num %u, now original frame number %u time_relative_to_first_packet=%d.%d\n",
+ packet->packet_number,
+ packet->original_frame_number,
+ packet->time_relative_to_first_packet.tv_sec,
+ packet->time_relative_to_first_packet.tv_usec);
+ AssertFatal((packet->time_relative_to_first_packet.tv_sec >= 0) && (packet->time_relative_to_first_packet.tv_usec >= 0),
+ "Bad timing result time_relative_to_first_packet=%d.%d packet num %u, original frame number %u",
+ packet->time_relative_to_first_packet.tv_sec,
+ packet->time_relative_to_first_packet.tv_usec,
+ packet->packet_number,
+ packet->original_frame_number);
+ } else if ((0 == shift->single) && (shift->frame_number < packet->original_frame_number)) {
+ timeval_add(&packet->time_relative_to_first_packet, &packet->time_relative_to_first_packet, &shift_all_packets);
+ fprintf(stdout, "\tpacket num %u, now original frame number %u time_relative_to_first_packet=%d.%d\n",
+ packet->packet_number,
+ packet->original_frame_number,
+ packet->time_relative_to_first_packet.tv_sec,
+ packet->time_relative_to_first_packet.tv_usec);
+ AssertFatal((packet->time_relative_to_first_packet.tv_sec >= 0) && (packet->time_relative_to_first_packet.tv_usec >= 0),
+ "Bad timing result time_relative_to_first_packet=%d.%d packet num %u, original frame number %u",
+ packet->time_relative_to_first_packet.tv_sec,
+ packet->time_relative_to_first_packet.tv_usec,
+ packet->packet_number,
+ packet->original_frame_number);
+ }
+ packet = packet->next;
+ }
+ shift = shift->next;
+ }
+ // now recompute time_relative_to_last_received_packet, time_relative_to_last_sent_packet
+ packet = scenario->list_packet;
+ while (packet) {
+ if (first_packet > 0) {
+ initial_time = packet->time_relative_to_first_packet;
+ packet->time_relative_to_first_packet.tv_sec = 0;
+ packet->time_relative_to_first_packet.tv_usec = 0;
+ first_packet = 0;
+ } else {
+ timersub(&packet->time_relative_to_first_packet, &initial_time,
+ &packet->time_relative_to_first_packet);
+ }
+ if (packet->action == ET_PACKET_ACTION_S1C_SEND) {
+ if (first_sent_packet > 0) {
+ relative_last_sent_packet = packet->time_relative_to_first_packet;
+ packet->time_relative_to_last_sent_packet.tv_sec = 0;
+ packet->time_relative_to_last_sent_packet.tv_usec = 0;
+ first_sent_packet = 0;
+ } else {
+ timersub(&packet->time_relative_to_first_packet, &relative_last_sent_packet,
+ &packet->time_relative_to_last_sent_packet);
+ relative_last_sent_packet = packet->time_relative_to_first_packet;
+ }
+ if (first_received_packet > 0) {
+ packet->time_relative_to_last_received_packet.tv_sec = 0;
+ packet->time_relative_to_last_received_packet.tv_usec = 0;
+ } else {
+ timersub(&packet->time_relative_to_first_packet, &relative_last_received_packet,
+ &packet->time_relative_to_last_received_packet);
+ }
+ } else if (packet->action == ET_PACKET_ACTION_S1C_RECEIVE) {
+ if (first_received_packet > 0) {
+ relative_last_received_packet.tv_sec = packet->time_relative_to_first_packet.tv_sec;
+ relative_last_received_packet.tv_usec = packet->time_relative_to_first_packet.tv_usec;
+ packet->time_relative_to_last_received_packet.tv_sec = 0;
+ packet->time_relative_to_last_received_packet.tv_usec = 0;
+ first_received_packet = 0;
+ } else {
+ timersub(&packet->time_relative_to_first_packet, &relative_last_received_packet,
+ &packet->time_relative_to_last_received_packet);
+ relative_last_received_packet = packet->time_relative_to_first_packet;
+ }
+ if (first_sent_packet > 0) {
+ packet->time_relative_to_last_sent_packet.tv_sec = 0;
+ packet->time_relative_to_last_sent_packet.tv_usec = 0;
+ } else {
+ timersub(&packet->time_relative_to_first_packet, &relative_last_sent_packet,
+ &packet->time_relative_to_last_sent_packet);
+ }
+ }
+ packet = packet->next;
+ }
+ //et_display_scenario(scenario);
+
+ // create SCTP ITTI task: same as eNB code
+ if (itti_create_task (TASK_SCTP, sctp_eNB_task, NULL) < 0) {
+ LOG_E(SCTP, "Create task for SCTP failed\n");
+ return -1;
+ }
+
+ // create S1AP ITTI task: not as same as eNB code
+ if (itti_create_task (TASK_S1AP, et_s1ap_eNB_task, NULL) < 0) {
+ LOG_E(S1AP, "Create task for S1AP failed\n");
+ return -1;
+ }
+
+ // create ENB_APP ITTI task: not as same as eNB code
+ if (itti_create_task (TASK_ENB_APP, et_eNB_app_task, scenario) < 0) {
+ LOG_E(ENB_APP, "Create task for ENB_APP failed\n");
+ return -1;
+ }
+
+ event.code = ET_EVENT_INIT;
+ event.u.init.scenario = scenario;
+ et_scenario_fsm_notify_event(event);
+
+
+ return 0;
+}
+
+//------------------------------------------------------------------------------
+static void et_usage (
+ int argc,
+ char *argv[])
+//------------------------------------------------------------------------------
+{
+ fprintf (stdout, "Please report any bug to: %s\n",PACKAGE_BUGREPORT);
+ fprintf (stdout, "Usage: %s [options]\n\n", argv[0]);
+ fprintf (stdout, "\n");
+ fprintf (stdout, "\t-d | --test-dir Directory where a set of files related to a particular test are located\n");
+ fprintf (stdout, "\t-c | --enb-conf-file Provide an eNB config file, valid for the testbed\n");
+ fprintf (stdout, "\t-D | --delay-on-exit Wait delay-in-sec before exiting\n");
+ fprintf (stdout, "\t-f | --shift-packet Shift the timing of a packet'\n");
+ fprintf (stdout, "\t-F | --shift-packets Shift the timing of packets starting at frame 'frame' included\n");
+ fprintf (stdout, "\t-m | --max-speed Play scenario as fast as possible without respecting frame timings\n");
+ fprintf (stdout, "\t-s | --scenario File name (with no path) of a test scenario that has to be replayed ()\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, "Other options:\n");
+ fprintf (stdout, "\t-h | --help Print this help and return\n");
+ fprintf (stdout, "\t-v | --version Print informations about the version of this executable\n");
+ fprintf (stdout, "\n");
+}
+
+//------------------------------------------------------------------------------
+int
+et_config_parse_opt_line (
+ int argc,
+ char *argv[],
+ char **et_dir_name,
+ char **scenario_file_name,
+ char **enb_config_file_name,
+ shift_packet_t **shifts,
+ int *delay_on_exit)
+//------------------------------------------------------------------------------
+{
+ int option = 0;
+ int rv = 0;
+ shift_packet_t *shift = NULL;
+
+ enum long_option_e {
+ LONG_OPTION_START = 0x100, /* Start after regular single char options */
+ LONG_OPTION_ENB_CONF_FILE,
+ LONG_OPTION_SCENARIO_FILE,
+ LONG_OPTION_MAX_SPEED,
+ LONG_OPTION_TEST_DIR,
+ LONG_OPTION_DELAY_EXIT,
+ LONG_OPTION_SHIFT_PACKET,
+ LONG_OPTION_SHIFT_PACKETS,
+ LONG_OPTION_HELP,
+ LONG_OPTION_VERSION
+ };
+
+ static struct option long_options[] = {
+ {"enb-conf-file", required_argument, 0, LONG_OPTION_ENB_CONF_FILE},
+ {"scenario ", required_argument, 0, LONG_OPTION_SCENARIO_FILE},
+ {"max-speed ", no_argument, 0, LONG_OPTION_MAX_SPEED},
+ {"test-dir", required_argument, 0, LONG_OPTION_TEST_DIR},
+ {"delay-on-exit", required_argument, 0, LONG_OPTION_DELAY_EXIT},
+ {"shift-packet", required_argument, 0, LONG_OPTION_SHIFT_PACKET},
+ {"shift-packets", required_argument, 0, LONG_OPTION_SHIFT_PACKETS},
+ {"help", no_argument, 0, LONG_OPTION_HELP},
+ {"version", no_argument, 0, LONG_OPTION_VERSION},
+ {NULL, 0, NULL, 0}
+ };
+
+ /*
+ * Parsing command line
+ */
+ while ((option = getopt_long (argc, argv, "vhmc:s:d:f:F", long_options, NULL)) != -1) {
+ switch (option) {
+ case LONG_OPTION_ENB_CONF_FILE:
+ case 'c':
+ if (optarg) {
+ *enb_config_file_name = strdup(optarg);
+ printf("eNB config file name is %s\n", *enb_config_file_name);
+ rv |= PLAY_SCENARIO;
+ }
+ break;
+
+ case LONG_OPTION_SCENARIO_FILE:
+ case 's':
+ if (optarg) {
+ *scenario_file_name = strdup(optarg);
+ printf("Scenario file name is %s\n", *scenario_file_name);
+ rv |= PLAY_SCENARIO;
+ }
+ break;
+
+ case LONG_OPTION_TEST_DIR:
+ case 'd':
+ if (optarg) {
+ *et_dir_name = strdup(optarg);
+ if (is_file_exists(*et_dir_name, "test dirname") != GS_IS_DIR) {
+ fprintf(stderr, "Please provide a valid test dirname, %s is not a valid directory name\n", *et_dir_name);
+ exit(1);
+ }
+ printf("Test dir name is %s\n", *et_dir_name);
+ }
+ break;
+
+ case LONG_OPTION_DELAY_EXIT:
+ case 'D':
+ if (optarg) {
+ delay_on_exit = atoi(optarg);
+ if (0 > delay_on_exit) {
+ fprintf(stderr, "Please provide a valid -D/--delay-on-exit argument, %s is not a valid value\n", delay_on_exit);
+ exit(1);
+ }
+ printf("Delay on exit is %d\n", delay_on_exit);
+ }
+ break;
+
+
+ case LONG_OPTION_SHIFT_PACKET:
+ case 'f':
+ if (optarg) {
+ if (NULL == *shifts) {
+ shift = calloc(1, sizeof (*shift));
+ *shifts = shift;
+ } else {
+ shift->next = calloc(1, sizeof (*shift));
+ shift = shift->next;
+ }
+ shift->single = 1;
+ printf("Arg Shift packet %s\n", optarg);
+ et_get_shift_arg(optarg, shift);
+ }
+ break;
+
+ case LONG_OPTION_SHIFT_PACKETS:
+ case 'F':
+ if (optarg) {
+ if (NULL == *shifts) {
+ shift = calloc(1, sizeof (*shift));
+ *shifts = shift;
+ } else {
+ shift->next = calloc(1, sizeof (*shift));
+ shift = shift->next;
+ }
+ et_get_shift_arg(optarg, shift);
+ printf("Arg Shift packets %s\n", optarg);
+ }
+ break;
+
+ case LONG_OPTION_MAX_SPEED:
+ case 'm':
+ g_max_speed = 1;
+ break;
+
+ case LONG_OPTION_VERSION:
+ case 'v':
+ printf("Version %s\n", PACKAGE_VERSION);
+ exit (0);
+ break;
+
+ case LONG_OPTION_HELP:
+ case 'h':
+ default:
+ et_usage (argc, argv);
+ exit (0);
+ }
+ }
+ if (NULL == *et_dir_name) {
+ fprintf(stderr, "Please provide a valid test dirname\n");
+ exit(1);
+ }
+ if (chdir(*et_dir_name) != 0) {
+ fprintf(stderr, "ERROR: chdir %s returned %s\n", *et_dir_name, strerror(errno));
+ exit(1);
+ }
+ if (rv & PLAY_SCENARIO) {
+ if (NULL == *enb_config_file_name) {
+ fprintf(stderr, "ERROR: please provide the original eNB config file name that should be in %s\n", *et_dir_name);
+ }
+ if (is_file_exists(*enb_config_file_name, "eNB config file") != GS_IS_FILE) {
+ fprintf(stderr, "ERROR: original eNB config file name %s is not found in dir %s\n", *enb_config_file_name, *et_dir_name);
+ }
+ et_enb_config_init(*enb_config_file_name);
+
+ if (NULL == *scenario_file_name) {
+ fprintf(stderr, "ERROR: please provide the scenario file name that should be in %s\n", *et_dir_name);
+ }
+ if (is_file_exists(*scenario_file_name, "Scenario file") != GS_IS_FILE) {
+ fprintf(stderr, "ERROR: Scenario file name %s is not found in dir %s\n", *scenario_file_name, *et_dir_name);
+ }
+ }
+ return rv;
+}
+
+//------------------------------------------------------------------------------
+int main( int argc, char **argv )
+//------------------------------------------------------------------------------
+{
+ int actions = 0;
+ char *et_dir_name = NULL;
+ char *scenario_file_name = NULL;
+ char *enb_config_file_name = NULL;
+ struct shift_packet_s *shifts = NULL;
+ int ret = 0;
+ int delay_on_exit = 0;
+ et_scenario_t *scenario = NULL;
+ char play_scenario_filename[NAME_MAX];
+
+ memset(play_scenario_filename, 0, sizeof(play_scenario_filename));
+
+ // logging
+ logInit();
+ set_glog(LOG_TRACE, LOG_MED);
+
+ itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL);
+
+ set_comp_log(ENB_APP, LOG_TRACE, LOG_MED, 1);
+ set_comp_log(S1AP, LOG_TRACE, LOG_MED, 1);
+ set_comp_log(SCTP, LOG_TRACE, LOG_FULL, 1);
+ asn_debug = 0;
+ asn1_xer_print = 1;
+
+ //parameters
+ actions = et_config_parse_opt_line (argc, argv, &et_dir_name, &scenario_file_name, &enb_config_file_name, &shifts, &delay_on_exit); //Command-line options
+ if (actions & PLAY_SCENARIO) {
+ if (et_generate_xml_scenario(et_dir_name, scenario_file_name,enb_config_file_name, play_scenario_filename) == 0) {
+ if (NULL != (scenario = et_generate_scenario(play_scenario_filename))) {
+ ret = et_play_scenario(scenario, shifts);
+ } else {
+ fprintf(stderr, "ERROR: Could not generate scenario from tsml file\n");
+ ret = -1;
+ }
+ } else {
+ fprintf(stderr, "ERROR: Could not generate tsml scenario from xml file\n");
+ ret = -1;
+ }
+ et_free_pointer(et_dir_name);
+ et_free_pointer(scenario_file_name);
+ et_free_pointer(enb_config_file_name);
+ }
+ itti_wait_tasks_end();
+ if (0 < delay_on_exit) {
+ sleep(delay_on_exit);
+ }
+ return ret;
+}
+
+
diff --git a/openair3/TEST/EPC_TEST/play_scenario.h b/openair3/TEST/EPC_TEST/play_scenario.h
new file mode 100644
index 0000000000..c1458047bd
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/play_scenario.h
@@ -0,0 +1,508 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+*******************************************************************************/
+
+/*
+ play_scenario.h
+ -------------------
+ AUTHOR : Lionel GAUTHIER
+ COMPANY : EURECOM
+ EMAIL : Lionel.Gauthier@eurecom.fr
+*/
+
+#ifndef PLAY_SCENARIO_H_
+#define PLAY_SCENARIO_H_
+# include
+# include
+# include
+# include
+# include
+
+#include "S1AP-PDU.h"
+#include "s1ap_ies_defs.h"
+#include "play_scenario_s1ap_eNB_defs.h"
+#include "hashtable.h"
+#include "asn_compare.h"
+
+#define ET_XPATH_EXPRESSION_MAX_LENGTH 400
+
+
+// powers of 2
+#define ET_BIT_MASK_MATCH_SCTP_STREAM 1
+#define ET_BIT_MASK_MATCH_SCTP_SSN 2
+//#define ET_BIT_MASK_MATCH_S1AP_ 2
+
+#define MAX_ENB 16
+
+#define ENB_CONFIG_STRING_ACTIVE_ENBS "Active_eNBs"
+
+#define ENB_CONFIG_STRING_ENB_LIST "eNBs"
+#define ENB_CONFIG_STRING_ENB_ID "eNB_ID"
+#define ENB_CONFIG_STRING_CELL_TYPE "cell_type"
+#define ENB_CONFIG_STRING_ENB_NAME "eNB_name"
+
+#define ENB_CONFIG_STRING_TRACKING_AREA_CODE "tracking_area_code"
+#define ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE "mobile_country_code"
+#define ENB_CONFIG_STRING_MOBILE_NETWORK_CODE "mobile_network_code"
+
+
+#define ENB_CONFIG_STRING_MME_IP_ADDRESS "mme_ip_address"
+#define ENB_CONFIG_STRING_MME_IPV4_ADDRESS "ipv4"
+#define ENB_CONFIG_STRING_MME_IPV6_ADDRESS "ipv6"
+#define ENB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE "active"
+#define ENB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE "preference"
+
+#define ENB_CONFIG_STRING_SCTP_CONFIG "SCTP"
+#define ENB_CONFIG_STRING_SCTP_INSTREAMS "SCTP_INSTREAMS"
+#define ENB_CONFIG_STRING_SCTP_OUTSTREAMS "SCTP_OUTSTREAMS"
+
+#define ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG "NETWORK_INTERFACES"
+#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1_MME "ENB_INTERFACE_NAME_FOR_S1_MME"
+#define ENB_CONFIG_STRING_ENB_IPV4_ADDRESS_FOR_S1_MME "ENB_IPV4_ADDRESS_FOR_S1_MME"
+#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1U "ENB_INTERFACE_NAME_FOR_S1U"
+#define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U "ENB_IPV4_ADDRESS_FOR_S1U"
+#define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U "ENB_PORT_FOR_S1U"
+
+
+typedef struct shift_packet_s {
+ unsigned int frame_number; // original frame number
+ int shift_seconds;
+ int shift_microseconds;
+ int single; // shift timing only for this packet (not also following packets)
+ struct shift_packet_s *next;
+} shift_packet_t;
+
+
+typedef struct mme_ip_address_s {
+ unsigned ipv4:1;
+ unsigned ipv6:1;
+ unsigned active:1;
+ char *ipv4_address;
+ char *ipv6_address;
+} mme_ip_address_t;
+
+#define IPV4_STR_ADDR_TO_INT_NWBO(AdDr_StR,NwBo,MeSsAgE ) do {\
+ struct in_addr inp;\
+ if ( inet_aton(AdDr_StR, &inp ) < 0 ) {\
+ AssertFatal (0, MeSsAgE);\
+ } else {\
+ NwBo = inp.s_addr;\
+ }\
+ } while (0);
+
+
+typedef struct Enb_properties_s {
+ /* Unique eNB_id to identify the eNB within EPC.
+ * For macro eNB ids this field should be 20 bits long.
+ * For home eNB ids this field should be 28 bits long.
+ */
+ uint32_t eNB_id;
+
+ /* The type of the cell */
+ enum cell_type_e cell_type;
+
+ /* Optional name for the cell
+ * NOTE: the name can be NULL (i.e no name) and will be cropped to 150
+ * characters.
+ */
+ char *eNB_name;
+
+ /* Tracking area code */
+ uint16_t tac;
+
+ /* Mobile Country Code
+ * Mobile Network Code
+ */
+ uint16_t mcc;
+ uint16_t mnc;
+ uint8_t mnc_digit_length;
+
+
+
+ /* Physical parameters */
+
+ int16_t Nid_cell[1+MAX_NUM_CCs];// for testing, change later
+ /* Nb of MME to connect to */
+ uint8_t nb_mme;
+ /* List of MME to connect to */
+ mme_ip_address_t mme_ip_address[S1AP_MAX_NB_MME_IP_ADDRESS];
+
+ int sctp_in_streams;
+ int sctp_out_streams;
+
+ char *enb_interface_name_for_S1U;
+ in_addr_t enb_ipv4_address_for_S1U;
+ tcp_udp_port_t enb_port_for_S1U;
+
+ char *enb_interface_name_for_S1_MME;
+ in_addr_t enb_ipv4_address_for_S1_MME;
+
+} Enb_properties_t;
+
+typedef struct Enb_properties_array_s {
+ int number;
+ Enb_properties_t *properties[MAX_ENB];
+} Enb_properties_array_t;
+
+# define ET_ENB_REGISTER_RETRY_DELAY 3
+# define ET_FSM_STATE_WAITING_RX_EVENT_DELAY_SEC 15
+
+typedef enum {
+ ET_PACKET_STATUS_START = 0,
+ ET_PACKET_STATUS_NONE = ET_PACKET_STATUS_START,
+ ET_PACKET_STATUS_NOT_TAKEN_IN_ACCOUNT,
+ ET_PACKET_STATUS_SCHEDULED_FOR_SENDING,
+ ET_PACKET_STATUS_SENT,
+ ET_PACKET_STATUS_SCHEDULED_FOR_RECEIVING,
+ ET_PACKET_STATUS_RECEIVED,
+ ET_PACKET_STATUS_END
+} et_packet_status_t;
+
+typedef enum {
+ ET_FSM_STATE_START = 0,
+ ET_FSM_STATE_NULL = ET_FSM_STATE_START,
+ ET_FSM_STATE_CONNECTING_S1C,
+ ET_FSM_STATE_WAITING_RX_EVENT,
+ ET_FSM_STATE_WAITING_TX_EVENT,
+ ET_FSM_STATE_RUNNING,
+ ET_FSM_STATE_END
+} et_fsm_state_t;
+
+enum COMPARE_ERR_CODE_e;
+
+typedef enum {
+ ET_ERROR_MATCH_START = COMPARE_ERR_CODE_END,
+ ET_ERROR_MATCH_PACKET_SCTP_CHUNK_TYPE = ET_ERROR_MATCH_START,
+ ET_ERROR_MATCH_PACKET_SCTP_PPID,
+ ET_ERROR_MATCH_PACKET_SCTP_ASSOC_ID,
+ ET_ERROR_MATCH_PACKET_SCTP_STREAM_ID,
+ ET_ERROR_MATCH_PACKET_SCTP_SSN,
+ ET_ERROR_MATCH_PACKET_S1AP_PRESENT,
+ ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE,
+ ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY,
+ ET_ERROR_MATCH_END
+} et_error_match_code_t;
+
+
+
+
+typedef enum {
+ ET_PACKET_ACTION_S1C_START = 0,
+ ET_PACKET_ACTION_S1C_NULL = ET_PACKET_ACTION_S1C_START,
+ ET_PACKET_ACTION_S1C_SEND,
+ ET_PACKET_ACTION_S1C_RECEIVE,
+ ET_PACKET_ACTION_S1C_END
+} et_packet_action_t;
+
+// from kernel source file 3.19/include/linux/sctp.h
+typedef enum {
+ SCTP_CID_DATA = 0,
+ SCTP_CID_INIT = 1,
+ SCTP_CID_INIT_ACK = 2,
+ SCTP_CID_SACK = 3,
+ SCTP_CID_HEARTBEAT = 4,
+ SCTP_CID_HEARTBEAT_ACK = 5,
+ SCTP_CID_ABORT = 6,
+ SCTP_CID_SHUTDOWN = 7,
+ SCTP_CID_SHUTDOWN_ACK = 8,
+ SCTP_CID_ERROR = 9,
+ SCTP_CID_COOKIE_ECHO = 10,
+ SCTP_CID_COOKIE_ACK = 11,
+ SCTP_CID_ECN_ECNE = 12,
+ SCTP_CID_ECN_CWR = 13,
+ SCTP_CID_SHUTDOWN_COMPLETE = 14,
+
+ /* AUTH Extension Section 4.1 */
+ SCTP_CID_AUTH = 0x0F,
+
+ /* PR-SCTP Sec 3.2 */
+ SCTP_CID_FWD_TSN = 0xC0,
+
+ /* Use hex, as defined in ADDIP sec. 3.1 */
+ SCTP_CID_ASCONF = 0xC1,
+ SCTP_CID_ASCONF_ACK = 0x80,
+} sctp_cid_t; /* enum */
+
+typedef enum {
+ TEST_S1AP_PDU_TYPE_START = 0,
+ TEST_S1AP_PDU_TYPE_UNKNOWN = TEST_S1AP_PDU_TYPE_START,
+ TEST_S1AP_PDU_TYPE_INITIATING,
+ TEST_S1AP_PDU_TYPE_SUCCESSFUL_OUTCOME,
+ TEST_S1AP_PDU_TYPE_UNSUCCESSFUL_OUTCOME,
+ TEST_S1AP_PDU_TYPE_END
+} et_s1ap_pdu_type_t;
+
+
+typedef struct et_s1ap_s {
+ //et_s1ap_pdu_type_t pdu_type;
+ S1AP_PDU_t pdu; // decoded ASN1 C type: choice of initiatingMessage, successfulOutcome, unsuccessfulOutcome
+ uint16_t xml_stream_pos_offset;
+ uint16_t binary_stream_pos;
+ uint16_t binary_stream_allocated_size;
+ uint8_t *binary_stream;
+ s1ap_message message; // decoded message: information elements
+ xmlDocPtr doc; // XML representation of the S1AP PDU
+} et_s1ap_t;
+
+
+// from kernel source file 3.19/include/linux/sctp.h, Big Endians
+typedef struct sctp_datahdr_s {
+ uint32_t tsn;
+ uint16_t stream;
+ uint16_t ssn;
+ uint32_t ppid;
+ uint32_t assoc_id; // filled when running scenario
+ et_s1ap_t payload;
+} sctp_datahdr_t;
+
+// from kernel source file 3.19/include/linux/sctp.h, Big Endians
+typedef struct sctp_inithdr {
+ uint32_t init_tag;
+ uint32_t a_rwnd;
+ uint16_t num_outbound_streams;
+ uint16_t num_inbound_streams;
+ uint32_t initial_tsn;
+ uint8_t params[0];
+} sctp_inithdr_t;
+
+typedef sctp_inithdr_t sctp_initackhdr_t;
+
+typedef struct et_sctp_hdr_s {
+ unsigned int src_port;
+ unsigned int dst_port;
+ sctp_cid_t chunk_type;
+ union {
+ sctp_datahdr_t data_hdr;
+ sctp_inithdr_t init_hdr;
+ sctp_initackhdr_t init_ack_hdr;
+ } u;
+} et_sctp_hdr_t;
+
+typedef struct et_ip_s {
+ unsigned int address_family; // AF_INET, AF_INET6
+ union {
+ struct in6_addr ipv6;
+ in_addr_t ipv4;
+ }address;
+ char str[INET6_ADDRSTRLEN+1];
+}et_ip_t;
+
+typedef struct et_ip_hdr_s {
+ et_ip_t src;
+ et_ip_t dst;
+} et_ip_hdr_t;
+
+typedef struct et_packet_s {
+ et_packet_action_t action;
+ struct timeval time_relative_to_first_packet;
+ struct timeval time_relative_to_last_sent_packet;
+ struct timeval time_relative_to_last_received_packet;
+ unsigned int original_frame_number;
+ unsigned int packet_number;
+ instance_t enb_instance;
+ et_ip_hdr_t ip_hdr;
+ et_sctp_hdr_t sctp_hdr;
+ struct et_packet_s *next;
+
+ //scenario running vars
+ et_packet_status_t status;
+ long timer_id; // ITTI timer id for waiting rx packets
+ struct timeval timestamp_packet; // timestamp when rx or tx packet
+}et_packet_t;
+
+
+typedef struct sctp_epoll_s {
+ /* Array of events monitored by the task.
+ * By default only one fd is monitored (the one used to received messages
+ * from other tasks).
+ * More events can be suscribed later by the task itself.
+ */
+ struct epoll_event *events;
+
+ int epoll_nb_events;
+
+} thread_desc_t;
+
+typedef struct et_scenario_s {
+ xmlChar *name;
+ et_packet_t *list_packet;
+ //--------------------------
+ // playing scenario
+ //--------------------------
+ Enb_properties_array_t *enb_properties;
+ uint32_t register_enb_pending;
+ uint32_t registered_enb;
+ long enb_register_retry_timer_id;
+
+
+ hash_table_t *hash_mme2association_id;
+ hash_table_t *hash_old_ue_mme_id2ue_mme_id;
+ struct timeval time_last_tx_packet; // Time last sent packet
+ struct timeval time_last_rx_packet; // Time last packet received with all previous scenario RX packet received.
+ et_packet_t *last_rx_packet; // Last packet received with all previous scenario RX packet received.
+ et_packet_t *last_tx_packet; // Last sent packet
+ et_packet_t *next_packet; // Next packet to be handled in the scenario (RX or TX packet)
+
+ int timer_count;
+} et_scenario_t;
+
+
+typedef enum {
+ ET_EVENT_START = 0,
+ ET_EVENT_INIT = ET_EVENT_START,
+ ET_EVENT_S1C_CONNECTED,
+ ET_EVENT_RX_SCTP_EVENT,
+ ET_EVENT_RX_S1AP,
+ ET_EVENT_RX_PACKET_TIME_OUT,
+ ET_EVENT_TX_TIMED_PACKET,
+ ET_EVENT_TICK,
+ ET_EVENT_END
+} et_event_code_t;
+
+typedef struct et_event_init_s {
+ et_scenario_t *scenario;
+} et_event_init_t;
+
+typedef struct et_event_s1ap_data_ind_s {
+ sctp_datahdr_t sctp_datahdr;
+} et_event_s1ap_data_ind_t;
+
+typedef struct et_event_s1ap_data_req_s {
+
+} et_event_s1ap_data_req_t;
+
+typedef struct et_event_s {
+ et_event_code_t code;
+ union {
+ et_event_init_t init;
+ et_event_s1ap_data_ind_t s1ap_data_ind;
+ et_packet_t *tx_timed_packet;
+ et_packet_t *rx_packet_time_out;
+ } u;
+} et_event_t;
+
+inline void et_free_pointer(void *p) {if (NULL != p) {free(p); p=NULL;}};
+
+//-------------------------
+void et_free_packet(et_packet_t* packet);
+void et_free_scenario(et_scenario_t* scenario);
+//-------------------------
+void et_display_packet_s1ap_data(const et_s1ap_t * const s1ap);
+void et_display_packet_sctp_init(const sctp_inithdr_t * const sctp);
+void et_display_packet_sctp_initack(const sctp_initackhdr_t * const sctp);
+void et_display_packet_sctp_data(const sctp_datahdr_t * const sctp);
+void et_display_packet_sctp(const et_sctp_hdr_t * const sctp);
+void et_display_packet_ip(const et_ip_hdr_t * const ip);
+void et_display_packet(const et_packet_t * const packet);
+void et_display_scenario(const et_scenario_t * const scenario);
+//-------------------------
+int et_s1ap_decode_initiating_message(s1ap_message *message, S1ap_InitiatingMessage_t *initiating_p);
+int et_s1ap_decode_successful_outcome(s1ap_message *message, S1ap_SuccessfulOutcome_t *successfullOutcome_p);
+int et_s1ap_decode_unsuccessful_outcome(s1ap_message *message, S1ap_UnsuccessfulOutcome_t *unSuccessfullOutcome_p);
+int et_s1ap_decode_pdu(S1AP_PDU_t * const pdu, s1ap_message * const message, const uint8_t * const buffer, const uint32_t length);
+void et_decode_s1ap(et_s1ap_t * const s1ap);
+//-------------------------
+int et_s1ap_eNB_compare_assoc_id( struct s1ap_eNB_mme_data_s *p1, struct s1ap_eNB_mme_data_s *p2);
+uint32_t et_s1ap_generate_eNB_id(void);
+uint16_t et_s1ap_eNB_fetch_add_global_cnx_id(void);
+void et_s1ap_eNB_prepare_internal_data(void);
+void et_s1ap_eNB_insert_new_instance(s1ap_eNB_instance_t *new_instance_p);
+struct s1ap_eNB_mme_data_s *et_s1ap_eNB_get_MME(s1ap_eNB_instance_t *instance_p,int32_t assoc_id, uint16_t cnx_id);
+s1ap_eNB_instance_t *et_s1ap_eNB_get_instance(instance_t instance);
+void et_s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uint8_t *buffer,uint32_t buffer_length, uint16_t stream);
+int et_handle_s1ap_mismatch_mme_ue_s1ap_id(et_packet_t * const spacket, et_packet_t * const rx_packet);
+asn_comp_rval_t* et_s1ap_is_matching(et_s1ap_t * const s1ap1, et_s1ap_t * const s1ap2, const uint32_t constraints);
+et_packet_t* et_build_packet_from_s1ap_data_ind(et_event_s1ap_data_ind_t * const s1ap_data_ind);
+int et_scenario_set_packet_received(et_packet_t * const packet);
+int et_s1ap_process_rx_packet(et_event_s1ap_data_ind_t * const sctp_data_ind);
+void et_s1ap_eNB_handle_sctp_data_ind(sctp_data_ind_t * const sctp_data_ind);
+void et_s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p,
+ net_ip_address_t *mme_ip_address,
+ net_ip_address_t *local_ip_addr,
+ uint16_t in_streams,
+ uint16_t out_streams);
+void et_s1ap_handle_s1_setup_message(s1ap_eNB_mme_data_t *mme_desc_p, int sctp_shutdown);
+void et_s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t *s1ap_register_eNB);
+void et_s1ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp);
+void * et_s1ap_eNB_task(void *arg);
+//-------------------------
+int et_generate_xml_scenario(
+ const char const * xml_in_dir_name,
+ const char const * xml_in_scenario_filename,
+ const char const * enb_config_filename,
+ char const * tsml_out_scenario_filename);
+//-------------------------
+void timeval_add (struct timeval * const result, const struct timeval * const a, const struct timeval * const b);
+int timeval_subtract (struct timeval * const result, struct timeval * const a, struct timeval * const b);
+void et_scenario_wait_rx_packet(et_packet_t * const packet);
+void et_scenario_schedule_tx_packet(et_packet_t * packet);
+et_fsm_state_t et_scenario_fsm_notify_event_state_running(et_event_t event);
+et_fsm_state_t et_scenario_fsm_notify_event_state_waiting_tx(et_event_t event);
+et_fsm_state_t et_scenario_fsm_notify_event_state_waiting_rx(et_event_t event);
+et_fsm_state_t et_scenario_fsm_notify_event_state_connecting_s1c(et_event_t event);
+et_fsm_state_t et_scenario_fsm_notify_event_state_null(et_event_t event);
+et_fsm_state_t et_scenario_fsm_notify_event(et_event_t event);
+//-------------------------
+void et_parse_s1ap(xmlDocPtr doc, const xmlNode const *s1ap_node, et_s1ap_t * const s1ap);
+void et_parse_sctp_data_chunk(xmlDocPtr doc, const xmlNode const *sctp_node, sctp_datahdr_t * const sctp_hdr);
+void et_parse_sctp_init_chunk(xmlDocPtr doc, const xmlNode const *sctp_node, sctp_inithdr_t * const sctp_hdr);
+void et_parse_sctp_init_ack_chunk(xmlDocPtr doc, const xmlNode const *sctp_node, sctp_initackhdr_t * const sctp_hdr);
+void et_parse_sctp(xmlDocPtr doc, const xmlNode const *sctp_node, et_sctp_hdr_t * const sctp_hdr);
+et_packet_t* et_parse_xml_packet(xmlDocPtr doc, xmlNodePtr node);
+et_scenario_t* et_generate_scenario(const char * const et_scenario_filename);
+//-------------------------
+asn_comp_rval_t * et_s1ap_ies_is_matching(const S1AP_PDU_PR present, s1ap_message * const m1, s1ap_message * const m2, const uint32_t constraints);
+void update_xpath_node_mme_ue_s1ap_id(et_s1ap_t * const s1ap, xmlNode *node, const S1ap_MME_UE_S1AP_ID_t new_id);
+void update_xpath_nodes_mme_ue_s1ap_id(et_s1ap_t * const s1ap_payload, xmlNodeSetPtr nodes, const S1ap_MME_UE_S1AP_ID_t new_id);
+int et_s1ap_update_mme_ue_s1ap_id(et_packet_t * const packet, const S1ap_MME_UE_S1AP_ID_t old_id, const S1ap_MME_UE_S1AP_ID_t new_id);
+//-------------------------
+asn_comp_rval_t * et_sctp_data_is_matching(sctp_datahdr_t * const sctp1, sctp_datahdr_t * const sctp2, const uint32_t constraints);
+asn_comp_rval_t * et_sctp_is_matching(et_sctp_hdr_t * const sctp1, et_sctp_hdr_t * const sctp2, const uint32_t constraints);
+//------------------------------------------------------------------------------
+void et_print_hex_octets(const unsigned char * const byte_stream, const unsigned long int num);
+int et_is_file_exists ( const char const * file_nameP, const char const *file_roleP);
+int et_strip_extension( char *in_filename);
+void et_get_shift_arg( char * line_argument, shift_packet_t * const shift);
+int et_split_path ( char * pathP, char *** resP);
+void et_display_node ( xmlNodePtr node, unsigned int indent);
+void et_display_tree ( xmlNodePtr node, unsigned int indent);
+char * et_ip2ip_str(const et_ip_t * const ip);
+int et_compare_et_ip_to_net_ip_address(const et_ip_t * const ip, const net_ip_address_t * const net_ip);
+int et_hex2data(unsigned char * const data, const unsigned char * const hexstring, const unsigned int len);
+sctp_cid_t et_chunk_type_str2cid(const xmlChar * const chunk_type_str);
+const char * const et_chunk_type_cid2str(const sctp_cid_t chunk_type);
+const char * const et_error_match2str(const int err);
+et_packet_action_t et_action_str2et_action_t(const xmlChar * const action);
+void et_ip_str2et_ip(const xmlChar * const ip_str, et_ip_t * const ip);
+void et_enb_config_init(const char const * lib_config_file_name_pP);
+const Enb_properties_array_t *et_enb_config_get(void);
+void et_eNB_app_register(const Enb_properties_array_t *enb_properties);
+void *et_eNB_app_task(void *args_p);
+int et_play_scenario(et_scenario_t* const scenario, const struct shift_packet_s *shifts);
+
+#endif /* PLAY_SCENARIO_H_ */
diff --git a/openair3/TEST/EPC_TEST/play_scenario_decode.c b/openair3/TEST/EPC_TEST/play_scenario_decode.c
new file mode 100644
index 0000000000..aba1703eb3
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/play_scenario_decode.c
@@ -0,0 +1,214 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+
+/*
+ play_scenario_decode.c
+ -------------------
+ AUTHOR : Lionel GAUTHIER
+ COMPANY : EURECOM
+ EMAIL : Lionel.Gauthier@eurecom.fr
+ */
+
+#include "intertask_interface.h"
+#include "platform_types.h"
+#include "s1ap_ies_defs.h"
+#include "s1ap_eNB_decoder.h"
+#include "assertions.h"
+#include "play_scenario.h"
+
+//------------------------------------------------------------------------------
+int et_s1ap_decode_initiating_message(s1ap_message *message, S1ap_InitiatingMessage_t *initiating_p)
+{
+ int ret = -1;
+
+ DevAssert(initiating_p != NULL);
+
+ message->procedureCode = initiating_p->procedureCode;
+ message->criticality = initiating_p->criticality;
+
+ switch(initiating_p->procedureCode) {
+ case S1ap_ProcedureCode_id_downlinkNASTransport:
+ ret = s1ap_decode_s1ap_downlinknastransporties(&message->msg.s1ap_DownlinkNASTransportIEs,&initiating_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_InitialContextSetup:
+ ret = s1ap_decode_s1ap_initialcontextsetuprequesties(&message->msg.s1ap_InitialContextSetupRequestIEs, &initiating_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_UEContextRelease:
+ ret = s1ap_decode_s1ap_uecontextreleasecommandies(&message->msg.s1ap_UEContextReleaseCommandIEs, &initiating_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_Paging:
+ ret = s1ap_decode_s1ap_pagingies(&message->msg.s1ap_PagingIEs, &initiating_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_uplinkNASTransport:
+ ret = s1ap_decode_s1ap_uplinknastransporties (&message->msg.s1ap_UplinkNASTransportIEs, &initiating_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_S1Setup:
+ ret = s1ap_decode_s1ap_s1setuprequesties (&message->msg.s1ap_S1SetupRequestIEs, &initiating_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_initialUEMessage:
+ ret = s1ap_decode_s1ap_initialuemessageies (&message->msg.s1ap_InitialUEMessageIEs, &initiating_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_UEContextReleaseRequest:
+ ret = s1ap_decode_s1ap_uecontextreleaserequesties (&message->msg.s1ap_UEContextReleaseRequestIEs, &initiating_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_UECapabilityInfoIndication:
+ ret = s1ap_decode_s1ap_uecapabilityinfoindicationies (&message->msg.s1ap_UECapabilityInfoIndicationIEs, &initiating_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_NASNonDeliveryIndication:
+ ret = s1ap_decode_s1ap_nasnondeliveryindication_ies (&message->msg.s1ap_NASNonDeliveryIndication_IEs, &initiating_p->value);
+ break;
+
+ default:
+ AssertFatal( 0 , "Unknown procedure ID (%d) for initiating message\n",
+ (int)initiating_p->procedureCode);
+ return -1;
+ }
+ return ret;
+}
+
+//------------------------------------------------------------------------------
+int et_s1ap_decode_successful_outcome(s1ap_message *message, S1ap_SuccessfulOutcome_t *successfullOutcome_p)
+{
+ int ret = -1;
+
+ DevAssert(successfullOutcome_p != NULL);
+
+ message->procedureCode = successfullOutcome_p->procedureCode;
+ message->criticality = successfullOutcome_p->criticality;
+
+ switch(successfullOutcome_p->procedureCode) {
+ case S1ap_ProcedureCode_id_S1Setup:
+ ret = s1ap_decode_s1ap_s1setupresponseies(
+ &message->msg.s1ap_S1SetupResponseIEs, &successfullOutcome_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_InitialContextSetup:
+ ret = s1ap_decode_s1ap_initialcontextsetupresponseies (&message->msg.s1ap_InitialContextSetupResponseIEs, &successfullOutcome_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_UEContextRelease:
+ ret = s1ap_decode_s1ap_uecontextreleasecompleteies (&message->msg.s1ap_UEContextReleaseCompleteIEs, &successfullOutcome_p->value);
+ break;
+
+ default:
+ AssertFatal(0, "Unknown procedure ID (%d) for successfull outcome message\n",
+ (int)successfullOutcome_p->procedureCode);
+ return -1;
+ }
+ return ret;
+}
+
+//------------------------------------------------------------------------------
+int et_s1ap_decode_unsuccessful_outcome(s1ap_message *message, S1ap_UnsuccessfulOutcome_t *unSuccessfullOutcome_p)
+{
+ int ret = -1;
+
+ DevAssert(unSuccessfullOutcome_p != NULL);
+
+ message->procedureCode = unSuccessfullOutcome_p->procedureCode;
+ message->criticality = unSuccessfullOutcome_p->criticality;
+
+ switch(unSuccessfullOutcome_p->procedureCode) {
+ case S1ap_ProcedureCode_id_S1Setup:
+ ret = s1ap_decode_s1ap_s1setupfailureies(&message->msg.s1ap_S1SetupFailureIEs, &unSuccessfullOutcome_p->value);
+ break;
+
+ case S1ap_ProcedureCode_id_InitialContextSetup:
+ ret = s1ap_decode_s1ap_initialcontextsetupfailureies (&message->msg.s1ap_InitialContextSetupFailureIEs, &unSuccessfullOutcome_p->value);
+ break;
+
+ default:
+ AssertFatal(0,"Unknown procedure ID (%d) for unsuccessfull outcome message\n",
+ (int)unSuccessfullOutcome_p->procedureCode);
+ break;
+ }
+ return ret;
+}
+
+//------------------------------------------------------------------------------
+int et_s1ap_decode_pdu(S1AP_PDU_t * const pdu, s1ap_message * const message, const uint8_t * const buffer, const uint32_t length)
+{
+ asn_dec_rval_t dec_ret;
+
+ DevAssert(buffer != NULL);
+
+ memset((void *)pdu, 0, sizeof(S1AP_PDU_t));
+
+ dec_ret = aper_decode(NULL,
+ &asn_DEF_S1AP_PDU,
+ (void **)&pdu,
+ buffer,
+ length,
+ 0,
+ 0);
+
+ if (dec_ret.code != RC_OK) {
+ S1AP_ERROR("Failed to decode pdu\n");
+ return -1;
+ }
+
+ message->direction = pdu->present;
+
+ switch(pdu->present) {
+ case S1AP_PDU_PR_initiatingMessage:
+ return et_s1ap_decode_initiating_message(message,
+ &pdu->choice.initiatingMessage);
+
+ case S1AP_PDU_PR_successfulOutcome:
+ return et_s1ap_decode_successful_outcome(message,
+ &pdu->choice.successfulOutcome);
+
+ case S1AP_PDU_PR_unsuccessfulOutcome:
+ return et_s1ap_decode_unsuccessful_outcome(message,
+ &pdu->choice.unsuccessfulOutcome);
+
+ default:
+ AssertFatal(0, "Unknown presence (%d) or not implemented\n", (int)pdu->present);
+ break;
+ }
+ return -1;
+}
+//------------------------------------------------------------------------------
+void et_decode_s1ap(et_s1ap_t * const s1ap)
+{
+ if (NULL != s1ap) {
+ if (et_s1ap_decode_pdu(&s1ap->pdu, &s1ap->message, s1ap->binary_stream, s1ap->binary_stream_allocated_size) < 0) {
+ AssertFatal (0, "ERROR %s() Cannot decode S1AP message!\n", __FUNCTION__);
+ }
+ }
+}
diff --git a/openair3/TEST/EPC_TEST/play_scenario_display.c b/openair3/TEST/EPC_TEST/play_scenario_display.c
new file mode 100644
index 0000000000..2a924e952c
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/play_scenario_display.c
@@ -0,0 +1,314 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+
+/*
+ play_scenario_display.c
+ -------------------
+ AUTHOR : Lionel GAUTHIER
+ COMPANY : EURECOM
+ EMAIL : Lionel.Gauthier@eurecom.fr
+ */
+#include
+#include
+
+#include "intertask_interface.h"
+#include "platform_types.h"
+#include "assertions.h"
+#include "s1ap_ies_defs.h"
+#include "s1ap_eNB_decoder.h"
+#include "play_scenario.h"
+//-----------------------------------------------------------------------------
+void et_print_hex_octets(const unsigned char * const byte_stream, const unsigned long int num)
+{
+ unsigned long octet_index = 0;
+
+ if (byte_stream == NULL) {
+ return;
+ }
+
+ fprintf(stdout, "+-----+-------------------------------------------------+\n");
+ fprintf(stdout, "| | 0 1 2 3 4 5 6 7 8 9 a b c d e f |\n");
+ fprintf(stdout, "+-----+-------------------------------------------------+\n");
+
+ for (octet_index = 0; octet_index < num; octet_index++) {
+ if ((octet_index % 16) == 0) {
+ if (octet_index != 0) {
+ fprintf(stdout, " |\n");
+ }
+
+ fprintf(stdout, " %04ld |", octet_index);
+ }
+
+ /*
+ * Print every single octet in hexadecimal form
+ */
+ fprintf(stdout, " %02x", byte_stream[octet_index]);
+ /*
+ * Align newline and pipes according to the octets in groups of 2
+ */
+ }
+
+ /*
+ * Append enough spaces and put final pipe
+ */
+ unsigned char index;
+
+ for (index = octet_index; index < 16; ++index) {
+ fprintf(stdout, " ");
+ }
+
+ fprintf(stdout, " |\n");
+}
+
+//------------------------------------------------------------------------------
+void et_display_node(xmlNodePtr node, unsigned int indent)
+{
+ int i = 0;
+ if (node->type == XML_ELEMENT_NODE) {
+ xmlChar *path = xmlGetNodePath(node);
+ for (i=0; ichildren != NULL && node->children->type == XML_TEXT_NODE) {
+ xmlChar *content = xmlNodeGetContent(node);
+ printf("%s -> %s\n", path, content);
+ xmlFree(content);
+ } else {
+ printf("%s\n", path);
+ }
+ xmlFree(path);
+ }
+}
+//------------------------------------------------------------------------------
+void et_display_tree(xmlNodePtr node, unsigned int indent)
+{
+ xmlNode *cur_node = NULL;
+
+ for (cur_node = node; cur_node; cur_node = cur_node->next) {
+ if (cur_node->type == XML_ELEMENT_NODE) {
+ et_display_node(cur_node, indent);
+ }
+ et_display_tree(cur_node->children, indent++);
+ }
+}
+//------------------------------------------------------------------------------
+void et_display_packet_s1ap_data(const et_s1ap_t * const s1ap)
+{
+ char *message_string = NULL;
+
+ if (s1ap) {
+ message_string = calloc(20000, sizeof(char));
+ AssertFatal (NULL != message_string, "ERROR malloc()failed!\n");
+ s1ap_string_total_size = 0;
+ switch(s1ap->pdu.present) {
+ case S1AP_PDU_PR_initiatingMessage:
+ switch(s1ap->pdu.choice.initiatingMessage.procedureCode) {
+ case S1ap_ProcedureCode_id_downlinkNASTransport: s1ap_xer_print_s1ap_downlinknastransport(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_InitialContextSetup: s1ap_xer_print_s1ap_initialcontextsetuprequest(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_UEContextRelease: s1ap_xer_print_s1ap_uecontextreleasecommand(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_Paging: s1ap_xer_print_s1ap_paging(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_uplinkNASTransport: s1ap_xer_print_s1ap_uplinknastransport(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_S1Setup: s1ap_xer_print_s1ap_s1setuprequest(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_initialUEMessage: s1ap_xer_print_s1ap_initialuemessage(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_UEContextReleaseRequest: s1ap_xer_print_s1ap_uecontextreleaserequest(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_UECapabilityInfoIndication:s1ap_xer_print_s1ap_uecapabilityinfoindication(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_NASNonDeliveryIndication: s1ap_xer_print_s1ap_nasnondeliveryindication_(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ default:
+ AssertFatal( 0 , "Unknown procedure ID (%d) for initiating message\n",
+ (int)s1ap->pdu.choice.initiatingMessage.procedureCode);
+ }
+ break;
+ case S1AP_PDU_PR_successfulOutcome:
+ switch(s1ap->pdu.choice.successfulOutcome.procedureCode) {
+ case S1ap_ProcedureCode_id_S1Setup: s1ap_xer_print_s1ap_s1setupresponse(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_InitialContextSetup: s1ap_xer_print_s1ap_initialcontextsetupresponse(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_UEContextRelease: s1ap_xer_print_s1ap_uecontextreleasecomplete(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ default:
+ AssertFatal(0, "Unknown procedure ID (%d) for successfull outcome message\n",
+ (int)s1ap->pdu.choice.successfulOutcome.procedureCode);
+ }
+ break;
+
+ case S1AP_PDU_PR_unsuccessfulOutcome:
+ switch(s1ap->pdu.choice.unsuccessfulOutcome.procedureCode) {
+ case S1ap_ProcedureCode_id_S1Setup: s1ap_xer_print_s1ap_s1setupfailure(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ case S1ap_ProcedureCode_id_InitialContextSetup: s1ap_xer_print_s1ap_initialcontextsetupfailure(s1ap_xer__print2sp, message_string, (s1ap_message *)&s1ap->message);break;
+ default:
+ et_free_pointer(message_string);
+ AssertFatal(0,"Unknown procedure ID (%d) for unsuccessfull outcome message\n",
+ (int)s1ap->pdu.choice.unsuccessfulOutcome.procedureCode);
+ break;
+ }
+ break;
+ default:
+ AssertFatal(0, "Unknown presence (%d) or not implemented\n", (int)s1ap->pdu.present);
+ break;
+ }
+ fprintf(stdout, "\t\tSCTP.data XML dump:\n%s\n", message_string);
+ et_free_pointer(message_string);
+ }
+}
+//------------------------------------------------------------------------------
+void et_display_packet_sctp_init(const sctp_inithdr_t * const sctp)
+{
+
+ if (sctp) {
+ fprintf(stdout, "\t\tSCTP.init.init_tag : %u\n", sctp->init_tag);
+ fprintf(stdout, "\t\tSCTP.init.a_rwnd : %u\n", sctp->a_rwnd);
+ fprintf(stdout, "\t\tSCTP.init.num_inbound_streams : %u\n", sctp->num_inbound_streams);
+ fprintf(stdout, "\t\tSCTP.init.num_outbound_streams : %u\n", sctp->num_outbound_streams);
+ fprintf(stdout, "\t\tSCTP.init.initial_tsn : %u\n", sctp->initial_tsn);
+ }
+}
+//------------------------------------------------------------------------------
+void et_display_packet_sctp_initack(const sctp_initackhdr_t * const sctp)
+{
+
+ if (sctp) {
+ fprintf(stdout, "\t\tSCTP.initack.init_tag : %u\n", sctp->init_tag);
+ fprintf(stdout, "\t\tSCTP.initack.a_rwnd : %u\n", sctp->a_rwnd);
+ fprintf(stdout, "\t\tSCTP.initack.num_inbound_streams : %u\n", sctp->num_inbound_streams);
+ fprintf(stdout, "\t\tSCTP.initack.num_outbound_streams : %u\n", sctp->num_outbound_streams);
+ fprintf(stdout, "\t\tSCTP.initack.initial_tsn : %u\n", sctp->initial_tsn);
+ }
+}
+//------------------------------------------------------------------------------
+void et_display_packet_sctp_data(const sctp_datahdr_t * const sctp)
+{
+ if (sctp) {
+ fprintf(stdout, "\t\tSCTP.data.tsn : %u\n", sctp->tsn);
+ fprintf(stdout, "\t\tSCTP.data.stream : %u\n", sctp->stream);
+ fprintf(stdout, "\t\tSCTP.data.ssn : %u\n", sctp->ssn);
+ fprintf(stdout, "\t\tSCTP.data.ppid : %u\n", sctp->ppid);
+ if (sctp->ppid == 18) {
+ et_display_packet_s1ap_data(&sctp->payload);
+ }
+ fprintf(stdout, "\t\tSCTP.data.binary_stream_allocated_size : %u\n", sctp->payload.binary_stream_allocated_size);
+ if (NULL != sctp->payload.binary_stream) {
+ fprintf(stdout, "\t\tSCTP.data.binary_stream :\n");
+ et_print_hex_octets(sctp->payload.binary_stream, sctp->payload.binary_stream_allocated_size);
+ } else {
+ fprintf(stdout, "\t\tSCTP.data.binary_stream : NULL\n");
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+void et_display_packet_sctp(const et_sctp_hdr_t * const sctp)
+{
+ if (sctp) {
+ fprintf(stdout, "\t\tSCTP.src_port : %u\n", sctp->src_port);
+ fprintf(stdout, "\t\tSCTP.dst_port : %u\n", sctp->dst_port);
+ fprintf(stdout, "\t\tSCTP.chunk_type : %s\n", et_chunk_type_cid2str(sctp->chunk_type));
+ switch (sctp->chunk_type) {
+ case SCTP_CID_DATA:
+ et_display_packet_sctp_data(&sctp->u.data_hdr);
+ break;
+ case SCTP_CID_INIT:
+ et_display_packet_sctp_initack(&sctp->u.init_hdr);
+ break;
+ case SCTP_CID_INIT_ACK:
+ et_display_packet_sctp_initack(&sctp->u.init_ack_hdr);
+ break;
+ default:
+ ;
+ }
+ }
+}
+//------------------------------------------------------------------------------
+void et_display_packet_ip(const et_ip_hdr_t * const ip)
+{
+ if (ip) {
+ fprintf(stdout, "\t\tSource address : %s\n", et_ip2ip_str(&ip->src));
+ fprintf(stdout, "\t\tDestination address : %s\n", et_ip2ip_str(&ip->dst));
+ }
+}
+
+//------------------------------------------------------------------------------
+void et_display_packet(const et_packet_t * const packet)
+{
+ if (packet) {
+ fprintf(stdout, "-------------------------------------------------------------------------------\n");
+ fprintf(stdout, "\tPacket:\tnum %u | original frame number %u \n", packet->packet_number, packet->original_frame_number);
+ fprintf(stdout, "\tPacket:\ttime relative to 1st packet %ld.%06lu\n",
+ packet->time_relative_to_first_packet.tv_sec, packet->time_relative_to_first_packet.tv_usec);
+ fprintf(stdout, "\tPacket:\ttime relative to last tx packet %ld.%06lu\n",
+ packet->time_relative_to_last_sent_packet.tv_sec, packet->time_relative_to_last_sent_packet.tv_usec);
+ fprintf(stdout, "\tPacket:\ttime relative to last_received packet %ld.%06lu\n",
+ packet->time_relative_to_last_received_packet.tv_sec, packet->time_relative_to_last_received_packet.tv_usec);
+
+ switch(packet->action) {
+ case ET_PACKET_ACTION_S1C_SEND:
+ fprintf(stdout, "\tPacket:\tAction SEND\n");
+ break;
+ case ET_PACKET_ACTION_S1C_RECEIVE:
+ fprintf(stdout, "\tPacket:\tAction RECEIVE\n");
+ break;
+ default:
+ fprintf(stdout, "\tPacket:\tAction UNKNOWN\n");
+ }
+ switch(packet->status) {
+ case ET_PACKET_STATUS_NONE:
+ fprintf(stdout, "\tPacket:\tStatus NONE\n");
+ break;
+ case ET_PACKET_STATUS_NOT_TAKEN_IN_ACCOUNT:
+ fprintf(stdout, "\tPacket:\tStatus NOT_TAKEN_IN_ACCOUNT\n");
+ break;
+ case ET_PACKET_STATUS_SCHEDULED_FOR_SENDING:
+ fprintf(stdout, "\tPacket:\tStatus SCHEDULED_FOR_SENDING\n");
+ break;
+ case ET_PACKET_STATUS_SENT:
+ fprintf(stdout, "\tPacket:\tStatus SENT\n");
+ break;
+ case ET_PACKET_STATUS_SCHEDULED_FOR_RECEIVING:
+ fprintf(stdout, "\tPacket:\tStatus SCHEDULED_FOR_RECEIVING\n");
+ break;
+ case ET_PACKET_STATUS_RECEIVED:
+ fprintf(stdout, "\tPacket:\tStatus RECEIVED\n");
+ break;
+ default:
+ fprintf(stdout, "\tPacket:\tStatus UNKNOWN\n");
+ }
+ et_display_packet_ip(&packet->ip_hdr);
+ et_display_packet_sctp(&packet->sctp_hdr);
+ }
+}
+//------------------------------------------------------------------------------
+void et_display_scenario(const et_scenario_t * const scenario)
+{
+ et_packet_t *packet = NULL;
+ if (scenario) {
+ fprintf(stdout, "Scenario: %s\n", (scenario->name != NULL) ? (char*)scenario->name:"UNKNOWN NAME");
+ packet = scenario->list_packet;
+ while (packet) {
+ et_display_packet(packet);
+ packet = packet->next;
+ }
+ }
+}
diff --git a/openair3/TEST/EPC_TEST/play_scenario_fsm.c b/openair3/TEST/EPC_TEST/play_scenario_fsm.c
new file mode 100644
index 0000000000..f5b142d2fd
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/play_scenario_fsm.c
@@ -0,0 +1,567 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+
+/*
+ play_scenario_fsm.c
+ -------------------
+ AUTHOR : Lionel GAUTHIER
+ COMPANY : EURECOM
+ EMAIL : Lionel.Gauthier@eurecom.fr
+ */
+#include
+#include
+#include
+
+#include "intertask_interface.h"
+#include "platform_types.h"
+#include "assertions.h"
+#include "play_scenario.h"
+#include "s1ap_ies_defs.h"
+#include "play_scenario_s1ap_eNB_defs.h"
+#include "timer.h"
+
+//------------------------------------------------------------------------------
+extern int g_max_speed;
+//------------------------------------------------------------------------------
+et_scenario_t *g_scenario = NULL;
+pthread_mutex_t g_fsm_lock = PTHREAD_MUTEX_INITIALIZER;
+et_fsm_state_t g_fsm_state = ET_FSM_STATE_NULL;
+uint32_t g_constraints = ET_BIT_MASK_MATCH_SCTP_STREAM | ET_BIT_MASK_MATCH_SCTP_SSN;
+//------------------------------------------------------------------------------
+// it is assumed that if a time is negative tv_sec and tv_usec are both negative
+void timeval_add (struct timeval * const result, const struct timeval * const a, const struct timeval * const b)
+{
+ AssertFatal(((a->tv_sec <= 0) && (a->tv_usec <= 0)) || ((a->tv_sec >= 0) && (a->tv_usec >= 0)), " Bad time format arg a\n");
+ AssertFatal(((b->tv_sec <= 0) && (b->tv_usec <= 0)) || ((b->tv_sec >= 0) && (b->tv_usec >= 0)), " Bad time format arg b\n");
+ // may happen overflows but were are not dealing with very large timings
+ long long int r = a->tv_usec + b->tv_usec + (a->tv_sec + b->tv_sec) * 1000000;
+ result->tv_sec = r / (long long int)1000000;
+ result->tv_usec = r % (long long int)1000000;
+ if ((result != a) && (result != b)) {
+ LOG_D(ENB_APP, "timeval_add(%ld.%06d, %ld.%06d)=%ld.%06d\n", a->tv_sec, a->tv_usec, b->tv_sec, b->tv_usec, result->tv_sec, result->tv_usec);
+ }
+}
+
+//------------------------------------------------------------------------------
+// it is assumed that if a time is negative tv_sec and tv_usec are both negative
+// return true if result is positive
+int timeval_subtract (struct timeval * const result, struct timeval * const a, struct timeval * const b)
+{
+ AssertFatal(((a->tv_sec <= 0) && (a->tv_usec <= 0)) || ((a->tv_sec >= 0) && (a->tv_usec >= 0)), " Bad time format arg a\n");
+ AssertFatal(((b->tv_sec <= 0) && (b->tv_usec <= 0)) || ((b->tv_sec >= 0) && (b->tv_usec >= 0)), " Bad time format arg b\n");
+ // may happen overflows but were are not dealing with very large timings
+ long long int r = a->tv_usec - b->tv_usec + (a->tv_sec - b->tv_sec) * 1000000;
+ result->tv_sec = r / (long long int)1000000;
+ result->tv_usec = r % (long long int)1000000;
+ if ((result != a) && (result != b)) {
+ LOG_D(ENB_APP, "timeval_subtract(%ld.%06d, %ld.%06d)=%ld.%06d\n", a->tv_sec, a->tv_usec, b->tv_sec, b->tv_usec, result->tv_sec, result->tv_usec);
+ }
+ return (result->tv_sec >= 0) && (result->tv_usec >= 0);
+}
+
+//------------------------------------------------------------------------------
+void et_scenario_wait_rx_packet(et_packet_t * const packet)
+{
+ packet->status = ET_PACKET_STATUS_SCHEDULED_FOR_RECEIVING;
+ g_fsm_state = ET_FSM_STATE_WAITING_RX_EVENT;
+ if (timer_setup (ET_FSM_STATE_WAITING_RX_EVENT_DELAY_SEC, 0, TASK_S1AP, INSTANCE_DEFAULT, TIMER_ONE_SHOT,
+ packet, &packet->timer_id) < 0) {
+ AssertFatal(0, " Can not start waiting RX event timer\n");
+ }
+ g_scenario->timer_count++;
+ LOG_D(ENB_APP, "Waiting RX packet num %d original frame number %u\n", packet->packet_number, packet->original_frame_number);
+}
+//------------------------------------------------------------------------------
+void et_scenario_schedule_tx_packet(et_packet_t * packet)
+{
+ s1ap_eNB_instance_t *s1ap_eNB_instance = NULL;
+ struct timeval now = { .tv_sec = 0, .tv_usec = 0 };
+ struct timeval offset_last_tx_packet = { .tv_sec = 0, .tv_usec = 0 };
+ struct timeval offset_last_rx_packet = { .tv_sec = 0, .tv_usec = 0 };
+ struct timeval offset_tx_rx = { .tv_sec = 0, .tv_usec = 0 };
+ struct timeval offset = { .tv_sec = 0, .tv_usec = 0 };
+ int last_packet_was_rx = 0;
+ int we_are_too_late = 0;
+ int original_frame_number = -1;
+
+ AssertFatal(NULL != packet, "packet argument is NULL");
+ s1ap_eNB_instance = et_s1ap_eNB_get_instance(packet->enb_instance);
+ AssertFatal(NULL != s1ap_eNB_instance, "Cannot get s1ap_eNB_instance_t for eNB instance %d", packet->enb_instance);
+
+ LOG_D(ENB_APP, "%s\n", __FUNCTION__);
+ g_fsm_state = ET_FSM_STATE_WAITING_TX_EVENT;
+
+ switch (packet->sctp_hdr.chunk_type) {
+ case SCTP_CID_DATA:
+ // check if we can send it now
+ // TODO: BUG we have to discard in scenario all packets that cannot be processed (SACK, COOKIEs, etc)
+ AssertFatal(gettimeofday(&now, NULL) == 0, "gettimeofday failed");
+ timeval_subtract(&offset_last_tx_packet,&now,&g_scenario->time_last_tx_packet);
+ timeval_subtract(&offset_last_rx_packet,&now,&g_scenario->time_last_rx_packet);
+ LOG_D(ENB_APP, "offset_last_tx_packet=%ld.%06d\n", offset_last_tx_packet.tv_sec, offset_last_tx_packet.tv_usec);
+ LOG_D(ENB_APP, "offset_last_rx_packet=%ld.%06d\n", offset_last_rx_packet.tv_sec, offset_last_rx_packet.tv_usec);
+
+ last_packet_was_rx = timeval_subtract(&offset_tx_rx,&offset_last_tx_packet,&offset_last_rx_packet);
+ if (last_packet_was_rx) {
+ LOG_D(ENB_APP, "last_packet_was_rx\n");
+ we_are_too_late = timeval_subtract(&offset,&offset_last_rx_packet,&packet->time_relative_to_last_received_packet);
+ LOG_D(ENB_APP, "we_are_too_late=%d, offset=%ld.%06d\n", we_are_too_late, offset.tv_sec, offset.tv_usec);
+ } else {
+ LOG_D(ENB_APP, "last_packet_was_tx\n");
+ we_are_too_late = timeval_subtract(&offset,&offset_last_tx_packet,&packet->time_relative_to_last_sent_packet);
+ LOG_D(ENB_APP, "we_are_too_late=%d, offset=%ld.%06d\n", we_are_too_late, offset.tv_sec, offset.tv_usec);
+ }
+ if ((0 == we_are_too_late) && (0 == g_max_speed)){
+ // set timer
+ if ((offset.tv_sec <= 0) || (offset.tv_usec <= 0)){
+ offset.tv_sec = -offset.tv_sec;
+ offset.tv_usec = -offset.tv_usec;
+ }
+
+ LOG_D(ENB_APP, "Send packet num %u original frame number %u in %ld.%06d sec\n",
+ packet->packet_number, packet->original_frame_number, offset.tv_sec, offset.tv_usec);
+
+ packet->status = ET_PACKET_STATUS_SCHEDULED_FOR_SENDING;
+ if (timer_setup (offset.tv_sec, offset.tv_usec, TASK_S1AP, INSTANCE_DEFAULT, TIMER_ONE_SHOT,packet, &packet->timer_id) < 0) {
+ AssertFatal(0, " Can not start TX event timer\n");
+ }
+ g_scenario->timer_count++;
+ // Done g_fsm_state = ET_FSM_STATE_WAITING_TX_EVENT;
+ } else {
+ // send immediately
+ AssertFatal(0 == gettimeofday(&packet->timestamp_packet, NULL), "gettimeofday() Failed");
+ original_frame_number = packet->original_frame_number;
+ do {
+ g_scenario->time_last_tx_packet.tv_sec = packet->timestamp_packet.tv_sec;
+ g_scenario->time_last_tx_packet.tv_usec = packet->timestamp_packet.tv_usec;
+
+ LOG_D(ENB_APP, "Sending packet num %d original frame number %u immediately\n",packet->packet_number, packet->original_frame_number);
+ et_s1ap_eNB_itti_send_sctp_data_req(
+ packet->enb_instance,
+ packet->sctp_hdr.u.data_hdr.assoc_id,
+ packet->sctp_hdr.u.data_hdr.payload.binary_stream,
+ packet->sctp_hdr.u.data_hdr.payload.binary_stream_allocated_size,
+ packet->sctp_hdr.u.data_hdr.stream);
+ packet->status = ET_PACKET_STATUS_SENT;
+ g_scenario->next_packet = g_scenario->next_packet->next;
+ packet = packet->next;
+ } while ((NULL != packet) && (packet->original_frame_number == original_frame_number));
+ g_fsm_state = ET_FSM_STATE_RUNNING;
+ }
+ break;
+ case SCTP_CID_INIT:
+ case SCTP_CID_INIT_ACK:
+ AssertFatal(0, "Invalid case TX packet SCTP_CID_INIT or SCTP_CID_INIT_ACK");
+ break;
+ default:
+ AssertFatal(0, "Invalid case TX packet SCTP_CID %d", packet->sctp_hdr.chunk_type);
+ }
+}
+//------------------------------------------------------------------------------
+et_fsm_state_t et_scenario_fsm_notify_event_state_running(et_event_t event)
+{
+
+ switch (event.code){
+ case ET_EVENT_TICK:
+ while (NULL != g_scenario->next_packet) {
+ LOG_D(ENB_APP, "EVENT_TICK: Considering packet num %d original frame number %u\n", g_scenario->next_packet->packet_number, g_scenario->next_packet->original_frame_number);
+ switch (g_scenario->next_packet->sctp_hdr.chunk_type) {
+ case SCTP_CID_DATA :
+ // no init in this scenario, may be sub-scenario
+ if (g_scenario->next_packet->action == ET_PACKET_ACTION_S1C_SEND) {
+ if (g_scenario->next_packet->status == ET_PACKET_STATUS_NONE) {
+ et_scenario_schedule_tx_packet(g_scenario->next_packet);
+ pthread_mutex_unlock(&g_fsm_lock);
+
+ et_event_t continue_event;
+ continue_event.code = ET_EVENT_TICK;
+ et_scenario_fsm_notify_event(continue_event);
+
+ return g_fsm_state;
+ } else if (g_scenario->next_packet->status != ET_PACKET_STATUS_SCHEDULED_FOR_SENDING) {
+ AssertFatal(0, "Invalid packet status %d", g_scenario->next_packet->status);
+ }
+ } else if (g_scenario->next_packet->action == ET_PACKET_ACTION_S1C_RECEIVE) {
+ if (g_scenario->next_packet->status == ET_PACKET_STATUS_RECEIVED) {
+ g_scenario->next_packet = g_scenario->next_packet->next;
+
+ } else if (g_scenario->next_packet->status == ET_PACKET_STATUS_NONE) {
+ et_scenario_wait_rx_packet(g_scenario->next_packet);
+ pthread_mutex_unlock(&g_fsm_lock);
+ return g_fsm_state;
+ } else {
+ AssertFatal(0, "Invalid packet status %d", g_scenario->next_packet->status);
+ }
+ } else {
+ AssertFatal(0, "Invalid packet action %d", g_scenario->next_packet->action);
+ }
+ break;
+
+ case SCTP_CID_INIT:
+ case SCTP_CID_INIT_ACK:
+ case SCTP_CID_HEARTBEAT:
+ case SCTP_CID_HEARTBEAT_ACK:
+ case SCTP_CID_COOKIE_ECHO:
+ case SCTP_CID_COOKIE_ACK:
+ case SCTP_CID_ECN_ECNE:
+ case SCTP_CID_ECN_CWR:
+ LOG_D(ENB_APP, "EVENT_TICK: Ignoring packet num %d SCTP CID %s\n",
+ g_scenario->next_packet->packet_number,
+ et_chunk_type_cid2str(g_scenario->next_packet->sctp_hdr.chunk_type));
+ g_scenario->next_packet->status = ET_PACKET_STATUS_NOT_TAKEN_IN_ACCOUNT;
+ g_scenario->next_packet = g_scenario->next_packet->next;
+ break;
+
+ case SCTP_CID_ABORT:
+ case SCTP_CID_SHUTDOWN:
+ case SCTP_CID_SHUTDOWN_ACK:
+ case SCTP_CID_ERROR:
+ case SCTP_CID_SHUTDOWN_COMPLETE:
+ AssertFatal(0, "The scenario should be cleaned (packet %s cannot be processed at this time)",
+ et_chunk_type_cid2str(g_scenario->next_packet->sctp_hdr.chunk_type));
+ break;
+
+ default:
+ LOG_D(ENB_APP, "EVENT_TICK: Ignoring packet num %d SCTP CID %s\n",
+ g_scenario->next_packet->packet_number,
+ et_chunk_type_cid2str(g_scenario->next_packet->sctp_hdr.chunk_type));
+ g_scenario->next_packet->status = ET_PACKET_STATUS_NOT_TAKEN_IN_ACCOUNT;
+ g_scenario->next_packet = g_scenario->next_packet->next;
+ }
+ }
+ fprintf(stderr, "No Packet found in this scenario: %s\n", g_scenario->name);
+ g_fsm_state = ET_FSM_STATE_NULL;
+ pthread_mutex_unlock(&g_fsm_lock);
+ if (0 == g_scenario->timer_count) {
+ fprintf(stderr, "End of scenario: %s\n", g_scenario->name);
+ fflush(stderr);
+ fflush(stdout);
+ return 0;
+ //exit(0);
+ }
+ fprintf(stderr, "Remaining timers running: %d\n", g_scenario->timer_count);
+ return g_fsm_state;
+ break;
+ case ET_EVENT_RX_PACKET_TIME_OUT:
+ AssertFatal(0, "Event ET_EVENT_RX_PACKET_TIME_OUT not handled in FSM state ET_FSM_STATE_RUNNING");
+ break;
+ case ET_EVENT_TX_TIMED_PACKET:
+ AssertFatal(0, "Event ET_EVENT_TX_TIMED_PACKET not handled in FSM state ET_FSM_STATE_RUNNING");
+ break;
+ case ET_EVENT_RX_S1AP:
+ et_s1ap_process_rx_packet(&event.u.s1ap_data_ind);
+ break;
+ default:
+ AssertFatal(0, "Case event %d not handled in ET_FSM_STATE_RUNNING", event.code);
+ }
+ pthread_mutex_unlock(&g_fsm_lock);
+ return 0;
+}
+
+//------------------------------------------------------------------------------
+et_fsm_state_t et_scenario_fsm_notify_event_state_waiting_tx(et_event_t event)
+{
+ int rv = 0;
+ int original_frame_number = -1;
+ et_packet_t *packet = NULL;
+
+ switch (event.code){
+ case ET_EVENT_TICK:
+ fprintf(stdout, "EVENT_TICK: waiting for tx event\n");
+ break;
+
+ case ET_EVENT_RX_S1AP:
+ rv = et_s1ap_process_rx_packet(&event.u.s1ap_data_ind);
+ break;
+
+ case ET_EVENT_TX_TIMED_PACKET:
+ // send immediately
+ packet = event.u.tx_timed_packet;
+ AssertFatal(0 == gettimeofday(&packet->timestamp_packet, NULL), "gettimeofday() Failed");
+
+ original_frame_number = packet->original_frame_number;
+ do {
+ g_scenario->time_last_tx_packet.tv_sec = packet->timestamp_packet.tv_sec;
+ g_scenario->time_last_tx_packet.tv_usec = packet->timestamp_packet.tv_usec;
+
+ LOG_D(ENB_APP, "Sending packet num %d original frame number %u immediately\n",packet->packet_number, packet->original_frame_number);
+ et_s1ap_eNB_itti_send_sctp_data_req(
+ packet->enb_instance,
+ packet->sctp_hdr.u.data_hdr.assoc_id,
+ packet->sctp_hdr.u.data_hdr.payload.binary_stream,
+ packet->sctp_hdr.u.data_hdr.payload.binary_stream_allocated_size,
+ packet->sctp_hdr.u.data_hdr.stream);
+ packet->status = ET_PACKET_STATUS_SENT;
+ packet = packet->next;
+ g_scenario->next_packet = packet;
+ } while ( (NULL != packet) && (packet->original_frame_number == original_frame_number));
+ g_fsm_state = ET_FSM_STATE_RUNNING;
+ break;
+
+ case ET_EVENT_RX_PACKET_TIME_OUT:
+ default:
+ AssertFatal(0, "Case event %d not handled in ET_FSM_STATE_WAITING_TX", event.code);
+ }
+ pthread_mutex_unlock(&g_fsm_lock);
+ return 0;
+}
+
+//------------------------------------------------------------------------------
+et_fsm_state_t et_scenario_fsm_notify_event_state_waiting_rx(et_event_t event)
+{
+ int rv = 0;
+ switch (event.code){
+ case ET_EVENT_TICK:
+ fprintf(stdout, "EVENT_TICK: waiting for rx event\n");
+ break;
+
+ case ET_EVENT_RX_PACKET_TIME_OUT:
+ fprintf(stderr, "Error The following packet is not received:\n");
+ //et_display_packet(event.u.rx_packet_time_out);
+ AssertFatal(0, "Waited packet not received");
+ break;
+
+ case ET_EVENT_RX_S1AP:
+ rv = et_s1ap_process_rx_packet(&event.u.s1ap_data_ind);
+ // waited packet
+ if (rv == 0) {
+ g_fsm_state = ET_FSM_STATE_RUNNING;
+ }
+ break;
+
+ case ET_EVENT_TX_TIMED_PACKET:
+ default:
+ AssertFatal(0, "Case event %d not handled in ET_FSM_STATE_WAITING_RX", event.code);
+ }
+ pthread_mutex_unlock(&g_fsm_lock);
+ return 0;
+}
+
+//------------------------------------------------------------------------------
+et_fsm_state_t et_scenario_fsm_notify_event_state_connecting_s1c(et_event_t event)
+{
+
+ switch (event.code){
+ case ET_EVENT_TICK:
+ break;
+
+ case ET_EVENT_S1C_CONNECTED:
+ // hack simulate we have been able to get the right timing values for STCP connect
+ AssertFatal(gettimeofday(&g_scenario->time_last_rx_packet, NULL) == 0, "gettimeofday failed");
+
+ while (NULL != g_scenario->next_packet) {
+ switch (g_scenario->next_packet->sctp_hdr.chunk_type) {
+ case SCTP_CID_DATA :
+ // no init in this scenario, may be sub-scenario
+ if (g_scenario->next_packet->action == ET_PACKET_ACTION_S1C_SEND) {
+ et_scenario_schedule_tx_packet(g_scenario->next_packet);
+ pthread_mutex_unlock(&g_fsm_lock);
+
+ et_event_t continue_event;
+ continue_event.code = ET_EVENT_TICK;
+ et_scenario_fsm_notify_event(continue_event);
+
+ return g_fsm_state;
+ } else if (g_scenario->next_packet->action == ET_PACKET_ACTION_S1C_RECEIVE) {
+ if (g_scenario->next_packet->status == ET_PACKET_STATUS_RECEIVED) {
+ g_scenario->last_rx_packet = g_scenario->next_packet;
+ g_scenario->time_last_rx_packet = g_scenario->last_rx_packet->timestamp_packet;
+ g_scenario->next_packet = g_scenario->next_packet->next;
+
+ } else if (g_scenario->next_packet->status == ET_PACKET_STATUS_NONE) {
+ et_scenario_wait_rx_packet(g_scenario->next_packet);
+ pthread_mutex_unlock(&g_fsm_lock);
+ return g_fsm_state;
+ } else {
+ AssertFatal(0, "Invalid packet status %d", g_scenario->next_packet->status);
+ }
+ } else {
+ AssertFatal(0, "Invalid packet action %d", g_scenario->next_packet->action);
+ }
+ break;
+
+ case SCTP_CID_INIT:
+ case SCTP_CID_INIT_ACK:
+ case SCTP_CID_HEARTBEAT:
+ case SCTP_CID_HEARTBEAT_ACK:
+ case SCTP_CID_COOKIE_ECHO:
+ case SCTP_CID_COOKIE_ACK:
+ case SCTP_CID_ECN_ECNE:
+ case SCTP_CID_ECN_CWR:
+ g_scenario->next_packet->status = ET_PACKET_STATUS_NOT_TAKEN_IN_ACCOUNT;
+ g_scenario->next_packet = g_scenario->next_packet->next;
+ break;
+
+ case SCTP_CID_ABORT:
+ case SCTP_CID_SHUTDOWN:
+ case SCTP_CID_SHUTDOWN_ACK:
+ case SCTP_CID_ERROR:
+ case SCTP_CID_SHUTDOWN_COMPLETE:
+ AssertFatal(0, "The scenario should be cleaned (packet %s cannot be processed at this time)",
+ et_chunk_type_cid2str(g_scenario->next_packet->sctp_hdr.chunk_type));
+ break;
+
+ default:
+ g_scenario->next_packet->status = ET_PACKET_STATUS_NOT_TAKEN_IN_ACCOUNT;
+ g_scenario->next_packet = g_scenario->next_packet->next;
+ }
+ }
+ fprintf(stderr, "No Packet found in this scenario: %s\n", g_scenario->name);
+ g_fsm_state = ET_FSM_STATE_NULL;
+ pthread_mutex_unlock(&g_fsm_lock);
+ if (0 == g_scenario->timer_count) {
+ fprintf(stderr, "End of scenario: %s\n", g_scenario->name);
+ fflush(stderr);
+ fflush(stdout);
+ exit(0);
+ }
+ fprintf(stderr, "Remaining timers running: %d\n", g_scenario->timer_count);
+ return g_fsm_state;
+ break;
+
+ default:
+ AssertFatal(0, "Case event %d not handled in ET_FSM_STATE_CONNECTING_S1C", event.code);
+ }
+ pthread_mutex_unlock(&g_fsm_lock);
+ return 0;
+}
+//------------------------------------------------------------------------------
+et_fsm_state_t et_scenario_fsm_notify_event_state_null(et_event_t event)
+{
+ switch (event.code){
+ case ET_EVENT_TICK:
+ break;
+
+ case ET_EVENT_INIT:
+ AssertFatal(NULL == g_scenario, "Current scenario not ended");
+ g_scenario = event.u.init.scenario;
+ g_scenario->next_packet = g_scenario->list_packet;
+ g_scenario->last_rx_packet = NULL;
+ g_scenario->last_tx_packet = NULL;
+
+ while (NULL != g_scenario->next_packet) {
+ switch (g_scenario->next_packet->sctp_hdr.chunk_type) {
+
+ case SCTP_CID_DATA :
+ // no init in this scenario, may be sub-scenario, ...
+ if (g_scenario->next_packet->action == ET_PACKET_ACTION_S1C_SEND) {
+ et_scenario_schedule_tx_packet(g_scenario->next_packet);
+ pthread_mutex_unlock(&g_fsm_lock);
+
+ et_event_t continue_event;
+ continue_event.code = ET_EVENT_TICK;
+ et_scenario_fsm_notify_event(continue_event);
+
+ return g_fsm_state;
+ } else if (g_scenario->next_packet->action == ET_PACKET_ACTION_S1C_RECEIVE) {
+ if (g_scenario->next_packet->status == ET_PACKET_STATUS_RECEIVED) {
+ g_scenario->last_rx_packet = g_scenario->next_packet;
+ g_scenario->time_last_rx_packet = g_scenario->last_rx_packet->timestamp_packet;
+ g_scenario->next_packet = g_scenario->next_packet->next;
+
+ } else if (g_scenario->next_packet->status == ET_PACKET_STATUS_NONE) {
+ et_scenario_wait_rx_packet(g_scenario->next_packet);
+ pthread_mutex_unlock(&g_fsm_lock);
+ return g_fsm_state;
+ } else {
+ AssertFatal(0, "Invalid packet status %d", g_scenario->next_packet->status);
+ }
+ } else {
+ AssertFatal(0, "Invalid packet action %d", g_scenario->next_packet->action);
+ }
+ break;
+
+ case SCTP_CID_INIT:
+ case SCTP_CID_INIT_ACK:
+ g_scenario->enb_properties = (Enb_properties_array_t *)et_enb_config_get();
+ g_scenario->hash_old_ue_mme_id2ue_mme_id = hashtable_create (256,NULL,NULL);
+ g_scenario->hash_mme2association_id = hashtable_create (256,NULL,NULL);
+ // Try to register each eNB
+ g_scenario->registered_enb = 0;
+ g_fsm_state = ET_FSM_STATE_CONNECTING_S1C;
+ AssertFatal(gettimeofday(&g_scenario->time_last_tx_packet, NULL) == 0, "gettimeofday failed");
+ et_eNB_app_register (g_scenario->enb_properties);
+ pthread_mutex_unlock(&g_fsm_lock);
+ return g_fsm_state;
+ break;
+
+ case SCTP_CID_HEARTBEAT:
+ case SCTP_CID_HEARTBEAT_ACK:
+ case SCTP_CID_COOKIE_ECHO:
+ case SCTP_CID_COOKIE_ACK:
+ case SCTP_CID_ECN_ECNE:
+ case SCTP_CID_ECN_CWR:
+ g_scenario->next_packet->status = ET_PACKET_STATUS_NOT_TAKEN_IN_ACCOUNT;
+ g_scenario->next_packet = g_scenario->next_packet->next;
+ break;
+
+ case SCTP_CID_ABORT:
+ case SCTP_CID_SHUTDOWN:
+ case SCTP_CID_SHUTDOWN_ACK:
+ case SCTP_CID_ERROR:
+ case SCTP_CID_SHUTDOWN_COMPLETE:
+ AssertFatal(0, "The scenario should be cleaned (packet %s cannot be processed at this time)",
+ et_chunk_type_cid2str(g_scenario->next_packet->sctp_hdr.chunk_type));
+ break;
+
+ default:
+ g_scenario->next_packet->status = ET_PACKET_STATUS_NOT_TAKEN_IN_ACCOUNT;
+ g_scenario->next_packet = g_scenario->next_packet->next;
+ }
+ }
+ fprintf(stderr, "No Useful packet found in this scenario: %s\n", g_scenario->name);
+ g_fsm_state = ET_FSM_STATE_NULL;
+ pthread_mutex_unlock(&g_fsm_lock);
+ return g_fsm_state;
+ break;
+
+ default:
+ AssertFatal(0, "Case event %d not handled in ET_FSM_STATE_NULL", event.code);
+ }
+ return 0;
+}
+
+//------------------------------------------------------------------------------
+et_fsm_state_t et_scenario_fsm_notify_event(et_event_t event)
+{
+ AssertFatal((event.code >= ET_EVENT_START) && (event.code < ET_EVENT_END), "Unknown et_event_t.code %d", event.code);
+
+ pthread_mutex_lock(&g_fsm_lock);
+ switch (g_fsm_state){
+ case ET_FSM_STATE_NULL: return et_scenario_fsm_notify_event_state_null(event); break;
+ case ET_FSM_STATE_CONNECTING_S1C: return et_scenario_fsm_notify_event_state_connecting_s1c(event); break;
+ case ET_FSM_STATE_WAITING_TX_EVENT: return et_scenario_fsm_notify_event_state_waiting_tx(event); break;
+ case ET_FSM_STATE_WAITING_RX_EVENT: return et_scenario_fsm_notify_event_state_waiting_rx(event); break;
+ case ET_FSM_STATE_RUNNING: return et_scenario_fsm_notify_event_state_running(event); break;
+ default:
+ AssertFatal(0, "Case fsm_state %d not handled", g_fsm_state);
+ }
+ pthread_mutex_unlock(&g_fsm_lock);
+ return g_fsm_state;
+}
diff --git a/openair3/TEST/EPC_TEST/play_scenario_parse.c b/openair3/TEST/EPC_TEST/play_scenario_parse.c
new file mode 100644
index 0000000000..e4f7b48c51
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/play_scenario_parse.c
@@ -0,0 +1,600 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+
+/*
+ play_scenario_parse.c
+ -------------------
+ AUTHOR : Lionel GAUTHIER
+ COMPANY : EURECOM
+ EMAIL : Lionel.Gauthier@eurecom.fr
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "intertask_interface.h"
+#include "platform_types.h"
+#include "assertions.h"
+#include "play_scenario.h"
+//------------------------------------------------------------------------------
+#define ENB_CONFIG_MAX_XSLT_PARAMS 32
+//------------------------------------------------------------------------------
+extern Enb_properties_array_t g_enb_properties;
+//------------------------------------------------------------------------------
+void et_parse_s1ap(xmlDocPtr doc, const xmlNode const *s1ap_node, et_s1ap_t * const s1ap)
+{
+ xmlNodePtr cur_node = NULL;
+ xmlChar *xml_char = NULL;
+ xmlChar *xml_char2 = NULL;
+ unsigned int size = 0;
+ int rc = 0;
+ unsigned int go_deeper_in_tree = 1;
+
+ if ((NULL != s1ap_node) && (NULL != s1ap)) {
+ // see http://www.xmlsoft.org/html/libxml-tree.html#xmlCopyNode
+ if (NULL == s1ap->doc) {
+ xmlUnlinkNode(s1ap_node);
+ //cur_node = xmlCopyNodeList(s1ap_node);
+ // arg2: if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)
+ //cur_node = xmlCopyNode(s1ap_node, 1);
+ //AssertFatal(NULL != cur_node, "xmlCopyNode Failed");
+ s1ap->doc = xmlNewDoc(BAD_CAST "1.0");
+ xmlDocSetRootElement(s1ap->doc, s1ap_node);
+ }
+
+ for (cur_node = (xmlNode *)s1ap_node; cur_node; cur_node = cur_node->next) {
+ go_deeper_in_tree = 1;
+ if ((!xmlStrcmp(cur_node->name, (const xmlChar *)"field"))) {
+ // do not get hidden fields
+ xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"hide");
+ if (NULL != xml_char) {
+ if ((!xmlStrcmp(xml_char, (const xmlChar *)"yes"))) {
+ go_deeper_in_tree = 0;
+ }
+ xmlFree(xml_char);
+ }
+ if (0 < go_deeper_in_tree) {
+ // first get size
+ xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"size");
+ if (NULL != xml_char) {
+ size = strtoul((const char *)xml_char, NULL, 0);
+ xmlFree(xml_char);
+ // second: try to get value (always hex)
+ xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"value");
+ if (NULL != xml_char) {
+ xml_char2 = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"name");
+ fprintf(stdout, "s1ap %p field name %s size %d value %s\n",s1ap, xml_char2, size, xml_char);
+ xmlFree(xml_char2);
+ // if success to get value, do not parse children
+ //AssertFatal ((xmlStrlen(xml_char) == size), "ERROR %s() mismatch in size %d and strlen %d\n", __FUNCTION__, size, xmlStrlen(xml_char));
+ //if (xmlStrlen(xml_char) == size) {
+ AssertFatal ((s1ap->binary_stream_pos+xmlStrlen(xml_char)/2) <= s1ap->binary_stream_allocated_size,
+ "ERROR in buffer size: binary_stream_pos %d xmlStrlen(xml_char)/2=%d\n", s1ap->binary_stream_pos, xmlStrlen(xml_char)/2);
+ rc = et_hex2data( &s1ap->binary_stream[s1ap->binary_stream_pos], xml_char, xmlStrlen(xml_char));
+ s1ap->binary_stream_pos += xmlStrlen(xml_char)/2;
+ //et_display_node(cur_node, 0);
+ AssertFatal (rc >= 0, "ERROR in converting hex string %s len %d size %d rc %d\n", xml_char, xmlStrlen(xml_char), size, rc);
+ go_deeper_in_tree = 0;
+ //}
+ xmlFree(xml_char);
+ }
+ }
+ }
+ }
+ if (0 < go_deeper_in_tree) {
+ et_parse_s1ap(doc, cur_node->children, s1ap);
+ }
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+void et_parse_sctp_data_chunk(xmlDocPtr doc, const xmlNode const *sctp_node, sctp_datahdr_t * const sctp_hdr)
+{
+ xmlNode *cur_node = NULL;
+ xmlChar *xml_char = NULL;
+ xmlChar *xml_char2 = NULL;
+
+ if ((NULL != sctp_node) && (NULL != sctp_hdr)) {
+ xml_char = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"name");
+ if (NULL != xml_char) {
+ if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.data_payload_proto_id"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"show");
+ if (NULL != xml_char2) {
+ sctp_hdr->ppid = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.data_sid"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"show");
+ if (NULL != xml_char2) {
+ sctp_hdr->stream = strtoul((const char *)xml_char2, NULL, 16);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.data_tsn"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"show");
+ if (NULL != xml_char2) {
+ sctp_hdr->tsn = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.data_ssn"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"show");
+ if (NULL != xml_char2) {
+ sctp_hdr->ssn = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ }
+ }
+ xmlFree(xml_char);
+ }
+ for (cur_node = sctp_node->children; cur_node; cur_node = cur_node->next) {
+ et_parse_sctp_data_chunk(doc, cur_node, sctp_hdr);
+ }
+ }
+
+}
+//------------------------------------------------------------------------------
+void et_parse_sctp_init_chunk(xmlDocPtr doc, const xmlNode const *sctp_node, sctp_inithdr_t * const sctp_hdr)
+{
+ xmlNode *cur_node = NULL;
+ xmlChar *xml_char = NULL;
+ xmlChar *xml_char2 = NULL;
+
+ if ((NULL != sctp_node) && (NULL != sctp_hdr)) {
+ xml_char = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"name");
+ if (NULL != xml_char) {
+ if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.init_nr_out_streams"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"value");
+ if (NULL != xml_char2) {
+ sctp_hdr->num_outbound_streams = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.init_nr_in_streams"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"value");
+ if (NULL != xml_char2) {
+ sctp_hdr->num_inbound_streams = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.init_credit"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"value");
+ if (NULL != xml_char2) {
+ sctp_hdr->a_rwnd = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.init_initial_tsn"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"show");
+ if (NULL != xml_char2) {
+ sctp_hdr->initial_tsn = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.init_initiate_tag"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"show");
+ if (NULL != xml_char2) {
+ sctp_hdr->init_tag = strtoul((const char *)xml_char2, NULL, 16);
+ xmlFree(xml_char2);
+ }
+ }
+ xmlFree(xml_char);
+ }
+ for (cur_node = sctp_node->children; cur_node; cur_node = cur_node->next) {
+ et_parse_sctp_init_chunk(doc, cur_node, sctp_hdr);
+ }
+ }
+}
+//------------------------------------------------------------------------------
+void et_parse_sctp_init_ack_chunk(xmlDocPtr doc, const xmlNode const *sctp_node, sctp_initackhdr_t * const sctp_hdr)
+{
+ xmlNode *cur_node = NULL;
+ xmlChar *xml_char = NULL;
+ xmlChar *xml_char2 = NULL;
+
+ if ((NULL != sctp_node) && (NULL != sctp_hdr)) {
+ xml_char = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"name");
+ if (NULL != xml_char) {
+ if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.initack_nr_out_streams"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"value");
+ if (NULL != xml_char2) {
+ sctp_hdr->num_outbound_streams = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.initack_nr_in_streams"))) {
+ xml_char2 = xmlGetProp((xmlNode *)(xmlNode *)sctp_node, (const xmlChar *)"value");
+ if (NULL != xml_char2) {
+ sctp_hdr->num_inbound_streams = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.initack_credit"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"value");
+ if (NULL != xml_char2) {
+ sctp_hdr->a_rwnd = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.initack_initial_tsn"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"show");
+ if (NULL != xml_char2) {
+ sctp_hdr->initial_tsn = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.initack_initiate_tag"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"show");
+ if (NULL != xml_char2) {
+ sctp_hdr->init_tag = strtoul((const char *)xml_char2, NULL, 16);
+ xmlFree(xml_char2);
+ }
+ }
+ xmlFree(xml_char);
+ }
+ for (cur_node = sctp_node->children; cur_node; cur_node = cur_node->next) {
+ et_parse_sctp_init_ack_chunk(doc, cur_node, sctp_hdr);
+ }
+ }
+}
+//------------------------------------------------------------------------------
+void et_parse_sctp(xmlDocPtr doc, const xmlNode const *sctp_node, et_sctp_hdr_t * const sctp_hdr)
+{
+ xmlNode *cur_node = NULL;
+ xmlChar *xml_char = NULL;
+ xmlChar *xml_char2 = NULL;
+
+ if ((NULL != sctp_node) && (NULL != sctp_hdr)) {
+ if ((!xmlStrcmp(sctp_node->name, (const xmlChar *)"proto"))) {
+ xml_char = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"name");
+ if (NULL != xml_char) {
+ if ((!xmlStrcmp(xml_char, (const xmlChar *)"s1ap"))) {
+ xmlFree(xml_char);
+ xml_char = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"pos");
+ if (NULL != xml_char) {
+ sctp_hdr->u.data_hdr.payload.xml_stream_pos_offset = strtoul((const char *)xml_char, NULL, 0);
+ xmlFree(xml_char);
+
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"size");
+ if (NULL != xml_char2) {
+ sctp_hdr->u.data_hdr.payload.binary_stream_allocated_size = strtoul((const char *)xml_char2, NULL, 0);
+ sctp_hdr->u.data_hdr.payload.binary_stream = calloc(1, sctp_hdr->u.data_hdr.payload.binary_stream_allocated_size);
+ sctp_hdr->u.data_hdr.payload.binary_stream_pos = 0;
+ fprintf(stdout, "Allocating payload of sctp_hdr %p %u bytes\n", sctp_hdr, sctp_hdr->u.data_hdr.payload.binary_stream_allocated_size);
+ xmlFree(xml_char2);
+ }
+ et_parse_s1ap(doc, sctp_node, &sctp_hdr->u.data_hdr.payload);
+ et_decode_s1ap(&sctp_hdr->u.data_hdr.payload);
+ return;
+ }
+ }
+ xmlFree(xml_char);
+ }
+ }
+ //if ((cur_node->type == XML_ATTRIBUTE_NODE) || (cur_node->type == XML_ELEMENT_NODE)) {
+ xml_char = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"name");
+ if (NULL != xml_char) {
+ if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.srcport"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"value");
+ if (NULL != xml_char2) {
+ sctp_hdr->src_port = strtoul((const char *)xml_char2, NULL, 16);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.dstport"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"value");
+ if (NULL != xml_char2) {
+ sctp_hdr->dst_port = strtoul((const char *)xml_char2, NULL, 16);
+ xmlFree(xml_char2);
+ }
+ } else if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp.chunk_type"))) {
+ xml_char2 = xmlGetProp((xmlNode *)sctp_node, (const xmlChar *)"value");
+ if (NULL != xml_char2) {
+ sctp_hdr->chunk_type = strtoul((const char *)xml_char2, NULL, 0);
+ xmlFree(xml_char2);
+ switch (sctp_hdr->chunk_type) {
+ case SCTP_CID_DATA:
+ et_parse_sctp_data_chunk(doc, sctp_node->parent, &sctp_hdr->u.data_hdr);
+ break;
+ case SCTP_CID_INIT:
+ et_parse_sctp_init_chunk(doc, sctp_node->parent, &sctp_hdr->u.init_hdr);
+ break;
+ case SCTP_CID_INIT_ACK:
+ et_parse_sctp_init_ack_chunk(doc, sctp_node->parent, &sctp_hdr->u.init_ack_hdr);
+ break;
+ default:
+ ;
+ }
+ }
+ }
+ }
+ for (cur_node = sctp_node->children; cur_node; cur_node = cur_node->next) {
+ et_parse_sctp(doc, cur_node, sctp_hdr);
+ }
+ }
+}
+//------------------------------------------------------------------------------
+void et_packet_shift_timing(et_packet_t * const packet, const struct timeval * const shift)
+{
+ timeval_add(&packet->time_relative_to_first_packet, &packet->time_relative_to_first_packet, shift);
+ AssertFatal((packet->time_relative_to_first_packet.tv_sec >= 0) && (packet->time_relative_to_first_packet.tv_usec >= 0),
+ "Bad timing result time_relative_to_first_packet=%d.%d packet num %u, original frame number %u",
+ packet->time_relative_to_first_packet.tv_sec,
+ packet->time_relative_to_first_packet.tv_usec,
+ packet->packet_number,
+ packet->original_frame_number);
+
+ timeval_add(&packet->time_relative_to_last_received_packet, &packet->time_relative_to_last_received_packet, shift);
+ AssertFatal((packet->time_relative_to_last_received_packet.tv_sec >= 0) && (packet->time_relative_to_last_received_packet.tv_usec >= 0),
+ "Bad timing result time_relative_to_last_received_packet=%d.%d packet num %u, original frame number %u",
+ packet->time_relative_to_last_received_packet.tv_sec,
+ packet->time_relative_to_last_received_packet.tv_usec,
+ packet->packet_number,
+ packet->original_frame_number);
+
+ timeval_add(&packet->time_relative_to_last_sent_packet, &packet->time_relative_to_last_sent_packet, shift);
+ AssertFatal((packet->time_relative_to_last_sent_packet.tv_sec >= 0) && (packet->time_relative_to_last_sent_packet.tv_usec >= 0),
+ "Bad timing result time_relative_to_last_sent_packet=%d.%d packet num %u, original frame number %u",
+ packet->time_relative_to_last_sent_packet.tv_sec,
+ packet->time_relative_to_last_sent_packet.tv_usec,
+ packet->packet_number,
+ packet->original_frame_number);
+}
+
+//------------------------------------------------------------------------------
+et_packet_t* et_parse_xml_packet(xmlDocPtr doc, xmlNodePtr node)
+{
+
+ et_packet_t *packet = NULL;
+ xmlNode *cur_node = NULL;
+ xmlChar *xml_char = NULL;
+ float afloat = (float)0.0;
+ static struct timeval initial_time = { .tv_sec = 0, .tv_usec = 0 };
+ static struct timeval relative_last_sent_packet = { .tv_sec = 0, .tv_usec = 0 };
+ static struct timeval relative_last_received_packet = { .tv_sec = 0, .tv_usec = 0 };
+ static char first_packet = 1;
+ static char first_sent_packet = 1;
+ static char first_received_packet = 1;
+ static unsigned int packet_number = 1;
+
+
+ if (NULL != node) {
+ packet = calloc(1, sizeof(*packet));
+
+ xml_char = xmlGetProp(node, (const xmlChar *)"action");
+ packet->action = et_action_str2et_action_t(xml_char);
+ packet->status = ET_PACKET_STATUS_NONE;
+ xmlFree(xml_char);
+ packet->packet_number = packet_number++;
+
+ for (cur_node = node->children; cur_node; cur_node = cur_node->next) {
+ //if (cur_node->type == XML_ELEMENT_NODE) {
+ if ((!xmlStrcmp(cur_node->name, (const xmlChar *)"frame.time_relative"))) {
+ xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"value");
+ afloat = atof((const char*)xml_char);
+ xmlFree(xml_char);
+ fprintf(stdout, "Parsing packet frame.time_relative: %f\n", afloat);
+ packet->time_relative_to_first_packet.tv_sec = (int)afloat;
+ packet->time_relative_to_first_packet.tv_usec = (int)((afloat - packet->time_relative_to_first_packet.tv_sec)*1000000.0);
+
+ if (first_packet > 0) {
+ initial_time = packet->time_relative_to_first_packet;
+ packet->time_relative_to_first_packet.tv_sec = 0;
+ packet->time_relative_to_first_packet.tv_usec = 0;
+ first_packet = 0;
+ } else {
+ timersub(&packet->time_relative_to_first_packet, &initial_time,
+ &packet->time_relative_to_first_packet);
+ }
+ } else if ((!xmlStrcmp(cur_node->name, (const xmlChar *)"frame.number"))) {
+ xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"value");
+ packet->original_frame_number = strtoul((const char *)xml_char, NULL, 0);
+ fprintf(stdout, "Parsing packet frame.number: %u\n", packet->original_frame_number);
+ xmlFree(xml_char);
+ } else if ((!xmlStrcmp(cur_node->name, (const xmlChar *)"ip.src"))) {
+ xml_char = xmlNodeListGetString(doc, cur_node->xmlChildrenNode, 1);
+ et_ip_str2et_ip(xml_char, &packet->ip_hdr.src);
+ xmlFree(xml_char);
+ } else if ((!xmlStrcmp(cur_node->name, (const xmlChar *)"ip.dst"))) {
+ xml_char = xmlNodeListGetString(doc, cur_node->xmlChildrenNode, 1);
+ et_ip_str2et_ip(xml_char, &packet->ip_hdr.dst);
+ xmlFree(xml_char);
+ } else if ((!xmlStrcmp(cur_node->name, (const xmlChar *)"proto"))) {
+ xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"name");
+ if (NULL != xml_char) {
+ if ((!xmlStrcmp(xml_char, (const xmlChar *)"sctp"))) {
+ et_parse_sctp(doc, cur_node, &packet->sctp_hdr);
+ }
+ xmlFree(xml_char);
+ }
+ } else if ((!xmlStrcmp(cur_node->name, (const xmlChar *)"eNB.instance"))) {
+ xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"value");
+ packet->enb_instance = strtoul((const char *)xml_char, NULL, 0);
+ xmlFree(xml_char);
+ }
+ //}
+ }
+ }
+ return packet;
+}
+//------------------------------------------------------------------------------
+et_scenario_t* et_generate_scenario(
+ const char * const tsml_out_scenario_filename)
+{
+ xmlDocPtr doc = NULL;
+ xmlNodePtr root = NULL;
+ xmlNodePtr node = NULL;
+ xmlChar *xml_char = NULL;
+ et_scenario_t *scenario = NULL;
+ et_packet_t *last_packet = NULL;
+ et_packet_t *packet = NULL;
+ et_packet_t **next_packet = NULL;
+
+ doc = xmlParseFile(tsml_out_scenario_filename);
+ if (NULL == doc) {
+ AssertFatal (0, "Could not parse scenario xml file %s!\n", tsml_out_scenario_filename);
+ } else {
+ fprintf(stdout, "Test scenario file to play: %s\n", tsml_out_scenario_filename);
+ //xmlDebugDumpDocument(NULL, doc);
+ }
+
+ // Get root
+ root = xmlDocGetRootElement(doc);
+ if (NULL != root) {
+ if ((!xmlStrcmp(root->name, (const xmlChar *)"scenario"))) {
+ xml_char = xmlGetProp(root, (const xmlChar *)"name");
+ printf("scenario name: %s\n", xml_char);
+ scenario = calloc(1, sizeof(*scenario));
+ scenario->name = xml_char; // nodup nofree
+
+ next_packet = &scenario->list_packet;
+ for (node = root->children; node != NULL; node = node->next) {
+ if ((!xmlStrcmp(node->name, (const xmlChar *)"packet"))) {
+ packet = et_parse_xml_packet(doc, node);
+ if (NULL != packet) {
+ // special case: S1AP same frame for 2 packets
+ if (NULL != last_packet) {
+ if (last_packet->original_frame_number == packet->original_frame_number) {
+ // updating because these informations are not in 2nd sctp header (same IP packet)
+ packet->sctp_hdr.dst_port = last_packet->sctp_hdr.dst_port;
+ packet->sctp_hdr.src_port = last_packet->sctp_hdr.src_port;
+ }
+ }
+ *next_packet = packet;
+ next_packet = &packet->next;
+ } else {
+ fprintf(stdout, "WARNING omitted packet\n");
+ }
+ }
+ last_packet = packet;
+ }
+ }
+ } else {
+ fprintf(stderr, "Empty xml document\n");
+ }
+ xmlFreeDoc(doc);
+ xmlCleanupParser();
+ return scenario;
+}
+//------------------------------------------------------------------------------
+int et_generate_xml_scenario(
+ const char const * xml_in_dir_name,
+ const char const * xml_in_scenario_filename,
+ const char const * enb_config_filename,
+ char const * tsml_out_scenario_filename)
+//------------------------------------------------------------------------------
+{
+ //int fd_pdml_in;
+ xsltStylesheetPtr cur = NULL;
+ xmlDocPtr doc, res;
+ FILE *play_scenario_file = NULL;
+ const char *params[2*ENB_CONFIG_MAX_XSLT_PARAMS];
+ int nb_params = 0;
+ int i,j;
+ char astring[1024];
+ struct in_addr addr;
+ int ret = 0;
+
+ memset(astring, 0, sizeof(astring));
+ if (getcwd(astring, sizeof(astring)) != NULL) {
+ fprintf(stdout, "working in %s directory\n", astring);
+ } else {
+ perror("getcwd() ERROR");
+ exit(1);
+ }
+
+
+ xmlSubstituteEntitiesDefault(1);
+ xmlLoadExtDtdDefaultValue = 1;
+ cur = xsltParseStylesheetFile((const xmlChar *)"/usr/share/oai/xsl/play_scenario.xsl");
+ if (NULL == cur) {
+ AssertFatal (0, "Could not parse stylesheet file /usr/share/oai/xsl/play_scenario.xsl!\n");
+ } else {
+ fprintf(stdout, "XSLT style sheet: /usr/share/oai/xsl/play_scenario.xsl\n");
+ }
+
+ doc = xmlParseFile(xml_in_scenario_filename);
+ if (NULL == doc) {
+ AssertFatal (0, "Could not parse scenario xml file %s!\n", xml_in_scenario_filename);
+ } else {
+ fprintf(stdout, "Test scenario file: %s\n", xml_in_scenario_filename);
+ }
+
+ for (i = 0; i < g_enb_properties.number; i++) {
+ // eNB S1-C IPv4 address
+ sprintf(astring, "enb%d_s1c", i);
+ params[nb_params++] = strdup(astring);
+ addr.s_addr = g_enb_properties.properties[i]->enb_ipv4_address_for_S1_MME;
+ sprintf(astring, "\"%s\"", inet_ntoa(addr));
+ params[nb_params++] = strdup(astring);
+
+ // MME S1-C IPv4 address
+ for (j = 0; j < g_enb_properties.properties[i]->nb_mme; j++) {
+ sprintf(astring, "mme%d_s1c_%d", i, j);
+ params[nb_params++] = strdup(astring);
+ AssertFatal (g_enb_properties.properties[i]->mme_ip_address[j].ipv4_address,
+ "Only support MME IPv4 address\n");
+ sprintf(astring, "\"%s\"", g_enb_properties.properties[i]->mme_ip_address[j].ipv4_address);
+ params[nb_params++] = strdup(astring);
+ }
+ }
+ params[nb_params] = NULL;
+ res = xsltApplyStylesheet(cur, doc, params);
+ if (NULL != res) {
+ sprintf((char *)tsml_out_scenario_filename,"%s",xml_in_scenario_filename);
+ if (et_strip_extension((char *)tsml_out_scenario_filename) > 0) {
+ strcat((char *)tsml_out_scenario_filename, ".tsml");
+ play_scenario_file = fopen( tsml_out_scenario_filename, "w+");
+ if (NULL != play_scenario_file) {
+ xsltSaveResultToFile(play_scenario_file, res, cur);
+ fclose(play_scenario_file);
+ fprintf(stdout, "Wrote test scenario to %s\n", tsml_out_scenario_filename);
+ } else {
+ fprintf(stderr, "ERROR in fopen(%s)\n", tsml_out_scenario_filename);
+ ret = -1;
+ }
+ } else {
+ fprintf(stderr, "ERROR in strip_extension()\n");
+ ret = -1;
+ }
+ } else {
+ fprintf(stderr, "ERROR in xsltApplyStylesheet()\n");
+ ret = -1;
+ }
+ xsltFreeStylesheet(cur);
+ xmlFreeDoc(doc);
+ xmlFreeDoc(res);
+
+ xsltCleanupGlobals();
+ xmlCleanupParser();
+ return ret;
+}
+
diff --git a/openair3/TEST/EPC_TEST/play_scenario_s1ap.c b/openair3/TEST/EPC_TEST/play_scenario_s1ap.c
new file mode 100644
index 0000000000..5d5a3672d3
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/play_scenario_s1ap.c
@@ -0,0 +1,1175 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+
+/*
+ play_scenario_s1ap.c
+ -------------------
+ AUTHOR : Lionel GAUTHIER
+ COMPANY : EURECOM
+ EMAIL : Lionel.Gauthier@eurecom.fr
+ */
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "tree.h"
+#include "queue.h"
+
+
+#include "intertask_interface.h"
+#include "timer.h"
+#include "platform_types.h"
+#include "assertions.h"
+#include "conversions.h"
+#include "s1ap_common.h"
+#include "play_scenario_s1ap_eNB_defs.h"
+#include "play_scenario.h"
+#include "msc.h"
+//------------------------------------------------------------------------------
+s1ap_eNB_internal_data_t s1ap_eNB_internal_data;
+RB_GENERATE(s1ap_mme_map, s1ap_eNB_mme_data_s, entry, et_s1ap_eNB_compare_assoc_id);
+//------------------------------------------------------------------------------
+extern et_scenario_t *g_scenario;
+extern uint32_t g_constraints;
+//------------------------------------------------------------------------------
+int et_s1ap_eNB_compare_assoc_id(
+ struct s1ap_eNB_mme_data_s *p1, struct s1ap_eNB_mme_data_s *p2)
+{
+ if (p1->assoc_id == -1) {
+ if (p1->cnx_id < p2->cnx_id) {
+ return -1;
+ }
+ if (p1->cnx_id > p2->cnx_id) {
+ return 1;
+ }
+ } else {
+ if (p1->assoc_id < p2->assoc_id) {
+ return -1;
+ }
+ if (p1->assoc_id > p2->assoc_id) {
+ return 1;
+ }
+ }
+
+ /* Matching reference */
+ return 0;
+}
+//------------------------------------------------------------------------------
+uint32_t et_s1ap_generate_eNB_id(void)
+{
+ char *out;
+ char hostname[50];
+ int ret;
+ uint32_t eNB_id;
+
+ /* Retrieve the host name */
+ ret = gethostname(hostname, sizeof(hostname));
+ DevAssert(ret == 0);
+
+ out = crypt(hostname, "eurecom");
+ DevAssert(out != NULL);
+
+ eNB_id = ((out[0] << 24) | (out[1] << 16) | (out[2] << 8) | out[3]);
+
+ return eNB_id;
+}
+//------------------------------------------------------------------------------
+uint16_t et_s1ap_eNB_fetch_add_global_cnx_id(void)
+{
+ return ++s1ap_eNB_internal_data.global_cnx_id;
+}
+
+//------------------------------------------------------------------------------
+void et_s1ap_eNB_prepare_internal_data(void)
+{
+ memset(&s1ap_eNB_internal_data, 0, sizeof(s1ap_eNB_internal_data));
+ STAILQ_INIT(&s1ap_eNB_internal_data.s1ap_eNB_instances_head);
+}
+
+//------------------------------------------------------------------------------
+void et_s1ap_eNB_insert_new_instance(s1ap_eNB_instance_t *new_instance_p)
+{
+ DevAssert(new_instance_p != NULL);
+
+ STAILQ_INSERT_TAIL(&s1ap_eNB_internal_data.s1ap_eNB_instances_head,
+ new_instance_p, s1ap_eNB_entries);
+}
+
+//------------------------------------------------------------------------------
+struct s1ap_eNB_mme_data_s *et_s1ap_eNB_get_MME(
+ s1ap_eNB_instance_t *instance_p,
+ int32_t assoc_id, uint16_t cnx_id)
+{
+ struct s1ap_eNB_mme_data_s temp;
+ struct s1ap_eNB_mme_data_s *found;
+
+ memset(&temp, 0, sizeof(struct s1ap_eNB_mme_data_s));
+
+ temp.assoc_id = assoc_id;
+ temp.cnx_id = cnx_id;
+
+ if (instance_p == NULL) {
+ STAILQ_FOREACH(instance_p, &s1ap_eNB_internal_data.s1ap_eNB_instances_head,
+ s1ap_eNB_entries) {
+ found = RB_FIND(s1ap_mme_map, &instance_p->s1ap_mme_head, &temp);
+
+ if (found != NULL) {
+ return found;
+ }
+ }
+ } else {
+ return RB_FIND(s1ap_mme_map, &instance_p->s1ap_mme_head, &temp);
+ }
+
+ return NULL;
+}
+
+//------------------------------------------------------------------------------
+s1ap_eNB_instance_t *et_s1ap_eNB_get_instance(instance_t instance)
+{
+ s1ap_eNB_instance_t *temp = NULL;
+
+ STAILQ_FOREACH(temp, &s1ap_eNB_internal_data.s1ap_eNB_instances_head,
+ s1ap_eNB_entries) {
+ if (temp->instance == instance) {
+ /* Matching occurence */
+ return temp;
+ }
+ }
+
+ return NULL;
+}
+//------------------------------------------------------------------------------
+void et_s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uint8_t *buffer,
+ uint32_t buffer_length, uint16_t stream)
+{
+ MessageDef *message_p;
+ sctp_data_req_t *sctp_data_req;
+
+ message_p = itti_alloc_new_message(TASK_S1AP, SCTP_DATA_REQ);
+
+ sctp_data_req = &message_p->ittiMsg.sctp_data_req;
+
+ sctp_data_req->assoc_id = assoc_id;
+ sctp_data_req->buffer = buffer;
+ sctp_data_req->buffer_length = buffer_length;
+ sctp_data_req->stream = stream;
+
+ itti_send_msg_to_task(TASK_SCTP, instance, message_p);
+}
+//------------------------------------------------------------------------------
+int et_handle_s1ap_mismatch_mme_ue_s1ap_id(et_packet_t * const spacket, et_packet_t * const rx_packet)
+{
+ S1ap_MME_UE_S1AP_ID_t scenario_mme_ue_s1ap_id = 0;
+ S1ap_MME_UE_S1AP_ID_t rx_mme_ue_s1ap_id = 0;
+ S1AP_PDU_PR present;
+
+ present = rx_packet->sctp_hdr.u.data_hdr.payload.pdu.present;
+
+ switch (rx_packet->sctp_hdr.u.data_hdr.payload.message.procedureCode) {
+ case S1ap_ProcedureCode_id_HandoverPreparation:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequiredIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequiredIEs.mme_ue_s1ap_id;
+ } else {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCommandIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCommandIEs.mme_ue_s1ap_id;
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_HandoverResourceAllocation:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestIEs.mme_ue_s1ap_id;
+ } else if (present == S1AP_PDU_PR_successfulOutcome) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestAcknowledgeIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestAcknowledgeIEs.mme_ue_s1ap_id;
+ } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverFailureIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverFailureIEs.mme_ue_s1ap_id;
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_HandoverNotification:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverNotifyIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverNotifyIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_PathSwitchRequest:
+ //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PathSwitchRequestIEs.mme_ue_s1ap_id;
+ //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PathSwitchRequestIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_HandoverCancel:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCancelIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCancelIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_E_RABSetup:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupRequestIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupRequestIEs.mme_ue_s1ap_id;
+ } else {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupResponseIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupResponseIEs.mme_ue_s1ap_id;
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_E_RABModify:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABModifyRequestIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABModifyRequestIEs.mme_ue_s1ap_id;
+ } else {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABModifyResponseIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABModifyResponseIEs.mme_ue_s1ap_id;
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_E_RABRelease:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseCommandIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseCommandIEs.mme_ue_s1ap_id;
+ } else {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseResponseIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseResponseIEs.mme_ue_s1ap_id;
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_E_RABReleaseIndication:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseIndicationIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseIndicationIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_InitialContextSetup:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialContextSetupRequestIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialContextSetupRequestIEs.mme_ue_s1ap_id;
+ } else {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialContextSetupResponseIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialContextSetupResponseIEs.mme_ue_s1ap_id;
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_Paging:
+ //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PagingIEs.mme_ue_s1ap_id;
+ //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PagingIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_downlinkNASTransport:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNASTransportIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNASTransportIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_initialUEMessage:
+ //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialUEMessageIEs.mme_ue_s1ap_id;
+ //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialUEMessageIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_uplinkNASTransport:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNASTransportIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNASTransportIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_Reset:
+ //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ResetIEs.mme_ue_s1ap_id;
+ //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ResetIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_ErrorIndication:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ErrorIndicationIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ErrorIndicationIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_NASNonDeliveryIndication:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_NASNonDeliveryIndication_IEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_NASNonDeliveryIndication_IEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_S1Setup:
+ /*if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupRequestIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupRequestIEs.mme_ue_s1ap_id;
+ } else if (present == S1AP_PDU_PR_successfulOutcome) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupResponseIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupResponseIEs.mme_ue_s1ap_id;
+ } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupFailureIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupFailureIEs.mme_ue_s1ap_id;
+ }*/
+ break;
+
+ case S1ap_ProcedureCode_id_UEContextReleaseRequest:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseRequestIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseRequestIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_DownlinkS1cdma2000tunneling:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkS1cdma2000tunnelingIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkS1cdma2000tunnelingIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_UplinkS1cdma2000tunneling:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkS1cdma2000tunnelingIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkS1cdma2000tunnelingIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_UEContextModification:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationRequestIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationRequestIEs.mme_ue_s1ap_id;
+ } else if (present == S1AP_PDU_PR_successfulOutcome) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationResponseIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationResponseIEs.mme_ue_s1ap_id;
+ } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationFailureIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationFailureIEs.mme_ue_s1ap_id;
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_UECapabilityInfoIndication:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UECapabilityInfoIndicationIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UECapabilityInfoIndicationIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_UEContextRelease:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ switch (rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCommandIEs.uE_S1AP_IDs.present) {
+ case S1ap_UE_S1AP_IDs_PR_uE_S1AP_ID_pair:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCommandIEs.uE_S1AP_IDs.choice.uE_S1AP_ID_pair.mME_UE_S1AP_ID;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCommandIEs.uE_S1AP_IDs.choice.uE_S1AP_ID_pair.mME_UE_S1AP_ID;
+ break;
+ case S1ap_UE_S1AP_IDs_PR_mME_UE_S1AP_ID:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCommandIEs.uE_S1AP_IDs.choice.mME_UE_S1AP_ID;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCommandIEs.uE_S1AP_IDs.choice.mME_UE_S1AP_ID;
+ break;
+ }
+ } else {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCompleteIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCompleteIEs.mme_ue_s1ap_id;
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_eNBStatusTransfer:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBStatusTransferIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBStatusTransferIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_MMEStatusTransfer:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEStatusTransferIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEStatusTransferIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_DeactivateTrace:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DeactivateTraceIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DeactivateTraceIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_TraceStart:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_TraceStartIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_TraceStartIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_TraceFailureIndication:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_TraceFailureIndicationIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_TraceFailureIndicationIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_ENBConfigurationUpdate:
+ /*if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateIEs.mme_ue_s1ap_id;
+ } else if (present == S1AP_PDU_PR_successfulOutcome) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id;
+ } else {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateFailureIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateFailureIEs.mme_ue_s1ap_id;
+ }*/
+ break;
+
+ case S1ap_ProcedureCode_id_MMEConfigurationUpdate:
+ /*if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateIEs.mme_ue_s1ap_id;
+ } else if (present == S1AP_PDU_PR_successfulOutcome) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id;
+ } else {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateFailureIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateFailureIEs.mme_ue_s1ap_id;
+ }*/
+ break;
+
+ case S1ap_ProcedureCode_id_LocationReportingControl:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportingControlIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportingControlIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_LocationReportingFailureIndication:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportingFailureIndicationIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportingFailureIndicationIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_LocationReport:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_OverloadStart:
+ //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStartIEs.mme_ue_s1ap_id;
+ //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStartIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_OverloadStop:
+ //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStopIEs.mme_ue_s1ap_id;
+ //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStopIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_WriteReplaceWarning:
+ /*if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningRequestIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningRequestIEs.mme_ue_s1ap_id;
+ } else {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningResponseIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningResponseIEs.mme_ue_s1ap_id;
+ }*/
+ break;
+
+ case S1ap_ProcedureCode_id_eNBDirectInformationTransfer:
+ //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBDirectInformationTransferIEs.mme_ue_s1ap_id;
+ //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBDirectInformationTransferIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_MMEDirectInformationTransfer:
+ //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEDirectInformationTransferIEs.mme_ue_s1ap_id;
+ //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEDirectInformationTransferIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_PrivateMessage:
+ case S1ap_ProcedureCode_id_eNBConfigurationTransfer:
+ case S1ap_ProcedureCode_id_MMEConfigurationTransfer:
+ AssertFatal(0, "TODO");
+ break;
+
+ case S1ap_ProcedureCode_id_CellTrafficTrace:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_CellTrafficTraceIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_CellTrafficTraceIEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_Kill:
+ /*if (present == S1AP_PDU_PR_initiatingMessage) {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillRequestIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillRequestIEs.mme_ue_s1ap_id;
+ } else {
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillResponseIEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillResponseIEs.mme_ue_s1ap_id;
+ }*/
+ break;
+
+ case S1ap_ProcedureCode_id_downlinkUEAssociatedLPPaTransport:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_uplinkUEAssociatedLPPaTransport:
+ rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
+ scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_downlinkNonUEAssociatedLPPaTransport:
+ //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
+ //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
+ break;
+
+ case S1ap_ProcedureCode_id_uplinkNonUEAssociatedLPPaTransport:
+ //rx_mme_ue_s1ap_id = rx_packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
+ //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id;
+ break;
+
+ default:
+ AssertFatal(0, "Unknown procedure code %ld", rx_packet->sctp_hdr.u.data_hdr.payload.message.procedureCode);
+ }
+ if (scenario_mme_ue_s1ap_id != rx_mme_ue_s1ap_id) {
+ S1AP_DEBUG("%s() Updating mme_ue_s1ap_id %u -> %u \n", __FUNCTION__, scenario_mme_ue_s1ap_id, rx_mme_ue_s1ap_id);
+ et_packet_t * p = spacket;
+ while (p) {
+ et_s1ap_update_mme_ue_s1ap_id(p, scenario_mme_ue_s1ap_id, rx_mme_ue_s1ap_id);
+ p = p->next;
+ }
+ return 0;
+ }
+ return 1;
+}
+//------------------------------------------------------------------------------
+asn_comp_rval_t * et_s1ap_is_matching(et_s1ap_t * const s1ap1, et_s1ap_t * const s1ap2, const uint32_t constraints)
+{
+ asn_comp_rval_t *rv = NULL;
+ if (s1ap1->pdu.present != s1ap2->pdu.present) {rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_PRESENT; return rv;}
+ switch (s1ap1->pdu.present) {
+ case S1AP_PDU_PR_NOTHING:
+ break;
+ case S1AP_PDU_PR_initiatingMessage:
+ if (s1ap1->pdu.choice.initiatingMessage.procedureCode != s1ap2->pdu.choice.initiatingMessage.procedureCode)
+ {rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE; return rv;}
+ if (s1ap1->pdu.choice.initiatingMessage.criticality != s1ap2->pdu.choice.initiatingMessage.criticality)
+ {rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY; return rv;}
+ break;
+ case S1AP_PDU_PR_successfulOutcome:
+ if (s1ap1->pdu.choice.successfulOutcome.procedureCode != s1ap2->pdu.choice.successfulOutcome.procedureCode)
+ {rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE; return rv;}
+ if (s1ap1->pdu.choice.successfulOutcome.criticality != s1ap2->pdu.choice.successfulOutcome.criticality)
+ {rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY; return rv;}
+ break;
+ case S1AP_PDU_PR_unsuccessfulOutcome:
+ if (s1ap1->pdu.choice.unsuccessfulOutcome.procedureCode != s1ap2->pdu.choice.unsuccessfulOutcome.procedureCode)
+ {rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_PROCEDURE_CODE; return rv;}
+ if (s1ap1->pdu.choice.unsuccessfulOutcome.criticality != s1ap2->pdu.choice.unsuccessfulOutcome.criticality)
+ {rv = calloc(1, sizeof(asn_comp_rval_t)); rv->err_code = ET_ERROR_MATCH_PACKET_S1AP_CRITICALITY; return rv;}
+ break;
+ default:
+ AssertFatal(0, "Unknown pdu.present %d", s1ap1->pdu.present);
+ }
+
+ if (s1ap1->binary_stream_allocated_size == s1ap2->binary_stream_allocated_size) {
+ if (memcmp((void*)s1ap1->binary_stream, (void*)s1ap2->binary_stream, s1ap1->binary_stream_allocated_size) == 0) return NULL;
+ }
+ // if no matching, may be the scenario need minor corrections (same enb_ue_s1ap_id but need to update mme_ue_s1ap_id)
+ return et_s1ap_ies_is_matching(s1ap1->pdu.present, &s1ap1->message, &s1ap2->message, constraints);
+}
+
+//------------------------------------------------------------------------------
+et_packet_t* et_build_packet_from_s1ap_data_ind(et_event_s1ap_data_ind_t * const s1ap_data_ind)
+{
+ et_packet_t * packet = NULL;
+ AssertFatal (NULL != s1ap_data_ind, "Bad parameter sctp_data_ind\n");
+ packet = calloc(1, sizeof(*packet));
+ packet->action = ET_PACKET_ACTION_S1C_NULL;
+ //packet->time_relative_to_first_packet.tv_sec = 0;
+ //packet->time_relative_to_first_packet.tv_usec = 0;
+ //packet->time_relative_to_last_sent_packet.tv_sec = 0;
+ //packet->time_relative_to_last_sent_packet.tv_usec = 0;
+ //packet->time_relative_to_last_received_packet.tv_sec = 0;
+ //packet->time_relative_to_last_received_packet.tv_usec = 0;
+ //packet->original_frame_number = 0;
+ //packet->packet_number = 0;
+ packet->enb_instance = 0; //TODO
+ //packet->ip_hdr;
+ // keep in mind: allocated buffer: sctp_datahdr.payload.binary_stream
+ packet->sctp_hdr.chunk_type = SCTP_CID_DATA;
+ memcpy((void*)&packet->sctp_hdr.u.data_hdr, (void*)&s1ap_data_ind->sctp_datahdr, sizeof(packet->sctp_hdr));
+ //packet->next = NULL;
+ packet->status = ET_PACKET_STATUS_RECEIVED;
+ //packet->timer_id = 0;
+ AssertFatal(0 == gettimeofday(&packet->timestamp_packet, NULL), "gettimeofday() Failed");
+ return packet;
+}
+
+
+//------------------------------------------------------------------------------
+// return 0 if packet was waited
+int et_scenario_set_packet_received(et_packet_t * const packet)
+{
+ et_packet_t * p = NULL;
+ int rc = 0;
+
+ packet->status = ET_PACKET_STATUS_RECEIVED;
+ S1AP_DEBUG("Packet received: num %u | original frame number %u \n", packet->packet_number, packet->original_frame_number);
+ S1AP_DEBUG("Last Packet received: num %u | original frame number %u \n", g_scenario->last_rx_packet->packet_number, g_scenario->last_rx_packet->original_frame_number);
+
+ p = g_scenario->last_rx_packet;
+ while (NULL != p) {
+ if (ET_PACKET_ACTION_S1C_RECEIVE == p->action) {
+ if ((ET_PACKET_STATUS_RECEIVED == p->status) || (ET_PACKET_STATUS_NOT_TAKEN_IN_ACCOUNT == p->status)) {
+ g_scenario->last_rx_packet = p;
+ g_scenario->time_last_rx_packet.tv_sec = p->timestamp_packet.tv_sec;
+ g_scenario->time_last_rx_packet.tv_usec = p->timestamp_packet.tv_usec;
+ S1AP_DEBUG("Set Last Packet received: num %u | original frame number %u \n", g_scenario->last_rx_packet->packet_number, g_scenario->last_rx_packet->original_frame_number);
+ S1AP_DEBUG("Set time_last_rx_packet %ld.%06d\n", g_scenario->time_last_rx_packet.tv_sec, g_scenario->time_last_rx_packet.tv_usec);
+ } else {
+ break;
+ }
+ }
+ p = p->next;
+ }
+
+ if (0 != packet->timer_id) {
+ rc = timer_remove(packet->timer_id);
+ AssertFatal(rc == 0, "TODO: Debug Timer on Rx packet num %d unknown", packet->packet_number);
+ g_scenario->timer_count--;
+ return rc;
+ }
+ return 1;
+}
+
+//------------------------------------------------------------------------------
+int et_s1ap_process_rx_packet(et_event_s1ap_data_ind_t * const s1ap_data_ind)
+{
+ et_packet_t *packet = NULL;
+ et_packet_t *rx_packet = NULL;
+ unsigned long int not_found = 1;
+ asn_comp_rval_t *comp_results = NULL;
+ asn_comp_rval_t *comp_results2 = NULL;
+ unsigned char error_code = 0;
+
+ AssertFatal (NULL != s1ap_data_ind, "Bad parameter sctp_data_ind\n");
+ rx_packet = et_build_packet_from_s1ap_data_ind(s1ap_data_ind);
+
+ if (NULL == g_scenario->last_rx_packet) {
+ packet = g_scenario->list_packet;
+ while (NULL != packet) {
+ if (packet->action == ET_PACKET_ACTION_S1C_RECEIVE) {
+ if ((ET_PACKET_STATUS_RECEIVED == packet->status) || (ET_PACKET_STATUS_NOT_TAKEN_IN_ACCOUNT == packet->status)) {
+ g_scenario->last_rx_packet = packet;
+ if (ET_PACKET_STATUS_NOT_TAKEN_IN_ACCOUNT != packet->status) {
+ g_scenario->time_last_rx_packet.tv_sec = packet->timestamp_packet.tv_sec;
+ g_scenario->time_last_rx_packet.tv_usec = packet->timestamp_packet.tv_usec;
+ }
+ S1AP_DEBUG("Set Last Packet received: num %u | original frame number %u \n", g_scenario->last_rx_packet->packet_number, g_scenario->last_rx_packet->original_frame_number);
+ S1AP_DEBUG("Set time_last_rx_packet %ld.%06d\n", g_scenario->time_last_rx_packet.tv_sec, g_scenario->time_last_rx_packet.tv_usec);
+ } else {
+ break;
+ }
+ }
+ packet = packet->next;
+ }
+ packet = g_scenario->list_packet;
+ } else {
+ packet = g_scenario->last_rx_packet->next;
+ }
+ // not_found threshold may sure depend on number of mme, may be not sure on number of UE
+ while ((NULL != packet) && (not_found < 7)) {
+ S1AP_DEBUG("%s() Considering packet num %d original frame number %u\n", __FUNCTION__, packet->packet_number, packet->original_frame_number);
+ if (packet->action == ET_PACKET_ACTION_S1C_RECEIVE) {
+ comp_results = et_sctp_is_matching(&packet->sctp_hdr, &rx_packet->sctp_hdr, g_constraints);
+ if (NULL == comp_results) {
+ S1AP_DEBUG("Compare RX packet with packet: num %u | original frame number %u \n", packet->packet_number, packet->original_frame_number);
+ packet->timestamp_packet.tv_sec = rx_packet->timestamp_packet.tv_sec;
+ packet->timestamp_packet.tv_usec = rx_packet->timestamp_packet.tv_usec;
+ return et_scenario_set_packet_received(packet);
+ } else {
+ S1AP_DEBUG("Compare RX packet with packet: num %u | original frame number %u failed\n",
+ packet->packet_number, packet->original_frame_number);
+ while (comp_results) {
+ S1AP_DEBUG("Result err code %s(%u) ASN1 struct name %s\n",
+ et_error_match2str(comp_results->err_code), comp_results->err_code, comp_results->name);
+ // (each asn1 rc <= 166 (enum e_S1ap_ProtocolIE_ID, in generated file S1ap_ProtocolIE_ID.h))
+ if (comp_results->err_code == COMPARE_ERR_CODE_NO_MATCH) {
+ //TODO MME_UE_S1AP_ID, etc.
+ // get latest error code
+ if (strcmp(comp_results->name, "S1ap-MME-UE-S1AP-ID") == 0) {
+ if (0 == et_handle_s1ap_mismatch_mme_ue_s1ap_id((et_packet_t *const)packet, (et_packet_t *const)rx_packet)) {
+ packet->timestamp_packet.tv_sec = rx_packet->timestamp_packet.tv_sec;
+ packet->timestamp_packet.tv_usec = rx_packet->timestamp_packet.tv_usec;
+ return et_scenario_set_packet_received(packet);
+ }
+ } else if (strcmp(comp_results->name, "S1ap-TransportLayerAddress") == 0) {
+ S1AP_WARN("Some work needed there for %s, TODO in generic_scenario.xsl, add epc conf file in the process, anyway continuing...\n",comp_results->name);
+ packet->timestamp_packet.tv_sec = rx_packet->timestamp_packet.tv_sec;
+ packet->timestamp_packet.tv_usec = rx_packet->timestamp_packet.tv_usec;
+ return et_scenario_set_packet_received(packet);
+ } else {
+ S1AP_WARN("\n\nRX PACKET:\n");
+ et_display_packet_sctp(&rx_packet->sctp_hdr);
+ S1AP_WARN("\n\nWAITED PACKET:\n");
+ et_display_packet_sctp(&packet->sctp_hdr);
+ AssertFatal(0,"Some work needed there");
+ }
+ }
+ comp_results2 = comp_results;
+ comp_results = comp_results2->next;
+ et_free_pointer(comp_results2);
+ }
+ }
+ }
+ not_found += 1;
+ packet = packet->next;
+ }
+ et_display_packet_sctp(&rx_packet->sctp_hdr);
+ AssertFatal(0, "Rx packet not found in scenario (see dump above)");
+ return -1;
+}
+
+//------------------------------------------------------------------------------
+void et_s1ap_eNB_handle_sctp_data_ind(sctp_data_ind_t * const sctp_data_ind)
+{
+ int result = 0;
+ et_event_t event;
+
+ DevAssert(sctp_data_ind != NULL);
+
+ memset((void*)&event, 0, sizeof(event));
+
+ event.code = ET_EVENT_RX_S1AP;
+ event.u.s1ap_data_ind.sctp_datahdr.tsn = 0;
+ event.u.s1ap_data_ind.sctp_datahdr.stream = sctp_data_ind->stream;
+ event.u.s1ap_data_ind.sctp_datahdr.ssn = 0;
+ event.u.s1ap_data_ind.sctp_datahdr.ppid = S1AP_SCTP_PPID;
+ event.u.s1ap_data_ind.sctp_datahdr.assoc_id = sctp_data_ind->assoc_id;
+
+ event.u.s1ap_data_ind.sctp_datahdr.payload.binary_stream_pos = 0;
+ event.u.s1ap_data_ind.sctp_datahdr.payload.binary_stream_allocated_size = sctp_data_ind->buffer_length;
+ event.u.s1ap_data_ind.sctp_datahdr.payload.binary_stream = NULL;
+ if ((sctp_data_ind->buffer_length > 0) && (NULL != sctp_data_ind->buffer)) {
+ event.u.s1ap_data_ind.sctp_datahdr.payload.binary_stream = calloc(1, sctp_data_ind->buffer_length);
+ memcpy(event.u.s1ap_data_ind.sctp_datahdr.payload.binary_stream,
+ sctp_data_ind->buffer,
+ sctp_data_ind->buffer_length);
+
+ if (et_s1ap_decode_pdu(
+ &event.u.s1ap_data_ind.sctp_datahdr.payload.pdu,
+ &event.u.s1ap_data_ind.sctp_datahdr.payload.message,
+ event.u.s1ap_data_ind.sctp_datahdr.payload.binary_stream,
+ event.u.s1ap_data_ind.sctp_datahdr.payload.binary_stream_allocated_size) < 0) {
+ AssertFatal (0, "ERROR Cannot decode RX S1AP message!\n");
+ }
+
+ }
+
+ result = itti_free(TASK_UNKNOWN, sctp_data_ind->buffer);
+ AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
+
+ et_scenario_fsm_notify_event(event);
+
+ memset((void*)&event, 0, sizeof(event));
+ event.code = ET_EVENT_TICK;
+ et_scenario_fsm_notify_event(event);
+
+}
+//------------------------------------------------------------------------------
+void et_s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p,
+ net_ip_address_t *mme_ip_address,
+ net_ip_address_t *local_ip_addr,
+ uint16_t in_streams,
+ uint16_t out_streams)
+{
+ MessageDef *message_p = NULL;
+ sctp_new_association_req_t *sctp_new_association_req_p = NULL;
+ s1ap_eNB_mme_data_t *s1ap_mme_data_p = NULL;
+
+ DevAssert(instance_p != NULL);
+ DevAssert(mme_ip_address != NULL);
+
+ message_p = itti_alloc_new_message(TASK_S1AP, SCTP_NEW_ASSOCIATION_REQ);
+
+ sctp_new_association_req_p = &message_p->ittiMsg.sctp_new_association_req;
+
+ sctp_new_association_req_p->port = S1AP_PORT_NUMBER;
+ sctp_new_association_req_p->ppid = S1AP_SCTP_PPID;
+
+ sctp_new_association_req_p->in_streams = in_streams;
+ sctp_new_association_req_p->out_streams = out_streams;
+
+ memcpy(&sctp_new_association_req_p->remote_address,
+ mme_ip_address,
+ sizeof(*mme_ip_address));
+
+ memcpy(&sctp_new_association_req_p->local_address,
+ local_ip_addr,
+ sizeof(*local_ip_addr));
+
+ /* Create new MME descriptor */
+ s1ap_mme_data_p = calloc(1, sizeof(*s1ap_mme_data_p));
+ DevAssert(s1ap_mme_data_p != NULL);
+
+ s1ap_mme_data_p->cnx_id = et_s1ap_eNB_fetch_add_global_cnx_id();
+ sctp_new_association_req_p->ulp_cnx_id = s1ap_mme_data_p->cnx_id;
+
+ s1ap_mme_data_p->assoc_id = -1;
+ s1ap_mme_data_p->s1ap_eNB_instance = instance_p;
+
+ memcpy((void*)&s1ap_mme_data_p->mme_net_ip_address, mme_ip_address, sizeof(*mme_ip_address));
+
+
+ STAILQ_INIT(&s1ap_mme_data_p->served_gummei);
+
+ /* Insert the new descriptor in list of known MME
+ * but not yet associated.
+ */
+ RB_INSERT(s1ap_mme_map, &instance_p->s1ap_mme_head, s1ap_mme_data_p);
+ s1ap_mme_data_p->state = S1AP_ENB_STATE_WAITING;
+ instance_p->s1ap_mme_nb ++;
+ instance_p->s1ap_mme_pending_nb ++;
+
+ itti_send_msg_to_task(TASK_SCTP, instance_p->instance, message_p);
+}
+//------------------------------------------------------------------------------
+void et_s1ap_update_assoc_id_of_packets(const int32_t assoc_id,
+ struct s1ap_eNB_instance_s * const s1ap_eNB_instance,
+ s1ap_eNB_mme_data_t * const mme_desc_p)
+{
+ et_packet_t *packet = NULL;
+ int ret;
+ unsigned int old_enb_port = 0;
+ unsigned int old_mme_port = 0;
+
+ S1AP_DEBUG("%s for SCTP association (%u)\n",__FUNCTION__,assoc_id);
+
+ packet = g_scenario->list_packet;
+ while (NULL != packet) {
+ switch (packet->sctp_hdr.chunk_type) {
+
+ case SCTP_CID_DATA :
+ S1AP_DEBUG("%s for SCTP association (%u) SCTP_CID_DATA\n",__FUNCTION__,assoc_id);
+ if ((ET_PACKET_STATUS_NONE == packet->status) || (ET_PACKET_STATUS_SCHEDULED_FOR_RECEIVING == packet->status)) {
+ if (0 < old_mme_port) {
+ if (packet->action == ET_PACKET_ACTION_S1C_SEND) {
+ ret = et_compare_et_ip_to_net_ip_address(&packet->ip_hdr.dst, &mme_desc_p->mme_net_ip_address);
+ if (0 == ret) {
+ ret = et_compare_et_ip_to_net_ip_address(&packet->ip_hdr.src, &s1ap_eNB_instance->s1c_net_ip_address);
+ if (0 == ret) {
+ // same IP src, same IP dst
+ if ((packet->sctp_hdr.dst_port == old_mme_port) && (packet->sctp_hdr.src_port == old_enb_port)) {
+ packet->sctp_hdr.u.data_hdr.assoc_id = assoc_id;
+ S1AP_DEBUG("tPacket:\tnum %u | original frame number %u \n", packet->packet_number, packet->original_frame_number);
+ S1AP_DEBUG("\tUpdated assoc id: %u\n", assoc_id);
+ }
+ }
+ }
+ } else if (packet->action == ET_PACKET_ACTION_S1C_RECEIVE) {
+ ret = et_compare_et_ip_to_net_ip_address(&packet->ip_hdr.src, &mme_desc_p->mme_net_ip_address);
+ if (0 == ret) {
+ ret = et_compare_et_ip_to_net_ip_address(&packet->ip_hdr.dst, &s1ap_eNB_instance->s1c_net_ip_address);
+ if (0 == ret) {
+ // same IP src, same IP dst
+ if ((packet->sctp_hdr.src_port == old_mme_port) && (packet->sctp_hdr.dst_port == old_enb_port)) {
+ packet->sctp_hdr.u.data_hdr.assoc_id = assoc_id;
+ S1AP_DEBUG("tPacket:\tnum %u | original frame number %u \n", packet->packet_number, packet->original_frame_number);
+ S1AP_DEBUG("\tUpdated assoc id: %u\n", assoc_id);
+ }
+ }
+ }
+ }
+ }
+ }
+ break;
+
+ // Strong assumption
+ // in replayed scenario, the order of SCTP INIT packets is supposed to be the same as in the catched scenario
+ case SCTP_CID_INIT:
+ S1AP_DEBUG("%s for SCTP association (%u) SCTP_CID_INIT\n",__FUNCTION__,assoc_id);
+ ret = et_compare_et_ip_to_net_ip_address(&packet->ip_hdr.dst, &mme_desc_p->mme_net_ip_address);
+ if (0 == ret) {
+ ret = et_compare_et_ip_to_net_ip_address(&packet->ip_hdr.src, &s1ap_eNB_instance->s1c_net_ip_address);
+ if (0 == ret) {
+ if (0 == old_enb_port) {
+ if (ET_PACKET_STATUS_NONE == packet->status) {
+ packet->status = ET_PACKET_STATUS_SENT;
+ old_enb_port = packet->sctp_hdr.src_port;
+ S1AP_DEBUG("%s for SCTP association (%u) SCTP_CID_INIT SUCCESS\n",__FUNCTION__,assoc_id);
+ }
+ }
+ }
+ }
+ break;
+
+ case SCTP_CID_INIT_ACK:
+ S1AP_DEBUG("%s for SCTP association (%u) SCTP_CID_INIT_ACK\n",__FUNCTION__,assoc_id);
+ ret = et_compare_et_ip_to_net_ip_address(&packet->ip_hdr.src, &mme_desc_p->mme_net_ip_address);
+ if (0 == ret) {
+ ret = et_compare_et_ip_to_net_ip_address(&packet->ip_hdr.dst, &s1ap_eNB_instance->s1c_net_ip_address);
+ if (0 == ret) {
+ if (old_enb_port == packet->sctp_hdr.dst_port) {
+ if (ET_PACKET_STATUS_NONE == packet->status) {
+ packet->status = ET_PACKET_STATUS_RECEIVED;
+ old_mme_port = packet->sctp_hdr.dst_port;
+ S1AP_DEBUG("%s for SCTP association (%u) SCTP_CID_INIT_ACK SUCCESS\n",__FUNCTION__,assoc_id);
+ }
+ }
+ }
+ }
+ break;
+
+ case SCTP_CID_HEARTBEAT:
+ case SCTP_CID_HEARTBEAT_ACK:
+ case SCTP_CID_COOKIE_ECHO:
+ case SCTP_CID_COOKIE_ACK:
+ case SCTP_CID_ECN_ECNE:
+ case SCTP_CID_ECN_CWR:
+ break;
+
+ case SCTP_CID_ABORT:
+ case SCTP_CID_SHUTDOWN:
+ case SCTP_CID_SHUTDOWN_ACK:
+ case SCTP_CID_ERROR:
+ case SCTP_CID_SHUTDOWN_COMPLETE:
+ //TODO
+ break;
+
+ default:
+ AssertFatal(0, "Unknown chunk_type %d packet num %d", packet->sctp_hdr.chunk_type, packet->packet_number);
+ ;
+ }
+ packet = packet->next;
+ }
+}
+//------------------------------------------------------------------------------
+void et_s1ap_handle_s1_setup_message(s1ap_eNB_mme_data_t *mme_desc_p, int sctp_shutdown)
+{
+ if (sctp_shutdown) {
+ /* A previously connected MME has been shutdown */
+
+ /* TODO check if it was used by some eNB and send a message to inform these eNB if there is no more associated MME */
+ if (mme_desc_p->state == S1AP_ENB_STATE_CONNECTED) {
+ mme_desc_p->state = S1AP_ENB_STATE_DISCONNECTED;
+
+ if (mme_desc_p->s1ap_eNB_instance->s1ap_mme_associated_nb > 0) {
+ /* Decrease associated MME number */
+ mme_desc_p->s1ap_eNB_instance->s1ap_mme_associated_nb --;
+ }
+
+ /* If there are no more associated MME, inform eNB app */
+ if (mme_desc_p->s1ap_eNB_instance->s1ap_mme_associated_nb == 0) {
+ MessageDef *message_p;
+
+ message_p = itti_alloc_new_message(TASK_S1AP, S1AP_DEREGISTERED_ENB_IND);
+ S1AP_DEREGISTERED_ENB_IND(message_p).nb_mme = 0;
+ itti_send_msg_to_task(TASK_ENB_APP, mme_desc_p->s1ap_eNB_instance->instance, message_p);
+ }
+ }
+ } else {
+ /* Check that at least one setup message is pending */
+ DevCheck(mme_desc_p->s1ap_eNB_instance->s1ap_mme_pending_nb > 0, mme_desc_p->s1ap_eNB_instance->instance,
+ mme_desc_p->s1ap_eNB_instance->s1ap_mme_pending_nb, 0);
+
+ if (mme_desc_p->s1ap_eNB_instance->s1ap_mme_pending_nb > 0) {
+ /* Decrease pending messages number */
+ mme_desc_p->s1ap_eNB_instance->s1ap_mme_pending_nb --;
+ mme_desc_p->s1ap_eNB_instance->s1ap_mme_associated_nb++;
+ }
+
+ et_s1ap_update_assoc_id_of_packets(mme_desc_p->assoc_id,
+ mme_desc_p->s1ap_eNB_instance,
+ mme_desc_p);
+
+
+ /* If there are no more pending messages, inform eNB app */
+ if (mme_desc_p->s1ap_eNB_instance->s1ap_mme_pending_nb == 0) {
+ MessageDef *message_p;
+
+ message_p = itti_alloc_new_message(TASK_S1AP, S1AP_REGISTER_ENB_CNF);
+ S1AP_REGISTER_ENB_CNF(message_p).nb_mme = mme_desc_p->s1ap_eNB_instance->s1ap_mme_associated_nb;
+ itti_send_msg_to_task(TASK_ENB_APP, mme_desc_p->s1ap_eNB_instance->instance, message_p);
+ }
+ }
+}
+//------------------------------------------------------------------------------
+void et_s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t *s1ap_register_eNB)
+{
+ s1ap_eNB_instance_t *new_instance;
+ uint8_t index;
+
+ DevAssert(s1ap_register_eNB != NULL);
+
+ /* Look if the provided instance already exists */
+ new_instance = et_s1ap_eNB_get_instance(instance);
+
+ if (new_instance != NULL) {
+ /* Checks if it is a retry on the same eNB */
+ DevCheck(new_instance->eNB_id == s1ap_register_eNB->eNB_id, new_instance->eNB_id, s1ap_register_eNB->eNB_id, 0);
+ DevCheck(new_instance->cell_type == s1ap_register_eNB->cell_type, new_instance->cell_type, s1ap_register_eNB->cell_type, 0);
+ DevCheck(new_instance->tac == s1ap_register_eNB->tac, new_instance->tac, s1ap_register_eNB->tac, 0);
+ DevCheck(new_instance->mcc == s1ap_register_eNB->mcc, new_instance->mcc, s1ap_register_eNB->mcc, 0);
+ DevCheck(new_instance->mnc == s1ap_register_eNB->mnc, new_instance->mnc, s1ap_register_eNB->mnc, 0);
+ DevCheck(new_instance->mnc_digit_length == s1ap_register_eNB->mnc_digit_length, new_instance->mnc_digit_length, s1ap_register_eNB->mnc_digit_length, 0);
+ DevCheck(memcmp((void*)&new_instance->s1c_net_ip_address, (void*)&s1ap_register_eNB->enb_ip_address, sizeof(new_instance->s1c_net_ip_address)) == 0, 0,0,0);
+ } else {
+ new_instance = calloc(1, sizeof(s1ap_eNB_instance_t));
+ DevAssert(new_instance != NULL);
+
+ RB_INIT(&new_instance->s1ap_ue_head);
+ RB_INIT(&new_instance->s1ap_mme_head);
+
+ /* Copy usefull parameters */
+ new_instance->instance = instance;
+ new_instance->eNB_name = s1ap_register_eNB->eNB_name;
+ new_instance->eNB_id = s1ap_register_eNB->eNB_id;
+ new_instance->cell_type = s1ap_register_eNB->cell_type;
+ new_instance->tac = s1ap_register_eNB->tac;
+ new_instance->mcc = s1ap_register_eNB->mcc;
+ new_instance->mnc = s1ap_register_eNB->mnc;
+ new_instance->mnc_digit_length = s1ap_register_eNB->mnc_digit_length;
+ memcpy((void*)&new_instance->s1c_net_ip_address, (void*)&s1ap_register_eNB->enb_ip_address, sizeof(new_instance->s1c_net_ip_address));
+
+ /* Add the new instance to the list of eNB (meaningfull in virtual mode) */
+ et_s1ap_eNB_insert_new_instance(new_instance);
+
+ S1AP_DEBUG("Registered new eNB[%d] and %s eNB id %u\n",
+ instance,
+ s1ap_register_eNB->cell_type == CELL_MACRO_ENB ? "macro" : "home",
+ s1ap_register_eNB->eNB_id);
+ }
+
+ DevCheck(s1ap_register_eNB->nb_mme <= S1AP_MAX_NB_MME_IP_ADDRESS,
+ S1AP_MAX_NB_MME_IP_ADDRESS, s1ap_register_eNB->nb_mme, 0);
+
+ /* Trying to connect to provided list of MME ip address */
+ for (index = 0; index < s1ap_register_eNB->nb_mme; index++) {
+ et_s1ap_eNB_register_mme(new_instance,
+ &s1ap_register_eNB->mme_ip_address[index],
+ &s1ap_register_eNB->enb_ip_address,
+ s1ap_register_eNB->sctp_in_streams,
+ s1ap_register_eNB->sctp_out_streams);
+ }
+}
+
+//------------------------------------------------------------------------------
+void et_s1ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp)
+{
+ s1ap_eNB_instance_t *instance_p = NULL;
+ s1ap_eNB_mme_data_t *s1ap_mme_data_p = NULL;
+
+ DevAssert(sctp_new_association_resp != NULL);
+
+ instance_p = et_s1ap_eNB_get_instance(instance);
+ DevAssert(instance_p != NULL);
+
+ s1ap_mme_data_p = et_s1ap_eNB_get_MME(instance_p, -1,
+ sctp_new_association_resp->ulp_cnx_id);
+ DevAssert(s1ap_mme_data_p != NULL);
+
+ if (sctp_new_association_resp->sctp_state != SCTP_STATE_ESTABLISHED) {
+ S1AP_WARN("Received unsuccessful result for SCTP association (%u), instance %d, cnx_id %u\n",
+ sctp_new_association_resp->sctp_state,
+ instance,
+ sctp_new_association_resp->ulp_cnx_id);
+
+ et_s1ap_handle_s1_setup_message(s1ap_mme_data_p, sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN);
+
+ return;
+ }
+
+ S1AP_DEBUG("Received successful result for SCTP association (%u), instance %d, cnx_id %u\n",
+ sctp_new_association_resp->sctp_state,
+ instance,
+ sctp_new_association_resp->ulp_cnx_id);
+ /* Update parameters */
+ s1ap_mme_data_p->assoc_id = sctp_new_association_resp->assoc_id;
+ s1ap_mme_data_p->in_streams = sctp_new_association_resp->in_streams;
+ s1ap_mme_data_p->out_streams = sctp_new_association_resp->out_streams;
+
+ et_s1ap_handle_s1_setup_message(s1ap_mme_data_p, sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN);
+}
+
+//------------------------------------------------------------------------------
+void *et_s1ap_eNB_task(void *arg)
+{
+ MessageDef *received_msg = NULL;
+ int result;
+
+ S1AP_DEBUG("Starting S1AP layer\n");
+
+ et_s1ap_eNB_prepare_internal_data();
+
+ itti_mark_task_ready(TASK_S1AP);
+ MSC_START_USE();
+
+ while (1) {
+ itti_receive_msg(TASK_S1AP, &received_msg);
+
+ switch (ITTI_MSG_ID(received_msg)) {
+ case TERMINATE_MESSAGE:
+ itti_exit_task();
+ break;
+
+ case S1AP_REGISTER_ENB_REQ: {
+ /* Register a new eNB.
+ * in Virtual mode eNBs will be distinguished using the mod_id/
+ * Each eNB has to send an S1AP_REGISTER_ENB message with its
+ * own parameters.
+ */
+ et_s1ap_eNB_handle_register_eNB(ITTI_MESSAGE_GET_INSTANCE(received_msg),
+ &S1AP_REGISTER_ENB_REQ(received_msg));
+ }
+ break;
+
+ case SCTP_NEW_ASSOCIATION_RESP: {
+ et_s1ap_eNB_handle_sctp_association_resp(ITTI_MESSAGE_GET_INSTANCE(received_msg),
+ &received_msg->ittiMsg.sctp_new_association_resp);
+ }
+ break;
+
+ case SCTP_DATA_IND: {
+ et_s1ap_eNB_handle_sctp_data_ind(&received_msg->ittiMsg.sctp_data_ind);
+ }
+ break;
+
+ case TIMER_HAS_EXPIRED:
+ LOG_I(S1AP, " Received TIMER_HAS_EXPIRED: timer_id %d\n", TIMER_HAS_EXPIRED(received_msg).timer_id);
+ {
+ et_packet_t * packet = (et_packet_t*)TIMER_HAS_EXPIRED (received_msg).arg;
+ et_event_t event;
+ g_scenario->timer_count--;
+ if (NULL != packet) {
+ if (packet->status == ET_PACKET_STATUS_SCHEDULED_FOR_RECEIVING) {
+ memset((void*)&event, 0, sizeof(event));
+ event.code = ET_EVENT_RX_PACKET_TIME_OUT;
+ event.u.rx_packet_time_out = packet;
+ et_scenario_fsm_notify_event(event);
+ } else if (packet->status == ET_PACKET_STATUS_SCHEDULED_FOR_SENDING) {
+ memset((void*)&event, 0, sizeof(event));
+ event.code = ET_EVENT_TX_TIMED_PACKET;
+ event.u.tx_timed_packet = packet;
+ et_scenario_fsm_notify_event(event);
+
+ et_event_t continue_event;
+ continue_event.code = ET_EVENT_TICK;
+ et_scenario_fsm_notify_event(continue_event);
+ } else if ((packet->status != ET_PACKET_STATUS_SENT) && ((packet->status != ET_PACKET_STATUS_RECEIVED))) {
+ AssertFatal (0, "Bad status %d of packet timed out!\n", packet->status);
+ }
+ } else {
+ LOG_W(S1AP, " Received TIMER_HAS_EXPIRED: timer_id %d, no packet attached to timer\n", TIMER_HAS_EXPIRED(received_msg).timer_id);
+ }
+ }
+ if (TIMER_HAS_EXPIRED (received_msg).timer_id == g_scenario->enb_register_retry_timer_id) {
+ /* Restart the registration process */
+ g_scenario->registered_enb = 0;
+ et_eNB_app_register (g_scenario->enb_properties);
+ }
+ break;
+
+ default:
+ S1AP_ERROR("Received unhandled message: %d:%s\n",
+ ITTI_MSG_ID(received_msg), ITTI_MSG_NAME(received_msg));
+ break;
+ }
+
+ result = itti_free (ITTI_MSG_ORIGIN_ID(received_msg), received_msg);
+ AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
+
+ received_msg = NULL;
+ }
+
+ return NULL;
+}
+
+
diff --git a/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c b/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c
new file mode 100644
index 0000000000..5d43b211ee
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c
@@ -0,0 +1,634 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+
+/*
+ play_scenario_s1ap_compare_ie.c
+ -------------------
+ AUTHOR : Lionel GAUTHIER
+ COMPANY : EURECOM
+ EMAIL : Lionel.Gauthier@eurecom.fr
+ */
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "tree.h"
+#include "queue.h"
+
+
+#include "intertask_interface.h"
+#include "timer.h"
+#include "platform_types.h"
+#include "assertions.h"
+#include "conversions.h"
+#include "s1ap_common.h"
+#include "play_scenario_s1ap_eNB_defs.h"
+#include "play_scenario.h"
+#include "msc.h"
+//------------------------------------------------------------------------------
+extern et_scenario_t *g_scenario;
+extern uint32_t g_constraints;
+//------------------------------------------------------------------------------
+
+asn_comp_rval_t * et_s1ap_ies_is_matching(const S1AP_PDU_PR present, s1ap_message * const m1, s1ap_message * const m2, const uint32_t constraints)
+{
+ asn_comp_rval_t *ret = NULL;
+ AssertFatal(m1 != NULL, "bad parameter m1");
+ AssertFatal(m2 != NULL, "bad parameter m2");
+ AssertFatal((present == S1AP_PDU_PR_initiatingMessage) ||
+ (present == S1AP_PDU_PR_successfulOutcome) ||
+ (present == S1AP_PDU_PR_unsuccessfulOutcome) , "Bad parameter S1AP_PDU_PR present ");
+ AssertFatal( m1->procedureCode == m2->procedureCode, "Bad parameters: no matching procedure codes");
+
+
+ // some cases can never occur since uplink only.
+ switch (m1->procedureCode) {
+ case S1ap_ProcedureCode_id_HandoverPreparation:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_handoverrequiredies(
+ &m1->msg.s1ap_HandoverRequiredIEs,
+ &m2->msg.s1ap_HandoverRequiredIEs);
+ } else {
+ ret = s1ap_compare_s1ap_handovercommandies(
+ &m1->msg.s1ap_HandoverCommandIEs,
+ &m2->msg.s1ap_HandoverCommandIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_HandoverResourceAllocation:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_handoverrequesties(
+ &m1->msg.s1ap_HandoverRequestIEs,
+ &m2->msg.s1ap_HandoverRequestIEs);
+ } else if (present == S1AP_PDU_PR_successfulOutcome) {
+ ret = s1ap_compare_s1ap_handoverrequestacknowledgeies(
+ &m1->msg.s1ap_HandoverRequestAcknowledgeIEs,
+ &m2->msg.s1ap_HandoverRequestAcknowledgeIEs);
+ } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) {
+ ret = s1ap_compare_s1ap_handoverfailureies(
+ &m1->msg.s1ap_HandoverFailureIEs,
+ &m2->msg.s1ap_HandoverFailureIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_HandoverNotification:
+ ret = s1ap_compare_s1ap_handovernotifyies(
+ &m1->msg.s1ap_HandoverNotifyIEs,
+ &m2->msg.s1ap_HandoverNotifyIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_PathSwitchRequest:
+ ret = s1ap_compare_s1ap_pathswitchrequesties(
+ &m1->msg.s1ap_PathSwitchRequestIEs,
+ &m2->msg.s1ap_PathSwitchRequestIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_HandoverCancel:
+ ret = s1ap_compare_s1ap_handovercancelies(
+ &m1->msg.s1ap_HandoverCancelIEs,
+ &m2->msg.s1ap_HandoverCancelIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_E_RABSetup:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_e_rabsetuprequesties(
+ &m1->msg.s1ap_E_RABSetupRequestIEs,
+ &m2->msg.s1ap_E_RABSetupRequestIEs);
+ } else {
+ ret = s1ap_compare_s1ap_e_rabsetupresponseies(
+ &m1->msg.s1ap_E_RABSetupResponseIEs,
+ &m2->msg.s1ap_E_RABSetupResponseIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_E_RABModify:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_e_rabmodifyrequesties(
+ &m1->msg.s1ap_E_RABModifyRequestIEs,
+ &m2->msg.s1ap_E_RABModifyRequestIEs);
+ } else {
+ ret = s1ap_compare_s1ap_e_rabmodifyresponseies(
+ &m1->msg.s1ap_E_RABModifyResponseIEs,
+ &m2->msg.s1ap_E_RABModifyResponseIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_E_RABRelease:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_e_rabreleasecommandies(
+ &m1->msg.s1ap_E_RABReleaseCommandIEs,
+ &m2->msg.s1ap_E_RABReleaseCommandIEs);
+ } else {
+ ret = s1ap_compare_s1ap_e_rabreleaseresponseies(
+ &m1->msg.s1ap_E_RABReleaseResponseIEs,
+ &m2->msg.s1ap_E_RABReleaseResponseIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_E_RABReleaseIndication:
+ ret = s1ap_compare_s1ap_e_rabreleaseindicationies(
+ &m1->msg.s1ap_E_RABReleaseIndicationIEs,
+ &m2->msg.s1ap_E_RABReleaseIndicationIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_InitialContextSetup:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_initialcontextsetuprequesties(
+ &m1->msg.s1ap_InitialContextSetupRequestIEs,
+ &m2->msg.s1ap_InitialContextSetupRequestIEs);
+ } else {
+ ret = s1ap_compare_s1ap_initialcontextsetupresponseies(
+ &m1->msg.s1ap_InitialContextSetupResponseIEs,
+ &m2->msg.s1ap_InitialContextSetupResponseIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_Paging:
+ ret = s1ap_compare_s1ap_pagingies(
+ &m1->msg.s1ap_PagingIEs,
+ &m2->msg.s1ap_PagingIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_downlinkNASTransport:
+ ret = s1ap_compare_s1ap_downlinknastransporties(
+ &m1->msg.s1ap_DownlinkNASTransportIEs,
+ &m2->msg.s1ap_DownlinkNASTransportIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_initialUEMessage:
+ ret = s1ap_compare_s1ap_initialuemessageies(
+ &m1->msg.s1ap_InitialUEMessageIEs,
+ &m2->msg.s1ap_InitialUEMessageIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_uplinkNASTransport:
+ ret = s1ap_compare_s1ap_uplinknastransporties(
+ &m1->msg.s1ap_UplinkNASTransportIEs,
+ &m2->msg.s1ap_UplinkNASTransportIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_Reset:
+ ret = s1ap_compare_s1ap_reseties(
+ &m1->msg.s1ap_ResetIEs,
+ &m2->msg.s1ap_ResetIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_ErrorIndication:
+ ret = s1ap_compare_s1ap_errorindicationies(
+ &m1->msg.s1ap_ErrorIndicationIEs,
+ &m2->msg.s1ap_ErrorIndicationIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_NASNonDeliveryIndication:
+ ret = s1ap_compare_s1ap_nasnondeliveryindication_ies(
+ &m1->msg.s1ap_NASNonDeliveryIndication_IEs,
+ &m2->msg.s1ap_NASNonDeliveryIndication_IEs);
+ break;
+
+ case S1ap_ProcedureCode_id_S1Setup:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_s1setuprequesties(
+ &m1->msg.s1ap_S1SetupRequestIEs,
+ &m2->msg.s1ap_S1SetupRequestIEs);
+ } else if (present == S1AP_PDU_PR_successfulOutcome) {
+ ret = s1ap_compare_s1ap_s1setupresponseies(
+ &m1->msg.s1ap_S1SetupResponseIEs,
+ &m2->msg.s1ap_S1SetupResponseIEs);
+ } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) {
+ ret = s1ap_compare_s1ap_s1setupfailureies(
+ &m1->msg.s1ap_S1SetupFailureIEs,
+ &m2->msg.s1ap_S1SetupFailureIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_UEContextReleaseRequest:
+ ret = s1ap_compare_s1ap_uecontextreleaserequesties(
+ &m1->msg.s1ap_UEContextReleaseRequestIEs,
+ &m2->msg.s1ap_UEContextReleaseRequestIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_DownlinkS1cdma2000tunneling:
+ ret = s1ap_compare_s1ap_downlinks1cdma2000tunnelingies(
+ &m1->msg.s1ap_DownlinkS1cdma2000tunnelingIEs,
+ &m2->msg.s1ap_DownlinkS1cdma2000tunnelingIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_UplinkS1cdma2000tunneling:
+ ret = s1ap_compare_s1ap_uplinks1cdma2000tunnelingies(
+ &m1->msg.s1ap_UplinkS1cdma2000tunnelingIEs,
+ &m2->msg.s1ap_UplinkS1cdma2000tunnelingIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_UEContextModification:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_uecontextmodificationrequesties(
+ &m1->msg.s1ap_UEContextModificationRequestIEs,
+ &m2->msg.s1ap_UEContextModificationRequestIEs);
+ } else if (present == S1AP_PDU_PR_successfulOutcome) {
+ ret = s1ap_compare_s1ap_uecontextmodificationresponseies(
+ &m1->msg.s1ap_UEContextModificationResponseIEs,
+ &m2->msg.s1ap_UEContextModificationResponseIEs);
+ } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) {
+ ret = s1ap_compare_s1ap_uecontextmodificationfailureies(
+ &m1->msg.s1ap_UEContextModificationFailureIEs,
+ &m2->msg.s1ap_UEContextModificationFailureIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_UECapabilityInfoIndication:
+ ret = s1ap_compare_s1ap_uecapabilityinfoindicationies(
+ &m1->msg.s1ap_UECapabilityInfoIndicationIEs,
+ &m2->msg.s1ap_UECapabilityInfoIndicationIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_UEContextRelease:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_uecontextreleasecommandies(
+ &m1->msg.s1ap_UEContextReleaseCommandIEs,
+ &m2->msg.s1ap_UEContextReleaseCommandIEs);
+ } else {
+ ret = s1ap_compare_s1ap_uecontextreleasecompleteies(
+ &m1->msg.s1ap_UEContextReleaseCompleteIEs,
+ &m2->msg.s1ap_UEContextReleaseCompleteIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_eNBStatusTransfer:
+ ret = s1ap_compare_s1ap_enbstatustransferies(
+ &m1->msg.s1ap_ENBStatusTransferIEs,
+ &m2->msg.s1ap_ENBStatusTransferIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_MMEStatusTransfer:
+ ret = s1ap_compare_s1ap_mmestatustransferies(
+ &m1->msg.s1ap_MMEStatusTransferIEs,
+ &m2->msg.s1ap_MMEStatusTransferIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_DeactivateTrace:
+ ret = s1ap_compare_s1ap_deactivatetraceies(
+ &m1->msg.s1ap_DeactivateTraceIEs,
+ &m2->msg.s1ap_DeactivateTraceIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_TraceStart:
+ ret = s1ap_compare_s1ap_tracestarties(
+ &m1->msg.s1ap_TraceStartIEs,
+ &m2->msg.s1ap_TraceStartIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_TraceFailureIndication:
+ ret = s1ap_compare_s1ap_tracefailureindicationies(
+ &m1->msg.s1ap_TraceFailureIndicationIEs,
+ &m2->msg.s1ap_TraceFailureIndicationIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_ENBConfigurationUpdate:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_enbconfigurationupdateies(
+ &m1->msg.s1ap_ENBConfigurationUpdateIEs,
+ &m2->msg.s1ap_ENBConfigurationUpdateIEs);
+ } else if (present == S1AP_PDU_PR_successfulOutcome) {
+ ret = s1ap_compare_s1ap_enbconfigurationupdateacknowledgeies(
+ &m1->msg.s1ap_ENBConfigurationUpdateAcknowledgeIEs,
+ &m2->msg.s1ap_ENBConfigurationUpdateAcknowledgeIEs);
+ } else {
+ ret = s1ap_compare_s1ap_enbconfigurationupdatefailureies(
+ &m1->msg.s1ap_ENBConfigurationUpdateFailureIEs,
+ &m2->msg.s1ap_ENBConfigurationUpdateFailureIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_MMEConfigurationUpdate:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_mmeconfigurationupdateies(
+ &m1->msg.s1ap_MMEConfigurationUpdateIEs,
+ &m2->msg.s1ap_MMEConfigurationUpdateIEs);
+ } else if (present == S1AP_PDU_PR_successfulOutcome) {
+ ret = s1ap_compare_s1ap_mmeconfigurationupdateacknowledgeies(
+ &m1->msg.s1ap_MMEConfigurationUpdateAcknowledgeIEs,
+ &m2->msg.s1ap_MMEConfigurationUpdateAcknowledgeIEs);
+ } else {
+ ret = s1ap_compare_s1ap_mmeconfigurationupdatefailureies(
+ &m1->msg.s1ap_MMEConfigurationUpdateFailureIEs,
+ &m2->msg.s1ap_MMEConfigurationUpdateFailureIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_LocationReportingControl:
+ ret = s1ap_compare_s1ap_locationreportingcontrolies(
+ &m1->msg.s1ap_LocationReportingControlIEs,
+ &m2->msg.s1ap_LocationReportingControlIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_LocationReportingFailureIndication:
+ ret = s1ap_compare_s1ap_locationreportingfailureindicationies(
+ &m1->msg.s1ap_LocationReportingFailureIndicationIEs,
+ &m2->msg.s1ap_LocationReportingFailureIndicationIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_LocationReport:
+ ret = s1ap_compare_s1ap_locationreporties(
+ &m1->msg.s1ap_LocationReportIEs,
+ &m2->msg.s1ap_LocationReportIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_OverloadStart:
+ ret = s1ap_compare_s1ap_overloadstarties(
+ &m1->msg.s1ap_OverloadStartIEs,
+ &m2->msg.s1ap_OverloadStartIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_OverloadStop:
+ ret = s1ap_compare_s1ap_overloadstopies(
+ &m1->msg.s1ap_OverloadStopIEs,
+ &m2->msg.s1ap_OverloadStopIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_WriteReplaceWarning:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_writereplacewarningrequesties(
+ &m1->msg.s1ap_WriteReplaceWarningRequestIEs,
+ &m2->msg.s1ap_WriteReplaceWarningRequestIEs);
+ } else {
+ ret = s1ap_compare_s1ap_writereplacewarningresponseies(
+ &m1->msg.s1ap_WriteReplaceWarningResponseIEs,
+ &m2->msg.s1ap_WriteReplaceWarningResponseIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_eNBDirectInformationTransfer:
+ ret = s1ap_compare_s1ap_enbdirectinformationtransferies(
+ &m1->msg.s1ap_ENBDirectInformationTransferIEs,
+ &m2->msg.s1ap_ENBDirectInformationTransferIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_MMEDirectInformationTransfer:
+
+ ret = s1ap_compare_s1ap_mmedirectinformationtransferies(
+ &m1->msg.s1ap_MMEDirectInformationTransferIEs,
+ &m2->msg.s1ap_MMEDirectInformationTransferIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_PrivateMessage:
+ case S1ap_ProcedureCode_id_eNBConfigurationTransfer:
+ case S1ap_ProcedureCode_id_MMEConfigurationTransfer:
+ AssertFatal(0, "TODO");
+ break;
+
+ case S1ap_ProcedureCode_id_CellTrafficTrace:
+ ret = s1ap_compare_s1ap_celltraffictraceies(
+ &m1->msg.s1ap_CellTrafficTraceIEs,
+ &m2->msg.s1ap_CellTrafficTraceIEs);
+ break;
+
+ case S1ap_ProcedureCode_id_Kill:
+ if (present == S1AP_PDU_PR_initiatingMessage) {
+ ret = s1ap_compare_s1ap_killrequesties(
+ &m1->msg.s1ap_KillRequestIEs,
+ &m2->msg.s1ap_KillRequestIEs);
+ } else {
+ ret = s1ap_compare_s1ap_killresponseies(
+ &m1->msg.s1ap_KillResponseIEs,
+ &m2->msg.s1ap_KillResponseIEs);
+ }
+ break;
+
+ case S1ap_ProcedureCode_id_downlinkUEAssociatedLPPaTransport:
+ ret = s1ap_compare_s1ap_downlinkueassociatedlppatransport_ies(
+ &m1->msg.s1ap_DownlinkUEAssociatedLPPaTransport_IEs,
+ &m2->msg.s1ap_DownlinkUEAssociatedLPPaTransport_IEs);
+ break;
+
+ case S1ap_ProcedureCode_id_uplinkUEAssociatedLPPaTransport:
+ ret = s1ap_compare_s1ap_uplinkueassociatedlppatransport_ies(
+ &m1->msg.s1ap_UplinkUEAssociatedLPPaTransport_IEs,
+ &m2->msg.s1ap_UplinkUEAssociatedLPPaTransport_IEs);
+ break;
+
+ case S1ap_ProcedureCode_id_downlinkNonUEAssociatedLPPaTransport:
+ ret = s1ap_compare_s1ap_downlinknonueassociatedlppatransport_ies(
+ &m1->msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs,
+ &m2->msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs);
+ break;
+
+ case S1ap_ProcedureCode_id_uplinkNonUEAssociatedLPPaTransport:
+ ret = s1ap_compare_s1ap_uplinknonueassociatedlppatransport_ies(
+ &m1->msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs,
+ &m2->msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs);
+ break;
+
+ default:
+ AssertFatal(0, "Unknown procedure code %ld", m1->procedureCode);
+ }
+ return ret;
+}
+
+
+void update_xpath_node_mme_ue_s1ap_id(et_s1ap_t * const s1ap, xmlNode *node, const S1ap_MME_UE_S1AP_ID_t new_id)
+{
+ xmlNode *cur_node = NULL;
+ xmlAttrPtr attr = NULL;
+ xmlChar *xml_char = NULL;
+ int size = 0;
+ int pos = 0;
+ int go_deeper_in_tree = 1;
+ //S1AP_INFO("%s() mme_ue_s1ap_id %u\n", __FUNCTION__, new_id);
+
+ // modify
+ for (cur_node = (xmlNode *)node; cur_node; cur_node = cur_node->next) {
+ go_deeper_in_tree = 1;
+ if ((!xmlStrcmp(cur_node->name, (const xmlChar *)"field"))) {
+ // do not get hidden fields
+ xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"hide");
+ if (NULL != xml_char) {
+ if ((!xmlStrcmp(xml_char, (const xmlChar *)"yes"))) {
+ go_deeper_in_tree = 0;
+ }
+ xmlFree(xml_char);
+ }
+ if (0 < go_deeper_in_tree) {
+ // first get size
+ xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"pos");
+ if (NULL != xml_char) {
+ pos = strtoul((const char *)xml_char, NULL, 0);
+ pos -= s1ap->xml_stream_pos_offset;
+ AssertFatal(pos >= 0, "Bad pos %d xml_stream_pos_offset %d", pos, s1ap->xml_stream_pos_offset);
+ xmlFree(xml_char);
+ xml_char = xmlGetProp((xmlNode *)cur_node, (const xmlChar *)"size");
+ if (NULL != xml_char) {
+ const xmlChar value_d[32];
+ const xmlChar value_h[20];
+ const xmlChar showname[64];
+ int ret = 0;
+ int pos2 = 0;
+ unsigned long int uli = 0;
+ char hex[3] = {0,0,0};
+ char *end_ptr = NULL;
+
+ size = strtoul((const char *)xml_char, NULL, 0);
+ xmlFree(xml_char);
+ // second: try to set value (always hex)
+ ret = snprintf((char *)value_d, 32, "%ld", new_id);
+ AssertFatal((ret > 0) && (ret < 32), "Could not convert int to dec str");
+ ret = snprintf((char *)value_h, 20, "C0%08X", new_id);
+ AssertFatal((ret > 0) && (ret < 20), "Could not convert int to hex str");
+ ret = snprintf((char *)showname, 64, "MME-UE-S1AP-ID: %d", new_id);
+ AssertFatal((ret > 0) && (ret < 64), "Could not convert int to dec str");
+
+ attr = xmlSetProp((xmlNode *)cur_node, (const xmlChar *)"value", value_h);
+ attr = xmlSetProp((xmlNode *)cur_node, (const xmlChar *)"show", value_d);
+ attr = xmlSetProp((xmlNode *)cur_node, (const xmlChar *)"showname", showname);
+ //TODO update s1ap->binary_stream @pos with new_id_hex, size
+ AssertFatal((pos+size) < s1ap->binary_stream_allocated_size, "Rewrite of mme_ue_s1ap_id out of bounds of binary_stream");
+ //avoid endianess issues
+ do {
+ hex[0] = value_h[pos2++];
+ hex[1] = value_h[pos2++];
+ hex[2] = '\0';
+ end_ptr = hex;
+ uli = strtoul(hex, &end_ptr, 16);
+ AssertFatal((uli != ULONG_MAX) && (end_ptr != NULL) && (*end_ptr == '\0'), "Conversion of hexstring %s failed returned %ld errno %d", hex, uli, errno);
+ s1ap->binary_stream[pos++] = (unsigned char)uli;
+ } while (pos2 < (2*5));
+ // update ASN1
+ et_decode_s1ap(s1ap);
+ //S1AP_INFO("Updated ASN1 for %s\n", showname);
+ }
+ }
+ }
+ }
+ if (0 < go_deeper_in_tree) {
+ update_xpath_node_mme_ue_s1ap_id(s1ap, cur_node->children, new_id);
+ }
+ }
+}
+
+/**
+ * update_xpath_nodes:
+ * @nodes: the nodes set.
+ * @value: the new value for the node(s)
+ *
+ * Prints the @nodes content to @output.
+ * From http://www.xmlsoft.org/examples/#xpath2.c
+ */
+void update_xpath_nodes_mme_ue_s1ap_id(et_s1ap_t * const s1ap_payload, xmlNodeSetPtr nodes, const S1ap_MME_UE_S1AP_ID_t new_id)
+{
+ int size = 0;
+ int i = 0;
+ xmlNode *s1ap_node = NULL;
+
+ size = (nodes) ? nodes->nodeNr : 0;
+ //S1AP_DEBUG("%s() num nodes %u\n", __FUNCTION__, size);
+
+ /*
+ * NOTE: the nodes are processed in reverse order, i.e. reverse document
+ * order because xmlNodeSetContent can actually free up descendant
+ * of the node and such nodes may have been selected too ! Handling
+ * in reverse order ensure that descendant are accessed first, before
+ * they get removed. Mixing XPath and modifications on a tree must be
+ * done carefully !
+ */
+ for(i = size - 1; i >= 0; i--) {
+ s1ap_node = nodes->nodeTab[i];
+ AssertFatal(NULL != s1ap_node, "One element of resultset of XPATH expression is NULL\n");
+ update_xpath_node_mme_ue_s1ap_id(s1ap_payload, s1ap_node, new_id);
+ /*
+ * All the elements returned by an XPath query are pointers to
+ * elements from the tree *except* namespace nodes where the XPath
+ * semantic is different from the implementation in libxml2 tree.
+ * As a result when a returned node set is freed when
+ * xmlXPathFreeObject() is called, that routine must check the
+ * element type. But node from the returned set may have been removed
+ * by xmlNodeSetContent() resulting in access to freed data.
+ * This can be exercised by running valgrind
+ * There is 2 ways around it:
+ * - make a copy of the pointers to the nodes from the result set
+ * then call xmlXPathFreeObject() and then modify the nodes
+ * or
+ * - remove the reference to the modified nodes from the node set
+ * as they are processed, if they are not namespace nodes.
+ */
+ if (nodes->nodeTab[i]->type != XML_NAMESPACE_DECL) {
+ nodes->nodeTab[i] = NULL;
+ }
+ }
+}
+//------------------------------------------------------------------------------
+int et_s1ap_update_mme_ue_s1ap_id(et_packet_t * const packet, const S1ap_MME_UE_S1AP_ID_t old_id, const S1ap_MME_UE_S1AP_ID_t new_id)
+{
+
+
+ xmlChar xpath_expression[ET_XPATH_EXPRESSION_MAX_LENGTH];
+ int ret = 0;
+ xmlDocPtr doc = NULL;
+ xmlXPathContextPtr xpath_ctx = NULL;
+ xmlXPathObjectPtr xpath_obj = NULL;
+
+ //S1AP_DEBUG("%s() packet num %u original frame number %u, mme_ue_s1ap_id %u -> %u\n", __FUNCTION__, packet->packet_number, packet->original_frame_number, old_id, new_id);
+
+ ret = snprintf(xpath_expression, ET_XPATH_EXPRESSION_MAX_LENGTH, "//field[@name=\"s1ap.MME_UE_S1AP_ID\"][@show=\"%u\"]", old_id);
+ AssertFatal((ret > 0) && (ret < ET_XPATH_EXPRESSION_MAX_LENGTH), "Could not build XPATH expression err=%d", ret);
+
+ doc = packet->sctp_hdr.u.data_hdr.payload.doc;
+ // Create xpath evaluation context
+ xpath_ctx = xmlXPathNewContext(doc);
+ if(xpath_ctx == NULL) {
+ fprintf(stderr,"Error: unable to create new XPath context\n");
+ xmlFreeDoc(doc);
+ return(-1);
+ }
+
+ // Evaluate xpath expression
+ xpath_obj = xmlXPathEvalExpression(xpath_expression, xpath_ctx);
+ xmlXPathFreeContext(xpath_ctx);
+ AssertFatal(xpath_obj != NULL, "Unable to evaluate XPATH expression \"%s\"\n", xpath_expression);
+
+ if(xmlXPathNodeSetIsEmpty(xpath_obj->nodesetval)){
+ xmlXPathFreeObject(xpath_obj);
+ S1AP_DEBUG("%s() No match \"%s\"packet num %u original frame number %u, mme_ue_s1ap_id %u -> %u\n",
+ __FUNCTION__, xpath_expression, packet->packet_number, packet->original_frame_number, old_id, new_id);
+ return -1;
+ }
+ // update selected nodes
+ update_xpath_nodes_mme_ue_s1ap_id(&packet->sctp_hdr.u.data_hdr.payload, xpath_obj->nodesetval, new_id);
+
+ // Cleanup of XPath data
+ xmlXPathFreeObject(xpath_obj);
+
+ return 0;
+}
diff --git a/openair3/TEST/EPC_TEST/play_scenario_s1ap_eNB_defs.h b/openair3/TEST/EPC_TEST/play_scenario_s1ap_eNB_defs.h
new file mode 100644
index 0000000000..ac77b88b24
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/play_scenario_s1ap_eNB_defs.h
@@ -0,0 +1,250 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.
+
+ *******************************************************************************/
+
+#include
+
+#include "queue.h"
+#include "tree.h"
+
+#include "sctp_eNB_defs.h"
+
+#ifndef PLAY_SCENARIO_S1AP_ENB_DEFS_H_
+#define PLAY_SCENARIO_S1AP_ENB_DEFS_H_
+
+#define ENB_TAC (1)
+#define ENB_MCC (208)
+#define ENB_MNC (92)
+
+#define ENB_NAME "Eurecom ENB"
+#define ENB_NAME_FORMAT (ENB_NAME" %u")
+
+#define S1AP_PORT_NUMBER (36412)
+#define S1AP_SCTP_PPID (18)
+
+#define X2AP_PORT_NUMBER (36422)
+#define X2AP_SCTP_PPID (27)
+
+#define S1AP_ENB_NAME_LENGTH_MAX (150)
+
+typedef enum {
+ /* Disconnected state: initial state for any association. */
+ S1AP_ENB_STATE_DISCONNECTED = 0x0,
+ /* State waiting for S1 Setup response message if eNB is MME accepted or
+ * S1 Setup failure if MME rejects the eNB.
+ */
+ S1AP_ENB_STATE_WAITING = 0x1,
+ /* The eNB is successfully connected to MME, UE contexts can be created. */
+ S1AP_ENB_STATE_CONNECTED = 0x2,
+ /* The MME has sent an overload start message. Once the MME disables the
+ * OVERLOAD marker, the state of the association will be
+ * S1AP_ENB_STATE_CONNECTED.
+ */
+ S1AP_ENB_OVERLOAD = 0x3,
+ /* Max number of states available */
+ S1AP_ENB_STATE_MAX,
+} s1ap_eNB_state_t;
+
+
+/* If the Overload Action IE in the OVERLOAD START message is set to
+ * - “reject all RRC connection establishments for non-emergency mobile
+ * originated data transfer “ (i.e. reject traffic corresponding to RRC cause
+ * “mo-data “ (TS 36.331 [16])), or
+ * - “reject all RRC connection establishments for signalling “ (i.e. reject
+ * traffic corresponding to RRC cause “modata” and “mo-signalling”
+ * (TS 36.331 [16])),or
+ * - “only permit RRC connection establishments for emergency sessions and
+ * mobile terminated services” (i.e. only permit traffic corresponding to RRC
+ * cause “emergency” and “mt-Access” (TS 36.331 [16])).
+ *
+ * NOTE: When the Overload Action IE is set to “only permit RRC connection
+ * establishments for emergency sessions and mobile terminated services”,
+ * emergency calls with RRC cause “highPriorityAcess” from high priority users
+ * are rejected (TS 24.301 [24]).
+ */
+typedef enum {
+ S1AP_OVERLOAD_REJECT_MO_DATA = 0x0,
+ S1AP_OVERLOAD_REJECT_ALL_SIGNALLING = 0x1,
+ S1AP_OVERLOAD_ONLY_EMERGENCY_AND_MT = 0x2,
+ S1AP_NO_OVERLOAD = 0x3,
+ S1AP_OVERLOAD_MAX,
+} s1ap_overload_state_t;
+
+/* Served PLMN identity element */
+struct plmn_identity_s {
+ uint16_t mcc;
+ uint16_t mnc;
+ uint8_t mnc_digit_length;
+ STAILQ_ENTRY(plmn_identity_s) next;
+};
+
+/* Served group id element */
+struct served_group_id_s {
+ uint16_t mme_group_id;
+ STAILQ_ENTRY(served_group_id_s) next;
+};
+
+/* Served mme code for a particular MME */
+struct mme_code_s {
+ uint8_t mme_code;
+ STAILQ_ENTRY(mme_code_s) next;
+};
+
+/* Served gummei element */
+struct served_gummei_s {
+ /* Number of MME served PLMNs */
+ uint8_t nb_served_plmns;
+ /* List of served PLMNs by MME */
+ STAILQ_HEAD(served_plmns_s, plmn_identity_s) served_plmns;
+
+ /* Number of group id in list */
+ uint8_t nb_group_id;
+ /* Served group id list */
+ STAILQ_HEAD(served_group_ids_s, served_group_id_s) served_group_ids;
+
+ /* Number of MME code */
+ uint8_t nb_mme_code;
+ /* MME Code to uniquely identify an MME within an MME pool area */
+ STAILQ_HEAD(mme_codes_s, mme_code_s) mme_codes;
+
+ /* Next GUMMEI element */
+ STAILQ_ENTRY(served_gummei_s) next;
+};
+
+struct s1ap_eNB_instance_s;
+
+/* This structure describes association of a eNB to a MME */
+typedef struct s1ap_eNB_mme_data_s {
+ /* MME descriptors tree, ordered by sctp assoc id */
+ RB_ENTRY(s1ap_eNB_mme_data_s) entry;
+
+ /* This is the optional name provided by the MME */
+ char *mme_name;
+ net_ip_address_t mme_net_ip_address; // useful for joining assoc_id and ip address of packets
+
+ /* List of served GUMMEI per MME. There is one GUMMEI per RAT with a max
+ * number of 8 RATs but in our case only one is used. The LTE related pool
+ * configuration is included on the first place in the list.
+ */
+ STAILQ_HEAD(served_gummeis_s, served_gummei_s) served_gummei;
+
+ /* Relative processing capacity of an MME with respect to the other MMEs
+ * in the pool in order to load-balance MMEs within a pool as defined
+ * in TS 23.401.
+ */
+ uint8_t relative_mme_capacity;
+
+ /* Current MME overload information (if any). */
+ s1ap_overload_state_t overload_state;
+ /* Current eNB->MME S1AP association state */
+ s1ap_eNB_state_t state;
+
+ /* Next usable stream for UE signalling */
+ int32_t nextstream;
+
+ /* Number of input/ouput streams */
+ uint16_t in_streams;
+ uint16_t out_streams;
+
+ /* Connexion id used between SCTP/S1AP */
+ uint16_t cnx_id;
+
+ /* SCTP association id */
+ int32_t assoc_id;
+
+ /* Only meaningfull in virtual mode */
+ struct s1ap_eNB_instance_s *s1ap_eNB_instance;
+} s1ap_eNB_mme_data_t;
+
+typedef struct s1ap_eNB_instance_s {
+ /* Next s1ap eNB association.
+ * Only used for virtual mode.
+ */
+ STAILQ_ENTRY(s1ap_eNB_instance_s) s1ap_eNB_entries;
+
+ /* Number of MME requested by eNB (tree size) */
+ uint32_t s1ap_mme_nb;
+ /* Number of MME for which association is pending */
+ uint32_t s1ap_mme_pending_nb;
+ /* Number of MME successfully associated to eNB */
+ uint32_t s1ap_mme_associated_nb;
+ /* Tree of S1AP MME associations ordered by association ID */
+ RB_HEAD(s1ap_mme_map, s1ap_eNB_mme_data_s) s1ap_mme_head;
+
+ /* TODO: add a map ordered by relative MME capacity */
+
+ /* Tree of UE ordered by eNB_ue_s1ap_id's */
+ RB_HEAD(s1ap_ue_map, s1ap_eNB_ue_context_s) s1ap_ue_head;
+
+ /* For virtual mode, mod_id as defined in the rest of the L1/L2 stack */
+ instance_t instance;
+
+ /* Displayable name of eNB */
+ char *eNB_name;
+ net_ip_address_t s1c_net_ip_address;
+
+ /* Unique eNB_id to identify the eNB within EPC.
+ * In our case the eNB is a macro eNB so the id will be 20 bits long.
+ * For Home eNB id, this field should be 28 bits long.
+ */
+ uint32_t eNB_id;
+ /* The type of the cell */
+ enum cell_type_e cell_type;
+
+ /* Tracking area code */
+ uint16_t tac;
+
+ /* Mobile Country Code
+ * Mobile Network Code
+ */
+ uint16_t mcc;
+ uint16_t mnc;
+ uint8_t mnc_digit_length;
+
+} s1ap_eNB_instance_t;
+
+typedef struct {
+ /* List of served eNBs
+ * Only used for virtual mode
+ */
+ STAILQ_HEAD(s1ap_eNB_instances_head_s, s1ap_eNB_instance_s) s1ap_eNB_instances_head;
+ /* Nb of registered eNBs */
+ uint8_t nb_registered_eNBs;
+
+ /* Generate a unique connexion id used between S1AP and SCTP */
+ uint16_t global_cnx_id;
+} s1ap_eNB_internal_data_t;
+
+int s1ap_eNB_compare_assoc_id(
+ struct s1ap_eNB_mme_data_s *p1, struct s1ap_eNB_mme_data_s *p2);
+
+/* Generate the tree management functions */
+RB_PROTOTYPE(s1ap_mme_map, s1ap_eNB_mme_data_s, entry,
+ s1ap_eNB_compare_assoc_id);
+
+#endif /* PLAY_SCENARIO_S1AP_ENB_DEFS_H_ */
diff --git a/openair3/TEST/EPC_TEST/play_scenario_sctp.c b/openair3/TEST/EPC_TEST/play_scenario_sctp.c
new file mode 100644
index 0000000000..5d5489089b
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/play_scenario_sctp.c
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ OpenAirInterface
+ Copyright(c) 1999 - 2014 Eurecom
+
+ OpenAirInterface is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+
+ OpenAirInterface is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenAirInterface.The full GNU General Public License is
+ included in this distribution in the file called "COPYING". If not,
+ see .
+
+ Contact Information
+ OpenAirInterface Admin: openair_admin@eurecom.fr
+ OpenAirInterface Tech : openair_tech@eurecom.fr
+ OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
+
+ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
+
+ *******************************************************************************/
+
+/*
+ play_scenario_sctp.c
+ -------------------
+ AUTHOR : Lionel GAUTHIER
+ COMPANY : EURECOM
+ EMAIL : Lionel.Gauthier@eurecom.fr
+ */
+
+
+#include
+
+#include "intertask_interface.h"
+#include "platform_types.h"
+#include "assertions.h"
+#include "play_scenario.h"
+
+//------------------------------------------------------------------------------
+asn_comp_rval_t * et_sctp_data_is_matching(sctp_datahdr_t * const sctp1, sctp_datahdr_t * const sctp2, const uint32_t constraints)
+{
+ asn_comp_rval_t *rv = NULL;
+ // no comparison for ports
+ if (sctp1->ppid != sctp2->ppid) {
+ S1AP_WARN("No Matching SCTP PPID %u %u\n", sctp1->ppid, sctp2->ppid);
+ rv = calloc(1, sizeof(asn_comp_rval_t));
+ rv->err_code = ET_ERROR_MATCH_PACKET_SCTP_PPID;
+ return rv;
+ }
+ if (sctp1->assoc_id != sctp2->assoc_id) {
+ S1AP_WARN("No Matching SCTP assoc id %u %u\n", sctp1->assoc_id, sctp2->assoc_id);
+ rv = calloc(1, sizeof(asn_comp_rval_t));
+ rv->err_code = ET_ERROR_MATCH_PACKET_SCTP_ASSOC_ID;
+ return rv;
+ }
+ if (sctp1->stream != sctp2->stream) {
+ if (constraints & ET_BIT_MASK_MATCH_SCTP_STREAM) {
+ rv = calloc(1, sizeof(asn_comp_rval_t));
+ rv->err_code = ET_ERROR_MATCH_PACKET_SCTP_STREAM_ID;
+ return rv;
+ } else {
+ S1AP_WARN("No Matching SCTP stream %u %u\n", sctp1->stream, sctp2->stream);
+ }
+ }
+ // We do not have SSN from lower layers
+// if (sctp1->ssn != sctp2->ssn) {
+// if (constraints & ET_BIT_MASK_MATCH_SCTP_SSN) {
+// rv = calloc(1, sizeof(asn_comp_rval_t));
+// rv->err_code = ET_ERROR_MATCH_PACKET_SCTP_SSN;
+// return rv;
+// } else {
+// S1AP_WARN("No Matching SCTP STREAM SN %u %u\n", sctp1->ssn, sctp2->ssn);
+// }
+// }
+ return et_s1ap_is_matching(&sctp1->payload, &sctp2->payload, constraints);
+}
+
+//------------------------------------------------------------------------------
+asn_comp_rval_t * et_sctp_is_matching(et_sctp_hdr_t * const sctp1, et_sctp_hdr_t * const sctp2, const uint32_t constraints)
+{
+ // no comparison for ports
+ asn_comp_rval_t *rv = NULL;
+ if (sctp1->chunk_type != sctp2->chunk_type){
+ S1AP_WARN("No Matching chunk_type %u %u\n", sctp1->chunk_type, sctp2->chunk_type);
+ rv = calloc(1, sizeof(asn_comp_rval_t));
+ rv->err_code = ET_ERROR_MATCH_PACKET_SCTP_CHUNK_TYPE;
+ return rv;
+ }
+ switch (sctp1->chunk_type) {
+ case SCTP_CID_DATA:
+ return et_sctp_data_is_matching(&sctp1->u.data_hdr, &sctp2->u.data_hdr, constraints);
+ break;
+
+ case SCTP_CID_INIT:
+ AssertFatal(0, "Not needed now");
+ break;
+ case SCTP_CID_INIT_ACK:
+ AssertFatal(0, "Not needed now");
+ break;
+ default:
+ AssertFatal(0, "Not needed now cid %d", sctp1->chunk_type);
+ }
+
+ return NULL;
+}
diff --git a/openair3/UTILS/conversions.h b/openair3/UTILS/conversions.h
index aaa2b9714f..47912f0d92 100644
--- a/openair3/UTILS/conversions.h
+++ b/openair3/UTILS/conversions.h
@@ -275,7 +275,6 @@ do { \
(bITsTRING)->size = 3; \
(bITsTRING)->bits_unused = 4; \
} while(0)
-/*
/* TS 36.413 v10.9.0 section 9.2.1.38:
* E-UTRAN CGI/Cell Identity
* The leftmost bits of the Cell
diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
index 2f73d6978c..d9b7bfa905 100644
--- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
+++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
@@ -412,7 +412,7 @@ void calibrate_rf(openair0_device *device) {
bladerf_set_correction(brf->dev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_I,offIold);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
}
for (meanIold=meanQold=i=j=0;idev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_I,offI);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
}
for (meanI=meanQ=i=j=0;idev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_Q,offQold);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
}
// project on fs/4
for (meanIold=meanQold=i=j=0;idev,BLADERF_MODULE_TX,BLADERF_CORR_LMS_DCOFF_Q,offQ);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
}
for (meanI=meanQ=i=j=0;idev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_PHASE,offphaseold);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
}
// project on fs/8 (Image of TX signal in +ve frequencies)
for (meanIold=meanQold=i=j=0;idev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_PHASE,offphase);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
}
// project on fs/8 (Image of TX signal in +ve frequencies)
for (meanI=meanQ=i=j=0;idev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_GAIN,offgainold);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
}
// project on fs/8 (Image of TX signal in +ve frequencies)
for (meanIold=meanQold=i=j=0;idev,BLADERF_MODULE_TX,BLADERF_CORR_FPGA_GAIN,offgain);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
}
// project on fs/8 (Image of TX signal in +ve frequencies)
for (meanI=meanQ=i=j=0;idev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_PHASE,offphaseold);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
}
// project on -3fs/8 (Image of TX signal in -ve frequencies)
for (meanIold=meanQold=i=j=0;idev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_PHASE,offphase);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
}
// project on -3fs/8 (Image of TX signal in -ve frequencies)
for (meanI=meanQ=i=j=0;idev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_GAIN,offgainold);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0,0);
}
// project on -3fs/8 (Image of TX signal in +ve frequencies)
for (meanIold=meanQold=i=j=0;idev,BLADERF_MODULE_RX,BLADERF_CORR_FPGA_GAIN,offgain);
for (i=0;i<10;i++) {
trx_brf_read(device, &ptimestamp, (void **)&calib_buffp, RXDCLENGTH, 0);
- trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0);
+ trx_brf_write(device,ptimestamp+5*RXDCLENGTH, (void **)&calib_tx_buffp, RXDCLENGTH, 0, 0);
}
// project on 3fs/8 (Image of TX signal in -ve frequencies)
for (meanI=meanQ=i=j=0;ilog_level));
printf("BLADERF: Initializing openair0_device\n");
- device->priv = brf;
device->Mod_id = num_devices++;
device->type = BLADERF_DEV;
device->trx_start_func = trx_brf_start;
@@ -1081,6 +1080,7 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) {
device->trx_set_freq_func = trx_brf_set_freq;
device->trx_set_gains_func = trx_brf_set_gains;
device->openair0_cfg = openair0_cfg;
+ device->priv = (void *)brf;
calibrate_rf(device);
diff --git a/targets/ARCH/LMSSDR/enb_sodera_lowband_Lrx_10MHz_rx19dB_txfull.ini b/targets/ARCH/LMSSDR/enb_sodera_lowband_Lrx_10MHz_rx19dB_txfull.ini
new file mode 100644
index 0000000000..f47d3bf433
--- /dev/null
+++ b/targets/ARCH/LMSSDR/enb_sodera_lowband_Lrx_10MHz_rx19dB_txfull.ini
@@ -0,0 +1,1128 @@
+[reference_clocks]
+sxr_ref_clk_mhz=30.72
+sxt_ref_clk_mhz=30.72
+[lms7002_registers_b]
+0x05A7=0x0000
+0x05A5=0x0000
+0x05A2=0x0000
+0x05A0=0x0000
+0x0599=0x0000
+0x0598=0x0000
+0x0596=0x0000
+0x0594=0x0000
+0x0592=0x0000
+0x0591=0x0000
+0x0590=0x0000
+0x058E=0x0000
+0x058C=0x0000
+0x059D=0x0000
+0x058A=0x0000
+0x0589=0x0000
+0x0587=0x0000
+0x0585=0x0000
+0x0595=0x0000
+0x0584=0x0000
+0x059F=0x0000
+0x0583=0x0000
+0x0582=0x0000
+0x0567=0x0000
+0x0566=0x0000
+0x0565=0x0000
+0x0564=0x0000
+0x0563=0x0000
+0x0562=0x0000
+0x055F=0x0000
+0x055D=0x0000
+0x055A=0x0000
+0x058F=0x0000
+0x0557=0x0000
+0x0593=0x0000
+0x0554=0x0000
+0x0552=0x0000
+0x0551=0x0000
+0x0550=0x0000
+0x054D=0x0000
+0x054C=0x0000
+0x0549=0x0000
+0x0547=0x0000
+0x0546=0x0000
+0x0545=0x0000
+0x0544=0x0000
+0x0543=0x0000
+0x0553=0x0000
+0x0542=0x0000
+0x0541=0x0000
+0x0527=0x0000
+0x0526=0x0000
+0x0524=0x0000
+0x0525=0x0000
+0x0523=0x0000
+0x0521=0x0000
+0x055C=0x0000
+0x051A=0x0000
+0x0519=0x0000
+0x0518=0x0000
+0x0514=0x0000
+0x0513=0x0000
+0x0511=0x0000
+0x05A6=0x0000
+0x051E=0x0000
+0x050F=0x0000
+0x0516=0x0000
+0x050E=0x0000
+0x050C=0x0000
+0x050B=0x0000
+0x050A=0x0000
+0x0509=0x0000
+0x0507=0x0000
+0x0506=0x0000
+0x0503=0x0000
+0x04E7=0x0000
+0x04E6=0x0000
+0x0512=0x0000
+0x04E5=0x0000
+0x04E4=0x0000
+0x0321=0x0000
+0x0320=0x0000
+0x0323=0x0000
+0x031B=0x0000
+0x0319=0x0000
+0x0260=0x0000
+0x031F=0x0000
+0x0360=0x0000
+0x0312=0x0000
+0x0310=0x0000
+0x0245=0x0000
+0x0581=0x0000
+0x045D=0x0000
+0x030E=0x0000
+0x0203=0x0000
+0x0482=0x0000
+0x0588=0x0000
+0x0308=0x0000
+0x048A=0x0000
+0x0307=0x0000
+0x0282=0x0000
+0x038C=0x0000
+0x0510=0x0000
+0x0302=0x0000
+0x0301=0x0000
+0x0309=0x0000
+0x0300=0x0000
+0x044E=0x0000
+0x034F=0x0000
+0x055B=0x0000
+0x0114=0x008D
+0x02E5=0x0000
+0x02E4=0x0000
+0x02E1=0x0000
+0x02D5=0x0000
+0x0259=0x0000
+0x0517=0x0000
+0x0481=0x0000
+0x030B=0x0000
+0x0392=0x0000
+0x02DE=0x0000
+0x02DD=0x0000
+0x0297=0x0000
+0x0209=0x0000
+0x0400=0x0081
+0x02D8=0x0000
+0x0104=0x0088
+0x0103=0x0A12
+0x0347=0x0000
+0x0457=0x0000
+0x058D=0x0000
+0x02D7=0x0000
+0x02D1=0x0000
+0x04C8=0x0000
+0x02D3=0x0000
+0x02CB=0x0000
+0x0250=0x0000
+0x0306=0x0000
+0x04A4=0x0000
+0x044A=0x0000
+0x054B=0x0000
+0x02C7=0x0000
+0x02C1=0x0000
+0x031D=0x0000
+0x0440=0x0020
+0x045E=0x0000
+0x02C4=0x0000
+0x02C2=0x0000
+0x02DB=0x0000
+0x0357=0x0000
+0x0201=0x07FF
+0x0483=0x0000
+0x05A4=0x0000
+0x02A3=0x0000
+0x02A1=0x0000
+0x028D=0x0000
+0x02D2=0x0000
+0x039C=0x0000
+0x02A0=0x0000
+0x010E=0x2040
+0x030A=0x0000
+0x029F=0x0000
+0x029C=0x0000
+0x029E=0x0000
+0x011D=0x9555
+0x039E=0x0000
+0x0296=0x0000
+0x0555=0x0000
+0x0349=0x0000
+0x0295=0x0000
+0x010D=0x009E
+0x04C4=0x0000
+0x0292=0x0000
+0x02CF=0x0000
+0x04D1=0x0000
+0x0291=0x0000
+0x02DF=0x0000
+0x0290=0x0000
+0x020A=0x0080
+0x0102=0x3180
+0x0388=0x0000
+0x0120=0xB9FF
+0x0317=0x0000
+0x0244=0x0000
+0x059B=0x0000
+0x0322=0x0000
+0x010F=0x3042
+0x0119=0x18CB
+0x02A6=0x0000
+0x051F=0x0000
+0x029A=0x0000
+0x049A=0x0000
+0x059E=0x0000
+0x04D7=0x0000
+0x0318=0x0000
+0x02A7=0x0000
+0x0200=0x0081
+0x02C5=0x0000
+0x0122=0x033F
+0x0110=0x0BF4
+0x0204=0x0000
+0x0252=0x0000
+0x011E=0x05DC
+0x049B=0x0000
+0x0294=0x0000
+0x011C=0xAD41
+0x02D6=0x0000
+0x0311=0x0000
+0x0117=0x280C
+0x0540=0x0000
+0x02A4=0x0000
+0x0485=0x0000
+0x02E0=0x0000
+0x0118=0x018C
+0x0489=0x0000
+0x04A7=0x0000
+0x0101=0x7800
+0x0558=0x0000
+0x02C6=0x0000
+0x05A1=0x0000
+0x02C9=0x0000
+0x0500=0x0000
+0x039D=0x0000
+0x011F=0x3680
+0x030C=0x0000
+0x04DF=0x0000
+0x0281=0x0000
+0x0106=0x3182
+0x028E=0x0000
+0x0326=0x0000
+0x0113=0x03C3
+0x04CB=0x0000
+0x0391=0x0000
+0x0105=0x0007
+0x02D9=0x0000
+0x02CE=0x0000
+0x044F=0x0000
+0x038B=0x0000
+0x02D4=0x0000
+0x0107=0x318C
+0x0495=0x0000
+0x0246=0x0000
+0x0303=0x0000
+0x02E6=0x0000
+0x045B=0x0000
+0x0100=0x3409
+0x0340=0x0000
+0x0208=0x0070
+0x0111=0x0083
+0x0247=0x0000
+0x024B=0x0000
+0x045C=0x0000
+0x024D=0x0000
+0x0202=0x07FF
+0x0383=0x0000
+0x054A=0x0000
+0x0401=0x07FF
+0x0206=0x0000
+0x0124=0x0000
+0x0341=0x0000
+0x0287=0x0000
+0x0501=0x0000
+0x034C=0x0000
+0x030F=0x0000
+0x025D=0x0000
+0x0406=0x0000
+0x051B=0x0000
+0x0313=0x0000
+0x010A=0x104C
+0x0461=0x0000
+0x0121=0x356A
+0x0115=0x0009
+0x0112=0xC0E6
+0x039A=0x0000
+0x02CC=0x0000
+0x0116=0x8180
+0x04A0=0x0000
+0x0108=0x9442
+0x020B=0x4000
+0x0251=0x0000
+0x0488=0x0000
+0x0241=0x0000
+0x038F=0x0000
+0x02DC=0x0000
+0x024C=0x0000
+0x0494=0x0000
+0x051D=0x0000
+0x0243=0x0000
+0x0556=0x0000
+0x040A=0x0000
+0x04CD=0x0000
+0x0249=0x0000
+0x0261=0x0000
+0x024A=0x0000
+0x0285=0x0000
+0x0280=0x0000
+0x0346=0x0000
+0x024E=0x0000
+0x024F=0x0000
+0x0253=0x0000
+0x0255=0x0000
+0x0502=0x0000
+0x0258=0x0000
+0x0298=0x0000
+0x05A3=0x0000
+0x0367=0x0000
+0x0240=0x0020
+0x0256=0x0000
+0x0242=0x0000
+0x025A=0x0000
+0x04E2=0x0000
+0x04C5=0x0000
+0x025B=0x0000
+0x020C=0x7FFF
+0x0205=0x0000
+0x0361=0x0000
+0x0515=0x0000
+0x025C=0x0000
+0x0355=0x0000
+0x044C=0x0000
+0x010C=0x88FD
+0x0284=0x0000
+0x0396=0x0000
+0x0286=0x0000
+0x028F=0x0000
+0x031C=0x0000
+0x031A=0x0000
+0x0363=0x0000
+0x0289=0x0000
+0x059C=0x0000
+0x04DD=0x0000
+0x028A=0x0000
+0x040C=0x0000
+0x028B=0x0000
+0x0450=0x0000
+0x0352=0x0000
+0x028C=0x0000
+0x04C2=0x0000
+0x025E=0x0000
+0x04DA=0x0000
+0x0327=0x0000
+0x0380=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0561=0x0000
+0x0344=0x0000
+0x0586=0x0000
+0x0484=0x0000
+0x0345=0x0000
+0x0505=0x0000
+0x035B=0x0000
+0x034A=0x0000
+0x0455=0x0000
+0x011A=0x2E02
+0x034B=0x0000
+0x034D=0x0000
+0x035C=0x0000
+0x034E=0x0000
+0x0293=0x0000
+0x03A6=0x0000
+0x0350=0x0000
+0x0445=0x0000
+0x048F=0x0000
+0x0351=0x0000
+0x0353=0x0000
+0x050D=0x0000
+0x02CD=0x0000
+0x0490=0x0000
+0x0354=0x0000
+0x0348=0x0000
+0x0498=0x0000
+0x0356=0x0000
+0x0316=0x0000
+0x030D=0x0000
+0x040E=0x0000
+0x0522=0x0000
+0x049F=0x0000
+0x029D=0x0000
+0x04A3=0x0000
+0x0359=0x0000
+0x0299=0x0000
+0x0452=0x0000
+0x02C8=0x0000
+0x035A=0x0000
+0x0449=0x0000
+0x0442=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x0597=0x0000
+0x035F=0x0000
+0x0325=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0381=0x0000
+0x0288=0x0000
+0x0382=0x0000
+0x0384=0x0000
+0x0315=0x0000
+0x0385=0x0000
+0x054F=0x0000
+0x0389=0x0000
+0x04E3=0x0000
+0x040F=0x0000
+0x0386=0x0000
+0x054E=0x0000
+0x02D0=0x0000
+0x03A0=0x0000
+0x0387=0x0000
+0x0362=0x0000
+0x038A=0x0000
+0x0395=0x0000
+0x038D=0x0000
+0x02E7=0x0000
+0x0324=0x0000
+0x038E=0x0000
+0x0305=0x0000
+0x0393=0x0000
+0x0459=0x0000
+0x0394=0x0000
+0x0123=0x267B
+0x0497=0x0000
+0x0398=0x0000
+0x0408=0x0000
+0x0399=0x0000
+0x039B=0x0000
+0x0248=0x0000
+0x039F=0x0000
+0x049E=0x0000
+0x059A=0x0000
+0x048D=0x0000
+0x051C=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x0520=0x0000
+0x03A7=0x0000
+0x055E=0x0000
+0x0402=0x07FF
+0x0403=0x0000
+0x04D8=0x0000
+0x0560=0x0000
+0x0404=0x0000
+0x0254=0x0000
+0x0405=0x0000
+0x0407=0x0000
+0x0580=0x0000
+0x0409=0x0000
+0x040B=0x7FFF
+0x040D=0x0000
+0x0441=0x0000
+0x0508=0x0000
+0x0443=0x0000
+0x0444=0x0000
+0x04CA=0x0000
+0x0446=0x0000
+0x0454=0x0000
+0x0448=0x0000
+0x044B=0x0000
+0x02E2=0x0000
+0x044D=0x0000
+0x0390=0x0000
+0x0451=0x0000
+0x0453=0x0000
+0x0559=0x0000
+0x0456=0x0000
+0x0314=0x0000
+0x0458=0x0000
+0x02DA=0x0000
+0x045A=0x0000
+0x0447=0x0000
+0x0460=0x0000
+0x0480=0x0000
+0x045F=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0358=0x0000
+0x048B=0x0000
+0x048C=0x0000
+0x0283=0x0000
+0x048E=0x0000
+0x029B=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x04A1=0x0000
+0x0493=0x0000
+0x04C3=0x0000
+0x0496=0x0000
+0x02C0=0x0000
+0x0499=0x0000
+0x02E3=0x0000
+0x0397=0x0000
+0x049C=0x0000
+0x04C7=0x0000
+0x049D=0x0000
+0x0109=0x61C1
+0x04A2=0x0000
+0x04A5=0x0000
+0x04A6=0x0000
+0x0257=0x0000
+0x04D6=0x0000
+0x031E=0x0000
+0x04C0=0x0000
+0x02CA=0x0000
+0x04C9=0x0000
+0x02C3=0x0000
+0x04C1=0x0000
+0x0207=0x0000
+0x04C6=0x0000
+0x02A5=0x0000
+0x04CC=0x0000
+0x04CE=0x0000
+0x025F=0x0000
+0x04CF=0x0000
+0x04D0=0x0000
+0x0548=0x0000
+0x04D2=0x0000
+0x04D3=0x0000
+0x0504=0x0000
+0x04D4=0x0000
+0x0304=0x0000
+0x04D5=0x0000
+0x04D9=0x0000
+0x04DB=0x0000
+0x04DC=0x0000
+0x058B=0x0000
+0x04DE=0x0000
+0x04E0=0x0000
+0x02A2=0x0000
+0x03A1=0x0000
+0x04E1=0x0000
+[lms7002_registers_a]
+0x05A7=0x0000
+0x05A5=0x0000
+0x05A2=0x0000
+0x0599=0x0000
+0x0598=0xF61D
+0x0596=0x0A94
+0x0594=0xF40D
+0x0592=0x0DF1
+0x0591=0xFCFE
+0x0590=0xEF99
+0x058E=0x1316
+0x058C=0xEA50
+0x059D=0x0000
+0x058A=0x17DC
+0x0585=0xDAA2
+0x0595=0x00BC
+0x0584=0xE7E2
+0x059F=0x0000
+0x0583=0x2E45
+0x0582=0x150F
+0x0567=0x4049
+0x0566=0x0906
+0x0565=0xB77F
+0x0563=0x4F91
+0x055F=0x5852
+0x055D=0xA6B5
+0x055A=0xBE2A
+0x058F=0x0605
+0x0557=0x4C24
+0x0593=0x00D8
+0x0554=0x6901
+0x0552=0x8D44
+0x0551=0xD7B7
+0x0550=0x79FA
+0x054C=0x7FFF
+0x0549=0x18C9
+0x0547=0xD7B7
+0x0546=0x8D44
+0x0545=0x364E
+0x0544=0x6901
+0x0543=0xBD96
+0x0553=0x364E
+0x0542=0xA2B5
+0x0541=0x4C24
+0x0527=0xACB9
+0x0526=0xBE2A
+0x0525=0x57AC
+0x0523=0xA6B5
+0x0521=0x5852
+0x055C=0x3347
+0x051A=0x0906
+0x0518=0xEFF2
+0x0514=0xE7E2
+0x0513=0xDAA2
+0x0511=0x1D10
+0x05A6=0x0000
+0x051E=0xF524
+0x050F=0xEA5F
+0x0516=0x150F
+0x050E=0x17DC
+0x050C=0xEA50
+0x050B=0xF5EF
+0x050A=0x1316
+0x0509=0x0605
+0x0507=0xFCFE
+0x0506=0x0DF1
+0x0503=0x00BC
+0x04E7=0x0000
+0x04E6=0x0000
+0x04E4=0x0000
+0x04E0=0x0000
+0x058B=0x0F45
+0x04DE=0x0000
+0x04DC=0x0000
+0x04DB=0x0000
+0x04D9=0x0000
+0x04D8=0x0000
+0x059E=0x0000
+0x04D7=0x0000
+0x0504=0xF40D
+0x04D4=0x0000
+0x04D3=0x0000
+0x0548=0x79FA
+0x04D2=0x0000
+0x04D1=0x0000
+0x04D0=0x0000
+0x04CE=0x0000
+0x04C8=0x0000
+0x04E2=0x0000
+0x04C5=0x0000
+0x04C4=0x0000
+0x04C2=0x0000
+0x04A7=0x0000
+0x04A6=0x0000
+0x04A5=0x0000
+0x04A1=0x0000
+0x04A0=0x0000
+0x0522=0xDB10
+0x049F=0x0000
+0x049E=0x0000
+0x04C7=0x0000
+0x049D=0x0000
+0x049B=0x0000
+0x049A=0x0000
+0x04C3=0x0000
+0x0496=0x0000
+0x0494=0x0000
+0x02D3=0x0000
+0x02D1=0x0000
+0x02CB=0x0000
+0x0250=0x0000
+0x0096=0x0000
+0x04C1=0x0000
+0x02C3=0x0000
+0x02C4=0x0000
+0x02C2=0x0000
+0x0499=0x0000
+0x02C0=0x0000
+0x0201=0x07FF
+0x0483=0x0000
+0x05A4=0x0000
+0x02A3=0x0000
+0x008B=0x2756
+0x02A1=0x0000
+0x028D=0x0000
+0x029C=0x0000
+0x029E=0x0000
+0x0297=0x0000
+0x0296=0x0000
+0x0555=0xBD96
+0x0349=0x0000
+0x010D=0x015C
+0x02CF=0x0000
+0x0291=0x0000
+0x02DF=0x0000
+0x0290=0x0000
+0x0021=0x0E9F
+0x0450=0x0000
+0x0558=0x5009
+0x02C6=0x0000
+0x0101=0x7800
+0x059C=0x0000
+0x04DD=0x0000
+0x028A=0x0000
+0x0121=0x3652
+0x0285=0x0000
+0x0280=0x0000
+0x0319=0x0000
+0x04CF=0x0000
+0x025F=0x0000
+0x025D=0x0000
+0x030F=0x0000
+0x0406=0x0000
+0x02C5=0x0000
+0x0200=0x0301
+0x0281=0x0000
+0x04A2=0x0000
+0x0109=0x8CC1
+0x0355=0x0000
+0x044C=0x0000
+0x025B=0x0000
+0x0298=0x0000
+0x0502=0x0A94
+0x0258=0x0000
+0x0255=0x0000
+0x04D6=0x0000
+0x0257=0x0000
+0x0252=0x0000
+0x0204=0xC016
+0x024F=0x0000
+0x04CC=0x0000
+0x02A5=0x0000
+0x0497=0x0000
+0x0123=0x067B
+0x0495=0x0000
+0x0246=0x0000
+0x051D=0x4F91
+0x0243=0x0000
+0x0556=0xA2B5
+0x040A=0x1000
+0x025A=0x0000
+0x0242=0x0000
+0x020C=0x8000
+0x0251=0x0000
+0x02DD=0x0000
+0x0020=0xFFFD
+0x0488=0x0000
+0x020A=0x0080
+0x0102=0x3180
+0x04C6=0x0000
+0x0207=0x0000
+0x04DA=0x0000
+0x025E=0x0000
+0x0206=0x0000
+0x00A3=0x6565
+0x02E2=0x0000
+0x044D=0x0000
+0x0292=0x0000
+0x002A=0x0086
+0x0245=0x0000
+0x0581=0xC89D
+0x045D=0x0000
+0x024D=0x0000
+0x002B=0x4032
+0x02A0=0x0000
+0x010E=0x0285
+0x0286=0x0000
+0x009E=0x658C
+0x0088=0x04F0
+0x0085=0x0001
+0x0295=0x0000
+0x0089=0x0048
+0x0256=0x0000
+0x0093=0x0000
+0x0092=0x0001
+0x031B=0x0000
+0x0111=0x0099
+0x0095=0x0000
+0x02A7=0x0000
+0x0203=0x2F99
+0x030E=0x0000
+0x0482=0x0000
+0x05A0=0x0000
+0x009C=0x658C
+0x0381=0x0000
+0x0122=0x033F
+0x0110=0x0BFF
+0x0100=0xB409
+0x0028=0x0101
+0x0026=0x0101
+0x0524=0x3347
+0x009D=0x6565
+0x0294=0x0000
+0x0106=0x3182
+0x028E=0x0000
+0x0326=0x0000
+0x0113=0x03C3
+0x04CB=0x0000
+0x0391=0x0000
+0x05A1=0x0000
+0x02C9=0x0000
+0x0500=0xF61D
+0x039D=0x0000
+0x011F=0x3680
+0x0395=0x0000
+0x024B=0x0000
+0x045C=0x0000
+0x0247=0x0000
+0x0512=0x196B
+0x04E5=0x0000
+0x0024=0x50D8
+0x0353=0x0000
+0x050D=0x0F45
+0x02CD=0x0000
+0x0490=0x0000
+0x0501=0xFDFB
+0x034C=0x0000
+0x00AA=0x0000
+0x0350=0x0000
+0x0445=0x0000
+0x048F=0x0000
+0x008A=0x0491
+0x0453=0x0000
+0x0124=0x0000
+0x0260=0x0000
+0x00A1=0x6565
+0x0356=0x0000
+0x0241=0x0000
+0x04CD=0x0000
+0x0249=0x0000
+0x002C=0x0000
+0x038F=0x0000
+0x008C=0x267B
+0x0459=0x0000
+0x0394=0x0000
+0x054D=0xF7A3
+0x00A6=0x0001
+0x002D=0xFFFF
+0x00AC=0x2000
+0x0253=0x0000
+0x028B=0x0000
+0x040C=0x40F8
+0x0099=0x6565
+0x0310=0x0000
+0x00A2=0x6565
+0x0589=0xEA5F
+0x002F=0x3840
+0x0597=0xFDFB
+0x035F=0x0000
+0x0562=0xF524
+0x0025=0x0101
+0x011C=0xAD41
+0x011D=0x2AAA
+0x039E=0x0000
+0x0289=0x0000
+0x0282=0x0000
+0x0307=0x0000
+0x038C=0x0000
+0x0087=0x0000
+0x0399=0x0000
+0x054B=0xF7A3
+0x02C7=0x0000
+0x0519=0x4049
+0x009F=0x658C
+0x0515=0x2E45
+0x025C=0x0000
+0x00A5=0x6565
+0x0301=0x0000
+0x02C1=0x0000
+0x0259=0x0000
+0x02D5=0x0000
+0x02E1=0x0000
+0x0517=0xC89D
+0x0481=0x0000
+0x00A8=0x0000
+0x02D2=0x0000
+0x039C=0x0000
+0x0564=0x0000
+0x00AB=0x0040
+0x0261=0x0000
+0x002E=0x0000
+0x02DE=0x0000
+0x0540=0x5009
+0x02A4=0x0000
+0x0485=0x0000
+0x0489=0x0000
+0x00AD=0x03FF
+0x024A=0x0000
+0x0029=0x0101
+0x0097=0x0000
+0x011E=0x061D
+0x00AE=0x0000
+0x00A7=0x6565
+0x020B=0x4000
+0x0098=0x0000
+0x0108=0xFC26
+0x0027=0x05E4
+0x0117=0x100C
+0x0383=0x0000
+0x0202=0x0794
+0x054A=0x8184
+0x00A4=0x6565
+0x0401=0x07FF
+0x0086=0x4101
+0x010C=0x8865
+0x02D8=0x0000
+0x0347=0x0000
+0x0457=0x0000
+0x0103=0x0A12
+0x0104=0x0088
+0x0357=0x0000
+0x02DB=0x0000
+0x0400=0x0101
+0x009B=0x6565
+0x0105=0x0007
+0x05A3=0x0000
+0x0240=0x0028
+0x0367=0x0000
+0x044F=0x0000
+0x038B=0x0000
+0x0284=0x0000
+0x0396=0x0000
+0x051F=0xAB08
+0x029A=0x0000
+0x0361=0x0000
+0x0205=0x0000
+0x0119=0x18DF
+0x02A6=0x0000
+0x010F=0x3042
+0x04C0=0x0000
+0x031E=0x0000
+0x02CC=0x0000
+0x0116=0x8180
+0x0587=0x1D10
+0x0023=0x5550
+0x048C=0x0000
+0x0112=0x3171
+0x039A=0x0000
+0x0320=0x0000
+0x0323=0x0000
+0x0115=0x0009
+0x00A9=0x8000
+0x0244=0x0000
+0x0094=0x0000
+0x0317=0x0000
+0x0208=0x0170
+0x0340=0x0000
+0x058D=0xF5EF
+0x02D7=0x0000
+0x04A3=0x0000
+0x029D=0x0000
+0x0388=0x0000
+0x0120=0xB9FF
+0x04C9=0x0000
+0x02CA=0x0000
+0x0209=0x0000
+0x0082=0x8001
+0x0107=0x318C
+0x02D4=0x0000
+0x02CE=0x0000
+0x02D9=0x0000
+0x02E4=0x0000
+0x024C=0x0000
+0x02DC=0x0000
+0x0118=0x018C
+0x02E0=0x0000
+0x055B=0x57AC
+0x0114=0x0110
+0x02E5=0x0000
+0x02E6=0x0000
+0x045B=0x0000
+0x034F=0x0000
+0x0300=0x0000
+0x044E=0x0000
+0x0510=0xE6C7
+0x0302=0x0000
+0x0303=0x0000
+0x04D5=0x0000
+0x0304=0x0000
+0x0306=0x0000
+0x04A4=0x0000
+0x044A=0x0000
+0x049C=0x0000
+0x02E3=0x0000
+0x0397=0x0000
+0x0588=0xE6C7
+0x0308=0x0000
+0x048A=0x0000
+0x0309=0x0000
+0x029F=0x0000
+0x030A=0x0000
+0x0392=0x0000
+0x030B=0x0000
+0x04DF=0x0000
+0x030C=0x0000
+0x02D6=0x0000
+0x0311=0x0000
+0x024E=0x0000
+0x0346=0x0000
+0x0312=0x0000
+0x051B=0xB77F
+0x010A=0x104C
+0x0461=0x0000
+0x0313=0x0000
+0x0360=0x0000
+0x028C=0x0000
+0x0352=0x0000
+0x040E=0x0003
+0x030D=0x0000
+0x0316=0x0000
+0x031F=0x0000
+0x0318=0x0000
+0x0287=0x0000
+0x0341=0x0000
+0x028F=0x0000
+0x031C=0x0000
+0x031A=0x0000
+0x0363=0x0000
+0x031D=0x0000
+0x0440=0x0024
+0x045E=0x0000
+0x0321=0x0000
+0x059B=0x0000
+0x0322=0x0000
+0x0327=0x0000
+0x0380=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0561=0xAB08
+0x0344=0x0000
+0x0586=0x196B
+0x0484=0x0000
+0x0345=0x0000
+0x0505=0x00D8
+0x035B=0x0000
+0x0498=0x0000
+0x0084=0x0400
+0x0348=0x0000
+0x034A=0x0000
+0x0455=0x0000
+0x011A=0x2E14
+0x034B=0x0000
+0x034D=0x0000
+0x035C=0x0000
+0x034E=0x0000
+0x0293=0x0000
+0x03A6=0x0000
+0x0351=0x0000
+0x0354=0x0000
+0x048B=0x0000
+0x0358=0x0000
+0x0359=0x0000
+0x0299=0x0000
+0x0452=0x0000
+0x02C8=0x0000
+0x035A=0x0000
+0x0449=0x0000
+0x0442=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x038A=0x0000
+0x0362=0x0000
+0x0081=0x0000
+0x0325=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0288=0x0000
+0x0382=0x0000
+0x0384=0x0000
+0x0315=0x0000
+0x0385=0x0000
+0x054F=0x18C9
+0x0389=0x0000
+0x04E3=0x0000
+0x040F=0x43E4
+0x0386=0x0000
+0x054E=0x8184
+0x009A=0x658C
+0x02D0=0x0000
+0x03A0=0x0000
+0x0387=0x0000
+0x038D=0x0000
+0x02E7=0x0000
+0x0324=0x0000
+0x038E=0x0000
+0x0305=0x0000
+0x0393=0x0000
+0x0398=0x0000
+0x0408=0x0000
+0x039B=0x0000
+0x0248=0x0000
+0x039F=0x0000
+0x04E1=0x0000
+0x02A2=0x0000
+0x03A1=0x0000
+0x059A=0x0000
+0x048D=0x0000
+0x051C=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x0520=0x174B
+0x03A7=0x0000
+0x055E=0xDB10
+0x0402=0x07D9
+0x0403=0x0013
+0x0560=0x174B
+0x00A0=0x6565
+0x0404=0x0000
+0x0254=0x0000
+0x0405=0x0000
+0x0407=0x0000
+0x0580=0xEFF2
+0x0409=0x0000
+0x040B=0x000F
+0x040D=0x0000
+0x0441=0x0000
+0x0508=0xEF99
+0x0443=0x0000
+0x0444=0x0000
+0x04CA=0x0000
+0x0446=0x0000
+0x0454=0x0000
+0x0448=0x0000
+0x044B=0x0000
+0x0390=0x0000
+0x0451=0x0000
+0x0559=0xACB9
+0x0456=0x0000
+0x0314=0x0000
+0x0458=0x0000
+0x02DA=0x0000
+0x045A=0x0000
+0x0447=0x0000
+0x0460=0x0000
+0x0480=0x0000
+0x045F=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0283=0x0000
+0x0022=0x07FF
+0x048E=0x0000
+0x029B=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x0493=0x0000
+[file_info]
+version=1
+type=lms7002m_minimal_config
diff --git a/targets/ARCH/LMSSDR/enb_sodera_lowband_Lrx_5MHz_rx19dB_txfull.ini b/targets/ARCH/LMSSDR/enb_sodera_lowband_Lrx_5MHz_rx19dB_txfull.ini
new file mode 100644
index 0000000000..34ce70c888
--- /dev/null
+++ b/targets/ARCH/LMSSDR/enb_sodera_lowband_Lrx_5MHz_rx19dB_txfull.ini
@@ -0,0 +1,1128 @@
+[reference_clocks]
+sxr_ref_clk_mhz=30.72
+sxt_ref_clk_mhz=30.72
+[lms7002_registers_b]
+0x05A7=0x0000
+0x05A5=0x0000
+0x05A2=0x0000
+0x05A0=0x0000
+0x0599=0x0000
+0x0598=0x0000
+0x0596=0x0000
+0x0594=0x0000
+0x0592=0x0000
+0x0591=0x0000
+0x0590=0x0000
+0x058E=0x0000
+0x058C=0x0000
+0x059D=0x0000
+0x058A=0x0000
+0x0589=0x0000
+0x0587=0x0000
+0x0585=0x0000
+0x0595=0x0000
+0x0584=0x0000
+0x059F=0x0000
+0x0583=0x0000
+0x0582=0x0000
+0x0567=0x0000
+0x0566=0x0000
+0x0565=0x0000
+0x0564=0x0000
+0x0563=0x0000
+0x0562=0x0000
+0x055F=0x0000
+0x055D=0x0000
+0x055A=0x0000
+0x058F=0x0000
+0x0557=0x0000
+0x0593=0x0000
+0x0554=0x0000
+0x0552=0x0000
+0x0551=0x0000
+0x0550=0x0000
+0x054D=0x0000
+0x054C=0x0000
+0x0549=0x0000
+0x0547=0x0000
+0x0546=0x0000
+0x0545=0x0000
+0x0544=0x0000
+0x0543=0x0000
+0x0553=0x0000
+0x0542=0x0000
+0x0541=0x0000
+0x0527=0x0000
+0x0526=0x0000
+0x0524=0x0000
+0x0525=0x0000
+0x0523=0x0000
+0x0521=0x0000
+0x055C=0x0000
+0x051A=0x0000
+0x0519=0x0000
+0x0518=0x0000
+0x0514=0x0000
+0x0513=0x0000
+0x0511=0x0000
+0x05A6=0x0000
+0x051E=0x0000
+0x050F=0x0000
+0x0516=0x0000
+0x050E=0x0000
+0x050C=0x0000
+0x050B=0x0000
+0x050A=0x0000
+0x0509=0x0000
+0x0507=0x0000
+0x0506=0x0000
+0x0503=0x0000
+0x04E7=0x0000
+0x04E6=0x0000
+0x0512=0x0000
+0x04E5=0x0000
+0x04E4=0x0000
+0x0321=0x0000
+0x0320=0x0000
+0x0323=0x0000
+0x031B=0x0000
+0x0319=0x0000
+0x0260=0x0000
+0x031F=0x0000
+0x0360=0x0000
+0x0312=0x0000
+0x0310=0x0000
+0x0245=0x0000
+0x0581=0x0000
+0x045D=0x0000
+0x030E=0x0000
+0x0203=0x0000
+0x0482=0x0000
+0x0588=0x0000
+0x0308=0x0000
+0x048A=0x0000
+0x0307=0x0000
+0x0282=0x0000
+0x038C=0x0000
+0x0510=0x0000
+0x0302=0x0000
+0x0301=0x0000
+0x0309=0x0000
+0x0300=0x0000
+0x044E=0x0000
+0x034F=0x0000
+0x055B=0x0000
+0x0114=0x008D
+0x02E5=0x0000
+0x02E4=0x0000
+0x02E1=0x0000
+0x02D5=0x0000
+0x0259=0x0000
+0x0517=0x0000
+0x0481=0x0000
+0x030B=0x0000
+0x0392=0x0000
+0x02DE=0x0000
+0x02DD=0x0000
+0x0297=0x0000
+0x0209=0x0000
+0x0400=0x0081
+0x02D8=0x0000
+0x0104=0x0088
+0x0103=0x0A12
+0x0347=0x0000
+0x0457=0x0000
+0x058D=0x0000
+0x02D7=0x0000
+0x02D1=0x0000
+0x04C8=0x0000
+0x02D3=0x0000
+0x02CB=0x0000
+0x0250=0x0000
+0x0306=0x0000
+0x04A4=0x0000
+0x044A=0x0000
+0x054B=0x0000
+0x02C7=0x0000
+0x02C1=0x0000
+0x031D=0x0000
+0x0440=0x0020
+0x045E=0x0000
+0x02C4=0x0000
+0x02C2=0x0000
+0x02DB=0x0000
+0x0357=0x0000
+0x0201=0x07FF
+0x0483=0x0000
+0x05A4=0x0000
+0x02A3=0x0000
+0x02A1=0x0000
+0x028D=0x0000
+0x02D2=0x0000
+0x039C=0x0000
+0x02A0=0x0000
+0x010E=0x2040
+0x030A=0x0000
+0x029F=0x0000
+0x029C=0x0000
+0x029E=0x0000
+0x011D=0x699D
+0x039E=0x0000
+0x0296=0x0000
+0x0555=0x0000
+0x0349=0x0000
+0x0295=0x0000
+0x010D=0x009E
+0x04C4=0x0000
+0x0292=0x0000
+0x02CF=0x0000
+0x04D1=0x0000
+0x0291=0x0000
+0x02DF=0x0000
+0x0290=0x0000
+0x020A=0x0080
+0x0102=0x3180
+0x0388=0x0000
+0x0120=0xB9FF
+0x0317=0x0000
+0x0244=0x0000
+0x059B=0x0000
+0x0322=0x0000
+0x010F=0x3042
+0x0119=0x18CB
+0x02A6=0x0000
+0x051F=0x0000
+0x029A=0x0000
+0x049A=0x0000
+0x059E=0x0000
+0x04D7=0x0000
+0x0318=0x0000
+0x02A7=0x0000
+0x0200=0x0081
+0x02C5=0x0000
+0x0122=0x033F
+0x0110=0x0BF4
+0x0204=0x0000
+0x0252=0x0000
+0x011E=0x06B9
+0x049B=0x0000
+0x0294=0x0000
+0x011C=0xAD41
+0x02D6=0x0000
+0x0311=0x0000
+0x0117=0x280C
+0x0540=0x0000
+0x02A4=0x0000
+0x0485=0x0000
+0x02E0=0x0000
+0x0118=0x018C
+0x0489=0x0000
+0x04A7=0x0000
+0x0101=0x7800
+0x0558=0x0000
+0x02C6=0x0000
+0x05A1=0x0000
+0x02C9=0x0000
+0x0500=0x0000
+0x039D=0x0000
+0x011F=0x3680
+0x030C=0x0000
+0x04DF=0x0000
+0x0281=0x0000
+0x0106=0x3182
+0x028E=0x0000
+0x0326=0x0000
+0x0113=0x03C3
+0x04CB=0x0000
+0x0391=0x0000
+0x0105=0x0007
+0x02D9=0x0000
+0x02CE=0x0000
+0x044F=0x0000
+0x038B=0x0000
+0x02D4=0x0000
+0x0107=0x318C
+0x0495=0x0000
+0x0246=0x0000
+0x0303=0x0000
+0x02E6=0x0000
+0x045B=0x0000
+0x0100=0x3409
+0x0340=0x0000
+0x0208=0x0070
+0x0111=0x0083
+0x0247=0x0000
+0x024B=0x0000
+0x045C=0x0000
+0x024D=0x0000
+0x0202=0x07FF
+0x0383=0x0000
+0x054A=0x0000
+0x0401=0x07FF
+0x0206=0x0000
+0x0124=0x0000
+0x0341=0x0000
+0x0287=0x0000
+0x0501=0x0000
+0x034C=0x0000
+0x030F=0x0000
+0x025D=0x0000
+0x0406=0x0000
+0x051B=0x0000
+0x0313=0x0000
+0x010A=0x104C
+0x0461=0x0000
+0x0121=0x333C
+0x0115=0x0009
+0x0112=0xC0E6
+0x039A=0x0000
+0x02CC=0x0000
+0x0116=0x8180
+0x04A0=0x0000
+0x0108=0x9442
+0x020B=0x4000
+0x0251=0x0000
+0x0488=0x0000
+0x0241=0x0000
+0x038F=0x0000
+0x02DC=0x0000
+0x024C=0x0000
+0x0494=0x0000
+0x051D=0x0000
+0x0243=0x0000
+0x0556=0x0000
+0x040A=0x0000
+0x04CD=0x0000
+0x0249=0x0000
+0x0261=0x0000
+0x024A=0x0000
+0x0285=0x0000
+0x0280=0x0000
+0x0346=0x0000
+0x024E=0x0000
+0x024F=0x0000
+0x0253=0x0000
+0x0255=0x0000
+0x0502=0x0000
+0x0258=0x0000
+0x0298=0x0000
+0x05A3=0x0000
+0x0367=0x0000
+0x0240=0x0020
+0x0256=0x0000
+0x0242=0x0000
+0x025A=0x0000
+0x04E2=0x0000
+0x04C5=0x0000
+0x025B=0x0000
+0x020C=0x7FFF
+0x0205=0x0000
+0x0361=0x0000
+0x0515=0x0000
+0x025C=0x0000
+0x0355=0x0000
+0x044C=0x0000
+0x010C=0x88FD
+0x0284=0x0000
+0x0396=0x0000
+0x0286=0x0000
+0x028F=0x0000
+0x031C=0x0000
+0x031A=0x0000
+0x0363=0x0000
+0x0289=0x0000
+0x059C=0x0000
+0x04DD=0x0000
+0x028A=0x0000
+0x040C=0x0000
+0x028B=0x0000
+0x0450=0x0000
+0x0352=0x0000
+0x028C=0x0000
+0x04C2=0x0000
+0x025E=0x0000
+0x04DA=0x0000
+0x0327=0x0000
+0x0380=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0561=0x0000
+0x0344=0x0000
+0x0586=0x0000
+0x0484=0x0000
+0x0345=0x0000
+0x0505=0x0000
+0x035B=0x0000
+0x034A=0x0000
+0x0455=0x0000
+0x011A=0x2E02
+0x034B=0x0000
+0x034D=0x0000
+0x035C=0x0000
+0x034E=0x0000
+0x0293=0x0000
+0x03A6=0x0000
+0x0350=0x0000
+0x0445=0x0000
+0x048F=0x0000
+0x0351=0x0000
+0x0353=0x0000
+0x050D=0x0000
+0x02CD=0x0000
+0x0490=0x0000
+0x0354=0x0000
+0x0348=0x0000
+0x0498=0x0000
+0x0356=0x0000
+0x0316=0x0000
+0x030D=0x0000
+0x040E=0x0000
+0x0522=0x0000
+0x049F=0x0000
+0x029D=0x0000
+0x04A3=0x0000
+0x0359=0x0000
+0x0299=0x0000
+0x0452=0x0000
+0x02C8=0x0000
+0x035A=0x0000
+0x0449=0x0000
+0x0442=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x0597=0x0000
+0x035F=0x0000
+0x0325=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0381=0x0000
+0x0288=0x0000
+0x0382=0x0000
+0x0384=0x0000
+0x0315=0x0000
+0x0385=0x0000
+0x054F=0x0000
+0x0389=0x0000
+0x04E3=0x0000
+0x040F=0x0000
+0x0386=0x0000
+0x054E=0x0000
+0x02D0=0x0000
+0x03A0=0x0000
+0x0387=0x0000
+0x0362=0x0000
+0x038A=0x0000
+0x0395=0x0000
+0x038D=0x0000
+0x02E7=0x0000
+0x0324=0x0000
+0x038E=0x0000
+0x0305=0x0000
+0x0393=0x0000
+0x0459=0x0000
+0x0394=0x0000
+0x0123=0x267B
+0x0497=0x0000
+0x0398=0x0000
+0x0408=0x0000
+0x0399=0x0000
+0x039B=0x0000
+0x0248=0x0000
+0x039F=0x0000
+0x049E=0x0000
+0x059A=0x0000
+0x048D=0x0000
+0x051C=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x0520=0x0000
+0x03A7=0x0000
+0x055E=0x0000
+0x0402=0x07FF
+0x0403=0x0000
+0x04D8=0x0000
+0x0560=0x0000
+0x0404=0x0000
+0x0254=0x0000
+0x0405=0x0000
+0x0407=0x0000
+0x0580=0x0000
+0x0409=0x0000
+0x040B=0x7FFF
+0x040D=0x0000
+0x0441=0x0000
+0x0508=0x0000
+0x0443=0x0000
+0x0444=0x0000
+0x04CA=0x0000
+0x0446=0x0000
+0x0454=0x0000
+0x0448=0x0000
+0x044B=0x0000
+0x02E2=0x0000
+0x044D=0x0000
+0x0390=0x0000
+0x0451=0x0000
+0x0453=0x0000
+0x0559=0x0000
+0x0456=0x0000
+0x0314=0x0000
+0x0458=0x0000
+0x02DA=0x0000
+0x045A=0x0000
+0x0447=0x0000
+0x0460=0x0000
+0x0480=0x0000
+0x045F=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0358=0x0000
+0x048B=0x0000
+0x048C=0x0000
+0x0283=0x0000
+0x048E=0x0000
+0x029B=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x04A1=0x0000
+0x0493=0x0000
+0x04C3=0x0000
+0x0496=0x0000
+0x02C0=0x0000
+0x0499=0x0000
+0x02E3=0x0000
+0x0397=0x0000
+0x049C=0x0000
+0x04C7=0x0000
+0x049D=0x0000
+0x0109=0x61C1
+0x04A2=0x0000
+0x04A5=0x0000
+0x04A6=0x0000
+0x0257=0x0000
+0x04D6=0x0000
+0x031E=0x0000
+0x04C0=0x0000
+0x02CA=0x0000
+0x04C9=0x0000
+0x02C3=0x0000
+0x04C1=0x0000
+0x0207=0x0000
+0x04C6=0x0000
+0x02A5=0x0000
+0x04CC=0x0000
+0x04CE=0x0000
+0x025F=0x0000
+0x04CF=0x0000
+0x04D0=0x0000
+0x0548=0x0000
+0x04D2=0x0000
+0x04D3=0x0000
+0x0504=0x0000
+0x04D4=0x0000
+0x0304=0x0000
+0x04D5=0x0000
+0x04D9=0x0000
+0x04DB=0x0000
+0x04DC=0x0000
+0x058B=0x0000
+0x04DE=0x0000
+0x04E0=0x0000
+0x02A2=0x0000
+0x03A1=0x0000
+0x04E1=0x0000
+[lms7002_registers_a]
+0x05A7=0x0000
+0x05A5=0x0000
+0x05A2=0x0000
+0x0599=0x0000
+0x0598=0xF61D
+0x0596=0x0A94
+0x0594=0xF40D
+0x0592=0x0DF1
+0x0591=0xFCFE
+0x0590=0xEF99
+0x058E=0x1316
+0x058C=0xEA50
+0x059D=0x0000
+0x058A=0x17DC
+0x0585=0xDAA2
+0x0595=0x00BC
+0x0584=0xE7E2
+0x059F=0x0000
+0x0583=0x2E45
+0x0582=0x150F
+0x0567=0x4049
+0x0566=0x0906
+0x0565=0xB77F
+0x0563=0x4F91
+0x055F=0x5852
+0x055D=0xA6B5
+0x055A=0xBE2A
+0x058F=0x0605
+0x0557=0x4C24
+0x0593=0x00D8
+0x0554=0x6901
+0x0552=0x8D44
+0x0551=0xD7B7
+0x0550=0x79FA
+0x054C=0x7FFF
+0x0549=0x18C9
+0x0547=0xD7B7
+0x0546=0x8D44
+0x0545=0x364E
+0x0544=0x6901
+0x0543=0xBD96
+0x0553=0x364E
+0x0542=0xA2B5
+0x0541=0x4C24
+0x0527=0xACB9
+0x0526=0xBE2A
+0x0525=0x57AC
+0x0523=0xA6B5
+0x0521=0x5852
+0x055C=0x3347
+0x051A=0x0906
+0x0518=0xEFF2
+0x0514=0xE7E2
+0x0513=0xDAA2
+0x0511=0x1D10
+0x05A6=0x0000
+0x051E=0xF524
+0x050F=0xEA5F
+0x0516=0x150F
+0x050E=0x17DC
+0x050C=0xEA50
+0x050B=0xF5EF
+0x050A=0x1316
+0x0509=0x0605
+0x0507=0xFCFE
+0x0506=0x0DF1
+0x0503=0x00BC
+0x04E7=0x0000
+0x04E6=0x0000
+0x04E4=0x0000
+0x04E0=0x0000
+0x058B=0x0F45
+0x04DE=0x0000
+0x04DC=0x0000
+0x04DB=0x0000
+0x04D9=0x0000
+0x04D8=0x0000
+0x059E=0x0000
+0x04D7=0x0000
+0x0504=0xF40D
+0x04D4=0x0000
+0x04D3=0x0000
+0x0548=0x79FA
+0x04D2=0x0000
+0x04D1=0x0000
+0x04D0=0x0000
+0x04CE=0x0000
+0x04C8=0x0000
+0x04E2=0x0000
+0x04C5=0x0000
+0x04C4=0x0000
+0x04C2=0x0000
+0x04A7=0x0000
+0x04A6=0x0000
+0x04A5=0x0000
+0x04A1=0x0000
+0x04A0=0x0000
+0x0522=0xDB10
+0x049F=0x0000
+0x049E=0x0000
+0x04C7=0x0000
+0x049D=0x0000
+0x049B=0x0000
+0x049A=0x0000
+0x04C3=0x0000
+0x0496=0x0000
+0x0494=0x0000
+0x02D3=0x0000
+0x02D1=0x0000
+0x02CB=0x0000
+0x0250=0x0000
+0x0096=0x0000
+0x04C1=0x0000
+0x02C3=0x0000
+0x02C4=0x0000
+0x02C2=0x0000
+0x0499=0x0000
+0x02C0=0x0000
+0x0201=0x07FF
+0x0483=0x0000
+0x05A4=0x0000
+0x02A3=0x0000
+0x008B=0x278A
+0x02A1=0x0000
+0x028D=0x0000
+0x029C=0x0000
+0x029E=0x0000
+0x0297=0x0000
+0x0296=0x0000
+0x0555=0xBD96
+0x0349=0x0000
+0x010D=0x015C
+0x02CF=0x0000
+0x0291=0x0000
+0x02DF=0x0000
+0x0290=0x0000
+0x0021=0x0E9F
+0x0450=0x0000
+0x0558=0x5009
+0x02C6=0x0000
+0x0101=0x7800
+0x059C=0x0000
+0x04DD=0x0000
+0x028A=0x0000
+0x0121=0x313C
+0x0285=0x0000
+0x0280=0x0000
+0x0319=0x0000
+0x04CF=0x0000
+0x025F=0x0000
+0x025D=0x0000
+0x030F=0x0000
+0x0406=0x0000
+0x02C5=0x0000
+0x0200=0x0301
+0x0281=0x0000
+0x04A2=0x0000
+0x0109=0x03C1
+0x0355=0x0000
+0x044C=0x0000
+0x025B=0x0000
+0x0298=0x0000
+0x0502=0x0A94
+0x0258=0x0000
+0x0255=0x0000
+0x04D6=0x0000
+0x0257=0x0000
+0x0252=0x0000
+0x0204=0xFFAD
+0x024F=0x0000
+0x04CC=0x0000
+0x02A5=0x0000
+0x0497=0x0000
+0x0123=0x267B
+0x0495=0x0000
+0x0246=0x0000
+0x051D=0x4F91
+0x0243=0x0000
+0x0556=0xA2B5
+0x040A=0x1000
+0x025A=0x0000
+0x0242=0x0000
+0x020C=0x8000
+0x0251=0x0000
+0x02DD=0x0000
+0x0020=0xFFFD
+0x0488=0x0000
+0x020A=0x0000
+0x0102=0x3180
+0x04C6=0x0000
+0x0207=0x0000
+0x04DA=0x0000
+0x025E=0x0000
+0x0206=0x0000
+0x00A3=0x6565
+0x02E2=0x0000
+0x044D=0x0000
+0x0292=0x0000
+0x002A=0x0086
+0x0245=0x0000
+0x0581=0xC89D
+0x045D=0x0000
+0x024D=0x0000
+0x002B=0x4032
+0x02A0=0x0000
+0x010E=0x070C
+0x0286=0x0000
+0x009E=0x658C
+0x0088=0x0530
+0x0085=0x0001
+0x0295=0x0000
+0x0089=0x00A0
+0x0256=0x0000
+0x0093=0x0000
+0x0092=0x0001
+0x031B=0x0000
+0x0111=0x0099
+0x0095=0x0000
+0x02A7=0x0000
+0x0203=0x2F6C
+0x030E=0x0000
+0x0482=0x0000
+0x05A0=0x0000
+0x009C=0x658C
+0x0381=0x0000
+0x0122=0x033F
+0x0110=0x0BFF
+0x0100=0xB409
+0x0028=0x0101
+0x0026=0x0101
+0x0524=0x3347
+0x009D=0x6565
+0x0294=0x0000
+0x0106=0x3182
+0x028E=0x0000
+0x0326=0x0000
+0x0113=0x03C3
+0x04CB=0x0000
+0x0391=0x0000
+0x05A1=0x0000
+0x02C9=0x0000
+0x0500=0xF61D
+0x039D=0x0000
+0x011F=0x3680
+0x0395=0x0000
+0x024B=0x0000
+0x045C=0x0000
+0x0247=0x0000
+0x0512=0x196B
+0x04E5=0x0000
+0x0024=0x50D8
+0x0353=0x0000
+0x050D=0x0F45
+0x02CD=0x0000
+0x0490=0x0000
+0x0501=0xFDFB
+0x034C=0x0000
+0x00AA=0x0000
+0x0350=0x0000
+0x0445=0x0000
+0x048F=0x0000
+0x008A=0x0491
+0x0453=0x0000
+0x0124=0x0000
+0x0260=0x0000
+0x00A1=0x6565
+0x0356=0x0000
+0x0241=0x0000
+0x04CD=0x0000
+0x0249=0x0000
+0x002C=0x0100
+0x038F=0x0000
+0x008C=0x267B
+0x0459=0x0000
+0x0394=0x0000
+0x054D=0xF7A3
+0x00A6=0x0001
+0x002D=0xFFFF
+0x00AC=0x2000
+0x0253=0x0000
+0x028B=0x0000
+0x040C=0x40F8
+0x0099=0x6565
+0x0310=0x0000
+0x00A2=0x6565
+0x0589=0xEA5F
+0x002F=0x3840
+0x0597=0xFDFB
+0x035F=0x0000
+0x0562=0xF524
+0x0025=0x0101
+0x011C=0xAD41
+0x011D=0xFEEE
+0x039E=0x0000
+0x0289=0x0000
+0x0282=0x0000
+0x0307=0x0000
+0x038C=0x0000
+0x0087=0x0000
+0x0399=0x0000
+0x054B=0xF7A3
+0x02C7=0x0000
+0x0519=0x4049
+0x009F=0x658C
+0x0515=0x2E45
+0x025C=0x0000
+0x00A5=0x6565
+0x0301=0x0000
+0x02C1=0x0000
+0x0259=0x0000
+0x02D5=0x0000
+0x02E1=0x0000
+0x0517=0xC89D
+0x0481=0x0000
+0x00A8=0x0000
+0x02D2=0x0000
+0x039C=0x0000
+0x0564=0x0000
+0x00AB=0x0040
+0x0261=0x0000
+0x002E=0x0000
+0x02DE=0x0000
+0x0540=0x5009
+0x02A4=0x0000
+0x0485=0x0000
+0x0489=0x0000
+0x00AD=0x03FF
+0x024A=0x0000
+0x0029=0x0101
+0x0097=0x0000
+0x011E=0x0663
+0x00AE=0x0000
+0x00A7=0x6565
+0x020B=0x0000
+0x0098=0x0000
+0x0108=0xFC26
+0x0027=0x05E4
+0x0117=0x1939
+0x0383=0x0000
+0x0202=0x07F9
+0x054A=0x8184
+0x00A4=0x6565
+0x0401=0x07ED
+0x0086=0x4101
+0x010C=0x8865
+0x02D8=0x0000
+0x0347=0x0000
+0x0457=0x0000
+0x0103=0x0A12
+0x0104=0x0088
+0x0357=0x0000
+0x02DB=0x0000
+0x0400=0x0101
+0x009B=0x6565
+0x0105=0x0007
+0x05A3=0x0000
+0x0240=0x0028
+0x0367=0x0000
+0x044F=0x0000
+0x038B=0x0000
+0x0284=0x0000
+0x0396=0x0000
+0x051F=0xAB08
+0x029A=0x0000
+0x0361=0x0000
+0x0205=0x0000
+0x0119=0x529F
+0x02A6=0x0000
+0x010F=0x3042
+0x04C0=0x0000
+0x031E=0x0000
+0x02CC=0x0000
+0x0116=0x8180
+0x0587=0x1D10
+0x0023=0x5550
+0x048C=0x0000
+0x0112=0x20E5
+0x039A=0x0000
+0x0320=0x0000
+0x0323=0x0000
+0x0115=0x0009
+0x00A9=0x8000
+0x0244=0x0000
+0x0094=0x0000
+0x0317=0x0000
+0x0208=0x0170
+0x0340=0x0000
+0x058D=0xF5EF
+0x02D7=0x0000
+0x04A3=0x0000
+0x029D=0x0000
+0x0388=0x0000
+0x0120=0xB9FF
+0x04C9=0x0000
+0x02CA=0x0000
+0x0209=0x0000
+0x0082=0x8001
+0x0107=0x318C
+0x02D4=0x0000
+0x02CE=0x0000
+0x02D9=0x0000
+0x02E4=0x0000
+0x024C=0x0000
+0x02DC=0x0000
+0x0118=0x218C
+0x02E0=0x0000
+0x055B=0x57AC
+0x0114=0x0170
+0x02E5=0x0000
+0x02E6=0x0000
+0x045B=0x0000
+0x034F=0x0000
+0x0300=0x0000
+0x044E=0x0000
+0x0510=0xE6C7
+0x0302=0x0000
+0x0303=0x0000
+0x04D5=0x0000
+0x0304=0x0000
+0x0306=0x0000
+0x04A4=0x0000
+0x044A=0x0000
+0x049C=0x0000
+0x02E3=0x0000
+0x0397=0x0000
+0x0588=0xE6C7
+0x0308=0x0000
+0x048A=0x0000
+0x0309=0x0000
+0x029F=0x0000
+0x030A=0x0000
+0x0392=0x0000
+0x030B=0x0000
+0x04DF=0x0000
+0x030C=0x0000
+0x02D6=0x0000
+0x0311=0x0000
+0x024E=0x0000
+0x0346=0x0000
+0x0312=0x0000
+0x051B=0xB77F
+0x010A=0x184C
+0x0461=0x0000
+0x0313=0x0000
+0x0360=0x0000
+0x028C=0x0000
+0x0352=0x0000
+0x040E=0x0000
+0x030D=0x0000
+0x0316=0x0000
+0x031F=0x0000
+0x0318=0x0000
+0x0287=0x0000
+0x0341=0x0000
+0x028F=0x0000
+0x031C=0x0000
+0x031A=0x0000
+0x0363=0x0000
+0x031D=0x0000
+0x0440=0x0024
+0x045E=0x0000
+0x0321=0x0000
+0x059B=0x0000
+0x0322=0x0000
+0x0327=0x0000
+0x0380=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0561=0xAB08
+0x0344=0x0000
+0x0586=0x196B
+0x0484=0x0000
+0x0345=0x0000
+0x0505=0x00D8
+0x035B=0x0000
+0x0498=0x0000
+0x0084=0x0400
+0x0348=0x0000
+0x034A=0x0000
+0x0455=0x0000
+0x011A=0x2E03
+0x034B=0x0000
+0x034D=0x0000
+0x035C=0x0000
+0x034E=0x0000
+0x0293=0x0000
+0x03A6=0x0000
+0x0351=0x0000
+0x0354=0x0000
+0x048B=0x0000
+0x0358=0x0000
+0x0359=0x0000
+0x0299=0x0000
+0x0452=0x0000
+0x02C8=0x0000
+0x035A=0x0000
+0x0449=0x0000
+0x0442=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x038A=0x0000
+0x0362=0x0000
+0x0081=0x0000
+0x0325=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0288=0x0000
+0x0382=0x0000
+0x0384=0x0000
+0x0315=0x0000
+0x0385=0x0000
+0x054F=0x18C9
+0x0389=0x0000
+0x04E3=0x0000
+0x040F=0x0000
+0x0386=0x0000
+0x054E=0x8184
+0x009A=0x658C
+0x02D0=0x0000
+0x03A0=0x0000
+0x0387=0x0000
+0x038D=0x0000
+0x02E7=0x0000
+0x0324=0x0000
+0x038E=0x0000
+0x0305=0x0000
+0x0393=0x0000
+0x0398=0x0000
+0x0408=0x0000
+0x039B=0x0000
+0x0248=0x0000
+0x039F=0x0000
+0x04E1=0x0000
+0x02A2=0x0000
+0x03A1=0x0000
+0x059A=0x0000
+0x048D=0x0000
+0x051C=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x0520=0x174B
+0x03A7=0x0000
+0x055E=0xDB10
+0x0402=0x07FF
+0x0403=0x009C
+0x0560=0x174B
+0x00A0=0x6565
+0x0404=0x0000
+0x0254=0x0000
+0x0405=0x0000
+0x0407=0x0000
+0x0580=0xEFF2
+0x0409=0x0000
+0x040B=0x000F
+0x040D=0x0000
+0x0441=0x0000
+0x0508=0xEF99
+0x0443=0x0000
+0x0444=0x0000
+0x04CA=0x0000
+0x0446=0x0000
+0x0454=0x0000
+0x0448=0x0000
+0x044B=0x0000
+0x0390=0x0000
+0x0451=0x0000
+0x0559=0xACB9
+0x0456=0x0000
+0x0314=0x0000
+0x0458=0x0000
+0x02DA=0x0000
+0x045A=0x0000
+0x0447=0x0000
+0x0460=0x0000
+0x0480=0x0000
+0x045F=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0283=0x0000
+0x0022=0x07FF
+0x048E=0x0000
+0x029B=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x0493=0x0000
+[file_info]
+version=1
+type=lms7002m_minimal_config
diff --git a/targets/ARCH/LMSSDR/enb_sodera_lowband_Wrx_10MHz_rx19dB_txfull.ini b/targets/ARCH/LMSSDR/enb_sodera_lowband_Wrx_10MHz_rx19dB_txfull.ini
new file mode 100644
index 0000000000..a0793ad395
--- /dev/null
+++ b/targets/ARCH/LMSSDR/enb_sodera_lowband_Wrx_10MHz_rx19dB_txfull.ini
@@ -0,0 +1,1128 @@
+[reference_clocks]
+sxr_ref_clk_mhz=30.72
+sxt_ref_clk_mhz=30.72
+[lms7002_registers_b]
+0x03A0=0x0000
+0x054E=0x0000
+0x02D0=0x0000
+0x0386=0x0000
+0x054F=0x0000
+0x0389=0x0000
+0x040F=0x0000
+0x04E3=0x0000
+0x0385=0x0000
+0x0315=0x0000
+0x0384=0x0000
+0x0382=0x0000
+0x0288=0x0000
+0x0381=0x0000
+0x0366=0x0000
+0x0365=0x0000
+0x0364=0x0000
+0x0325=0x0000
+0x035E=0x0000
+0x035D=0x0000
+0x0442=0x0000
+0x0452=0x0000
+0x0299=0x0000
+0x0359=0x0000
+0x029D=0x0000
+0x04A3=0x0000
+0x040E=0x0000
+0x0316=0x0000
+0x030D=0x0000
+0x0356=0x0000
+0x0348=0x0000
+0x0498=0x0000
+0x0490=0x0000
+0x02CD=0x0000
+0x050D=0x0000
+0x0353=0x0000
+0x0351=0x0000
+0x048F=0x0000
+0x0445=0x0000
+0x0350=0x0000
+0x03A6=0x0000
+0x0293=0x0000
+0x034E=0x0000
+0x035C=0x0000
+0x034D=0x0000
+0x034B=0x0000
+0x011A=0x2E02
+0x0455=0x0000
+0x034A=0x0000
+0x035B=0x0000
+0x0505=0x0000
+0x0345=0x0000
+0x035F=0x0000
+0x0597=0x0000
+0x0586=0x0000
+0x0484=0x0000
+0x02C8=0x0000
+0x035A=0x0000
+0x0561=0x0000
+0x0344=0x0000
+0x0343=0x0000
+0x0342=0x0000
+0x0380=0x0000
+0x0327=0x0000
+0x025E=0x0000
+0x04DA=0x0000
+0x04C2=0x0000
+0x028C=0x0000
+0x0352=0x0000
+0x059C=0x0000
+0x04DD=0x0000
+0x028A=0x0000
+0x0289=0x0000
+0x031A=0x0000
+0x0363=0x0000
+0x0396=0x0000
+0x0284=0x0000
+0x010C=0x88FD
+0x044C=0x0000
+0x0355=0x0000
+0x025C=0x0000
+0x0515=0x0000
+0x0361=0x0000
+0x0205=0x0000
+0x025B=0x0000
+0x04C5=0x0000
+0x04E2=0x0000
+0x025A=0x0000
+0x0256=0x0000
+0x0240=0x0020
+0x0367=0x0000
+0x05A3=0x0000
+0x0502=0x0000
+0x0258=0x0000
+0x0255=0x0000
+0x040C=0x0000
+0x028B=0x0000
+0x0253=0x0000
+0x024E=0x0000
+0x0346=0x0000
+0x0280=0x0000
+0x0285=0x0000
+0x024A=0x0000
+0x0261=0x0000
+0x0249=0x0000
+0x04CD=0x0000
+0x040A=0x0000
+0x0556=0x0000
+0x0243=0x0000
+0x051D=0x0000
+0x0494=0x0000
+0x024C=0x0000
+0x02DC=0x0000
+0x038F=0x0000
+0x0241=0x0000
+0x0488=0x0000
+0x0251=0x0000
+0x020B=0x4000
+0x0108=0x9442
+0x04A0=0x0000
+0x0116=0x8180
+0x02CC=0x0000
+0x039A=0x0000
+0x0112=0xC0E6
+0x0307=0x0000
+0x038C=0x0000
+0x0282=0x0000
+0x0321=0x0000
+0x0507=0x0000
+0x0483=0x0000
+0x0201=0x07FF
+0x02E1=0x0000
+0x0517=0x0000
+0x0481=0x0000
+0x02D5=0x0000
+0x0259=0x0000
+0x0527=0x0000
+0x02DD=0x0000
+0x0209=0x0000
+0x0297=0x0000
+0x0400=0x0081
+0x0104=0x0088
+0x0103=0x0A12
+0x0347=0x0000
+0x02D8=0x0000
+0x0457=0x0000
+0x0306=0x0000
+0x02D1=0x0000
+0x04C8=0x0000
+0x0546=0x0000
+0x0440=0x0020
+0x045E=0x0000
+0x031D=0x0000
+0x039C=0x0000
+0x02D2=0x0000
+0x010E=0x2040
+0x02A0=0x0000
+0x0544=0x0000
+0x029C=0x0000
+0x055A=0x0000
+0x0295=0x0000
+0x02CF=0x0000
+0x04D1=0x0000
+0x0291=0x0000
+0x02DF=0x0000
+0x0290=0x0000
+0x020A=0x0080
+0x0102=0x3180
+0x0120=0xB9FF
+0x0388=0x0000
+0x0318=0x0000
+0x02A7=0x0000
+0x0200=0x0081
+0x0594=0x0000
+0x02C5=0x0000
+0x028D=0x0000
+0x02A1=0x0000
+0x0362=0x0000
+0x038A=0x0000
+0x0395=0x0000
+0x058D=0x0000
+0x02D7=0x0000
+0x0305=0x0000
+0x0393=0x0000
+0x0398=0x0000
+0x0408=0x0000
+0x039B=0x0000
+0x049E=0x0000
+0x02DB=0x0000
+0x0357=0x0000
+0x02C2=0x0000
+0x0514=0x0000
+0x051C=0x0000
+0x03A2=0x0000
+0x03A4=0x0000
+0x03A3=0x0000
+0x0493=0x0000
+0x0454=0x0000
+0x0448=0x0000
+0x0397=0x0000
+0x02E3=0x0000
+0x049C=0x0000
+0x040D=0x0000
+0x0281=0x0000
+0x048C=0x0000
+0x049A=0x0000
+0x0119=0x18CB
+0x010F=0x3042
+0x02A6=0x0000
+0x0257=0x0000
+0x04D6=0x0000
+0x04A6=0x0000
+0x0324=0x0000
+0x038E=0x0000
+0x02E7=0x0000
+0x034F=0x0000
+0x04E0=0x0000
+0x0123=0x267B
+0x0497=0x0000
+0x0459=0x0000
+0x0394=0x0000
+0x04A5=0x0000
+0x04D9=0x0000
+0x0304=0x0000
+0x04D5=0x0000
+0x0508=0x0000
+0x0443=0x0000
+0x0301=0x0000
+0x0548=0x0000
+0x04D2=0x0000
+0x0592=0x0000
+0x0591=0x0000
+0x04C7=0x0000
+0x049D=0x0000
+0x029A=0x0000
+0x051F=0x0000
+0x0309=0x0000
+0x0585=0x0000
+0x03A5=0x0000
+0x02D3=0x0000
+0x0451=0x0000
+0x0390=0x0000
+0x0562=0x0000
+0x02C4=0x0000
+0x029E=0x0000
+0x031E=0x0000
+0x04C0=0x0000
+0x04DC=0x0000
+0x04DE=0x0000
+0x058B=0x0000
+0x04DB=0x0000
+0x04D0=0x0000
+0x0492=0x0000
+0x04A1=0x0000
+0x054B=0x0000
+0x02C7=0x0000
+0x05A0=0x0000
+0x044B=0x0000
+0x0100=0x3409
+0x04CA=0x0000
+0x0446=0x0000
+0x02E4=0x0000
+0x04E4=0x0000
+0x04C3=0x0000
+0x0496=0x0000
+0x04CF=0x0000
+0x025F=0x0000
+0x04D4=0x0000
+0x0504=0x0000
+0x04CE=0x0000
+0x02DE=0x0000
+0x0399=0x0000
+0x050C=0x0000
+0x02A5=0x0000
+0x04CC=0x0000
+0x03A1=0x0000
+0x04E1=0x0000
+0x02A2=0x0000
+0x040B=0x7FFF
+0x0283=0x0000
+0x048E=0x0000
+0x0580=0x0000
+0x0409=0x0000
+0x039F=0x0000
+0x0248=0x0000
+0x048B=0x0000
+0x0358=0x0000
+0x0589=0x0000
+0x038D=0x0000
+0x0487=0x0000
+0x0510=0x0000
+0x0302=0x0000
+0x0486=0x0000
+0x045F=0x0000
+0x0480=0x0000
+0x0567=0x0000
+0x02DA=0x0000
+0x045A=0x0000
+0x0254=0x0000
+0x0405=0x0000
+0x0387=0x0000
+0x0458=0x0000
+0x0314=0x0000
+0x0360=0x0000
+0x0559=0x0000
+0x0456=0x0000
+0x0453=0x0000
+0x02E2=0x0000
+0x044D=0x0000
+0x0441=0x0000
+0x02C3=0x0000
+0x04C1=0x0000
+0x04D3=0x0000
+0x0444=0x0000
+0x0207=0x0000
+0x04C6=0x0000
+0x0296=0x0000
+0x0555=0x0000
+0x0349=0x0000
+0x0109=0x61C1
+0x04A2=0x0000
+0x0447=0x0000
+0x0460=0x0000
+0x048D=0x0000
+0x059A=0x0000
+0x0407=0x0000
+0x02C0=0x0000
+0x0499=0x0000
+0x0543=0x0000
+0x04C9=0x0000
+0x02CA=0x0000
+0x0404=0x0000
+0x0560=0x0000
+0x02C1=0x0000
+0x04D8=0x0000
+0x0403=0x0000
+0x0491=0x0000
+0x029B=0x0000
+0x04C4=0x0000
+0x010D=0x009E
+0x0402=0x07FF
+0x055E=0x0000
+0x03A7=0x0000
+0x0520=0x0000
+0x0392=0x0000
+0x030B=0x0000
+0x0588=0x0000
+0x0308=0x0000
+0x048A=0x0000
+0x044A=0x0000
+0x04A4=0x0000
+0x0300=0x0000
+0x0587=0x0000
+0x044E=0x0000
+0x055B=0x0000
+0x02E5=0x0000
+0x0114=0x008D
+0x0323=0x0000
+0x0320=0x0000
+0x0503=0x0000
+0x0513=0x0000
+0x0319=0x0000
+0x0260=0x0000
+0x0549=0x0000
+0x0552=0x0000
+0x0509=0x0000
+0x0521=0x0000
+0x0286=0x0000
+0x04D7=0x0000
+0x059E=0x0000
+0x058F=0x0000
+0x0557=0x0000
+0x0322=0x0000
+0x059B=0x0000
+0x049F=0x0000
+0x0522=0x0000
+0x0545=0x0000
+0x0551=0x0000
+0x0312=0x0000
+0x055D=0x0000
+0x0298=0x0000
+0x055F=0x0000
+0x011D=0x9555
+0x039E=0x0000
+0x0547=0x0000
+0x0598=0x0000
+0x0449=0x0000
+0x0564=0x0000
+0x0242=0x0000
+0x0525=0x0000
+0x0523=0x0000
+0x0565=0x0000
+0x0124=0x0000
+0x0563=0x0000
+0x024D=0x0000
+0x05A5=0x0000
+0x0566=0x0000
+0x030A=0x0000
+0x029F=0x0000
+0x054C=0x0000
+0x0582=0x0000
+0x0599=0x0000
+0x0511=0x0000
+0x0506=0x0000
+0x0595=0x0000
+0x0584=0x0000
+0x058C=0x0000
+0x05A6=0x0000
+0x051E=0x0000
+0x050F=0x0000
+0x0590=0x0000
+0x0596=0x0000
+0x05A7=0x0000
+0x058A=0x0000
+0x059D=0x0000
+0x0485=0x0000
+0x0581=0x0000
+0x045D=0x0000
+0x0245=0x0000
+0x0310=0x0000
+0x058E=0x0000
+0x05A2=0x0000
+0x054D=0x0000
+0x020C=0x7FFF
+0x031F=0x0000
+0x0292=0x0000
+0x059F=0x0000
+0x0583=0x0000
+0x0317=0x0000
+0x0244=0x0000
+0x0554=0x0000
+0x0593=0x0000
+0x05A4=0x0000
+0x02A3=0x0000
+0x0553=0x0000
+0x0542=0x0000
+0x0519=0x0000
+0x024F=0x0000
+0x0524=0x0000
+0x0518=0x0000
+0x0354=0x0000
+0x0526=0x0000
+0x031B=0x0000
+0x050E=0x0000
+0x0516=0x0000
+0x02CB=0x0000
+0x0250=0x0000
+0x031C=0x0000
+0x028F=0x0000
+0x051A=0x0000
+0x055C=0x0000
+0x050A=0x0000
+0x050B=0x0000
+0x04E7=0x0000
+0x04E6=0x0000
+0x04E5=0x0000
+0x0512=0x0000
+0x0206=0x0000
+0x0550=0x0000
+0x030E=0x0000
+0x0203=0x0000
+0x0482=0x0000
+0x0541=0x0000
+0x0122=0x033F
+0x0110=0x0BF4
+0x0204=0x0000
+0x0252=0x0000
+0x011E=0x05DC
+0x049B=0x0000
+0x0294=0x0000
+0x011C=0xAD41
+0x02D6=0x0000
+0x0311=0x0000
+0x0117=0x280C
+0x02A4=0x0000
+0x0540=0x0000
+0x02E0=0x0000
+0x0118=0x018C
+0x0489=0x0000
+0x04A7=0x0000
+0x0101=0x7800
+0x0558=0x0000
+0x02C6=0x0000
+0x05A1=0x0000
+0x02C9=0x0000
+0x039D=0x0000
+0x0500=0x0000
+0x0450=0x0000
+0x011F=0x3680
+0x030C=0x0000
+0x04DF=0x0000
+0x0106=0x3182
+0x028E=0x0000
+0x0326=0x0000
+0x0113=0x03C3
+0x04CB=0x0000
+0x0391=0x0000
+0x0105=0x0007
+0x02D9=0x0000
+0x02CE=0x0000
+0x044F=0x0000
+0x038B=0x0000
+0x02D4=0x0000
+0x0107=0x318C
+0x0495=0x0000
+0x0246=0x0000
+0x0303=0x0000
+0x02E6=0x0000
+0x045B=0x0000
+0x0340=0x0000
+0x0208=0x0070
+0x0111=0x0083
+0x0247=0x0000
+0x024B=0x0000
+0x045C=0x0000
+0x0383=0x0000
+0x0202=0x07FF
+0x054A=0x0000
+0x0401=0x07FF
+0x0341=0x0000
+0x0287=0x0000
+0x034C=0x0000
+0x0501=0x0000
+0x030F=0x0000
+0x025D=0x0000
+0x0406=0x0000
+0x0313=0x0000
+0x010A=0x104C
+0x0461=0x0000
+0x051B=0x0000
+0x0121=0x356A
+0x0115=0x0009
+[lms7002_registers_a]
+0x0107=0x318C
+0x02D4=0x0000
+0x0082=0x8001
+0x0209=0x0000
+0x02CA=0x0000
+0x04C9=0x0000
+0x0120=0xB9FF
+0x0388=0x0000
+0x029D=0x0000
+0x04A3=0x0000
+0x0208=0x0170
+0x0340=0x0000
+0x0094=0x0000
+0x0244=0x0000
+0x0317=0x0000
+0x00A9=0x8000
+0x0115=0x0009
+0x039A=0x0000
+0x0112=0x3171
+0x048C=0x0000
+0x0023=0x5550
+0x0587=0x1D10
+0x04C0=0x0000
+0x031E=0x0000
+0x0205=0x0000
+0x0361=0x0000
+0x051F=0xAB08
+0x029A=0x0000
+0x0396=0x0000
+0x0284=0x0000
+0x02CE=0x0000
+0x02D9=0x0000
+0x038B=0x0000
+0x044F=0x0000
+0x0367=0x0000
+0x0240=0x0028
+0x05A3=0x0000
+0x0105=0x0007
+0x009B=0x6565
+0x0400=0x0101
+0x02DB=0x0000
+0x0357=0x0000
+0x0104=0x0088
+0x0103=0x0A12
+0x0457=0x0000
+0x0347=0x0000
+0x02D8=0x0000
+0x010C=0x8865
+0x0086=0x4101
+0x0202=0x0794
+0x0383=0x0000
+0x020B=0x4000
+0x0108=0xFC26
+0x0098=0x0000
+0x0117=0x100C
+0x0027=0x05E4
+0x00A7=0x6565
+0x024A=0x0000
+0x0029=0x0101
+0x00AD=0x03FF
+0x0540=0x5009
+0x02A4=0x0000
+0x02DE=0x0000
+0x002E=0x0000
+0x0261=0x0000
+0x00AB=0x0040
+0x0564=0x0000
+0x00A8=0x0000
+0x0517=0xC89D
+0x0481=0x0000
+0x02C1=0x0000
+0x0301=0x0000
+0x00A5=0x6565
+0x0515=0x2E45
+0x025C=0x0000
+0x009F=0x658C
+0x0519=0x4049
+0x054B=0xF7A3
+0x02C7=0x0000
+0x038C=0x0000
+0x0307=0x0000
+0x0282=0x0000
+0x0289=0x0000
+0x011C=0xAD41
+0x0562=0xF524
+0x0025=0x0101
+0x02CC=0x0000
+0x0116=0x8180
+0x0597=0xFDFB
+0x035F=0x0000
+0x002F=0x3840
+0x0589=0xEA5F
+0x00A2=0x6565
+0x0099=0x6565
+0x0310=0x0000
+0x040C=0x40F8
+0x028B=0x0000
+0x0253=0x0000
+0x00AC=0x2000
+0x002D=0xFFFF
+0x00A6=0x0001
+0x054D=0xF7A3
+0x002C=0x0000
+0x0249=0x0000
+0x04CD=0x0000
+0x0401=0x07FF
+0x00A4=0x6565
+0x054A=0x8184
+0x038F=0x0000
+0x008C=0x267B
+0x0241=0x0000
+0x0356=0x0000
+0x00A1=0x6565
+0x0260=0x0000
+0x0453=0x0000
+0x008A=0x0491
+0x048F=0x0000
+0x0445=0x0000
+0x0350=0x0000
+0x00AA=0x0000
+0x034C=0x0000
+0x0501=0xFDFB
+0x0490=0x0000
+0x02CD=0x0000
+0x050D=0x0F45
+0x0353=0x0000
+0x0024=0x50D8
+0x04E5=0x0000
+0x0512=0x196B
+0x0247=0x0000
+0x045C=0x0000
+0x024B=0x0000
+0x0395=0x0000
+0x011F=0x3680
+0x039D=0x0000
+0x0500=0xF61D
+0x02C9=0x0000
+0x05A1=0x0000
+0x02A6=0x0000
+0x0119=0x18DF
+0x010F=0x3042
+0x04CB=0x0000
+0x0391=0x0000
+0x0113=0x03C3
+0x0326=0x0000
+0x028E=0x0000
+0x0106=0x3182
+0x0524=0x3347
+0x009D=0x6565
+0x0294=0x0000
+0x0026=0x0101
+0x0110=0x0BFF
+0x0122=0x033F
+0x0381=0x0000
+0x009C=0x658C
+0x05A0=0x0000
+0x0482=0x0000
+0x030E=0x0000
+0x0203=0x2F99
+0x0095=0x0000
+0x0111=0x0099
+0x0256=0x0000
+0x0089=0x0048
+0x0085=0x0001
+0x0088=0x04F0
+0x0459=0x0000
+0x0394=0x0000
+0x010E=0x0285
+0x02A0=0x0000
+0x002B=0x4032
+0x039C=0x0000
+0x02D2=0x0000
+0x0581=0xC89D
+0x045D=0x0000
+0x0245=0x0000
+0x002A=0x0086
+0x0118=0x018C
+0x02E0=0x0000
+0x0489=0x0000
+0x04A7=0x0000
+0x039E=0x0000
+0x011D=0x2AAA
+0x02E1=0x0000
+0x0259=0x0000
+0x02D5=0x0000
+0x051D=0x4F91
+0x0243=0x0000
+0x0556=0xA2B5
+0x040A=0x1000
+0x05A2=0x0000
+0x020C=0x8000
+0x020A=0x0080
+0x0102=0x3180
+0x034F=0x0000
+0x0303=0x0000
+0x0306=0x0000
+0x0255=0x0000
+0x0300=0x0000
+0x044E=0x0000
+0x0309=0x0000
+0x0585=0xDAA2
+0x0527=0xACB9
+0x044A=0x0000
+0x04A4=0x0000
+0x048A=0x0000
+0x0392=0x0000
+0x030B=0x0000
+0x05A7=0x0000
+0x0252=0x0000
+0x0204=0xC016
+0x0308=0x0000
+0x0588=0xE6C7
+0x0321=0x0000
+0x0507=0xFCFE
+0x0312=0x0000
+0x050B=0xF5EF
+0x0360=0x0000
+0x0021=0x0E9F
+0x04C2=0x0000
+0x030D=0x0000
+0x040E=0x0003
+0x0316=0x0000
+0x031F=0x0000
+0x030C=0x0000
+0x04DF=0x0000
+0x0318=0x0000
+0x0250=0x0000
+0x02CB=0x0000
+0x045E=0x0000
+0x0440=0x0024
+0x031D=0x0000
+0x058D=0xF5EF
+0x02D7=0x0000
+0x0380=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0566=0x0906
+0x0345=0x0000
+0x049C=0x0000
+0x02E3=0x0000
+0x0397=0x0000
+0x035B=0x0000
+0x0505=0x00D8
+0x028D=0x0000
+0x02A1=0x0000
+0x028F=0x0000
+0x031C=0x0000
+0x031A=0x0000
+0x0363=0x0000
+0x0596=0x0A94
+0x0354=0x0000
+0x0518=0xEFF2
+0x035C=0x0000
+0x034D=0x0000
+0x0344=0x0000
+0x0561=0xAB08
+0x0096=0x0000
+0x010D=0x01DC
+0x04C4=0x0000
+0x0351=0x0000
+0x0311=0x0000
+0x02D6=0x0000
+0x02D1=0x0000
+0x0546=0x8D44
+0x04C8=0x0000
+0x048B=0x0000
+0x0358=0x0000
+0x0522=0xDB10
+0x049F=0x0000
+0x034A=0x0000
+0x0455=0x0000
+0x0359=0x0000
+0x03A4=0x0000
+0x03A3=0x0000
+0x0341=0x0000
+0x0287=0x0000
+0x04DA=0x0000
+0x025E=0x0000
+0x0580=0xEFF2
+0x0409=0x0000
+0x059A=0x0000
+0x048D=0x0000
+0x0514=0xE7E2
+0x039B=0x0000
+0x0101=0x7800
+0x0558=0x5009
+0x02C6=0x0000
+0x051B=0xB77F
+0x0313=0x0000
+0x010A=0x104C
+0x0461=0x0000
+0x0406=0x0000
+0x030F=0x0000
+0x025D=0x0000
+0x034B=0x0000
+0x011A=0x2E14
+0x029F=0x0000
+0x030A=0x0000
+0x034E=0x0000
+0x0293=0x0000
+0x03A6=0x0000
+0x0560=0x174B
+0x0404=0x0000
+0x00A0=0x6565
+0x0547=0xD7B7
+0x0454=0x0000
+0x0448=0x0000
+0x0327=0x0000
+0x0305=0x0000
+0x0393=0x0000
+0x0510=0xE6C7
+0x0302=0x0000
+0x0486=0x0000
+0x045F=0x0000
+0x0365=0x0000
+0x048E=0x0000
+0x0022=0x07FF
+0x0283=0x0000
+0x044B=0x0000
+0x045A=0x0000
+0x02DA=0x0000
+0x04E4=0x0000
+0x02E4=0x0000
+0x03A5=0x0000
+0x040B=0x000F
+0x0366=0x0000
+0x0443=0x0000
+0x0508=0xEF99
+0x00A3=0x6565
+0x02E2=0x0000
+0x044D=0x0000
+0x0314=0x0000
+0x0458=0x0000
+0x0493=0x0000
+0x0346=0x0000
+0x024E=0x0000
+0x055E=0xDB10
+0x0402=0x07D9
+0x0384=0x0000
+0x02E6=0x0000
+0x045B=0x0000
+0x0480=0x0000
+0x0567=0x4049
+0x04CA=0x0000
+0x0446=0x0000
+0x0447=0x0000
+0x0460=0x0000
+0x0559=0xACB9
+0x0456=0x0000
+0x0441=0x0000
+0x0444=0x0000
+0x0390=0x0000
+0x0451=0x0000
+0x049E=0x0000
+0x0324=0x0000
+0x02E7=0x0000
+0x038E=0x0000
+0x0403=0x0013
+0x04D8=0x0000
+0x029B=0x0000
+0x0491=0x0000
+0x03A1=0x0000
+0x04E1=0x0000
+0x02A2=0x0000
+0x051C=0x0000
+0x03A2=0x0000
+0x0407=0x0000
+0x0258=0x0000
+0x0502=0x0A94
+0x038A=0x0000
+0x0362=0x0000
+0x028C=0x0000
+0x0352=0x0000
+0x0385=0x0000
+0x0315=0x0000
+0x040D=0x0000
+0x039F=0x0000
+0x0248=0x0000
+0x0405=0x0000
+0x0254=0x0000
+0x0398=0x0000
+0x0408=0x0000
+0x0487=0x0000
+0x038D=0x0000
+0x035E=0x0000
+0x03A7=0x0000
+0x0520=0x174B
+0x0449=0x0000
+0x02C8=0x0000
+0x035A=0x0000
+0x0387=0x0000
+0x0386=0x0000
+0x0452=0x0000
+0x0299=0x0000
+0x0084=0x0400
+0x0498=0x0000
+0x0348=0x0000
+0x02D0=0x0000
+0x054E=0x8184
+0x03A0=0x0000
+0x009A=0x658C
+0x055D=0xA6B5
+0x0298=0x0000
+0x0364=0x0000
+0x0081=0x0000
+0x0325=0x0000
+0x040F=0x43E4
+0x04E3=0x0000
+0x050E=0x17DC
+0x0516=0x150F
+0x0389=0x0000
+0x054F=0x18C9
+0x0304=0x0000
+0x04D5=0x0000
+0x059B=0x0000
+0x0322=0x0000
+0x0442=0x0000
+0x035D=0x0000
+0x0492=0x0000
+0x04A1=0x0000
+0x0382=0x0000
+0x0288=0x0000
+0x0296=0x0000
+0x0555=0xBD96
+0x0349=0x0000
+0x0484=0x0000
+0x0586=0x196B
+0x0281=0x0000
+0x0200=0x0301
+0x0594=0xF40D
+0x02C5=0x0000
+0x0319=0x0000
+0x0121=0x3652
+0x025B=0x0000
+0x0290=0x0000
+0x02DF=0x0000
+0x0291=0x0000
+0x029C=0x0000
+0x008B=0x2756
+0x02A3=0x0000
+0x05A4=0x0000
+0x02A7=0x0000
+0x0483=0x0000
+0x0201=0x07FF
+0x02C2=0x0000
+0x02C4=0x0000
+0x0207=0x0000
+0x04C6=0x0000
+0x0093=0x0000
+0x02D3=0x0000
+0x0494=0x0000
+0x04CF=0x0000
+0x025F=0x0000
+0x0251=0x0000
+0x0488=0x0000
+0x0496=0x0000
+0x04C3=0x0000
+0x0100=0xB409
+0x04CC=0x0000
+0x02A5=0x0000
+0x0257=0x0000
+0x04D6=0x0000
+0x04A6=0x0000
+0x049A=0x0000
+0x049B=0x0000
+0x0097=0x0000
+0x011E=0x061D
+0x0285=0x0000
+0x0280=0x0000
+0x0020=0xFFFD
+0x02DD=0x0000
+0x0297=0x0000
+0x044C=0x0000
+0x0355=0x0000
+0x04A0=0x0000
+0x02CF=0x0000
+0x04D1=0x0000
+0x0526=0xBE2A
+0x0092=0x0001
+0x031B=0x0000
+0x0541=0x4C24
+0x0543=0xBD96
+0x02C0=0x0000
+0x0499=0x0000
+0x0513=0xDAA2
+0x0549=0x18C9
+0x0552=0x8D44
+0x0521=0x5852
+0x0509=0x0605
+0x0286=0x0000
+0x024F=0x0000
+0x04E0=0x0000
+0x0545=0x364E
+0x0551=0xD7B7
+0x055F=0x5852
+0x009E=0x658C
+0x0598=0xF61D
+0x0123=0x067B
+0x0497=0x0000
+0x04A5=0x0000
+0x0565=0xB77F
+0x0124=0x0000
+0x0592=0x0DF1
+0x0591=0xFCFE
+0x0548=0x79FA
+0x04D2=0x0000
+0x0599=0x0000
+0x0511=0x1D10
+0x0506=0x0DF1
+0x0595=0x00BC
+0x0584=0xE7E2
+0x0242=0x0000
+0x025A=0x0000
+0x04E2=0x0000
+0x04C5=0x0000
+0x058C=0xEA50
+0x0450=0x0000
+0x058A=0x17DC
+0x059D=0x0000
+0x0485=0x0000
+0x058E=0x1316
+0x0550=0x79FA
+0x0554=0x6901
+0x0593=0x00D8
+0x0553=0x364E
+0x0542=0xA2B5
+0x0563=0x4F91
+0x024D=0x0000
+0x055A=0xBE2A
+0x0295=0x0000
+0x028A=0x0000
+0x059C=0x0000
+0x04DD=0x0000
+0x054C=0x7FFF
+0x0582=0x150F
+0x0109=0x8CC1
+0x04A2=0x0000
+0x0292=0x0000
+0x0583=0x2E45
+0x059F=0x0000
+0x0525=0x57AC
+0x0523=0xA6B5
+0x0206=0x0000
+0x051A=0x0906
+0x055C=0x3347
+0x05A6=0x0000
+0x050F=0xEA5F
+0x051E=0xF524
+0x050A=0x1316
+0x04C7=0x0000
+0x049D=0x0000
+0x050C=0xEA50
+0x0087=0x0000
+0x0399=0x0000
+0x0495=0x0000
+0x0246=0x0000
+0x0503=0x00BC
+0x0320=0x0000
+0x0323=0x0000
+0x055B=0x57AC
+0x0114=0x0110
+0x02E5=0x0000
+0x04E7=0x0000
+0x04D0=0x0000
+0x04E6=0x0000
+0x00AE=0x0000
+0x0544=0x6901
+0x04DE=0x0000
+0x058B=0x0F45
+0x0028=0x0101
+0x029E=0x0000
+0x04DC=0x0000
+0x04D9=0x0000
+0x058F=0x0605
+0x0557=0x4C24
+0x04DB=0x0000
+0x04D7=0x0000
+0x059E=0x0000
+0x024C=0x0000
+0x02DC=0x0000
+0x04D4=0x0000
+0x0504=0xF40D
+0x02C3=0x0000
+0x04C1=0x0000
+0x04D3=0x0000
+0x0590=0xEF99
+0x04CE=0x0000
+0x05A5=0x0000
+[file_info]
+version=1
+type=lms7002m_minimal_config
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.50PRB.lmssdr.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.50PRB.lmssdr.conf
new file mode 100644
index 0000000000..4209490141
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.50PRB.lmssdr.conf
@@ -0,0 +1,171 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+ ////////// Identification parameters:
+ eNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_ENB";
+
+ eNB_name = "eNB_Eurecom_LTEBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = "1";
+
+ mobile_country_code = "208";
+
+ mobile_network_code = "93";
+
+ ////////// Physical parameters:
+
+ component_carriers = (
+ {
+ frame_type = "FDD";
+ tdd_config = 3;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 13;
+ downlink_frequency = 751000000L;
+ uplink_frequency_offset = 31000000;
+ Nid_cell = 0;
+ N_RB_DL = 50;
+ Nid_cell_mbsfn = 0;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 90;
+ rx_gain = 125;
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 1;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 32;
+ pdsch_referenceSignalPower = -20;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 1;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
+ srs_enable = "DISABLE";
+ /* srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;*/
+
+ pusch_p0_Nominal = -90;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -96;
+ msg3_delta_Preamble = 6;
+ pucch_deltaF_Format1 = "deltaF2";
+ pucch_deltaF_Format1b = "deltaF3";
+ pucch_deltaF_Format2 = "deltaF0";
+ pucch_deltaF_Format2a = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
+
+ rach_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
+ /*
+ rach_sizeOfRA_PreamblesGroupA = ;
+ rach_messageSizeGroupA = ;
+ rach_messagePowerOffsetGroupB = ;
+ */
+ rach_powerRampingStep = 4;
+ rach_preambleInitialReceivedTargetPower = -108;
+ rach_preambleTransMax = 10;
+ rach_raResponseWindowSize = 10;
+ rach_macContentionResolutionTimer = 48;
+ rach_maxHARQ_Msg3Tx = 4;
+
+ pcch_default_PagingCycle = 128;
+ pcch_nB = "oneT";
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
+
+ }
+ );
+
+
+ srb1_parameters :
+ {
+ # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+ timer_poll_retransmit = 80;
+
+ # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+ timer_reordering = 35;
+
+ # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+ timer_status_prohibit = 0;
+
+ # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+ poll_pdu = 4;
+
+ # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+ poll_byte = 99999;
+
+ # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+ max_retx_threshold = 4;
+ }
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "192.168.12.11";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24";
+
+ ENB_INTERFACE_NAME_FOR_S1U = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24";
+ ENB_PORT_FOR_S1U = 2152; # Spec 2152
+ };
+
+ log_config :
+ {
+ global_log_level ="info";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="info";
+ phy_log_verbosity ="medium";
+ mac_log_level ="info";
+ mac_log_verbosity ="high";
+ rlc_log_level ="info";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="info";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="info";
+ rrc_log_verbosity ="medium";
+ };
+ }
+);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.lmssdr.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.lmssdr.conf
new file mode 100644
index 0000000000..266e5aae25
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.lmssdr.conf
@@ -0,0 +1,171 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+ ////////// Identification parameters:
+ eNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_ENB";
+
+ eNB_name = "eNB_Eurecom_LTEBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = "1";
+
+ mobile_country_code = "208";
+
+ mobile_network_code = "93";
+
+ ////////// Physical parameters:
+
+ component_carriers = (
+ {
+ frame_type = "FDD";
+ tdd_config = 3;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 13;
+ downlink_frequency = 751000000L;
+ uplink_frequency_offset = 31000000;
+ Nid_cell = 0;
+ N_RB_DL = 25;
+ Nid_cell_mbsfn = 0;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 90;
+ rx_gain = 107;
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 1;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 32;
+ pdsch_referenceSignalPower = -17;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 1;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
+ srs_enable = "DISABLE";
+ /* srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;*/
+
+ pusch_p0_Nominal = -90;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -96;
+ msg3_delta_Preamble = 6;
+ pucch_deltaF_Format1 = "deltaF2";
+ pucch_deltaF_Format1b = "deltaF3";
+ pucch_deltaF_Format2 = "deltaF0";
+ pucch_deltaF_Format2a = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
+
+ rach_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
+ /*
+ rach_sizeOfRA_PreamblesGroupA = ;
+ rach_messageSizeGroupA = ;
+ rach_messagePowerOffsetGroupB = ;
+ */
+ rach_powerRampingStep = 4;
+ rach_preambleInitialReceivedTargetPower = -108;
+ rach_preambleTransMax = 10;
+ rach_raResponseWindowSize = 10;
+ rach_macContentionResolutionTimer = 48;
+ rach_maxHARQ_Msg3Tx = 4;
+
+ pcch_default_PagingCycle = 128;
+ pcch_nB = "oneT";
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
+
+ }
+ );
+
+
+ srb1_parameters :
+ {
+ # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+ timer_poll_retransmit = 80;
+
+ # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+ timer_reordering = 35;
+
+ # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+ timer_status_prohibit = 0;
+
+ # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+ poll_pdu = 4;
+
+ # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+ poll_byte = 99999;
+
+ # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+ max_retx_threshold = 4;
+ }
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "192.168.12.11";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24";
+
+ ENB_INTERFACE_NAME_FOR_S1U = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24";
+ ENB_PORT_FOR_S1U = 2152; # Spec 2152
+ };
+
+ log_config :
+ {
+ global_log_level ="info";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="info";
+ phy_log_verbosity ="medium";
+ mac_log_level ="info";
+ mac_log_verbosity ="high";
+ rlc_log_level ="info";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="info";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="info";
+ rrc_log_verbosity ="medium";
+ };
+ }
+);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.usrpb210.conf
index 69d8536217..1bf3c6fbf2 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.usrpb210.conf
@@ -31,12 +31,12 @@ eNBs =
downlink_frequency = 751000000L;
uplink_frequency_offset = 31000000;
Nid_cell = 0;
- N_RB_DL = 25;
+ N_RB_DL = 50;
Nid_cell_mbsfn = 0;
nb_antennas_tx = 1;
nb_antennas_rx = 1;
tx_gain = 90;
- rx_gain = 100;
+ rx_gain = 110;
prach_root = 0;
prach_config_index = 0;
prach_high_speed = "DISABLE";
@@ -64,7 +64,7 @@ eNBs =
srs_ackNackST =;
srs_MaxUpPts =;*/
- pusch_p0_Nominal = -86;
+ pusch_p0_Nominal = -90;
pusch_alpha = "AL1";
pucch_p0_Nominal = -96;
msg3_delta_Preamble = 6;
@@ -82,7 +82,7 @@ eNBs =
rach_messagePowerOffsetGroupB = ;
*/
rach_powerRampingStep = 4;
- rach_preambleInitialReceivedTargetPower = -108;
+ rach_preambleInitialReceivedTargetPower = -100;
rach_preambleTransMax = 10;
rach_raResponseWindowSize = 10;
rach_macContentionResolutionTimer = 48;
@@ -133,7 +133,7 @@ eNBs =
////////// MME parameters:
- mme_ip_address = ( { ipv4 = "192.168.12.62";
+ mme_ip_address = ( { ipv4 = "172.27.8.52";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
@@ -142,11 +142,11 @@ eNBs =
NETWORK_INTERFACES :
{
- ENB_INTERFACE_NAME_FOR_S1_MME = "eth4";
- ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.242/24";
+ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "172.27.8.51/23";
- ENB_INTERFACE_NAME_FOR_S1U = "eth4";
- ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.242/24";
+ ENB_INTERFACE_NAME_FOR_S1U = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1U = "172.27.8.51/23";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
@@ -168,4 +168,4 @@ eNBs =
rrc_log_verbosity ="medium";
};
}
-);
+);
\ No newline at end of file
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.generic.oaisim.local_no_mme.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.generic.oaisim.local_no_mme.conf
new file mode 100644
index 0000000000..ae989b5c8d
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.generic.oaisim.local_no_mme.conf
@@ -0,0 +1,146 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+ ////////// Identification parameters:
+ eNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_ENB";
+
+ eNB_name = "eNB_Eurecom_LTEBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = "1";
+
+ mobile_country_code = "208";
+
+ mobile_network_code = "10";
+
+ ////////// Physical parameters:
+
+ component_carriers = (
+ {
+ frame_type = "TDD";
+ tdd_config = 3;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 38;
+ downlink_frequency = 2580000000L;
+ uplink_frequency_offset = 0;
+ Nid_cell = 0;
+ N_RB_DL = 25;
+ Nid_cell_mbsfn = 0;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 25;
+ rx_gain = 20;
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 1;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 32;
+ pdsch_referenceSignalPower = 0;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 0;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
+ srs_enable = "DISABLE";
+ /* srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;*/
+
+ pusch_p0_Nominal = -108;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -108;
+ msg3_delta_Preamble = 6;
+ pucch_deltaF_Format1 = "deltaF2";
+ pucch_deltaF_Format1b = "deltaF3";
+ pucch_deltaF_Format2 = "deltaF0";
+ pucch_deltaF_Format2a = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
+
+ rach_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
+ /*
+ rach_sizeOfRA_PreamblesGroupA = ;
+ rach_messageSizeGroupA = ;
+ rach_messagePowerOffsetGroupB = ;
+ */
+ rach_powerRampingStep = 2;
+ rach_preambleInitialReceivedTargetPower = -100;
+ rach_preambleTransMax = 10;
+ rach_raResponseWindowSize = 10;
+ rach_macContentionResolutionTimer = 48;
+ rach_maxHARQ_Msg3Tx = 4;
+
+ pcch_default_PagingCycle = 128;
+ pcch_nB = "oneT";
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
+ }
+ );
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "0.0.0.0";
+ ipv6 = "0::0";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ ENB_INTERFACE_NAME_FOR_S1_MME = "none";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "0.0.0.0/24";
+
+ ENB_INTERFACE_NAME_FOR_S1U = "none";
+ ENB_IPV4_ADDRESS_FOR_S1U = "0.0.0.0/24";
+ ENB_PORT_FOR_S1U = 2153; # Spec 2152
+ };
+
+ log_config :
+ {
+ global_log_level ="trace";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="trace";
+ phy_log_verbosity ="medium";
+ mac_log_level ="trace";
+ mac_log_verbosity ="medium";
+ rlc_log_level ="trace";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="trace";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="trace";
+ rrc_log_verbosity ="medium";
+ gtpu_log_level ="debug";
+ gtpu_log_verbosity ="medium";
+ udp_log_level ="debug";
+ udp_log_verbosity ="medium";
+ osa_log_level ="debug";
+ osa_log_verbosity ="low";
+ };
+
+ }
+);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.lmssdr.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.lmssdr.conf
index e001bd12e9..dae0187f18 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.lmssdr.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.lmssdr.conf
@@ -17,7 +17,7 @@ eNBs =
mobile_country_code = "208";
- mobile_network_code = "93";
+ mobile_network_code = "95";
////////// Physical parameters:
@@ -132,7 +132,7 @@ eNBs =
};
////////// MME parameters:
- mme_ip_address = ( { ipv4 = "192.168.12.171";
+ mme_ip_address = ( { ipv4 = "192.168.12.62";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.rrh.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.rrh.usrpb210.conf
index 604f5567ef..004af14749 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.rrh.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.rrh.usrpb210.conf
@@ -150,7 +150,7 @@ rrh_gw_config = (
rrh_gw_active = "yes";
tr_preference = "raw";
rf_preference = "usrp_b200";
- iq_txshift = 5;
+ iq_txshift = 4;
tx_sample_advance = 113;
tx_scheduling_advance = 9;
@@ -163,8 +163,6 @@ rrh_gw_config = (
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth4";
-
-
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
index 72047f44de..7e17a07512 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
@@ -140,10 +140,10 @@ eNBs =
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
- ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.213/24";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
- ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.213/24";
+ ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf
index 8e94836df1..ba77ad0edb 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.usrpb210.conf
@@ -145,14 +145,14 @@ rrh_gw_config = (
local_if_name = "eth0";
#remote_address = "169.254.10.158";
#local_address = "169.254.8.15";
- remote_address = "74:d4:35:cc:88:d1"; #bourdon
- local_address = "74:d4:35:cc:8d:15"; #papillon
+ remote_address = "74:d4:35:cc:88:e3";
+ local_address = "74:d4:35:cc:88:d1";
local_port = 50000; #for raw option local port must be the same to remote
remote_port = 50000;
rrh_gw_active = "yes";
tr_preference = "raw";
rf_preference = "usrp_b200";
- iq_txshift = 5;
+ iq_txshift = 4;
tx_sample_advance = 70;
tx_scheduling_advance = 9;
@@ -161,12 +161,10 @@ rrh_gw_config = (
NETWORK_INTERFACES :
{
+
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
-
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
-
-
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
index 985017e8d5..773c3dd71e 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -17,7 +17,7 @@ eNBs =
mobile_country_code = "208";
- mobile_network_code = "93";
+ mobile_network_code = "95";
////////// Physical parameters:
@@ -28,7 +28,7 @@ eNBs =
tdd_config_s = 0;
prefix_type = "NORMAL";
eutra_band = 7;
- downlink_frequency = 2660000000L;
+ downlink_frequency = 2685000000L;
uplink_frequency_offset = -120000000;
Nid_cell = 0;
N_RB_DL = 25;
@@ -133,7 +133,7 @@ eNBs =
////////// MME parameters:
- mme_ip_address = ( { ipv4 = "192.168.12.11";
+ mme_ip_address = ( { ipv4 = "192.168.12.211";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf
index 75969c04fd..3043256628 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf
@@ -130,10 +130,12 @@ eNBs =
};
////////// MME parameters:
- mme_ip_address = ( {ipv4 = "192.170.0.1";
- ipv6="192:168:30::17";
- active="yes";
- preference="ipv4";});
+ mme_ip_address = ( { ipv4 = "192.170.0.1";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
NETWORK_INTERFACES :
{
@@ -141,6 +143,7 @@ eNBs =
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.170.0.2/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0:4";
+ ENB_IPV4_ADDRESS_FOR_S1U = "192.170.1.2/24";
ENB_IPV4_ADDRESS_FOR_S1U = "192.170.0.2/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
};
diff --git a/targets/RT/USER/dot11.c b/targets/RT/USER/dot11.c
deleted file mode 100644
index 00e535a21d..0000000000
--- a/targets/RT/USER/dot11.c
+++ /dev/null
@@ -1,1275 +0,0 @@
-/*******************************************************************************
-
- Eurecom OpenAirInterface
- Copyright(c) 1999 - 2011 Eurecom
-
- This program is free software; you can redistribute it and/or modify it
- under the terms and conditions of the GNU General Public License,
- version 2, as published by the Free Software Foundation.
-
- This program is distributed in the hope it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- more details.
-
- You should have received a copy of the GNU General Public License along with
- this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
-
- Contact Information
- Openair Admin: openair_admin@eurecom.fr
- Openair Tech : openair_tech@eurecom.fr
- Forums : http://forums.eurecom.fsr/openairinterface
- Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
-
-*******************************************************************************/
-
-<<<<<<< .mine
-/*! \file dot11.c
-* \brief main program to control HW and scheduling for openairITS dot11 MODEM
-* \author R. Knopp, F. Kaltenberger
-* \date 2012
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
-* \note
-* \warning
-*/
-=======
- /*! \file dot11.c
- * \brief main program to control HW and scheduling for openairITS dot11 MODEM
- * \author R. Knopp, F. Kaltenberger
- * \date 2012
- * \version 0.1
- * \company Eurecom
- * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
- * \note
- * \warning
- */
- >>>>>>> .r3153
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-
-#include "PHY/types.h"
-#include "PHY/defs.h"
-
-#include "ARCH/COMMON/defs.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_pci.h"
-#include "SIMULATION/LTE_PHY/openair_hw.h"
-
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/vars.h"
-#include "SCHED/defs.h"
-#include "SCHED/vars.h"
-
-
- <<<<<<< .mine
-#include "phy/DOT11/defs.h"
-#include "phy/DOT11/commonvars.h"
-#include
- =======
-#include "phy/DOT11/defs.h"
-#include "phy/DOT11/commonvars.h"
-#include "PHY/TOOLS/defs.h"
- >>>>>>> .r3153
-
- <<<<<<< .mine
- =======
-#include
- >>>>>>> .r3153
-
- <<<<<<< .mine
-#include "UTIL/LOG/log.h"
- =======
- >>>>>>> .r3153
-
- <<<<<<< .mine
-#define FRAME_LENGTH_SAMPLES_MAX 100000
-
- uint16_t rev64[64];
-
-int generate_test_tx=0;
-
-
-
-
-=======
-#include "UTIL/LOG/log.h"
-#include "ieee80211p-netlinkapi.h"
-
-#define FRAME_LENGTH_SAMPLES_MAX 100000
-
- uint16_t rev64[64];
-
-int generate_test_tx=0;
-
-
-
-
->>>>>>> .r3153
-#define FRAME_PERIOD 100000000ULL
-#define DAQ_PERIOD 66666ULL
-
-
-#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
-enum nl80211_band {
- NL80211_BAND_2GHZ,
- NL80211_BAND_5GHZ,
- NL80211_BAND_5_9GHZ,
- NL80211_BAND_0_8GHZ,
-};
-
-<<<<<<< .mine
-
-=======
- enum ieee80211_band {
- IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ,
- IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ,
- IEEE80211_BAND_5_9GHZ = NL80211_BAND_5_9GHZ,
- IEEE80211_BAND_0_8GHZ = NL80211_BAND_0_8GHZ,
- };
-
-struct ieee80211p_rx_status {
- short data_len; //frame data length in bytes
- char rssi; //received power in dBm
- char rate; //reveived data rate in units of 100 kbps
- enum ieee80211_band band;
- char flags; //RX flags
-}; /* struct ieee80211p_rx_status */
-
-
->>>>>>> .r3153
-//static CND *cond;
-
-static int thread1;
-static int thread2;
-
-static int sync_thread;
-
-
-static int instance_cnt=-1; //0 means worker is busy, -1 means its free
-int instance_cnt_ptr_kern,*instance_cnt_ptr_user;
-int pci_interface_ptr_kern;
-
-extern unsigned int bigphys_top;
-extern unsigned int mem_base;
-
-int openair_fd = 0;
-
-int oai_exit = 0;
-
-//PCI_interface_t *pci_interface[3];
-
-unsigned int *DAQ_MBOX;
-
-unsigned int time_offset[4] = {0,0,0,0};
-
-int fs4_test=0;
-char UE_flag=0;
-
-struct timing_info_t {
- unsigned int frame, hw_slot, last_slot, next_slot;
- RTIME time0, time1, time2;
- unsigned int mbox0, mbox1, mbox2, mbox_target;
-} timing_info[20];
-
-extern s16* sync_corr_ue0;
-extern s16 prach_ifft[4][1024*2];
-
-typedef enum {normal_txrx=0,rx_calib_ue=1,rx_calib_ue_med=2,rx_calib_ue_byp=3} runmode_t;
-
-runmode_t mode;
-int rx_input_level_dBm;
-
-
-int otg_enabled = 0;
-
-TX_RX_VARS dummy_tx_rx_vars;
-unsigned int bigphys_top;
-unsigned int mem_base;
-
-<<<<<<< .mine
-uint32_t *txdata[2],*rxdata[2];
-
-uint8_t *data_ind = NULL;
-
-extern int dot11_netlink_init();
-extern void *rx_thread(void *);
-extern void *tx_thread(void *);
-
-
-void dot11_init()
-{
-
-
-
- set_taus_seed(0);
-
- // Basic initializations
- init_fft(64,6,rev64);
- init_interleavers();
- ccodedot11_init();
- ccodedot11_init_inv();
- phy_generate_viterbi_tables();
-
- init_crc32();
-
-}
-=======
- uint32_t *txdata[2],*rxdata[2];
->>>>>>> .r3153
-
-<<<<<<< .mine
-void generate_test_tx_signal()
-{
- =======
- uint8_t *data_ind = NULL;
- >>>>>>> .r3153
-
- <<<<<<< .mine
- TX_VECTOR_t tx_vector;
- int i;
-
- if (data_ind == NULL) {
- data_ind = (uint8_t*)malloc(4095+2+1);
- data_ind[0] = 0;
- data_ind[1] = 0;
- }
-
-
- tx_vector.rate=1;
- tx_vector.sdu_length=512;
- tx_vector.service=0;
-
- for (i=0; i>>>>>> .r3153
-
- extern int32_t rxDATA_F_comp_aggreg3[48*1024];
- extern int32_t rxDATA_F_comp_aggreg2[48*1024];
-
-#define FRAME_LENGTH_SAMPLES 76800
-#define RX_THRES 60
-
-#define SLOT_DURATION_5MHz 105
-#define RX_THRES_dB 300
-
- u32 rxgain[4]= {30,30,30,30};
- unsigned int rxg_max[4]= {133,133,133,133}, rxg_med[4]= {127,127,127,127}, rxg_byp[4]= {120,120,120,120};
-
- extern int tx_sdu_active;
- extern int tx_sdu_length;
- extern char rxsdu[2000];
- int n;
-
- static void *rx_thread(void *arg) {
-
- int fd = *((int*)arg);
- int rx_offset;
- RX_VECTOR_t *rxv;
- uint8_t *data_ind_rx;
- int i;
- struct ieee80211p_rx_status *rs;
- int ret,frame;
- RT_TASK *task;
- int16_t rx_energy;
- int initial_sample_offset = 0,off=0;
- int dlen,dlen_symb;
- int mbox_off = 0,old_mbox,mbox_diff;
- int rt_skip_cond;
- int pos_crc=0,neg_crc=0;
- int sdu_received;
- int sample_threshold;
- int log2_maxh;
- struct sched_param mysched;
- int skip=0;
- int txlen;
-
- /* mysched.sched_priority = 99;
-
- sched_setscheduler( 0, SCHED_FIFO, &mysched);
- */
- char dummy_data[16];
-
-
- if (fd>0) {
- printf("rx_thread starting, fd %d\n",fd);
-
- data_ind_rx = (uint8_t*)malloc(4095+2+1+12);
-
- task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
- mlockall(MCL_CURRENT | MCL_FUTURE);
-
- // rt_make_hard_real_time();
-
-
- // printf("Started rx_thread ... MBOX %d\n",((unsigned int *)DAQ_MBOX)[0]);
- // wait until MBOX gets around to zero
- i=0;
-
- while (((volatile unsigned int *)DAQ_MBOX)[0] != 0) {
- rt_sleep(nano2count(10000));
-
- if (i>1000) {
- printf("HW not counting,exiting rx_thread\n");
- return(0);
- }
- }
-
- // printf("Got first MBOX = 0\n");
- // wait for first 120us
- while (((unsigned int *)DAQ_MBOX)[0] < 2)
- rt_sleep(nano2count(2*66666));
-
- old_mbox = ((unsigned int *)DAQ_MBOX)[0];
-
- // printf("MBOX = %d\n",((unsigned int *)DAQ_MBOX)[0]);
- i = 0;
- frame = 0;
- // oai_exit=1;
- rt_skip_cond=0;
-
- while (!oai_exit) {
-
- // printf("While in ... mbox %d\n",((unsigned int *)DAQ_MBOX)[0]);
-
- rx_energy = dB_fixed_times10(signal_energy((int32_t*)(rxdata[0]+(initial_sample_offset&(~0x1))),
- SLOT_DURATION_5MHz - (SLOT_DURATION_5MHz&1)));
-
- sdu_received = 0;
-
- if (rx_energy>RX_THRES_dB) {
- if (initial_sample_offset < SLOT_DURATION_5MHz)
- off = initial_sample_offset + FRAME_LENGTH_SAMPLES - SLOT_DURATION_5MHz;
- else
- off = initial_sample_offset - SLOT_DURATION_5MHz;
-
- if (((dot11_state = initial_sync(&rxv,
- &rx_offset,
- &log2_maxh,
- rxdata[0],
- FRAME_LENGTH_SAMPLES,
- off,
- 1)) == BUSY)) {
-
-
- //if ((frame % 100) == 0)
- // printf("Channel is busy, rxv %p, offset %d\n",(void*)rxv,rx_offset);
-
- if (rxv) {
- rx_energy = dB_fixed_times10(signal_energy((int32_t*)(rxdata[0]+rx_offset),
- 80));
- // if ((frame%100) == 0)
- printf("Frame %d: Rate %d, SDU_LENGTH %d,rx_offset %d,log2_maxh %d, rxp %f dBm (dig %f,rxgain %d)\n",
- frame,rxv->rate,rxv->sdu_length,rx_offset,log2_maxh,(rx_energy/10.0)-rxg_max[0]+30-rxgain[0],
- rx_energy/10.0,rxg_max[0]-30+rxgain[0]);
-
- if ((rxv->sdu_length > 1500) || (rxv->rate > 3) )
- printf("ERROR: Frame %d: Rate %d, SDU_LENGTH %d,rx_offset %d,log2_maxh %d, rxp %f dBm (dig %f,rxgain %d)\n",
- frame,rxv->rate,rxv->sdu_length,rx_offset,log2_maxh,(rx_energy/10.0)-rxg_max[0]+30-rxgain[0],
- rx_energy/10.0,rxg_max[0]-30+rxgain[0]);
- else {
- memset((void*)&data_ind_rx[10],0,rxv->sdu_length+4+2+1+16);
-
- <<<<<<< .mine
- =======
-
- if (data_detection(rxv,&data_ind_rx[10],
- (uint32_t*)rxdata[0],
- 76800,rx_offset,log2_maxh,NULL)) {
- pos_crc++;
- printf("Received SDU with positive CRC\n");
-
- if (fd) {
- rs = (struct ieee80211p_rx_status *)&data_ind_rx[0];
- rs->data_len = rxv->sdu_length;
- rs->rssi = (char)((rx_energy/10.0)-rxg_max[0]+30-rxgain[0]);
- rs->rate = 60;
- rs->band = IEEE80211_BAND_0_8GHZ;
- rs->flags = 0;
- ret = netlink_send(fd,NLCMD_DATA,128,&data_ind_rx[0]);
- }
-
- } else {
- neg_crc++;
- printf("Received SDU with negative CRC\n");
- oai_exit=1;
- write_output("rxDATA_F_comp_aggreg3.m","rxDAT_F_comp_aggreg3", rxDATA_F_comp_aggreg3,48*200,1,1);
- write_output("rxsig_sdu.m","rxsig_sdu",&rxdata[0][rx_offset],80*40,1,1);
-
- // write_output("rxDATA_F_comp_aggreg2.m","rxDAT_F_comp_aggreg2", rxDATA_F_comp_aggreg2,48*200,1,1);
- }
-
- sdu_received = 1;
-
- // oai_exit = 1;
- dlen = 32+16+6+(rxv->sdu_length<<3); // data length is 32-bits CRC + sdu + 16 service + 6 tail
- dlen_symb = dlen/Ndbps[rxv->rate];
-
- if ((dlen%Ndbps[rxv->rate])>0)
- dlen_symb++;
-
- // printf("after dd: initial_sample_offset %d =>",initial_sample_offset);
- initial_sample_offset = rx_offset + (80*dlen_symb);
- // printf("%d\n",initial_sample_offset);
- }
- } else {
- printf("BUSY, no synch (off %d) Frame %d (%llu us): rxp %f dBm (dig %f,rxgain %d)\n",
- off,frame,rt_get_time_ns()/1000,(rx_energy/10.0)-rxg_max[0]+30-rxgain[0],
- rx_energy/10.0,rxg_max[0]-30+rxgain[0]);
- }
- } else {
- /* printf("Frame %d (%llu us): rxp %d dBm (dig %d,rxgain %d)\n",
- frame,rt_get_time_ns()/1000,rx_energy-rxg_max[0]+30-rxgain[0],
- rx_energy,rxg_max[0]-30+rxgain[0]);
- */
- }
-
- } else {
-
- if (((frame%100) == 0) && (initial_sample_offset < 2*SLOT_DURATION_5MHz)) {
- printf("Frame %d (%llu us): rxp %f dBm (dig %f,rxgain %d)\n",
- frame,rt_get_time_ns()/1000,(rx_energy/10.0)-rxg_max[0]+30-rxgain[0],
- rx_energy/10.0,rxg_max[0]-30+rxgain[0]);
-
- }
-
- if ((frame > 100) &&
- (tx_sdu_active == 1) &&
- (initial_sample_offset < 60000)) {
-
- printf("Frame %d: Generating SDU of length %d (%p), initial_sample_offset %d, MBOX <<9 %d\n",frame,tx_sdu_length,rxsdu,initial_sample_offset,DAQ_MBOX[0]<<9); /*
- for (n=0;n FRAME_LENGTH_SAMPLES)
- initial_sample_offset -= FRAME_LENGTH_SAMPLES;
-
-
-
- txlen= generate_tx_signal(initial_sample_offset);
- // wait until TX is finished
-
- printf("TX: txlen %d, initial_sample_offset %d\n",txlen,initial_sample_offset);
- //oai_exit=1;
-
- rt_sleep(nano2count((66666*8)+((txlen*66666)>>9)));
- skip = initial_sample_offset+txlen-FRAME_LENGTH_SAMPLES;
-
- if (skip < 0)
- skip = 0;
-
- printf("TX: erasing signal, MBOX %d (%d)\n",DAQ_MBOX[0],DAQ_MBOX[0]<<9);
-
- // erase TX signal
- for (i=0; i<(txlen-skip); i++)
- txdata[0][initial_sample_offset+i] = 0x00010001;
-
- for (i=0; i FRAME_LENGTH_SAMPLES) {
- initial_sample_offset -= FRAME_LENGTH_SAMPLES;
- frame++;
- mbox_off = 0;
- }
-
- tx_sdu_active = 0;
- old_mbox = DAQ_MBOX[0];
-
- }
-
-
- //rt_sleep(nano2count(10000));
- // printf("back from sleep 10000 ... mbox %d\n",((unsigned int *)DAQ_MBOX)[0]);
-
- }
-
-
- initial_sample_offset+=SLOT_DURATION_5MHz;
-
- if (initial_sample_offset>FRAME_LENGTH_SAMPLES) {
- initial_sample_offset-=FRAME_LENGTH_SAMPLES;
- mbox_off = 0;
- frame++;
- // if ((frame%100) == 0)
- //printf("**** New frame %d\n",frame);
-
- if (frame == 100000)
- oai_exit = 1;
- }
-
- // sleep until HW has filled enough samples
-
-
- mbox_diff = ((unsigned int*)DAQ_MBOX)[0]-old_mbox;
- // if ((frame%100) == 0)
- // printf("frame %d, old_mbox %d, mbox %d (initial_sample_offset %d : mbox<<9 %d)\n",frame,old_mbox,((unsigned int*)DAQ_MBOX)[0],initial_sample_offset,((unsigned int*)DAQ_MBOX)[0]<<9);
-
-
- if ((mbox_diff>10) && (sdu_received == 0)) {
- mbox_off = 0;
- initial_sample_offset = ((unsigned int*)DAQ_MBOX)[0]<<9;
- // printf("initial_sample_offset adjusted %d\n",initial_sample_offset);
- rt_skip_cond++;
- // printf("old_mbox %d, mbox %d (initial_sample_offset %d : mbox<<9 %d)\n",
- // old_mbox,((unsigned int*)DAQ_MBOX)[0],initial_sample_offset,((unsigned int*)DAQ_MBOX)[0]<<9);
- old_mbox = ((unsigned int *)DAQ_MBOX)[0];
-
- } else {
- if (old_mbox > ((unsigned int *)DAQ_MBOX)[0])
- mbox_off = 150;
-
- old_mbox = ((unsigned int *)DAQ_MBOX)[0];
- }
-
- /*
- printf("off: %d (%d,%d), mbox_off %d => rx_energy %d\n",initial_sample_offset,
- ((unsigned int *)DAQ_MBOX)[0],
- (initial_sample_offset>>9),mbox_off,
- rx_energy);
- */
-
- sample_threshold = initial_sample_offset+1024;
-
- if (sample_threshold > FRAME_LENGTH_SAMPLES)
- sample_threshold -= FRAME_LENGTH_SAMPLES;
-
- while (old_mbox+mbox_off <= (sample_threshold>>9)) {
- // if ((frame % 100) == 0)
- // printf("sleeping (mbox %d, mbox_off %d, initial_sample_offset>>9 %d\n",
- // old_mbox,mbox_off,(initial_sample_offset>>9));
- rt_sleep(nano2count(66666));
-
- if (old_mbox > ((unsigned int *)DAQ_MBOX)[0])
- mbox_off = 150;
-
- old_mbox = ((unsigned int *)DAQ_MBOX)[0];
- }
-
- // printf("While out ... mbox %d\n",((unsigned int *)DAQ_MBOX)[0]);
-
- }
-
- printf("rt_skip_cond %d, frames %d, pos_crc %d, neg_crc %d\n",
- rt_skip_cond,frame,pos_crc,neg_crc);
-
- printf("Dumping IS stats\n");
- print_is_stats();
- print_dd_stats();
-
- write_output("rxsig0.m","rxs", rxdata[0],76800,1,1);
- write_output("txsig0.m","txs", txdata[0],76800,1,1);
- write_output("rxDATA_F_comp_aggreg3.m","rxDAT_F_comp_aggreg3", rxDATA_F_comp_aggreg3,48*200,1,1);
- write_output("rxDATA_F_comp_aggreg2.m","rxDAT_F_comp_aggreg2", rxDATA_F_comp_aggreg2,48*200,1,1);
-
- printf("[DOT11][PHY] Leaving rx_thread\n");
- free(data_ind_rx);
- } else {
- printf("[DOT11][PHY] No netlink, exiting\n");
- }
-
- return(0);
-
-
- }
-
- //extern int dot11_netlink_init();
- //extern int dot11_rx_thread_init();
-
- //extern void *rx_thread(void *);
- extern void *tx_thread(void *);
-
-
- void dot11_init() {
-
-
-
- set_taus_seed(0);
-
- // Basic initializations
- init_fft(64,6,rev64);
- init_interleavers();
- ccodedot11_init();
- ccodedot11_init_inv();
- phy_generate_viterbi_tables();
-
- init_crc32();
-
- }
-
- int generate_tx_signal(int tx_offset) {
-
- TX_VECTOR_t tx_vector;
- int i;
-
- printf("Generating Signal @ %d (MBOX << 9 = %d)\n",
- tx_offset,DAQ_MBOX[0]<<9);
-
- if (data_ind == NULL) {
- data_ind = (uint8_t*)malloc(4095+2+1);
- data_ind[0] = 0;
- data_ind[1] = 0;
- }
-
-
- tx_vector.rate=1;
- tx_vector.sdu_length=tx_sdu_length;
- tx_vector.service=0;
-
- for (i=0; i>>>>>> .r3153
-
- // printf("Generating signal at %p\n",txdata[0]);
- return(phy_tx_start(&tx_vector,txdata[0],tx_offset,FRAME_LENGTH_SAMPLES,data_ind));
-
- }
-
- void signal_handler(int sig) {
- void *array[10];
- size_t size;
-
- oai_exit=1;
-
- // get void*'s for all entries on the stack
- size = backtrace(array, 10);
-
- // print out all the frames to stderr
- fprintf(stderr, "Error: signal %d:\n", sig);
- backtrace_symbols_fd(array, size, 2);
- exit(-1);
- }
-
- void exit_fun(const char* s) {
- void *array[10];
- size_t size;
- int fd;
-
- printf("Exiting: %s\n",s);
-
- oai_exit=1;
- rt_sleep(nano2count(FRAME_PERIOD));
-
- // cleanup
- stop_rt_timer();
-
- fd = 0;
- ioctl(openair_fd,openair_STOP,&fd);
- munmap((void*)mem_base, BIGPHYS_NUMPAGES*4096);
-
- exit (-1);
- }
-
- int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
-
- /* This is the main dot11 thread. */
- static void *dot11_thread(void *arg) {
- RT_TASK *task;
- int slot=0,hw_slot,last_slot, next_slot,frame=0;
- unsigned int msg1;
- unsigned int aa,slot_offset, slot_offset_F;
- int diff;
- int delay_cnt;
- RTIME time_in;
- int mbox_target=0,mbox_current=0;
- int i;
-
- task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
- mlockall(MCL_CURRENT | MCL_FUTURE);
-
-#ifdef HARD_RT
- <<<<<<< .mine
- rt_printk("Started dot11 thread (id %p)\n",task);
-
-
- rt_make_hard_real_time();
-#else
-
- printf("Started dot11 thread (id %p)\n",task);
-#endif
- =======
- rt_printk("Started dot11 thread (id %p)\n",task);
- >>>>>>> .r3153
-
- <<<<<<< .mine
-
- while (!oai_exit) {
- // rt_printk("eNB: slot %d\n",slot);
- =======
- >>>>>>> .r3153
-
- <<<<<<< .mine
- =======
- rt_make_hard_real_time();
-#else
- >>>>>>> .r3153
-
- printf("Started dot11 thread (id %p)\n",task);
-
-
- <<<<<<< .mine
-
- if (frame>5) {
- if ((frame%100)==0)
-#ifdef HARD_RT
- rt_printk("slot %d, hw_slot %d, next_slot %d (before): DAQ_MBOX %d\n", slot, hw_slot,next_slot,DAQ_MBOX[0]);
-
-#else
- printf("frame %d slot %d, hw_slot %d, next_slot %d (before): DAQ_MBOX %d\n", frame,slot, hw_slot,next_slot,DAQ_MBOX[0]);
-#endif
-
- if (fs4_test==0) {
- if ((next_slot == 0) && (generate_test_tx==1) && ((frame%100)==0)) {
- printf("Generating tx_signal in frame %d ...",frame);
- generate_test_tx_signal();
- printf("done\n");
-
- } else { // Check for normal TX packet
- /*for (i=0;i<3840;i++) {
- ((uint32_t *)txdata[0] + (3840*next_slot))[i] = 0x00010001;
- }*/
- }
- }
-
-
- }
-
-
-
- =======
-
- while (!oai_exit) {
- // rt_printk("eNB: slot %d\n",slot);
-
- hw_slot = (((((unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15;
- //this is the mbox counter where we should be
- mbox_target = ((((slot+1)%20)*15+1)>>1)%150;
- //this is the mbox counter where we are
- mbox_current = ((unsigned int *)DAQ_MBOX)[0];
-
- //this is the time we need to sleep in order to synchronize with the hw (in multiples of DAQ_PERIOD)
- if ((mbox_current>=135) && (mbox_target<15)) //handle the frame wrap-arround
- diff = 150-mbox_current+mbox_target;
- else if ((mbox_current<15) && (mbox_target>=135))
- diff = -150+mbox_target-mbox_current;
- else
- diff = mbox_target - mbox_current;
-
- if (diff < (-5)) {
- printf("[dot11_thread] Frame %d: missed slot, proceeding with next one (slot %d, hw_slot %d, diff %d)\n",frame, slot, hw_slot, diff);
- >>>>>>> .r3153
- slot++;
-
- if (slot==20)
- <<<<<<< .mine
- slot=0;
-
- //slot++;
- if ((slot%20)==0)
- frame++;
-
- =======
- slot=0;
- continue;
- >>>>>>> .r3153
- }
-
- if (diff>8)
- printf("[dot11_thread] eNB Frame %d: skipped slot, waiting for hw to catch up (slot %d, hw_slot %d, mbox_current %d, mbox_target %d, diff %d)\n",frame, slot, hw_slot, mbox_current, mbox_target, diff);
-
- delay_cnt = 0;
-
- while ((diff>0) && (!oai_exit)) {
- time_in = rt_get_time_ns();
- //rt_printk("eNB Frame %d delaycnt %d : hw_slot %d (%d), slot %d, (slot+1)*15=%d, diff %d, time %llu\n",frame,delay_cnt,hw_slot,((unsigned int *)DAQ_MBOX)[0],slot,(((slot+1)*15)>>1),diff,time_in);
- //rt_printk("Frame %d: slot %d, sleeping for %llu\n", frame, slot, diff*DAQ_PERIOD);
- rt_sleep(nano2count(diff*DAQ_PERIOD));
- hw_slot = (((((unsigned int *)DAQ_MBOX)[0]+1)%150)<<1)/15;
- //rt_printk("eNB Frame %d : hw_slot %d, time %llu\n",frame,hw_slot,rt_get_time_ns());
- delay_cnt++;
-
- if (delay_cnt == 10) {
- oai_exit = 1;
- printf("[dot11_thread]eNB Frame %d: HW stopped ... \n",frame);
- }
-
- mbox_current = ((unsigned int *)DAQ_MBOX)[0];
-
- if ((mbox_current>=135) && (mbox_target<15)) //handle the frame wrap-arround
- diff = 150-mbox_current+mbox_target;
- else
- diff = mbox_target - mbox_current;
- }
-
-
- last_slot = (slot)%LTE_SLOTS_PER_FRAME;
-
- if (last_slot <0)
- last_slot+=20;
-
- next_slot = (slot+3)%LTE_SLOTS_PER_FRAME;
-
- <<<<<<< .mine
-
-
- =======
-
- if (frame>5) {
- if ((frame%100)==0)
-#ifdef HARD_RT
- rt_printk("slot %d, hw_slot %d, next_slot %d (before): DAQ_MBOX %d\n", slot, hw_slot,next_slot,DAQ_MBOX[0]);
-
-#else
- printf("frame %d slot %d, hw_slot %d, next_slot %d (before): DAQ_MBOX %d\n", frame,slot, hw_slot,next_slot,DAQ_MBOX[0]);
-#endif
-
- if (fs4_test==0) {
- if ((next_slot == 0) && (generate_test_tx==1) && ((frame%100)==0)) {
- printf("Generating tx_signal in frame %d ...",frame);
- //generate_test_tx_signal();
- printf("done\n");
-
- } else { // Check for normal TX packet
- /*for (i=0;i<3840;i++) {
- ((uint32_t *)txdata[0] + (3840*next_slot))[i] = 0x00010001;
- }*/
- }
- }
-
-
- }
-
-
-
- slot++;
-
- if (slot==20)
- slot=0;
-
- //slot++;
- if ((slot%20)==0)
- frame++;
- }
-
- rt_printk("fun0: finished, ran %d times.\n",slot);
-
-#ifdef HARD_RT
- rt_make_soft_real_time();
-#endif
-
- // clean task
- rt_task_delete(task);
- rt_printk("Task deleted. returning\n");
- return 0;
- }
-
-
-
- >>>>>>> .r3153
- int main(int argc, char **argv) {
-
- RT_TASK *task;
- int i,j,aa;
-
- LTE_DL_FRAME_PARMS *frame_parms;
-
- u32 carrier_freq[4]= {1907600000,1907600000,1907600000,1907600000};
- u32 rf_mode_max[4] = {55231,55231,55231,55231};
- u32 rf_mode_med[4] = {39375,39375,39375,39375};
- u32 rf_mode_byp[4] = {22991,22991,22991,22991};
-
- u32 rf_local[4] = {8255000,8255000,8255000,8255000}; // UE zepto
- //{8254617, 8254617, 8254617, 8254617}; //eNB khalifa
- //{8255067,8254810,8257340,8257340}; // eNB PETRONAS
-
- u32 rf_vcocal[4] = {2340,2340,2340,2340};
- u32 rf_rxdc[4] = {32896,32896,32896,32896};
- <<<<<<< .mine
- u32 rxgain[4]= {20,20,20,20};
- =======
- >>>>>>> .r3153
-
- <<<<<<< .mine
-
- =======
-
-
- >>>>>>> .r3153
- u8 eNB_id=0,UE_id=0;
- u16 Nid_cell = 0;
- u8 cooperation_flag=0, transmission_mode=1, abstraction_flag=0;
- u8 beta_ACK=0,beta_RI=0,beta_CQI=2;
-
- int c;
- char do_forms=0;
- unsigned int fd,dot11_netlink_fd;
- unsigned int tcxo = 114;
-
- int amp;
-
- char rxg_fname[100];
- char rflo_fname[100];
- FILE *rxg_fd=NULL;
- FILE *rflo_fd=NULL;
-
- <<<<<<< .mine
- =======
-
- >>>>>>> .r3153
- const struct option long_options[] = {
- {"calib-rx", required_argument, NULL, 256},
- {"calib-rx-med", required_argument, NULL, 257},
- {"calib-rx-byp", required_argument, NULL, 258},
- {NULL, 0, NULL, 0}
- };
-
- mode = normal_txrx;
-
-
- while ((c = getopt_long (argc, argv, "C:ST:dF:t",long_options,NULL)) != -1) {
- switch (c) {
- case 'd':
- do_forms=1;
- break;
-
- case 't':
- generate_test_tx = 1;
- break;
-
- case 'C':
- carrier_freq[0] = atoi(optarg);
- carrier_freq[1] = atoi(optarg);
- carrier_freq[2] = atoi(optarg);
- carrier_freq[3] = atoi(optarg);
- break;
-
- case 'S':
- fs4_test=1;
- break;
-
- case 'T':
- tcxo=atoi(optarg);
- break;
-
- case 'F':
- sprintf(rxg_fname,"%srxg.lime",optarg);
- rxg_fd = fopen(rxg_fname,"r");
-
- if (rxg_fd) {
- printf("Loading RX Gain parameters from %s\n",rxg_fname);
- fscanf(rxg_fd,"%d %d %d %d",&rxg_max[0],&rxg_max[1],&rxg_max[2],&rxg_max[3]);
- fscanf(rxg_fd,"%d %d %d %d",&rxg_med[0],&rxg_med[1],&rxg_med[2],&rxg_med[3]);
- fscanf(rxg_fd,"%d %d %d %d",&rxg_byp[0],&rxg_byp[1],&rxg_byp[2],&rxg_byp[3]);
- } else
- printf("%s not found, running with defaults\n",rxg_fname);
-
- sprintf(rflo_fname,"%srflo.lime",optarg);
- rflo_fd = fopen(rflo_fname,"r");
-
- if (rflo_fd) {
- printf("Loading RF LO parameters from %s\n",rflo_fname);
- fscanf(rflo_fd,"%d %d %d %d",&rf_local[0],&rf_local[1],&rf_local[2],&rf_local[3]);
- } else
- printf("%s not found, running with defaults\n",rflo_fname);
-
- break;
-
- case 256:
- mode = rx_calib_ue;
- rx_input_level_dBm = atoi(optarg);
- printf("Running with UE calibration on (LNA max), input level %d dBm\n",rx_input_level_dBm);
- break;
-
- case 257:
- mode = rx_calib_ue_med;
- rx_input_level_dBm = atoi(optarg);
- printf("Running with UE calibration on (LNA med), input level %d dBm\n",rx_input_level_dBm);
- break;
-
- case 258:
- mode = rx_calib_ue_byp;
- rx_input_level_dBm = atoi(optarg);
- printf("Running with UE calibration on (LNA byp), input level %d dBm\n",rx_input_level_dBm);
- break;
-
- default:
- break;
- }
- }
-
-
- // to make a graceful exit when ctrl-c is pressed
- signal(SIGSEGV, signal_handler);
-
- // init the parameters
- frame_parms = (LTE_DL_FRAME_PARMS*) malloc(sizeof(LTE_DL_FRAME_PARMS));
- frame_parms->N_RB_DL = 25;
- frame_parms->N_RB_UL = 25;
- frame_parms->Ncp = 0;
- frame_parms->Ncp_UL = 0;
- frame_parms->Nid_cell = Nid_cell;
- frame_parms->nushift = 0;
- frame_parms->nb_antennas_tx = 1;
- frame_parms->nb_antennas_rx = 1;
- frame_parms->mode1_flag = 1; //default == SISO
- frame_parms->frame_type = 1;
-
- if (fs4_test==1)
- frame_parms->tdd_config = 255;
- else
- frame_parms->tdd_config = 3;
-
- frame_parms->tdd_config_S = 0;
- frame_parms->phich_config_common.phich_resource = oneSixth;
- frame_parms->phich_config_common.phich_duration = normal;
- frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0
-
- frame_parms->node_id = NODE;
-
- // for Express MIMO
- for (i=0; i<4; i++) {
- frame_parms->carrier_freq[i] = carrier_freq[i];
- frame_parms->carrier_freqtx[i] = carrier_freq[i];
-
- <<<<<<< .mine
- frame_parms->rxgain[i] = rxgain[i];
- =======
- frame_parms->rxgain[i] = rxgain[i];
-
- frame_parms->rflocal[i] = rf_local[i];
- frame_parms->rfvcolocal[i] = rf_vcocal[i];
- frame_parms->rxdc[i] = rf_rxdc[i];
- frame_parms->rfmode[i] = rf_mode_max[i];
-
- >>>>>>> .r3153
- }
-
- printf("Freq %d,%d,%d,%d, Gain %d,%d,%d,%d, RFmode %d, RXDC %d, RF_local %d, rf_vcocal %d\n",
- frame_parms->carrier_freq[0],frame_parms->carrier_freq[1],frame_parms->carrier_freq[2],frame_parms->carrier_freq[3],
- frame_parms->rxgain[0],frame_parms->rxgain[1],frame_parms->rxgain[2],frame_parms->rxgain[3],
- frame_parms->rfmode[0],frame_parms->rflocal[0],
- frame_parms->rxdc[0],frame_parms->rfvcolocal[0]);
-
-
- frame_parms->nb_prefix_samples0 = 40;
- frame_parms->nb_prefix_samples = 36;
- frame_parms->symbols_per_tti = 14;
- frame_parms->ofdm_symbol_size = 512;
-
- frame_parms->log2_symbol_size = 9;
- frame_parms->samples_per_tti = 7680;
- frame_parms->first_carrier_offset = frame_parms->ofdm_symbol_size - 150;
-
- openair_fd = setup_oai_hw(frame_parms);
- printf("Setting up buffers for Antenna port 0\n");
- setup_dot11_buffers(&(rxdata[0]),&(txdata[0]),0);
- printf("Setting up buffers for Antenna port 1\n");
- setup_dot11_buffers(&(rxdata[1]),&(txdata[1]),1);
-
- <<<<<<< .mine
- printf("Initializing dot11 DSP functions\n");
- dot11_init();
- dot11_netlink_fd = dot11_netlink_init();
- =======
- >>>>>>> .r3153
-
- <<<<<<< .mine
-
- for (j=0; j<76800; j+=4)
- for (aa=0; aanb_antennas_tx; aa++) {
- amp = 0x8000;
- // ((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+1] = 0;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+3] = amp-1;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+5] = 0;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+7] = amp;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j] = amp-1;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+2] = 0;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+4] = amp;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+6] = 0;
- }
-
- sleep(1);
- printf("Calling openair_GET_PCI_INTERFACE %x\n",openair_GET_PCI_INTERFACE);
- ioctl(openair_fd,openair_GET_PCI_INTERFACE,&pci_interface_ptr_kern);
-
- if (pci_interface_ptr_kern == 0) {
- printf("null pci_interface_ptr, exiting\n");
- exit(-1);
- }
-
- =======
-
- for (j=0; j<76800; j+=4)
- for (aa=0; aanb_antennas_tx; aa++) {
- amp = 0x8000;
- // ((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+1] = 0;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+3] = amp-1;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+5] = 0;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+7] = amp;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j] = amp-1;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+2] = 0;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+4] = amp;
- //((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+6] = 0;
- }
-
- sleep(1);
- printf("Calling openair_GET_PCI_INTERFACE %x\n",openair_GET_PCI_INTERFACE);
- ioctl(openair_fd,openair_GET_PCI_INTERFACE,&pci_interface_ptr_kern);
-
- if (pci_interface_ptr_kern == 0) {
- printf("null pci_interface_ptr, exiting\n");
- exit(-1);
- }
-
- exmimo_pci_interface = (exmimo_pci_interface_t*) (pci_interface_ptr_kern-bigphys_top+mem_base);
- printf("pci_interface_ptr_kern = %p, exmimo_pci_interface = %p\n", (void*) pci_interface_ptr_kern, exmimo_pci_interface);
- DAQ_MBOX = (unsigned int *)(0xc0000000+exmimo_pci_interface->rf.mbox-bigphys_top+mem_base);
-
- printf("Initializing dot11 DSP functions\n");
- dot11_init();
- dot11_netlink_fd = netlink_init();
- >>>>>>> .r3153
- exmimo_pci_interface = (exmimo_pci_interface_t*) (pci_interface_ptr_kern-bigphys_top+mem_base);
- printf("pci_interface_ptr_kern = %p, exmimo_pci_interface = %p\n", (void*) pci_interface_ptr_kern, exmimo_pci_interface);
- DAQ_MBOX = (unsigned int *)(0xc0000000+exmimo_pci_interface->rf.mbox-bigphys_top+mem_base);
-
- <<<<<<< .mine
- =======
- printf("dot11_netlink_fd %d\n",dot11_netlink_fd);
-
-
-
- >>>>>>> .r3153
- // make main thread LXRT soft realtime
- printf("Starting LXRT ...");
- task = rt_task_init_schmod(nam2num("MYTASK"), 9, 0, 0, SCHED_FIFO, 0xF);
- mlockall(MCL_CURRENT | MCL_FUTURE);
-
- // start realtime timer and scheduler
- //rt_set_oneshot_mode();
- rt_set_periodic_mode();
- start_rt_timer(0);
- <<<<<<< .mine
- printf(" done\n");
- =======
- printf(" done\n");
-
- >>>>>>> .r3153
- <<<<<<< .mine
- //now = rt_get_time() + 10*PERIOD;
- //rt_task_make_periodic(task, now, PERIOD);
-
- // initialize the instance cnt before starting the thread
- // instance_cnt_ptr_user = &instance_cnt;
-
-
-
- // signal the driver to set up for user-space operation
- // this will initialize the semaphore and the task pointers in the kernel
- // further we receive back the pointer to the shared instance counter which is used to signal if the thread is busy or not. This pointer needs to be mapped to user space.
- /*
- ioctl(openair_fd,openair_START_LXRT,&instance_cnt_ptr_kern);
- instance_cnt_ptr_user = (int*) (instance_cnt_ptr_kern -bigphys_top+mem_base);
- *instance_cnt_ptr_user = -1;
- printf("instance_cnt_ptr_kern %p, instance_cnt_ptr_user %p, *instance_cnt_ptr_user %d\n", (void*) instance_cnt_ptr_kern, (void*) instance_cnt_ptr_user,*instance_cnt_ptr_user);
- */
-
- =======
- >>>>>>> .r3153
-
- <<<<<<< .mine
-
-
- rt_sleep(nano2count(FRAME_PERIOD));
- =======
- >>>>>>> .r3153
- // this starts the DMA transfers
- <<<<<<< .mine
- =======
- ioctl(openair_fd,openair_START_TX_SIG,NULL);
- //ioctl(openair_fd,openair_GET_BUFFER,NULL);
- >>>>>>> .r3153
-
- <<<<<<< .mine
- ioctl(openair_fd,openair_START_TX_SIG,NULL);
-
-
- =======
- >>>>>>> .r3153
- rt_sleep(nano2count(10*FRAME_PERIOD));
-
-
- <<<<<<< .mine
- thread1 = rt_thread_create(dot11_thread, NULL, 100000000);
- =======
- //thread1 = rt_thread_create(dot11_thread, NULL, 100000000);
- >>>>>>> .r3153
-
-
- <<<<<<< .mine
- printf("thread created\n");
- =======
- thread1 = rt_thread_create(rx_thread, &dot11_netlink_fd, 10000000);
- >>>>>>> .r3153
-
- thread2 = rt_thread_create(tx_thread, &dot11_netlink_fd, 10000000);
-
- // wait for end of program
- printf("TYPE TO TERMINATE main thread\n");
- getchar();
-
- // stop threads
- rt_sleep(nano2count(FRAME_PERIOD));
-
- stop_rt_timer();
-
- fd = 0;
- ioctl(openair_fd,openair_STOP,&fd);
- munmap((void*)mem_base, BIGPHYS_NUMPAGES*4096);
-
- return 0;
- }
diff --git a/targets/RT/USER/eNB_usrp.gtkw b/targets/RT/USER/eNB_usrp.gtkw
index 8722fd14b0..b7810896d5 100644
--- a/targets/RT/USER/eNB_usrp.gtkw
+++ b/targets/RT/USER/eNB_usrp.gtkw
@@ -1,15 +1,15 @@
[*]
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
-[*] Mon Mar 14 12:40:13 2016
+[*] Thu Mar 17 23:50:10 2016
[*]
[dumpfile] "/tmp/openair_dump_eNB.vcd"
-[dumpfile_mtime] "Mon Mar 14 11:08:33 2016"
-[dumpfile_size] 54022345
-[savefile] "/home/abeille/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
-[timestart] 12592600000
+[dumpfile_mtime] "Thu Mar 17 23:49:36 2016"
+[dumpfile_size] 236045612
+[savefile] "/home/papillon/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
+[timestart] 10372000000
[size] 1535 876
[pos] -1 -1
-*-25.793451 12619679774 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+*-29.793451 12619679774 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[sst_width] 284
[signals_width] 238
[sst_expanded] 1
@@ -54,11 +54,11 @@ functions.phy_procedures_eNb_rx
variables.ue0_BO[63:0]
@420
variables.ue0_BSR[63:0]
+@421
+variables.ue0_timing_advance[63:0]
@28
functions.macxface_initiate_ra_proc
-@29
functions.macxface_terminate_ra_proc
-@28
functions.macxface_SR_indication
@420
variables.ue0_SR_ENERGY[63:0]
diff --git a/targets/RT/USER/ieee80211p-softmodem.c b/targets/RT/USER/ieee80211p-softmodem.c
deleted file mode 100644
index ffd630d40b..0000000000
--- a/targets/RT/USER/ieee80211p-softmodem.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) EURECOM / Thales Communications & Security
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- * The full GNU General Public License is included in this distribution in the
- * file called LICENSE.
- *
- * Contact Information:
- * Thales Communications & Security
- *
- *****************************************************************************/
-
-/******************************************************************************
- *
- * Includes
- *
- *****************************************************************************/
-
-#include
-#include
-#include
-#include "ieee80211p-netlinkapi.h"
-#include "phy/DOT11/defs.h"
-#include "PHY/TOOLS/defs.h"
-#include
-#include
-#include
-
-#include
-#include
-#include
-
-
-/******************************************************************************
- *
- * Definitions
- *
- *****************************************************************************/
-
-enum nl80211_band {
- NL80211_BAND_2GHZ,
- NL80211_BAND_5GHZ,
- NL80211_BAND_5_9GHZ,
- NL80211_BAND_0_8GHZ,
-};
-
-enum ieee80211_band {
- IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ,
- IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ,
- IEEE80211_BAND_5_9GHZ = NL80211_BAND_5_9GHZ,
- IEEE80211_BAND_0_8GHZ = NL80211_BAND_0_8GHZ,
-};
-
-struct ieee80211p_rx_status {
- short data_len; //frame data length in bytes
- char rssi; //received power in dBm
- char rate; //reveived data rate in units of 100 kbps
- enum ieee80211_band band;
- char flags; //RX flags
-}; /* struct ieee80211p_rx_status */
-
-extern uint32_t *txdata[2],*rxdata[2];
-//CHANNEL_STATUS_t dot11_state = IDLE;
-extern int oai_exit;
-
-extern unsigned int *DAQ_MBOX;
-
-extern int Ndbps[8];
-
-extern int32_t rxDATA_F_comp_aggreg2[48*1024];
-extern int32_t rxDATA_F_comp_aggreg3[48*1024];
-
-extern uint32_t rxgain[4];
-extern uint32_t rxg_max[4], rxg_med[4], rxg_byp[4];
-
-#define FRAME_LENGTH_SAMPLES 76800
-#define RX_THRES 60
-
-#define SLOT_DURATION_5MHz 105
-#define RX_THRES_dB 40
-
-int tx_sdu_active = 0;
-int tx_sdu_length = 0;
-char rxsdu[2000];
-
-void *tx_thread(void *arg)
-{
-
- int fd=*((int*)arg);
- RT_TASK *task;
- int ret;
- int i;
- char dummy_data[10];
-
-
- if (fd > 0) {
-
- ret = netlink_send(fd,NLCMD_INIT,10,&dummy_data[0]);
-
- printf("tx_thread starting, fd %d\n",fd);
-
- task = rt_task_init_schmod(nam2num("TASK1"), 0, 0, 0, SCHED_FIFO, 0xF);
- mlockall(MCL_CURRENT | MCL_FUTURE);
- // rt_make_hard_real_time();
-
- while (!oai_exit) {
-
- if (tx_sdu_active == 1)
- printf("tx_thread: waiting (MBOX %d)\n",((unsigned int*)DAQ_MBOX)[0]);
-
- while(((volatile int)tx_sdu_active) != 0) {
- rt_sleep(nano2count(66666));
- }
-
- printf("tx_thread: calling netlink\n");
- ret = netlink_recv(fd,rxsdu);
- tx_sdu_active = 1;
- tx_sdu_length = ret;
-
- /*
- if (ret > 0) {
-
- printf("received TX SDU: ");
- for (i=0;istats_text, stats_buffer);
- fl_clear_browser(form_stats_l2->stats_text);
- fl_add_browser_line(form_stats_l2->stats_text, stats_buffer);
-#endif
+ if (PHY_vars_eNB_g[0][0]->mac_enabled==1) {
+ len = dump_eNB_l2_stats (stats_buffer, 0);
+ //fl_set_object_label(form_stats_l2->stats_text, stats_buffer);
+ fl_clear_browser(form_stats_l2->stats_text);
+ fl_add_browser_line(form_stats_l2->stats_text, stats_buffer);
+ }
len = dump_eNB_stats (PHY_vars_eNB_g[0][0], stats_buffer, 0);
if (MAX_NUM_CCs>1)
@@ -941,7 +942,7 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
{
unsigned int aa,slot_offset, slot_offset_F;
- int dummy_tx_b[7680*4] __attribute__((aligned(16)));
+ int dummy_tx_b[7680*4] __attribute__((aligned(32)));
int i, tx_offset;
int slot_sizeF = (phy_vars_eNB->lte_frame_parms.ofdm_symbol_size)*
((phy_vars_eNB->lte_frame_parms.Ncp==1) ? 6 : 7);
@@ -2122,7 +2123,8 @@ static void get_options (int argc, char **argv)
LONG_OPTION_SCANCARRIER,
LONG_OPTION_MAXPOWER,
LONG_OPTION_DUMP_FRAME,
- LONG_OPTION_LOOPMEMORY
+ LONG_OPTION_LOOPMEMORY,
+ LONG_OPTION_PHYTEST
};
static const struct option long_options[] = {
@@ -2140,15 +2142,19 @@ static void get_options (int argc, char **argv)
{"ue-max-power", required_argument, NULL, LONG_OPTION_MAXPOWER},
{"ue-dump-frame", no_argument, NULL, LONG_OPTION_DUMP_FRAME},
{"loop-memory", required_argument, NULL, LONG_OPTION_LOOPMEMORY},
+ {"phy-test", no_argument, NULL, LONG_OPTION_PHYTEST},
{NULL, 0, NULL, 0}
};
while ((c = getopt_long (argc, argv, "A:a:C:dEK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:Tx:",long_options,NULL)) != -1) {
switch (c) {
case LONG_OPTION_RF_CONFIG_FILE:
- if (strlen(optarg)<=1024)
- strcpy(rf_config_file,optarg);
- else {
+ if ((strcmp("null", optarg) == 0) || (strcmp("NULL", optarg) == 0)) {
+ printf("no configuration filename is provided\n");
+ }
+ else if (strlen(optarg)<=1024){
+ strcpy(rf_config_file,optarg);
+ }else {
printf("Configuration filename is too long\n");
exit(-1);
}
@@ -2216,9 +2222,14 @@ static void get_options (int argc, char **argv)
AssertFatal(input_fd != NULL,"Please provide an input file\n");
break;
- case LONG_OPTION_DUMP_FRAME:
- mode = rx_dump_frame;
- break;
+ case LONG_OPTION_DUMP_FRAME:
+ mode = rx_dump_frame;
+ break;
+
+ case LONG_OPTION_PHYTEST:
+ phy_test = 1;
+ break;
+
case 'A':
timing_advance = atoi (optarg);
break;
@@ -2274,7 +2285,6 @@ static void get_options (int argc, char **argv)
case 't':
target_ul_mcs = atoi (optarg);
break;
-#ifdef OPENAIR2
case 'W':
opt_enabled=1;
@@ -2309,7 +2319,6 @@ static void get_options (int argc, char **argv)
}
break;
-#endif
case 'V':
ouput_vcd = 1;
@@ -2417,8 +2426,8 @@ static void get_options (int argc, char **argv)
case 'x':
transmission_mode = atoi(optarg);
- if (transmission_mode > 2) {
- printf("Transmission mode > 2 (%d) not supported for the moment\n",transmission_mode);
+ if (transmission_mode > 7) {
+ printf("Transmission mode %d not supported for the moment\n",transmission_mode);
exit(-1);
}
break;
@@ -2513,8 +2522,6 @@ static void get_options (int argc, char **argv)
}
-#ifdef OPENAIR2
-
init_all_otg(0);
g_otg->seed = 0;
init_seeds(g_otg->seed);
@@ -2532,7 +2539,6 @@ static void get_options (int argc, char **argv)
init_predef_traffic(enb_properties->properties[i]->num_otg_elements, 1);
-#endif
glog_level = enb_properties->properties[i]->glog_level;
glog_verbosity = enb_properties->properties[i]->glog_verbosity;
@@ -2594,9 +2600,7 @@ int main( int argc, char **argv )
int CC_id;
uint16_t Nid_cell = 0;
uint8_t cooperation_flag=0, abstraction_flag=0;
-#ifndef OPENAIR2
uint8_t beta_ACK=0,beta_RI=0,beta_CQI=2;
-#endif
#ifdef ENABLE_TCXO
unsigned int tcxo = 114;
@@ -2664,8 +2668,8 @@ int main( int argc, char **argv )
if (UE_flag==1) {
printf("configuring for UE\n");
- set_comp_log(HW, LOG_INFO, LOG_HIGH, 1);
- set_comp_log(PHY, LOG_INFO, LOG_HIGH, 1);
+ set_comp_log(HW, LOG_DEBUG, LOG_HIGH, 1);
+ set_comp_log(PHY, LOG_DEBUG, LOG_HIGH, 1);
set_comp_log(MAC, LOG_INFO, LOG_HIGH, 1);
set_comp_log(RLC, LOG_INFO, LOG_HIGH, 1);
set_comp_log(PDCP, LOG_INFO, LOG_HIGH, 1);
@@ -2681,15 +2685,9 @@ int main( int argc, char **argv )
printf("configuring for eNB\n");
set_comp_log(HW, hw_log_level, hw_log_verbosity, 1);
-#ifdef OPENAIR2
set_comp_log(PHY, phy_log_level, phy_log_verbosity, 1);
-
if (opt_enabled == 1 )
set_comp_log(OPT, opt_log_level, opt_log_verbosity, 1);
-
-#else
- set_comp_log(PHY, LOG_INFO, LOG_HIGH, 1);
-#endif
set_comp_log(MAC, mac_log_level, mac_log_verbosity, 1);
set_comp_log(RLC, rlc_log_level, rlc_log_verbosity, 1);
set_comp_log(PDCP, pdcp_log_level, pdcp_log_verbosity, 1);
@@ -2745,8 +2743,6 @@ int main( int argc, char **argv )
MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX);
#endif
-#ifdef OPENAIR2
-
if (opt_type != OPT_NONE) {
radio_type_t radio_type;
@@ -2759,7 +2755,6 @@ int main( int argc, char **argv )
LOG_E(OPT,"failed to run OPT \n");
}
-#endif
#ifdef PDCP_USE_NETLINK
netlink_init();
#if defined(PDCP_USE_NETLINK_QUEUES)
@@ -2829,21 +2824,24 @@ int main( int argc, char **argv )
PHY_vars_UE_g[0][CC_id] = init_lte_UE(frame_parms[CC_id], 0,abstraction_flag,transmission_mode);
UE[CC_id] = PHY_vars_UE_g[0][CC_id];
printf("PHY_vars_UE_g[0][%d] = %p\n",CC_id,UE[CC_id]);
-#ifndef OPENAIR2
- for (i=0; ipusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
- UE[CC_id]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI;
- UE[CC_id]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
+ if (phy_test==1)
+ UE[CC_id]->mac_enabled = 0;
+ else
+ UE[CC_id]->mac_enabled = 1;
- UE[CC_id]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = 0;
- UE[CC_id]->scheduling_request_config[i].sr_ConfigIndex = 7+(0%3);
- UE[CC_id]->scheduling_request_config[i].dsr_TransMax = sr_n4;
+ if (UE[CC_id]->mac_enabled == 0) {
+ for (i=0; ipusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
+ UE[CC_id]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI;
+ UE[CC_id]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
+
+ UE[CC_id]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = 0;
+ UE[CC_id]->scheduling_request_config[i].sr_ConfigIndex = 7+(0%3);
+ UE[CC_id]->scheduling_request_config[i].dsr_TransMax = sr_n4;
+ }
}
-#endif
-
-
UE[CC_id]->UE_scan = UE_scan;
UE[CC_id]->UE_scan_carrier = UE_scan_carrier;
UE[CC_id]->mode = mode;
@@ -2852,13 +2850,12 @@ int main( int argc, char **argv )
UE[CC_id]->lte_frame_parms.frame_type,
UE[CC_id]->X_u);
- UE[CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1234;
-#ifndef OPENAIR2
- UE[CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1235;
-#endif
+ if (UE[CC_id]->mac_enabled == 1)
+ UE[CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1234;
+ else
+ UE[CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1235;
#ifdef EXMIMO
-
for (i=0; i<4; i++) {
UE[CC_id]->rx_gain_max[i] = rxg_max[i];
UE[CC_id]->rx_gain_med[i] = rxg_med[i];
@@ -2892,9 +2889,7 @@ int main( int argc, char **argv )
UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id];
-
#ifdef EXMIMO
-
//N_TA_offset
if (UE[CC_id]->lte_frame_parms.frame_type == TDD) {
if (UE[CC_id]->lte_frame_parms.N_RB_DL == 100)
@@ -2906,7 +2901,6 @@ int main( int argc, char **argv )
} else {
UE[CC_id]->N_TA_offset = 0;
}
-
#else
//already taken care of in lte-softmodem
UE[CC_id]->N_TA_offset = 0;
@@ -2930,20 +2924,23 @@ int main( int argc, char **argv )
PHY_vars_eNB_g[0][CC_id] = init_lte_eNB(frame_parms[CC_id],0,frame_parms[CC_id]->Nid_cell,cooperation_flag,transmission_mode,abstraction_flag);
PHY_vars_eNB_g[0][CC_id]->CC_id = CC_id;
-#ifndef OPENAIR2
+ if (phy_test==1)
+ PHY_vars_eNB_g[0][CC_id]->mac_enabled = 0;
+ else
+ PHY_vars_eNB_g[0][CC_id]->mac_enabled = 1;
- for (i=0; ipusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
- PHY_vars_eNB_g[0][CC_id]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI;
- PHY_vars_eNB_g[0][CC_id]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
-
- PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = i;
- PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].sr_ConfigIndex = 7+(i%3);
- PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].dsr_TransMax = sr_n4;
+ if (PHY_vars_eNB_g[0][CC_id]->mac_enabled == 0) {
+ for (i=0; ipusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
+ PHY_vars_eNB_g[0][CC_id]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI;
+ PHY_vars_eNB_g[0][CC_id]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
+
+ PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = i;
+ PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].sr_ConfigIndex = 7+(i%3);
+ PHY_vars_eNB_g[0][CC_id]->scheduling_request_config[i].dsr_TransMax = sr_n4;
+ }
}
-#endif
-
compute_prach_seq(&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms.prach_config_common,
PHY_vars_eNB_g[0][CC_id]->lte_frame_parms.frame_type,
PHY_vars_eNB_g[0][CC_id]->X_u);
@@ -3152,16 +3149,12 @@ int main( int argc, char **argv )
mac_xface = malloc(sizeof(MAC_xface));
-#ifdef OPENAIR2
int eMBMS_active=0;
-
+
l2_init(frame_parms[0],eMBMS_active,(uecap_xer_in==1)?uecap_xer:NULL,
- 0,// cba_group_active
- 0); // HO flag
-
-
-#endif
-
+ 0,// cba_group_active
+ 0); // HO flag
+
mac_xface->macphy_exit = &exit_fun;
#if defined(ENABLE_ITTI)
@@ -3174,15 +3167,14 @@ int main( int argc, char **argv )
printf("ITTI tasks created\n");
#endif
-#ifdef OPENAIR2
- if (UE_flag==1) {
- printf("Filling UE band info\n");
- fill_ue_band_info();
- mac_xface->dl_phy_sync_success (0, 0, 0, 1);
- } else
- mac_xface->mrbch_phy_sync_failure (0, 0, 0);
-
-#endif
+ if (phy_test==0) {
+ if (UE_flag==1) {
+ printf("Filling UE band info\n");
+ fill_ue_band_info();
+ mac_xface->dl_phy_sync_success (0, 0, 0, 1);
+ } else
+ mac_xface->mrbch_phy_sync_failure (0, 0, 0);
+ }
/* #ifdef OPENAIR2
//if (otg_enabled) {
@@ -3578,9 +3570,6 @@ int main( int argc, char **argv )
}
}
-#ifdef OPENAIR2
- //cleanup_pdcp_thread();
-#endif
#ifdef RTAI
stop_rt_timer();
@@ -3615,13 +3604,9 @@ int main( int argc, char **argv )
if (ouput_vcd)
VCD_SIGNAL_DUMPER_CLOSE();
-#ifdef OPENAIR2
-
if (opt_enabled == 1)
terminate_opt();
-#endif
-
logClean();
return 0;
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index b5a09d6623..7e67db5bc5 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -504,6 +504,16 @@ static void *UE_thread_synch(void *arg)
if (abs(freq_offset) > 7500) {
LOG_I( PHY, "[initial_sync] No cell synchronization found, abandoning\n" );
+ FILE *fd;
+ if (fd = fopen("rxsig_frame0.dat","w")) {
+ fwrite((void*)&UE->lte_ue_common_vars.rxdata[0][0],
+ sizeof(int32_t),
+ 10*UE->lte_frame_parms.samples_per_tti,
+ fd);
+ LOG_I(PHY,"Dummping Frame ... bye bye \n");
+ fclose(fd);
+ exit(0);
+ }
mac_xface->macphy_exit("No cell synchronization found, abandoning");
return &UE_thread_synch_retval; // not reached
}
@@ -925,9 +935,7 @@ static void *UE_thread_rx(void *arg)
phy_procedures_UE_RX( UE, 0, 0, UE->mode, no_relay, NULL );
}
-#ifdef OPENAIR2
-
- if (i==0) {
+ if ((UE->mac_enabled==1) && (i==0)) {
ret = mac_xface->ue_scheduler(UE->Mod_id,
UE->frame_tx,
UE->slot_rx>>1,
@@ -950,7 +958,6 @@ static void *UE_thread_rx(void *arg)
}
}
-#endif
UE->slot_rx++;
if (UE->slot_rx == 20) {
diff --git a/targets/RT/USER/ue_usrp.gtkw b/targets/RT/USER/ue_usrp.gtkw
new file mode 100644
index 0000000000..81940b5643
--- /dev/null
+++ b/targets/RT/USER/ue_usrp.gtkw
@@ -0,0 +1,53 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Sun Mar 20 18:27:06 2016
+[*]
+[dumpfile] "/tmp/openair_dump_UE.vcd"
+[dumpfile_mtime] "Sun Mar 20 18:14:17 2016"
+[dumpfile_size] 92262400
+[savefile] "/home/papillon/openairinterface5g/targets/RT/USER/ue_usrp.gtkw"
+[timestart] 30032830000
+[size] 1215 640
+[pos] 105 102
+*-22.292629 30041590000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[sst_width] 224
+[signals_width] 262
+[sst_expanded] 1
+[sst_vpaned_height] 155
+@24
+variables.hw_subframe[63:0]
+@28
+functions.trx_read
+functions.trx_write
+@24
+variables.subframe_number_RX_UE[63:0]
+variables.subframe_number_TX_UE[63:0]
+@28
+functions.ue_thread_rx
+functions.ue_thread_tx
+@420
+variables.ue_inst_cnt_rx[63:0]
+variables.ue_inst_cnt_tx[63:0]
+@28
+functions.phy_procedures_ue_rx
+functions.phy_procedures_ue_tx
+@24
+variables.frame_number_RX_UE[63:0]
+variables.frame_number_TX_UE[63:0]
+@28
+functions.ue_slot_fep
+functions.lte_ue_measurement_procedures
+functions.ue_rrc_measurements
+functions.ue_gain_control
+functions.ue_adjust_synch
+functions.lte_ue_pbch_procedures
+functions.lte_ue_pdcch_procedures
+functions.rx_pdcch
+functions.dci_decoding
+functions.phy_ue_generate_prach
+functions.phy_ue_ulsch_encoding
+functions.phy_ue_ulsch_modulation
+functions.phy_ue_ulsch_scrambling
+functions.phy_ue_config_sib2
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/targets/SIMU/USER/channel_sim.c b/targets/SIMU/USER/channel_sim.c
index bba32a5a29..e26129bca6 100644
--- a/targets/SIMU/USER/channel_sim.c
+++ b/targets/SIMU/USER/channel_sim.c
@@ -169,8 +169,6 @@ void do_DL_sig(double **r_re0,double **r_im0,
int32_t **dl_channel_est = PHY_vars_UE_g[UE_id][CC_id]->lte_ue_common_vars.dl_ch_estimates[0];
// double scale = pow(10.0,(enb_data[att_eNB_id]->tx_power_dBm + eNB2UE[att_eNB_id][UE_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id]->rx_total_gain_dB)/20.0);
double scale = pow(10.0,(frame_parms->pdsch_config_common.referenceSignalPower+eNB2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB)/20.0);
- //this factor is not really needed (it was actually wrong in the non abstraction mode)
- //scale = scale * sqrt(512.0/300.0); //TODO: make this variable for all BWs
LOG_D(OCM,"scale =%lf (%d dB)\n",scale,(int) (20*log10(scale)));
// freq_channel(desc1,frame_parms->N_RB_DL,nb_samples);
//write_output("channel.m","ch",desc1->ch[0],desc1->channel_length,1,8);
@@ -204,12 +202,13 @@ void do_DL_sig(double **r_re0,double **r_im0,
// calculate the SNR for the attached eNB (this assumes eNB always uses PMI stored in eNB_UE_stats; to be improved)
init_snr(eNB2UE[att_eNB_id][UE_id][CC_id], enb_data[att_eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB, &PHY_vars_UE_g[UE_id][CC_id]->N0,
- PHY_vars_UE_g[UE_id][CC_id]->transmission_mode[att_eNB_id], PHY_vars_eNB_g[att_eNB_id][CC_id]->eNB_UE_stats[UE_id].DL_pmi_single,PHY_vars_eNB_g[att_eNB_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off);
+ PHY_vars_UE_g[UE_id][CC_id]->transmission_mode[att_eNB_id], PHY_vars_eNB_g[att_eNB_id][CC_id]->eNB_UE_stats[UE_id].DL_pmi_single,
+ PHY_vars_eNB_g[att_eNB_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off,PHY_vars_eNB_g[att_eNB_id][CC_id]->lte_frame_parms.N_RB_DL);
// calculate sinr here
for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) {
if (att_eNB_id != eNB_id) {
- calculate_sinr(eNB2UE[eNB_id][UE_id][CC_id], enb_data[eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB);
+ calculate_sinr(eNB2UE[eNB_id][UE_id][CC_id], enb_data[eNB_id], ue_data[UE_id], PHY_vars_UE_g[UE_id][CC_id]->sinr_dB,PHY_vars_eNB_g[att_eNB_id][CC_id]->lte_frame_parms.N_RB_DL);
}
}
} // hold channel
@@ -220,18 +219,6 @@ void do_DL_sig(double **r_re0,double **r_im0,
Call do_OFDM_mod from phy_procedures_eNB_TX function
*/
-
-
- //for (UE_id=0;UE_idsamples_per_tti>>1);i++) {
- for (aa=0;aasamples_per_tti>>1)*sizeof(double));
diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c
index c1d4d64ef6..9e4880906d 100644
--- a/targets/SIMU/USER/oaisim.c
+++ b/targets/SIMU/USER/oaisim.c
@@ -75,9 +75,9 @@
#include "SCHED/defs.h"
#include "SCHED/vars.h"
-#ifdef XFORMS
+//#ifdef XFORMS
#include "PHY/TOOLS/lte_phy_scope.h"
-#endif
+//#endif
#ifdef SMBV
// Rohde&Schwarz SMBV100A vector signal generator
@@ -163,9 +163,10 @@ extern uint16_t Nid_cell;
extern LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs];
-#ifdef XFORMS
+//#ifdef XFORMS
int otg_enabled;
-#endif
+int xforms=0;
+//#endif
time_stats_t oaisim_stats;
time_stats_t oaisim_stats_f;
@@ -446,17 +447,18 @@ l2l1_task (void *args_p)
char fname[64], vname[64];
int sf;
protocol_ctxt_t ctxt;
-#ifdef XFORMS
+ //#ifdef XFORMS
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
// at eNB 0, an UL scope for every UE
- FD_lte_phy_scope_ue *form_ue[NUMBER_OF_UE_MAX];
+ FD_lte_phy_scope_ue *form_ue[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
FD_lte_phy_scope_enb *form_enb[NUMBER_OF_UE_MAX];
char title[255];
char xname[32] = "oaisim";
int xargc = 1;
char *xargv[1];
-#endif
+ //#endif
+#define PRINT_STATS
#ifdef PRINT_STATS
int len;
FILE *UE_stats[NUMBER_OF_UE_MAX];
@@ -485,31 +487,34 @@ l2l1_task (void *args_p)
PHY_vars_eNB_g[eNB_inst][CC_id]->proc[9].frame_tx = 1;
}
-#ifdef XFORMS
- xargv[0] = xname;
- fl_initialize (&xargc, xargv, NULL, 0, 0);
- eNB_inst = 0;
+ //#ifdef XFORMS
+ if (xforms==1) {
+ xargv[0] = xname;
+ fl_initialize (&xargc, xargv, NULL, 0, 0);
+ eNB_inst = 0;
+
+ for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) {
+ for (CC_id=0;CC_idlte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
- for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) {
- // DL scope at UEs
- form_ue[UE_inst] = create_lte_phy_scope_ue();
- sprintf (title, "LTE DL SCOPE eNB %d to UE %d", eNB_inst, UE_inst);
- fl_show_form (form_ue[UE_inst]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
-
- // UL scope at eNB 0
- form_enb[UE_inst] = create_lte_phy_scope_enb();
- sprintf (title, "LTE UL SCOPE UE %d to eNB %d", UE_inst, eNB_inst);
- fl_show_form (form_enb[UE_inst]->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
-
- if (openair_daq_vars.use_ia_receiver == 1) {
- fl_set_button(form_ue[UE_inst]->button_0,1);
- fl_set_object_label(form_ue[UE_inst]->button_0, "IA Receiver ON");
- fl_set_object_color(form_ue[UE_inst]->button_0, FL_GREEN, FL_GREEN);
+ if (openair_daq_vars.use_ia_receiver == 1) {
+ fl_set_button(form_ue[CC_id][UE_inst]->button_0,1);
+ fl_set_object_label(form_ue[CC_id][UE_inst]->button_0, "IA Receiver ON");
+ fl_set_object_color(form_ue[CC_id][UE_inst]->button_0, FL_GREEN, FL_GREEN);
+ }
+
+ }
+ // UL scope at eNB 0
+ form_enb[UE_inst] = create_lte_phy_scope_enb();
+ sprintf (title, "LTE UL SCOPE UE %d to eNB %d", UE_inst, eNB_inst);
+ fl_show_form (form_enb[UE_inst]->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
+
}
-
}
-
-#endif
+ //#endif
#ifdef PRINT_STATS
@@ -1176,23 +1181,26 @@ l2l1_task (void *args_p)
1, 1);
}
-#ifdef XFORMS
+ //#ifdef XFORMS
+ if (xforms==1) {
eNB_inst = 0;
for (UE_inst = 0; UE_inst < NB_UE_INST; UE_inst++) {
- phy_scope_UE(form_ue[UE_inst],
- PHY_vars_UE_g[UE_inst][0],
- eNB_inst,
- UE_inst,
- 7);
+ for (CC_id=0;CC_idmac_enabled=0;
+ else
+ PHY_vars_eNB_g[eNB_id][CC_id]->mac_enabled=1;
+ }
+
// init_ue_status();
for (UE_id=0; UE_idtx_power_max_dBm=23;
- PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB=160;
+ PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB=100;
// update UE_mode for each eNB_id not just 0
if (abstraction_flag == 0)
@@ -992,6 +1018,11 @@ void init_openair1(void)
PHY_vars_UE_g[UE_id][CC_id]->UE_mode[0] = PRACH;
}
+ if (phy_test==1)
+ PHY_vars_UE_g[UE_id][CC_id]->mac_enabled=0;
+ else
+ PHY_vars_UE_g[UE_id][CC_id]->mac_enabled=1;
+
PHY_vars_UE_g[UE_id][CC_id]->lte_ue_pdcch_vars[0]->crnti = 0x1235 + UE_id;
PHY_vars_UE_g[UE_id][CC_id]->current_dlsch_cqi[0] = 10;
@@ -1260,8 +1291,7 @@ void update_ocm()
//pathloss: -132.24 dBm/15kHz RE + target SNR - eNB TX power per RE
if (eNB_id == (UE_id % NB_eNB_INST)) {
eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -132.24 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower;
- UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -132.24 + snr_dB -
- PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower; //+20 to offset the difference in tx power of the UE wrt eNB
+ UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -132.24 + snr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower;
} else {
eNB2UE[eNB_id][UE_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower;
UE2eNB[UE_id][eNB_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.referenceSignalPower;
@@ -1280,6 +1310,7 @@ void update_ocm()
#ifdef OPENAIR2
void update_otg_eNB(module_id_t enb_module_idP, unsigned int ctime)
{
+
#if defined(USER_MODE) && defined(OAI_EMU)
int rrc_state=0;
diff --git a/targets/SIMU/USER/sinr_sim.c b/targets/SIMU/USER/sinr_sim.c
index 317fe53c60..9ac1371d11 100644
--- a/targets/SIMU/USER/sinr_sim.c
+++ b/targets/SIMU/USER/sinr_sim.c
@@ -244,20 +244,19 @@ void calc_path_loss(node_desc_t* enb_data, node_desc_t* ue_data, channel_desc_t
-void init_snr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double* sinr_dB, double* N0, uint8_t transmission_mode, uint16_t q, uint8_t dl_power_off)
+void init_snr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double* sinr_dB, double* N0, uint8_t transmission_mode, uint16_t q, uint8_t dl_power_off, uint16_t nb_rb)
{
- uint16_t nb_rb = 25; //No. of resource blocks
double thermal_noise,abs_channel,channelx, channely,channelx_i, channely_i ;
int count;
int aarx,aatx;
uint8_t qq;
- /* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth */
- thermal_noise = -174 + 10*log10(eNB2UE->sampling_rate*1e6); //value in dBm
+ /* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth*/
+ thermal_noise = -174 + 10*log10(15000); //per RE; value in dBm
//for (aarx=0; aarxnb_rx; aarx++)
- *N0 = thermal_noise + ue_data->rx_noise_level;//? all the element have the same noise level?????
+ *N0 = thermal_noise + ue_data->rx_noise_level;
LOG_D(OCM,"Path loss %lf, noise (N0) %lf, signal %lf, snr %lf\n",
eNB2UE->path_loss_dB,
@@ -549,15 +548,14 @@ void init_snr_up(channel_desc_t* UE2eNB, node_desc_t *enb_data, node_desc_t *ue_
#endif
-void calculate_sinr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double *sinr_dB)
+void calculate_sinr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double *sinr_dB, uint16_t nb_rb)
{
double sir, thermal_noise;
- short nb_rb = 25; //No. of resource blocks
short count;
/* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth */
- thermal_noise = -174 + 10*log10(eNB2UE->sampling_rate*1e6); //value in dBm
+ thermal_noise = -174 + 10*log10(15000); //per RE, value in dBm
for (count = 0; count < 12 * nb_rb; count++) {
sir = enb_data->tx_power_dBm