diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8947453454..d35de04b12 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -7,6 +7,7 @@ job1:
- echo $NFS_SHARE_DIR
- echo $EXTERNAL_SHARE_DIR
- echo $SHELL
+ - echo $OAI_TEST_CASE_GROUP
- git rev-parse --abbrev-ref HEAD
- git_repo=`git config --get remote.origin.url`
- git_head=`git rev-parse HEAD`
@@ -31,3 +32,8 @@ job1:
- 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
- sshpass -p "$OAI_PASS" rsync -az -e "ssh -o StrictHostKeyChecking=no " --rsync-path="mkdir -p $EXTERNAL_SHARE_DIR && rsync" $OPENAIR_DIR/cmake_targets/autotests/log $OAI_USER@localhost:$EXTERNAL_SHARE_DIR
- cat $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml
+ - exce_log=`egrep -i 'warning|error|critical|exception' $NFS_TEST_RESULTS_DIR/log/python_autotest.log `
+ - if [ -n "$exce_log" ]; then echo -e "\e[31mThere are errors in $NFS_TEST_RESULTS_DIR/log/python_autotest.log. Please check the logs\e[0m" ; fi
+ - exce_log=`egrep -i 'warning|error|critical|exception' $NFS_TEST_RESULTS_DIR/log/python_autotest_cleanup.log `
+ - if [ -n "$exce_log" ]; then echo -e "\e[31mThere are errors in $NFS_TEST_RESULTS_DIR/log/python_autotest_cleanup.log. Please check the logs\e[0m" ; fi
+
diff --git a/README.txt b/README.txt
index 2ff2e02190..b549f8122f 100644
--- a/README.txt
+++ b/README.txt
@@ -1,19 +1,27 @@
-OpenAirInterface is under GNU GPLv3 license. The full GNU General Public License is included in this distribution in the file called "COPYING".
-
-The OpenAirInterface (OAI) software is composed of six different parts:
-
-openair1: 3GPP LTE Rel-8 PHY layer + PHY RF simulation
-
-openair2: 3GPP LTE Rel-9 RLC/MAC/PDCP/RRC implementations, eNB application, X2AP. Note that for RLC, the following versions are userL UM_v9.3.0, TM_v9.3.0, and AM_v9.3.0. For PDCP, PDCP_v10.1.0 is used. For RRC, only LITE is used.
-
-openair3: 3GPP LTE Rel9 and 10 MME/NAS, S+P-GW, HSS, S1AP (ENB and MME).
-
-common: some common OAI utilities, other tools can be found at openair2/UTILS
-
-targets: scripts to compile and lauch different system targets (simulation, emulation and real-time platforms, user-space tools for these platforms (tbd))
-
-see README files in these subdirectories for more information
-
-see also https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/WebHome
+OpenAirInterface is under OpenAirInterface Software Alliance license.
+├── http://www.openairinterface.org/?page_id=101
+├── http://www.openairinterface.org/?page_id=698
+The OpenAirInterface (OAI) software is composed of the following parts:
+openairinterface5g
+├── cmake_targets: build utilities to compile (simulation, emulation and real-time platforms), and generated build files
+├── common : some common OAI utilities, other tools can be found at openair2/UTILS
+├── COPYING
+├── maketags : script to generate emacs tags
+├── openair1 : 3GPP LTE Rel-10 PHY layer + PHY RF simulation and a subset of Rel 12 Features.
+├── openair2 :3GPP LTE Rel-10 RLC/MAC/PDCP/RRC/X2AP implementation.
+ ├── LAYER2/RLC/ with the following subdirectories: UM_v9.3.0, TM_v9.3.0, and AM_v9.3.0.
+ ├── LAYER2/PDCP/PDCP_v10.1.0.
+ ├── RRC/LITE
+ ├── PHY_INTERFACE
+ ├── X2AP
+ ├── ENB_APP
+├── openair3: 3GPP LTE Rel10 for S1AP, NAS GTPV1-U for both ENB and UE.
+ ├── GTPV1-U
+ ├── NAS
+ ├── S1AP
+ ├── SCTP
+ ├── SECU
+ ├── UDP
+└── targets: top level wrapper for unitary simulation for PHY channels, system-level emulation (eNB-UE with and without S1), and realtime eNB and UE and RRH GW.
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 0b2a9c0b93..c23b0d1a91 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -238,6 +238,7 @@ 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(T_TRACER False "Activate the T tracer, a debugging/monitoring framework" )
add_boolean_option(DEBUG_CONSOLE False "makes debugging easier, disables stdout/stderr buffering")
@@ -260,7 +261,8 @@ endif (${ENABLE_ITTI})
add_boolean_option(RTAI False "Use RTAI")
if (${RTAI})
- set(LOWLATENCY False)
+ set(DEADLINE_SCHEDULER False)
+ set(CPU_AFFINITY False)
add_definitions("-DENABLE_RTAI_CLOCK")
add_definitions("-DCONFIG_RTAI_LXRT_INLINE")
include_directories ("/usr/realtime/include")
@@ -564,7 +566,6 @@ elseif (${RF_BOARD} STREQUAL "OAI_BLADERF")
LINK_DIRECTORIES("/usr/lib/x86_64-linux-gnu")
set(option_HW_lib "bladeRF -rdynamic -ldl")
- #set(LOWLATENCY False)
elseif (${RF_BOARD} STREQUAL "OAI_LMSSDR")
include_directories("${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB")
@@ -577,7 +578,6 @@ elseif (${RF_BOARD} STREQUAL "OAI_LMSSDR")
LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/lms7002m")
LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/Si5351C")
set(HW_SOURCE ${HW_SOURCE} ${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp)
- set(LOWLATENCY False)
set(option_HW_lib "-lLMS_SDR -lLMS7002M -lSi5351C -rdynamic -ldl")
elseif (${RF_BOARD} STREQUAL "CPRIGW")
@@ -606,7 +606,8 @@ endif (${TRANSP_PRO} STREQUAL "ETHERNET")
include_directories ("${OPENAIR_TARGETS}/ARCH/COMMON")
-Message("LOWLATENCY flag is ${LOWLATENCY}")
+Message("DEADLINE_SCHEDULER flag is ${DEADLINE_SCHEDULER}")
+Message("CPU_Affinity flag is ${CPU_AFFINITY}")
##############################################################
# ???!!! TO BE DOCUMENTED OPTIONS !!!???
@@ -619,7 +620,8 @@ add_boolean_option(RRC_DEFAULT_RAB_IS_AM False "set the RLC mode to AM for the d
add_boolean_option(OAI_NW_DRIVER_TYPE_ETHERNET False "????")
add_boolean_option(DISABLE_USE_NAS False "???")
-add_boolean_option(LOWLATENCY True "Use the Linux scheduler SCHED_DEADLINE: kernel >= 3.14")
+add_boolean_option(DEADLINE_SCHEDULER True "Use the Linux scheduler SCHED_DEADLINE: kernel >= 3.14")
+add_boolean_option(CPU_AFFINITY False "Enable CPU Affinity of threads (only valid without deadline scheduler). It is enabled only with >2 CPUs")
add_boolean_option(NAS_ADDRESS_FIX False "specific to oaisim: for nasmesh driver")
add_boolean_option(NAS_NETLINK False "???? Must be True to compile nasmesh driver without rtai")
add_boolean_option(OAISIM False "specific to oaisim")
@@ -996,6 +998,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
@@ -1098,8 +1101,8 @@ set (ENB_APP_SRC
add_library(L2
${L2_SRC}
${MAC_SRC}
- ${ENB_APP_SRC}
- ${OPENAIR2_DIR}/RRC/L2_INTERFACE/openair_rrc_L2_interface.c)
+ ${ENB_APP_SRC})
+# ${OPENAIR2_DIR}/RRC/L2_INTERFACE/openair_rrc_L2_interface.c)
# L3 Libs
##########################
@@ -1557,6 +1560,36 @@ endif (${XFORMS})
set(CMAKE_MODULE_PATH "${OPENAIR_DIR}/cmake_targets/tools/MODULES" "${CMAKE_MODULE_PATH}")
+#include T directory even if the T is off because T macros are in the code
+#no matter what
+include_directories("${OPENAIR_DIR}/common/utils/T")
+
+if (${T_TRACER})
+ set(T_SOURCE
+ ${OPENAIR_DIR}/common/utils/T/T.c
+ ${OPENAIR_DIR}/common/utils/T/local_tracer.c)
+ set (T_LIB "rt")
+endif (${T_TRACER})
+
+#Some files in the T directory are generated.
+#This rule and the following deal with it.
+add_custom_command (
+ OUTPUT ${OPENAIR_DIR}/common/utils/T/T_IDs.h
+ COMMAND make
+ WORKING_DIRECTORY ${OPENAIR_DIR}/common/utils/T
+ DEPENDS ${OPENAIR_DIR}/common/utils/T/T_messages.txt
+ )
+
+#This rule is specifically needed to generate T files
+#before anything else in a project that uses the T.
+#See below, there are some 'add_dependencies' showing that.
+#Basically we create a custom target and we make other
+#targets depend on it. That forces cmake to generate
+#T files before anything else.
+add_custom_target (
+ generate_T
+ DEPENDS ${OPENAIR_DIR}/common/utils/T/T_IDs.h
+)
# Hack on a test of asn1c version (already dirty)
add_definitions(-DASN1_MINIMUM_VERSION=924)
@@ -1589,6 +1622,7 @@ add_executable(lte-softmodem
${RTAI_SOURCE}
${XFORMS_SOURCE}
${XFORMS_SOURCE_SOFTMODEM}
+ ${T_SOURCE}
)
target_link_libraries (lte-softmodem
@@ -1601,6 +1635,7 @@ target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES})
target_link_libraries (lte-softmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_HW_lib} ${option_TP_lib} ${XFORMS_LIBRARIES} )
target_link_libraries (lte-softmodem ${LIBBOOST_LIBRARIES})
target_link_libraries (lte-softmodem ${LIB_LMS_LIBRARIES})
+target_link_libraries (lte-softmodem ${T_LIB})
# lte-softmodem-nos1 is both eNB and UE implementation
###################################################
@@ -1625,6 +1660,7 @@ add_executable(lte-softmodem-nos1
${RTAI_SOURCE}
${XFORMS_SOURCE}
${XFORMS_SOURCE_SOFTMODEM}
+ ${T_SOURCE}
)
target_link_libraries (lte-softmodem-nos1
-Wl,--start-group
@@ -1635,6 +1671,7 @@ target_link_libraries (lte-softmodem-nos1 ${LIBXML2_LIBRARIES})
target_link_libraries (lte-softmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${option_HW_lib} ${option_TP_lib} ${XFORMS_LIBRARIES} )
target_link_libraries (lte-softmodem-nos1 ${LIBBOOST_LIBRARIES})
target_link_libraries (lte-softmodem-nos1 ${LIB_LMS_LIBRARIES})
+target_link_libraries (lte-softmodem ${T_LIB})
# rrh
################################
@@ -1647,6 +1684,7 @@ add_executable(rrh_gw
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
${HW_SOURCE}
${TRANSPORT_SOURCE}
+ ${T_SOURCE}
)
target_include_directories(rrh_gw PRIVATE ${OPENAIR_DIR}/common/utils/itti)
target_link_libraries(rrh_gw
@@ -1656,6 +1694,7 @@ target_link_libraries(rrh_gw
target_link_libraries (rrh_gw rt pthread m )
target_link_libraries (rrh_gw ${option_HW_lib} ${option_TP_lib} ${LIBBOOST_LIBRARIES} )
target_link_libraries (rrh_gw ${LIB_LMS_LIBRARIES})
+target_link_libraries (rrh_gw ${T_LIB})
Message("-- option_HW_lib=${option_HW_lib}")
Message("-- HW_SOURCE=${HW_SOURCE}")
@@ -1721,6 +1760,7 @@ add_executable(oaisim
${HW_SOURCE}
${TRANSPORT_SOURCE}
${XFORMS_SOURCE}
+ ${T_SOURCE}
)
@@ -1735,6 +1775,7 @@ target_link_libraries (oaisim pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LI
${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES})
#Force link with forms, regardless XFORMS option
target_link_libraries (oaisim forms)
+target_link_libraries (oaisim ${T_LIB})
@@ -1760,6 +1801,7 @@ add_executable(oaisim_nos1
${HW_SOURCE}
${TRANSPORT_SOURCE}
${XFORMS_SOURCE}
+ ${T_SOURCE}
)
target_include_directories(oaisim_nos1 PUBLIC ${OPENAIR_TARGETS}/SIMU/USER)
target_link_libraries (oaisim_nos1
@@ -1772,7 +1814,7 @@ target_link_libraries (oaisim_nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYP
${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES})
#Force link with forms, regardless XFORMS option
target_link_libraries (oaisim_nos1 forms)
-
+target_link_libraries (oaisim_nos1 ${T_LIB})
# Unitary tests for each piece of L1: example, mbmssim is MBMS L1 simulator
#####################################
@@ -1782,10 +1824,11 @@ foreach(myExe dlsim ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syn
${OPENAIR_BIN_DIR}/messages_xml.h
${OPENAIR1_DIR}/SIMULATION/LTE_PHY/${myExe}.c
${XFORMS_SOURCE}
+ ${T_SOURCE}
)
target_link_libraries (${myExe}
-Wl,--start-group SIMU UTIL SCHED_LIB PHY LFDS ${ITTI_LIB} -Wl,--end-group
- pthread m rt ${CONFIG_LIBRARIES} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES}
+ pthread m rt ${CONFIG_LIBRARIES} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${T_LIB}
)
endforeach(myExe)
@@ -1850,8 +1893,23 @@ endforeach(myExe)
#../targets/TEST/PDCP/test_pdcp.c
#../targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c
-
-
+#ensure that the T header files are generated before targets depending on them
+if (${T_TRACER})
+ add_dependencies(lte-softmodem generate_T)
+ add_dependencies(lte-softmodem-nos1 generate_T)
+ add_dependencies(rrh_gw generate_T)
+ add_dependencies(oaisim generate_T)
+ add_dependencies(oaisim_nos1 generate_T)
+ add_dependencies(dlsim generate_T)
+ add_dependencies(ulsim generate_T)
+ add_dependencies(pbchsim generate_T)
+ add_dependencies(scansim generate_T)
+ add_dependencies(mbmssim generate_T)
+ add_dependencies(pdcchsim generate_T)
+ add_dependencies(pucchsim generate_T)
+ add_dependencies(prachsim generate_T)
+ add_dependencies(syncsim generate_T)
+endif (${T_TRACER})
##################################################
# Generated specific cases is not regular code
@@ -2013,38 +2071,4 @@ endforeach(file)
ADD_CUSTOM_TARGET(oarf
DEPENDS ${OCT_FILES}
)
-
-#CMAKE INSTALL and CPACK
-#INSTALL(PROGRAMS lte-softmodem ${OPENAIR_DIR}/targets DESTINATION bin)
-#INSTALL(PROGRAMS oaisim ${OPENAIR_DIR}/targets DESTINATION bin)
-
-
-#SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenAirInterface")
-#SET(CPACK_PACKAGE_VENDOR "Eurecom")
-#SET(CPACK_PACKAGE_DESCRIPTION_FILE "${OPENAIR_DIR}/README.txt")
-#SET(CPACK_RESOURCE_FILE_LICENSE "${OPENAIR_DIR}/COPYING")
-#SET(CPACK_PACKAGE_VERSION_MAJOR "1")
-#SET(CPACK_PACKAGE_VERSION_MINOR "1")
-#SET(CPACK_PACKAGE_VERSION_PATCH "1")
-
-#SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}")
-#SET(CPACK_STRIP_FILES "${OPENAIR_TARGETS}/bin")
-#SET(CPACK_SOURCE_STRIP_FILES "")
-
-##debian specific
-#SET(CPACK_DEBIAN_PACKAGE_NAME "OAI")
-#SET(CPACK_DEBIAN_PACKAGE_VERSION "${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}")
-##dpkg --print-architecture (do not use i686
-#SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
-
-#SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libgcc1 (>= 1:3.4.2-12)")
-#SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libpthread.so.0 libm.so.6 libconfig.so.9 librt.so.1 libcrypt.so.1 libcrypto.so.1.0.0 libnettle.so.4 libsctp.so.1 libc.so.6")
-#SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "EURECOM-OSA")
-
-#SET(CPACK_PACKAGE_EXECUTABLES "lte-softmodem" "mme_gw.Rel10" "openair-hss")
-
-#SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "OpenAirInterface")
-#SET(CPACK_DEBIAN_PACKAGE_Section "Beta-Release")
-
-#INCLUDE(CPack)
diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
index f1c165acbf..77c3006fea 100755
--- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
+++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
@@ -29,10 +29,7 @@
# *******************************************************************************/
-# \file test01.py
-# \brief test 01 for OAI
-# \author Navid Nikaein
-# \date 2013 - 2015
+# \author Rohit Gupta
# \version 0.1
# @ingroup _test
@@ -316,18 +313,24 @@ def SSHSessionWrapper(machine, username, key_file, password, logdir_remote, logd
# \param CleanUpAluLteBox program to terminate AlU Bell Labs LTE Box
# \param ExmimoRfStop String to stop EXMIMO card (specified in test_case_list.xml)
def cleanOldPrograms(oai, programList, CleanUpAluLteBox, ExmimoRfStop):
- cmd = 'killall -q -r ' + programList
+ cmd = 'killall -9 -q -r ' + programList
result = oai.send(cmd, True)
print "Killing old programs..." + result
programArray = programList.split()
programListJoin = '|'.join(programArray)
+ cmd = " ( date ;echo \"Starting cleaning old programs.. \" ; dmesg|tail ; echo \"Current disk space.. \" ; df -h )>& $HOME/.oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync"
+ result=oai.send_recv(cmd)
cmd = cleanupOldProgramsScript + ' ' + '\''+programListJoin+'\''
#result = oai.send_recv(cmd)
#print result
result = oai.send_expect_false(cmd, 'Match found', False)
print "Looking for old programs..." + result
res=oai.send_recv(CleanUpAluLteBox, True)
- res = oai.send_recv(ExmimoRfStop, False)
+ cmd = "( " + ExmimoRfStop + " ) >> $HOME/.oai_test_setup_cleanup.log.`hostname` ; sync "
+ res=oai.send_recv(cmd, False, timeout=600)
+ #res = oai.send_recv(ExmimoRfStop, False)
+ cmd = " ( date ;echo \"Finished cleaning old programs.. \" ; dmesg | tail)>> $HOME/.oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync"
+ res=oai.send_recv(cmd)
# \brief Class thread to launch a generic command on remote machine
# \param threadID number of thread (for book keeping)
@@ -1514,6 +1517,22 @@ for testcase in testcaseList:
threadListGlobal = wait_testcaseclass_generic_threads(threadListGlobal, Timeout_execution)
#cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop)
handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, user, pw, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, Timeout_cmd )
+
+ #The lines below are copied from below to trace the failure of some of the machines in test setup. These lines below need to be removed in long term
+ print "Creating xml file for overall results..."
+ cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml "
+ res=os.system(cmd)
+ os.system('sync')
+ print "Now copying files to NFS Share"
+ oai_localhost = openair('localdomain','localhost')
+ oai_localhost.connect(user,pw)
+ cmd = ' mkdir -p ' + NFSTestsResultsDir
+ res = oai_localhost.send_recv(cmd)
+
+ print "Copying files from GilabCI Runner Machine : " + host + " .locallogdir = " + locallogdir + ", NFSTestsResultsDir = " + NFSTestsResultsDir
+ SSHSessionWrapper('localhost', user, None, pw , NFSTestsResultsDir , locallogdir, "put_all")
+ oai_localhost.disconnect()
+
elif (testcaseclass == 'compilation'):
threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox,Timeout_execution, ExmimoRfStop)
elif (testcaseclass == 'execution'):
@@ -1545,11 +1564,15 @@ res=os.system(cmd)
print "Now copying files to NFS Share"
oai_localhost = openair('localdomain','localhost')
oai_localhost.connect(user,pw)
-cmd = ' rm -fr ' + NFSTestsResultsDir + ' ; mkdir -p ' + NFSTestsResultsDir
+cmd = 'mkdir -p ' + NFSTestsResultsDir
res = oai_localhost.send_recv(cmd)
-print "Deleting NFSTestResults Dir..." + res
print "Copying files from GilabCI Runner Machine : " + host + " .locallogdir = " + locallogdir + ", NFSTestsResultsDir = " + NFSTestsResultsDir
SSHSessionWrapper('localhost', user, None, pw , NFSTestsResultsDir , locallogdir, "put_all")
+cmd = "cat " + NFSTestsResultsDir + "/log/*/*.xml > " + NFSTestsResultsDir + "/log/results_autotests.xml"
+res = oai_localhost.send_recv(cmd)
+
+oai_localhost.disconnect()
+
sys.exit()
diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index 4aaf84e2b9..0104e912f9 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* wvdial* iperf iperf_script ping tshark rrh_gw
+ oaisim oaisim_nos1 lte-softmodem lte-softmodem-nos1 mme_gw run_epc auth_request run_hss oai_hss mme spgw hss hss_sim configure_cots* wvdial iperf iperf_script iperf_script_phone ping tshark rrh_gw iperf3 iperf3_script iperf3_script_phone
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; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py --stop-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue; uname -a; sudo -E dmesg|tail
+$OPENAIR_DIR/cmake_targets/build_oai -w EXMIMO -c; sudo -S -E $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue; uname -a; sudo -E dmesg
36000
- 0102+ 010304 010305 0104+ 015502 015505 015506 015507 015508 015509 015510 015511 015602 015605 015702 015705 015802 015805 016102 016105 016502 016505 0170+ 017502 017505 018002 018005 018502 018505 025502 025505
+ 010141 0102+ 010304 010305 0104+ 015502 015505 015506 015507 015508 015509 015510 015511 015602 015605 015702 015705 015802 015805 016102 016105 016502 016505 017002 017005 017502 017505 018002 018005 018502 018505 025502 025505
3
mozart calisson stevens nano amerique
@@ -879,29 +879,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -916,7 +916,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 7Mbits/s -B 192.172.0.2
@@ -936,7 +936,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -954,29 +954,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -991,7 +991,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 14Mbits/s -B 192.172.0.2
@@ -1011,7 +1011,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -1028,29 +1028,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -1085,7 +1085,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -1102,29 +1102,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -1139,7 +1139,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf3_script 1 ppp0 -c 192.172.0.1 -i 1 -u -f m -B 192.172.0.2 -b 10M -R
False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -1159,7 +1159,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf3_script 5 lo -s -i 1 -f m
False
@@ -1175,29 +1175,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -1211,7 +1211,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf3_script 1 ppp0 -c 192.172.0.1 -i 1 -u -f m -B 192.172.0.2 -b 30M -R
throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
@@ -1232,7 +1232,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf3_script 5 lo -s -i 1 -f m
False
@@ -1248,29 +1248,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -1306,7 +1306,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -1323,29 +1323,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -1380,7 +1380,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo iperf -s -i 1 -u -f m -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -1398,29 +1398,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -1454,7 +1454,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=2.0Mbits/sec max=2.0Mbits/sec average=2.0Mbits/sec
@@ -1471,29 +1471,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -1528,7 +1528,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=4.0Mbits/sec max=4.0Mbits/sec average=4.0Mbits/sec
@@ -1545,29 +1545,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -1603,7 +1603,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -1619,29 +1619,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -1677,7 +1677,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -1693,29 +1693,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -1751,7 +1751,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -1806,12 +1806,12 @@
$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 ; $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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 7Mbits/s -B 192.172.0.2
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -1835,7 +1835,7 @@
-i -r
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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -1890,12 +1890,12 @@
$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 ; $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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 14Mbits/s -B 192.172.0.2
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -1919,7 +1919,7 @@
-i -r
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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -1979,7 +1979,7 @@
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -2003,7 +2003,7 @@
-i -r
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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -2063,7 +2063,7 @@
throughput_test min=10.0Mbits/sec max=10.5Mbits/sec average=11.0Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -2087,7 +2087,7 @@
-i -r
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
@@ -2147,7 +2147,7 @@
throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -2171,7 +2171,7 @@
-i -r
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
@@ -2231,7 +2231,7 @@
throughput_test min=40.0Mbits/sec max=42.0Mbits/sec average=44.0Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -2255,7 +2255,7 @@
-i -r
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
@@ -2272,30 +2272,30 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -26
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -2310,37 +2310,46 @@
$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 ; $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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 7Mbits/s -B 192.172.0.2
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- 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\"
- BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
- 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 OUTPUT \"CONSOLE\"
- $OPENAIRCN_DIR/SCRIPTS/build_epc
- -c -l
- $OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l --debug --random false
-
+ ETC/hss.conf MYSQL_user \"root\"
+ ETC/hss.conf MYSQL_pass \"linux\"
+ ETC/mme.conf GUMMEI_LIST "{MCC=\"208\";MNC=\"92\";MME_GID=\"4\";MME_CODE=\"1\";}"
+ ETC/mme.conf TAI_LIST "{MCC=\"208\";MNC=\"92\";TAC=\"1\";}"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S11_MME \"lo\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S11_MME \"127.0.11.1/8\"
+ ETC/mme.conf MME_PORT_FOR_S11_MME 2123
+ ETC/mme.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/mme.conf OUTPUT \"CONSOLE\"
+ ETC/mme.conf HSS_HOSTNAME \"hss\"
+ ETC/mme_fd.conf Identity \"nano.openair4G.eur\"
+ ETC/hss_fd.conf Identity \"hss.openair4G.eur\"
+ ETC/spgw.conf SGW_INTERFACE_NAME_FOR_S11 \"lo\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\"
+ ETC/spgw.conf SGW_IPV4_PORT_FOR_S1U_S12_S4_UP 2152
+ ETC/spgw.conf PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ ETC/spgw.conf IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ sudo mkdir -p /usr/local/etc/oai/freeDiameter; sudo cp -vf $OPENAIRCN_DIR/ETC/mme.conf /usr/local/etc/oai/ ; sudo cp -vf $OPENAIRCN_DIR/ETC/mme_fd.conf /usr/local/etc/oai/freeDiameter; sudo cp $OPENAIRCN_DIR/ETC/spgw.conf /usr/local/etc/oai -vf; $OPENAIRCN_DIR/SCRIPTS/./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter/ nano.openair4G.eur ; $OPENAIRCN_DIR/SCRIPTS/build_mme -c ; $OPENAIRCN_DIR/SCRIPTS/build_spgw -c
+
+ sudo mkdir -p /usr/local/etc/oai/freeDiamter; sudo cp -vf $OPENAIRCN_DIR/ETC/hss.conf /usr/local/etc/oai ; sudo cp -vf $OPENAIRCN_DIR/ETC/hss_fd.conf /usr/local/etc/oai/freeDiameter ; $OPENAIRCN_DIR/SCRIPTS/check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter/ hss.openair4G.eur; $OPENAIRCN_DIR/SCRIPTS/build_hss -c
+
+c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E ifconfig eth0 add 192.172.0.1
- $OPENAIRCN_DIR/SCRIPTS/run_epc
- -r
- 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
+ sleep 10;$OPENAIRCN_DIR/TEST/autotests/tools/run_epc
+
+ cp -vf $OPENAIRCN_DIR/ETC/*.conf $OPENAIRCN_TESTDIR/; $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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -2357,30 +2366,30 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -29
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -2395,36 +2404,46 @@
$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 ; $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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 14Mbits/s -B 192.172.0.2
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- 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\"
- BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
- 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\"
- $OPENAIRCN_DIR/SCRIPTS/build_epc
- -c -l
- $OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l --debug --random false
-
- $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ;sudo -E ifconfig eth0 add 192.172.0.1; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
+ ETC/hss.conf MYSQL_user \"root\"
+ ETC/hss.conf MYSQL_pass \"linux\"
+ ETC/mme.conf GUMMEI_LIST "{MCC=\"208\";MNC=\"92\";MME_GID=\"4\";MME_CODE=\"1\";}"
+ ETC/mme.conf TAI_LIST "{MCC=\"208\";MNC=\"92\";TAC=\"1\";}"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S11_MME \"lo\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S11_MME \"127.0.11.1/8\"
+ ETC/mme.conf MME_PORT_FOR_S11_MME 2123
+ ETC/mme.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/mme.conf OUTPUT \"CONSOLE\"
+ ETC/mme.conf HSS_HOSTNAME \"hss\"
+ ETC/mme_fd.conf Identity \"nano.openair4G.eur\"
+ ETC/hss_fd.conf Identity \"hss.openair4G.eur\"
+ ETC/spgw.conf SGW_INTERFACE_NAME_FOR_S11 \"lo\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\"
+ ETC/spgw.conf SGW_IPV4_PORT_FOR_S1U_S12_S4_UP 2152
+ ETC/spgw.conf PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ ETC/spgw.conf IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ sudo mkdir -p /usr/local/etc/oai/freeDiameter; sudo cp -vf $OPENAIRCN_DIR/ETC/mme.conf /usr/local/etc/oai/ ; sudo cp -vf $OPENAIRCN_DIR/ETC/mme_fd.conf /usr/local/etc/oai/freeDiameter; sudo cp $OPENAIRCN_DIR/ETC/spgw.conf /usr/local/etc/oai -vf; $OPENAIRCN_DIR/SCRIPTS/./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter/ nano.openair4G.eur ; $OPENAIRCN_DIR/SCRIPTS/build_mme -c ; $OPENAIRCN_DIR/SCRIPTS/build_spgw -c
+
+ sudo mkdir -p /usr/local/etc/oai/freeDiamter; sudo cp -vf $OPENAIRCN_DIR/ETC/hss.conf /usr/local/etc/oai ; sudo cp -vf $OPENAIRCN_DIR/ETC/hss_fd.conf /usr/local/etc/oai/freeDiameter ; $OPENAIRCN_DIR/SCRIPTS/check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter/ hss.openair4G.eur; $OPENAIRCN_DIR/SCRIPTS/build_hss -c
+
+c
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E ifconfig eth0 add 192.172.0.1
- $OPENAIRCN_DIR/SCRIPTS/run_epc
- -r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
+ sleep 10;$OPENAIRCN_DIR/TEST/autotests/tools/run_epc
+
+ cp -vf $OPENAIRCN_DIR/ETC/*.conf $OPENAIRCN_TESTDIR/; $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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -2441,30 +2460,30 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -29
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ;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
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ;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.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -2484,31 +2503,41 @@
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- 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\"
- BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
- 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\"
- $OPENAIRCN_DIR/SCRIPTS/build_epc
- -c -l
- $OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l --debug --random false
-
- $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
+ ETC/hss.conf MYSQL_user \"root\"
+ ETC/hss.conf MYSQL_pass \"linux\"
+ ETC/mme.conf GUMMEI_LIST "{MCC=\"208\";MNC=\"92\";MME_GID=\"4\";MME_CODE=\"1\";}"
+ ETC/mme.conf TAI_LIST "{MCC=\"208\";MNC=\"92\";TAC=\"1\";}"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S11_MME \"lo\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S11_MME \"127.0.11.1/8\"
+ ETC/mme.conf MME_PORT_FOR_S11_MME 2123
+ ETC/mme.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/mme.conf OUTPUT \"CONSOLE\"
+ ETC/mme.conf HSS_HOSTNAME \"hss\"
+ ETC/mme_fd.conf Identity \"nano.openair4G.eur\"
+ ETC/hss_fd.conf Identity \"hss.openair4G.eur\"
+ ETC/spgw.conf SGW_INTERFACE_NAME_FOR_S11 \"lo\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\"
+ ETC/spgw.conf SGW_IPV4_PORT_FOR_S1U_S12_S4_UP 2152
+ ETC/spgw.conf PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ ETC/spgw.conf IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ sudo mkdir -p /usr/local/etc/oai/freeDiameter; sudo cp -vf $OPENAIRCN_DIR/ETC/mme.conf /usr/local/etc/oai/ ; sudo cp -vf $OPENAIRCN_DIR/ETC/mme_fd.conf /usr/local/etc/oai/freeDiameter; sudo cp $OPENAIRCN_DIR/ETC/spgw.conf /usr/local/etc/oai -vf; $OPENAIRCN_DIR/SCRIPTS/./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter/ nano.openair4G.eur ; $OPENAIRCN_DIR/SCRIPTS/build_mme -c ; $OPENAIRCN_DIR/SCRIPTS/build_spgw -c
+
+ sudo mkdir -p /usr/local/etc/oai/freeDiamter; sudo cp -vf $OPENAIRCN_DIR/ETC/hss.conf /usr/local/etc/oai ; sudo cp -vf $OPENAIRCN_DIR/ETC/hss_fd.conf /usr/local/etc/oai/freeDiameter ; $OPENAIRCN_DIR/SCRIPTS/check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter/ hss.openair4G.eur; $OPENAIRCN_DIR/SCRIPTS/build_hss -c
+
+c
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E ifconfig eth0 add 192.172.0.1
- $OPENAIRCN_DIR/SCRIPTS/run_epc
- -r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
+ sleep 10;$OPENAIRCN_DIR/TEST/autotests/tools/run_epc
+
+ cp -vf $OPENAIRCN_DIR/ETC/*.conf $OPENAIRCN_TESTDIR/; $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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -2525,30 +2554,30 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -26
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf pdsch_referenceSignalPower -26
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -2563,36 +2592,46 @@
$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 ; $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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf3_script 1 ppp0 -c 192.172.0.1 -i 1 -u -f m -B 192.172.0.2 -b 10M -R
- throughput_test min=10.0Mbits/sec max=10.5Mbits/sec average=11.0Mbits/sec
+ throughput_test min=9.0Mbits/sec max=9Mbits/sec average=9Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- 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\"
- BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
- 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\"
- $OPENAIRCN_DIR/SCRIPTS/build_epc
- -c -l
- $OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l --debug --random false
-
- $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ;sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
+ ETC/hss.conf MYSQL_user \"root\"
+ ETC/hss.conf MYSQL_pass \"linux\"
+ ETC/mme.conf GUMMEI_LIST "{MCC=\"208\";MNC=\"92\";MME_GID=\"4\";MME_CODE=\"1\";}"
+ ETC/mme.conf TAI_LIST "{MCC=\"208\";MNC=\"92\";TAC=\"1\";}"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S11_MME \"lo\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S11_MME \"127.0.11.1/8\"
+ ETC/mme.conf MME_PORT_FOR_S11_MME 2123
+ ETC/mme.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/mme.conf OUTPUT \"CONSOLE\"
+ ETC/mme.conf HSS_HOSTNAME \"hss\"
+ ETC/mme_fd.conf Identity \"nano.openair4G.eur\"
+ ETC/hss_fd.conf Identity \"hss.openair4G.eur\"
+ ETC/spgw.conf SGW_INTERFACE_NAME_FOR_S11 \"lo\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\"
+ ETC/spgw.conf SGW_IPV4_PORT_FOR_S1U_S12_S4_UP 2152
+ ETC/spgw.conf PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ ETC/spgw.conf IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ sudo mkdir -p /usr/local/etc/oai/freeDiameter; sudo cp -vf $OPENAIRCN_DIR/ETC/mme.conf /usr/local/etc/oai/ ; sudo cp -vf $OPENAIRCN_DIR/ETC/mme_fd.conf /usr/local/etc/oai/freeDiameter; sudo cp $OPENAIRCN_DIR/ETC/spgw.conf /usr/local/etc/oai -vf; $OPENAIRCN_DIR/SCRIPTS/./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter/ nano.openair4G.eur ; $OPENAIRCN_DIR/SCRIPTS/build_mme -c ; $OPENAIRCN_DIR/SCRIPTS/build_spgw -c
+
+ sudo mkdir -p /usr/local/etc/oai/freeDiamter; sudo cp -vf $OPENAIRCN_DIR/ETC/hss.conf /usr/local/etc/oai ; sudo cp -vf $OPENAIRCN_DIR/ETC/hss_fd.conf /usr/local/etc/oai/freeDiameter ; $OPENAIRCN_DIR/SCRIPTS/check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter/ hss.openair4G.eur; $OPENAIRCN_DIR/SCRIPTS/build_hss -c
+
+c
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E ifconfig eth0 add 192.172.0.1
- $OPENAIRCN_DIR/SCRIPTS/run_epc
- -r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
+ sleep 10;$OPENAIRCN_DIR/TEST/autotests/tools/run_epc
+
+ cp -vf $OPENAIRCN_DIR/ETC/*.conf $OPENAIRCN_TESTDIR/; $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/iperf3_script 5 lo -s -i 1 -f m
@@ -2609,30 +2648,30 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -29
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -2647,36 +2686,46 @@
$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 ; $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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf3_script 1 ppp0 -c 192.172.0.1 -i 1 -u -f m -B 192.172.0.2 -b 10M -R
- throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
+ throughput_test min=9Mbits/sec max=9Mbits/sec average=9Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- 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\"
- BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
- 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\"
- $OPENAIRCN_DIR/SCRIPTS/build_epc
- -c -l
- $OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l --debug --random false
-
- $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ;sudo -E ifconfig eth0 add 192.172.0.1 ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
+ ETC/hss.conf MYSQL_user \"root\"
+ ETC/hss.conf MYSQL_pass \"linux\"
+ ETC/mme.conf GUMMEI_LIST "{MCC=\"208\";MNC=\"92\";MME_GID=\"4\";MME_CODE=\"1\";}"
+ ETC/mme.conf TAI_LIST "{MCC=\"208\";MNC=\"92\";TAC=\"1\";}"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S11_MME \"lo\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S11_MME \"127.0.11.1/8\"
+ ETC/mme.conf MME_PORT_FOR_S11_MME 2123
+ ETC/mme.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/mme.conf OUTPUT \"CONSOLE\"
+ ETC/mme.conf HSS_HOSTNAME \"hss\"
+ ETC/mme_fd.conf Identity \"nano.openair4G.eur\"
+ ETC/hss_fd.conf Identity \"hss.openair4G.eur\"
+ ETC/spgw.conf SGW_INTERFACE_NAME_FOR_S11 \"lo\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\"
+ ETC/spgw.conf SGW_IPV4_PORT_FOR_S1U_S12_S4_UP 2152
+ ETC/spgw.conf PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ ETC/spgw.conf IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ sudo mkdir -p /usr/local/etc/oai/freeDiameter; sudo cp -vf $OPENAIRCN_DIR/ETC/mme.conf /usr/local/etc/oai/ ; sudo cp -vf $OPENAIRCN_DIR/ETC/mme_fd.conf /usr/local/etc/oai/freeDiameter; sudo cp $OPENAIRCN_DIR/ETC/spgw.conf /usr/local/etc/oai -vf; $OPENAIRCN_DIR/SCRIPTS/./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter/ nano.openair4G.eur ; $OPENAIRCN_DIR/SCRIPTS/build_mme -c ; $OPENAIRCN_DIR/SCRIPTS/build_spgw -c
+
+ sudo mkdir -p /usr/local/etc/oai/freeDiamter; sudo cp -vf $OPENAIRCN_DIR/ETC/hss.conf /usr/local/etc/oai ; sudo cp -vf $OPENAIRCN_DIR/ETC/hss_fd.conf /usr/local/etc/oai/freeDiameter ; $OPENAIRCN_DIR/SCRIPTS/check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter/ hss.openair4G.eur; $OPENAIRCN_DIR/SCRIPTS/build_hss -c
+
+c
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E ifconfig eth0 add 192.172.0.1
- $OPENAIRCN_DIR/SCRIPTS/run_epc
- -r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
+ sleep 10;$OPENAIRCN_DIR/TEST/autotests/tools/run_epc
+
+ cp -vf $OPENAIRCN_DIR/ETC/*.conf $OPENAIRCN_TESTDIR/; $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/iperf3_script 5 lo -s -i 1 -f m
@@ -2693,30 +2742,30 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf pdsch_referenceSignalPower -29
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf pdsch_referenceSignalPower -29
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -c
- sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf $OPENAIR_TESTDIR/enb.conf
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; ifconfig ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -2731,36 +2780,46 @@
$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 ; $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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf3_script 1 ppp0 -c 192.172.0.1 -i 1 -u -f m -B 192.172.0.2 -b 9M -R
- throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
+ throughput_test min=9Mbits/sec max=9Mbits/sec average=9Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
- 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\"
- BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
- BUILD/EPC/epc.conf.in SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP \"eth0\";
- 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\"
- $OPENAIRCN_DIR/SCRIPTS/build_epc
- -c -l
- $OPENAIRCN_DIR/SCRIPTS/build_hss
- -c -l --debug --random false
-
- $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ;sudo -E ifconfig eth0 add 192.172.0.1 ;cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
+ ETC/hss.conf MYSQL_user \"root\"
+ ETC/hss.conf MYSQL_pass \"linux\"
+ ETC/mme.conf GUMMEI_LIST "{MCC=\"208\";MNC=\"92\";MME_GID=\"4\";MME_CODE=\"1\";}"
+ ETC/mme.conf TAI_LIST "{MCC=\"208\";MNC=\"92\";TAC=\"1\";}"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S1_MME \"eth0\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\"
+ ETC/mme.conf MME_INTERFACE_NAME_FOR_S11_MME \"lo\"
+ ETC/mme.conf MME_IPV4_ADDRESS_FOR_S11_MME \"127.0.11.1/8\"
+ ETC/mme.conf MME_PORT_FOR_S11_MME 2123
+ ETC/mme.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/mme.conf OUTPUT \"CONSOLE\"
+ ETC/mme.conf HSS_HOSTNAME \"hss\"
+ ETC/mme_fd.conf Identity \"nano.openair4G.eur\"
+ ETC/hss_fd.conf Identity \"hss.openair4G.eur\"
+ ETC/spgw.conf SGW_INTERFACE_NAME_FOR_S11 \"lo\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S11 \"127.0.11.2/8\"
+ ETC/spgw.conf SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\"
+ ETC/spgw.conf SGW_IPV4_PORT_FOR_S1U_S12_S4_UP 2152
+ ETC/spgw.conf PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\"
+ ETC/spgw.conf IPV4_LIST \"192.172.0.0/24\",\"192.172.1.0/24\"
+ sudo mkdir -p /usr/local/etc/oai/freeDiameter; sudo cp -vf $OPENAIRCN_DIR/ETC/mme.conf /usr/local/etc/oai/ ; sudo cp -vf $OPENAIRCN_DIR/ETC/mme_fd.conf /usr/local/etc/oai/freeDiameter; sudo cp $OPENAIRCN_DIR/ETC/spgw.conf /usr/local/etc/oai -vf; $OPENAIRCN_DIR/SCRIPTS/./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter/ nano.openair4G.eur ; $OPENAIRCN_DIR/SCRIPTS/build_mme -c ; $OPENAIRCN_DIR/SCRIPTS/build_spgw -c
+
+ sudo mkdir -p /usr/local/etc/oai/freeDiamter; sudo cp -vf $OPENAIRCN_DIR/ETC/hss.conf /usr/local/etc/oai ; sudo cp -vf $OPENAIRCN_DIR/ETC/hss_fd.conf /usr/local/etc/oai/freeDiameter ; $OPENAIRCN_DIR/SCRIPTS/check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter/ hss.openair4G.eur; $OPENAIRCN_DIR/SCRIPTS/build_hss -c
+
+c
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E ifconfig eth0 add 192.172.0.1
- $OPENAIRCN_DIR/SCRIPTS/run_epc
- -r
- sleep 10; $OPENAIRCN_DIR/SCRIPTS/run_hss --export-db $OPENAIRCN_TESTDIR/hss_export.db
+ sleep 10;$OPENAIRCN_DIR/TEST/autotests/tools/run_epc
+
+ cp -vf $OPENAIRCN_DIR/ETC/*.conf $OPENAIRCN_TESTDIR/; $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/iperf3_script 5 lo -s -i 1 -f m
@@ -2778,27 +2837,27 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.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.25PRB.usrpx310.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf uplink_frequency_offset -120000000
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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.25PRB.usrpx310.epc.remote.conf -W
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -2812,7 +2871,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 7Mbits/s -B 192.172.0.2
@@ -2832,7 +2891,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -f m -u
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -2850,27 +2909,27 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.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.50PRB.usrpx310.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf uplink_frequency_offset -120000000
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -2884,7 +2943,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 14Mbits/s -B 192.172.0.2
@@ -2904,7 +2963,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -2921,27 +2980,27 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.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.100PRB.usrpx310.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf uplink_frequency_offset -120000000
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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.100PRB.usrpx310.conf -W
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -2976,7 +3035,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -2993,27 +3052,27 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.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.25PRB.usrpx310.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf uplink_frequency_offset -120000000
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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.25PRB.usrpx310.epc.remote.conf -W
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -3028,7 +3087,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf3_script 1 ppp0 -c 192.172.0.1 -i 1 -u -f m -B 192.172.0.2 -b 10M -R
False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -3048,7 +3107,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf3_script 5 lo -s -i 1 -f m
False
@@ -3064,27 +3123,27 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.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.50PRB.usrpx310.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf uplink_frequency_offset -120000000
- 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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -3099,7 +3158,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf3_script 1 ppp0 -c 192.172.0.1 -i 1 -u -f m -B 192.172.0.2 -b 20M -R
False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -3119,7 +3178,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf3_script 5 lo -s -i 1 -f m
False
@@ -3135,27 +3194,27 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.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.100PRB.usrpx310.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf uplink_frequency_offset -120000000
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
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.100PRB.usrpx310.conf -W
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -3190,7 +3249,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -3209,27 +3268,27 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf uplink_frequency_offset -120000000
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -3249,7 +3308,7 @@
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -3273,7 +3332,7 @@
-r
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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -3292,27 +3351,27 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf uplink_frequency_offset -120000000
- 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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -3332,7 +3391,7 @@
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -3356,7 +3415,7 @@
-r
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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -3373,27 +3432,27 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf uplink_frequency_offset -120000000
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -3413,7 +3472,7 @@
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -3437,7 +3496,7 @@
-r
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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -3454,27 +3513,27 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf uplink_frequency_offset -120000000
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -3494,7 +3553,7 @@
throughput_test min=10.0Mbits/sec max=10.5Mbits/sec average=11.0Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -3518,7 +3577,7 @@
-r
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
@@ -3535,27 +3594,27 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf uplink_frequency_offset -120000000
- 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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15;$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15;$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -3575,7 +3634,7 @@
throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -3599,7 +3658,7 @@
-r
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
@@ -3616,27 +3675,27 @@
nano
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf uplink_frequency_offset -120000000
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth6\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
- sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf -W
@@ -3656,7 +3715,7 @@
throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -3680,7 +3739,7 @@
-r
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
@@ -3714,7 +3773,7 @@
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
- $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2; dmesg|tail
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2; dmesg|tail
$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
@@ -3731,7 +3790,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 7Mbits/s -B 192.172.0.2
@@ -3751,7 +3810,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -3786,7 +3845,7 @@
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
- $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2 ; dmesg|tail
$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
@@ -3804,7 +3863,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script 1 ppp0 -u -c 192.172.0.1 -b 14Mbits/s -B 192.172.0.2
@@ -3824,7 +3883,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -3858,7 +3917,7 @@
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
- $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2 ; dmesg|tail
$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
@@ -3896,7 +3955,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -3930,7 +3989,7 @@
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
- $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2 ; dmesg|tail
$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
@@ -3948,7 +4007,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf3_script 1 ppp0 -c 192.172.0.1 -i 1 -u -f m -B 192.172.0.2 -b 10M -R
False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -3968,7 +4027,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf3_script 5 lo -s -i 1 -f m
False
@@ -4001,7 +4060,7 @@
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
- $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2 ; dmesg|tail
$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
@@ -4019,7 +4078,7 @@
$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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf3_script 1 ppp0 -c 192.172.0.1 -i 1 -u -f m -B 192.172.0.2 -b 20M -R
False
sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
@@ -4039,7 +4098,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf3_script 5 lo -s -i 1 -f m
False
@@ -4072,7 +4131,7 @@
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
- $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2 ; dmesg|tail
$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
@@ -4110,7 +4169,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -4145,7 +4204,7 @@
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;$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15;$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_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
@@ -4169,7 +4228,7 @@
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -4193,7 +4252,7 @@
-r
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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -4229,7 +4288,7 @@
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; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_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
@@ -4252,7 +4311,7 @@
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -4276,7 +4335,7 @@
-r
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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -4310,7 +4369,7 @@
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;$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15;$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_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
@@ -4333,7 +4392,7 @@
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -4357,7 +4416,7 @@
-r
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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -4391,7 +4450,7 @@
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;$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15;$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_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
@@ -4414,7 +4473,7 @@
throughput_test min=10.0Mbits/sec max=10.5Mbits/sec average=11.0Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -4438,7 +4497,7 @@
-r
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
@@ -4472,7 +4531,7 @@
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;$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15;$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_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
@@ -4495,7 +4554,7 @@
throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -4519,7 +4578,7 @@
-r
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
@@ -4553,7 +4612,7 @@
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; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; 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
+ sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S $OPENAIR_DIR/cmake_targets/tools/stop_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
@@ -4576,7 +4635,7 @@
throughput_test min=20.0Mbits/sec max=21.0Mbits/sec average=22.0Mbits/sec
False
- $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
+ sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue
/tmp
BUILD/EPC/epc.conf.in MCC \"208\"
@@ -4600,7 +4659,7 @@
-r
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; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s ; cp $OPENAIRCN_DIR/BUILD/EPC/epc.conf.in $OPENAIRCN_TESTDIR/epc.conf.in
@@ -4676,7 +4735,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -4752,7 +4811,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -4827,7 +4886,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -4902,7 +4961,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -4976,7 +5035,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -5051,7 +5110,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -5090,7 +5149,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf --rf-config-file $OPENAIR_DIR/targets/ARCH/LMSSDR/enb_sodera_highband_5MHz_rx19dB_txfull.ini -W
@@ -5125,12 +5184,12 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
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
+ LMSSDR.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -5166,7 +5225,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf --rf-config-file $OPENAIR_DIR/targets/ARCH/LMSSDR/enb_sodera_highband_10MHz_rx19dB_txfull.ini -W
@@ -5201,12 +5260,12 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
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
+ LMSSDR.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -5241,7 +5300,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf -W --rf-config-file $OPENAIR_DIR/targets/ARCH/LMSSDR/enb_sodera_highband_20MHz_rx19dB_txfull.ini
@@ -5276,12 +5335,12 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
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
+ LMSSDR.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX
10
@@ -5316,7 +5375,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf -W --rf-config-file $OPENAIR_DIR/targets/ARCH/LMSSDR/enb_sodera_highband_5MHz_rx19dB_txfull.ini
@@ -5351,11 +5410,11 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
- BladeRF.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
+ LMSSDR.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX
10
@@ -5390,7 +5449,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf -W --rf-config-file $OPENAIR_DIR/targets/ARCH/LMSSDR/enb_sodera_highband_10MHz_rx19dB_txfull.ini
@@ -5425,7 +5484,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -5464,7 +5523,7 @@
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf -W --rf-config-file $OPENAIR_DIR/targets/ARCH/LMSSDR/enb_sodera_highband_20MHz_rx19dB_txfull.ini
@@ -5500,7 +5559,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -5586,7 +5645,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -5672,7 +5731,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -5757,7 +5816,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -5842,7 +5901,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -5926,7 +5985,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 10Mbits/s
False
@@ -6011,7 +6070,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 15Mbits/s -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 15Mbits/s
False
@@ -6028,29 +6087,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -6065,7 +6124,7 @@
sleep 50; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --start-ue
- $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script_phone 1 YT9115PX1E -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script_phone 1 YT9115PX1E -u -c 192.172.0.1 -b 7Mbits/s -B 192.172.0.2
@@ -6085,9 +6144,9 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
- throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+ throughput_test min=5.0Mbits/sec max=5.0Mbits/sec average=5.0Mbits/sec
False
USRPb210.ALU_EPC.SonyExperiaM4.5MHz.FDD.Band_7.UL.1TX.1RX
@@ -6103,29 +6162,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -6140,7 +6199,7 @@
sleep 50; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --start-ue
- $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script_phone 1 YT9115PX1E -u -c 192.172.0.1 -b 10Mbits/s -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script_phone 1 YT9115PX1E -u -c 192.172.0.1 -b 14Mbits/s -B 192.172.0.2
@@ -6160,9 +6219,9 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
- throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
+ throughput_test min=10.0Mbits/sec max=10.0Mbits/sec average=10.0Mbits/sec
False
USRPb210.ALU_EPC.SonyExperiaM4.10MHz.FDD.Band_7.UL.1TX.1RX
@@ -6177,29 +6236,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -6234,7 +6293,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 5 lo -s -i 1 -u -f m
throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec
@@ -6251,29 +6310,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -6288,7 +6347,7 @@
sleep 50; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --start-ue
- $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script_phone 1 YT9115PX1E -u -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script_phone 1 YT9115PX1E -s -i 1 -u -f m
throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec
@@ -6309,7 +6368,7 @@
/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
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 65 lo -c 192.172.0.2 -b 10Mbits/s -i 1 -f m -u
False
@@ -6325,29 +6384,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -6362,7 +6421,7 @@
sleep 50; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --start-ue
- $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script_phone 1 YT9115PX1E -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script_phone 1 YT9115PX1E -s -i 1 -u -f m
throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec
@@ -6383,7 +6442,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 15Mbits/s -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 65 lo -c 192.172.0.2 -b 20Mbits/s -i 1 -f m -u
False
@@ -6399,29 +6458,29 @@
amerique
390
/tmp
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\"
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 100
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.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.usrpb210.epc.remote.conf downlink_frequency 2660000000L
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf uplink_frequency_offset -120000000
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tx_gain 90
- targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 125
- 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 \"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 \"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
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"92\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 100
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.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.usrpb210.conf downlink_frequency 2660000000L
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\"
+ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
$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
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W
@@ -6436,7 +6495,7 @@
sleep 50; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --start-ue
- $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script_phone 1 YT9115PX1E -s -i 1 -u -f m -B 192.172.0.2
+ $OPENAIR_DIR/cmake_targets/autotests/tools/iperf_script_phone 1 YT9115PX1E -s -i 1 -u -f m
throughput_test min=10.0Mbits/sec max=10.0Mbits/sec average=10.0Mbits/sec
@@ -6457,7 +6516,7 @@
/opt/hss_sim0609/starthss >> /dev/null ; sleep 3000
- $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 60 lo -u -c 192.172.0.2 -b 15Mbits/s -B 192.172.0.1
+ $OPENAIRCN_DIR/TEST/autotests/tools/iperf_script 65 lo -c 192.172.0.2 -b 40Mbits/s -i 1 -f m -u
False
diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
index 3921afd8f2..768b88aa28 100755
--- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
+++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
@@ -141,6 +141,7 @@ def send_command (cmd, response, timeout):
error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
error = error + traceback.format_exc()
print error
+ time.sleep(1)
def start_ue () :
@@ -200,10 +201,12 @@ def reset_ue():
ProductId=res[0][3]
usb_dir= find_usb_path(VendorId, ProductId)
print "Bandrich 4G LTE Adapter found in..." + usb_dir
+ print "Sleeping now for 45 seconds...please wait..."
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" )
+ stop_ue()
i=1
gw='192.172.0.1'
@@ -218,6 +221,7 @@ while i < len(sys.argv):
print 'Using Serial port : ' + serial_port
stop_ue()
elif arg == '--reset-ue' :
+ find_open_port()
reset_ue()
elif arg == '-gw' :
gw = sys.argv[i+1]
diff --git a/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py b/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py
index b173d6157c..929cc1c0a5 100755
--- a/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py
+++ b/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py
@@ -143,6 +143,7 @@ def send_command (cmd, response, timeout):
error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e)
error = error + traceback.format_exc()
print error
+ time.sleep(1)
def start_ue () :
@@ -211,6 +212,7 @@ def reset_ue():
os.system(cmd + " ; sleep 15" )
cmd = "sudo sh -c \"echo 1 > " + usb_dir + "/authorized\""
os.system(cmd + " ; sleep 30" )
+ stop_ue()
i=1
gw='192.172.0.1'
@@ -225,6 +227,7 @@ while i < len(sys.argv):
print 'Using Serial port : ' + serial_port
stop_ue()
elif arg == '--reset-ue' :
+ find_open_port()
reset_ue()
elif arg == '-gw' :
gw = sys.argv[i+1]
diff --git a/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py b/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py
index eba3156976..c136067a61 100755
--- a/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py
+++ b/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py
@@ -43,7 +43,8 @@ def kill_processes(name):
cmd = 'sudo adb -s ' + device_id +' shell "ps |grep ' + name + '"'
status, out = commands.getstatusoutput(cmd)
if status != 0:
- print "Error execting command to kill process " + name
+ print "Error executing command to kill process " + name
+ print "Error =" + out
sys.exit(1)
print "Out = " + out
if out=='':
@@ -51,7 +52,7 @@ def kill_processes(name):
out_arr = out.split()
pid_to_kill = out_arr[1]
print "Now killing process ID " + pid_to_kill + " on Phone"
- cmd = 'sudo adb -s ' + device_id +' shell "kill ' + pid_to_kill + '"'
+ cmd = 'sudo adb -s ' + device_id +' shell "kill -9 ' + pid_to_kill + '"'
status, out = commands.getstatusoutput(cmd)
if status != 0:
print "Error execting command to kill process " + name
@@ -62,6 +63,7 @@ def start_ue () :
#print 'Enter your commands below.\r\nInsert "exit" to leave the application.'
print 'Killing old iperf/ping sessions'
kill_processes('iperf')
+ kill_processes('iperf3')
kill_processes('ping')
print "Turning off airplane mode"
os.system('sudo -E adb devices')
@@ -93,6 +95,7 @@ def stop_ue():
os.system('sudo adb -s ' + device_id + ' shell \"settings put global airplane_mode_on 1; am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true\" ')
print "Killing iperf/ping sessions"
kill_processes('iperf')
+ kill_processes('iperf3')
kill_processes('ping')
i=1
diff --git a/cmake_targets/autotests/tools/iperf3_script b/cmake_targets/autotests/tools/iperf3_script
new file mode 100755
index 0000000000..e82816f6e1
--- /dev/null
+++ b/cmake_targets/autotests/tools/iperf3_script
@@ -0,0 +1,52 @@
+#!/bin/bash
+#******************************************************************************
+
+# 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
+
+# *******************************************************************************/
+# \author Navid Nikaein, Rohit Gupta
+
+#arg1 timeout to wait before running the script
+#arg2 interface
+#arg3 iperf arguments
+
+args=($*)
+timeout=${args[0]}
+iface=${args[1]}
+iperf3_args=(${args[@]:2})
+
+#array=${1:-1}
+echo "args = ${args[@]}"
+echo "timeout = $timeout"
+echo "iface = $iface"
+echo "iperf3_args = ${iperf3_args[@]}"
+
+sleep $timeout
+
+while true; do var=`ifconfig $iface` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5
+
+iperf3 ${iperf3_args[@]}
diff --git a/cmake_targets/autotests/tools/iperf3_script_phone b/cmake_targets/autotests/tools/iperf3_script_phone
new file mode 100755
index 0000000000..c191f72ec3
--- /dev/null
+++ b/cmake_targets/autotests/tools/iperf3_script_phone
@@ -0,0 +1,63 @@
+#!/bin/bash
+#******************************************************************************
+
+# 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
+
+# *******************************************************************************/
+# \author Navid Nikaein, Rohit Gupta
+
+#arg1 timeout to wait before running the script
+#arg2 interface
+#arg3 iperf3 arguments
+
+args=($*)
+timeout=${args[0]}
+device_id=${args[1]}
+iperf3_args=(${args[@]:2})
+
+#array=${1:-1}
+echo "args = ${args[@]}"
+echo "timeout = $timeout"
+echo "device_id = $device_id"
+echo "iperf3_args = ${iperf3_args[@]}"
+
+sleep $timeout
+
+while true ; do
+ cmd=`sudo adb -s $device_id shell netcfg |grep 192.`
+ if [ -z "$cmd" ]; then
+ echo "Wating for UE to connect and get IP Address..."
+ sleep 1
+ else
+ echo "UE is now connected. IP Address settings are... $cmd"
+ break
+ fi
+done
+
+echo "Starting iperf3 now..."
+
+sudo adb -s $device_id shell /data/local/tmp/iperf3 ${iperf3_args[@]}
diff --git a/cmake_targets/autotests/tools/search_repl.py b/cmake_targets/autotests/tools/search_repl.py
index e43feccfb3..fefc142f08 100755
--- a/cmake_targets/autotests/tools/search_repl.py
+++ b/cmake_targets/autotests/tools/search_repl.py
@@ -54,9 +54,9 @@ file.close()
if keyword == 'mme_ip_address':
replacement_text = keyword + ' = ( { ' + replacement_text + ' } ) ; '
string = re.sub(r"mme_ip_address\s*=\s*\(([^\$]+?)\)\s*;", replacement_text, string, re.M)
-elif keyword == 'IPV4_LIST':
+elif keyword == 'IPV4_LIST' or keyword=='GUMMEI_LIST' or keyword == 'TAI_LIST':
replacement_text = keyword + ' = ( ' + replacement_text + ' ) ; '
- string = re.sub(r"IPV4_LIST\s*=\s*\(([^\$]+?)\)\s*;", replacement_text, string, re.M)
+ string = re.sub(r"%s\s*=\s*\(([^\$]+?)\)\s*;" % keyword, 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)
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 821b3bca27..d1306b804b 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -45,8 +45,9 @@ MSC_GEN="False"
XFORMS="True"
PRINT_STATS="False"
VCD_TIMING="False"
-LOWLATENCY_FLAG_USER="False"
-FORCE_LOWLATENCY_FLAG_USER=""
+DEADLINE_SCHEDULER_FLAG_USER="False"
+FORCE_DEADLINE_SCHEDULER_FLAG_USER=""
+CPU_AFFINITY_FLAG_USER="True" #Only valid when lowlatecy flag is set to False
REL="Rel10"
HW="None"
TP="None"
@@ -57,6 +58,7 @@ CFLAGS_PROCESSOR_USER=""
RUN_GROUP=0
TEST_CASE_GROUP=""
BUILD_DOXYGEN=0
+T_TRACER="False"
trap handle_ctrl_c INT
function print_help() {
@@ -124,7 +126,11 @@ Options
--disable-deadline
Disables deadline scheduler of Linux kernel (>=3.14.x).
--enable-deadline
- Disables deadline scheduler of Linux kernel (>=3.14.x).
+ Enable deadline scheduler of Linux kernel (>=3.14.x).
+--disable-cpu-affinity
+ Disables CPU Affinity between UHD/TX/RX Threads (Valid only when deadline scheduler is disabled). By defaulT, CPU Affinity is enabled when not using deadline scheduler. It is enabled only with >2 CPUs. For eNB, CPU_0-> Device library (UHD), CPU_1->TX Threads, CPU_2...CPU_MAX->Rx Threads. For UE, CPU_0->Device Library(UHD), CPU_1..CPU_MAX -> All the UE threads
+--T-tracer
+ Enables the T tracer.
Usage (first build):
oaisim (eNB + UE): ./build_oai -I -g --oaisim -x --install-system-files
Eurecom EXMIMO + COTS UE : ./build_oai -I -g --eNB -x --install-system-files
@@ -256,13 +262,21 @@ function main() {
echo_info "Will build doxygen support"
shift;;
--disable-deadline)
- FORCE_LOWLATENCY_FLAG_USER="False"
+ FORCE_DEADLINE_SCHEDULER_FLAG_USER="False"
echo_info "Disabling the usage of deadline scheduler"
shift 1;;
--enable-deadline)
- FORCE_LOWLATENCY_FLAG_USER="True"
+ FORCE_DEADLINE_SCHEDULER_FLAG_USER="True"
echo_info "Enabling the usage of deadline scheduler"
shift 1;;
+ --disable-cpu-affinity)
+ CPU_AFFINITY_FLAG_USER="False"
+ echo_info "Disabling CPU Affinity (only valid when not using deadline scheduler)"
+ shift 1;;
+ --T-tracer)
+ T_TRACER="True"
+ echo_info "Enabling the T tracer"
+ shift 1;;
-h | --help)
print_help
exit 1;;
@@ -307,29 +321,34 @@ function main() {
#By default: USRP: disable,
#By default: BLADERF: enable,
#By default: EXMIMO: enable
- if [ "$FORCE_LOWLATENCY_FLAG_USER" = "" ]; then
+ if [ "$FORCE_DEADLINE_SCHEDULER_FLAG_USER" = "" ]; then
if [ "$HW" = "EXMIMO" ] ; then
- LOWLATENCY_FLAG_USER="True"
+ DEADLINE_SCHEDULER_FLAG_USER="False"
elif [ "$HW" = "ETHERNET" ] ; then
- LOWLATENCY_FLAG_USER="True"
+ DEADLINE_SCHEDULER_FLAG_USER="True"
elif [ "$HW" = "OAI_USRP" ] ; then
- LOWLATENCY_FLAG_USER="False"
+ DEADLINE_SCHEDULER_FLAG_USER="False"
elif [ "$HW" = "OAI_BLADERF" ] ; then
- LOWLATENCY_FLAG_USER="False"
+ DEADLINE_SCHEDULER_FLAG_USER="False"
elif [ "$HW" = "OAI_LMSSDR" ] ; then
- LOWLATENCY_FLAG_USER="False"
+ DEADLINE_SCHEDULER_FLAG_USER="False"
elif [ "$HW" = "None" ] ; then
- LOWLATENCY_FLAG_USER="False"
+ DEADLINE_SCHEDULER_FLAG_USER="False"
else
echo_error "Unknown HW type $HW. Exiting now..."
exit
fi
else
- LOWLATENCY_FLAG_USER=$FORCE_LOWLATENCY_FLAG_USER
+ DEADLINE_SCHEDULER_FLAG_USER=$FORCE_DEADLINE_SCHEDULER_FLAG_USER
fi
- echo_info "Flags for Deadline scheduler: $LOWLATENCY_FLAG_USER"
+ #Disable CPU Affinity for deadline scheduler
+ if [ "$DEADLINE_SCHEDULER_FLAG_USER" = "True" ] ; then
+ CPU_AFFINITY_FLAG_USER="False"
+ fi
+ echo_info "Flags for Deadline scheduler: $DEADLINE_SCHEDULER_FLAG_USER"
+ echo_info "Flags for CPU Affinity: $CPU_AFFINITY_FLAG_USER"
############################################
# setting and printing OAI envs, we should check here
@@ -420,7 +439,9 @@ function main() {
echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file
echo "set ( TRANSP_PRO \"${TP}\")" >> $cmake_file
echo "set(PACKAGE_NAME \"${lte_exec}\")" >> $cmake_file
- echo "set (LOWLATENCY \"${LOWLATENCY_FLAG_USER}\" )" >>$cmake_file
+ echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file
+ echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file
+ echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
cd $DIR/$lte_build_dir/build
cmake ..
@@ -449,7 +470,7 @@ function main() {
compilations \
$lte_build_dir ue_ip \
CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
-
+
# mkdir -p $DIR/at_commands/build
# cd $DIR/at_commands/build
# cmake ..
@@ -472,6 +493,11 @@ function main() {
# generate USIM data
if [ -f $dbin/nvram ]; then
install_nas_tools $dbin $dconf
+ echo_info "Copying UE specific part to $DIR/$lte_build_dir/build"
+ cp -Rvf $dbin/.ue_emm.nvram $DIR/$lte_build_dir/build
+ cp -Rvf $dbin/.ue.nvram $DIR/$lte_build_dir/build
+ cp -Rvf $dbin/.usim.nvram $DIR/$lte_build_dir/build
+
else
echo_warning "not generated UE NAS files: binaries not found"
fi
@@ -549,6 +575,7 @@ function main() {
echo "set ( PRINT_STATS $PRINT_STATS )" >> $cmake_file
echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
+ echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
[ "$CLEAN" = "1" ] && rm -rf $DIR/$oaisim_build_dir/build
mkdir -p $DIR/$oaisim_build_dir/build
@@ -614,6 +641,7 @@ function main() {
echo "set(XFORMS $XFORMS )" >> $cmake_file
echo "set(RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file
echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
+ echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
#[ "$CLEAN" = "1" ] && rm -rf $DIR/oaisim_mme_build_oai/build
#mkdir -p $DIR/oaisim_mme_build_oai/build
@@ -642,7 +670,9 @@ function main() {
echo "set(RF_BOARD \"${HW}\")" >> $cmake_file
echo "set(TRANSP_PRO \"${TP}\")" >> $cmake_file
echo 'set(PACKAGE_NAME "\"rrh_gw\"")' >> $cmake_file
- echo "set (LOWLATENCY \"${LOWLATENCY_FLAG_USER}\" )" >>$cmake_file
+ echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file
+ echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file
+ echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
cd $DIR/$rrh_build_dir/build
cmake ..
diff --git a/cmake_targets/epc_test/CMakeLists.template b/cmake_targets/epc_test/CMakeLists.template
index 8a8223e4ae..76defbc7d7 100644
--- a/cmake_targets/epc_test/CMakeLists.template
+++ b/cmake_targets/epc_test/CMakeLists.template
@@ -29,7 +29,7 @@ set ( LINUX_LIST False )
set ( LINUX True )
set ( LOCALIZATION False )
set ( LOG_NO_THREAD True )
-set ( LOWLATENCY False )
+set ( DEADLINE_SCHEDULER False )
set ( MAC_CONTEXT 1 )
set ( MAX_NUM_CCs 1 )
set ( MESSAGE_CHART_GENERATOR False)
diff --git a/cmake_targets/oaisim_build_oai/CMakeLists.template b/cmake_targets/oaisim_build_oai/CMakeLists.template
index 76564d8fdd..0a05d68d10 100644
--- a/cmake_targets/oaisim_build_oai/CMakeLists.template
+++ b/cmake_targets/oaisim_build_oai/CMakeLists.template
@@ -28,7 +28,7 @@ set ( LINUX_LIST False )
set ( LINUX True )
set ( LOCALIZATION False )
set ( LOG_NO_THREAD True )
-set ( LOWLATENCY False )
+set ( DEADLINE_SCHEDULER False )
set ( MAC_CONTEXT 1 )
set ( MAX_NUM_CCs 1 )
set ( MESSAGE_CHART_GENERATOR False)
diff --git a/cmake_targets/oaisim_mme_build_oai/CMakeLists.template b/cmake_targets/oaisim_mme_build_oai/CMakeLists.template
index 1035a28599..69fa209b16 100644
--- a/cmake_targets/oaisim_mme_build_oai/CMakeLists.template
+++ b/cmake_targets/oaisim_mme_build_oai/CMakeLists.template
@@ -29,7 +29,7 @@ set ( LINUX_LIST False )
set ( LINUX False )
set ( LOCALIZATION False )
set ( LOG_NO_THREAD False )
-set ( LOWLATENCY False )
+set ( DEADLINE_SCHEDULER False )
set ( MAC_CONTEXT 1 )
set ( MAX_NUM_CCs 1 )
set ( MIH_C_MEDIEVAL_EXTENSIONS False )
diff --git a/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template b/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template
index a905510150..6d8fc6d26a 100644
--- a/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template
+++ b/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template
@@ -28,7 +28,7 @@ set ( LINUX_LIST False )
set ( LINUX True )
set ( LOCALIZATION False )
set ( LOG_NO_THREAD 1 )
-set ( LOWLATENCY False )
+set ( DEADLINE_SCHEDULER False )
set ( MAC_CONTEXT 1 )
set ( MAX_NUM_CCs 1 )
set ( MESSAGE_CHART_GENERATOR False )
diff --git a/cmake_targets/s1c_mme_test/CMakeLists.template b/cmake_targets/s1c_mme_test/CMakeLists.template
index 4067202df1..994edf8352 100644
--- a/cmake_targets/s1c_mme_test/CMakeLists.template
+++ b/cmake_targets/s1c_mme_test/CMakeLists.template
@@ -29,7 +29,7 @@ set ( LINUX_LIST False )
set ( LINUX True )
set ( LOCALIZATION False )
set ( LOG_NO_THREAD True )
-set ( LOWLATENCY False )
+set ( DEADLINE_SCHEDULER False )
set ( MAC_CONTEXT 1 )
set ( MAX_NUM_CCs 1 )
set ( MESSAGE_CHART_GENERATOR False)
diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper
index a40bd8c996..00f6842ffd 100755
--- a/cmake_targets/tools/build_helper
+++ b/cmake_targets/tools/build_helper
@@ -293,7 +293,8 @@ check_install_oai_software() {
python-numpy \
sshpass \
libxslt1-dev \
- android-tools-adb
+ android-tools-adb \
+ iperf3
$SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so
diff --git a/cmake_targets/tools/stop_exmimo2 b/cmake_targets/tools/stop_exmimo2
index a68fdb7d57..102c9e0680 100755
--- a/cmake_targets/tools/stop_exmimo2
+++ b/cmake_targets/tools/stop_exmimo2
@@ -8,8 +8,12 @@ if [ "$OPENAIR_DIR" == "" ]; then
fi
sudo -E bash -c 'echo 3 > /proc/sys/vm/drop_caches'
-#load the module
-sudo -E $OPENAIR_DIR/cmake_targets/tools/init_exmimo2
+exmimo_mod=`lsmod |grep openair_rf`
+#load the module only if absent to avoid kernel crashes
+if [ -z "$exmimo_mod" ]
+then
+ sudo -E $OPENAIR_DIR/cmake_targets/tools/init_exmimo2
+fi
#now we stop the card from transmitting anything
cd $OPENAIR_DIR/targets/bin
diff --git a/common/utils/T/Makefile b/common/utils/T/Makefile
new file mode 100644
index 0000000000..dcb0d12fab
--- /dev/null
+++ b/common/utils/T/Makefile
@@ -0,0 +1,23 @@
+CC=gcc
+CFLAGS=-Wall -g
+
+GENIDS=genids
+GENIDS_OBJS=genids.o
+
+all : $(GENIDS) T_messages.txt.h T_IDs.h
+
+$(GENIDS): $(GENIDS_OBJS)
+ $(CC) $(CFLAGS) -o $(GENIDS) $(GENIDS_OBJS)
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+T_messages.txt.h: T_messages.txt
+ xxd -i T_messages.txt > T_messages.txt.h
+
+T_IDs.h: $(GENIDS) T_messages.txt
+ ./$(GENIDS) T_messages.txt T_IDs.h
+
+clean:
+ rm -f *.o $(GENIDS) core T_IDs.h T_messages.txt.h
+ cd tracer && make clean
diff --git a/common/utils/T/T.c b/common/utils/T/T.c
new file mode 100644
index 0000000000..786b3722ed
--- /dev/null
+++ b/common/utils/T/T.c
@@ -0,0 +1,181 @@
+#include "T.h"
+#include "T_messages.txt.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define QUIT(x) do { \
+ printf("T tracer: QUIT: %s\n", x); \
+ exit(1); \
+} while (0)
+
+/* array used to activate/disactivate a log */
+static int T_IDs[T_NUMBER_OF_IDS];
+int *T_active = T_IDs;
+
+static int T_socket;
+
+/* T_cache
+ * - the T macro picks up the head of freelist and marks it busy
+ * - the T sender thread periodically wakes up and sends what's to be sent
+ */
+volatile int _T_freelist_head;
+volatile int *T_freelist_head = &_T_freelist_head;
+T_cache_t *T_cache;
+
+static void get_message(int s)
+{
+ char t;
+ int l;
+ int id;
+ int is_on;
+
+ if (read(s, &t, 1) != 1) QUIT("get_message fails");
+printf("got mess %d\n", t);
+ switch (t) {
+ case 0:
+ /* toggle all those IDs */
+ /* optimze? (too much syscalls) */
+ if (read(s, &l, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
+ while (l) {
+ if (read(s, &id, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
+ T_IDs[id] = 1 - T_IDs[id];
+ l--;
+ }
+ break;
+ case 1:
+ /* set IDs as given */
+ /* optimize? */
+ if (read(s, &l, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
+ id = 0;
+ while (l) {
+ if (read(s, &is_on, sizeof(int)) != sizeof(int))
+ QUIT("get_message fails");
+ T_IDs[id] = is_on;
+ id++;
+ l--;
+ }
+ break;
+ case 2: break; /* do nothing, this message is to wait for local tracer */
+ }
+}
+
+static void *T_receive_thread(void *_)
+{
+ while (1) get_message(T_socket);
+ return NULL;
+}
+
+static void new_thread(void *(*f)(void *), void *data)
+{
+ pthread_t t;
+ pthread_attr_t att;
+
+ if (pthread_attr_init(&att))
+ { fprintf(stderr, "pthread_attr_init err\n"); exit(1); }
+ if (pthread_attr_setdetachstate(&att, PTHREAD_CREATE_DETACHED))
+ { fprintf(stderr, "pthread_attr_setdetachstate err\n"); exit(1); }
+ if (pthread_create(&t, &att, f, data))
+ { fprintf(stderr, "pthread_create err\n"); exit(1); }
+ if (pthread_attr_destroy(&att))
+ { fprintf(stderr, "pthread_attr_destroy err\n"); exit(1); }
+}
+
+/* defined in local_tracer.c */
+void T_local_tracer_main(int remote_port, int wait_for_tracer,
+ int local_socket);
+
+/* We monitor the tracee and the local tracer processes.
+ * When one dies we forcefully kill the other.
+ */
+#include
+#include
+static void monitor_and_kill(int child1, int child2)
+{
+ int child;
+ int status;
+
+ child = wait(&status);
+ if (child == -1) perror("wait");
+ kill(child1, SIGKILL);
+ kill(child2, SIGKILL);
+ exit(0);
+}
+
+void T_init(int remote_port, int wait_for_tracer)
+{
+ int socket_pair[2];
+ int s;
+ int T_shm_fd;
+ unsigned char *buf;
+ int len;
+ int child1, child2;
+
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair))
+ { perror("socketpair"); abort(); }
+
+ /* child1 runs the local tracer and child2 runs the tracee */
+
+ child1 = fork(); if (child1 == -1) abort();
+ if (child1 == 0) {
+ close(socket_pair[1]);
+ T_local_tracer_main(remote_port, wait_for_tracer, socket_pair[0]);
+ exit(0);
+ }
+ close(socket_pair[0]);
+
+ child2 = fork(); if (child2 == -1) abort();
+ if (child2 != 0) {
+ close(socket_pair[1]);
+ monitor_and_kill(child1, child2);
+ }
+
+ s = socket_pair[1];
+ /* wait for first message - initial list of active T events */
+ get_message(s);
+
+ T_socket = s;
+
+ /* setup shared memory */
+ T_shm_fd = shm_open(T_SHM_FILENAME, O_RDWR /*| O_SYNC*/, 0666);
+ shm_unlink(T_SHM_FILENAME);
+ if (T_shm_fd == -1) { perror(T_SHM_FILENAME); abort(); }
+ T_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t),
+ PROT_READ | PROT_WRITE, MAP_SHARED, T_shm_fd, 0);
+ if (T_cache == NULL)
+ { perror(T_SHM_FILENAME); abort(); }
+ close(T_shm_fd);
+
+ new_thread(T_receive_thread, NULL);
+
+ /* trace T_message.txt
+ * Send several messages -1 with content followed by message -2.
+ * We can't use the T macro directly, events -1 and -2 are special.
+ */
+ buf = T_messages_txt;
+ len = T_messages_txt_len;
+ while (len) {
+ int send_size = len;
+ if (send_size > T_PAYLOAD_MAXSIZE - sizeof(int))
+ send_size = T_PAYLOAD_MAXSIZE - sizeof(int);
+ do {
+ T_LOCAL_DATA
+ T_HEADER(T_ID(-1));
+ T_PUT_buffer(1, ((T_buffer){addr:(buf), length:(len)}));
+ T_COMMIT();
+ } while (0);
+ buf += send_size;
+ len -= send_size;
+ }
+ do {
+ T_LOCAL_DATA
+ T_HEADER(T_ID(-2));
+ T_COMMIT();
+ } while (0);
+}
diff --git a/common/utils/T/T.h b/common/utils/T/T.h
new file mode 100644
index 0000000000..a5aacb4b4f
--- /dev/null
+++ b/common/utils/T/T.h
@@ -0,0 +1,574 @@
+#ifndef _T_T_T_
+#define _T_T_T_
+
+#if T_TRACER
+
+#include
+
+#include "T_defs.h"
+
+#ifdef T_SEND_TIME
+#include
+#endif
+
+/* T message IDs */
+#include "T_IDs.h"
+
+/* known type - this is where you add new types */
+
+#define T_INT(x) int, (x)
+#define T_FLOAT(x) float, (x)
+#define T_BUFFER(x, len) buffer, ((T_buffer){addr:(x), length:(len)})
+#define T_STRING(x) string, (x)
+#define T_PRINTF(...) printf, (__VA_ARGS__)
+
+/* for each known type a T_PUT_XX macro is defined */
+
+#define T_PUT_int(argnum, val) \
+ do { \
+ int T_PUT_var = (val); \
+ T_CHECK_SIZE(sizeof(int), argnum); \
+ memcpy(T_LOCAL_buf + T_LOCAL_size, &T_PUT_var, sizeof(int)); \
+ T_LOCAL_size += sizeof(int); \
+ } while (0)
+
+#define T_PUT_ulong(argnum, val) \
+ do { \
+ unsigned long T_PUT_var = (val); \
+ T_CHECK_SIZE(sizeof(unsigned long), argnum); \
+ memcpy(T_LOCAL_buf + T_LOCAL_size, &T_PUT_var, sizeof(unsigned long)); \
+ T_LOCAL_size += sizeof(unsigned long); \
+ } while (0)
+
+#define T_PUT_float(argnum, val) \
+ do { \
+ float T_PUT_var = (val); \
+ T_CHECK_SIZE(sizeof(float), argnum); \
+ memcpy(T_LOCAL_buf + T_LOCAL_size, &T_PUT_var, sizeof(float)); \
+ T_LOCAL_size += sizeof(float); \
+ } while (0)
+
+#define T_PUT_buffer(argnum, val) \
+ do { \
+ T_buffer T_PUT_buffer_var = (val); \
+ T_PUT_int(argnum, T_PUT_buffer_var.length); \
+ T_CHECK_SIZE(T_PUT_buffer_var.length, argnum); \
+ memcpy(T_LOCAL_buf + T_LOCAL_size, T_PUT_buffer_var.addr, \
+ T_PUT_buffer_var.length); \
+ T_LOCAL_size += T_PUT_buffer_var.length; \
+ } while (0)
+
+#define T_PUT_string(argnum, val) \
+ do { \
+ char *T_PUT_var = (val); \
+ int T_PUT_len = strlen(T_PUT_var) + 1; \
+ T_CHECK_SIZE(T_PUT_len, argnum); \
+ memcpy(T_LOCAL_buf + T_LOCAL_size, T_PUT_var, T_PUT_len); \
+ T_LOCAL_size += T_PUT_len; \
+ } while (0)
+
+#define T_PUT_printf_deref(...) __VA_ARGS__
+
+#define T_PUT_printf(argnum, x) \
+ do { \
+ int T_PUT_len = snprintf(T_LOCAL_buf + T_LOCAL_size, \
+ T_BUFFER_MAX - T_LOCAL_size, T_PUT_printf_deref x); \
+ if (T_PUT_len < 0) { \
+ printf("%s:%d:%s: you can't read this, or can you?", \
+ __FILE__, __LINE__, __FUNCTION__); \
+ abort(); \
+ } \
+ if (T_PUT_len >= T_BUFFER_MAX - T_LOCAL_size) { \
+ printf("%s:%d:%s: cannot put argument %d in T macro, not enough space" \
+ ", consider increasing T_BUFFER_MAX (%d)\n", \
+ __FILE__, __LINE__, __FUNCTION__, argnum, T_BUFFER_MAX); \
+ abort(); \
+ } \
+ T_LOCAL_size += T_PUT_len + 1; \
+ } while (0)
+
+/* structure type to detect that you pass a known type as first arg of T */
+struct T_header;
+
+/* to define message ID */
+#define T_ID(x) ((struct T_header *)(uintptr_t)(x))
+
+/* T macro tricks */
+
+#define TN(...) TN_N(__VA_ARGS__,33,32,31,30,29,28,27,26,25,24,23,22,21,\
+ 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)(__VA_ARGS__)
+#define TN_N(n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,\
+ n18,n19,n20,n21,n22,n23,n24,n25,n26,n27,n28,n29,n30,n31,n32,n,...) T##n
+#define T(...) TN(__VA_ARGS__)
+
+/* type used to send arbitrary buffer data */
+typedef struct {
+ void *addr;
+ int length;
+} T_buffer;
+
+extern volatile int *T_freelist_head;
+extern T_cache_t *T_cache;
+
+/* used at header of Tn, allocates buffer */
+#define T_LOCAL_DATA \
+ char *T_LOCAL_buf; \
+ int T_LOCAL_size = 0; \
+ int T_LOCAL_slot; \
+ T_LOCAL_slot = __sync_fetch_and_add(T_freelist_head, 1) \
+ & (T_CACHE_SIZE - 1); \
+ (void)__sync_fetch_and_and(T_freelist_head, T_CACHE_SIZE - 1); \
+ if (T_cache[T_LOCAL_slot].busy) { \
+ printf("%s:%d:%s: T cache is full - consider increasing its size\n", \
+ __FILE__, __LINE__, __FUNCTION__); \
+ abort(); \
+ } \
+ T_LOCAL_buf = T_cache[T_LOCAL_slot].buffer;
+
+#define T_ACTIVE(x) T_active[(intptr_t)x]
+
+#define T_COMMIT() \
+ T_cache[T_LOCAL_slot].length = T_LOCAL_size; \
+ __sync_synchronize(); \
+ T_cache[T_LOCAL_slot].busy = 1; \
+
+#define T_CHECK_SIZE(len, argnum) \
+ if (T_LOCAL_size + (len) > T_BUFFER_MAX) { \
+ printf("%s:%d:%s: cannot put argument %d in T macro, not enough space" \
+ ", consider increasing T_BUFFER_MAX (%d)\n", \
+ __FILE__, __LINE__, __FUNCTION__, argnum, T_BUFFER_MAX); \
+ abort(); \
+ }
+
+#if 0
+#define T_PUT(type, var, argnum) \
+ do { \
+ if (T_LOCAL_size + sizeof(var) > T_BUFFER_MAX) { \
+ printf("%s:%d:%s: cannot put argument %d in T macro, not enough space" \
+ ", consider increasing T_BUFFER_MAX (%d)\n", \
+ __FILE__, __LINE__, __FUNCTION__, argnum, T_BUFFER_MAX); \
+ abort(); \
+ } \
+ memcpy(T_LOCAL_buf + T_LOCAL_size, &var, sizeof(var)); \
+ T_LOCAL_size += sizeof(var); \
+ } while (0)
+#endif
+
+#if 0
+#define T_PROCESS(x, argnum) \
+ do { \
+ T_PUT(typeof(x), x, argnum); \
+ } while (0)
+#endif
+
+#if 0
+#define T_PROCESS(x, argnum) \
+ do { \
+ if (__builtin_types_compatible_p(typeof(x), int)) \
+ { T_PUT(int, (intptr_t)(x), argnum); printf("int\n"); } \
+ else if (__builtin_types_compatible_p(typeof(x), short)) \
+ { T_PUT(short, (intptr_t)(x), argnum); printf("short\n"); } \
+ else if (__builtin_types_compatible_p(typeof(x), float)) \
+ { T_PUT(float, (x), argnum); printf("float\n"); } \
+ else if (__builtin_types_compatible_p(typeof(x), char *)) \
+ { T_PUT(char *, (char *)(intptr_t)(x), argnum); printf("char *\n"); } \
+ else if (__builtin_types_compatible_p(typeof(x), float *)) \
+ { T_PUT(float *, (float *)(intptr_t)(x), argnum); printf("float *\n"); } \
+ else if (__builtin_types_compatible_p(typeof(x), void *)) \
+ { T_PUT(void *, (void *)(intptr_t)(x), argnum); printf("void *\n"); } \
+ else { \
+ printf("%s:%d:%s: unsupported type for argument %d in T macro\n", \
+ __FILE__, __LINE__, __FUNCTION__, argnum); \
+ abort(); \
+ } \
+ } while (0)
+#endif
+
+#ifdef T_SEND_TIME
+
+#define T_HEADER(x) \
+ do { \
+ if (!__builtin_types_compatible_p(typeof(x), struct T_header *)) { \
+ printf("%s:%d:%s: " \
+ "bad use of T, pass a message ID as first parameter\n", \
+ __FILE__, __LINE__, __FUNCTION__); \
+ abort(); \
+ } \
+ struct timespec T_HEADER_time; \
+ if (clock_gettime(CLOCK_REALTIME, &T_HEADER_time)) abort(); \
+ memcpy(T_LOCAL_buf, &T_HEADER_time, sizeof(struct timespec)); \
+ T_LOCAL_size += sizeof(struct timespec); \
+ T_PUT_int(1, (int)(uintptr_t)(x)); \
+ } while (0)
+
+#else /* #ifdef T_SEND_TIME */
+
+#define T_HEADER(x) \
+ do { \
+ if (!__builtin_types_compatible_p(typeof(x), struct T_header *)) { \
+ printf("%s:%d:%s: " \
+ "bad use of T, pass a message ID as first parameter\n", \
+ __FILE__, __LINE__, __FUNCTION__); \
+ abort(); \
+ } \
+ T_PUT_int(1, (int)(uintptr_t)(x)); \
+ } while (0)
+
+#endif /* #ifdef T_SEND_TIME */
+
+#define T1(t) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T3(t,t0,x0) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T5(t,t0,x0,t1,x1) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T7(t,t0,x0,t1,x1,t2,x2) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T9(t,t0,x0,t1,x1,t2,x2,t3,x3) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T11(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T13(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_PUT_##t5(7, x5); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T15(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5,t6,x6) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_PUT_##t5(7, x5); \
+ T_PUT_##t6(8, x6); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T17(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5,t6,x6,t7,x7) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_PUT_##t5(7, x5); \
+ T_PUT_##t6(8, x6); \
+ T_PUT_##t7(9, x7); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T19(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5,t6,x6,t7,x7,t8,x8) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_PUT_##t5(7, x5); \
+ T_PUT_##t6(8, x6); \
+ T_PUT_##t7(9, x7); \
+ T_PUT_##t8(10, x8); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T21(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5,t6,x6,t7,x7,t8,x8,t9,x9) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_PUT_##t5(7, x5); \
+ T_PUT_##t6(8, x6); \
+ T_PUT_##t7(9, x7); \
+ T_PUT_##t8(10, x8); \
+ T_PUT_##t9(11, x9); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T23(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5,t6,x6,t7,x7,t8,x8,t9,x9,t10,x10) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_PUT_##t5(7, x5); \
+ T_PUT_##t6(8, x6); \
+ T_PUT_##t7(9, x7); \
+ T_PUT_##t8(10, x8); \
+ T_PUT_##t9(11, x9); \
+ T_PUT_##t10(12, x10); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T25(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5,t6,x6,t7,x7,t8,x8,t9,x9,t10,x10,t11,x11) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_PUT_##t5(7, x5); \
+ T_PUT_##t6(8, x6); \
+ T_PUT_##t7(9, x7); \
+ T_PUT_##t8(10, x8); \
+ T_PUT_##t9(11, x9); \
+ T_PUT_##t10(12, x10); \
+ T_PUT_##t11(13, x11); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T27(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5,t6,x6,t7,x7,t8,x8,t9,x9,t10,x10,t11,x11,t12,x12) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_PUT_##t5(7, x5); \
+ T_PUT_##t6(8, x6); \
+ T_PUT_##t7(9, x7); \
+ T_PUT_##t8(10, x8); \
+ T_PUT_##t9(11, x9); \
+ T_PUT_##t10(12, x10); \
+ T_PUT_##t11(13, x11); \
+ T_PUT_##t12(14, x12); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T29(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5,t6,x6,t7,x7,t8,x8,t9,x9,t10,x10,t11,x11,t12,x12,t13,x13) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_PUT_##t5(7, x5); \
+ T_PUT_##t6(8, x6); \
+ T_PUT_##t7(9, x7); \
+ T_PUT_##t8(10, x8); \
+ T_PUT_##t9(11, x9); \
+ T_PUT_##t10(12, x10); \
+ T_PUT_##t11(13, x11); \
+ T_PUT_##t12(14, x12); \
+ T_PUT_##t13(15, x13); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T31(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5,t6,x6,t7,x7,t8,x8,t9,x9,t10,x10,t11,x11,t12,x12,t13,x13,t14,x14) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_PUT_##t5(7, x5); \
+ T_PUT_##t6(8, x6); \
+ T_PUT_##t7(9, x7); \
+ T_PUT_##t8(10, x8); \
+ T_PUT_##t9(11, x9); \
+ T_PUT_##t10(12, x10); \
+ T_PUT_##t11(13, x11); \
+ T_PUT_##t12(14, x12); \
+ T_PUT_##t13(15, x13); \
+ T_PUT_##t14(16, x14); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T33(t,t0,x0,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5,t6,x6,t7,x7,t8,x8,t9,x9,t10,x10,t11,x11,t12,x12,t13,x13,t14,x14,t15,x15) \
+ do { \
+ if (T_ACTIVE(t)) { \
+ T_LOCAL_DATA \
+ T_HEADER(t); \
+ T_PUT_##t0(2, x0); \
+ T_PUT_##t1(3, x1); \
+ T_PUT_##t2(4, x2); \
+ T_PUT_##t3(5, x3); \
+ T_PUT_##t4(6, x4); \
+ T_PUT_##t5(7, x5); \
+ T_PUT_##t6(8, x6); \
+ T_PUT_##t7(9, x7); \
+ T_PUT_##t8(10, x8); \
+ T_PUT_##t9(11, x9); \
+ T_PUT_##t10(12, x10); \
+ T_PUT_##t11(13, x11); \
+ T_PUT_##t12(14, x12); \
+ T_PUT_##t13(15, x13); \
+ T_PUT_##t14(16, x14); \
+ T_PUT_##t15(17, x15); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T_CALL_ERROR \
+ do { \
+ printf("%s:%d:%s: error calling T, you have to use T_INT() or T_XX()\n", \
+ __FILE__, __LINE__, __FUNCTION__); \
+ } while (0)
+
+#define T2(...) T_CALL_ERROR
+#define T4(...) T_CALL_ERROR
+#define T6(...) T_CALL_ERROR
+#define T8(...) T_CALL_ERROR
+#define T10(...) T_CALL_ERROR
+#define T12(...) T_CALL_ERROR
+#define T14(...) T_CALL_ERROR
+#define T16(...) T_CALL_ERROR
+#define T18(...) T_CALL_ERROR
+#define T20(...) T_CALL_ERROR
+#define T22(...) T_CALL_ERROR
+#define T24(...) T_CALL_ERROR
+#define T26(...) T_CALL_ERROR
+#define T28(...) T_CALL_ERROR
+#define T30(...) T_CALL_ERROR
+#define T32(...) T_CALL_ERROR
+
+/* special cases for VCD logs */
+
+#define T_VCD_VARIABLE(var, val) \
+ do { \
+ if (T_ACTIVE(((var) + VCD_FIRST_VARIABLE))) { \
+ if ((var) > VCD_NUM_VARIABLES) { \
+ printf("%s:%d:%s: VCD data out of synch for the T, contact" \
+ " the authors!\n", __FILE__, __LINE__, __FUNCTION__); \
+ abort(); \
+ } \
+ T_LOCAL_DATA \
+ T_HEADER(T_ID((var) + VCD_FIRST_VARIABLE)); \
+ T_PUT_ulong(1, (val)); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+#define T_VCD_FUNCTION(fun, val) \
+ do { \
+ if (T_ACTIVE(((fun) + VCD_FIRST_FUNCTION))) { \
+ if ((fun) > VCD_NUM_FUNCTIONS) { \
+ printf("%s:%d:%s: VCD data out of synch for the T, contact" \
+ " the authors!\n", __FILE__, __LINE__, __FUNCTION__); \
+ abort(); \
+ } \
+ T_LOCAL_DATA \
+ T_HEADER(T_ID((fun) + VCD_FIRST_FUNCTION)); \
+ T_PUT_int(1, (val)); \
+ T_COMMIT(); \
+ } \
+ } while (0)
+
+extern int *T_active;
+
+void T_init(int remote_port, int wait_for_tracer);
+
+#else /* T_TRACER */
+
+/* if T_TRACER is not defined or is 0, the T is deactivated */
+#define T(...) /**/
+
+#endif /* T_TRACER */
+
+#endif /* _T_T_T_ */
diff --git a/common/utils/T/T_defs.h b/common/utils/T/T_defs.h
new file mode 100644
index 0000000000..b4fd47c0a5
--- /dev/null
+++ b/common/utils/T/T_defs.h
@@ -0,0 +1,43 @@
+#ifndef _T_defs_H_
+#define _T_defs_H_
+
+/* comment (and recompile everything) to not send time in events */
+#define T_SEND_TIME
+
+/* maximum number of arguments for the T macro */
+#define T_MAX_ARGS 16
+
+/* maximum size of a message - increase if needed */
+#define T_BUFFER_MAX (1024*64)
+
+/* size of the local cache for messages (must be pow(2,something)) */
+#define T_CACHE_SIZE (8192 * 2)
+
+/* maximum number of bytes a message can contain */
+#ifdef T_SEND_TIME
+# define T_PAYLOAD_MAXSIZE (T_BUFFER_MAX-sizeof(int)-sizeof(struct timespec))
+#else
+# define T_PAYLOAD_MAXSIZE (T_BUFFER_MAX-sizeof(int))
+#endif
+
+typedef struct {
+ volatile int busy;
+ char buffer[T_BUFFER_MAX];
+ int length;
+} T_cache_t;
+
+#define T_SHM_FILENAME "/T_shm_segment"
+
+/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
+#define VCD_NUM_FUNCTIONS 139
+
+/* number of VCD variables (to be kept up to date! see in T_messages.txt) */
+#define VCD_NUM_VARIABLES 45
+
+/* first VCD function (to be kept up to date! see in T_messages.txt) */
+#define VCD_FIRST_FUNCTION ((uintptr_t)T_VCD_FUNCTION_RT_SLEEP)
+
+/* first VCD variable (to be kept up to date! see in T_messages.txt) */
+#define VCD_FIRST_VARIABLE ((uintptr_t)T_VCD_VARIABLE_FRAME_NUMBER_TX_ENB)
+
+#endif /* _T_defs_H_ */
diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt
new file mode 100644
index 0000000000..ab3928f419
--- /dev/null
+++ b/common/utils/T/T_messages.txt
@@ -0,0 +1,1527 @@
+#general logs
+ID = ENB_MASTER_TICK
+ DESC = eNodeB master tick - one tick per ms, to be used as "reference clock", mostly for ticktime view
+ GROUP = ALL:GENERAL:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe
+
+#PHY logs
+ID = ENB_UL_TICK
+ DESC = eNodeB uplink tick - one tick per ms at start of uplink processing
+ GROUP = ALL:PHY:GRAPHIC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe
+ID = ENB_DL_TICK
+ DESC = eNodeB downlink tick - one tick per ms at start of downlink processing
+ GROUP = ALL:PHY:GRAPHIC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe
+ID = ENB_DLSCH_UE_DCI
+ DESC = eNodeB downlink UE specific DCI as sent by the PHY layer
+ GROUP = ALL:PHY:GRAPHIC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,dci_format : int,harq_pid
+ID = ENB_DLSCH_UE_ACK
+ DESC = eNodeB downlink UE ACK as seen by the PHY layer in process_HARQ_feedback
+ GROUP = ALL:PHY:GRAPHIC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
+ID = ENB_DLSCH_UE_NACK
+ DESC = eNodeB downlink UE NACK as seen by the PHY layer in process_HARQ_feedback
+ GROUP = ALL:PHY:GRAPHIC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
+ID = ENB_ULSCH_UE_DCI
+ DESC = eNodeB uplink UE specific DCI as sent by the PHY layer
+ GROUP = ALL:PHY:GRAPHIC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
+ID = ENB_ULSCH_UE_NO_DCI_RETRANSMISSION
+ DESC = eNodeB uplink UE retransmission due to PHICH NACK (see generate_phich_top)
+ GROUP = ALL:PHY:GRAPHIC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
+ID = ENB_ULSCH_UE_ACK
+ DESC = eNodeB uplink UE ACK as seen by the PHY layer
+ GROUP = ALL:PHY:GRAPHIC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
+ID = ENB_ULSCH_UE_NACK
+ DESC = eNodeB uplink UE NACK as seen by the PHY layer
+ GROUP = ALL:PHY:GRAPHIC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
+ID = ENB_INPUT_SIGNAL
+ DESC = eNodeB received signal in the time domain for a duration of 1ms
+ GROUP = ALL:PHY:GRAPHIC:HEAVY:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,antenna : buffer,rxdata
+ID = ENB_UL_CHANNEL_ESTIMATE
+ DESC = eNodeB channel estimation in the time domain
+ GROUP = ALL:PHY:GRAPHIC:HEAVY:ENB
+ FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,antenna : buffer,chest_t
+ID = PUSCH_IQ
+ DESC = eNodeB PUSCH received IQ data
+ GROUP = ALL:PHY:GRAPHIC:HEAVY:ENB
+ FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,nb_rb : buffer,pusch_comp
+ID = PUCCH_1AB_IQ
+ DESC = eNodeB PUCCH received IQ data
+ GROUP = ALL:PHY:GRAPHIC:HEAVY:ENB
+ FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,I : int,Q
+ID = PUCCH_1_ENERGY
+ DESC = eNodeB PUCCH 1 energy and threshold
+ GROUP = ALL:PHY:GRAPHIC:HEAVY:ENB
+ FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,energy : int,threshold
+
+#MAC logs
+ID = ENB_MAC_UE_DL_SDU
+ DESC = MAC downlink SDU for an UE coming from RLC to MAC
+ GROUP = ALL:MAC:ENB
+ FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,lcid : int,length
+ID = ENB_MAC_UE_UL_SCHEDULE
+ DESC = MAC uplink UE scheduling decision
+ GROUP = ALL:MAC:ENB
+ FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,mcs : int,first_rb : int,nb_rb : int,TBS
+ID = ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION
+ DESC = MAC uplink UE scheduling retransmission decision
+ GROUP = ALL:MAC:ENB
+ FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,mcs : int,first_rb : int,nb_rb : int,round
+ID = ENB_MAC_UE_UL_PDU
+ DESC = MAC uplink UE received PDU
+ GROUP = ALL:MAC:ENB
+ FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu
+ID = ENB_MAC_UE_UL_SDU
+ DESC = MAC uplink UE received SDU
+ GROUP = ALL:MAC:ENB
+ FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,lcid : int,length
+ID = ENB_MAC_UE_UL_CE
+ DESC = MAC uplink UE received control element
+ GROUP = ALL:MAC:ENB
+ FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,ce
+
+#RLC logs
+ID = ENB_RLC_DL
+ DESC = RLC downlink data
+ GROUP = ALL:RLC:ENB
+ FORMAT = int,eNB_ID : int,rnti : int,rb_id : int,length
+ID = ENB_RLC_UL
+ DESC = RLC uplink data
+ GROUP = ALL:RLC:ENB
+ FORMAT = int,eNB_ID : int,rnti : int,rb_id : int,length
+ID = ENB_RLC_MAC_DL
+ DESC = RLC downlink data
+ GROUP = ALL:RLC:ENB
+ FORMAT = int,eNB_ID : int,rnti : int,rb_id : int,length
+ID = ENB_RLC_MAC_UL
+ DESC = RLC uplink data
+ GROUP = ALL:RLC:ENB
+ FORMAT = int,eNB_ID : int,rnti : int,rb_id : int,length
+
+#PDCP logs
+ID = ENB_PDCP_UL
+ DESC = PDCP uplink data
+ GROUP = ALL:PDCP:ENB
+ FORMAT = int,eNB_ID : int,rnti : int,rb_id : int,length
+ID = ENB_PDCP_DL
+ DESC = PDCP uplink data
+ GROUP = ALL:PDCP:ENB
+ FORMAT = int,eNB_ID : int,rnti : int,rb_id : int,length
+
+#RRC logs
+ID = ENB_RRC_CONNECTION_SETUP_COMPLETE
+ DESC = RRC connection setup complete
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_SECURITY_MODE_COMMAND
+ DESC = RRC security mode command
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_SECURITY_MODE_COMPLETE
+ DESC = RRC security mode complete
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_SECURITY_MODE_FAILURE
+ DESC = RRC security mode failure
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_UE_CAPABILITY_ENQUIRY
+ DESC = RRC UE capability enquiry
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_UE_CAPABILITY_INFORMATION
+ DESC = RRC UE capability information
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_CONNECTION_REQUEST
+ DESC = RRC connection request
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_CONNECTION_REJECT
+ DESC = RRC connection reject
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_CONNECTION_REESTABLISHMENT_REQUEST
+ DESC = RRC connection reestablishment request
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_CONNECTION_REESTABLISHMENT_COMPLETE
+ DESC = RRC connection reestablishment complete
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_CONNECTION_REESTABLISHMENT_REJECT
+ DESC = RRC connection reestablishment reject
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_CONNECTION_RELEASE
+ DESC = RRC connection release
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_CONNECTION_RECONFIGURATION
+ DESC = RRC connection reconfiguration
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_MEASUREMENT_REPORT
+ DESC = RRC measurement report
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_HANDOVER_PREPARATION_INFORMATION
+ DESC = RRC handover preparation information
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_CONNECTION_RECONFIGURATION_COMPLETE
+ DESC = RRC connection reconfiguration complete
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_CONNECTION_SETUP
+ DESC = RRC connection setup
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_UL_CCCH_DATA_IN
+ DESC = RRC uplink CCCH data in
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_UL_DCCH_DATA_IN
+ DESC = RRC uplink DCCH data in
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_UL_HANDOVER_PREPARATION_TRANSFER
+ DESC = RRC uplink handover preparation transfer
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_UL_INFORMATION_TRANSFER
+ DESC = RRC uplink information transfer
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_COUNTER_CHECK_RESPONSE
+ DESC = RRC counter check response
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_UE_INFORMATION_RESPONSE_R9
+ DESC = RRC UE information response r9
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_PROXIMITY_INDICATION_R9
+ DESC = RRC proximity indication r9
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_RECONFIGURATION_COMPLETE_R10
+ DESC = RRC reconfiguration complete r10
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_MBMS_COUNTING_RESPONSE_R10
+ DESC = RRC MBMS counting response r10
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_INTER_FREQ_RSTD_MEASUREMENT_INDICATION
+ DESC = RRC inter frequency RSTD measurement indication
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+ID = ENB_RRC_UNKNOW_MESSAGE
+ DESC = RRC unknown message
+ GROUP = ALL:RRC:ENB
+ FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti
+
+#legacy logs
+ID = LEGACY_MAC_INFO
+ DESC = MAC legacy logs - info level
+ GROUP = ALL:LEGACY_MAC:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_MAC_ERROR
+ DESC = MAC legacy logs - error level
+ GROUP = ALL:LEGACY_MAC:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_MAC_WARNING
+ DESC = MAC legacy logs - warning level
+ GROUP = ALL:LEGACY_MAC:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_MAC_DEBUG
+ DESC = MAC legacy logs - debug level
+ GROUP = ALL:LEGACY_MAC:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_MAC_TRACE
+ DESC = MAC legacy logs - trace level
+ GROUP = ALL:LEGACY_MAC:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_PHY_INFO
+ DESC = PHY legacy logs - info level
+ GROUP = ALL:LEGACY_PHY:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_PHY_ERROR
+ DESC = PHY legacy logs - error level
+ GROUP = ALL:LEGACY_PHY:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_PHY_WARNING
+ DESC = PHY legacy logs - warning level
+ GROUP = ALL:LEGACY_PHY:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_PHY_DEBUG
+ DESC = PHY legacy logs - debug level
+ GROUP = ALL:LEGACY_PHY:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_PHY_TRACE
+ DESC = PHY legacy logs - trace level
+ GROUP = ALL:LEGACY_PHY:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_S1AP_INFO
+ DESC = S1AP legacy logs - info level
+ GROUP = ALL:LEGACY_S1AP:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_S1AP_ERROR
+ DESC = S1AP legacy logs - error level
+ GROUP = ALL:LEGACY_S1AP:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_S1AP_WARNING
+ DESC = S1AP legacy logs - warning level
+ GROUP = ALL:LEGACY_S1AP:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_S1AP_DEBUG
+ DESC = S1AP legacy logs - debug level
+ GROUP = ALL:LEGACY_S1AP:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_S1AP_TRACE
+ DESC = S1AP legacy logs - trace level
+ GROUP = ALL:LEGACY_S1AP:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_X2AP_INFO
+ DESC = X2AP legacy logs - info level
+ GROUP = ALL:LEGACY_X2AP:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_X2AP_ERROR
+ DESC = X2AP legacy logs - error level
+ GROUP = ALL:LEGACY_X2AP:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_X2AP_WARNING
+ DESC = X2AP legacy logs - warning level
+ GROUP = ALL:LEGACY_X2AP:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_X2AP_DEBUG
+ DESC = X2AP legacy logs - debug level
+ GROUP = ALL:LEGACY_X2AP:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_X2AP_TRACE
+ DESC = X2AP legacy logs - trace level
+ GROUP = ALL:LEGACY_X2AP:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_RRC_INFO
+ DESC = RRC legacy logs - info level
+ GROUP = ALL:LEGACY_RRC:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_RRC_ERROR
+ DESC = RRC legacy logs - error level
+ GROUP = ALL:LEGACY_RRC:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_RRC_WARNING
+ DESC = RRC legacy logs - warning level
+ GROUP = ALL:LEGACY_RRC:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_RRC_DEBUG
+ DESC = RRC legacy logs - debug level
+ GROUP = ALL:LEGACY_RRC:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_RRC_TRACE
+ DESC = RRC legacy logs - trace level
+ GROUP = ALL:LEGACY_RRC:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_RLC_INFO
+ DESC = RLC legacy logs - info level
+ GROUP = ALL:LEGACY_RLC:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_RLC_ERROR
+ DESC = RLC legacy logs - error level
+ GROUP = ALL:LEGACY_RLC:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_RLC_WARNING
+ DESC = RLC legacy logs - warning level
+ GROUP = ALL:LEGACY_RLC:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_RLC_DEBUG
+ DESC = RLC legacy logs - debug level
+ GROUP = ALL:LEGACY_RLC:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_RLC_TRACE
+ DESC = RLC legacy logs - trace level
+ GROUP = ALL:LEGACY_RLC:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_PDCP_INFO
+ DESC = PDCP legacy logs - info level
+ GROUP = ALL:LEGACY_PDCP:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_PDCP_ERROR
+ DESC = PDCP legacy logs - error level
+ GROUP = ALL:LEGACY_PDCP:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_PDCP_WARNING
+ DESC = PDCP legacy logs - warning level
+ GROUP = ALL:LEGACY_PDCP:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_PDCP_DEBUG
+ DESC = PDCP legacy logs - debug level
+ GROUP = ALL:LEGACY_PDCP:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_PDCP_TRACE
+ DESC = PDCP legacy logs - trace level
+ GROUP = ALL:LEGACY_PDCP:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_ENB_APP_INFO
+ DESC = ENB_APP legacy logs - info level
+ GROUP = ALL:LEGACY_ENB_APP:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_ENB_APP_ERROR
+ DESC = ENB_APP legacy logs - error level
+ GROUP = ALL:LEGACY_ENB_APP:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_ENB_APP_WARNING
+ DESC = ENB_APP legacy logs - warning level
+ GROUP = ALL:LEGACY_ENB_APP:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_ENB_APP_DEBUG
+ DESC = ENB_APP legacy logs - debug level
+ GROUP = ALL:LEGACY_ENB_APP:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_ENB_APP_TRACE
+ DESC = ENB_APP legacy logs - trace level
+ GROUP = ALL:LEGACY_ENB_APP:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_SCTP_INFO
+ DESC = SCTP legacy logs - info level
+ GROUP = ALL:LEGACY_SCTP:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_SCTP_ERROR
+ DESC = SCTP legacy logs - error level
+ GROUP = ALL:LEGACY_SCTP:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_SCTP_WARNING
+ DESC = SCTP legacy logs - warning level
+ GROUP = ALL:LEGACY_SCTP:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_SCTP_DEBUG
+ DESC = SCTP legacy logs - debug level
+ GROUP = ALL:LEGACY_SCTP:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_SCTP_TRACE
+ DESC = SCTP legacy logs - trace level
+ GROUP = ALL:LEGACY_SCTP:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_UDP__INFO
+ DESC = UDP_ legacy logs - info level
+ GROUP = ALL:LEGACY_UDP_:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_UDP__ERROR
+ DESC = UDP_ legacy logs - error level
+ GROUP = ALL:LEGACY_UDP_:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_UDP__WARNING
+ DESC = UDP_ legacy logs - warning level
+ GROUP = ALL:LEGACY_UDP_:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_UDP__DEBUG
+ DESC = UDP_ legacy logs - debug level
+ GROUP = ALL:LEGACY_UDP_:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_UDP__TRACE
+ DESC = UDP_ legacy logs - trace level
+ GROUP = ALL:LEGACY_UDP_:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_NAS_INFO
+ DESC = NAS legacy logs - info level
+ GROUP = ALL:LEGACY_NAS:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_NAS_ERROR
+ DESC = NAS legacy logs - error level
+ GROUP = ALL:LEGACY_NAS:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_NAS_WARNING
+ DESC = NAS legacy logs - warning level
+ GROUP = ALL:LEGACY_NAS:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_NAS_DEBUG
+ DESC = NAS legacy logs - debug level
+ GROUP = ALL:LEGACY_NAS:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_NAS_TRACE
+ DESC = NAS legacy logs - trace level
+ GROUP = ALL:LEGACY_NAS:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_HW_INFO
+ DESC = HW legacy logs - info level
+ GROUP = ALL:LEGACY_HW:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_HW_ERROR
+ DESC = HW legacy logs - error level
+ GROUP = ALL:LEGACY_HW:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_HW_WARNING
+ DESC = HW legacy logs - warning level
+ GROUP = ALL:LEGACY_HW:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_HW_DEBUG
+ DESC = HW legacy logs - debug level
+ GROUP = ALL:LEGACY_HW:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_HW_TRACE
+ DESC = HW legacy logs - trace level
+ GROUP = ALL:LEGACY_HW:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_EMU_INFO
+ DESC = EMU legacy logs - info level
+ GROUP = ALL:LEGACY_EMU:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_EMU_ERROR
+ DESC = EMU legacy logs - error level
+ GROUP = ALL:LEGACY_EMU:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_EMU_WARNING
+ DESC = EMU legacy logs - warning level
+ GROUP = ALL:LEGACY_EMU:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_EMU_DEBUG
+ DESC = EMU legacy logs - debug level
+ GROUP = ALL:LEGACY_EMU:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_EMU_TRACE
+ DESC = EMU legacy logs - trace level
+ GROUP = ALL:LEGACY_EMU:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_OTG_INFO
+ DESC = OTG legacy logs - info level
+ GROUP = ALL:LEGACY_OTG:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OTG_ERROR
+ DESC = OTG legacy logs - error level
+ GROUP = ALL:LEGACY_OTG:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OTG_WARNING
+ DESC = OTG legacy logs - warning level
+ GROUP = ALL:LEGACY_OTG:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OTG_DEBUG
+ DESC = OTG legacy logs - debug level
+ GROUP = ALL:LEGACY_OTG:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OTG_TRACE
+ DESC = OTG legacy logs - trace level
+ GROUP = ALL:LEGACY_OTG:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_OCG_INFO
+ DESC = OCG legacy logs - info level
+ GROUP = ALL:LEGACY_OCG:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OCG_ERROR
+ DESC = OCG legacy logs - error level
+ GROUP = ALL:LEGACY_OCG:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OCG_WARNING
+ DESC = OCG legacy logs - warning level
+ GROUP = ALL:LEGACY_OCG:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OCG_DEBUG
+ DESC = OCG legacy logs - debug level
+ GROUP = ALL:LEGACY_OCG:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OCG_TRACE
+ DESC = OCG legacy logs - trace level
+ GROUP = ALL:LEGACY_OCG:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_OCM_INFO
+ DESC = OCM legacy logs - info level
+ GROUP = ALL:LEGACY_OCM:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OCM_ERROR
+ DESC = OCM legacy logs - error level
+ GROUP = ALL:LEGACY_OCM:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OCM_WARNING
+ DESC = OCM legacy logs - warning level
+ GROUP = ALL:LEGACY_OCM:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OCM_DEBUG
+ DESC = OCM legacy logs - debug level
+ GROUP = ALL:LEGACY_OCM:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OCM_TRACE
+ DESC = OCM legacy logs - trace level
+ GROUP = ALL:LEGACY_OCM:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_OIP_INFO
+ DESC = OIP legacy logs - info level
+ GROUP = ALL:LEGACY_OIP:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OIP_ERROR
+ DESC = OIP legacy logs - error level
+ GROUP = ALL:LEGACY_OIP:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OIP_WARNING
+ DESC = OIP legacy logs - warning level
+ GROUP = ALL:LEGACY_OIP:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OIP_DEBUG
+ DESC = OIP legacy logs - debug level
+ GROUP = ALL:LEGACY_OIP:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OIP_TRACE
+ DESC = OIP legacy logs - trace level
+ GROUP = ALL:LEGACY_OIP:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_OMG_INFO
+ DESC = OMG legacy logs - info level
+ GROUP = ALL:LEGACY_OMG:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OMG_ERROR
+ DESC = OMG legacy logs - error level
+ GROUP = ALL:LEGACY_OMG:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OMG_WARNING
+ DESC = OMG legacy logs - warning level
+ GROUP = ALL:LEGACY_OMG:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OMG_DEBUG
+ DESC = OMG legacy logs - debug level
+ GROUP = ALL:LEGACY_OMG:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OMG_TRACE
+ DESC = OMG legacy logs - trace level
+ GROUP = ALL:LEGACY_OMG:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_OPT_INFO
+ DESC = OPT legacy logs - info level
+ GROUP = ALL:LEGACY_OPT:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OPT_ERROR
+ DESC = OPT legacy logs - error level
+ GROUP = ALL:LEGACY_OPT:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OPT_WARNING
+ DESC = OPT legacy logs - warning level
+ GROUP = ALL:LEGACY_OPT:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OPT_DEBUG
+ DESC = OPT legacy logs - debug level
+ GROUP = ALL:LEGACY_OPT:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OPT_TRACE
+ DESC = OPT legacy logs - trace level
+ GROUP = ALL:LEGACY_OPT:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_GTPU_INFO
+ DESC = GTPU legacy logs - info level
+ GROUP = ALL:LEGACY_GTPU:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_GTPU_ERROR
+ DESC = GTPU legacy logs - error level
+ GROUP = ALL:LEGACY_GTPU:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_GTPU_WARNING
+ DESC = GTPU legacy logs - warning level
+ GROUP = ALL:LEGACY_GTPU:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_GTPU_DEBUG
+ DESC = GTPU legacy logs - debug level
+ GROUP = ALL:LEGACY_GTPU:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_GTPU_TRACE
+ DESC = GTPU legacy logs - trace level
+ GROUP = ALL:LEGACY_GTPU:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_TMR_INFO
+ DESC = TMR legacy logs - info level
+ GROUP = ALL:LEGACY_TMR:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_TMR_ERROR
+ DESC = TMR legacy logs - error level
+ GROUP = ALL:LEGACY_TMR:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_TMR_WARNING
+ DESC = TMR legacy logs - warning level
+ GROUP = ALL:LEGACY_TMR:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_TMR_DEBUG
+ DESC = TMR legacy logs - debug level
+ GROUP = ALL:LEGACY_TMR:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_TMR_TRACE
+ DESC = TMR legacy logs - trace level
+ GROUP = ALL:LEGACY_TMR:TRACE:LEGACY
+ FORMAT = string,log
+
+ID = LEGACY_OSA_INFO
+ DESC = OSA legacy logs - info level
+ GROUP = ALL:LEGACY_OSA:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OSA_ERROR
+ DESC = OSA legacy logs - error level
+ GROUP = ALL:LEGACY_OSA:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OSA_WARNING
+ DESC = OSA legacy logs - warning level
+ GROUP = ALL:LEGACY_OSA:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OSA_DEBUG
+ DESC = OSA legacy logs - debug level
+ GROUP = ALL:LEGACY_OSA:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_OSA_TRACE
+ DESC = OSA legacy logs - trace level
+ GROUP = ALL:LEGACY_OSA:TRACE:LEGACY
+ FORMAT = string,log
+
+# this is a bad hack but I won't fix (function util_print_hex_octets
+# in openairinterface5g/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c
+# does funky things with the LOG_x macros but we work on the C pre-processor
+# level and this funkyness is not easily dealable with, so be it...)
+ID = LEGACY_component_INFO
+ DESC = component legacy logs - info level
+ GROUP = ALL:LEGACY_component:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_component_ERROR
+ DESC = component legacy logs - error level
+ GROUP = ALL:LEGACY_component:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_component_WARNING
+ DESC = component legacy logs - warning level
+ GROUP = ALL:LEGACY_component:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_component_DEBUG
+ DESC = component legacy logs - debug level
+ GROUP = ALL:LEGACY_component:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_component_TRACE
+ DESC = component legacy logs - trace level
+ GROUP = ALL:LEGACY_component:TRACE:LEGACY
+ FORMAT = string,log
+ID = LEGACY_componentP_INFO
+ DESC = componentP legacy logs - info level
+ GROUP = ALL:LEGACY_componentP:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_componentP_ERROR
+ DESC = componentP legacy logs - error level
+ GROUP = ALL:LEGACY_componentP:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_componentP_WARNING
+ DESC = componentP legacy logs - warning level
+ GROUP = ALL:LEGACY_componentP:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_componentP_DEBUG
+ DESC = componentP legacy logs - debug level
+ GROUP = ALL:LEGACY_componentP:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_componentP_TRACE
+ DESC = componentP legacy logs - trace level
+ GROUP = ALL:LEGACY_componentP:TRACE:LEGACY
+ FORMAT = string,log
+
+#needed?
+ID = LEGACY_CLI_INFO
+ DESC = CLI legacy logs - info level
+ GROUP = ALL:LEGACY_CLI:INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_CLI_ERROR
+ DESC = CLI legacy logs - error level
+ GROUP = ALL:LEGACY_CLI:ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_CLI_WARNING
+ DESC = CLI legacy logs - warning level
+ GROUP = ALL:LEGACY_CLI:WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_CLI_DEBUG
+ DESC = CLI legacy logs - debug level
+ GROUP = ALL:LEGACY_CLI:DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_CLI_TRACE
+ DESC = CLI legacy logs - trace level
+ GROUP = ALL:LEGACY_CLI:TRACE:LEGACY
+ FORMAT = string,log
+
+#for debug/test - not used
+ID = first
+ID = buf_test
+
+#VCD variables and functions
+
+#be careful! this must be synchronized with the code!
+#also keep up to date VCD_NUM_VARIABLES and VCD_NUM_FUNCTIONS in T_defs.h
+
+#to synchronize: copy/paste from openair2/UTIL/LOG/vcd_signal_dumper.h
+#the variables and functions name, replace "SIGNAL_DUMPER_VARIABLES" by
+#"VARIABLE" and "SIGNAL_DUMPER_FUNCTIONS" by "FUNCTION" (check that
+#everything is fine! for example we have
+#VCD_SIGNAL_DUMPER_VARIABLE_ITTI_SEND_MSG that has VARIABLE without S)
+#and then process with sed
+
+#to generate variables:
+#sed -e "s/ VCD_VARIABLE_\(.*\)/ID = VCD_VARIABLE_\1\n DESC = VCD variable \1\n GROUP = ALL:VCD:ENB\n FORMAT = ulong,value/" < VCD >> T_messages.txt
+
+#to generate functions:
+#sed -e "s/ VCD_FUNCTION_\(.*\)/ID = VCD_FUNCTION_\1\n DESC = VCD function \1\n GROUP = ALL:VCD:ENB\n FORMAT = int,value/" < VCD.functions >> T_messages.txt
+
+#you may want to manually edit groups for UE instead of eNB
+
+#then count functions and variables and update VCD_NUM_FUNCTIONS and
+#VCD_NUM_VARIABLES in T_defs.h
+
+#also verify that VCD_FIRST_FUNCTION and VCD_FIRST_VARIABLE are correct
+#in T_defs.h. They have to point to the first function and variable
+#as defined below. Note also that the order of the VCD functions
+#and variables must be the same as in the code.
+
+#variables
+
+ID = VCD_VARIABLE_FRAME_NUMBER_TX_ENB
+ DESC = VCD variable FRAME_NUMBER_TX_ENB
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_FRAME_NUMBER_RX_ENB
+ DESC = VCD variable FRAME_NUMBER_RX_ENB
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_RUNTIME_TX_ENB
+ DESC = VCD variable RUNTIME_TX_ENB
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_RUNTIME_RX_ENB
+ DESC = VCD variable RUNTIME_RX_ENB
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_FRAME_NUMBER_TX_UE
+ DESC = VCD variable FRAME_NUMBER_TX_UE
+ GROUP = ALL:VCD:UE:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_FRAME_NUMBER_RX_UE
+ DESC = VCD variable FRAME_NUMBER_RX_UE
+ GROUP = ALL:VCD:UE:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_SLOT_NUMBER_TX_UE
+ DESC = VCD variable SLOT_NUMBER_TX_UE
+ GROUP = ALL:VCD:UE:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_SLOT_NUMBER_RX_UE
+ DESC = VCD variable SLOT_NUMBER_RX_UE
+ GROUP = ALL:VCD:UE:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX_UE
+ DESC = VCD variable SUBFRAME_NUMBER_TX_UE
+ GROUP = ALL:VCD:UE:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX_UE
+ DESC = VCD variable SUBFRAME_NUMBER_RX_UE
+ GROUP = ALL:VCD:UE:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_MISSED_SLOTS_ENB
+ DESC = VCD variable MISSED_SLOTS_ENB
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_DAQ_MBOX
+ DESC = VCD variable DAQ_MBOX
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_UE_OFFSET_MBOX
+ DESC = VCD variable UE_OFFSET_MBOX
+ GROUP = ALL:VCD:UE:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_UE_RX_OFFSET
+ DESC = VCD variable UE_RX_OFFSET
+ GROUP = ALL:VCD:UE:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_DIFF
+ DESC = VCD variable DIFF
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_HW_SUBFRAME
+ DESC = VCD variable HW_SUBFRAME
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_HW_FRAME
+ DESC = VCD variable HW_FRAME
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_HW_SUBFRAME_RX
+ DESC = VCD variable HW_SUBFRAME_RX
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_HW_FRAME_RX
+ DESC = VCD variable HW_FRAME_RX
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_TXCNT
+ DESC = VCD variable TXCNT
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_RXCNT
+ DESC = VCD variable RXCNT
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_TRX_TS
+ DESC = VCD variable TRX_TS
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_TRX_TST
+ DESC = VCD variable TRX_TST
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_TX_TS
+ DESC = VCD variable TX_TS
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_RX_TS
+ DESC = VCD variable RX_TS
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_RX_HWCNT
+ DESC = VCD variable RX_HWCNT
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_RX_LHWCNT
+ DESC = VCD variable RX_LHWCNT
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_TX_HWCNT
+ DESC = VCD variable TX_HWCNT
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_TX_LHWCNT
+ DESC = VCD variable TX_LHWCNT
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_RX_PCK
+ DESC = VCD variable RX_PCK
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_TX_PCK
+ DESC = VCD variable TX_PCK
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_RX_SEQ_NUM
+ DESC = VCD variable RX_SEQ_NUM
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_RX_SEQ_NUM_PRV
+ DESC = VCD variable RX_SEQ_NUM_PRV
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_TX_SEQ_NUM
+ DESC = VCD variable TX_SEQ_NUM
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_CNT
+ DESC = VCD variable CNT
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_DUMMY_DUMP
+ DESC = VCD variable DUMMY_DUMP
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_ITTI_SEND_MSG
+ DESC = VCD variable ITTI_SEND_MSG
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_ITTI_POLL_MSG
+ DESC = VCD variable ITTI_POLL_MSG
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_ITTI_RECV_MSG
+ DESC = VCD variable ITTI_RECV_MSG
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_ITTI_ALLOC_MSG
+ DESC = VCD variable ITTI_ALLOC_MSG
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_MP_ALLOC
+ DESC = VCD variable MP_ALLOC
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_MP_FREE
+ DESC = VCD variable MP_FREE
+ GROUP = ALL:VCD:ENB:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_UE_INST_CNT_RX
+ DESC = VCD variable UE_INST_CNT_RX
+ GROUP = ALL:VCD:UE:VCD_VARIABLE
+ FORMAT = ulong,value
+ID = VCD_VARIABLE_UE_INST_CNT_TX
+ DESC = VCD variable UE_INST_CNT_TX
+ GROUP = ALL:VCD:UE:VCD_VARIABLE
+ FORMAT = ulong,value
+
+#functions
+
+ID = VCD_FUNCTION_RT_SLEEP
+ DESC = VCD function RT_SLEEP
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_TRX_READ
+ DESC = VCD function TRX_READ
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_TRX_WRITE
+ DESC = VCD function TRX_WRITE
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_TX0
+ DESC = VCD function eNB_PROC_TX0
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_RX0
+ DESC = VCD function eNB_PROC_RX0
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_TX1
+ DESC = VCD function eNB_PROC_TX1
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_RX1
+ DESC = VCD function eNB_PROC_RX1
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_TX2
+ DESC = VCD function eNB_PROC_TX2
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_RX2
+ DESC = VCD function eNB_PROC_RX2
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_TX3
+ DESC = VCD function eNB_PROC_TX3
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_RX3
+ DESC = VCD function eNB_PROC_RX3
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_TX4
+ DESC = VCD function eNB_PROC_TX4
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_RX4
+ DESC = VCD function eNB_PROC_RX4
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_TX5
+ DESC = VCD function eNB_PROC_TX5
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_RX5
+ DESC = VCD function eNB_PROC_RX5
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_TX6
+ DESC = VCD function eNB_PROC_TX6
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_RX6
+ DESC = VCD function eNB_PROC_RX6
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_TX7
+ DESC = VCD function eNB_PROC_TX7
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_RX7
+ DESC = VCD function eNB_PROC_RX7
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_TX8
+ DESC = VCD function eNB_PROC_TX8
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_RX8
+ DESC = VCD function eNB_PROC_RX8
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_TX9
+ DESC = VCD function eNB_PROC_TX9
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_RX9
+ DESC = VCD function eNB_PROC_RX9
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_THREAD_TX
+ DESC = VCD function UE_THREAD_TX
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_THREAD_RX
+ DESC = VCD function UE_THREAD_RX
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_TX
+ DESC = VCD function eNB_TX
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_RX
+ DESC = VCD function eNB_RX
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_TRX
+ DESC = VCD function eNB_TRX
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_TM
+ DESC = VCD function eNB_TM
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_RX_SLEEP
+ DESC = VCD function eNB_RX_SLEEP
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_TX_SLEEP
+ DESC = VCD function eNB_TX_SLEEP
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_eNB_PROC_SLEEP
+ DESC = VCD function eNB_PROC_SLEEP
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_TRX_READ_RF
+ DESC = VCD function TRX_READ_RF
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_TRX_WRITE_RF
+ DESC = VCD function TRX_WRITE_RF
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_SYNCH
+ DESC = VCD function UE_SYNCH
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_SLOT_FEP
+ DESC = VCD function UE_SLOT_FEP
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_RRC_MEASUREMENTS
+ DESC = VCD function UE_RRC_MEASUREMENTS
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_GAIN_CONTROL
+ DESC = VCD function UE_GAIN_CONTROL
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_ADJUST_SYNCH
+ DESC = VCD function UE_ADJUST_SYNCH
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_MEASUREMENT_PROCEDURES
+ DESC = VCD function UE_MEASUREMENT_PROCEDURES
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_PDCCH_PROCEDURES
+ DESC = VCD function UE_PDCCH_PROCEDURES
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_PBCH_PROCEDURES
+ DESC = VCD function UE_PBCH_PROCEDURES
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_TX
+ DESC = VCD function PHY_PROCEDURES_ENB_TX
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX
+ DESC = VCD function PHY_PROCEDURES_ENB_RX
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX
+ DESC = VCD function PHY_PROCEDURES_UE_TX
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_PROCEDURES_UE_RX
+ DESC = VCD function PHY_PROCEDURES_UE_RX
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_LTE
+ DESC = VCD function PHY_PROCEDURES_ENB_LTE
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_PROCEDURES_UE_LTE
+ DESC = VCD function PHY_PROCEDURES_UE_LTE
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PDSCH_THREAD
+ DESC = VCD function PDSCH_THREAD
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_THREAD0
+ DESC = VCD function DLSCH_THREAD0
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_THREAD1
+ DESC = VCD function DLSCH_THREAD1
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_THREAD2
+ DESC = VCD function DLSCH_THREAD2
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_THREAD3
+ DESC = VCD function DLSCH_THREAD3
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_THREAD4
+ DESC = VCD function DLSCH_THREAD4
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_THREAD5
+ DESC = VCD function DLSCH_THREAD5
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_THREAD6
+ DESC = VCD function DLSCH_THREAD6
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_THREAD7
+ DESC = VCD function DLSCH_THREAD7
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_DECODING0
+ DESC = VCD function DLSCH_DECODING0
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_DECODING1
+ DESC = VCD function DLSCH_DECODING1
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_DECODING2
+ DESC = VCD function DLSCH_DECODING2
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_DECODING3
+ DESC = VCD function DLSCH_DECODING3
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_DECODING4
+ DESC = VCD function DLSCH_DECODING4
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_DECODING5
+ DESC = VCD function DLSCH_DECODING5
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_DECODING6
+ DESC = VCD function DLSCH_DECODING6
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_DECODING7
+ DESC = VCD function DLSCH_DECODING7
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_RX_PDCCH
+ DESC = VCD function RX_PDCCH
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DCI_DECODING
+ DESC = VCD function DCI_DECODING
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_RX_PHICH
+ DESC = VCD function RX_PHICH
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_UE_CONFIG_SIB2
+ DESC = VCD function PHY_UE_CONFIG_SIB2
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_CONFIG_SIB1_ENB
+ DESC = VCD function PHY_CONFIG_SIB1_ENB
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_CONFIG_SIB2_ENB
+ DESC = VCD function PHY_CONFIG_SIB2_ENB
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_CONFIG_DEDICATED_ENB
+ DESC = VCD function PHY_CONFIG_DEDICATED_ENB
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_UE_COMPUTE_PRACH
+ DESC = VCD function PHY_UE_COMPUTE_PRACH
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_ENB_ULSCH_DECODING
+ DESC = VCD function PHY_ENB_ULSCH_DECODING
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_ENB_SFGEN
+ DESC = VCD function PHY_ENB_SFGEN
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_ENB_PRACH_RX
+ DESC = VCD function PHY_ENB_PRACH_RX
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_ENB_PDCCH_TX
+ DESC = VCD function PHY_ENB_PDCCH_TX
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PHY_ENB_RS_TX
+ DESC = VCD function PHY_ENB_RS_TX
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_GENERATE_PRACH
+ DESC = VCD function UE_GENERATE_PRACH
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_ULSCH_MODULATION
+ DESC = VCD function UE_ULSCH_MODULATION
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_ULSCH_ENCODING
+ DESC = VCD function UE_ULSCH_ENCODING
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_ULSCH_SCRAMBLING
+ DESC = VCD function UE_ULSCH_SCRAMBLING
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_ENB_DLSCH_MODULATION
+ DESC = VCD function ENB_DLSCH_MODULATION
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_ENB_DLSCH_ENCODING
+ DESC = VCD function ENB_DLSCH_ENCODING
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_ENB_DLSCH_SCRAMBLING
+ DESC = VCD function ENB_DLSCH_SCRAMBLING
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_MACPHY_INIT
+ DESC = VCD function MACPHY_INIT
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_MACPHY_EXIT
+ DESC = VCD function MACPHY_EXIT
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_ENB_DLSCH_ULSCH_SCHEDULER
+ DESC = VCD function ENB_DLSCH_ULSCH_SCHEDULER
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_FILL_RAR
+ DESC = VCD function FILL_RAR
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_TERMINATE_RA_PROC
+ DESC = VCD function TERMINATE_RA_PROC
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_INITIATE_RA_PROC
+ DESC = VCD function INITIATE_RA_PROC
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_CANCEL_RA_PROC
+ DESC = VCD function CANCEL_RA_PROC
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_GET_DCI_SDU
+ DESC = VCD function GET_DCI_SDU
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_GET_DLSCH_SDU
+ DESC = VCD function GET_DLSCH_SDU
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_RX_SDU
+ DESC = VCD function RX_SDU
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_MRBCH_PHY_SYNC_FAILURE
+ DESC = VCD function MRBCH_PHY_SYNC_FAILURE
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_SR_INDICATION
+ DESC = VCD function SR_INDICATION
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_DLSCH_PREPROCESSOR
+ DESC = VCD function DLSCH_PREPROCESSOR
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_SCHEDULE_DLSCH
+ DESC = VCD function SCHEDULE_DLSCH
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_FILL_DLSCH_DCI
+ DESC = VCD function FILL_DLSCH_DCI
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_OUT_OF_SYNC_IND
+ DESC = VCD function OUT_OF_SYNC_IND
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_DECODE_SI
+ DESC = VCD function UE_DECODE_SI
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_DECODE_CCCH
+ DESC = VCD function UE_DECODE_CCCH
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_DECODE_BCCH
+ DESC = VCD function UE_DECODE_BCCH
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_SEND_SDU
+ DESC = VCD function UE_SEND_SDU
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_GET_SDU
+ DESC = VCD function UE_GET_SDU
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_GET_RACH
+ DESC = VCD function UE_GET_RACH
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_PROCESS_RAR
+ DESC = VCD function UE_PROCESS_RAR
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_SCHEDULER
+ DESC = VCD function UE_SCHEDULER
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_GET_SR
+ DESC = VCD function UE_GET_SR
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UE_SEND_MCH_SDU
+ DESC = VCD function UE_SEND_MCH_SDU
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_RLC_DATA_REQ
+ DESC = VCD function RLC_DATA_REQ
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_MAC_RLC_STATUS_IND
+ DESC = VCD function MAC_RLC_STATUS_IND
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_MAC_RLC_DATA_REQ
+ DESC = VCD function MAC_RLC_DATA_REQ
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_MAC_RLC_DATA_IND
+ DESC = VCD function MAC_RLC_DATA_IND
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_RLC_UM_TRY_REASSEMBLY
+ DESC = VCD function RLC_UM_TRY_REASSEMBLY
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_RLC_UM_CHECK_TIMER_DAR_TIME_OUT
+ DESC = VCD function RLC_UM_CHECK_TIMER_DAR_TIME_OUT
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_RLC_UM_RECEIVE_PROCESS_DAR
+ DESC = VCD function RLC_UM_RECEIVE_PROCESS_DAR
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PDCP_RUN
+ DESC = VCD function PDCP_RUN
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PDCP_DATA_REQ
+ DESC = VCD function PDCP_DATA_REQ
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PDCP_DATA_IND
+ DESC = VCD function PDCP_DATA_IND
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PDCP_APPLY_SECURITY
+ DESC = VCD function PDCP_APPLY_SECURITY
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_PDCP_VALIDATE_SECURITY
+ DESC = VCD function PDCP_VALIDATE_SECURITY
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_RRC_RX_TX
+ DESC = VCD function RRC_RX_TX
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_RRC_MAC_CONFIG
+ DESC = VCD function RRC_MAC_CONFIG
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_RRC_UE_DECODE_SIB1
+ DESC = VCD function RRC_UE_DECODE_SIB1
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_RRC_UE_DECODE_SI
+ DESC = VCD function RRC_UE_DECODE_SI
+ GROUP = ALL:VCD:UE:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_GTPV1U_ENB_TASK
+ DESC = VCD function GTPV1U_ENB_TASK
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_GTPV1U_PROCESS_UDP_REQ
+ DESC = VCD function GTPV1U_PROCESS_UDP_REQ
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_GTPV1U_PROCESS_TUNNEL_DATA_REQ
+ DESC = VCD function GTPV1U_PROCESS_TUNNEL_DATA_REQ
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_UDP_ENB_TASK
+ DESC = VCD function UDP_ENB_TASK
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_EMU_TRANSPORT
+ DESC = VCD function EMU_TRANSPORT
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_LOG_RECORD
+ DESC = VCD function LOG_RECORD
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_ITTI_ENQUEUE_MESSAGE
+ DESC = VCD function ITTI_ENQUEUE_MESSAGE
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE
+ DESC = VCD function ITTI_DUMP_ENQUEUE_MESSAGE
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC
+ DESC = VCD function ITTI_DUMP_ENQUEUE_MESSAGE_MALLOC
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_ITTI_RELAY_THREAD
+ DESC = VCD function ITTI_RELAY_THREAD
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
+ID = VCD_FUNCTION_TEST
+ DESC = VCD function TEST
+ GROUP = ALL:VCD:ENB:VCD_FUNCTION
+ FORMAT = int,value
diff --git a/common/utils/T/defs.h b/common/utils/T/defs.h
new file mode 100644
index 0000000000..69b379ce0b
--- /dev/null
+++ b/common/utils/T/defs.h
@@ -0,0 +1,30 @@
+#ifndef _TRACER_DEFS_H_
+#define _TRACER_DEFS_H_
+
+/* types of plots */
+#define PLOT_VS_TIME 0
+#define PLOT_IQ_POINTS 1
+#define PLOT_MINMAX 2
+
+void new_thread(void *(*f)(void *), void *data);
+
+/* ... is { int count; int type; char *color; } for 'nplots' plots */
+void *make_plot(int width, int height, char *title, int nplots, ...);
+void plot_set(void *plot, float *data, int len, int pos, int pp);
+void iq_plot_set(void *plot, short *data, int len, int pos, int pp);
+void iq_plot_set_sized(void *_plot, short *data, int len, int pp);
+void iq_plot_add_iq_point_loop(void *_plot, short i, short q, int pp);
+void iq_plot_add_energy_point_loop(void *_plot, int e, int pp);
+
+/* returns an opaque pointer - truly a 'database *', see t_data.c */
+void *parse_database(char *filename);
+void dump_database(void *database);
+void list_ids(void *database);
+void list_groups(void *database);
+void on_off(void *d, char *item, int *a, int onoff);
+
+void *forwarder(char *ip, int port);
+void forward(void *forwarder, char *buf, int size);
+void forward_start_client(void *forwarder, int socket);
+
+#endif /* _TRACER_DEFS_H_ */
diff --git a/common/utils/T/generate_Txx.c b/common/utils/T/generate_Txx.c
new file mode 100644
index 0000000000..a32b554a71
--- /dev/null
+++ b/common/utils/T/generate_Txx.c
@@ -0,0 +1,25 @@
+#include
+
+void print(int n)
+{
+ int i;
+ printf("#define T%d(t", n);
+ for(i=0; i<(n-1)/2; i++) printf(",t%d,x%d", i, i);
+ printf(") \\\n");
+ printf(" do { \\\n");
+ printf(" if (T_ACTIVE(t)) { \\\n");
+ printf(" T_LOCAL_DATA \\\n");
+ printf(" T_HEADER(t); \\\n");
+ for(i=0; i<(n-1)/2; i++) printf(" T_PUT_##t%d(%d, x%d); \\\n", i, i+2, i);
+ printf(" T_COMMIT(); \\\n");
+ printf(" } \\\n");
+ printf(" } while (0)\n");
+ printf("\n");
+}
+
+int main(void)
+{
+ int i;
+ for (i = 11; i <= 33; i+=2) print(i);
+ return 0;
+}
diff --git a/common/utils/T/genids.c b/common/utils/T/genids.c
new file mode 100644
index 0000000000..734c506368
--- /dev/null
+++ b/common/utils/T/genids.c
@@ -0,0 +1,155 @@
+#include
+#include
+#include
+#include
+#include
+
+char **unique_ids;
+int unique_ids_size;
+int unique_ids_maxsize;
+
+int cmp(const void *p1, const void *p2)
+{
+ return strcmp(*(char * const *)p1, *(char * const *)p2);
+}
+
+/* return 1 if s was not already known, 0 if it was */
+int new_unique_id(char *s)
+{
+ if (unique_ids_size)
+ if (bsearch(&s, unique_ids, unique_ids_size, sizeof(char *), cmp) != NULL) {
+ printf("FATAL: ID %s is not unique\n", s);
+ return 0;
+ }
+ if (unique_ids_size == unique_ids_maxsize) {
+ unique_ids_maxsize += 256;
+ unique_ids = realloc(unique_ids, unique_ids_maxsize * sizeof(char *));
+ if (unique_ids == NULL) { printf("out of memory\n"); abort(); }
+ }
+ unique_ids[unique_ids_size] = strdup(s);
+ if (unique_ids[unique_ids_size] == NULL)
+ { printf("out of memory\n"); abort(); }
+ unique_ids_size++;
+ qsort(unique_ids, unique_ids_size, sizeof(char *), cmp);
+ return 1;
+}
+
+char *bufname;
+int bufname_size;
+int bufname_maxsize;
+
+void putname(int c)
+{
+ if (bufname_size == bufname_maxsize) {
+ bufname_maxsize += 256;
+ bufname = realloc(bufname, bufname_maxsize);
+ if (bufname == NULL) { printf("memory allocation error\n"); exit(1); }
+ }
+ bufname[bufname_size] = c;
+ bufname_size++;
+}
+
+char *bufvalue;
+int bufvalue_size;
+int bufvalue_maxsize;
+
+void putvalue(int c)
+{
+ if (bufvalue_size == bufvalue_maxsize) {
+ bufvalue_maxsize += 256;
+ bufvalue = realloc(bufvalue, bufvalue_maxsize);
+ if (bufvalue == NULL) { printf("memory allocation error\n"); exit(1); }
+ }
+ bufvalue[bufvalue_size] = c;
+ bufvalue_size++;
+}
+
+void smash_spaces(FILE *f)
+{
+ int c;
+ while (1) {
+ c = fgetc(f);
+ if (isspace(c)) continue;
+ if (c == ' ') continue;
+ if (c == '\t') continue;
+ if (c == '\n') continue;
+ if (c == 10 || c == 13) continue;
+ if (c == '#') {
+ while (1) {
+ c = fgetc(f);
+ if (c == '\n' || c == EOF) break;
+ }
+ continue;
+ }
+ break;
+ }
+ if (c != EOF) ungetc(c, f);
+}
+
+void get_line(FILE *f, char **name, char **value)
+{
+ int c;
+ bufname_size = 0;
+ bufvalue_size = 0;
+ *name = NULL;
+ *value = NULL;
+ smash_spaces(f);
+ c = fgetc(f);
+ while (!(c == '=' || isspace(c) || c == EOF)) { putname(c); c = fgetc(f); }
+ if (c == EOF) return;
+ putname(0);
+ while (!(c == EOF || c == '=')) c = fgetc(f);
+ if (c == EOF) return;
+ smash_spaces(f);
+ c = fgetc(f);
+ while (!(c == 10 || c == 13 || c == EOF)) { putvalue(c); c = fgetc(f); }
+ putvalue(0);
+ if (bufname_size <= 1) return;
+ if (bufvalue_size <= 1) return;
+ *name = bufname;
+ *value = bufvalue;
+}
+
+int main(int n, char **v)
+{
+ FILE *in;
+ FILE *out;
+ char *name;
+ char *value;
+ char *in_name;
+ char *out_name;
+
+ if (n != 3) { printf("gimme \n"); exit(1); }
+
+ n = 0;
+
+ in_name = v[1];
+ out_name = v[2];
+
+ in = fopen(in_name, "r"); if (in == NULL) { perror(in_name); exit(1); }
+ out = fopen(out_name, "w"); if (out == NULL) { perror(out_name); exit(1); }
+
+ fprintf(out, "/* generated file, do not edit by hand */\n\n");
+
+ while (1) {
+ get_line(in, &name, &value);
+ if (name == NULL) break;
+ printf("name '%s' value '%s'\n", name, value);
+ if (isspace(value[strlen(value)-1])) {
+ printf("bad value '%s' (no space at the end please!)\n", value);
+ unlink(out_name);
+ exit(1);
+ }
+ if (!strcmp(name, "ID")) {
+ if (!new_unique_id(value)) { unlink(out_name); exit(1); }
+ fprintf(out, "#define T_%s T_ID(%d)\n", value, n);
+ n++;
+ }
+ }
+ fprintf(out, "#define T_NUMBER_OF_IDS %d\n", n);
+
+ fclose(in);
+ fclose(out);
+
+ return 0;
+}
diff --git a/common/utils/T/local_tracer.c b/common/utils/T/local_tracer.c
new file mode 100644
index 0000000000..93a56a9e3d
--- /dev/null
+++ b/common/utils/T/local_tracer.c
@@ -0,0 +1,344 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "T_defs.h"
+#include "T_IDs.h"
+
+static T_cache_t *T_cache;
+static int T_busylist_head;
+
+typedef struct databuf {
+ char *d;
+ int l;
+ struct databuf *next;
+} databuf;
+
+typedef struct {
+ int socket_local;
+ volatile int socket_remote;
+ int remote_port;
+ pthread_mutex_t lock;
+ pthread_cond_t cond;
+ databuf * volatile head, *tail;
+ uint64_t memusage;
+ uint64_t last_warning_memusage;
+} forward_data;
+
+/****************************************************************************/
+/* utility functions */
+/****************************************************************************/
+
+static void new_thread(void *(*f)(void *), void *data)
+{
+ pthread_t t;
+ pthread_attr_t att;
+
+ if (pthread_attr_init(&att))
+ { fprintf(stderr, "pthread_attr_init err\n"); exit(1); }
+ if (pthread_attr_setdetachstate(&att, PTHREAD_CREATE_DETACHED))
+ { fprintf(stderr, "pthread_attr_setdetachstate err\n"); exit(1); }
+ if (pthread_attr_setstacksize(&att, 10000000))
+ { fprintf(stderr, "pthread_attr_setstacksize err\n"); exit(1); }
+ if (pthread_create(&t, &att, f, data))
+ { fprintf(stderr, "pthread_create err\n"); exit(1); }
+ if (pthread_attr_destroy(&att))
+ { fprintf(stderr, "pthread_attr_destroy err\n"); exit(1); }
+}
+
+static int get_connection(char *addr, int port)
+{
+ struct sockaddr_in a;
+ socklen_t alen;
+ int s, t;
+
+ printf("waiting for connection on %s:%d\n", addr, port);
+
+ s = socket(AF_INET, SOCK_STREAM, 0);
+ if (s == -1) { perror("socket"); exit(1); }
+ t = 1;
+ if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &t, sizeof(int)))
+ { perror("setsockopt"); exit(1); }
+
+ a.sin_family = AF_INET;
+ a.sin_port = htons(port);
+ a.sin_addr.s_addr = inet_addr(addr);
+
+ if (bind(s, (struct sockaddr *)&a, sizeof(a))) { perror("bind"); exit(1); }
+ if (listen(s, 5)) { perror("bind"); exit(1); }
+ alen = sizeof(a);
+ t = accept(s, (struct sockaddr *)&a, &alen);
+ if (t == -1) { perror("accept"); exit(1); }
+ close(s);
+
+ printf("connected\n");
+
+ return t;
+}
+
+/****************************************************************************/
+/* forward functions */
+/****************************************************************************/
+
+static void *data_sender(void *_f)
+{
+ forward_data *f = _f;
+ databuf *cur;
+ char *buf, *b;
+ int size;
+
+wait:
+ if (pthread_mutex_lock(&f->lock)) abort();
+ while (f->head == NULL)
+ if (pthread_cond_wait(&f->cond, &f->lock)) abort();
+ cur = f->head;
+ buf = cur->d;
+ size = cur->l;
+ f->head = cur->next;
+ f->memusage -= size;
+ if (f->head == NULL) f->tail = NULL;
+ if (pthread_mutex_unlock(&f->lock)) abort();
+ free(cur);
+ goto process;
+
+process:
+ b = buf;
+ if (f->socket_remote != -1)
+ while (size) {
+ int l = write(f->socket_remote, b, size);
+ if (l <= 0) {
+ printf("forward error\n");
+ close(f->socket_remote);
+ f->socket_remote = -1;
+ break;
+ }
+ size -= l;
+ b += l;
+ }
+
+ free(buf);
+
+ goto wait;
+}
+
+static void *forward_remote_messages(void *_f)
+{
+#define PUT(x) do { \
+ if (bufsize == bufmaxsize) { \
+ bufmaxsize += 4096; \
+ buf = realloc(buf, bufmaxsize); \
+ if (buf == NULL) abort(); \
+ } \
+ buf[bufsize] = x; \
+ bufsize++; \
+ } while (0)
+#define PUT_BUF(x, l) do { \
+ char *zz = (char *)(x); \
+ int len = l; \
+ while (len) { PUT(*zz); zz++; len--; } \
+ } while (0)
+
+ forward_data *f = _f;
+ int from;
+ int to;
+ int l, len;
+ char *b;
+ char *buf = NULL;
+ int bufsize = 0;
+ int bufmaxsize = 0;
+ char t;
+
+again:
+
+ while (1) {
+ from = f->socket_remote;
+ to = f->socket_local;
+
+ bufsize = 0;
+
+ /* let's read and process messages */
+ len = read(from, &t, 1); if (len <= 0) goto dead;
+ PUT(t);
+
+ switch (t) {
+ case 0:
+ case 1:
+ /* message 0 and 1: get a length and then 'length' numbers */
+ if (read(from, &len, sizeof(int)) != sizeof(int)) goto dead;
+ PUT_BUF(&len, 4);
+ while (len) {
+ if (read(from, &l, sizeof(int)) != sizeof(int)) goto dead;
+ PUT_BUF(&l, 4);
+ len--;
+ }
+ break;
+
+ case 2: break;
+ default:
+ printf("%s:%d:%s: unhandled message type %d\n",
+ __FILE__, __LINE__, __FUNCTION__, t);
+ abort();
+ }
+
+ b = buf;
+ while (bufsize) {
+ l = write(to, b, bufsize);
+ if (l <= 0) abort();
+ bufsize -= l;
+ b += l;
+ }
+ }
+
+dead:
+ /* socket died, let's stop all traces and wait for another tracer */
+ /* TODO: be careful with those write, they might write less than wanted */
+ buf[0] = 1;
+ if (write(to, buf, 1) != 1) abort();
+ len = T_NUMBER_OF_IDS;
+ if (write(to, &len, sizeof(int)) != sizeof(int)) abort();
+ l = 0;
+ while (len) {
+ if (write(to, &l, sizeof(int)) != sizeof(int)) abort();
+ len--;
+ };
+
+ close(f->socket_remote);
+ f->socket_remote = get_connection("0.0.0.0", f->remote_port);
+ goto again;
+
+ return NULL;
+}
+
+static void *forwarder(int port, int s)
+{
+ forward_data *f;
+
+ f = malloc(sizeof(*f)); if (f == NULL) abort();
+
+ pthread_mutex_init(&f->lock, NULL);
+ pthread_cond_init(&f->cond, NULL);
+
+ f->socket_local = s;
+ f->head = f->tail = NULL;
+
+ f->memusage = 0;
+ f->last_warning_memusage = 0;
+
+ printf("waiting for remote tracer on port %d\n", port);
+
+ f->remote_port = port;
+ f->socket_remote = get_connection("0.0.0.0", port);
+
+ new_thread(data_sender, f);
+ new_thread(forward_remote_messages, f);
+
+ return f;
+}
+
+static void forward(void *_forwarder, char *buf, int size)
+{
+ forward_data *f = _forwarder;
+ int32_t ssize = size;
+ databuf *new;
+
+ new = malloc(sizeof(*new)); if (new == NULL) abort();
+
+ if (pthread_mutex_lock(&f->lock)) abort();
+
+ new->d = malloc(size + 4); if (new->d == NULL) abort();
+ /* put the size of the message at the head */
+ memcpy(new->d, &ssize, 4);
+ memcpy(new->d+4, buf, size);
+ new->l = size+4;
+ new->next = NULL;
+ if (f->head == NULL) f->head = new;
+ if (f->tail != NULL) f->tail->next = new;
+ f->tail = new;
+
+ f->memusage += size+4;
+ /* warn every 100MB */
+ if (f->memusage > f->last_warning_memusage &&
+ f->memusage - f->last_warning_memusage > 100000000) {
+ f->last_warning_memusage += 100000000;
+ printf("WARNING: memory usage is over %"PRIu64"MB\n",
+ f->last_warning_memusage / 1000000);
+ } else
+ if (f->memusage < f->last_warning_memusage &&
+ f->last_warning_memusage - f->memusage > 100000000) {
+ f->last_warning_memusage = (f->memusage/100000000) * 100000000;
+ }
+
+ if (pthread_cond_signal(&f->cond)) abort();
+ if (pthread_mutex_unlock(&f->lock)) abort();
+}
+
+/****************************************************************************/
+/* local functions */
+/****************************************************************************/
+
+static void wait_message(void)
+{
+ while (T_cache[T_busylist_head].busy == 0) usleep(1000);
+}
+
+static void init_shm(void)
+{
+ int i;
+ int s = shm_open(T_SHM_FILENAME, O_RDWR | O_CREAT /*| O_SYNC*/, 0666);
+ if (s == -1) { perror(T_SHM_FILENAME); abort(); }
+ if (ftruncate(s, T_CACHE_SIZE * sizeof(T_cache_t)))
+ { perror(T_SHM_FILENAME); abort(); }
+ T_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t),
+ PROT_READ | PROT_WRITE, MAP_SHARED, s, 0);
+ if (T_cache == NULL)
+ { perror(T_SHM_FILENAME); abort(); }
+ close(s);
+
+ /* let's garbage the memory to catch some potential problems
+ * (think multiprocessor sync issues, barriers, etc.)
+ */
+ memset(T_cache, 0x55, T_CACHE_SIZE * sizeof(T_cache_t));
+ for (i = 0; i < T_CACHE_SIZE; i++) T_cache[i].busy = 0;
+}
+
+void T_local_tracer_main(int remote_port, int wait_for_tracer,
+ int local_socket)
+{
+ int s;
+ int port = remote_port;
+ int dont_wait = wait_for_tracer ? 0 : 1;
+ void *f;
+
+ /* write on a socket fails if the other end is closed and we get SIGPIPE */
+ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort();
+
+ init_shm();
+ s = local_socket;
+
+ if (dont_wait) {
+ char t = 2;
+ if (write(s, &t, 1) != 1) abort();
+ }
+
+ f = forwarder(port, s);
+
+ /* read messages */
+ while (1) {
+ wait_message();
+ __sync_synchronize();
+ forward(f, T_cache[T_busylist_head].buffer,
+ T_cache[T_busylist_head].length);
+ T_cache[T_busylist_head].busy = 0;
+ T_busylist_head++;
+ T_busylist_head &= T_CACHE_SIZE - 1;
+ }
+}
diff --git a/common/utils/T/plot.c b/common/utils/T/plot.c
new file mode 100644
index 0000000000..7447384288
--- /dev/null
+++ b/common/utils/T/plot.c
@@ -0,0 +1,291 @@
+#include "defs.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+typedef struct {
+ float *buf;
+ short *iqbuf;
+ int count;
+ int type;
+ volatile int iq_count; /* for ULSCH IQ data */
+ int iq_insert_pos;
+ GC g;
+} data;
+
+typedef struct {
+ Display *d;
+ Window w;
+ Pixmap px;
+ GC bg;
+ int width;
+ int height;
+ pthread_mutex_t lock;
+ float zoom;
+ int timer_pipe[2];
+ data *p; /* list of plots */
+ int nplots;
+} plot;
+
+static void *timer_thread(void *_p)
+{
+ plot *p = _p;
+ char c;
+
+ while (1) {
+ /* more or less 10Hz */
+ usleep(100*1000);
+ c = 1;
+ if (write(p->timer_pipe[1], &c, 1) != 1) abort();
+ }
+
+ return NULL;
+}
+
+static void *plot_thread(void *_p)
+{
+ float v;
+ float *s;
+ int i, j;
+ plot *p = _p;
+ int redraw = 0;
+ int replot = 0;
+ fd_set rset;
+ int xfd = ConnectionNumber(p->d);
+ int maxfd = xfd > p->timer_pipe[0] ? xfd : p->timer_pipe[0];
+ int pp;
+
+ while (1) {
+ while (XPending(p->d)) {
+ XEvent e;
+ XNextEvent(p->d, &e);
+ switch (e.type) {
+ case ButtonPress:
+ /* button 4: zoom out */
+ if (e.xbutton.button == 4) { p->zoom = p->zoom * 1.25; replot = 1; }
+ /* button 5: zoom in */
+ if (e.xbutton.button == 5) { p->zoom = p->zoom * 0.8; replot = 1; }
+ printf("zoom: %f\n", p->zoom);
+ break;
+ case Expose: redraw = 1; break;
+ }
+ }
+
+ if (replot == 1) {
+ replot = 0;
+ redraw = 1;
+
+ if (pthread_mutex_lock(&p->lock)) abort();
+
+ XFillRectangle(p->d, p->px, p->bg, 0, 0, p->width, p->height);
+
+ for (pp = 0; pp < p->nplots; pp++) {
+ if (p->p[pp].type == PLOT_MINMAX) {
+ s = p->p[pp].buf;
+ for (i = 0; i < 512; i++) {
+ int min = *s;
+ int max = *s;
+ for (j = 0; j < p->p[pp].count/512; j++, s++) {
+ if (*s < min) min = *s;
+ if (*s > max) max = *s;
+ }
+ XDrawLine(p->d, p->px, p->p[pp].g, i, 100-min, i, 100-max);
+ }
+ } else if (p->p[pp].type == PLOT_VS_TIME) {
+ for (i = 0; i < p->p[pp].count; i++)
+ p->p[pp].buf[i] =
+ 10*log10(1.0+(float)(p->p[pp].iqbuf[2*i]*p->p[pp].iqbuf[2*i]+
+ p->p[pp].iqbuf[2*i+1]*p->p[pp].iqbuf[2*i+1]));
+ s = p->p[pp].buf;
+ for (i = 0; i < 512; i++) {
+ v = 0;
+ for (j = 0; j < p->p[pp].count/512; j++, s++) v += *s;
+ v /= p->p[pp].count/512;
+ XDrawLine(p->d, p->px, p->p[pp].g, i, 100, i, 100-v);
+ }
+ } else if (p->p[pp].type == PLOT_IQ_POINTS) {
+ XPoint pts[p->p[pp].iq_count];
+ int count = p->p[pp].iq_count;
+ for (i = 0; i < count; i++) {
+ pts[i].x = p->p[pp].iqbuf[2*i]*p->zoom/20+50;
+ pts[i].y = -p->p[pp].iqbuf[2*i+1]*p->zoom/20+50;
+ }
+ XDrawPoints(p->d, p->px, p->p[pp].g, pts, count, CoordModeOrigin);
+ }
+ }
+
+ if (pthread_mutex_unlock(&p->lock)) abort();
+ }
+
+ if (redraw) {
+ redraw = 0;
+ XCopyArea(p->d, p->px, p->w, DefaultGC(p->d, DefaultScreen(p->d)),
+ 0, 0, p->width, p->height, 0, 0);
+ }
+
+ XFlush(p->d);
+
+ FD_ZERO(&rset);
+ FD_SET(p->timer_pipe[0], &rset);
+ FD_SET(xfd, &rset);
+ if (select(maxfd+1, &rset, NULL, NULL, NULL) == -1) abort();
+ if (FD_ISSET(p->timer_pipe[0], &rset)) {
+ char b[512];
+ if (read(p->timer_pipe[0], b, 512) <= 0) abort();
+ replot = 1;
+ }
+ }
+
+ return NULL;
+}
+
+void *make_plot(int width, int height, char *title, int nplots, ...)
+{
+ plot *p;
+ Display *d;
+ Window w;
+ Pixmap pm;
+ int i;
+ va_list ap;
+ XGCValues gcv;
+
+ p = malloc(sizeof(*p)); if (p == NULL) abort();
+
+ d = XOpenDisplay(0); if (d == NULL) abort();
+ w = XCreateSimpleWindow(d, DefaultRootWindow(d), 0, 0, width, height,
+ 0, WhitePixel(d, DefaultScreen(d)), WhitePixel(d, DefaultScreen(d)));
+ XSelectInput(d, w, ExposureMask | ButtonPressMask);
+ XMapWindow(d, w);
+
+ {
+ XSetWindowAttributes att;
+ att.backing_store = Always;
+ XChangeWindowAttributes(d, w, CWBackingStore, &att);
+ }
+
+ XStoreName(d, w, title);
+
+ p->bg = XCreateGC(d, w, 0, NULL);
+ XCopyGC(d, DefaultGC(d, DefaultScreen(d)), -1L, p->bg);
+ gcv.foreground = WhitePixel(d, DefaultScreen(d));
+ XChangeGC(d, p->bg, GCForeground, &gcv);
+
+ pm = XCreatePixmap(d, w, width, height, DefaultDepth(d, DefaultScreen(d)));
+
+ p->width = width;
+ p->height = height;
+ p->p = malloc(nplots * sizeof(data)); if (p->p == NULL) abort();
+
+ va_start(ap, nplots);
+ for (i = 0; i < nplots; i++) {
+ int count;
+ int type;
+ char *color;
+ XColor rcol, scol;
+
+ count = va_arg(ap, int);
+ type = va_arg(ap, int);
+ color = va_arg(ap, char *);
+
+ p->p[i].g = XCreateGC(d, w, 0, NULL);
+ XCopyGC(d, DefaultGC(d, DefaultScreen(d)), -1L, p->p[i].g);
+ if (XAllocNamedColor(d, DefaultColormap(d, DefaultScreen(d)),
+ color, &scol, &rcol)) {
+ gcv.foreground = scol.pixel;
+ XChangeGC(d, p->p[i].g, GCForeground, &gcv);
+ } else {
+ printf("could not allocate color '%s'\n", color);
+ abort();
+ }
+
+ if (type == PLOT_VS_TIME) {
+ p->p[i].buf = malloc(sizeof(float) * count);
+ if (p->p[i].buf == NULL) abort();
+ p->p[i].iqbuf = malloc(sizeof(short) * count * 2);
+ if(p->p[i].iqbuf==NULL)abort();
+ } else if (type == PLOT_MINMAX) {
+ p->p[i].buf = malloc(sizeof(float) * count);
+ if (p->p[i].buf == NULL) abort();
+ p->p[i].iqbuf = NULL;
+ } else {
+ p->p[i].buf = NULL;
+ p->p[i].iqbuf = malloc(sizeof(short) * count * 2);
+ if(p->p[i].iqbuf==NULL)abort();
+ }
+ p->p[i].count = count;
+ p->p[i].type = type;
+ p->p[i].iq_count = 0;
+ p->p[i].iq_insert_pos = 0;
+ }
+ va_end(ap);
+
+ p->d = d;
+ p->w = w;
+ p->px = pm;
+
+ p->zoom = 1;
+ p->nplots = nplots;
+
+ pthread_mutex_init(&p->lock, NULL);
+
+ if (pipe(p->timer_pipe)) abort();
+
+ new_thread(plot_thread, p);
+ new_thread(timer_thread, p);
+
+ return p;
+}
+
+void plot_set(void *_plot, float *data, int len, int pos, int pp)
+{
+ plot *p = _plot;
+ if (pthread_mutex_lock(&p->lock)) abort();
+ memcpy(p->p[pp].buf + pos, data, len * sizeof(float));
+ if (pthread_mutex_unlock(&p->lock)) abort();
+}
+
+void iq_plot_set(void *_plot, short *data, int count, int pos, int pp)
+{
+ plot *p = _plot;
+ if (pthread_mutex_lock(&p->lock)) abort();
+ memcpy(p->p[pp].iqbuf + pos * 2, data, count * 2 * sizeof(short));
+ if (pthread_mutex_unlock(&p->lock)) abort();
+}
+
+void iq_plot_set_sized(void *_plot, short *data, int count, int pp)
+{
+ plot *p = _plot;
+ if (pthread_mutex_lock(&p->lock)) abort();
+ memcpy(p->p[pp].iqbuf, data, count * 2 * sizeof(short));
+ p->p[pp].iq_count = count;
+ if (pthread_mutex_unlock(&p->lock)) abort();
+}
+
+void iq_plot_add_iq_point_loop(void *_plot, short i, short q, int pp)
+{
+ plot *p = _plot;
+ if (pthread_mutex_lock(&p->lock)) abort();
+ p->p[pp].iqbuf[p->p[pp].iq_insert_pos*2] = i;
+ p->p[pp].iqbuf[p->p[pp].iq_insert_pos*2+1] = q;
+ if (p->p[pp].iq_count != p->p[pp].count) p->p[pp].iq_count++;
+ p->p[pp].iq_insert_pos++;
+ if (p->p[pp].iq_insert_pos == p->p[pp].count) p->p[pp].iq_insert_pos = 0;
+ if (pthread_mutex_unlock(&p->lock)) abort();
+}
+
+void iq_plot_add_energy_point_loop(void *_plot, int e, int pp)
+{
+ plot *p = _plot;
+ if (pthread_mutex_lock(&p->lock)) abort();
+ p->p[pp].buf[p->p[pp].iq_insert_pos] = e;
+ if (p->p[pp].iq_count != p->p[pp].count) p->p[pp].iq_count++;
+ p->p[pp].iq_insert_pos++;
+ if (p->p[pp].iq_insert_pos == p->p[pp].count) p->p[pp].iq_insert_pos = 0;
+ if (pthread_mutex_unlock(&p->lock)) abort();
+}
diff --git a/common/utils/T/tracee/Makefile b/common/utils/T/tracee/Makefile
new file mode 100644
index 0000000000..703d49d029
--- /dev/null
+++ b/common/utils/T/tracee/Makefile
@@ -0,0 +1,14 @@
+CC=gcc
+CFLAGS=-Wall -g -pthread -DT_TRACER -I.
+
+PROG=tracee
+OBJS=tracee.o ../T.o
+
+$(PROG): $(OBJS)
+ $(CC) $(CFLAGS) -o $(PROG) $(OBJS) -lrt
+
+tracee.o: tracee.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+clean:
+ rm -f *.o $(PROG) core
diff --git a/common/utils/T/tracee/README b/common/utils/T/tracee/README
new file mode 100644
index 0000000000..f18dda85ac
--- /dev/null
+++ b/common/utils/T/tracee/README
@@ -0,0 +1 @@
+this is a very basic tracee, used to debug the tracer
diff --git a/common/utils/T/tracee/tracee.c b/common/utils/T/tracee/tracee.c
new file mode 100644
index 0000000000..86cf3012aa
--- /dev/null
+++ b/common/utils/T/tracee/tracee.c
@@ -0,0 +1,16 @@
+#include "../T.h"
+#include
+#include
+#include
+
+int main(void)
+{
+ int frame = 0;
+ T_connect_to_tracer("127.0.0.1", 2020);
+ while (1) {
+ getchar();
+ T(T_PUCCH_1AB_IQ, T_INT(0), T_INT(0), T_INT(frame), T_INT(0), T_INT(0), T_INT(0));
+ frame++;
+ }
+ return 0;
+}
diff --git a/common/utils/T/tracer/Makefile b/common/utils/T/tracer/Makefile
new file mode 100644
index 0000000000..bf0f72710c
--- /dev/null
+++ b/common/utils/T/tracer/Makefile
@@ -0,0 +1,47 @@
+CC=gcc
+CFLAGS=-Wall -g -pthread -DT_TRACER -I.
+
+#CFLAGS += -O3 -ffast-math -fomit-frame-pointer
+
+LIBS=-lX11 -lm -lpng -lXft
+
+all: textlog enb vcd
+
+textlog: utils.o textlog.o database.o event.o handler.o config.o \
+ event_selector.o view/view.a gui/gui.a logger/logger.a \
+ filter/filter.a
+ $(CC) $(CFLAGS) -o textlog $^ $(LIBS)
+
+enb: utils.o enb.o database.o event.o handler.o config.o \
+ event_selector.o view/view.a gui/gui.a logger/logger.a \
+ filter/filter.a
+ $(CC) $(CFLAGS) -o enb $^ $(LIBS)
+
+vcd: utils.o vcd.o database.o event.o handler.o config.o \
+ event_selector.o view/view.a gui/gui.a logger/logger.a \
+ filter/filter.a
+ $(CC) $(CFLAGS) -o vcd $^ $(LIBS)
+
+.PHONY: all gui/gui.a view/view.a logger/logger.a filter/filter.a
+
+gui/gui.a:
+ cd gui && make
+
+view/view.a:
+ cd view && make
+
+logger/logger.a:
+ cd logger && make
+
+filter/filter.a:
+ cd filter && make
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+clean:
+ rm -f *.o core tracer_remote textlog enb vcd
+ cd gui && make clean
+ cd view && make clean
+ cd logger && make clean
+ cd filter && make clean
diff --git a/common/utils/T/tracer/config.c b/common/utils/T/tracer/config.c
new file mode 100644
index 0000000000..f88966ed79
--- /dev/null
+++ b/common/utils/T/tracer/config.c
@@ -0,0 +1,62 @@
+#include "config.h"
+#include
+#include
+#include
+
+static char *local;
+static int local_size;
+static char *remote;
+static int remote_size;
+
+static char *PUT(char *to, int tosize, char c)
+{
+ if ((tosize & 4095) == 0) {
+ to = realloc(to, tosize + 4096); if (to == NULL) abort();
+ }
+ to[tosize] = c;
+ return to;
+}
+
+void clear_remote_config(void)
+{
+ free(remote);
+ remote = NULL;
+ remote_size = 0;
+}
+
+void append_received_config_chunk(char *buf, int length)
+{
+ int buflen = *(int *)buf;
+ if (buflen != length - sizeof(int)) {
+ printf("ERROR: bad trace -1, should not happen...\n");
+ abort();
+ }
+ buf += sizeof(int);
+ while (buflen) {
+ remote = PUT(remote, remote_size, *buf);
+ remote_size++;
+ buf++;
+ buflen--;
+ }
+}
+
+void load_config_file(char *filename)
+{
+ int c;
+ FILE *f = fopen(filename, "r");
+ if (f == NULL) { perror(filename); abort(); }
+ while (1) {
+ c = fgetc(f); if (c == EOF) break;
+ local = PUT(local, local_size, c);
+ local_size++;
+ }
+ fclose(f);
+}
+
+void verify_config(void)
+{
+ if (local_size != remote_size || memcmp(local, remote, local_size) != 0) {
+ printf("ERROR: local and remote T_messages.txt not identical\n");
+ abort();
+ }
+}
diff --git a/common/utils/T/tracer/config.h b/common/utils/T/tracer/config.h
new file mode 100644
index 0000000000..f90869eb66
--- /dev/null
+++ b/common/utils/T/tracer/config.h
@@ -0,0 +1,9 @@
+#ifndef _CONFIG_H_
+#define _CONFIG_H_
+
+void clear_remote_config(void);
+void append_received_config_chunk(char *buf, int length);
+void load_config_file(char *filename);
+void verify_config(void);
+
+#endif /* _CONFIG_H_ */
diff --git a/common/utils/T/tracer/database.c b/common/utils/T/tracer/database.c
new file mode 100644
index 0000000000..f0908948e2
--- /dev/null
+++ b/common/utils/T/tracer/database.c
@@ -0,0 +1,503 @@
+#include "database.h"
+#include "utils.h"
+#include
+#include
+#include
+#include
+
+typedef struct {
+ char *name;
+ char *desc;
+ char **groups;
+ int gsize;
+ char **arg_type;
+ char **arg_name;
+ int asize;
+ int id;
+} id;
+
+typedef struct {
+ char *name;
+ char **ids;
+ int size;
+} group;
+
+typedef struct {
+ char *name;
+ id *i;
+ int isize;
+ group *g;
+ int gsize;
+ int *id_to_pos;
+} database;
+
+typedef struct {
+ char *data;
+ int size;
+ int maxsize;
+} buffer;
+
+typedef struct {
+ buffer name;
+ buffer value;
+} parser;
+
+void put(buffer *b, int c)
+{
+ if (b->size == b->maxsize) {
+ b->maxsize += 256;
+ b->data = realloc(b->data, b->maxsize);
+ if (b->data == NULL) { printf("memory allocation error\n"); exit(1); }
+ }
+ b->data[b->size] = c;
+ b->size++;
+}
+
+void smash_spaces(FILE *f)
+{
+ int c;
+ while (1) {
+ c = fgetc(f);
+ if (isspace(c)) continue;
+ if (c == ' ') continue;
+ if (c == '\t') continue;
+ if (c == '\n') continue;
+ if (c == 10 || c == 13) continue;
+ if (c == '#') {
+ while (1) {
+ c = fgetc(f);
+ if (c == '\n' || c == EOF) break;
+ }
+ continue;
+ }
+ break;
+ }
+ if (c != EOF) ungetc(c, f);
+}
+
+void get_line(parser *p, FILE *f, char **name, char **value)
+{
+ int c;
+ p->name.size = 0;
+ p->value.size = 0;
+ *name = NULL;
+ *value = NULL;
+ smash_spaces(f);
+ c = fgetc(f);
+ while (!(c == '=' || isspace(c) || c == EOF))
+ { put(&p->name, c); c = fgetc(f); }
+ if (c == EOF) return;
+ put(&p->name, 0);
+ while (!(c == EOF || c == '=')) c = fgetc(f);
+ if (c == EOF) return;
+ smash_spaces(f);
+ c = fgetc(f);
+ while (!(c == 10 || c == 13 || c == EOF))
+ { put(&p->value, c); c = fgetc(f); }
+ put(&p->value, 0);
+ if (p->name.size <= 1) return;
+ if (p->value.size <= 1) return;
+ *name = p->name.data;
+ *value = p->value.data;
+}
+
+int group_cmp(const void *_p1, const void *_p2)
+{
+ const group *p1 = _p1;
+ const group *p2 = _p2;
+ return strcmp(p1->name, p2->name);
+}
+
+int id_cmp(const void *_p1, const void *_p2)
+{
+ const id *p1 = _p1;
+ const id *p2 = _p2;
+ return strcmp(p1->name, p2->name);
+}
+
+int string_cmp(const void *_p1, const void *_p2)
+{
+ char * const *p1 = _p1;
+ char * const *p2 = _p2;
+ return strcmp(*p1, *p2);
+}
+
+id *add_id(database *r, char *idname, int i)
+{
+ if (bsearch(&(id){name:idname}, r->i, r->isize, sizeof(id), id_cmp) != NULL)
+ { printf("ERROR: ID '%s' declared more than once\n", idname); exit(1); }
+ if ((r->isize & 1023) == 0) {
+ r->i = realloc(r->i, (r->isize + 1024) * sizeof(id));
+ if (r->i == NULL) { printf("out of memory\n"); exit(1); }
+ }
+ r->i[r->isize].name = strdup(idname);
+ if (r->i[r->isize].name == NULL) { printf("out of memory\n"); exit(1); }
+ r->i[r->isize].desc = NULL;
+ r->i[r->isize].groups = NULL;
+ r->i[r->isize].gsize = 0;
+ r->i[r->isize].arg_type = NULL;
+ r->i[r->isize].arg_name = NULL;
+ r->i[r->isize].asize = 0;
+ r->i[r->isize].id = i;
+ r->isize++;
+ qsort(r->i, r->isize, sizeof(id), id_cmp);
+ return (id*)bsearch(&(id){name:idname}, r->i, r->isize, sizeof(id), id_cmp);
+}
+
+group *get_group(database *r, char *group_name)
+{
+ group *ret;
+
+ ret = bsearch(&(group){name:group_name},
+ r->g, r->gsize, sizeof(group), group_cmp);
+ if (ret != NULL) return ret;
+
+ if ((r->gsize & 1023) == 0) {
+ r->g = realloc(r->g, (r->gsize + 1024) * sizeof(group));
+ if (r->g == NULL) abort();
+ }
+ r->g[r->gsize].name = strdup(group_name);
+ if (r->g[r->gsize].name == NULL) abort();
+ r->g[r->gsize].ids = NULL;
+ r->g[r->gsize].size = 0;
+ r->gsize++;
+
+ qsort(r->g, r->gsize, sizeof(group), group_cmp);
+
+ return bsearch(&(group){name:group_name},
+ r->g, r->gsize, sizeof(group), group_cmp);
+}
+
+void group_add_id(group *g, char *id)
+{
+ if ((g->size & 1023) == 0) {
+ g->ids = realloc(g->ids, (g->size + 1024) * sizeof(char *));
+ if (g->ids == NULL) abort();
+ }
+ g->ids[g->size] = id;
+ g->size++;
+}
+
+void id_add_group(id *i, char *group)
+{
+ char *g = bsearch(&group, i->groups, i->gsize, sizeof(char *), string_cmp);
+ if (g != NULL) return;
+
+ if ((i->gsize & 1023) == 0) {
+ i->groups = realloc(i->groups, (i->gsize+1024) * sizeof(char *));
+ if (i->groups == NULL) abort();
+ }
+ i->groups[i->gsize] = group;
+ i->gsize++;
+ qsort(i->groups, i->gsize, sizeof(char *), string_cmp);
+}
+
+void add_groups(database *r, id *i, char *groups)
+{
+ group *g;
+ if (i == NULL) {printf("ERROR: GROUP line before ID line\n");exit(1);}
+ while (1) {
+ char *start = groups;
+ char *end = start;
+ while (!isspace(*end) && *end != ':' && *end != 0) end++;
+ if (end == start) {
+ printf("bad group line: groups are seperated by ':'\n");
+ abort();
+ }
+ if (*end == 0) end = NULL; else *end = 0;
+
+ g = get_group(r, start);
+ group_add_id(g, i->name);
+ id_add_group(i, g->name);
+
+ if (end == NULL) break;
+ end++;
+ while ((isspace(*end) || *end == ':') && *end != 0) end++;
+ if (*end == 0) break;
+ groups = end;
+ }
+}
+
+void add_desc(id *i, char *desc)
+{
+ if (i == NULL) {printf("ERROR: DESC line before ID line\n");exit(1);}
+ i->desc = strdup(desc); if (i->desc == NULL) abort();
+}
+
+char *format_get_next_token(char **cur)
+{
+ char *start;
+ char *end;
+ char *ret;
+
+ start = *cur;
+
+ /* remove spaces */
+ while (*start && isspace(*start)) start ++;
+ if (*start == 0) return NULL;
+
+ /* special cases: ',' and ':' */
+ if (*start == ',' || *start == ':') { end = start + 1; goto special; }
+
+ end = start;
+
+ /* go to end of token */
+ while (*end && !isspace(*end) && *end != ',' && *end != ':') end++;
+
+special:
+ ret = malloc(end-start+1); if (ret == NULL) abort();
+ memcpy(ret, start, end-start);
+ ret[end-start] = 0;
+
+ *cur = end;
+ return ret;
+}
+
+void add_format(id *id, char *format)
+{
+ char *cur = format;
+ char *type;
+ char *name;
+ char *sep;
+ while (1) {
+ /* parse next type/name: expected " , :" */
+ /* get type */
+ type = format_get_next_token(&cur);
+ if (type == NULL) break;
+ /* get comma */
+ sep = format_get_next_token(&cur);
+ if (sep == NULL || strcmp(sep, ",") != 0) goto error;
+ free(sep);
+ /* get name */
+ name = format_get_next_token(&cur);
+ if (name == NULL) goto error;
+ /* if there is a next token it has to be : */
+ sep = format_get_next_token(&cur);
+ if (sep != NULL && strcmp(sep, ":") != 0) goto error;
+ free(sep);
+
+ /* add type/name */
+ if (id->asize % 64 == 0) {
+ id->arg_type = realloc(id->arg_type, (id->asize + 64) * sizeof(char *));
+ if (id->arg_type == NULL) abort();
+ id->arg_name = realloc(id->arg_name, (id->asize + 64) * sizeof(char *));
+ if (id->arg_name == NULL) abort();
+ }
+ id->arg_type[id->asize] = type;
+ id->arg_name[id->asize] = name;
+ id->asize++;
+ }
+ return;
+
+error:
+ printf("bad format '%s'\n", format);
+ abort();
+}
+
+void *parse_database(char *filename)
+{
+ FILE *in;
+ parser p;
+ database *r;
+ char *name, *value;
+ id *last_id = NULL;
+ int i;
+
+ r = calloc(1, sizeof(*r)); if (r == NULL) abort();
+ memset(&p, 0, sizeof(p));
+
+ r->name = strdup(filename); if (r->name == NULL) abort();
+
+ in = fopen(filename, "r"); if (in == NULL) { perror(filename); abort(); }
+
+ i = 0;
+
+ while (1) {
+ get_line(&p, in, &name, &value);
+ if (name == NULL) break;
+//printf("%s %s\n", name, value);
+ if (!strcmp(name, "ID")) { last_id = add_id(r, value, i); i++; }
+ if (!strcmp(name, "GROUP")) add_groups(r, last_id, value);
+ if (!strcmp(name, "DESC")) add_desc(last_id, value);
+ if (!strcmp(name, "FORMAT")) add_format(last_id, value);
+ }
+
+ fclose(in);
+ free(p.name.data);
+ free(p.value.data);
+
+ /* setup id_to_pos */
+ r->id_to_pos = malloc(sizeof(int) * r->isize);
+ if (r->id_to_pos == NULL) abort();
+ for (i = 0; i < r->isize; i++)
+ r->id_to_pos[r->i[i].id] = i;
+
+ return r;
+}
+
+void dump_database(void *_d)
+{
+ database *d = _d;
+ int i;
+
+ printf("database %s: %d IDs, %d GROUPs\n", d->name, d->isize, d->gsize);
+ for (i = 0; i < d->isize; i++) {
+ int j;
+ printf("ID %s [%s] [in %d group%s]\n",
+ d->i[i].name, d->i[i].desc ? d->i[i].desc : "",
+ d->i[i].gsize, d->i[i].gsize > 1 ? "s" : "");
+ for (j = 0; j < d->i[i].gsize; j++)
+ printf(" in GROUP: %s\n", d->i[i].groups[j]);
+ if (d->i[i].asize == 0) printf(" no FORMAT\n");
+ else {
+ int j;
+ printf(" FORMAT: ");
+ for (j = 0; j < d->i[i].asize; j++)
+ printf("'%s' , '%s' %s", d->i[i].arg_type[j], d->i[i].arg_name[j],
+ j == d->i[i].asize-1 ? "" : " : ");
+ printf("\n");
+ }
+ }
+ for (i = 0; i < d->gsize; i++) {
+ int j;
+ printf("GROUP %s [size %d]\n", d->g[i].name, d->g[i].size);
+ for (j = 0; j < d->g[i].size; j++)
+ printf(" contains ID: %s\n", d->g[i].ids[j]);
+ }
+}
+
+void list_ids(void *_d)
+{
+ database *d = _d;
+ int i;
+ for (i = 0; i < d->isize; i++) printf("%s\n", d->i[i].name);
+}
+
+void list_groups(void *_d)
+{
+ database *d = _d;
+ int i;
+ for (i = 0; i < d->gsize; i++) printf("%s\n", d->g[i].name);
+}
+
+static int onoff_id(database *d, char *name, int *a, int onoff)
+{
+ id *i;
+ i = bsearch(&(id){name:name}, d->i, d->isize, sizeof(id), id_cmp);
+ if (i == NULL) return 0;
+ a[i->id] = onoff;
+ printf("turning %s %s\n", onoff ? "ON" : "OFF", name);
+ return 1;
+}
+
+static int onoff_group(database *d, char *name, int *a, int onoff)
+{
+ group *g;
+ int i;
+ g = bsearch(&(group){name:name}, d->g, d->gsize, sizeof(group), group_cmp);
+ if (g == NULL) return 0;
+ for (i = 0; i < g->size; i++) onoff_id(d, g->ids[i], a, onoff);
+ return 1;
+}
+
+void on_off(void *_d, char *item, int *a, int onoff)
+{
+ int done;
+ database *d = _d;
+ int i;
+ if (item == NULL) {
+ for (i = 0; i < d->isize; i++) a[i] = onoff;
+ printf("turning %s all traces\n", onoff ? "ON" : "OFF");
+ return;
+ }
+ done = onoff_group(d, item, a, onoff);
+ done += onoff_id(d, item, a, onoff);
+ if (done == 0) {
+ printf("ERROR: ID/group '%s' not found in database\n", item);
+ exit(1);
+ }
+}
+
+char *event_name_from_id(void *_database, int id)
+{
+ database *d = _database;
+ return d->i[d->id_to_pos[id]].name;
+}
+
+int event_id_from_name(void *_database, char *name)
+{
+ database *d = _database;
+ id *i = (id*)bsearch(&(id){name:name}, d->i, d->isize, sizeof(id), id_cmp);
+ if (i == NULL)
+ { printf("%s:%d: '%s' not found\n", __FILE__, __LINE__, name); abort(); }
+ return i->id;
+}
+
+database_event_format get_format(void *_database, int event_id)
+{
+ database *d = _database;
+ database_event_format ret;
+
+ if (event_id < 0 || event_id >= d->isize) {
+ printf("%s:%d: bad event ID (%d)\n", __FILE__, __LINE__, event_id);
+ abort();
+ }
+
+ ret.type = d->i[d->id_to_pos[event_id]].arg_type;
+ ret.name = d->i[d->id_to_pos[event_id]].arg_name;
+ ret.count = d->i[d->id_to_pos[event_id]].asize;
+
+ return ret;
+}
+
+int number_of_ids(void *_d)
+{
+ database *d = _d;
+ return d->isize;
+}
+
+int database_get_ids(void *_d, char ***ids)
+{
+ database *d = _d;
+ int i;
+ *ids = malloc(d->isize * sizeof(char **)); if (*ids == NULL) abort();
+ for (i = 0; i < d->isize; i++) (*ids)[i] = d->i[i].name;
+ return d->isize;
+}
+
+int database_get_groups(void *_d, char ***groups)
+{
+ database *d = _d;
+ int i;
+ *groups = malloc(d->gsize * sizeof(char **)); if (*groups == NULL) abort();
+ for (i = 0; i < d->gsize; i++) (*groups)[i] = d->g[i].name;
+ return d->gsize;
+}
+
+int database_pos_to_id(void *_d, int pos)
+{
+ database *d = _d;
+ return d->i[pos].id;
+}
+
+void database_get_generic_description(void *_d, int id,
+ char **name, char **desc)
+{
+ database *d = _d;
+ int pos = d->id_to_pos[id];
+ OBUF o;
+ int i;
+ *name = strdup(d->i[pos].name); if (*name == NULL) abort();
+ o.osize = o.omaxsize = 0;
+ o.obuf = NULL;
+ PUTS(&o, *name);
+ for (i = 0; i < d->i[pos].asize; i++) {
+ PUTC(&o, ' ');
+ PUTS(&o, d->i[pos].arg_name[i]);
+ PUTS(&o, " [");
+ PUTS(&o, d->i[pos].arg_name[i]);
+ PUTS(&o, "]");
+ }
+ PUTC(&o, 0);
+ *desc = o.obuf;
+}
diff --git a/common/utils/T/tracer/database.h b/common/utils/T/tracer/database.h
new file mode 100644
index 0000000000..c5cab05d9f
--- /dev/null
+++ b/common/utils/T/tracer/database.h
@@ -0,0 +1,31 @@
+#ifndef _DATABASE_H_
+#define _DATABASE_H_
+
+/* returns an opaque pointer - truly a 'database *', see database.c */
+void *parse_database(char *filename);
+void dump_database(void *database);
+void list_ids(void *database);
+void list_groups(void *database);
+void on_off(void *d, char *item, int *a, int onoff);
+char *event_name_from_id(void *database, int id);
+int event_id_from_name(void *database, char *name);
+int number_of_ids(void *database);
+int database_get_ids(void *database, char ***ids);
+int database_get_groups(void *database, char ***groups);
+int database_pos_to_id(void *database, int pos);
+void database_get_generic_description(void *database, int id,
+ char **name, char **desc);
+
+/****************************************************************************/
+/* get format of an event */
+/****************************************************************************/
+
+typedef struct {
+ char **type;
+ char **name;
+ int count;
+} database_event_format;
+
+database_event_format get_format(void *database, int event_id);
+
+#endif /* _DATABASE_H_ */
diff --git a/common/utils/T/tracer/defs.h b/common/utils/T/tracer/defs.h
new file mode 100644
index 0000000000..443fabdde8
--- /dev/null
+++ b/common/utils/T/tracer/defs.h
@@ -0,0 +1,24 @@
+#ifndef _TRACER_DEFS_H_
+#define _TRACER_DEFS_H_
+
+/* types of plots */
+#define PLOT_VS_TIME 0
+#define PLOT_IQ_POINTS 1
+#define PLOT_MINMAX 2
+
+void new_thread(void *(*f)(void *), void *data);
+
+/* ... is { int count; int type; char *color; } for 'nplots' plots */
+void *make_plot(int width, int height, char *title, int nplots, ...);
+void plot_set(void *plot, float *data, int len, int pos, int pp);
+void iq_plot_set(void *plot, short *data, int len, int pos, int pp);
+void iq_plot_set_sized(void *_plot, short *data, int len, int pp);
+void iq_plot_add_iq_point_loop(void *_plot, short i, short q, int pp);
+void iq_plot_add_energy_point_loop(void *_plot, int e, int pp);
+
+/* T gui functions */
+void t_gui_start(void);
+void t_gui_set_input_signal(int eNB, int frame, int subframe, int antenna,
+ int size, void *buf);
+
+#endif /* _TRACER_DEFS_H_ */
diff --git a/common/utils/T/tracer/enb.c b/common/utils/T/tracer/enb.c
new file mode 100644
index 0000000000..8e8f3d8e72
--- /dev/null
+++ b/common/utils/T/tracer/enb.c
@@ -0,0 +1,573 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include "database.h"
+#include "event.h"
+#include "handler.h"
+#include "logger/logger.h"
+#include "view/view.h"
+#include "gui/gui.h"
+#include "filter/filter.h"
+#include "utils.h"
+#include "../T_defs.h"
+#include "event_selector.h"
+#include "openair_logo.h"
+#include "config.h"
+
+typedef struct {
+ view *phyview;
+ view *macview;
+ view *rlcview;
+ view *pdcpview;
+ view *rrcview;
+ view *legacy;
+} enb_gui;
+
+typedef struct {
+ int socket;
+ int *is_on;
+ int nevents;
+ pthread_mutex_t lock;
+} enb_data;
+
+#define DEFAULT_REMOTE_IP "127.0.0.1"
+#define DEFAULT_REMOTE_PORT 2021
+
+void is_on_changed(void *_d)
+{
+ enb_data *d = _d;
+ char t;
+
+ if (pthread_mutex_lock(&d->lock)) abort();
+
+ if (d->socket == -1) goto no_connection;
+
+ t = 1;
+ if (socket_send(d->socket, &t, 1) == -1 ||
+ socket_send(d->socket, &d->nevents, sizeof(int)) == -1 ||
+ socket_send(d->socket, d->is_on, d->nevents * sizeof(int)) == -1)
+ goto connection_dies;
+
+no_connection:
+ if (pthread_mutex_unlock(&d->lock)) abort();
+ return;
+
+connection_dies:
+ close(d->socket);
+ d->socket = -1;
+ if (pthread_mutex_unlock(&d->lock)) abort();
+}
+
+void usage(void)
+{
+ printf(
+"options:\n"
+" -d this option is mandatory\n"
+" -on turn log ON for given GROUP or ID\n"
+" -off turn log OFF for given GROUP or ID\n"
+" -ON turn all logs ON\n"
+" -OFF turn all logs OFF\n"
+" note: you may pass several -on/-off/-ON/-OFF,\n"
+" they will be processed in order\n"
+" by default, all is off\n"
+" -ip connect to given IP address (default %s)\n"
+" -p connect to given port (default %d)\n"
+" -debug-gui activate GUI debug logs\n",
+ DEFAULT_REMOTE_IP,
+ DEFAULT_REMOTE_PORT
+ );
+ exit(1);
+}
+
+static void *gui_thread(void *_g)
+{
+ gui *g = _g;
+ gui_loop(g);
+ return NULL;
+}
+
+static filter *ticktime_filter(void *database, char *event, int i)
+{
+ /* filter is "harq_pid == i && UE_id == 0 && eNB_id == 0" */
+ return
+ filter_and(
+ filter_eq(filter_evarg(database, event, "harq_pid"), filter_int(i)),
+ filter_and(
+ filter_eq(filter_evarg(database, event, "UE_id"), filter_int(0)),
+ filter_eq(filter_evarg(database, event, "eNB_ID"), filter_int(0))));
+}
+
+static void enb_main_gui(enb_gui *e, gui *g, event_handler *h, void *database)
+{
+ widget *main_window;
+ widget *top_container;
+ widget *line, *col;
+ widget *logo;
+ widget *input_signal_plot;
+ logger *input_signal_log;
+ view *input_signal_view;
+ widget *timeline_plot;
+ logger *timelog;
+ view *timeview;
+ view *subview;
+ widget *text;
+ view *textview;
+ int i;
+
+ main_window = new_toplevel_window(g, 800, 600, "eNB tracer");
+ top_container = new_container(g, VERTICAL);
+ widget_add_child(g, main_window, top_container, -1);
+
+ line = new_container(g, HORIZONTAL);
+ widget_add_child(g, top_container, line, -1);
+ logo = new_image(g, openair_logo_png, openair_logo_png_len);
+ widget_add_child(g, line, logo, -1);
+ input_signal_plot = new_xy_plot(g, 256, 55, "input signal", 20);
+ widget_add_child(g, line, input_signal_plot, -1);
+ xy_plot_set_range(g, input_signal_plot, 0, 7680*10, 20, 70);
+ input_signal_log = new_framelog(h, database,
+ "ENB_INPUT_SIGNAL", "subframe", "rxdata");
+ /* a skip value of 10 means to process 1 frame over 10, that is
+ * more or less 10 frames per second
+ */
+ framelog_set_skip(input_signal_log, 10);
+ input_signal_view = new_view_xy(7680*10, 10,
+ g, input_signal_plot, new_color(g, "#0c0c72"));
+ logger_add_view(input_signal_log, input_signal_view);
+
+ /* downlink/uplink UE DCIs */
+ widget_add_child(g, top_container,
+ new_label(g,"DL/UL TICK/DCI/ACK/NACK "), -1);
+ line = new_container(g, HORIZONTAL);
+ widget_add_child(g, top_container, line, -1);
+ timeline_plot = new_timeline(g, 512, 8, 5);
+ widget_add_child(g, line, timeline_plot, -1);
+ container_set_child_growable(g, line, timeline_plot, 1);
+ for (i = 0; i < 8; i++)
+ timeline_set_subline_background_color(g, timeline_plot, i,
+ new_color(g, i==0 || i==4 ? "#aaf" : "#eee"));
+ timeview = new_view_time(3600, 10, g, timeline_plot);
+ /* DL tick logging */
+ timelog = new_timelog(h, database, "ENB_DL_TICK");
+ subview = new_subview_time(timeview, 0, new_color(g, "#77c"), 3600*1000);
+ logger_add_view(timelog, subview);
+ /* DL DCI logging */
+ timelog = new_timelog(h, database, "ENB_DLSCH_UE_DCI");
+ subview = new_subview_time(timeview, 1, new_color(g, "#228"), 3600*1000);
+ logger_add_view(timelog, subview);
+ /* DL ACK */
+ timelog = new_timelog(h, database, "ENB_DLSCH_UE_ACK");
+ subview = new_subview_time(timeview, 2, new_color(g, "#282"), 3600*1000);
+ logger_add_view(timelog, subview);
+ /* DL NACK */
+ timelog = new_timelog(h, database, "ENB_DLSCH_UE_NACK");
+ subview = new_subview_time(timeview, 3, new_color(g, "#f22"), 3600*1000);
+ logger_add_view(timelog, subview);
+
+ /* UL tick logging */
+ timelog = new_timelog(h, database, "ENB_UL_TICK");
+ subview = new_subview_time(timeview, 4, new_color(g, "#77c"), 3600*1000);
+ logger_add_view(timelog, subview);
+ /* UL DCI logging */
+ timelog = new_timelog(h, database, "ENB_ULSCH_UE_DCI");
+ subview = new_subview_time(timeview, 5, new_color(g, "#228"), 3600*1000);
+ logger_add_view(timelog, subview);
+ /* UL retransmission without DCI logging */
+ timelog = new_timelog(h, database, "ENB_ULSCH_UE_NO_DCI_RETRANSMISSION");
+ subview = new_subview_time(timeview, 5, new_color(g, "#f22"), 3600*1000);
+ logger_add_view(timelog, subview);
+ /* UL ACK */
+ timelog = new_timelog(h, database, "ENB_ULSCH_UE_ACK");
+ subview = new_subview_time(timeview, 6, new_color(g, "#282"), 3600*1000);
+ logger_add_view(timelog, subview);
+ /* UL NACK */
+ timelog = new_timelog(h, database, "ENB_ULSCH_UE_NACK");
+ subview = new_subview_time(timeview, 7, new_color(g, "#f22"), 3600*1000);
+ logger_add_view(timelog, subview);
+
+ /* harq processes' ticktime view */
+ widget_add_child(g, top_container,
+ new_label(g,"DL/UL HARQ (x8) "), -1);
+ line = new_container(g, HORIZONTAL);
+ widget_add_child(g, top_container, line, -1);
+ timeline_plot = new_timeline(g, 512, 2*8+2, 3);
+ widget_add_child(g, line, timeline_plot, -1);
+ container_set_child_growable(g, line, timeline_plot, 1);
+ for (i = 0; i < 2*8+2; i++)
+ timeline_set_subline_background_color(g, timeline_plot, i,
+ new_color(g, i==0 || i==9 ? "#ddd" : (i%9)&1 ? "#e6e6e6" : "#eee"));
+ timeview = new_view_ticktime(10, g, timeline_plot);
+ ticktime_set_tick(timeview,
+ new_ticklog(h, database, "ENB_MASTER_TICK", "frame", "subframe"));
+ /* tick */
+ timelog = new_ticklog(h, database, "ENB_MASTER_TICK", "frame", "subframe");
+ /* tick on DL view */
+ subview = new_subview_ticktime(timeview, 0, new_color(g,"#bbb"), 3600*1000);
+ logger_add_view(timelog, subview);
+ /* tick on UL view */
+ subview = new_subview_ticktime(timeview, 9, new_color(g,"#bbb"), 3600*1000);
+ logger_add_view(timelog, subview);
+ /* DL harq pids */
+ for (i = 0; i < 8; i++) {
+ timelog = new_ticklog(h, database, "ENB_DLSCH_UE_DCI",
+ "frame", "subframe");
+ subview = new_subview_ticktime(timeview, i+1,
+ new_color(g,"#55f"), 3600*1000);
+ logger_add_view(timelog, subview);
+ logger_set_filter(timelog,
+ ticktime_filter(database, "ENB_DLSCH_UE_DCI", i));
+ }
+ /* DL ACK */
+ for (i = 0; i < 8; i++) {
+ timelog = new_ticklog(h, database, "ENB_DLSCH_UE_ACK",
+ "frame", "subframe");
+ subview = new_subview_ticktime(timeview, i+1,
+ new_color(g,"#282"), 3600*1000);
+ logger_add_view(timelog, subview);
+ logger_set_filter(timelog,
+ ticktime_filter(database, "ENB_DLSCH_UE_ACK", i));
+ }
+ /* DL NACK */
+ for (i = 0; i < 8; i++) {
+ timelog = new_ticklog(h, database, "ENB_DLSCH_UE_NACK",
+ "frame", "subframe");
+ subview = new_subview_ticktime(timeview, i+1,
+ new_color(g,"#f22"), 3600*1000);
+ logger_add_view(timelog, subview);
+ logger_set_filter(timelog,
+ ticktime_filter(database, "ENB_DLSCH_UE_NACK", i));
+ }
+ /* UL harq pids */
+ for (i = 0; i < 8; i++) {
+ /* first transmission */
+ timelog = new_ticklog(h, database, "ENB_ULSCH_UE_DCI",
+ "frame", "subframe");
+ subview = new_subview_ticktime(timeview, i+9+1,
+ new_color(g,"#55f"), 3600*1000);
+ logger_add_view(timelog, subview);
+ logger_set_filter(timelog,
+ ticktime_filter(database, "ENB_ULSCH_UE_DCI", i));
+ /* retransmission */
+ timelog = new_ticklog(h, database, "ENB_ULSCH_UE_NO_DCI_RETRANSMISSION",
+ "frame", "subframe");
+ subview = new_subview_ticktime(timeview, i+9+1,
+ new_color(g,"#99f"), 3600*1000);
+ logger_add_view(timelog, subview);
+ logger_set_filter(timelog,
+ ticktime_filter(database, "ENB_ULSCH_UE_NO_DCI_RETRANSMISSION", i));
+ }
+ /* UL ACK */
+ for (i = 0; i < 8; i++) {
+ timelog = new_ticklog(h, database, "ENB_ULSCH_UE_ACK",
+ "frame", "subframe");
+ subview = new_subview_ticktime(timeview, i+9+1,
+ new_color(g,"#282"), 3600*1000);
+ logger_add_view(timelog, subview);
+ logger_set_filter(timelog,
+ ticktime_filter(database, "ENB_ULSCH_UE_ACK", i));
+ }
+ /* UL NACK */
+ for (i = 0; i < 8; i++) {
+ timelog = new_ticklog(h, database, "ENB_ULSCH_UE_NACK",
+ "frame", "subframe");
+ subview = new_subview_ticktime(timeview, i+9+1,
+ new_color(g,"#f22"), 3600*1000);
+ logger_add_view(timelog, subview);
+ logger_set_filter(timelog,
+ ticktime_filter(database, "ENB_ULSCH_UE_NACK", i));
+ }
+
+ /* phy/mac/rlc/pdcp/rrc textlog */
+ line = new_container(g, HORIZONTAL);
+ widget_add_child(g, top_container, line, -1);
+ container_set_child_growable(g, top_container, line, 1);
+
+ /* phy */
+ col = new_container(g, VERTICAL);
+ widget_add_child(g, line, col, -1);
+ container_set_child_growable(g, line, col, 1);
+ widget_add_child(g, col, new_label(g, "PHY"), -1);
+ text = new_textlist(g, 100, 10, new_color(g, "#afa"));
+ widget_add_child(g, col, text, -1);
+ container_set_child_growable(g, col, text, 1);
+ textview = new_view_textlist(10000, 10, g, text);
+ e->phyview = textview;
+
+ /* mac */
+ col = new_container(g, VERTICAL);
+ widget_add_child(g, line, col, -1);
+ container_set_child_growable(g, line, col, 1);
+ widget_add_child(g, col, new_label(g, "MAC"), -1);
+ text = new_textlist(g, 100, 10, new_color(g, "#adf"));
+ widget_add_child(g, col, text, -1);
+ container_set_child_growable(g, col, text, 1);
+ textview = new_view_textlist(10000, 10, g, text);
+ e->macview = textview;
+
+ line = new_container(g, HORIZONTAL);
+ widget_add_child(g, top_container, line, -1);
+ container_set_child_growable(g, top_container, line, 1);
+
+ /* rlc */
+ col = new_container(g, VERTICAL);
+ widget_add_child(g, line, col, -1);
+ container_set_child_growable(g, line, col, 1);
+ widget_add_child(g, col, new_label(g, "RLC"), -1);
+ text = new_textlist(g, 100, 10, new_color(g, "#aff"));
+ widget_add_child(g, col, text, -1);
+ container_set_child_growable(g, col, text, 1);
+ textview = new_view_textlist(10000, 10, g, text);
+ e->rlcview = textview;
+
+ /* pdcp */
+ col = new_container(g, VERTICAL);
+ widget_add_child(g, line, col, -1);
+ container_set_child_growable(g, line, col, 1);
+ widget_add_child(g, col, new_label(g, "PDCP"), -1);
+ text = new_textlist(g, 100, 10, new_color(g, "#ed9"));
+ widget_add_child(g, col, text, -1);
+ container_set_child_growable(g, col, text, 1);
+ textview = new_view_textlist(10000, 10, g, text);
+ e->pdcpview = textview;
+
+ line = new_container(g, HORIZONTAL);
+ widget_add_child(g, top_container, line, -1);
+ container_set_child_growable(g, top_container, line, 1);
+
+ /* rrc */
+ col = new_container(g, VERTICAL);
+ widget_add_child(g, line, col, -1);
+ container_set_child_growable(g, line, col, 1);
+ widget_add_child(g, col, new_label(g, "RRC"), -1);
+ text = new_textlist(g, 100, 10, new_color(g, "#fdb"));
+ widget_add_child(g, col, text, -1);
+ container_set_child_growable(g, col, text, 1);
+ textview = new_view_textlist(10000, 10, g, text);
+ e->rrcview = textview;
+
+ /* legacy logs (LOG_I, LOG_D, ...) */
+ widget_add_child(g, top_container, new_label(g, "LEGACY"), -1);
+ text = new_textlist(g, 100, 10, new_color(g, "#eeb"));
+ widget_add_child(g, top_container, text, -1);
+ container_set_child_growable(g, top_container, text, 1);
+ e->legacy = new_view_textlist(10000, 10, g, text);
+}
+
+void view_add_log(view *v, char *log, event_handler *h, void *database,
+ int *is_on)
+{
+ logger *textlog;
+ char *name, *desc;
+
+ database_get_generic_description(database,
+ event_id_from_name(database, log), &name, &desc);
+ textlog = new_textlog(h, database, name, desc);
+ logger_add_view(textlog, v);
+ free(name);
+ free(desc);
+
+ on_off(database, log, is_on, 1);
+}
+
+int main(int n, char **v)
+{
+ extern int volatile gui_logd;
+ char *database_filename = NULL;
+ void *database;
+ char *ip = DEFAULT_REMOTE_IP;
+ int port = DEFAULT_REMOTE_PORT;
+ char **on_off_name;
+ int *on_off_action;
+ int on_off_n = 0;
+ int *is_on;
+ int number_of_events;
+ int i;
+ event_handler *h;
+ gui *g;
+ enb_gui eg;
+ enb_data enb_data;
+
+ /* write on a socket fails if the other end is closed and we get SIGPIPE */
+ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort();
+
+ on_off_name = malloc(n * sizeof(char *)); if (on_off_name == NULL) abort();
+ on_off_action = malloc(n * sizeof(int)); if (on_off_action == NULL) abort();
+
+ for (i = 1; i < n; i++) {
+ if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
+ if (!strcmp(v[i], "-d"))
+ { if (i > n-2) usage(); database_filename = v[++i]; continue; }
+ if (!strcmp(v[i], "-ip")) { if (i > n-2) usage(); ip = v[++i]; continue; }
+ if (!strcmp(v[i], "-p"))
+ { if (i > n-2) usage(); port = atoi(v[++i]); continue; }
+ if (!strcmp(v[i], "-on")) { if (i > n-2) usage();
+ on_off_name[on_off_n]=v[++i]; on_off_action[on_off_n++]=1; continue; }
+ if (!strcmp(v[i], "-off")) { if (i > n-2) usage();
+ on_off_name[on_off_n]=v[++i]; on_off_action[on_off_n++]=0; continue; }
+ if (!strcmp(v[i], "-ON"))
+ { on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=1; continue; }
+ if (!strcmp(v[i], "-OFF"))
+ { on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=0; continue; }
+ if (!strcmp(v[i], "-debug-gui")) { gui_logd = 1; continue; }
+ usage();
+ }
+
+ if (database_filename == NULL) {
+ printf("ERROR: provide a database file (-d)\n");
+ exit(1);
+ }
+
+ database = parse_database(database_filename);
+
+ load_config_file(database_filename);
+
+ number_of_events = number_of_ids(database);
+ is_on = calloc(number_of_events, sizeof(int));
+ if (is_on == NULL) abort();
+
+ h = new_handler(database);
+
+ g = gui_init();
+ new_thread(gui_thread, g);
+
+ enb_main_gui(&eg, g, h, database);
+
+ for (i = 0; i < number_of_events; i++) {
+ logger *textlog;
+ char *name, *desc;
+ database_get_generic_description(database, i, &name, &desc);
+ if (strncmp(name, "LEGACY_", 7) != 0) continue;
+ textlog = new_textlog(h, database, name, desc);
+ logger_add_view(textlog, eg.legacy);
+ free(name);
+ free(desc);
+ }
+
+ on_off(database, "ENB_INPUT_SIGNAL", is_on, 1);
+ on_off(database, "ENB_DL_TICK", is_on, 1);
+ on_off(database, "ENB_DLSCH_UE_DCI", is_on, 1);
+ on_off(database, "ENB_DLSCH_UE_ACK", is_on, 1);
+ on_off(database, "ENB_DLSCH_UE_NACK", is_on, 1);
+ on_off(database, "ENB_UL_TICK", is_on, 1);
+ on_off(database, "ENB_ULSCH_UE_DCI", is_on, 1);
+ on_off(database, "ENB_ULSCH_UE_NO_DCI_RETRANSMISSION", is_on, 1);
+ on_off(database, "ENB_ULSCH_UE_ACK", is_on, 1);
+ on_off(database, "ENB_ULSCH_UE_NACK", is_on, 1);
+ on_off(database, "ENB_MASTER_TICK", is_on, 1);
+
+ on_off(database, "LEGACY_RRC_INFO", is_on, 1);
+ on_off(database, "LEGACY_RRC_ERROR", is_on, 1);
+ on_off(database, "LEGACY_RRC_WARNING", is_on, 1);
+
+ view_add_log(eg.phyview, "ENB_DLSCH_UE_DCI", h, database, is_on);
+ view_add_log(eg.phyview, "ENB_DLSCH_UE_ACK", h, database, is_on);
+ view_add_log(eg.phyview, "ENB_DLSCH_UE_NACK", h, database, is_on);
+ view_add_log(eg.phyview, "ENB_ULSCH_UE_DCI", h, database, is_on);
+ view_add_log(eg.phyview, "ENB_ULSCH_UE_NO_DCI_RETRANSMISSION",
+ h, database, is_on);
+ view_add_log(eg.phyview, "ENB_ULSCH_UE_ACK", h, database, is_on);
+ view_add_log(eg.phyview, "ENB_ULSCH_UE_NACK", h, database, is_on);
+
+ view_add_log(eg.macview, "ENB_MAC_UE_DL_SDU", h, database, is_on);
+ view_add_log(eg.macview, "ENB_MAC_UE_UL_SCHEDULE", h, database, is_on);
+ view_add_log(eg.macview, "ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION",
+ h, database, is_on);
+ view_add_log(eg.macview, "ENB_MAC_UE_UL_PDU", h, database, is_on);
+ view_add_log(eg.macview, "ENB_MAC_UE_UL_SDU", h, database, is_on);
+ view_add_log(eg.macview, "ENB_MAC_UE_UL_CE", h, database, is_on);
+
+ view_add_log(eg.rlcview, "ENB_RLC_DL", h, database, is_on);
+ view_add_log(eg.rlcview, "ENB_RLC_UL", h, database, is_on);
+ view_add_log(eg.rlcview, "ENB_RLC_MAC_DL", h, database, is_on);
+ view_add_log(eg.rlcview, "ENB_RLC_MAC_UL", h, database, is_on);
+
+ view_add_log(eg.pdcpview, "ENB_PDCP_UL", h, database, is_on);
+ view_add_log(eg.pdcpview, "ENB_PDCP_DL", h, database, is_on);
+
+ view_add_log(eg.rrcview, "ENB_RRC_CONNECTION_SETUP_COMPLETE",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_SECURITY_MODE_COMMAND",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_UE_CAPABILITY_ENQUIRY",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_CONNECTION_REJECT",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_CONNECTION_REESTABLISHMENT_REJECT",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_CONNECTION_RELEASE",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_CONNECTION_RECONFIGURATION",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_MEASUREMENT_REPORT",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_HANDOVER_PREPARATION_INFORMATION",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_CONNECTION_RECONFIGURATION_COMPLETE",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_CONNECTION_SETUP",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_UL_CCCH_DATA_IN",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_UL_DCCH_DATA_IN",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_SECURITY_MODE_COMPLETE",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_SECURITY_MODE_FAILURE",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_UE_CAPABILITY_INFORMATION",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_CONNECTION_REQUEST",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_CONNECTION_REESTABLISHMENT_REQUEST",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_CONNECTION_REESTABLISHMENT_COMPLETE",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_UL_HANDOVER_PREPARATION_TRANSFER",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_UL_INFORMATION_TRANSFER",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_COUNTER_CHECK_RESPONSE",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_UE_INFORMATION_RESPONSE_R9",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_PROXIMITY_INDICATION_R9",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_RECONFIGURATION_COMPLETE_R10",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_MBMS_COUNTING_RESPONSE_R10",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_INTER_FREQ_RSTD_MEASUREMENT_INDICATION",
+ h, database, is_on);
+ view_add_log(eg.rrcview, "ENB_RRC_UNKNOW_MESSAGE",
+ h, database, is_on);
+
+ for (i = 0; i < on_off_n; i++)
+ on_off(database, on_off_name[i], is_on, on_off_action[i]);
+
+ enb_data.socket = -1;
+ enb_data.is_on = is_on;
+ enb_data.nevents = number_of_events;
+ if (pthread_mutex_init(&enb_data.lock, NULL)) abort();
+ setup_event_selector(g, database, is_on, is_on_changed, &enb_data);
+
+restart:
+ clear_remote_config();
+ enb_data.socket = connect_to(ip, port);
+
+ /* send the first message - activate selected traces */
+ is_on_changed(&enb_data);
+
+ /* read messages */
+ while (1) {
+ char v[T_BUFFER_MAX];
+ event e;
+ e = get_event(enb_data.socket, v, database);
+ if (e.type == -1) goto restart;
+ handle_event(h, e);
+ }
+
+ return 0;
+}
diff --git a/common/utils/T/tracer/event.c b/common/utils/T/tracer/event.c
new file mode 100644
index 0000000000..0917c010b3
--- /dev/null
+++ b/common/utils/T/tracer/event.c
@@ -0,0 +1,106 @@
+#include "event.h"
+#include "database.h"
+#include "utils.h"
+#include "config.h"
+#include
+#include
+#include
+
+event get_event(int socket, char *event_buffer, void *database)
+{
+#ifdef T_SEND_TIME
+ struct timespec t;
+#endif
+ int type;
+ int32_t length;
+
+ /* Events type -1 and -2 are special: the tracee sends its version
+ * of T_messages.txt using those events.
+ * We have to check that the local version of T_messages.txt is identical
+ * to the one the tracee uses. We don't report those events to the
+ * application.
+ */
+
+again:
+ if (fullread(socket, &length, 4) == -1) goto read_error;
+#ifdef T_SEND_TIME
+ if (fullread(socket, &t, sizeof(struct timespec)) == -1) goto read_error;
+ length -= sizeof(struct timespec);
+#endif
+ if (fullread(socket, &type, sizeof(int)) == -1) goto read_error;
+ length -= sizeof(int);
+ if (fullread(socket, event_buffer, length) == -1) goto read_error;
+
+ if (type == -1) append_received_config_chunk(event_buffer, length);
+ if (type == -2) verify_config();
+
+ if (type == -1 || type == -2) goto again;
+
+#ifdef T_SEND_TIME
+ return new_event(t, type, length, event_buffer, database);
+#else
+ return new_event(type, length, event_buffer, database);
+#endif
+
+read_error:
+ return (event){type: -1};
+}
+
+#ifdef T_SEND_TIME
+event new_event(struct timespec sending_time, int type,
+ int length, char *buffer, void *database)
+#else
+event new_event(int type, int length, char *buffer, void *database)
+#endif
+{
+ database_event_format f;
+ event e;
+ int i;
+ int offset;
+
+#ifdef T_SEND_TIME
+ e.sending_time = sending_time;
+#endif
+ e.type = type;
+ e.buffer = buffer;
+
+ f = get_format(database, type);
+
+ e.ecount = f.count;
+
+ offset = 0;
+
+ /* setup offsets */
+ /* TODO: speedup (no strcmp, string event to include length at head) */
+ for (i = 0; i < f.count; i++) {
+ //e.e[i].offset = offset;
+ if (!strcmp(f.type[i], "int")) {
+ e.e[i].type = EVENT_INT;
+ e.e[i].i = *(int *)(&buffer[offset]);
+ offset += 4;
+ } else if (!strcmp(f.type[i], "ulong")) {
+ e.e[i].type = EVENT_ULONG;
+ e.e[i].ul = *(unsigned long *)(&buffer[offset]);
+ offset += sizeof(unsigned long);
+ } else if (!strcmp(f.type[i], "string")) {
+ e.e[i].type = EVENT_STRING;
+ e.e[i].s = &buffer[offset];
+ while (buffer[offset]) offset++;
+ offset++;
+ } else if (!strcmp(f.type[i], "buffer")) {
+ int len;
+ e.e[i].type = EVENT_BUFFER;
+ len = *(int *)(&buffer[offset]);
+ e.e[i].bsize = len;
+ e.e[i].b = &buffer[offset+sizeof(int)];
+ offset += len+sizeof(int);
+ } else {
+ printf("unhandled type '%s'\n", f.type[i]);
+ abort();
+ }
+ }
+
+ if (e.ecount==0) { printf("FORMAT not set in event %d\n", type); abort(); }
+
+ return e;
+}
diff --git a/common/utils/T/tracer/event.h b/common/utils/T/tracer/event.h
new file mode 100644
index 0000000000..6272baf1a8
--- /dev/null
+++ b/common/utils/T/tracer/event.h
@@ -0,0 +1,49 @@
+#ifndef _EVENT_H_
+#define _EVENT_H_
+
+#include "../T_defs.h"
+#ifdef T_SEND_TIME
+#include
+#endif
+
+enum event_arg_type {
+ EVENT_INT,
+ EVENT_ULONG,
+ EVENT_STRING,
+ EVENT_BUFFER
+};
+
+typedef struct {
+ enum event_arg_type type;
+ //int offset;
+ union {
+ int i;
+ unsigned long ul;
+ char *s;
+ struct {
+ int bsize;
+ void *b;
+ };
+ };
+} event_arg;
+
+typedef struct {
+#ifdef T_SEND_TIME
+ struct timespec sending_time;
+#endif
+ int type;
+ char *buffer;
+ event_arg e[T_MAX_ARGS];
+ int ecount;
+} event;
+
+event get_event(int s, char *v, void *d);
+
+#ifdef T_SEND_TIME
+event new_event(struct timespec sending_time, int type,
+ int length, char *buffer, void *database);
+#else
+event new_event(int type, int length, char *buffer, void *database);
+#endif
+
+#endif /* _EVENT_H_ */
diff --git a/common/utils/T/tracer/event_selector.c b/common/utils/T/tracer/event_selector.c
new file mode 100644
index 0000000000..a03846c056
--- /dev/null
+++ b/common/utils/T/tracer/event_selector.c
@@ -0,0 +1,231 @@
+#include "event_selector.h"
+#include "gui/gui.h"
+#include "database.h"
+#include "utils.h"
+#include
+#include
+
+struct event_selector {
+ int *is_on;
+ int *is_on_paused; /* when pausing, is_on is set to all 0, this one
+ * is used to copy back data when un-pausing */
+ int red;
+ int green;
+ gui *g;
+ widget *events;
+ widget *groups;
+ void *database;
+ int nevents;
+ int ngroups;
+ int paused;
+ /* those three widgets used to pause/unpause reception of events */
+ widget *parent_widget;
+ widget *normal_widget;
+ widget *pause_widget;
+ void (*change_callback)(void *change_callback_data);
+ void *change_callback_data;
+};
+
+static void scroll(void *private, gui *g,
+ char *notification, widget *w, void *notification_data)
+{
+ int visible_lines;
+ int start_line;
+ int number_of_lines;
+ int new_line;
+ int inc;
+
+ textlist_state(g, w, &visible_lines, &start_line, &number_of_lines);
+ inc = 10;
+ if (inc > visible_lines - 2) inc = visible_lines - 2;
+ if (inc < 1) inc = 1;
+ if (!strcmp(notification, "scrollup")) inc = -inc;
+
+ new_line = start_line + inc;
+ if (new_line > number_of_lines - visible_lines)
+ new_line = number_of_lines - visible_lines;
+ if (new_line < 0) new_line = 0;
+
+ textlist_set_start_line(g, w, new_line);
+}
+
+static void click(void *private, gui *g,
+ char *notification, widget *w, void *notification_data)
+{
+ int *d = notification_data;
+ struct event_selector *this = private;
+ int set_on;
+ int line = d[0];
+ int button = d[1];
+ char *text;
+ int color;
+ int i;
+
+ /* notification_data depends on the kind of widget */
+ if (w == this->pause_widget) {
+ line = 0;
+ button = d[0];
+ } else {
+ line = d[0];
+ button = d[1];
+ }
+
+ /* middle-button toggles - redo with SPACE when keyboard is processed */
+ if (button == 2) {
+ if (this->paused == 0) {
+ widget_del_child(g, this->parent_widget, this->normal_widget);
+ widget_add_child(g, this->parent_widget, this->pause_widget, 0);
+ container_set_child_growable(g, this->parent_widget,
+ this->pause_widget, 1);
+ /* pause */
+ memcpy(this->is_on_paused, this->is_on, this->nevents * sizeof(int));
+ memset(this->is_on, 0, this->nevents * sizeof(int));
+ this->change_callback(this->change_callback_data);
+ } else {
+ widget_del_child(g, this->parent_widget, this->pause_widget);
+ widget_add_child(g, this->parent_widget, this->normal_widget, 0);
+ container_set_child_growable(g, this->parent_widget,
+ this->normal_widget, 1);
+ /* un-pause */
+ memcpy(this->is_on, this->is_on_paused, this->nevents * sizeof(int));
+ this->change_callback(this->change_callback_data);
+ }
+ this->paused = 1 - this->paused;
+ return;
+ }
+
+ if (w == this->pause_widget) return;
+
+ if (button != 1 && button != 3) return;
+
+ if (button == 1) set_on = 1; else set_on = 0;
+
+ if (w == this->events)
+ textlist_get_line(this->g, this->events, line, &text, &color);
+ else
+ textlist_get_line(this->g, this->groups, line, &text, &color);
+
+ on_off(this->database, text, this->is_on, set_on);
+
+ for (i = 0; i < this->nevents; i++)
+ textlist_set_color(this->g, this->events, i,
+ this->is_on[database_pos_to_id(this->database, i)] ?
+ this->green : this->red);
+
+ for (i = 0; i < this->ngroups; i++)
+ textlist_set_color(this->g, this->groups, i, FOREGROUND_COLOR);
+ if (w == this->groups)
+ textlist_set_color(this->g, this->groups, line,
+ set_on ? this->green : this->red);
+
+ this->change_callback(this->change_callback_data);
+}
+
+event_selector *setup_event_selector(gui *g, void *database, int *is_on,
+ void (*change_callback)(void *), void *change_callback_data)
+{
+ struct event_selector *ret;
+ widget *win;
+ widget *win_container;
+ widget *main_container;
+ widget *container;
+ widget *left, *right;
+ widget *events, *groups;
+ widget *pause_container;
+ char **ids;
+ char **gps;
+ int n;
+ int i;
+ int red, green;
+
+ ret = calloc(1, sizeof(struct event_selector)); if (ret == NULL) abort();
+
+ red = new_color(g, "#c93535");
+ green = new_color(g, "#2f9e2a");
+
+ win = new_toplevel_window(g, 470, 300, "event selector");
+ win_container = new_container(g, VERTICAL);
+ widget_add_child(g, win, win_container, -1);
+
+ main_container = new_container(g, VERTICAL);
+ widget_add_child(g, win_container, main_container, -1);
+ container_set_child_growable(g, win_container, main_container, 1);
+
+ container = new_container(g, HORIZONTAL);
+ widget_add_child(g, main_container, container, -1);
+ container_set_child_growable(g, main_container, container, 1);
+ widget_add_child(g, main_container,
+ new_label(g, "mouse scroll to scroll - "
+ "left click to activate - "
+ "right click to deactivate"), -1);
+
+ left = new_container(g, VERTICAL);
+ right = new_container(g, VERTICAL);
+ widget_add_child(g, container, left, -1);
+ widget_add_child(g, container, right, -1);
+ container_set_child_growable(g, container, left, 1);
+ container_set_child_growable(g, container, right, 1);
+
+ widget_add_child(g, left, new_label(g, "Events"), -1);
+ widget_add_child(g, right, new_label(g, "Groups"), -1);
+
+ events = new_textlist(g, 235, 10, new_color(g, "#b3c1e1"));
+ groups = new_textlist(g, 235, 10, new_color(g, "#edd6cb"));
+
+ widget_add_child(g, left, events, -1);
+ widget_add_child(g, right, groups, -1);
+ container_set_child_growable(g, left, events, 1);
+ container_set_child_growable(g, right, groups, 1);
+
+ pause_container = new_positioner(g);
+ widget_add_child(g, pause_container,
+ new_label(g,
+ "events' reception paused - click middle button to resume"), -1);
+ label_set_clickable(g, pause_container, 1);
+
+ n = database_get_ids(database, &ids);
+ for (i = 0; i < n; i++) {
+ textlist_add(g, events, ids[i], -1,
+ is_on[database_pos_to_id(database, i)] ? green : red);
+ }
+ free(ids);
+
+ ret->nevents = n;
+
+ ret->is_on_paused = calloc(n, sizeof(int));
+ if (ret->is_on_paused == NULL) abort();
+
+ n = database_get_groups(database, &gps);
+ for (i = 0; i < n; i++) {
+ textlist_add(g, groups, gps[i], -1, FOREGROUND_COLOR);
+ }
+ free(gps);
+
+ ret->ngroups = n;
+
+ ret->g = g;
+ ret->is_on = is_on;
+ ret->red = red;
+ ret->green = green;
+ ret->events = events;
+ ret->groups = groups;
+ ret->database = database;
+ ret->change_callback = change_callback;
+ ret->change_callback_data = change_callback_data;
+
+ ret->parent_widget = win_container;
+ ret->normal_widget = main_container;
+ ret->pause_widget = pause_container;
+
+ register_notifier(g, "scrollup", events, scroll, ret);
+ register_notifier(g, "scrolldown", events, scroll, ret);
+ register_notifier(g, "click", events, click, ret);
+
+ register_notifier(g, "scrollup", groups, scroll, ret);
+ register_notifier(g, "scrolldown", groups, scroll, ret);
+ register_notifier(g, "click", groups, click, ret);
+
+ register_notifier(g, "click", pause_container, click, ret);
+
+ return ret;
+}
diff --git a/common/utils/T/tracer/event_selector.h b/common/utils/T/tracer/event_selector.h
new file mode 100644
index 0000000000..dedd79965c
--- /dev/null
+++ b/common/utils/T/tracer/event_selector.h
@@ -0,0 +1,11 @@
+#ifndef _EVENT_SELECTOR_H_
+#define _EVENT_SELECTOR_H_
+
+#include "gui/gui.h"
+
+typedef void event_selector;
+
+event_selector *setup_event_selector(gui *g, void *database, int *is_on,
+ void (*change_callback)(void *), void *change_callback_data);
+
+#endif /* _EVENT_SELECTOR_H_ */
diff --git a/common/utils/T/tracer/filter/Makefile b/common/utils/T/tracer/filter/Makefile
new file mode 100644
index 0000000000..fb1427ca6a
--- /dev/null
+++ b/common/utils/T/tracer/filter/Makefile
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS=-Wall -g -pthread -I..
+
+OBJS=filter.o
+
+filter.a: $(OBJS)
+ ar cr filter.a $(OBJS)
+
+%.o: %.c
+ $(CC) $(CFLAGS) -o $@ -c $<
+
+clean:
+ rm -f *.a *.o
diff --git a/common/utils/T/tracer/filter/filter.c b/common/utils/T/tracer/filter/filter.c
new file mode 100644
index 0000000000..b09b01259d
--- /dev/null
+++ b/common/utils/T/tracer/filter/filter.c
@@ -0,0 +1,125 @@
+#include "filter.h"
+#include "event.h"
+#include "database.h"
+#include
+#include
+#include
+
+struct filter {
+ union {
+ struct { struct filter *a, *b; } op2;
+ int v;
+ struct { int event_type; int arg_index; } evarg;
+ } v;
+
+ int (*eval)(struct filter *this, event e);
+};
+
+/****************************************************************************/
+/* evaluation functions */
+/****************************************************************************/
+
+int eval_and(struct filter *f, event e)
+{
+ if (f->v.op2.a->eval(f->v.op2.a, e) == 0) return 0;
+ return f->v.op2.b->eval(f->v.op2.b, e);
+}
+
+int eval_eq(struct filter *f, event e)
+{
+ int a = f->v.op2.a->eval(f->v.op2.a, e);
+ int b = f->v.op2.b->eval(f->v.op2.b, e);
+ return a == b;
+}
+
+int eval_int(struct filter *f, event e)
+{
+ return f->v.v;
+}
+
+int eval_evarg(struct filter *f, event e)
+{
+ if (e.type != f->v.evarg.event_type) {
+ printf("%s:%d:%s: bad event type\n", __FILE__, __LINE__, __FUNCTION__);
+ abort();
+ }
+ if (e.e[f->v.evarg.arg_index].type != EVENT_INT) {
+ printf("%s:%d:%s: bad event argtype; has to be 'int'\n",
+ __FILE__, __LINE__, __FUNCTION__);
+ abort();
+ }
+ return e.e[f->v.evarg.arg_index].i;
+}
+
+/****************************************************************************/
+/* filter construction functions */
+/****************************************************************************/
+
+filter *filter_and(filter *a, filter *b)
+{
+ struct filter *ret = calloc(1, sizeof(struct filter));
+ if (ret == NULL) abort();
+ ret->eval = eval_and;
+ ret->v.op2.a = a;
+ ret->v.op2.b = b;
+ return ret;
+}
+
+filter *filter_eq(filter *a, filter *b)
+{
+ struct filter *ret = calloc(1, sizeof(struct filter));
+ if (ret == NULL) abort();
+ ret->eval = eval_eq;
+ ret->v.op2.a = a;
+ ret->v.op2.b = b;
+ return ret;
+}
+
+filter *filter_int(int v)
+{
+ struct filter *ret = calloc(1, sizeof(struct filter));
+ if (ret == NULL) abort();
+ ret->eval = eval_int;
+ ret->v.v = v;
+ return ret;
+}
+
+filter *filter_evarg(void *database, char *event_name, char *varname)
+{
+ struct filter *ret;
+ int event_id;
+ database_event_format f;
+ int i;
+
+ ret = calloc(1, sizeof(struct filter)); if (ret == NULL) abort();
+
+ event_id = event_id_from_name(database, event_name);
+ f = get_format(database, event_id);
+
+ ret->eval = eval_evarg;
+ ret->v.evarg.event_type = event_id;
+ ret->v.evarg.arg_index = -1;
+
+ for (i = 0; i < f.count; i++) {
+ if (strcmp(f.name[i], varname) != 0) continue;
+ ret->v.evarg.arg_index = i;
+ break;
+ }
+ if (ret->v.evarg.arg_index == -1) {
+ printf("%s:%d:%s: event '%s' has no argument '%s'\n",
+ __FILE__, __LINE__, __FUNCTION__, event_name, varname);
+ abort();
+ }
+
+ return ret;
+}
+
+/****************************************************************************/
+/* eval function */
+/****************************************************************************/
+
+int filter_eval(filter *_f, event e)
+{
+ struct filter *f = _f;
+ return f->eval(f, e);
+}
diff --git a/common/utils/T/tracer/filter/filter.h b/common/utils/T/tracer/filter/filter.h
new file mode 100644
index 0000000000..eba02d7fb7
--- /dev/null
+++ b/common/utils/T/tracer/filter/filter.h
@@ -0,0 +1,15 @@
+#ifndef _FILTER_H_
+#define _FILTER_H_
+
+#include "event.h"
+
+typedef void filter;
+
+filter *filter_and(filter *a, filter *b);
+filter *filter_eq(filter *a, filter *b);
+filter *filter_int(int v);
+filter *filter_evarg(void *database, char *event_name, char *varname);
+
+int filter_eval(filter *f, event e);
+
+#endif /* _FILTER_H_ */
diff --git a/common/utils/T/tracer/gui.c b/common/utils/T/tracer/gui.c
new file mode 100644
index 0000000000..46e06d2e1f
--- /dev/null
+++ b/common/utils/T/tracer/gui.c
@@ -0,0 +1,102 @@
+#include "defs.h"
+#include "gui/gui.h"
+#include
+#include
+#include
+#include
+#include
+#include
+
+static struct {
+ gui *g;
+ widget *input_signal; /* CC_id 0 antenna 0 */
+ volatile int input_signal_length; /* unit: byte */
+ void *input_signal_iq;
+ pthread_mutex_t input_signal_lock;
+} eNB_data;
+
+static void *gui_thread(void *g)
+{
+ gui_loop(g);
+ exit(0);
+}
+
+static void *input_signal_plotter(void *_)
+{
+ short *iqbuf;
+ float *x;
+ float *y;
+ int i;
+ int length = eNB_data.input_signal_length / 4;
+
+ x = calloc(1, sizeof(float) * eNB_data.input_signal_length / 4);
+ y = calloc(1, sizeof(float) * eNB_data.input_signal_length / 4);
+ if (x == NULL || y == NULL) abort();
+
+ while (1) {
+ usleep(100 * 1000);
+
+ if (pthread_mutex_lock(&eNB_data.input_signal_lock)) abort();
+
+ if (length * 4 != eNB_data.input_signal_length) {
+ free(x);
+ free(y);
+ x = calloc(1, sizeof(float) * eNB_data.input_signal_length / 4);
+ y = calloc(1, sizeof(float) * eNB_data.input_signal_length / 4);
+ if (x == NULL || y == NULL) abort();
+ length = eNB_data.input_signal_length / 4;
+ }
+
+ iqbuf = eNB_data.input_signal_iq;
+
+ for (i = 0; i < length; i++) {
+ x[i] = i;
+ y[i] = 10*log10(1.0+(float)(iqbuf[2*i]*iqbuf[2*i]+
+ iqbuf[2*i+1]*iqbuf[2*i+1]));
+ }
+
+ xy_plot_set_points(eNB_data.g, eNB_data.input_signal, 0,
+ length, x, y);
+
+ if (pthread_mutex_unlock(&eNB_data.input_signal_lock)) abort();
+ }
+}
+
+void t_gui_start(void)
+{
+ gui *g = gui_init();
+
+ widget *win = new_toplevel_window(g, 550, 140, "input signal");
+ widget *plot = new_xy_plot(g, 512, 100, "eNB 0 input signal", 20);
+ widget_add_child(g, win, plot, -1);
+ xy_plot_set_range(g, plot, 0, 76800, 30, 70);
+ xy_plot_new_plot(g, plot, FOREGROUND_COLOR);
+
+ eNB_data.input_signal = plot;
+ eNB_data.input_signal_length = 76800 * 4;
+ eNB_data.input_signal_iq = calloc(1, 76800 * 4);
+ if (eNB_data.input_signal_iq == NULL) abort();
+ pthread_mutex_init(&eNB_data.input_signal_lock, NULL);
+
+ eNB_data.g = g;
+
+ new_thread(gui_thread, g);
+ new_thread(input_signal_plotter, NULL);
+}
+
+void t_gui_set_input_signal(int eNB, int frame, int subframe, int antenna,
+ int size, void *buf)
+{
+ if (pthread_mutex_lock(&eNB_data.input_signal_lock)) abort();
+
+ if (eNB_data.input_signal_length != size * 10) {
+ free(eNB_data.input_signal_iq);
+ eNB_data.input_signal_length = size * 10;
+ eNB_data.input_signal_iq = calloc(1, eNB_data.input_signal_length);
+ if (eNB_data.input_signal_iq == NULL) abort();
+ }
+
+ memcpy((char *)eNB_data.input_signal_iq + subframe * size, buf, size);
+
+ if (pthread_mutex_unlock(&eNB_data.input_signal_lock)) abort();
+}
diff --git a/common/utils/T/tracer/gui/Makefile b/common/utils/T/tracer/gui/Makefile
new file mode 100644
index 0000000000..53f2077eac
--- /dev/null
+++ b/common/utils/T/tracer/gui/Makefile
@@ -0,0 +1,18 @@
+CC=gcc
+CFLAGS=-Wall -g -pthread -I/usr/include/X11/Xft -I/usr/include/freetype2
+
+OBJS=init.o loop.o toplevel_window.o x.o container.o widget.o \
+ gui.o label.o event.o xy_plot.o textlist.o notify.o positioner.o \
+ timeline.o space.o image.o
+
+gui.a: $(OBJS)
+ ar cr gui.a $(OBJS)
+
+test: test.o gui.a
+ $(CC) -o test $(OBJS) test.o -lX11 -pthread -lm
+
+%.o: %.c
+ $(CC) $(CFLAGS) -o $@ -c $<
+
+clean:
+ rm -f *.a *.o test
diff --git a/common/utils/T/tracer/gui/container.c b/common/utils/T/tracer/gui/container.c
new file mode 100644
index 0000000000..8de4347933
--- /dev/null
+++ b/common/utils/T/tracer/gui/container.c
@@ -0,0 +1,339 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include
+#include
+#include
+
+#define MAX(a, b) ((a)>(b)?(a):(b))
+
+static void repack(gui *g, widget *_this)
+{
+ LOGD("REPACK container %p\n", _this);
+ struct container_widget *this = _this;
+ this->hints_are_valid = 0;
+ return this->common.parent->repack(g, this->common.parent);
+}
+
+static void add_child(gui *g, widget *_this, widget *child, int position)
+{
+ LOGD("ADD_CHILD container\n");
+ struct container_widget *this = _this;
+
+ this->hints_are_valid = 0;
+ widget_add_child_internal(g, this, child, position);
+
+ /* initially not growable */
+ this->growable = realloc(this->growable, (this->nchildren+1)*sizeof(int));
+ if (this->growable == NULL) abort();
+
+ if (position == -1) position = this->nchildren;
+
+ memmove(this->growable + position+1, this->growable + position,
+ (this->nchildren - position) * sizeof(int));
+
+ this->growable[position] = 0;
+
+ this->nchildren++;
+}
+
+static void del_child(gui *g, widget *_this, widget *child)
+{
+ LOGD("DEL_CHILD container\n");
+ struct container_widget *this = _this;
+ int position = widget_get_child_position(g, _this, child);
+
+ this->hints_are_valid = 0;
+ widget_del_child_internal(g, this, child);
+
+ memmove(this->growable + position, this->growable + position+1,
+ (this->nchildren - position - 1) * sizeof(int));
+
+ this->growable = realloc(this->growable, (this->nchildren-1)*sizeof(int));
+ if (this->nchildren != 1 && this->growable == NULL) abort();
+
+ this->nchildren--;
+}
+
+static void compute_vertical_hints(struct gui *g,
+ struct container_widget *this)
+{
+ struct widget_list *l;
+ int cwidth, cheight;
+ int allocated_width = 0, allocated_height = 0;
+
+ /* get largest width */
+ l = this->common.children;
+ while (l) {
+ l->item->hints(g, l->item, &cwidth, &cheight);
+ if (cwidth > allocated_width) allocated_width = cwidth;
+ allocated_height += cheight;
+ l = l->next;
+ }
+ this->hint_width = allocated_width;
+ this->hint_height = allocated_height;
+ this->hints_are_valid = 1;
+}
+
+static void compute_horizontal_hints(struct gui *g,
+ struct container_widget *this)
+{
+ struct widget_list *l;
+ int cwidth, cheight;
+ int allocated_width = 0, allocated_height = 0;
+
+ /* get largest height */
+ l = this->common.children;
+ while (l) {
+ l->item->hints(g, l->item, &cwidth, &cheight);
+ if (cheight > allocated_height) allocated_height = cheight;
+ allocated_width += cwidth;
+ l = l->next;
+ }
+ this->hint_width = allocated_width;
+ this->hint_height = allocated_height;
+ this->hints_are_valid = 1;
+}
+
+static void vertical_allocate(gui *_gui, widget *_this,
+ int x, int y, int width, int height)
+{
+ LOGD("ALLOCATE container vertical %p\n", _this);
+ int cy = 0;
+ int cwidth, cheight;
+ struct gui *g = _gui;
+ struct container_widget *this = _this;
+ struct widget_list *l;
+ int over_pixels = 0;
+ int i;
+
+ if (this->hints_are_valid == 1) goto hints_ok;
+
+ compute_vertical_hints(g, this);
+
+hints_ok:
+
+ this->common.x = x;
+ this->common.y = y;
+ this->common.width = width;
+ this->common.height = height;
+
+ /* TODO: some pixels won't be allocated, take care of it? */
+ if (height > this->hint_height) {
+ int ngrowable = 0;
+ for (i = 0; i < this->nchildren; i++) if (this->growable[i]) ngrowable++;
+ if (ngrowable)
+ over_pixels = (height - this->hint_height) / ngrowable;
+ }
+
+ /* allocate */
+ l = this->common.children;
+ i = 0;
+ while (l) {
+ int allocated_height;
+ l->item->hints(g, l->item, &cwidth, &cheight);
+ allocated_height = cheight + (this->growable[i] ? over_pixels : 0);
+ l->item->allocate(g, l->item, this->common.x, this->common.y + cy,
+ MAX(width, cwidth), allocated_height);
+ cy += allocated_height;
+ l = l->next;
+ i++;
+ }
+
+// if (cy != this->hint_height) ERR("reachable?\n");
+}
+
+static void horizontal_allocate(gui *_gui, widget *_this,
+ int x, int y, int width, int height)
+{
+ LOGD("ALLOCATE container horizontal %p\n", _this);
+ int cx = 0;
+ int cwidth, cheight;
+ struct gui *g = _gui;
+ struct container_widget *this = _this;
+ struct widget_list *l;
+ int over_pixels = 0;
+ int i;
+
+ if (this->hints_are_valid == 1) goto hints_ok;
+
+ compute_horizontal_hints(g, this);
+
+hints_ok:
+
+ this->common.x = x;
+ this->common.y = y;
+ this->common.width = width;
+ this->common.height = height;
+
+ /* TODO: some pixels won't be allocated, take care of it? */
+ if (width > this->hint_width) {
+ int ngrowable = 0;
+ for (i = 0; i < this->nchildren; i++) if (this->growable[i]) ngrowable++;
+ if (ngrowable)
+ over_pixels = (width - this->hint_width) / ngrowable;
+ }
+
+ /* allocate */
+ l = this->common.children;
+ i = 0;
+ while (l) {
+ int allocated_width;
+ l->item->hints(g, l->item, &cwidth, &cheight);
+ allocated_width = cwidth + (this->growable[i] ? over_pixels : 0);
+ l->item->allocate(g, l->item, this->common.x + cx, this->common.y,
+ allocated_width, MAX(height, cheight)/* this->hint_height */);
+ cx += allocated_width;
+ l = l->next;
+ i++;
+ }
+
+// if (cx != this->hint_width) ERR("reachable?\n");
+}
+
+static void vertical_hints(gui *_gui, widget *_w, int *width, int *height)
+{
+ LOGD("HINTS container vertical %p\n", _w);
+ struct gui *g = _gui;
+ struct container_widget *this = _w;
+
+ if (this->hints_are_valid) {
+ *width = this->hint_width;
+ *height = this->hint_height;
+ return;
+ }
+
+ compute_vertical_hints(g, this);
+
+ *width = this->hint_width;
+ *height = this->hint_height;
+}
+
+static void horizontal_hints(gui *_gui, widget *_w, int *width, int *height)
+{
+ LOGD("HINTS container horizontal %p\n", _w);
+ struct gui *g = _gui;
+ struct container_widget *this = _w;
+
+ if (this->hints_are_valid) {
+ *width = this->hint_width;
+ *height = this->hint_height;
+ return;
+ }
+
+ compute_horizontal_hints(g, this);
+
+ *width = this->hint_width;
+ *height = this->hint_height;
+}
+
+static void horizontal_button(gui *_g, widget *_this, int x, int y,
+ int key_modifiers, int button, int up)
+{
+ LOGD("BUTTON container horizontal %p xy %d %d button %d up %d\n", _this, x, y, button, up);
+ struct gui *g = _g;
+ struct container_widget *this = _this;
+ struct widget_list *l;
+
+ l = this->common.children;
+ while (l) {
+ if (l->item->x <= x && x < l->item->x + l->item->width) {
+ l->item->button(g, l->item, x, y, key_modifiers, button, up);
+ break;
+ }
+ l = l->next;
+ }
+}
+
+static void vertical_button(gui *_g, widget *_this, int x, int y,
+ int key_modifiers, int button, int up)
+{
+ LOGD("BUTTON container vertical %p xy %d %d button %d up %d\n", _this, x, y, button, up);
+ struct gui *g = _g;
+ struct container_widget *this = _this;
+ struct widget_list *l;
+
+ l = this->common.children;
+ while (l) {
+ if (l->item->y <= y && y < l->item->y + l->item->height) {
+ l->item->button(g, l->item, x, y, key_modifiers, button, up);
+ break;
+ }
+ l = l->next;
+ }
+}
+
+static void paint(gui *_gui, widget *_this)
+{
+ LOGD("PAINT container\n");
+ struct gui *g = _gui;
+ struct widget *this = _this;
+ struct widget_list *l;
+
+ l = this->children;
+ while (l) {
+ l->item->paint(g, l->item);
+ l = l->next;
+ }
+}
+
+widget *new_container(gui *_gui, int vertical)
+{
+ struct gui *g = _gui;
+ struct container_widget *w;
+
+ glock(g);
+
+ w = new_widget(g, CONTAINER, sizeof(struct container_widget));
+
+ w->vertical = vertical;
+ w->hints_are_valid = 0;
+
+ w->common.paint = paint;
+ w->common.add_child = add_child;
+ w->common.del_child = del_child;
+ w->common.repack = repack;
+
+ if (vertical) {
+ w->common.allocate = vertical_allocate;
+ w->common.hints = vertical_hints;
+ w->common.button = vertical_button;
+ } else {
+ w->common.allocate = horizontal_allocate;
+ w->common.hints = horizontal_hints;
+ w->common.button = horizontal_button;
+ }
+
+ gunlock(g);
+
+ return w;
+}
+
+/*************************************************************************/
+/* public functions */
+/*************************************************************************/
+
+void container_set_child_growable(gui *_gui, widget *_this,
+ widget *child, int growable)
+{
+ gui *g = _gui;
+ struct container_widget *this = _this;
+ struct widget_list *lcur;
+ int i;
+
+ glock(g);
+
+ lcur = this->common.children;
+ i = 0;
+ while (lcur) {
+ if (lcur->item == child) break;
+ lcur = lcur->next;
+ i++;
+ }
+ if (lcur == NULL) ERR("%s:%d: child not found\n", __FILE__, __LINE__);
+
+ this->growable[i] = growable;
+
+ send_event(g, REPACK, this->common.id);
+
+ gunlock(g);
+}
diff --git a/common/utils/T/tracer/gui/event.c b/common/utils/T/tracer/gui/event.c
new file mode 100644
index 0000000000..842318fcea
--- /dev/null
+++ b/common/utils/T/tracer/gui/event.c
@@ -0,0 +1,209 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include
+#include
+#include
+#include
+#include
+#include
+
+/*****************************************************************/
+/* generic functions */
+/*****************************************************************/
+
+static void event_list_append(struct gui *g, struct event *e)
+{
+ struct event_list *new;
+
+ new = calloc(1, sizeof(struct event_list));
+ if (new == NULL) OOM;
+
+ new->item = e;
+
+ if (g->queued_events == NULL) {
+ g->queued_events = new;
+ new->last = new;
+ return;
+ }
+
+ g->queued_events->last->next = new;
+ g->queued_events->last = new;
+}
+
+static void free_event(struct event *e)
+{
+ switch (e->type) {
+ case REPACK: /* nothing */ break;
+ case DIRTY: /* nothing */ break;
+ }
+ free(e);
+}
+
+static int events_equal(struct event *e1, struct event *e2)
+{
+ if (e1->type != e2->type) return 0;
+ switch (e1->type) {
+ case REPACK: {
+ struct repack_event *re1 = (struct repack_event *)e1;
+ struct repack_event *re2 = (struct repack_event *)e2;
+ return re1->id == re2->id;
+ }
+ case DIRTY: {
+ struct dirty_event *re1 = (struct dirty_event *)e1;
+ struct dirty_event *re2 = (struct dirty_event *)e2;
+ return re1->id == re2->id;
+ }}
+ /* unreachable */
+ abort();
+}
+
+/*****************************************************************/
+/* sending events */
+/*****************************************************************/
+
+static event *new_event_repack(int id)
+{
+ struct repack_event *ret;
+ ret = calloc(1, sizeof(struct repack_event));
+ if (ret == NULL) OOM;
+ ret->id = id;
+ return ret;
+}
+
+static event *new_event_dirty(int id)
+{
+ struct dirty_event *ret;
+ ret = calloc(1, sizeof(struct dirty_event));
+ if (ret == NULL) OOM;
+ ret->id = id;
+ return ret;
+}
+
+static void compress_event_list(struct gui *g)
+{
+ struct event *last;
+ struct event_list *cur;
+ /* basic compression, to be refined */
+
+ /* pickup last event and remove every copy of it found before
+ * if it's DIRTY or REPACK
+ */
+ last = g->queued_events->last->item;
+ if (last->type == DIRTY || last->type == REPACK) {
+ cur = g->queued_events;
+ while (cur->item != last) {
+ if (cur->item != NULL && events_equal(cur->item, last)) {
+ free_event(cur->item);
+ cur->item = NULL;
+ }
+ cur = cur->next;
+ }
+ }
+}
+
+void send_event(gui *_gui, enum event_type type, ...)
+{
+ LOGD("send_event %d\n", type);
+ struct gui *g = _gui;
+ int do_write = 0;
+ va_list ap;
+ struct event *e;
+
+ if (g->queued_events == NULL) do_write = 1;
+
+ va_start(ap, type);
+
+ switch (type) {
+ case REPACK: {
+ int id;
+ id = va_arg(ap, int);
+ e = new_event_repack(id);
+ break;
+ }
+ case DIRTY: {
+ int id;
+ id = va_arg(ap, int);
+ e = new_event_dirty(id);
+ break;
+ }
+ }
+
+ va_end(ap);
+
+ e->type = type;
+
+ event_list_append(g, e);
+ compress_event_list(g);
+
+ if (do_write) {
+ char c = 1;
+ if (write(g->event_pipe[1], &c, 1) != 1)
+ ERR("error writing to pipe: %s\n", strerror(errno));
+ }
+}
+
+/*****************************************************************/
+/* processing events */
+/*****************************************************************/
+
+static void repack_event(struct gui *g, int id)
+{
+ struct widget *w = find_widget(g, id);
+ if (w == NULL) { WARN("widget id %d not found\n", id); return; }
+ w->repack(g, w);
+}
+
+/* TODO: put that function somewhere else? */
+static struct toplevel_window_widget *get_toplevel_window(struct widget *w)
+{
+ while (w != NULL) {
+ if (w->type == TOPLEVEL_WINDOW)
+ return (struct toplevel_window_widget *)w;
+ w = w->parent;
+ }
+ return NULL;
+}
+
+static void dirty_event(struct gui *g, int id)
+{
+ struct widget *w = find_widget(g, id);
+ struct toplevel_window_widget *win;
+ if (w == NULL) { WARN("widget id %d not found\n", id); return; }
+ win = get_toplevel_window(w);
+ if (win == NULL)
+ { WARN("widget id %d not contained in a window\n", id); return; }
+ g->xwin = win->x;
+ w->clear(g, w);
+ w->paint(g, w);
+ g->xwin = NULL;
+ g->repainted = 1;
+}
+
+static void process_event(struct gui *g, struct event *e)
+{
+ LOGD("processing event type %d\n", e->type);
+ switch (e->type) {
+ case REPACK: repack_event(g, ((struct repack_event *)e)->id); break;
+ case DIRTY: dirty_event(g, ((struct dirty_event *)e)->id); break;
+ }
+}
+
+/* TODO: events' compression */
+void gui_events(gui *_gui)
+{
+ struct gui *g = _gui;
+
+ LOGD("gui_events START: head %p\n", g->queued_events);
+
+ while (g->queued_events) {
+ struct event_list *cur = g->queued_events;
+ g->queued_events = cur->next;
+ if (g->queued_events) g->queued_events->last = cur->last;
+ if (cur->item != NULL) {
+ process_event(g, cur->item);
+ free_event(cur->item);
+ }
+ free(cur);
+ }
+ LOGD("gui_events DONE\n");
+}
diff --git a/common/utils/T/tracer/gui/gui.c b/common/utils/T/tracer/gui/gui.c
new file mode 100644
index 0000000000..f0d7dcbcb1
--- /dev/null
+++ b/common/utils/T/tracer/gui/gui.c
@@ -0,0 +1,34 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include "x.h"
+#include
+#include
+#include
+
+int volatile gui_logd;
+
+void glock(gui *_gui)
+{
+ struct gui *g = _gui;
+ if (pthread_mutex_lock(g->lock)) ERR("mutex error\n");
+}
+
+void gunlock(gui *_gui)
+{
+ struct gui *g = _gui;
+ if (pthread_mutex_unlock(g->lock)) ERR("mutex error\n");
+}
+
+int new_color(gui *_gui, char *color)
+{
+ struct gui *g = _gui;
+ int ret;
+
+ glock(g);
+
+ ret = x_new_color(g->x, color);
+
+ gunlock(g);
+
+ return ret;
+}
diff --git a/common/utils/T/tracer/gui/gui.h b/common/utils/T/tracer/gui/gui.h
new file mode 100644
index 0000000000..673514f138
--- /dev/null
+++ b/common/utils/T/tracer/gui/gui.h
@@ -0,0 +1,105 @@
+#ifndef _GUI_H_
+#define _GUI_H_
+
+/* defines the public API of the GUI */
+
+typedef void gui;
+typedef void widget;
+
+#define HORIZONTAL 0
+#define VERTICAL 1
+
+#define BACKGROUND_COLOR 0
+#define FOREGROUND_COLOR 1
+
+#define DEFAULT_FONT 0
+
+/* key modifiers */
+#define KEY_SHIFT (1<<0)
+#define KEY_CONTROL (1<<1)
+#define KEY_ALT (1<<2)
+
+gui *gui_init(void);
+
+/* position = -1 to put at the end */
+void widget_add_child(gui *gui, widget *parent, widget *child, int position);
+void widget_del_child(gui *gui, widget *parent, widget *child);
+void widget_dirty(gui *gui, widget *this);
+
+widget *new_toplevel_window(gui *gui, int width, int height, char *title);
+widget *new_container(gui *gui, int vertical);
+widget *new_positioner(gui *gui);
+widget *new_label(gui *gui, const char *text);
+widget *new_xy_plot(gui *gui, int width, int height, char *label,
+ int vruler_width);
+widget *new_textlist(gui *gui, int width, int nlines, int background_color);
+widget *new_timeline(gui *gui, int width, int number_of_sublines,
+ int subline_height);
+widget *new_space(gui *gui, int width, int height);
+widget *new_image(gui *gui, unsigned char *data, int length);
+
+void label_set_clickable(gui *gui, widget *label, int clickable);
+
+void container_set_child_growable(gui *_gui, widget *_this,
+ widget *child, int growable);
+
+int xy_plot_new_plot(gui *gui, widget *this, int color);
+void xy_plot_set_range(gui *gui, widget *this,
+ float xmin, float xmax, float ymin, float ymax);
+void xy_plot_set_points(gui *gui, widget *this,
+ int plot, int npoints, float *x, float *y);
+void xy_plot_get_dimensions(gui *gui, widget *this, int *width, int *height);
+
+void textlist_add(gui *gui, widget *this, const char *text, int position,
+ int color);
+void textlist_del(gui *gui, widget *this, int position);
+void textlist_add_silent(gui *gui, widget *this, const char *text,
+ int position, int color);
+void textlist_del_silent(gui *gui, widget *this, int position);
+void textlist_state(gui *_gui, widget *_this,
+ int *visible_lines, int *start_line, int *number_of_lines);
+void textlist_set_start_line(gui *gui, widget *this, int line);
+void textlist_get_line(gui *gui, widget *this, int line,
+ char **text, int *color);
+void textlist_set_color(gui *gui, widget *this, int line, int color);
+
+void timeline_clear(gui *gui, widget *this);
+void timeline_clear_silent(gui *gui, widget *this);
+void timeline_add_points(gui *gui, widget *this, int subline, int color,
+ int *x, int len);
+void timeline_add_points_silent(gui *gui, widget *this, int subline,
+ int color, int *x, int len);
+void timeline_set_subline_background_color(gui *gui, widget *this,
+ int subline, int color);
+void timeline_get_width(gui *gui, widget *this, int *width);
+
+void gui_loop(gui *gui);
+
+void glock(gui *gui);
+void gunlock(gui *gui);
+
+int new_color(gui *gui, char *color);
+
+/* notifications */
+/* known notifications:
+ * - textlist:
+ * - scrollup { void *: NULL }
+ * - scrolldown { void *: NULL }
+ * - click { int [2]: line, button }
+ * - label:
+ * - click { int: button } (if enabled)
+ * - timeline
+ * - resize { int: width }
+ * - scrollup { int [3]: x, y, key_modifiers }
+ * - scrolldown { int [3]: x, y, key_modifiers }
+ * - click { int: button }
+ */
+
+/* same type as in gui_defs.h */
+typedef void (*notifier)(void *private, gui *g,
+ char *notification, widget *w, void *notification_data);
+unsigned long register_notifier(gui *g, char *notification, widget *w,
+ notifier handler, void *private);
+void unregister_notifier(gui *g, unsigned long notifier_id);
+
+#endif /* _GUI_H_ */
diff --git a/common/utils/T/tracer/gui/gui_defs.h b/common/utils/T/tracer/gui/gui_defs.h
new file mode 100644
index 0000000000..ec72bb0e2b
--- /dev/null
+++ b/common/utils/T/tracer/gui/gui_defs.h
@@ -0,0 +1,255 @@
+#ifndef _GUI_DEFS_H_
+#define _GUI_DEFS_H_
+
+/* defines the private API of the GUI */
+
+extern int volatile gui_logd;
+#define LOGD(...) do { if (gui_logd) printf(__VA_ARGS__); } while (0)
+
+/*************************************************************************/
+/* logging macros */
+/*************************************************************************/
+
+#define ERR(...) \
+ do { \
+ printf("%s:%d:%s: ERROR: ", __FILE__, __LINE__, __FUNCTION__); \
+ printf(__VA_ARGS__); \
+ abort(); \
+ } while (0)
+
+#define WARN(...) \
+ do { \
+ printf("%s:%d:%s: WARNING: ", __FILE__, __LINE__, __FUNCTION__); \
+ printf(__VA_ARGS__); \
+ } while (0)
+
+#define OOM ERR("out of memory\n")
+
+/*************************************************************************/
+/* widgets */
+/*************************************************************************/
+
+enum widget_type {
+ TOPLEVEL_WINDOW, CONTAINER, POSITIONER, TEXT_LIST, XY_PLOT, BUTTON, LABEL,
+ TIMELINE, SPACE, IMAGE
+};
+
+struct widget_list;
+
+struct widget {
+ enum widget_type type;
+ int id;
+ int x; /* allocated x after packing */
+ int y; /* allocated y after packing */
+ int width; /* allocated width after packing */
+ int height; /* allocated height after packing */
+ struct widget_list *children;
+ struct widget *parent;
+ void (*repack)(gui *g, widget *this);
+ void (*add_child)(gui *g, widget *this, widget *child, int position);
+ void (*del_child)(gui *g, widget *this, widget *child);
+ void (*allocate)(gui *g, widget *this, int x, int y, int width, int height);
+ void (*hints)(gui *g, widget *this, int *width, int *height);
+ void (*paint)(gui *g, widget *this);
+ void (*clear)(gui *g, widget *this);
+ /* user input */
+ void (*button)(gui *g, widget *this, int x, int y, int key_modifiers,
+ int button, int up);
+};
+
+struct widget_list {
+ struct widget *item;
+ struct widget_list *next;
+ //struct widget_list *prev; /* unused? */
+ struct widget_list *last; /* valid only for the head of the list */
+};
+
+struct toplevel_window_widget {
+ struct widget common;
+ void *x; /* opaque X data (type x_window), used in x.c */
+};
+
+struct container_widget {
+ struct widget common;
+ int vertical;
+ int hints_are_valid; /* used to cache hints values */
+ int hint_width; /* cached hint values - invalid if */
+ int hint_height; /* repack_was_called == 1 */
+ int *growable;
+ int nchildren;
+};
+
+struct positioner_widget {
+ struct widget common;
+};
+
+struct textlist_widget {
+ struct widget common;
+ char **text;
+ int *color;
+ int text_count;
+ int wanted_width;
+ int wanted_nlines; /* number of lines of text the user wants to see */
+ int allocated_nlines; /* actual number of visible lines */
+ int starting_line; /* points to the first visible line of text */
+ int line_height;
+ int baseline;
+ int background_color;
+};
+
+struct xy_plot_plot {
+ float *x;
+ float *y;
+ int npoints;
+ int color;
+};
+
+struct xy_plot_widget {
+ struct widget common;
+ char *label;
+ int label_width;
+ int label_height;
+ int label_baseline;
+ int vrule_width; /* the width of the vertical ruler text zone */
+ float xmin, xmax;
+ float ymin, ymax;
+ int wanted_width;
+ int wanted_height;
+ struct xy_plot_plot *plots;
+ int nplots;
+};
+
+struct timeline_subline {
+ int *color; /* length = width of timeline widget
+ * value = -1 if no color
+ */
+ int width;
+ int background; /* background color of the subline */
+};
+
+struct timeline_widget {
+ struct widget common;
+ int n; /* number of sublines */
+ struct timeline_subline *s;
+ int subline_height;
+ int wanted_width;
+};
+
+struct button_widget {
+ struct widget common;
+};
+
+struct label_widget {
+ struct widget common;
+ const char *t;
+ int color;
+ int width; /* as given by the graphic's backend */
+ int height; /* as given by the graphic's backend */
+ int baseline; /* as given by the graphic's backend */
+};
+
+struct space_widget {
+ struct widget common;
+ int wanted_width;
+ int wanted_height;
+};
+
+struct image_widget {
+ struct widget common;
+ int width;
+ int height;
+ void *x; /* opaque X data (type x_image), used in x.c */
+};
+
+/*************************************************************************/
+/* events */
+/*************************************************************************/
+
+typedef void event;
+
+enum event_type {
+ DIRTY, REPACK
+};
+
+struct event {
+ enum event_type type;
+};
+
+struct event_list {
+ struct event *item;
+ struct event_list *next;
+ struct event_list *last;
+};
+
+struct dirty_event {
+ struct event common;
+ int id;
+};
+
+struct repack_event {
+ struct event common;
+ int id;
+};
+
+/*************************************************************************/
+/* notifications */
+/*************************************************************************/
+
+/* same type as in gui.h */
+typedef void (*notifier)(void *private, gui *g,
+ char *notification, widget *w, void *notification_data);
+
+struct notifier {
+ notifier handler;
+ unsigned long id;
+ char *notification;
+ widget *w;
+ void *private;
+ /* done is used bu gui_notify */
+ int done;
+};
+
+/*************************************************************************/
+/* main structure */
+/*************************************************************************/
+
+struct gui {
+ void *lock;
+ void *x; /* opaque X data (type x_connection), used in x.c */
+ struct widget_list *toplevel;
+ struct event_list *queued_events;
+ int event_pipe[2];
+ int next_id; /* tells what is the ID of
+ the next created widget */
+ int repainted; /* set to 1 when some widget has
+ * been repainted (TODO: can be any,
+ * to be optimized) */
+ void *xwin; /* set by a toplevel_window when
+ * it paints itself, to be used
+ * by its children */
+ struct notifier *notifiers;
+ int notifiers_count;
+ unsigned long next_notifier_id;
+};
+
+/*************************************************************************/
+/* internal functions */
+/*************************************************************************/
+
+widget *new_widget(struct gui *g, enum widget_type type, int size);
+void widget_add_child_internal(
+ gui *_gui, widget *parent, widget *child, int position);
+void widget_del_child_internal(gui *_gui, widget *parent, widget *child);
+int widget_get_child_position(gui *_gui, widget *parent, widget *child);
+
+const char *widget_name(enum widget_type type);
+
+void send_event(gui *gui, enum event_type type, ...);
+void gui_events(gui *gui);
+
+struct widget *find_widget(struct gui *g, int id);
+
+void gui_notify(struct gui *g, char *notification, widget *w,
+ void *notification_data);
+
+#endif /* _GUI_DEFS_H_ */
diff --git a/common/utils/T/tracer/gui/image.c b/common/utils/T/tracer/gui/image.c
new file mode 100644
index 0000000000..df9a7b8296
--- /dev/null
+++ b/common/utils/T/tracer/gui/image.c
@@ -0,0 +1,114 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include "x.h"
+#include
+#include
+#include
+#include
+
+static void paint(gui *_gui, widget *_w)
+{
+ struct gui *g = _gui;
+ struct image_widget *w = _w;
+ LOGD("PAINT image %p\n", w);
+ x_draw_image(g->x, g->xwin, w->x, w->common.x, w->common.y);
+}
+
+static void hints(gui *_gui, widget *_w, int *width, int *height)
+{
+ struct image_widget *w = _w;
+ LOGD("HINTS image %p\n", w);
+ *width = w->width;
+ *height = w->height;
+}
+
+struct png_reader {
+ unsigned char *data;
+ int size;
+ int pos;
+};
+
+static void png_readfn(png_structp png_ptr, png_bytep data, png_size_t length)
+{
+ struct png_reader *r = png_get_io_ptr(png_ptr);
+ if (length > r->size - r->pos) png_error(png_ptr, "bad png image");
+ memcpy(data, r->data + r->pos, length);
+ r->pos += length;
+}
+
+static void load_image(struct gui *g, struct image_widget *w,
+ unsigned char *data, int length)
+{
+ png_structp png_ptr;
+ png_infop info_ptr;
+ png_bytepp image;
+ int width, height, bit_depth, color_type, channels;
+ unsigned char *img_data;
+ struct png_reader r;
+ int i;
+
+ /* unpack PNG data */
+
+ r.data = data;
+ r.size = length;
+ r.pos = 0;
+
+ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+ if (png_ptr == NULL) abort();
+
+ info_ptr = png_create_info_struct(png_ptr);
+ if (info_ptr == NULL) abort();
+
+ if (setjmp(png_jmpbuf(png_ptr))) abort();
+
+ png_set_read_fn(png_ptr, &r, png_readfn);
+
+ png_read_png(png_ptr, info_ptr,
+ PNG_TRANSFORM_STRIP_16 | PNG_TRANSFORM_EXPAND | PNG_TRANSFORM_PACKING |
+ PNG_TRANSFORM_GRAY_TO_RGB | PNG_TRANSFORM_BGR, NULL);
+
+ image = png_get_rows(png_ptr, info_ptr);
+
+ width = png_get_image_width(png_ptr, info_ptr);
+ height = png_get_image_height(png_ptr, info_ptr);
+ bit_depth = png_get_bit_depth(png_ptr, info_ptr);
+ color_type = png_get_color_type(png_ptr, info_ptr);
+ channels = png_get_channels(png_ptr, info_ptr);
+
+ if (width < 1 || width > 1000 || height < 1 || height > 1000 ||
+ bit_depth != 8 || color_type != PNG_COLOR_TYPE_RGBA || channels != 4)
+ { printf("bad image\n"); abort(); }
+
+ img_data = malloc(4 * width * height); if (img_data == NULL) abort();
+ for (i = 0; i < height; i++)
+ memcpy(img_data+i*4*width, image[i], width*4);
+
+ png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
+
+ /* create the X image */
+ w->x = x_create_image(g->x, img_data, width, height);
+
+ free(img_data);
+
+ w->width = width;
+ w->height = height;
+}
+
+widget *new_image(gui *_gui, unsigned char *data, int length)
+{
+ struct gui *g = _gui;
+ struct image_widget *w;
+
+ glock(g);
+
+ w = new_widget(g, IMAGE, sizeof(struct image_widget));
+
+ load_image(g, w, data, length);
+
+ w->common.paint = paint;
+ w->common.hints = hints;
+
+ gunlock(g);
+
+ return w;
+}
diff --git a/common/utils/T/tracer/gui/init.c b/common/utils/T/tracer/gui/init.c
new file mode 100644
index 0000000000..c6d5e3e435
--- /dev/null
+++ b/common/utils/T/tracer/gui/init.c
@@ -0,0 +1,34 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include "x.h"
+#include
+#include
+#include
+#include
+#include
+#include
+
+gui *gui_init(void)
+{
+ struct gui *ret;
+
+ ret = calloc(1, sizeof(struct gui));
+ if (ret == NULL) OOM;
+
+ ret->lock = malloc(sizeof(pthread_mutex_t));
+ if (ret->lock == NULL) OOM;
+ if (pthread_mutex_init(ret->lock, NULL))
+ ERR("mutex initialization failed\n");
+
+ if (pipe(ret->event_pipe))
+ ERR("%s\n", strerror(errno));
+
+ /* lock not necessary but there for consistency (when instrumenting x.c
+ * we need the gui to be locked when calling any function in x.c)
+ */
+ glock(ret);
+ ret->x = x_open();
+ gunlock(ret);
+
+ return ret;
+}
diff --git a/common/utils/T/tracer/gui/label.c b/common/utils/T/tracer/gui/label.c
new file mode 100644
index 0000000000..f649fa5201
--- /dev/null
+++ b/common/utils/T/tracer/gui/label.c
@@ -0,0 +1,83 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include "x.h"
+#include
+#include
+#include
+
+static void paint(gui *_gui, widget *_w)
+{
+ struct gui *g = _gui;
+ struct label_widget *l = _w;
+ LOGD("PAINT label '%s'\n", l->t);
+ x_draw_string(g->x, g->xwin, DEFAULT_FONT, l->color,
+ l->common.x, l->common.y + l->baseline, l->t);
+}
+
+static void hints(gui *_gui, widget *_w, int *width, int *height)
+{
+ struct label_widget *l = _w;
+ LOGD("HINTS label '%s'\n", l->t);
+ *width = l->width;
+ *height = l->height;
+}
+
+widget *new_label(gui *_gui, const char *label)
+{
+ struct gui *g = _gui;
+ struct label_widget *w;
+
+ glock(g);
+
+ w = new_widget(g, LABEL, sizeof(struct label_widget));
+
+ w->t = strdup(label);
+ if (w->t == NULL) OOM;
+ w->color = FOREGROUND_COLOR;
+
+ x_text_get_dimensions(g->x, DEFAULT_FONT, label,
+ &w->width, &w->height, &w->baseline);
+
+ w->common.paint = paint;
+ w->common.hints = hints;
+
+ gunlock(g);
+
+ return w;
+}
+
+static void button(gui *gui, widget *_this, int x, int y,
+ int key_modifiers, int button, int up)
+{
+ LOGD("BUTTON label %p xy %d %d button %d up %d\n", _this, x, y, button, up);
+
+ if (up != 0) return;
+
+ gui_notify(gui, "click", _this, &button);
+}
+
+/* we could use default_button, but it's in widget.c, so, well... */
+static void no_button(gui *gui, widget *_this, int x, int y,
+ int key_modifiers, int button, int up)
+{
+ /* do nothing */
+}
+
+/*************************************************************************/
+/* public functions */
+/*************************************************************************/
+
+void label_set_clickable(gui *_g, widget *_this, int clickable)
+{
+ struct gui *g = _g;
+ struct label_widget *this = _this;
+
+ glock(g);
+
+ if (clickable)
+ this->common.button = button;
+ else
+ this->common.button = no_button;
+
+ gunlock(g);
+}
diff --git a/common/utils/T/tracer/gui/loop.c b/common/utils/T/tracer/gui/loop.c
new file mode 100644
index 0000000000..8ceb3c06e1
--- /dev/null
+++ b/common/utils/T/tracer/gui/loop.c
@@ -0,0 +1,66 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include "x.h"
+#include
+#include
+#include
+#include
+#include
+#include
+
+void gui_loop(gui *_gui)
+{
+ struct gui *g = _gui;
+ int xfd;
+ int eventfd;
+ int maxfd;
+ fd_set rd;
+
+ /* lock not necessary but there for consistency (when instrumenting x.c
+ * we need the gui to be locked when calling any function in x.c)
+ */
+ glock(g);
+ xfd = x_connection_fd(g->x);
+ gunlock(g);
+ eventfd = g->event_pipe[0];
+
+ if (eventfd > xfd) maxfd = eventfd;
+ else maxfd = xfd;
+
+ while (1) {
+ glock(g);
+ x_flush(g->x);
+ gunlock(g);
+ FD_ZERO(&rd);
+ FD_SET(xfd, &rd);
+ FD_SET(eventfd, &rd);
+ if (select(maxfd+1, &rd, NULL, NULL, NULL) == -1)
+ ERR("select: %s\n", strerror(errno));
+
+ glock(g);
+
+ if (FD_ISSET(xfd, &rd))
+ x_events(g);
+
+ if (FD_ISSET(eventfd, &rd)) {
+ char c[256];
+ if (read(eventfd, c, 256)); /* for no gcc warnings */
+ }
+
+ gui_events(g);
+
+ if (g->repainted) {
+ struct widget_list *cur;
+ g->repainted = 0;
+ cur = g->toplevel;
+ while (cur) {
+ struct toplevel_window_widget *w =
+ (struct toplevel_window_widget *)cur->item;
+ x_draw(g->x, w->x);
+ cur = cur->next;
+ }
+ }
+
+ gunlock(g);
+ }
+}
diff --git a/common/utils/T/tracer/gui/notify.c b/common/utils/T/tracer/gui/notify.c
new file mode 100644
index 0000000000..7ff4006941
--- /dev/null
+++ b/common/utils/T/tracer/gui/notify.c
@@ -0,0 +1,116 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include
+#include
+#include
+
+unsigned long register_notifier(gui *_g, char *notification, widget *w,
+ notifier handler, void *private)
+{
+ struct gui *g = _g;
+ unsigned long ret;
+
+ glock(g);
+
+ if (g->next_notifier_id == 2UL * 1024 * 1024 * 1024)
+ ERR("%s:%d: report a bug\n", __FILE__, __LINE__);
+
+ g->notifiers = realloc(g->notifiers,
+ (g->notifiers_count+1) * sizeof(struct notifier));
+ if (g->notifiers == NULL) abort();
+
+ ret = g->next_notifier_id;
+
+ g->notifiers[g->notifiers_count].handler = handler;
+ g->notifiers[g->notifiers_count].id = g->next_notifier_id;
+ g->next_notifier_id++;
+ g->notifiers[g->notifiers_count].notification = strdup(notification);
+ if (g->notifiers[g->notifiers_count].notification == NULL) abort();
+ g->notifiers[g->notifiers_count].w = w;
+ g->notifiers[g->notifiers_count].private = private;
+ /* initialize done to 1 so as not to call the handler if it's created
+ * by the call of another one that is in progress
+ */
+ g->notifiers[g->notifiers_count].done = 1;
+
+ g->notifiers_count++;
+
+ gunlock(g);
+
+ return ret;
+}
+
+void unregister_notifier(gui *_g, unsigned long notifier_id)
+{
+ struct gui *g = _g;
+ int i;
+
+ glock(g);
+
+ for (i = 0; i < g->notifiers_count; i++)
+ if (g->notifiers[i].id == notifier_id) break;
+
+ if (i == g->notifiers_count)
+ ERR("%s:%d: notifier_id %ld not found\n", __FILE__,__LINE__,notifier_id);
+
+ free(g->notifiers[i].notification);
+
+ memmove(g->notifiers + i, g->notifiers + i + 1,
+ (g->notifiers_count-1 - i) * sizeof(struct notifier));
+
+ g->notifiers_count--;
+ g->notifiers = realloc(g->notifiers,
+ g->notifiers_count * sizeof(struct notifier));
+ if (g->notifiers == NULL) abort();
+
+ gunlock(g);
+}
+
+/* called with lock ON */
+void gui_notify(struct gui *g, char *notification, widget *w,
+ void *notification_data)
+{
+ void *private;
+ notifier handler;
+ int i;
+
+ /* this function is not re-entrant, for the moment keep as is
+ * and if the need is there, we'll make a new thread to handle
+ * notifications (or something)
+ * for now let's crash in case of recursive call
+ */
+ static int inside = 0;
+ if (inside) ERR("%s:%d: BUG! contact the authors\n", __FILE__, __LINE__);
+ inside = 1;
+
+ /* clear all handlers */
+ /* TODO: speedup */
+ for (i = 0; i < g->notifiers_count; i++) g->notifiers[i].done = 0;
+
+ /* calling the handler may modify the list of notifiers, we
+ * need to be careful here
+ */
+loop:
+ for (i = 0; i < g->notifiers_count; i++) {
+ if (g->notifiers[i].done == 1 ||
+ g->notifiers[i].w != w ||
+ strcmp(g->notifiers[i].notification, notification) != 0)
+ continue;
+ break;
+ }
+ if (i == g->notifiers_count) goto done;
+
+ g->notifiers[i].done = 1;
+
+ handler = g->notifiers[i].handler;
+ private = g->notifiers[i].private;
+
+ gunlock(g);
+ handler(private, g, notification, w, notification_data);
+ glock(g);
+
+ goto loop;
+
+done:
+ inside = 0;
+}
diff --git a/common/utils/T/tracer/gui/positioner.c b/common/utils/T/tracer/gui/positioner.c
new file mode 100644
index 0000000000..673ffb32de
--- /dev/null
+++ b/common/utils/T/tracer/gui/positioner.c
@@ -0,0 +1,93 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include
+#include
+#include
+
+static void add_child(gui *g, widget *_this, widget *child, int position)
+{
+ LOGD("ADD_CHILD positioner\n");
+ struct positioner_widget *this = _this;
+ widget_add_child_internal(g, this, child, position);
+}
+
+static void del_child(gui *g, widget *_this, widget *child)
+{
+ LOGD("DEL_CHILD positioner\n");
+ struct positioner_widget *this = _this;
+ widget_del_child_internal(g, this, child);
+}
+
+static void allocate(
+ gui *_g, widget *_this, int x, int y, int width, int height)
+{
+ LOGD("ALLOCATE positioner %p\n", _this);
+ struct gui *g = _g;
+ struct positioner_widget *this = _this;
+ struct widget_list *l = this->common.children;
+ int cwidth, cheight;
+
+ this->common.x = x;
+ this->common.y = y;
+ this->common.width = width;
+ this->common.height = height;
+
+ if (l != NULL) {
+ l->item->hints(g, l->item, &cwidth, &cheight);
+ l->item->allocate(g, l->item, x+(width-cwidth)/2, y+(height-cheight)/2,
+ cwidth, cheight);
+ }
+}
+
+static void hints(gui *_gui, widget *_w, int *width, int *height)
+{
+ LOGD("HINTS positioner %p\n", _w);
+ struct gui *g = _gui;
+ struct positioner_widget *this = _w;
+ struct widget_list *l = this->common.children;
+ if (l != NULL)
+ l->item->hints(g, l->item, width, height);
+ else { *width = *height = 1; }
+}
+
+static void button(gui *_g, widget *_this, int x, int y,
+ int key_modifiers, int button, int up)
+{
+ LOGD("BUTTON positioner %p xy %d %d button %d up %d\n", _this, x, y, button, up);
+ struct gui *g = _g;
+ struct positioner_widget *this = _this;
+ struct widget_list *l = this->common.children;
+ if (l != NULL)
+ l->item->button(g, l->item, x, y, key_modifiers, button, up);
+}
+
+static void paint(gui *_gui, widget *_this)
+{
+ LOGD("PAINT positioner\n");
+ struct gui *g = _gui;
+ struct widget *this = _this;
+ struct widget_list *l = this->children;
+ if (l != NULL)
+ l->item->paint(g, l->item);
+}
+
+widget *new_positioner(gui *_gui)
+{
+ struct gui *g = _gui;
+ struct positioner_widget *w;
+
+ glock(g);
+
+ w = new_widget(g, POSITIONER, sizeof(struct positioner_widget));
+
+ w->common.paint = paint;
+ w->common.add_child = add_child;
+ w->common.del_child = del_child;
+ w->common.allocate = allocate;
+ w->common.hints = hints;
+ w->common.button = button;
+
+ gunlock(g);
+
+ return w;
+}
diff --git a/common/utils/T/tracer/gui/space.c b/common/utils/T/tracer/gui/space.c
new file mode 100644
index 0000000000..c98600b88d
--- /dev/null
+++ b/common/utils/T/tracer/gui/space.c
@@ -0,0 +1,36 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include
+
+static void paint(gui *_gui, widget *_w)
+{
+ /* nothing */
+}
+
+static void hints(gui *_gui, widget *_w, int *width, int *height)
+{
+ struct space_widget *w = _w;
+ LOGD("HINTS space %p\n", w);
+ *width = w->wanted_width;
+ *height = w->wanted_height;
+}
+
+widget *new_space(gui *_gui, int width, int height)
+{
+ struct gui *g = _gui;
+ struct space_widget *w;
+
+ glock(g);
+
+ w = new_widget(g, SPACE, sizeof(struct space_widget));
+
+ w->wanted_width = width;
+ w->wanted_height = height;
+
+ w->common.paint = paint;
+ w->common.hints = hints;
+
+ gunlock(g);
+
+ return w;
+}
diff --git a/common/utils/T/tracer/gui/test.c b/common/utils/T/tracer/gui/test.c
new file mode 100644
index 0000000000..f64d02347e
--- /dev/null
+++ b/common/utils/T/tracer/gui/test.c
@@ -0,0 +1,46 @@
+#include "gui.h"
+
+int main(void)
+{
+ gui *g;
+ widget *w, *c1, *c2, *l, *plot, *tl;
+ int tlcol;
+
+ g = gui_init();
+
+ c1 = new_container(g, VERTICAL);
+ c2 = new_container(g, HORIZONTAL);
+
+ l = new_label(g, "this is a good label");
+ widget_add_child(g, c2, l, 0);
+ l = new_label(g, "this is another good label");
+ widget_add_child(g, c2, l, -1);
+
+ l = new_label(g, "OH! WHAT A LABEL!");
+ widget_add_child(g, c1, l, -1);
+
+ widget_add_child(g, c1, c2, 0);
+
+ plot = new_xy_plot(g, 100, 100, "xy plot test", 30);
+#if 0
+ c2 = new_container(g, HORIZONTAL);
+ widget_add_child(g, c2, plot, -1);
+ widget_add_child(g, c1, c2, -1);
+#else
+ widget_add_child(g, c1, plot, -1);
+#endif
+
+ tlcol = new_color(g, "#ddf");
+ tl = new_textlist(g, 300, 10, tlcol);
+ widget_add_child(g, c1, tl, -1);
+
+ textlist_add(g, tl, "hello", -1, FOREGROUND_COLOR);
+ textlist_add(g, tl, "world", -1, FOREGROUND_COLOR);
+
+ w = new_toplevel_window(g, 500, 400, "test window");
+ widget_add_child(g, w, c1, 0);
+
+ gui_loop(g);
+
+ return 0;
+}
diff --git a/common/utils/T/tracer/gui/textlist.c b/common/utils/T/tracer/gui/textlist.c
new file mode 100644
index 0000000000..896cba5b9e
--- /dev/null
+++ b/common/utils/T/tracer/gui/textlist.c
@@ -0,0 +1,248 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include "x.h"
+#include
+#include
+#include
+
+static void paint(gui *_gui, widget *_this)
+{
+ struct gui *g = _gui;
+ struct textlist_widget *this = _this;
+ int i, j;
+ LOGD("PAINT textlist %p xywh %d %d %d %d starting line %d allocated nlines %d text_count %d\n", _this, this->common.x, this->common.y, this->common.width, this->common.height, this->starting_line, this->allocated_nlines, this->text_count);
+ x_fill_rectangle(g->x, g->xwin, this->background_color,
+ this->common.x, this->common.y,
+ this->common.width, this->common.height);
+ for (i = 0, j = this->starting_line;
+ i < this->allocated_nlines && j < this->text_count; i++, j++)
+ x_draw_clipped_string(g->x, g->xwin, DEFAULT_FONT, this->color[j],
+ this->common.x,
+ this->common.y + i * this->line_height + this->baseline,
+ this->text[j],
+ this->common.x, this->common.y,
+ this->common.width, this->common.height);
+}
+
+static void hints(gui *_gui, widget *_w, int *width, int *height)
+{
+ struct textlist_widget *w = _w;
+ *width = w->wanted_width;
+ *height = w->wanted_nlines * w->line_height;
+ LOGD("HINTS textlist wh %d %d\n", *width, *height);
+}
+
+static void allocate(
+ gui *gui, widget *_this, int x, int y, int width, int height)
+{
+ struct textlist_widget *this = _this;
+ this->common.x = x;
+ this->common.y = y;
+ this->common.width = width;
+ this->common.height = height;
+ this->allocated_nlines = height / this->line_height;
+ LOGD("ALLOCATE textlist %p xywh %d %d %d %d nlines %d\n", this, x, y, width, height, this->allocated_nlines);
+}
+
+static void button(gui *_g, widget *_this, int x, int y,
+ int key_modifiers, int button, int up)
+{
+ struct gui *g = _g;
+ struct textlist_widget *this = _this;
+ LOGD("BUTTON textlist %p xy %d %d button %d up %d\n", _this, x, y, button, up);
+ y -= this->common.y;
+ x -= this->common.x;
+ /* scroll up */
+ if (button == 4 && up == 0) {
+ gui_notify(g, "scrollup", _this, NULL);
+ }
+ /* scroll down */
+ if (button == 5 && up == 0) {
+ gui_notify(g, "scrolldown", _this, NULL);
+ }
+ /* button 1/2/3 click */
+ if (button >= 1 && button <= 3 && up == 0) {
+ int line = this->starting_line + y / this->line_height;
+ if (line >= 0 && line < this->text_count)
+ gui_notify(g, "click", _this, (int[2]){ line, button });
+ }
+}
+
+widget *new_textlist(gui *_gui, int width, int nlines, int bgcol)
+{
+ struct gui *g = _gui;
+ struct textlist_widget *w;
+ int dummy;
+
+ glock(g);
+
+ w = new_widget(g, TEXT_LIST, sizeof(struct textlist_widget));
+
+ w->wanted_nlines = nlines;
+ x_text_get_dimensions(g->x, DEFAULT_FONT, ".",
+ &dummy, &w->line_height, &w->baseline);
+ w->background_color = bgcol;
+ w->wanted_width = width;
+
+ w->common.paint = paint;
+ w->common.hints = hints;
+ w->common.allocate = allocate;
+
+ w->common.button = button;
+
+ gunlock(g);
+
+ return w;
+}
+
+/*************************************************************************/
+/* public functions */
+/*************************************************************************/
+
+static void _textlist_add(gui *_gui, widget *_this, const char *text,
+ int position, int color, int silent)
+{
+ struct gui *g = _gui;
+ struct textlist_widget *this = _this;
+
+ glock(g);
+
+ if (position < 0) position = this->text_count;
+ if (position > this->text_count) position = this->text_count;
+
+ this->text_count++;
+ this->text = realloc(this->text, this->text_count * sizeof(char *));
+ if (this->text == NULL) OOM;
+ this->color = realloc(this->color, this->text_count * sizeof(int));
+ if (this->color == NULL) OOM;
+
+ memmove(this->text + position + 1, this->text + position,
+ (this->text_count-1 - position) * sizeof(char *));
+ memmove(this->color + position + 1, this->color + position,
+ (this->text_count-1 - position) * sizeof(int));
+
+ this->text[position] = strdup(text); if (this->text[position] == NULL) OOM;
+ this->color[position] = color;
+
+ if (!silent) send_event(g, DIRTY, this->common.id);
+
+ gunlock(g);
+}
+
+static void _textlist_del(gui *_gui, widget *_this, int position, int silent)
+{
+ struct gui *g = _gui;
+ struct textlist_widget *this = _this;
+
+ glock(g);
+
+ /* TODO: useful check? */
+ if (this->text_count == 0) goto done;
+
+ if (position < 0) position = this->text_count;
+ if (position > this->text_count-1) position = this->text_count-1;
+
+ free(this->text[position]);
+
+ memmove(this->text + position, this->text + position + 1,
+ (this->text_count-1 - position) * sizeof(char *));
+ memmove(this->color + position, this->color + position + 1,
+ (this->text_count-1 - position) * sizeof(int));
+
+ this->text_count--;
+ this->text = realloc(this->text, this->text_count * sizeof(char *));
+ if (this->text == NULL) OOM;
+ this->color = realloc(this->color, this->text_count * sizeof(int));
+ if (this->color == NULL) OOM;
+
+ if (!silent) send_event(g, DIRTY, this->common.id);
+
+done:
+ gunlock(g);
+}
+
+void textlist_add(gui *gui, widget *this, const char *text, int position,
+ int color)
+{
+ _textlist_add(gui, this, text, position, color, 0);
+}
+
+void textlist_del(gui *gui, widget *this, int position)
+{
+ _textlist_del(gui, this, position, 0);
+}
+
+void textlist_add_silent(gui *gui, widget *this, const char *text,
+ int position, int color)
+{
+ _textlist_add(gui, this, text, position, color, 1);
+}
+
+void textlist_del_silent(gui *gui, widget *this, int position)
+{
+ _textlist_del(gui, this, position, 1);
+}
+
+void textlist_state(gui *_gui, widget *_this,
+ int *visible_lines, int *start_line, int *number_of_lines)
+{
+ struct gui *g = _gui;
+ struct textlist_widget *this = _this;
+
+ glock(g);
+
+ *visible_lines = this->allocated_nlines;
+ *start_line = this->starting_line;
+ *number_of_lines = this->text_count;
+
+ gunlock(g);
+}
+
+void textlist_set_start_line(gui *_gui, widget *_this, int line)
+{
+ struct gui *g = _gui;
+ struct textlist_widget *this = _this;
+
+ glock(g);
+
+ this->starting_line = line;
+
+ send_event(g, DIRTY, this->common.id);
+
+ gunlock(g);
+}
+
+void textlist_get_line(gui *_gui, widget *_this, int line,
+ char **text, int *color)
+{
+ struct gui *g = _gui;
+ struct textlist_widget *this = _this;
+
+ glock(g);
+
+ if (line < 0 || line >= this->text_count) {
+ *text = NULL;
+ *color = -1;
+ } else {
+ *text = this->text[line];
+ *color = this->color[line];
+ }
+
+ gunlock(g);
+}
+
+void textlist_set_color(gui *_gui, widget *_this, int line, int color)
+{
+ struct gui *g = _gui;
+ struct textlist_widget *this = _this;
+
+ glock(g);
+
+ if (line >= 0 && line < this->text_count) {
+ this->color[line] = color;
+
+ send_event(g, DIRTY, this->common.id);
+ }
+
+ gunlock(g);
+}
diff --git a/common/utils/T/tracer/gui/timeline.c b/common/utils/T/tracer/gui/timeline.c
new file mode 100644
index 0000000000..d2373ff60a
--- /dev/null
+++ b/common/utils/T/tracer/gui/timeline.c
@@ -0,0 +1,214 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include "x.h"
+#include
+#include
+
+static void paint(gui *_gui, widget *_this)
+{
+ struct gui *g = _gui;
+ struct timeline_widget *this = _this;
+ int i;
+ int j;
+
+ for (i = 0; i < this->n; i++) {
+ x_fill_rectangle(g->x, g->xwin, this->s[i].background,
+ this->common.x, this->common.y + i * this->subline_height,
+ this->common.width, this->subline_height);
+ for (j = 0; j < this->s[i].width; j++)
+ if (this->s[i].color[j] != -1)
+ x_draw_line(g->x, g->xwin, this->s[i].color[j],
+ this->common.x + j, this->common.y + i * this->subline_height,
+ this->common.x + j, this->common.y + this->subline_height -1
+ + i * this->subline_height);
+ }
+
+ LOGD("PAINT timeline xywh %d %d %d %d\n", this->common.x, this->common.y, this->common.width, this->common.height);
+}
+
+static void hints(gui *_gui, widget *_w, int *width, int *height)
+{
+ struct timeline_widget *w = _w;
+ *width = w->wanted_width;
+ *height = w->n * w->subline_height;
+ LOGD("HINTS timeline wh %d %d\n", *width, *height);
+}
+
+static void allocate(gui *_gui, widget *_this,
+ int x, int y, int width, int height)
+{
+ struct timeline_widget *this = _this;
+ int i;
+ int j;
+ this->common.x = x;
+ this->common.y = y;
+ this->common.width = width;
+ this->common.height = height;
+ LOGD("ALLOCATE timeline %p xywh %d %d %d %d\n", this, x, y, width, height);
+ for (i = 0; i < this->n; i++) {
+ this->s[i].width = width;
+ this->s[i].color = realloc(this->s[i].color, width * sizeof(int));
+ if (this->s[i].color == NULL) abort();
+ for (j = 0; j < width; j++) this->s[i].color[j] = -1;
+ }
+ gui_notify(_gui, "resize", _this, &width);
+}
+
+static void button(gui *_g, widget *_this, int x, int y,
+ int key_modifiers, int button, int up)
+{
+ struct gui *g = _g;
+ struct timeline_widget *w = _this;
+ int d[3];
+ LOGD("BUTTON timeline %p xy %d %d button %d up %d\n", _this, x, y, button, up);
+ /* scroll up */
+ if (button == 4 && up == 0) {
+ d[0] = x - w->common.x;
+ d[1] = y - w->common.y;
+ d[2] = key_modifiers;
+ gui_notify(g, "scrollup", _this, d);
+ }
+ /* scroll down */
+ if (button == 5 && up == 0) {
+ d[0] = x - w->common.x;
+ d[1] = y - w->common.y;
+ d[2] = key_modifiers;
+ gui_notify(g, "scrolldown", _this, d);
+ }
+ /* button 1/2/3 */
+ if ((button == 1 || button == 2 || button == 3) && up == 0) {
+ gui_notify(g, "click", _this, &button);
+ }
+}
+
+/*************************************************************************/
+/* creation function */
+/*************************************************************************/
+
+widget *new_timeline(gui *_gui, int width, int number_of_sublines,
+ int subline_height)
+{
+ struct gui *g = _gui;
+ struct timeline_widget *w;
+ int i;
+ int j;
+
+ glock(g);
+
+ w = new_widget(g, TIMELINE, sizeof(struct timeline_widget));
+
+ w->wanted_width = width;
+ w->n = number_of_sublines;
+ w->s = calloc(w->n, sizeof(struct timeline_subline)); if (w->s == NULL) OOM;
+ w->subline_height = subline_height;
+
+ /* initialize colors */
+ for (i = 0; i < w->n; i++) {
+ w->s[i].width = width;
+ w->s[i].color = calloc(width, sizeof(int));
+ if (w->s[i].color == NULL) abort();
+ for (j = 0; j < width; j++) w->s[i].color[j] = -1;
+ w->s[i].background = BACKGROUND_COLOR;
+ }
+
+ w->common.paint = paint;
+ w->common.hints = hints;
+ w->common.allocate = allocate;
+ w->common.button = button;
+
+ gunlock(g);
+
+ return w;
+}
+
+/*************************************************************************/
+/* public functions */
+/*************************************************************************/
+
+static void _timeline_clear(gui *_gui, widget *_this, int silent)
+{
+ struct gui *g = _gui;
+ struct timeline_widget *this = _this;
+ int i;
+ int j;
+
+ glock(g);
+
+ for (i = 0; i < this->n; i++)
+ for (j = 0; j < this->s[i].width; j++)
+ this->s[i].color[j] = -1;
+
+ if (silent == 0)
+ send_event(g, DIRTY, this->common.id);
+
+ gunlock(g);
+}
+
+void timeline_clear(gui *_gui, widget *_this)
+{
+ _timeline_clear(_gui, _this, 0);
+}
+
+void timeline_clear_silent(gui *_gui, widget *_this)
+{
+ _timeline_clear(_gui, _this, 1);
+}
+
+static void _timeline_add_points(gui *_gui, widget *_this, int subline,
+ int color, int *x, int len, int silent)
+{
+ struct gui *g = _gui;
+ struct timeline_widget *this = _this;
+ int i;
+
+ glock(g);
+
+ for (i = 0; i < len; i++) {
+ if (x[i] >= this->s[subline].width) { WARN("out of bounds\n"); continue; }
+ this->s[subline].color[x[i]] = color;
+ }
+
+ if (silent == 0)
+ send_event(g, DIRTY, this->common.id);
+
+ gunlock(g);
+}
+
+void timeline_add_points(gui *_gui, widget *_this, int subline, int color,
+ int *x, int len)
+{
+ _timeline_add_points(_gui, _this, subline, color, x, len, 0);
+}
+
+void timeline_add_points_silent(gui *_gui, widget *_this, int subline,
+ int color, int *x, int len)
+{
+ _timeline_add_points(_gui, _this, subline, color, x, len, 1);
+}
+
+void timeline_set_subline_background_color(gui *_gui, widget *_this,
+ int subline, int color)
+{
+ struct gui *g = _gui;
+ struct timeline_widget *this = _this;
+
+ glock(g);
+
+ this->s[subline].background = color;
+
+ send_event(g, DIRTY, this->common.id);
+
+ gunlock(g);
+}
+
+void timeline_get_width(gui *_gui, widget *_this, int *width)
+{
+ struct gui *g = _gui;
+ struct timeline_widget *this = _this;
+
+ glock(g);
+
+ *width = this->common.width == 0 ? this->wanted_width : this->common.width;
+
+ gunlock(g);
+}
diff --git a/common/utils/T/tracer/gui/toplevel_window.c b/common/utils/T/tracer/gui/toplevel_window.c
new file mode 100644
index 0000000000..d2436c84f9
--- /dev/null
+++ b/common/utils/T/tracer/gui/toplevel_window.c
@@ -0,0 +1,97 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include "x.h"
+#include
+#include
+
+/**********************************************************************/
+/* callback functions */
+/**********************************************************************/
+
+static void repack(gui *g, widget *_this)
+{
+ LOGD("REPACK toplevel_window\n");
+ struct toplevel_window_widget *this = _this;
+ if (this->common.children == NULL) ERR("toplevel window has no child\n");
+ if (this->common.children->next != NULL)
+ ERR("toplevel window has too much children\n");
+ this->common.children->item->allocate(g, this->common.children->item,
+ 0 /* x */, 0 /* y */, this->common.width, this->common.height);
+ send_event(g, DIRTY, this->common.id);
+}
+
+static void add_child(gui *_gui, widget *_this, widget *child, int position)
+{
+ LOGD("ADD_CHILD toplevel_window\n");
+ struct widget *this = _this;
+ if (this->children != NULL) {
+ WARN("toplevel window already has a child\n");
+ return;
+ }
+ widget_add_child_internal(_gui, _this, child, 0); /* this does the REPACK */
+}
+
+/* called when the underlying window is resized by the user or the system */
+static void allocate(
+ gui *_gui, widget *_this, int x, int y, int width, int height)
+{
+ LOGD("ALLOCATE toplevel_window\n");
+ struct toplevel_window_widget *this = _this;
+ this->common.width = width;
+ this->common.height = height;
+// repack(_gui, _this);
+ send_event(_gui, REPACK, this->common.id);
+}
+
+static void paint(gui *_gui, widget *_this)
+{
+ struct gui *g = _gui;
+ struct toplevel_window_widget *this = _this;
+ LOGD("PAINT toplevel_window (%d %d)\n", this->common.width, this->common.height);
+ x_fill_rectangle(g->x, this->x, BACKGROUND_COLOR,
+ 0, 0, this->common.width, this->common.height);
+ g->xwin = this->x;
+ this->common.children->item->paint(_gui, this->common.children->item);
+ g->xwin = NULL; /* TODO: remove? it's just in case */
+}
+
+static void button(gui *_g, widget *_this, int x, int y,
+ int key_modifiers, int button, int up)
+{
+ struct gui *g = _g;
+ struct toplevel_window_widget *this = _this;
+ g->xwin = this->x;
+ this->common.children->item->button(_g, this->common.children->item,
+ x, y, key_modifiers, button, up);
+ g->xwin = NULL; /* TODO: remove? it's just in case */
+}
+
+/**********************************************************************/
+/* creation */
+/**********************************************************************/
+
+widget *new_toplevel_window(gui *_gui, int width, int height, char *title)
+{
+ struct gui *g = _gui;
+ struct toplevel_window_widget *w;
+
+ glock(g);
+
+ w = new_widget(g, TOPLEVEL_WINDOW, sizeof(struct toplevel_window_widget));
+
+ w->common.width = width;
+ w->common.height = height;
+
+ w->x = x_create_window(g->x, width, height, title);
+
+ w->common.repack = repack;
+ w->common.add_child = add_child;
+ w->common.allocate = allocate;
+ w->common.paint = paint;
+
+ w->common.button = button;
+
+ gunlock(g);
+
+ return w;
+}
diff --git a/common/utils/T/tracer/gui/widget.c b/common/utils/T/tracer/gui/widget.c
new file mode 100644
index 0000000000..362d2e1e48
--- /dev/null
+++ b/common/utils/T/tracer/gui/widget.c
@@ -0,0 +1,322 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include "x.h"
+#include
+#include
+#include
+#include
+
+static void default_clear(gui *gui, widget *_this);
+static void default_repack(gui *gui, widget *_this);
+static void default_allocate(
+ gui *gui, widget *_this, int x, int y, int width, int height);
+static void default_add_child(
+ gui *_gui, widget *_this, widget *child, int position);
+static void default_del_child(gui *_gui, widget *_this, widget *child);
+static void default_hints(gui *g, widget *this, int *width, int *height);
+static void default_button(gui *gui, widget *_this, int x, int y,
+ int key_modifiers, int button, int up);
+
+static void toplevel_list_append(struct gui *g, struct widget *e)
+{
+ struct widget_list *new;
+
+ new = calloc(1, sizeof(struct widget_list));
+ if (new == NULL) OOM;
+
+ new->item = e;
+
+ if (g->toplevel == NULL) {
+ g->toplevel = new;
+ new->last = new;
+ return;
+ }
+
+ g->toplevel->last->next = new;
+ g->toplevel->last = new;
+}
+
+widget *new_widget(struct gui *g, enum widget_type type, int size)
+{
+ struct widget *ret;
+
+ //glock(g);
+
+ ret = calloc(1, size);
+ if (ret == NULL) OOM;
+
+ ret->clear = default_clear;
+ ret->repack = default_repack;
+ ret->add_child = default_add_child;
+ ret->del_child = default_del_child;
+ ret->allocate = default_allocate;
+ ret->hints = default_hints;
+ ret->button = default_button;
+ /* there is no default paint, on purpose */
+
+ ret->type = type;
+ ret->id = g->next_id;
+ g->next_id++;
+ ret->width = 0;
+ ret->height = 0;
+
+ /* add toplevel windows to g->toplevel */
+ if (type == TOPLEVEL_WINDOW)
+ toplevel_list_append(g, ret);
+
+ //gunlock(g);
+
+ return ret;
+}
+
+/*************************************************************************/
+/* internal functions */
+/*************************************************************************/
+
+void widget_add_child_internal(
+ gui *_gui, widget *parent, widget *child, int position)
+{
+ struct widget *p = parent;
+ struct widget *c = child;
+ struct widget_list *new;
+ struct widget_list *prev, *cur;
+ int i;
+
+ new = calloc(1, sizeof(struct widget_list));
+ if (new == NULL) OOM;
+
+ new->item = c;
+ c->parent = p;
+
+ prev = NULL;
+ cur = p->children;
+
+ for (i = 0; position < 0 || i < position; i++) {
+ if (cur == NULL) break;
+ prev = cur;
+ cur = cur->next;
+ }
+
+ /* TODO: warn/err if i != position+1? */
+
+ if (prev == NULL) {
+ /* new is at head */
+ new->next = p->children;
+ if (p->children != NULL) new->last = p->children->last;
+ else new->last = new;
+ p->children = new;
+ goto repack;
+ }
+
+ if (cur == NULL) {
+ /* new is at tail */
+ prev->next = new;
+ p->children->last = new;
+ goto repack;
+ }
+
+ /* new is between two existing items */
+ prev->next = new;
+ new->next = cur;
+
+repack:
+ send_event(_gui, REPACK, p->id);
+}
+
+void widget_del_child_internal(gui *_gui, widget *parent, widget *child)
+{
+ struct widget *p = parent;
+ struct widget *c = child;
+ struct widget_list *prev, *cur;
+
+ c->parent = NULL;
+
+ prev = NULL;
+ cur = p->children;
+
+ while (cur != NULL && cur->item != c) {
+ prev = cur;
+ cur = cur->next;
+ }
+
+ if (cur == NULL) ERR("child not found\n");
+
+ if (prev == NULL) {
+ /* child is at head */
+ p->children = cur->next;
+ if (p->children != NULL) p->children->last = cur->last;
+ goto done;
+ }
+
+ if (cur->next == NULL) {
+ /* child is last (and prev is != NULL) */
+ prev->next = NULL;
+ p->children->last = prev;
+ goto done;
+ }
+
+ /* child is between two existing items */
+ prev->next = cur->next;
+
+done:
+ free(cur);
+ send_event(_gui, REPACK, p->id);
+}
+
+int widget_get_child_position(gui *_gui, widget *parent, widget *child)
+{
+ struct widget *p = parent;
+ struct widget *c = child;
+ struct widget_list *cur;
+ int i = 0;
+
+ cur = p->children;
+
+ while (cur != NULL && cur->item != c) {
+ cur = cur->next;
+ i++;
+ }
+
+ if (cur == NULL) return -1;
+ return i;
+}
+
+/*************************************************************************/
+/* default functions */
+/*************************************************************************/
+
+static void default_clear(gui *_gui, widget *_this)
+{
+ struct gui *g = _gui;
+ struct widget *this = _this;
+ x_fill_rectangle(g->x, g->xwin, BACKGROUND_COLOR,
+ this->x, this->y, this->width, this->height);
+}
+
+static void default_repack(gui *gui, widget *_this)
+{
+ struct widget *this = _this;
+ return this->parent->repack(gui, this->parent);
+}
+
+static void default_add_child(
+ gui *_gui, widget *_this, widget *child, int position)
+{
+ struct widget *this = _this;
+ WARN("cannot add child to widget %s\n", widget_name(this->type));
+}
+
+static void default_del_child( gui *_gui, widget *_this, widget *child)
+{
+ struct widget *this = _this;
+ WARN("cannot del child from widget %s\n", widget_name(this->type));
+}
+
+static void default_allocate(
+ gui *gui, widget *_this, int x, int y, int width, int height)
+{
+ struct widget *this = _this;
+ this->x = x;
+ this->y = y;
+ this->width = width;
+ this->height = height;
+}
+
+static void default_hints(gui *g, widget *this, int *width, int *height)
+{
+ *width = 1;
+ *height = 1;
+}
+
+static void default_button(gui *gui, widget *_this, int x, int y,
+ int key_modifiers, int button, int up)
+{
+ /* nothing */
+}
+
+/*************************************************************************/
+/* utils functions */
+/*************************************************************************/
+
+void widget_add_child(gui *_gui, widget *parent, widget *child, int position)
+{
+ struct widget *this = parent;
+ glock(_gui);
+ this->add_child(_gui, parent, child, position);
+ gunlock(_gui);
+}
+
+void widget_del_child(gui *_gui, widget *parent, widget *child)
+{
+ struct widget *this = parent;
+ glock(_gui);
+ this->del_child(_gui, parent, child);
+ gunlock(_gui);
+}
+
+void widget_dirty(gui *_gui, widget *_this)
+{
+ struct gui *g = _gui;
+ struct widget *this = _this;
+ glock(g);
+ send_event(g, DIRTY, this->id);
+ gunlock(g);
+}
+
+static const char *names[] = {
+ "TOPLEVEL_WINDOW", "CONTAINER", "POSITIONER", "TEXT_LIST",
+ "XY_PLOT", "BUTTON", "LABEL", "TIMELINE", "SPACE", "IMAGE"
+};
+const char *widget_name(enum widget_type type)
+{
+ switch (type) {
+ case TOPLEVEL_WINDOW:
+ case CONTAINER:
+ case POSITIONER:
+ case TEXT_LIST:
+ case XY_PLOT:
+ case BUTTON:
+ case LABEL:
+ case TIMELINE:
+ case SPACE:
+ case IMAGE:
+ return names[type];
+ }
+ return "UNKNOWN (error)";
+}
+
+/*************************************************************************/
+/* find a widget */
+/*************************************************************************/
+
+/* TODO: optimize traversal and also use a cache */
+struct widget *_find_widget(struct widget *c, int id)
+{
+ struct widget_list *l;
+ struct widget *ret;
+ if (c == NULL) return NULL;
+ if (c->id == id) return c;
+ l = c->children;
+ while (l) {
+ ret = _find_widget(l->item, id);
+ if (ret != NULL) return ret;
+ l = l->next;
+ }
+ return NULL;
+}
+
+struct widget *find_widget(struct gui *g, int id)
+{
+ struct widget_list *l;
+ struct widget *ret;
+
+ l = g->toplevel;
+
+ while (l) {
+ ret = _find_widget(l->item, id);
+ if (ret != NULL) return ret;
+ l = l->next;
+ }
+
+ return NULL;
+}
diff --git a/common/utils/T/tracer/gui/x.c b/common/utils/T/tracer/gui/x.c
new file mode 100644
index 0000000000..af3d05cc14
--- /dev/null
+++ b/common/utils/T/tracer/gui/x.c
@@ -0,0 +1,435 @@
+#include "x.h"
+#include "x_defs.h"
+#include "gui_defs.h"
+#include
+#include
+#include
+#include
+#include
+
+int x_connection_fd(x_connection *_x)
+{
+ struct x_connection *x = _x;
+ return ConnectionNumber(x->d);
+}
+
+static GC create_gc(Display *d, char *color)
+{
+ GC ret = XCreateGC(d, DefaultRootWindow(d), 0, NULL);
+ XGCValues gcv;
+ XColor rcol, scol;
+
+ XCopyGC(d, DefaultGC(d, DefaultScreen(d)), -1L, ret);
+ if (XAllocNamedColor(d, DefaultColormap(d, DefaultScreen(d)),
+ color, &scol, &rcol)) {
+ gcv.foreground = scol.pixel;
+ XChangeGC(d, ret, GCForeground, &gcv);
+ } else ERR("X: could not allocate color '%s'\n", color);
+
+ return ret;
+}
+
+int x_new_color(x_connection *_x, char *color)
+{
+ struct x_connection *x = _x;
+ x->ncolors++;
+
+ x->colors = realloc(x->colors, x->ncolors * sizeof(GC));
+ if (x->colors == NULL) OOM;
+ x->colors[x->ncolors-1] = create_gc(x->d, color);
+
+ x->xft_colors = realloc(x->xft_colors, x->ncolors * sizeof(XftColor));
+ if (x->xft_colors == NULL) OOM;
+ if (XftColorAllocName(x->d, DefaultVisual(x->d, DefaultScreen(x->d)),
+ DefaultColormap(x->d, DefaultScreen(x->d)),
+ color, &x->xft_colors[x->ncolors-1]) == False)
+ ERR("could not allocate color '%s'\n", color);
+
+ return x->ncolors - 1;
+}
+
+int x_new_font(x_connection *_x, char *font)
+{
+ struct x_connection *x = _x;
+ /* TODO: allocate fonts only once */
+ x->nfonts++;
+ x->fonts = realloc(x->fonts, x->nfonts * sizeof(XftFont *));
+ if (x->fonts == NULL) OOM;
+ x->fonts[x->nfonts-1] = XftFontOpenName(x->d, DefaultScreen(x->d), font);
+ if (x->fonts[x->nfonts-1] == NULL)
+ ERR("failed allocating font '%s'\n", font);
+ return x->nfonts - 1;
+}
+
+x_connection *x_open(void)
+{
+ struct x_connection *ret;
+
+ ret = calloc(1, sizeof(struct x_connection));
+ if (ret == NULL) OOM;
+
+ ret->d = XOpenDisplay(0);
+ LOGD("XOpenDisplay display %p return x_connection %p\n", ret->d, ret);
+ if (ret->d == NULL) ERR("error calling XOpenDisplay: no X? you root?\n");
+
+ x_new_color(ret, "white"); /* background color */
+ x_new_color(ret, "black"); /* foreground color */
+
+ x_new_font(ret, "sans-8");
+
+ return ret;
+}
+
+x_window *x_create_window(x_connection *_x, int width, int height,
+ char *title)
+{
+ struct x_connection *x = _x;
+ struct x_window *ret;
+
+ ret = calloc(1, sizeof(struct x_window));
+ if (ret == NULL) OOM;
+
+ ret->w = XCreateSimpleWindow(x->d, DefaultRootWindow(x->d), 0, 0,
+ width, height, 0, WhitePixel(x->d, DefaultScreen(x->d)),
+ WhitePixel(x->d, DefaultScreen(x->d)));
+ ret->width = width;
+ ret->height = height;
+
+ XStoreName(x->d, ret->w, title);
+
+ ret->p = XCreatePixmap(x->d, ret->w, width, height,
+ DefaultDepth(x->d, DefaultScreen(x->d)));
+ XFillRectangle(x->d, ret->p, x->colors[BACKGROUND_COLOR],
+ 0, 0, width, height);
+
+ ret->xft = XftDrawCreate(x->d, ret->p,
+ DefaultVisual(x->d, DefaultScreen(x->d)),
+ DefaultColormap(x->d, DefaultScreen(x->d)));
+ if (ret->xft == NULL) ERR("XftDrawCreate failed\n");
+
+ /* enable backing store */
+ {
+ XSetWindowAttributes att;
+ att.backing_store = Always;
+ XChangeWindowAttributes(x->d, ret->w, CWBackingStore, &att);
+ }
+
+ XSelectInput(x->d, ret->w,
+ KeyPressMask |
+ ButtonPressMask |
+ ButtonReleaseMask |
+ PointerMotionMask |
+ ExposureMask |
+ StructureNotifyMask);
+
+ XMapWindow(x->d, ret->w);
+
+#if 0
+ /* wait for window to be mapped */
+ LOGD("wait for map\n");
+ while (1) {
+ XEvent ev;
+ //XWindowEvent(x->d, ret->w, StructureNotifyMask, &ev);
+ XWindowEvent(x->d, ret->w, ExposureMask, &ev);
+ LOGD("got ev %d\n", ev.type);
+ //if (ev.type == MapNotify) break;
+ if (ev.type == Expose) break;
+ }
+ LOGD("XXX create connection %p window %p (win id %d pixmap %d) w h %d %d\n", x, ret, (int)ret->w, (int)ret->p, width, height);
+#endif
+
+ return ret;
+}
+
+x_image *x_create_image(x_connection *_x, unsigned char *data,
+ int width, int height)
+{
+ struct x_connection *x = _x;
+ struct x_image *ret;
+ XImage *ximage;
+ XVisualInfo *vs;
+ XVisualInfo template;
+ int nvs;
+ Visual *v;
+
+ ret = calloc(1, sizeof(struct x_image)); if (ret == NULL) OOM;
+
+ template.class = TrueColor;
+ template.depth = 24;
+ template.red_mask = 0xff0000;
+ template.green_mask = 0x00ff00;
+ template.blue_mask = 0x0000ff;
+ template.bits_per_rgb = 8;
+
+ vs = XGetVisualInfo(x->d, VisualDepthMask | VisualClassMask |
+ VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask |
+ VisualBitsPerRGBMask, &template, &nvs);
+ if (vs == NULL || nvs == 0) ERR("no good visual found\n");
+ v = vs[0].visual;
+ XFree(vs);
+
+ ximage = XCreateImage(x->d, v, 24, ZPixmap, 0,
+ (char*)data, width, height, 32, 0);
+ if (ximage == NULL) ERR("image creation failed\n");
+
+ ret->p = XCreatePixmap(x->d, DefaultRootWindow(x->d), width, height, 24);
+
+ XPutImage(x->d, ret->p, DefaultGC(x->d, DefaultScreen(x->d)),
+ ximage, 0, 0, 0, 0, width, height);
+
+ /* TODO: be sure it's fine to set data to NULL */
+ ximage->data = NULL;
+ XDestroyImage(ximage);
+
+ ret->width = width;
+ ret->height = height;
+
+ return ret;
+}
+
+static struct toplevel_window_widget *find_x_window(struct gui *g, Window id)
+{
+ struct widget_list *cur;
+ struct toplevel_window_widget *w;
+ struct x_window *xw;
+ cur = g->toplevel;
+ while (cur) {
+ w = (struct toplevel_window_widget *)cur->item;
+ xw = w->x;
+ if (xw->w == id) return w;
+ cur = cur->next;
+ }
+ return NULL;
+}
+
+void x_events(gui *_gui)
+{
+ struct gui *g = _gui;
+ struct widget_list *cur;
+ struct x_connection *x = g->x;
+ struct toplevel_window_widget *w;
+
+ LOGD("x_events START\n");
+ /* preprocessing (to "compress" events) */
+ cur = g->toplevel;
+ while (cur) {
+ struct x_window *xw;
+ w = (struct toplevel_window_widget *)cur->item;
+ xw = w->x;
+ xw->redraw = 0;
+ xw->repaint = 0;
+ xw->resize = 0;
+ cur = cur->next;
+ }
+
+ while (XPending(x->d)) {
+ XEvent ev;
+ XNextEvent(x->d, &ev);
+ LOGD("XEV %d\n", ev.type);
+ switch (ev.type) {
+ case MapNotify:
+ case Expose:
+ if ((w = find_x_window(g, ev.xexpose.window)) != NULL) {
+ struct x_window *xw = w->x;
+ xw->redraw = 1;
+ }
+ break;
+ case ConfigureNotify:
+ if ((w = find_x_window(g, ev.xconfigure.window)) != NULL) {
+ struct x_window *xw = w->x;
+ xw->resize = 1;
+ xw->new_width = ev.xconfigure.width;
+ xw->new_height = ev.xconfigure.height;
+ if (xw->new_width < 10) xw->new_width = 10;
+ if (xw->new_height < 10) xw->new_height = 10;
+ LOGD("ConfigureNotify %d %d\n", ev.xconfigure.width, ev.xconfigure.height);
+ }
+ break;
+ case ButtonPress:
+ if ((w = find_x_window(g, ev.xbutton.window)) != NULL) {
+ int key_modifiers = 0;
+ if (ev.xbutton.state & ShiftMask) key_modifiers |= KEY_SHIFT;
+ if (ev.xbutton.state & Mod1Mask) key_modifiers |= KEY_ALT;
+ if (ev.xbutton.state & ControlMask) key_modifiers |= KEY_CONTROL;
+ w->common.button(g, w, ev.xbutton.x, ev.xbutton.y, key_modifiers,
+ ev.xbutton.button, 0);
+ }
+ break;
+ case ButtonRelease:
+ if ((w = find_x_window(g, ev.xbutton.window)) != NULL) {
+ int key_modifiers = 0;
+ if (ev.xbutton.state & ShiftMask) key_modifiers |= KEY_SHIFT;
+ if (ev.xbutton.state & Mod1Mask) key_modifiers |= KEY_ALT;
+ if (ev.xbutton.state & ControlMask) key_modifiers |= KEY_CONTROL;
+ w->common.button(g, w, ev.xbutton.x, ev.xbutton.y, key_modifiers,
+ ev.xbutton.button, 1);
+ }
+ break;
+#if 0
+ case MapNotify:
+ if ((w = find_x_window(g, ev.xmap.window)) != NULL) {
+ struct x_window *xw = w->x;
+ xw->repaint = 1;
+ }
+ break;
+#endif
+ default: if (gui_logd) WARN("TODO: X event type %d\n", ev.type); break;
+ }
+ }
+
+ /* postprocessing */
+ LOGD("post processing\n");
+ cur = g->toplevel;
+ while (cur) {
+ struct toplevel_window_widget *w =
+ (struct toplevel_window_widget *)cur->item;
+ struct x_window *xw = w->x;
+ if (xw->resize) {
+ LOGD("resize old %d %d new %d %d\n", xw->width, xw->height, xw->new_width, xw->new_height);
+ if (xw->width != xw->new_width || xw->height != xw->new_height) {
+ w->common.allocate(g, w, 0, 0, xw->new_width, xw->new_height);
+ xw->width = xw->new_width;
+ xw->height = xw->new_height;
+ XftDrawDestroy(xw->xft);
+ XFreePixmap(x->d, xw->p);
+ xw->p = XCreatePixmap(x->d, xw->w, xw->width, xw->height,
+ DefaultDepth(x->d, DefaultScreen(x->d)));
+ XFillRectangle(x->d, xw->p, x->colors[BACKGROUND_COLOR],
+ 0, 0, xw->width, xw->height);
+ xw->xft = XftDrawCreate(x->d, xw->p,
+ DefaultVisual(x->d, DefaultScreen(x->d)),
+ DefaultColormap(x->d, DefaultScreen(x->d)));
+ if (xw->xft == NULL) ERR("XftDrawCreate failed\n");
+
+ //xw->repaint = 1;
+ }
+ }
+ if (xw->repaint) {
+ w->common.paint(g, w);
+ xw->redraw = 1;
+ }
+ if (xw->redraw) {
+ struct x_connection *x = g->x;
+ LOGD("XCopyArea w h %d %d\n", xw->width, xw->height);
+ XCopyArea(x->d, xw->p, xw->w, x->colors[1],
+ 0, 0, xw->width, xw->height, 0, 0);
+ }
+ cur = cur->next;
+ }
+ LOGD("x_events DONE\n");
+}
+
+void x_flush(x_connection *_x)
+{
+ struct x_connection *x = _x;
+ XFlush(x->d);
+}
+
+void x_text_get_dimensions(x_connection *_c, int font, const char *t,
+ int *width, int *height, int *baseline)
+{
+ struct x_connection *c = _c;
+ XGlyphInfo ext;
+
+ XftTextExtentsUtf8(c->d, c->fonts[font], (FcChar8 *)t, strlen(t), &ext);
+
+ *width = ext.width;
+ *height = c->fonts[font]->height;
+ *baseline = c->fonts[font]->ascent;
+}
+
+/***********************************************************************/
+/* public drawing functions */
+/***********************************************************************/
+
+void x_draw_line(x_connection *_c, x_window *_w, int color,
+ int x1, int y1, int x2, int y2)
+{
+ struct x_connection *c = _c;
+ struct x_window *w = _w;
+ XDrawLine(c->d, w->p, c->colors[color], x1, y1, x2, y2);
+}
+
+void x_draw_rectangle(x_connection *_c, x_window *_w, int color,
+ int x, int y, int width, int height)
+{
+ struct x_connection *c = _c;
+ struct x_window *w = _w;
+ XDrawRectangle(c->d, w->p, c->colors[color], x, y, width, height);
+}
+
+void x_fill_rectangle(x_connection *_c, x_window *_w, int color,
+ int x, int y, int width, int height)
+{
+ struct x_connection *c = _c;
+ struct x_window *w = _w;
+ XFillRectangle(c->d, w->p, c->colors[color], x, y, width, height);
+}
+
+void x_draw_string(x_connection *_c, x_window *_w, int font, int color,
+ int x, int y, const char *t)
+{
+ struct x_connection *c = _c;
+ struct x_window *w = _w;
+ int tlen = strlen(t);
+ XftDrawStringUtf8(w->xft, &c->xft_colors[color], c->fonts[font],
+ x, y, (const unsigned char *)t, tlen);
+}
+
+void x_draw_clipped_string(x_connection *_c, x_window *_w, int font,
+ int color, int x, int y, const char *t,
+ int clipx, int clipy, int clipwidth, int clipheight)
+{
+ struct x_window *w = _w;
+
+ XRectangle clip = { clipx, clipy, clipwidth, clipheight };
+ if (XftDrawSetClipRectangles(w->xft, 0, 0, &clip, 1) == False) abort();
+ x_draw_string(_c, _w, font, color, x, y, t);
+ if (XftDrawSetClip(w->xft, NULL) == False) abort();
+}
+
+void x_draw_image(x_connection *_c, x_window *_w, x_image *_img, int x, int y)
+{
+ struct x_connection *c = _c;
+ struct x_window *w = _w;
+ struct x_image *img = _img;
+
+ XCopyArea(c->d, img->p, w->p, DefaultGC(c->d, DefaultScreen(c->d)),
+ 0, 0, img->width, img->height, x, y);
+}
+
+void x_draw(x_connection *_c, x_window *_w)
+{
+ struct x_connection *c = _c;
+ struct x_window *w = _w;
+ LOGD("x_draw XCopyArea w h %d %d display %p window %d pixmap %d\n", w->width, w->height, c->d, (int)w->w, (int)w->p);
+ XCopyArea(c->d, w->p, w->w, c->colors[1], 0, 0, w->width, w->height, 0, 0);
+}
+
+/* those two special functions are to plot many points
+ * first call x_add_point many times then x_plot_points once
+ */
+void x_add_point(x_connection *_c, int x, int y)
+{
+ struct x_connection *c = _c;
+
+ if (c->pts_size == c->pts_maxsize) {
+ c->pts_maxsize += 65536;
+ c->pts = realloc(c->pts, c->pts_maxsize * sizeof(XPoint));
+ if (c->pts == NULL) OOM;
+ }
+
+ c->pts[c->pts_size].x = x;
+ c->pts[c->pts_size].y = y;
+ c->pts_size++;
+}
+
+void x_plot_points(x_connection *_c, x_window *_w, int color)
+{
+ struct x_connection *c = _c;
+ LOGD("x_plot_points %d points\n", c->pts_size);
+ struct x_window *w = _w;
+ XDrawPoints(c->d, w->p, c->colors[color], c->pts, c->pts_size,
+ CoordModeOrigin);
+ c->pts_size = 0;
+}
diff --git a/common/utils/T/tracer/gui/x.h b/common/utils/T/tracer/gui/x.h
new file mode 100644
index 0000000000..d749d9acc4
--- /dev/null
+++ b/common/utils/T/tracer/gui/x.h
@@ -0,0 +1,61 @@
+#ifndef _X_H_
+#define _X_H_
+
+/* public X interface */
+
+typedef void x_connection;
+typedef void x_window;
+typedef void x_image;
+
+x_connection *x_open(void);
+
+x_window *x_create_window(x_connection *x, int width, int height,
+ char *title);
+
+x_image *x_create_image(x_connection *x, unsigned char *data,
+ int width, int height);
+
+int x_connection_fd(x_connection *x);
+
+void x_flush(x_connection *x);
+
+int x_new_color(x_connection *x, char *color);
+int x_new_font(x_connection *x, char *font);
+
+/* for x_events, we pass the gui */
+#include "gui.h"
+void x_events(gui *gui);
+
+void x_text_get_dimensions(x_connection *, int font, const char *t,
+ int *width, int *height, int *baseline);
+
+/* drawing functions */
+
+void x_draw_line(x_connection *c, x_window *w, int color,
+ int x1, int y1, int x2, int y2);
+
+void x_draw_rectangle(x_connection *c, x_window *w, int color,
+ int x, int y, int width, int height);
+
+void x_fill_rectangle(x_connection *c, x_window *w, int color,
+ int x, int y, int width, int height);
+
+void x_draw_string(x_connection *_c, x_window *_w, int font, int color,
+ int x, int y, const char *t);
+
+void x_draw_clipped_string(x_connection *_c, x_window *_w, int font,
+ int color, int x, int y, const char *t,
+ int clipx, int clipy, int clipwidth, int clipheight);
+
+void x_draw_image(x_connection *c, x_window *w, x_image *img, int x, int y);
+
+/* specials functions to plot many points
+ * you call several times x_add_point() then x_plot_points()
+ */
+void x_add_point(x_connection *c, int x, int y);
+void x_plot_points(x_connection *c, x_window *w, int color);
+
+/* this function copies the pixmap to the window */
+void x_draw(x_connection *c, x_window *w);
+
+#endif /* _X_H_ */
diff --git a/common/utils/T/tracer/gui/x_defs.h b/common/utils/T/tracer/gui/x_defs.h
new file mode 100644
index 0000000000..d0595ef51d
--- /dev/null
+++ b/common/utils/T/tracer/gui/x_defs.h
@@ -0,0 +1,37 @@
+#ifndef _X_DEFS_H_
+#define _X_DEFS_H_
+
+#include
+#include
+
+struct x_connection {
+ Display *d;
+ GC *colors;
+ XftColor *xft_colors;
+ int ncolors;
+ XPoint *pts;
+ int pts_size;
+ int pts_maxsize;
+ XftFont **fonts;
+ int nfonts;
+};
+
+struct x_window {
+ Window w;
+ Pixmap p;
+ int width;
+ int height;
+ XftDraw *xft;
+ /* below: internal data used for X events handling */
+ int redraw;
+ int repaint;
+ int resize, new_width, new_height;
+};
+
+struct x_image {
+ Pixmap p;
+ int width;
+ int height;
+};
+
+#endif /* _X_DEFS_H_ */
diff --git a/common/utils/T/tracer/gui/xy_plot.c b/common/utils/T/tracer/gui/xy_plot.c
new file mode 100644
index 0000000000..7d20a027a1
--- /dev/null
+++ b/common/utils/T/tracer/gui/xy_plot.c
@@ -0,0 +1,292 @@
+#include "gui.h"
+#include "gui_defs.h"
+#include "x.h"
+#include
+#include
+#include
+#include
+
+static void paint(gui *_gui, widget *_this)
+{
+ struct gui *g = _gui;
+ struct xy_plot_widget *this = _this;
+ int wanted_plot_width, allocated_plot_width;
+ int wanted_plot_height, allocated_plot_height;
+ float pxsize;
+ float ticdist;
+ float tic;
+ float ticstep;
+ int k, kmin, kmax;
+ float allocated_xmin, allocated_xmax;
+ float allocated_ymin, allocated_ymax;
+ float center;
+ int i;
+ int n;
+
+# define FLIP(v) (-(v) + allocated_plot_height-1)
+
+ LOGD("PAINT xy plot xywh %d %d %d %d\n", this->common.x, this->common.y, this->common.width, this->common.height);
+
+//x_draw_rectangle(g->x, g->xwin, 1, this->common.x, this->common.y, this->common.width, this->common.height);
+
+ wanted_plot_width = this->wanted_width;
+ allocated_plot_width = this->common.width - this->vrule_width;
+ wanted_plot_height = this->wanted_height;
+ allocated_plot_height = this->common.height - this->label_height * 2;
+
+ /* plot zone */
+ /* TODO: refine height - height of hrule text may be != from label */
+ x_draw_rectangle(g->x, g->xwin, 1,
+ this->common.x + this->vrule_width,
+ this->common.y,
+ this->common.width - this->vrule_width -1, /* -1 to see right border */
+ this->common.height - this->label_height * 2);
+
+ /* horizontal tics */
+ pxsize = (this->xmax - this->xmin) / wanted_plot_width;
+ ticdist = 100;
+ tic = floor(log10(ticdist * pxsize));
+ ticstep = powf(10, tic);
+ center = (this->xmax + this->xmin) / 2;
+ allocated_xmin = center - ((this->xmax - this->xmin) *
+ allocated_plot_width / wanted_plot_width) / 2;
+ allocated_xmax = center + ((this->xmax - this->xmin) *
+ allocated_plot_width / wanted_plot_width) / 2;
+ /* adjust tic if too tight */
+ LOGD("pre x ticstep %g\n", ticstep);
+ while (1) {
+ if (ticstep / (allocated_xmax - allocated_xmin)
+ * (allocated_plot_width - 1) > 40) break;
+ ticstep *= 2;
+ }
+ LOGD("post x ticstep %g\n", ticstep);
+ LOGD("xmin/max %g %g width wanted allocated %d %d alloc xmin/max %g %g ticstep %g\n", this->xmin, this->xmax, wanted_plot_width, allocated_plot_width, allocated_xmin, allocated_xmax, ticstep);
+ kmin = ceil(allocated_xmin / ticstep);
+ kmax = floor(allocated_xmax / ticstep);
+ for (k = kmin; k <= kmax; k++) {
+/*
+ (k * ticstep - allocated_xmin) / (allocated_max - allocated_xmin) =
+ (x - 0) / (allocated_plot_width-1 - 0)
+ */
+ char v[64];
+ int vwidth, dummy;
+ float x = (k * ticstep - allocated_xmin) /
+ (allocated_xmax - allocated_xmin) *
+ (allocated_plot_width - 1);
+ x_draw_line(g->x, g->xwin, FOREGROUND_COLOR,
+ this->common.x + this->vrule_width + x,
+ this->common.y + this->common.height - this->label_height * 2,
+ this->common.x + this->vrule_width + x,
+ this->common.y + this->common.height - this->label_height * 2 - 5);
+ sprintf(v, "%g", k * ticstep);
+ x_text_get_dimensions(g->x, DEFAULT_FONT, v, &vwidth, &dummy, &dummy);
+ x_draw_string(g->x, g->xwin, DEFAULT_FONT, FOREGROUND_COLOR,
+ this->common.x + this->vrule_width + x - vwidth/2,
+ this->common.y + this->common.height - this->label_height * 2 +
+ this->label_baseline,
+ v);
+ LOGD("tic k %d val %g x %g\n", k, k * ticstep, x);
+ }
+
+ /* vertical tics */
+ pxsize = (this->ymax - this->ymin) / wanted_plot_height;
+ ticdist = 30;
+ tic = floor(log10(ticdist * pxsize));
+ ticstep = powf(10, tic);
+ center = (this->ymax + this->ymin) / 2;
+ allocated_ymin = center - ((this->ymax - this->ymin) *
+ allocated_plot_height / wanted_plot_height) / 2;
+ allocated_ymax = center + ((this->ymax - this->ymin) *
+ allocated_plot_height / wanted_plot_height) / 2;
+ /* adjust tic if too tight */
+ LOGD("pre y ticstep %g\n", ticstep);
+ while (1) {
+ if (ticstep / (allocated_ymax - allocated_ymin)
+ * (allocated_plot_height - 1) > 20) break;
+ ticstep *= 2;
+ }
+ LOGD("post y ticstep %g\n", ticstep);
+ LOGD("ymin/max %g %g height wanted allocated %d %d alloc ymin/max %g %g ticstep %g\n", this->ymin, this->ymax, wanted_plot_height, allocated_plot_height, allocated_ymin, allocated_ymax, ticstep);
+ kmin = ceil(allocated_ymin / ticstep);
+ kmax = floor(allocated_ymax / ticstep);
+ for (k = kmin; k <= kmax; k++) {
+ char v[64];
+ int vwidth, dummy;
+ float y = (k * ticstep - allocated_ymin) /
+ (allocated_ymax - allocated_ymin) *
+ (allocated_plot_height - 1);
+ sprintf(v, "%g", k * ticstep);
+ x_text_get_dimensions(g->x, DEFAULT_FONT, v, &vwidth, &dummy, &dummy);
+ x_draw_line(g->x, g->xwin, FOREGROUND_COLOR,
+ this->common.x + this->vrule_width,
+ this->common.y + FLIP(y),
+ this->common.x + this->vrule_width + 5,
+ this->common.y + FLIP(y));
+ x_draw_string(g->x, g->xwin, DEFAULT_FONT, FOREGROUND_COLOR,
+ this->common.x + this->vrule_width - vwidth - 2,
+ this->common.y + FLIP(y) - this->label_height/2+this->label_baseline,
+ v);
+ }
+
+ /* label at bottom, in the middle */
+ x_draw_string(g->x, g->xwin, DEFAULT_FONT, FOREGROUND_COLOR,
+ this->common.x + (this->common.width - this->label_width) / 2,
+ this->common.y + this->common.height - this->label_height
+ + this->label_baseline,
+ this->label);
+
+ for (n = 0; n < this->nplots; n++) {
+ /* points */
+ float ax, bx, ay, by;
+ ax = (allocated_plot_width-1) / (allocated_xmax - allocated_xmin);
+ bx = -ax * allocated_xmin;
+ ay = (allocated_plot_height-1) / (allocated_ymax - allocated_ymin);
+ by = -ay * allocated_ymin;
+ for (i = 0; i < this->plots[n].npoints; i++) {
+ int x, y;
+ x = ax * this->plots[n].x[i] + bx;
+ y = ay * this->plots[n].y[i] + by;
+ if (x >= 0 && x < allocated_plot_width &&
+ y >= 0 && y < allocated_plot_height)
+ x_add_point(g->x,
+ this->common.x + this->vrule_width + x,
+ this->common.y + FLIP(y));
+ }
+ x_plot_points(g->x, g->xwin, this->plots[n].color);
+ }
+}
+
+static void hints(gui *_gui, widget *_w, int *width, int *height)
+{
+ struct xy_plot_widget *w = _w;
+ *width = w->wanted_width + w->vrule_width;
+ *height = w->wanted_height + w->label_height * 2; /* TODO: refine */
+ LOGD("HINTS xy plot wh %d %d (vrule_width %d) (wanted wh %d %d)\n", *width, *height, w->vrule_width, w->wanted_width, w->wanted_height);
+}
+
+widget *new_xy_plot(gui *_gui, int width, int height, char *label,
+ int vruler_width)
+{
+ struct gui *g = _gui;
+ struct xy_plot_widget *w;
+
+ glock(g);
+
+ w = new_widget(g, XY_PLOT, sizeof(struct xy_plot_widget));
+
+ w->label = strdup(label); if (w->label == NULL) OOM;
+ /* TODO: be sure calling X there is valid wrt "global model" (we are
+ * not in the "gui thread") */
+ x_text_get_dimensions(g->x, DEFAULT_FONT, label,
+ &w->label_width, &w->label_height, &w->label_baseline);
+ LOGD("XY PLOT label wh %d %d\n", w->label_width, w->label_height);
+
+ w->wanted_width = width;
+ w->wanted_height = height;
+ w->vrule_width = vruler_width;
+
+ w->xmin = -1;
+ w->xmax = 1;
+ w->ymin = -1;
+ w->ymax = 1;
+ w->plots = NULL;
+ w->nplots = 0;
+
+ w->common.paint = paint;
+ w->common.hints = hints;
+
+ gunlock(g);
+
+ return w;
+}
+
+/*************************************************************************/
+/* public functions */
+/*************************************************************************/
+
+int xy_plot_new_plot(gui *_gui, widget *_this, int color)
+{
+ int ret;
+ struct gui *g = _gui;
+ struct xy_plot_widget *this = _this;
+
+ glock(g);
+
+ ret = this->nplots;
+
+ this->nplots++;
+ this->plots = realloc(this->plots,
+ this->nplots * sizeof(struct xy_plot_plot));
+ if (this->plots == NULL) abort();
+
+ this->plots[ret].x = NULL;
+ this->plots[ret].y = NULL;
+ this->plots[ret].npoints = 0;
+ this->plots[ret].color = color;
+
+ gunlock(g);
+
+ return ret;
+}
+
+void xy_plot_set_range(gui *_gui, widget *_this,
+ float xmin, float xmax, float ymin, float ymax)
+{
+ struct gui *g = _gui;
+ struct xy_plot_widget *this = _this;
+
+ glock(g);
+
+ this->xmin = xmin;
+ this->xmax = xmax;
+ this->ymin = ymin;
+ this->ymax = ymax;
+
+ send_event(g, DIRTY, this->common.id);
+
+ gunlock(g);
+}
+
+void xy_plot_set_points(gui *_gui, widget *_this, int plot,
+ int npoints, float *x, float *y)
+{
+ struct gui *g = _gui;
+ struct xy_plot_widget *this = _this;
+
+ glock(g);
+
+ if (npoints != this->plots[plot].npoints) {
+ free(this->plots[plot].x);
+ free(this->plots[plot].y);
+ this->plots[plot].x = calloc(npoints, sizeof(float));
+ if (this->plots[plot].x == NULL) abort();
+ this->plots[plot].y = calloc(npoints, sizeof(float));
+ if (this->plots[plot].y == NULL) abort();
+ this->plots[plot].npoints = npoints;
+ }
+
+ memcpy(this->plots[plot].x, x, npoints * sizeof(float));
+ memcpy(this->plots[plot].y, y, npoints * sizeof(float));
+
+ send_event(g, DIRTY, this->common.id);
+
+ gunlock(g);
+}
+
+void xy_plot_get_dimensions(gui *_gui, widget *_this, int *width, int *height)
+{
+ struct gui *g = _gui;
+ struct xy_plot_widget *this = _this;
+
+ glock(g);
+
+ if (this->common.width == 0 || this->common.height == 0) {
+ *width = this->wanted_width;
+ *height = this->wanted_height;
+ } else {
+ *width = this->common.width - this->vrule_width;
+ *height = this->common.height - this->label_height * 2;
+ }
+
+ gunlock(g);
+}
diff --git a/common/utils/T/tracer/handler.c b/common/utils/T/tracer/handler.c
new file mode 100644
index 0000000000..1ee9db1ade
--- /dev/null
+++ b/common/utils/T/tracer/handler.c
@@ -0,0 +1,82 @@
+#include "handler.h"
+#include "event.h"
+#include "database.h"
+#include
+#include
+
+typedef void (*handler_function)(void *p, event e);
+
+struct handler_data {
+ handler_function f;
+ void *p;
+ unsigned long id;
+};
+
+struct handler_list {
+ struct handler_data *f;
+ int size;
+ int maxsize;
+};
+
+/* internal definition of an event handler */
+struct _event_handler {
+ void *database;
+ struct handler_list *events;
+ unsigned long next_id;
+};
+
+void handle_event(event_handler *_h, event e)
+{
+ struct _event_handler *h = _h;
+ int i;
+ for (i = 0; i < h->events[e.type].size; i++)
+ h->events[e.type].f[i].f(h->events[e.type].f[i].p, e);
+}
+
+event_handler *new_handler(void *database)
+{
+ struct _event_handler *ret = calloc(1, sizeof(struct _event_handler));
+ if (ret == NULL) abort();
+
+ ret->database = database;
+
+ ret->events = calloc(number_of_ids(database), sizeof(struct handler_list));
+ if (ret->events == NULL) abort();
+
+ ret->next_id = 1;
+
+ return ret;
+}
+
+unsigned long register_handler_function(event_handler *_h, int event_id,
+ void (*f)(void *, event), void *p)
+{
+ struct _event_handler *h = _h;
+ unsigned long ret = h->next_id;
+ struct handler_list *l;
+
+ h->next_id++;
+ if (h->next_id == 2UL * 1024 * 1024 * 1024)
+ { printf("%s:%d: this is bad...\n", __FILE__, __LINE__); abort(); }
+
+ l = &h->events[event_id];
+ if (l->size == l->maxsize) {
+ l->maxsize += 16;
+ l->f = realloc(l->f, l->maxsize * sizeof(struct handler_data));
+ if (l->f == NULL) abort();
+ }
+ l->f[l->size].f = f;
+ l->f[l->size].p = p;
+ l->f[l->size].id = ret;
+
+ l->size++;
+
+ return ret;
+}
+
+void remove_handler_function(event_handler *h, int event_id,
+ unsigned long handler_id)
+{
+ printf("%s:%d: TODO\n", __FILE__, __LINE__);
+ abort();
+}
diff --git a/common/utils/T/tracer/handler.h b/common/utils/T/tracer/handler.h
new file mode 100644
index 0000000000..5934e1704c
--- /dev/null
+++ b/common/utils/T/tracer/handler.h
@@ -0,0 +1,16 @@
+#ifndef _HANDLER_H_
+#define _HANDLER_H_
+
+typedef void event_handler;
+
+#include "event.h"
+
+event_handler *new_handler(void *database);
+void handle_event(event_handler *h, event e);
+
+unsigned long register_handler_function(event_handler *_h, int event_id,
+ void (*f)(void *, event), void *p);
+void remove_handler_function(event_handler *h, int event_id,
+ unsigned long handler_id);
+
+#endif /* _HANDLER_H_ */
diff --git a/common/utils/T/tracer/logger/Makefile b/common/utils/T/tracer/logger/Makefile
new file mode 100644
index 0000000000..e539100838
--- /dev/null
+++ b/common/utils/T/tracer/logger/Makefile
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS=-Wall -g -pthread -I..
+
+OBJS=logger.o textlog.o framelog.o ttilog.o timelog.o ticklog.o
+
+logger.a: $(OBJS)
+ ar cr logger.a $(OBJS)
+
+%.o: %.c
+ $(CC) $(CFLAGS) -o $@ -c $<
+
+clean:
+ rm -f *.a *.o
diff --git a/common/utils/T/tracer/logger/framelog.c b/common/utils/T/tracer/logger/framelog.c
new file mode 100644
index 0000000000..057960c382
--- /dev/null
+++ b/common/utils/T/tracer/logger/framelog.c
@@ -0,0 +1,146 @@
+#include "logger.h"
+#include "logger_defs.h"
+#include "handler.h"
+#include "database.h"
+#include "filter/filter.h"
+#include
+#include
+#include
+#include
+
+struct framelog {
+ struct logger common;
+ void *database;
+ int subframe_arg;
+ int buffer_arg;
+ float *x;
+ float *buffer;
+ int blength;
+ int skip_delay; /* one frame over 'skip_delay' is truly processed
+ * 0 to disable (process all data)
+ */
+ int skip_current; /* internal data for the skip mechanism */
+ int skip_on; /* internal data for the skip mechanism */
+};
+
+static void _event(void *p, event e)
+{
+ struct framelog *l = p;
+ int i;
+ int subframe;
+ void *buffer;
+ int bsize;
+ int nsamples;
+
+ if (l->common.filter != NULL && filter_eval(l->common.filter, e) == 0)
+ return;
+
+ subframe = e.e[l->subframe_arg].i;
+ buffer = e.e[l->buffer_arg].b;
+ bsize = e.e[l->buffer_arg].bsize;
+
+ if (l->skip_delay != 0) {
+ if (subframe == 0) {
+ l->skip_current++;
+ if (l->skip_current >= l->skip_delay) {
+ l->skip_on = 0;
+ l->skip_current = 0;
+ } else
+ l->skip_on = 1;
+ }
+ }
+ if (l->skip_on) return;
+
+ nsamples = bsize / (2*sizeof(int16_t));
+
+ if (l->blength != nsamples * 10) {
+ l->blength = nsamples * 10;
+ free(l->x);
+ free(l->buffer);
+ l->x = calloc(l->blength, sizeof(float));
+ if (l->x == NULL) abort();
+ l->buffer = calloc(l->blength, sizeof(float));
+ if (l->buffer == NULL) abort();
+ /* update 'x' */
+ for (i = 0; i < l->blength; i++)
+ l->x[i] = i;
+ /* update 'length' of views */
+ for (i = 0; i < l->common.vsize; i++)
+ l->common.v[i]->set(l->common.v[i], "length", l->blength);
+ }
+
+ /* TODO: compute the LOGs in the plotter (too much useless computations) */
+ for (i = 0; i < nsamples; i++) {
+ int I = ((int16_t *)buffer)[i*2];
+ int Q = ((int16_t *)buffer)[i*2+1];
+ l->buffer[subframe * nsamples + i] = 10*log10(1.0+(float)(I*I+Q*Q));
+ }
+
+ if (subframe == 9)
+ for (i = 0; i < l->common.vsize; i++)
+ l->common.v[i]->append(l->common.v[i], l->x, l->buffer, l->blength);
+}
+
+logger *new_framelog(event_handler *h, void *database,
+ char *event_name, char *subframe_varname, char *buffer_varname)
+{
+ struct framelog *ret;
+ int event_id;
+ database_event_format f;
+ int i;
+
+ ret = calloc(1, sizeof(struct framelog)); if (ret == NULL) abort();
+
+ ret->common.event_name = strdup(event_name);
+ if (ret->common.event_name == NULL) abort();
+ ret->database = database;
+
+ event_id = event_id_from_name(database, event_name);
+
+ ret->common.handler_id = register_handler_function(h,event_id,_event,ret);
+
+ f = get_format(database, event_id);
+
+ /* look for subframe and buffer args */
+ ret->subframe_arg = -1;
+ ret->buffer_arg = -1;
+ for (i = 0; i < f.count; i++) {
+ if (!strcmp(f.name[i], subframe_varname)) ret->subframe_arg = i;
+ if (!strcmp(f.name[i], buffer_varname)) ret->buffer_arg = i;
+ }
+ if (ret->subframe_arg == -1) {
+ printf("%s:%d: subframe argument '%s' not found in event '%s'\n",
+ __FILE__, __LINE__, subframe_varname, event_name);
+ abort();
+ }
+ if (ret->buffer_arg == -1) {
+ printf("%s:%d: buffer argument '%s' not found in event '%s'\n",
+ __FILE__, __LINE__, buffer_varname, event_name);
+ abort();
+ }
+ if (strcmp(f.type[ret->subframe_arg], "int") != 0) {
+ printf("%s:%d: argument '%s' has wrong type (should be 'int')\n",
+ __FILE__, __LINE__, subframe_varname);
+ abort();
+ }
+ if (strcmp(f.type[ret->buffer_arg], "buffer") != 0) {
+ printf("%s:%d: argument '%s' has wrong type (should be 'buffer')\n",
+ __FILE__, __LINE__, buffer_varname);
+ abort();
+ }
+
+ return ret;
+}
+
+/****************************************************************************/
+/* public functions */
+/****************************************************************************/
+
+void framelog_set_skip(logger *_this, int skip_delay)
+{
+ struct framelog *l = _this;
+ /* TODO: protect with a lock? */
+ l->skip_delay = skip_delay;
+ l->skip_current = 0;
+ l->skip_on = 0;
+}
diff --git a/common/utils/T/tracer/logger/logger.c b/common/utils/T/tracer/logger/logger.c
new file mode 100644
index 0000000000..ab6fb8bc62
--- /dev/null
+++ b/common/utils/T/tracer/logger/logger.c
@@ -0,0 +1,17 @@
+#include "logger.h"
+#include "logger_defs.h"
+#include
+
+void logger_add_view(logger *_l, view *v)
+{
+ struct logger *l = _l;
+ l->vsize++;
+ l->v = realloc(l->v, l->vsize * sizeof(view *)); if (l->v == NULL) abort();
+ l->v[l->vsize-1] = v;
+}
+
+void logger_set_filter(logger *_l, void *filter)
+{
+ struct logger *l = _l;
+ l->filter = filter;
+}
diff --git a/common/utils/T/tracer/logger/logger.h b/common/utils/T/tracer/logger/logger.h
new file mode 100644
index 0000000000..e3e4b97aa5
--- /dev/null
+++ b/common/utils/T/tracer/logger/logger.h
@@ -0,0 +1,24 @@
+#ifndef _LOGGER_H_
+#define _LOGGER_H_
+
+typedef void logger;
+
+logger *new_framelog(void *event_handler, void *database,
+ char *event_name, char *subframe_varname, char *buffer_varname);
+logger *new_textlog(void *event_handler, void *database,
+ char *event_name, char *format);
+logger *new_ttilog(void *event_handler, void *database,
+ char *event_name, char *frame_varname, char *subframe_varname,
+ char *data_varname, int convert_to_dB);
+logger *new_timelog(void *event_handler, void *database, char *event_name);
+logger *new_ticklog(void *event_handler, void *database,
+ char *event_name, char *frame_name, char *subframe_name);
+
+void framelog_set_skip(logger *_this, int skip_delay);
+
+#include "view/view.h"
+
+void logger_add_view(logger *l, view *v);
+void logger_set_filter(logger *l, void *filter);
+
+#endif /* _LOGGER_H_ */
diff --git a/common/utils/T/tracer/logger/logger_defs.h b/common/utils/T/tracer/logger/logger_defs.h
new file mode 100644
index 0000000000..8e8d6a2d3e
--- /dev/null
+++ b/common/utils/T/tracer/logger/logger_defs.h
@@ -0,0 +1,16 @@
+#ifndef _LOGGER_DEFS_H_
+#define _LOGGER_DEFS_H_
+
+#include "view/view.h"
+
+struct logger {
+ char *event_name;
+ unsigned long handler_id;
+ /* list of views */
+ view **v;
+ int vsize;
+ /* filter - NULL if no filter set */
+ void *filter;
+};
+
+#endif /* _LOGGER_DEFS_H_ */
diff --git a/common/utils/T/tracer/logger/textlog.c b/common/utils/T/tracer/logger/textlog.c
new file mode 100644
index 0000000000..e80af7813e
--- /dev/null
+++ b/common/utils/T/tracer/logger/textlog.c
@@ -0,0 +1,198 @@
+#include "logger.h"
+#include "logger_defs.h"
+#include "handler.h"
+#include "database.h"
+#include "view/view.h"
+#include "utils.h"
+#include "filter/filter.h"
+#include
+#include
+#include
+
+enum format_item_type {
+ INSTRING,
+ INT, ULONG, STRING, BUFFER };
+
+struct format_item {
+ enum format_item_type type;
+ union {
+ /* INSTRING */
+ char *s;
+ /* others */
+ int event_arg;
+ };
+};
+
+struct textlog {
+ struct logger common;
+ char *format;
+ void *database;
+ /* parsed format string */
+ struct format_item *f;
+ int fsize;
+ /* local output buffer */
+ OBUF o;
+};
+
+static void _event(void *p, event e)
+{
+ struct textlog *l = p;
+ int i;
+#ifdef T_SEND_TIME
+ struct tm *t;
+ char tt[64];
+#endif
+
+ if (l->common.filter != NULL && filter_eval(l->common.filter, e) == 0)
+ return;
+
+ l->o.osize = 0;
+
+#ifdef T_SEND_TIME
+ t = localtime(&e.sending_time.tv_sec);
+ /* round tv_nsec to nearest millisecond */
+ sprintf(tt, "%2.2d:%2.2d:%2.2d.%9.9ld: ", t->tm_hour, t->tm_min, t->tm_sec,
+ e.sending_time.tv_nsec);
+ PUTS(&l->o, tt);
+#endif
+
+ for (i = 0; i < l->fsize; i++)
+ switch(l->f[i].type) {
+ case INSTRING: PUTS(&l->o, l->f[i].s); break;
+ case INT: PUTI(&l->o, e.e[l->f[i].event_arg].i); break;
+ case ULONG: PUTUL(&l->o, e.e[l->f[i].event_arg].ul); break;
+ case STRING: PUTS_CLEAN(&l->o, e.e[l->f[i].event_arg].s); break;
+ case BUFFER:
+ PUTS(&l->o, "{buffer size:");
+ PUTI(&l->o, e.e[l->f[i].event_arg].bsize);
+ PUTS(&l->o, "}");
+ break;
+ }
+ PUTC(&l->o, 0);
+
+ for (i = 0; i < l->common.vsize; i++)
+ l->common.v[i]->append(l->common.v[i], l->o.obuf);
+}
+
+enum chunk_type { C_ERROR, C_STRING, C_ARG_NAME, C_EVENT_NAME };
+struct chunk {
+ enum chunk_type type;
+ char *s;
+ enum format_item_type it;
+ int event_arg;
+};
+
+/* TODO: speed it up? */
+static int find_argument(char *name, database_event_format f,
+ enum format_item_type *it, int *event_arg)
+{
+ int i;
+ for (i = 0; i < f.count; i++) if (!strcmp(name, f.name[i])) break;
+ if (i == f.count) return 0;
+ *event_arg = i;
+ if (!strcmp(f.type[i], "int")) *it = INT;
+ else if (!strcmp(f.type[i], "ulong")) *it = ULONG;
+ else if (!strcmp(f.type[i], "string")) *it = STRING;
+ else if (!strcmp(f.type[i], "buffer")) *it = BUFFER;
+ else return 0;
+ return 1;
+}
+
+static struct chunk next_chunk(char **s, database_event_format f)
+{
+ char *cur = *s;
+ char *name;
+ enum format_item_type it;
+ int event_arg;
+
+ /* argument in [ ] */
+ if (*cur == '[') {
+ *cur = 0;
+ cur++;
+ name = cur;
+ /* no \ allowed there */
+ while (*cur && *cur != ']' && *cur != '\\') cur++;
+ if (*cur != ']') goto error;
+ *cur = 0;
+ cur++;
+ *s = cur;
+ if (find_argument(name, f, &it, &event_arg) == 0) goto error;
+ return (struct chunk){type:C_ARG_NAME, s:name, it:it, event_arg:event_arg};
+ }
+
+ /* { } is name of event (anything in between is smashed) */
+ if (*cur == '{') {
+ *cur = 0;
+ cur++;
+ while (*cur && *cur != '}') cur++;
+ if (*cur != '}') goto error;
+ *cur = 0;
+ cur++;
+ *s = cur;
+ return (struct chunk){type:C_EVENT_NAME};
+ }
+
+ /* anything but [ and { is raw string */
+ /* TODO: deal with \ */
+ name = cur;
+ while (*cur && *cur != '[' && *cur != '{') cur++;
+ *s = cur;
+ return (struct chunk){type:C_STRING, s:name};
+
+error:
+ return (struct chunk){type:C_ERROR};
+}
+
+logger *new_textlog(event_handler *h, void *database,
+ char *event_name, char *format)
+{
+ struct textlog *ret;
+ int event_id;
+ database_event_format f;
+ char *cur;
+
+ ret = calloc(1, sizeof(struct textlog)); if (ret == NULL) abort();
+
+ ret->common.event_name = strdup(event_name);
+ if (ret->common.event_name == NULL) abort();
+ ret->format = strdup(format); if (ret->format == NULL) abort();
+ ret->database = database;
+
+ event_id = event_id_from_name(database, event_name);
+
+ ret->common.handler_id = register_handler_function(h,event_id,_event,ret);
+
+ f = get_format(database, event_id);
+
+ /* we won't get more than strlen(format) "chunks" */
+ ret->f = malloc(sizeof(struct format_item) * strlen(format));
+ if (ret->f == NULL) abort();
+
+ cur = ret->format;
+
+ while (*cur) {
+ struct chunk c = next_chunk(&cur, f);
+ switch (c.type) {
+ case C_ERROR: goto error;
+ case C_STRING:
+ ret->f[ret->fsize].type = INSTRING;
+ ret->f[ret->fsize].s = c.s;
+ break;
+ case C_ARG_NAME:
+ ret->f[ret->fsize].type = c.it;
+ ret->f[ret->fsize].event_arg = c.event_arg;
+ break;
+ case C_EVENT_NAME:
+ ret->f[ret->fsize].type = INSTRING;
+ ret->f[ret->fsize].s = ret->common.event_name;
+ break;
+ }
+ ret->fsize++;
+ }
+
+ return ret;
+
+error:
+ printf("%s:%d: bad format '%s'\n", __FILE__, __LINE__, format);
+ abort();
+}
diff --git a/common/utils/T/tracer/logger/ticklog.c b/common/utils/T/tracer/logger/ticklog.c
new file mode 100644
index 0000000000..7a3bc45338
--- /dev/null
+++ b/common/utils/T/tracer/logger/ticklog.c
@@ -0,0 +1,84 @@
+#include "logger.h"
+#include "logger_defs.h"
+#include "event.h"
+#include "database.h"
+#include "handler.h"
+#include "filter/filter.h"
+#include
+#include
+#include
+
+struct ticklog {
+ struct logger common;
+ void *database;
+ int frame_arg;
+ int subframe_arg;
+};
+
+static void _event(void *p, event e)
+{
+ struct ticklog *l = p;
+ int i;
+ int frame;
+ int subframe;
+
+ if (l->common.filter != NULL && filter_eval(l->common.filter, e) == 0)
+ return;
+
+ frame = e.e[l->frame_arg].i;
+ subframe = e.e[l->subframe_arg].i;
+
+ for (i = 0; i < l->common.vsize; i++)
+ l->common.v[i]->append(l->common.v[i], e.sending_time, frame, subframe);
+}
+
+logger *new_ticklog(event_handler *h, void *database,
+ char *event_name, char *frame_varname, char *subframe_varname)
+{
+ struct ticklog *ret;
+ int event_id;
+ database_event_format f;
+ int i;
+
+ ret = calloc(1, sizeof(struct ticklog)); if (ret == NULL) abort();
+
+ ret->common.event_name = strdup(event_name);
+ if (ret->common.event_name == NULL) abort();
+ ret->database = database;
+
+ event_id = event_id_from_name(database, event_name);
+
+ ret->common.handler_id = register_handler_function(h,event_id,_event,ret);
+
+ f = get_format(database, event_id);
+
+ /* look for frame and subframe args */
+ ret->frame_arg = -1;
+ ret->subframe_arg = -1;
+ for (i = 0; i < f.count; i++) {
+ if (!strcmp(f.name[i], frame_varname)) ret->frame_arg = i;
+ if (!strcmp(f.name[i], subframe_varname)) ret->subframe_arg = i;
+ }
+ if (ret->frame_arg == -1) {
+ printf("%s:%d: frame argument '%s' not found in event '%s'\n",
+ __FILE__, __LINE__, frame_varname, event_name);
+ abort();
+ }
+ if (ret->subframe_arg == -1) {
+ printf("%s:%d: subframe argument '%s' not found in event '%s'\n",
+ __FILE__, __LINE__, subframe_varname, event_name);
+ abort();
+ }
+ if (strcmp(f.type[ret->frame_arg], "int") != 0) {
+ printf("%s:%d: argument '%s' has wrong type (should be 'int')\n",
+ __FILE__, __LINE__, frame_varname);
+ abort();
+ }
+ if (strcmp(f.type[ret->subframe_arg], "int") != 0) {
+ printf("%s:%d: argument '%s' has wrong type (should be 'int')\n",
+ __FILE__, __LINE__, subframe_varname);
+ abort();
+ }
+
+ return ret;
+}
diff --git a/common/utils/T/tracer/logger/timelog.c b/common/utils/T/tracer/logger/timelog.c
new file mode 100644
index 0000000000..b474c8200d
--- /dev/null
+++ b/common/utils/T/tracer/logger/timelog.c
@@ -0,0 +1,41 @@
+#include "logger.h"
+#include "logger_defs.h"
+#include "event.h"
+#include "database.h"
+#include "handler.h"
+#include "filter/filter.h"
+#include
+#include
+
+struct timelog {
+ struct logger common;
+};
+
+static void _event(void *p, event e)
+{
+ struct timelog *l = p;
+ int i;
+
+ if (l->common.filter != NULL && filter_eval(l->common.filter, e) == 0)
+ return;
+
+ for (i = 0; i < l->common.vsize; i++)
+ l->common.v[i]->append(l->common.v[i], e.sending_time);
+}
+
+logger *new_timelog(event_handler *h, void *database, char *event_name)
+{
+ struct timelog *ret;
+ int event_id;
+
+ ret = calloc(1, sizeof(struct timelog)); if (ret == NULL) abort();
+
+ ret->common.event_name = strdup(event_name);
+ if (ret->common.event_name == NULL) abort();
+
+ event_id = event_id_from_name(database, event_name);
+
+ ret->common.handler_id = register_handler_function(h,event_id,_event,ret);
+
+ return ret;
+}
diff --git a/common/utils/T/tracer/logger/ttilog.c b/common/utils/T/tracer/logger/ttilog.c
new file mode 100644
index 0000000000..29e22fbf10
--- /dev/null
+++ b/common/utils/T/tracer/logger/ttilog.c
@@ -0,0 +1,111 @@
+#include "logger.h"
+#include "logger_defs.h"
+#include "event.h"
+#include "database.h"
+#include "handler.h"
+#include "filter/filter.h"
+#include
+#include
+#include
+#include
+
+struct ttilog {
+ struct logger common;
+ void *database;
+ int frame_arg;
+ int subframe_arg;
+ int data_arg;
+ int convert_to_dB;
+};
+
+static void _event(void *p, event e)
+{
+ struct ttilog *l = p;
+ int i;
+ int frame;
+ int subframe;
+ float value;
+
+ if (l->common.filter != NULL && filter_eval(l->common.filter, e) == 0)
+ return;
+
+ frame = e.e[l->frame_arg].i;
+ subframe = e.e[l->subframe_arg].i;
+ switch (e.e[l->data_arg].type) {
+ case EVENT_INT: value = e.e[l->data_arg].i; break;
+ case EVENT_ULONG: value = e.e[l->data_arg].ul; break;
+ default: printf("%s:%d: unsupported type\n", __FILE__, __LINE__); abort();
+ }
+
+ if (l->convert_to_dB) value = 10 * log10(value);
+
+ for (i = 0; i < l->common.vsize; i++)
+ l->common.v[i]->append(l->common.v[i], frame, subframe, value);
+}
+
+logger *new_ttilog(event_handler *h, void *database,
+ char *event_name, char *frame_varname, char *subframe_varname,
+ char *data_varname, int convert_to_dB)
+{
+ struct ttilog *ret;
+ int event_id;
+ database_event_format f;
+ int i;
+
+ ret = calloc(1, sizeof(struct ttilog)); if (ret == NULL) abort();
+
+ ret->common.event_name = strdup(event_name);
+ if (ret->common.event_name == NULL) abort();
+ ret->database = database;
+ ret->convert_to_dB = convert_to_dB;
+
+ event_id = event_id_from_name(database, event_name);
+
+ ret->common.handler_id = register_handler_function(h,event_id,_event,ret);
+
+ f = get_format(database, event_id);
+
+ /* look for frame, subframe and data args */
+ ret->frame_arg = -1;
+ ret->subframe_arg = -1;
+ ret->data_arg = -1;
+ for (i = 0; i < f.count; i++) {
+ if (!strcmp(f.name[i], frame_varname)) ret->frame_arg = i;
+ if (!strcmp(f.name[i], subframe_varname)) ret->subframe_arg = i;
+ if (!strcmp(f.name[i], data_varname)) ret->data_arg = i;
+ }
+ if (ret->frame_arg == -1) {
+ printf("%s:%d: frame argument '%s' not found in event '%s'\n",
+ __FILE__, __LINE__, frame_varname, event_name);
+ abort();
+ }
+ if (ret->subframe_arg == -1) {
+ printf("%s:%d: subframe argument '%s' not found in event '%s'\n",
+ __FILE__, __LINE__, subframe_varname, event_name);
+ abort();
+ }
+ if (ret->data_arg == -1) {
+ printf("%s:%d: data argument '%s' not found in event '%s'\n",
+ __FILE__, __LINE__, data_varname, event_name);
+ abort();
+ }
+ if (strcmp(f.type[ret->frame_arg], "int") != 0) {
+ printf("%s:%d: argument '%s' has wrong type (should be 'int')\n",
+ __FILE__, __LINE__, frame_varname);
+ abort();
+ }
+ if (strcmp(f.type[ret->subframe_arg], "int") != 0) {
+ printf("%s:%d: argument '%s' has wrong type (should be 'int')\n",
+ __FILE__, __LINE__, subframe_varname);
+ abort();
+ }
+ if (strcmp(f.type[ret->data_arg], "int") != 0 &&
+ strcmp(f.type[ret->data_arg], "float") != 0) {
+ printf("%s:%d: argument '%s' has wrong type"
+ " (should be 'int' or 'float')\n",
+ __FILE__, __LINE__, data_varname);
+ abort();
+ }
+
+ return ret;
+}
diff --git a/common/utils/T/tracer/openair_logo.h b/common/utils/T/tracer/openair_logo.h
new file mode 100644
index 0000000000..4a98c3d871
--- /dev/null
+++ b/common/utils/T/tracer/openair_logo.h
@@ -0,0 +1,395 @@
+/* this file (minus this comment) was obtained by running:
+ * xxd -i openair_logo.png > openair_logo.h
+ */
+unsigned char openair_logo_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x28,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x08, 0x78, 0x5f, 0x43, 0x00, 0x00, 0x00,
+ 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0,
+ 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00,
+ 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18,
+ 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xe0, 0x05, 0x17,
+ 0x0e, 0x30, 0x2a, 0xd1, 0xdd, 0x83, 0x5b, 0x00, 0x00, 0x11, 0xc5, 0x49,
+ 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0x9b, 0x79, 0x70, 0x94, 0xe7, 0x7d,
+ 0xc7, 0x3f, 0xcf, 0xf3, 0xbe, 0xbb, 0x2b, 0xed, 0xea, 0xbe, 0xef, 0x03,
+ 0x24, 0x10, 0x08, 0x8c, 0xb9, 0x31, 0x06, 0x73, 0xd4, 0xd8, 0x4e, 0x38,
+ 0x62, 0x63, 0x77, 0x92, 0x90, 0xcb, 0x9d, 0x34, 0x19, 0x27, 0xce, 0xa4,
+ 0xed, 0x8c, 0xd3, 0x78, 0xd2, 0x64, 0xd2, 0x36, 0x9d, 0x34, 0xa9, 0xdb,
+ 0xa6, 0x99, 0xb6, 0x49, 0x67, 0x82, 0xe3, 0x24, 0x76, 0x9a, 0x34, 0x76,
+ 0x5c, 0x1f, 0x18, 0x8f, 0x31, 0xc4, 0xc6, 0x06, 0xcc, 0x69, 0x21, 0xb0,
+ 0x05, 0x08, 0x1d, 0x80, 0x2e, 0x74, 0xae, 0xa4, 0xbd, 0xb4, 0xbb, 0xef,
+ 0xfb, 0x3c, 0xfd, 0x63, 0x57, 0x2b, 0xd6, 0x12, 0x58, 0x60, 0x32, 0x74,
+ 0xb0, 0x9f, 0x99, 0x1d, 0x69, 0x9f, 0xe7, 0xf9, 0x3d, 0xd7, 0xf7, 0x77,
+ 0x3f, 0xcf, 0x0a, 0xad, 0xb5, 0xe6, 0x43, 0x5a, 0x94, 0xd6, 0xf4, 0x07,
+ 0xc3, 0xf8, 0xa3, 0x51, 0x3a, 0x47, 0xfc, 0xf4, 0x05, 0x82, 0x0c, 0xf8,
+ 0x43, 0x98, 0x52, 0x50, 0xec, 0x49, 0xa5, 0x38, 0xdd, 0x4d, 0x71, 0xba,
+ 0x87, 0x34, 0x97, 0x93, 0x74, 0x97, 0x13, 0x21, 0xc4, 0x1f, 0x7d, 0x4d,
+ 0xe2, 0xc3, 0x0a, 0xc8, 0xde, 0xce, 0x3e, 0xde, 0xea, 0x1e, 0x60, 0x45,
+ 0x51, 0x2e, 0x45, 0x9e, 0x14, 0x72, 0x52, 0x9c, 0xa4, 0x3b, 0x1d, 0x38,
+ 0x0d, 0x03, 0x04, 0x44, 0x6d, 0x9b, 0x50, 0xc4, 0xc2, 0x1f, 0x8e, 0x30,
+ 0x1c, 0x0a, 0xd1, 0xed, 0x1d, 0xa1, 0x36, 0x3f, 0x97, 0x19, 0x05, 0xb9,
+ 0x1f, 0x01, 0x72, 0x3d, 0xcb, 0x68, 0x24, 0xca, 0x7f, 0x34, 0xb6, 0x30,
+ 0x37, 0x27, 0x83, 0x7b, 0x67, 0x96, 0x5e, 0x15, 0x6d, 0x63, 0x47, 0x0f,
+ 0x03, 0x23, 0x3e, 0x6e, 0x9f, 0x5d, 0x4d, 0x8a, 0xc3, 0xf1, 0x11, 0x20,
+ 0x1f, 0xb4, 0xbc, 0x7c, 0xbe, 0x97, 0x0e, 0x9f, 0x9f, 0x7b, 0x67, 0x94,
+ 0x51, 0xe0, 0x76, 0x5d, 0xd3, 0x18, 0xc1, 0x48, 0x84, 0x53, 0x1d, 0xdd,
+ 0xe4, 0x78, 0xdc, 0x54, 0x17, 0x15, 0x7c, 0x04, 0xc8, 0xb5, 0x96, 0x86,
+ 0xfe, 0x61, 0x0e, 0x5c, 0x1c, 0xe4, 0xe1, 0xf9, 0x33, 0xaf, 0xcb, 0x78,
+ 0xa7, 0x2e, 0x74, 0x91, 0x9b, 0x91, 0x46, 0x41, 0x56, 0xe6, 0x75, 0x5d,
+ 0xa7, 0xfc, 0x30, 0x80, 0xb1, 0xaf, 0x67, 0x90, 0x97, 0xcf, 0xf7, 0x4d,
+ 0x0b, 0x8c, 0xd1, 0x70, 0x04, 0x7f, 0x38, 0xfa, 0xbe, 0xfd, 0xe6, 0x54,
+ 0x94, 0xd2, 0x33, 0xe8, 0x65, 0x60, 0x78, 0xe4, 0xba, 0xae, 0xd5, 0xbc,
+ 0xd9, 0xc1, 0x08, 0x5a, 0x36, 0xfb, 0x7b, 0x86, 0xf8, 0xd6, 0x92, 0x59,
+ 0x97, 0xed, 0xd3, 0xe1, 0x0b, 0xf2, 0xf8, 0x89, 0xb3, 0x48, 0x65, 0x33,
+ 0x33, 0xc3, 0x83, 0x43, 0x08, 0x46, 0x82, 0x21, 0xd2, 0x1d, 0x06, 0x1b,
+ 0xea, 0x66, 0x90, 0xeb, 0x71, 0x4f, 0x49, 0xb7, 0x60, 0x66, 0x15, 0x0d,
+ 0x67, 0x5a, 0xc8, 0xf0, 0xb8, 0x71, 0x5e, 0x27, 0x9b, 0x72, 0xd3, 0xab,
+ 0xac, 0x7f, 0x6a, 0x38, 0xcb, 0xa6, 0xaa, 0x22, 0xe6, 0x66, 0xa7, 0x4f,
+ 0x6a, 0x3b, 0x37, 0x1a, 0x64, 0xe7, 0xb9, 0x6e, 0xb2, 0x9d, 0x0e, 0xb6,
+ 0xd6, 0x96, 0xe3, 0x32, 0x92, 0x15, 0x86, 0x65, 0x2b, 0x1a, 0x3b, 0xba,
+ 0x51, 0xb6, 0xa2, 0xb6, 0x28, 0x8f, 0xac, 0x29, 0x80, 0x09, 0x85, 0xc3,
+ 0xf4, 0x0d, 0x0e, 0x53, 0x59, 0x52, 0xf8, 0x91, 0x84, 0xbc, 0x5f, 0x79,
+ 0x77, 0xc8, 0x87, 0x37, 0x6c, 0x4d, 0x09, 0x46, 0x87, 0x2f, 0xc4, 0x4f,
+ 0xdf, 0x69, 0xe3, 0x6f, 0x97, 0xcd, 0x21, 0xd5, 0x34, 0xa6, 0x3e, 0x1c,
+ 0x43, 0xb2, 0xb8, 0xaa, 0x8c, 0xa8, 0x6d, 0xd3, 0xd8, 0x7a, 0x9e, 0xb9,
+ 0x95, 0xa5, 0xb8, 0x5d, 0xc9, 0xce, 0x40, 0xaa, 0xcb, 0xc5, 0xa8, 0xdf,
+ 0x8f, 0x52, 0xf9, 0x48, 0x79, 0x1d, 0x2c, 0x80, 0xbe, 0x89, 0xcb, 0x5f,
+ 0xee, 0x3b, 0xa9, 0xb5, 0x9a, 0x5c, 0xdf, 0x1f, 0x0a, 0xeb, 0x07, 0x77,
+ 0x1f, 0x9b, 0x54, 0xef, 0x1d, 0x0b, 0xeb, 0xd6, 0xa1, 0x11, 0x7d, 0xde,
+ 0x3b, 0xaa, 0xfd, 0xe1, 0x48, 0x52, 0x9b, 0xd2, 0x4a, 0xbf, 0x71, 0xfc,
+ 0x1d, 0x1d, 0x89, 0x46, 0x27, 0xd1, 0x05, 0x82, 0x21, 0x7d, 0xa6, 0xa5,
+ 0xed, 0xba, 0xac, 0xf9, 0xa6, 0x95, 0x90, 0xd1, 0x88, 0x45, 0x65, 0x7a,
+ 0x2a, 0x4c, 0x11, 0x5c, 0x3f, 0xdd, 0xd2, 0xc5, 0xbf, 0xae, 0x9a, 0x9f,
+ 0x54, 0xf7, 0xc3, 0xa3, 0xa7, 0x29, 0x48, 0x71, 0xb0, 0xa2, 0x30, 0x07,
+ 0x5b, 0xc0, 0xa1, 0xf6, 0x0e, 0xa4, 0xb2, 0x59, 0x3b, 0xa7, 0x36, 0xa6,
+ 0xdb, 0x11, 0xac, 0x9c, 0x3f, 0x87, 0xd3, 0xed, 0xe7, 0xa9, 0x9f, 0x59,
+ 0x9d, 0x44, 0xeb, 0x4e, 0x4d, 0x21, 0x1c, 0x8d, 0x60, 0xdb, 0x0a, 0xc3,
+ 0x90, 0xfc, 0x67, 0x63, 0x1b, 0xbf, 0x69, 0xef, 0x27, 0x64, 0xab, 0xd8,
+ 0xf4, 0xd2, 0x60, 0xd7, 0xc7, 0x17, 0x91, 0xe3, 0x8a, 0x1d, 0xf7, 0xe3,
+ 0xef, 0x9c, 0xe3, 0x17, 0x67, 0x7b, 0xc9, 0x4e, 0x75, 0xf1, 0xcd, 0x85,
+ 0xd5, 0xdc, 0x5e, 0x98, 0x79, 0xf3, 0xab, 0xac, 0xe1, 0x48, 0x74, 0x4a,
+ 0x55, 0x15, 0xb2, 0x6d, 0xbc, 0x91, 0x28, 0xd9, 0xae, 0x09, 0x23, 0xfc,
+ 0x58, 0x43, 0x33, 0x9b, 0x67, 0x94, 0x32, 0x37, 0x67, 0xa2, 0x7f, 0x6d,
+ 0x5e, 0x36, 0x43, 0xfe, 0x20, 0x0d, 0x2d, 0xed, 0x2c, 0xac, 0x89, 0x01,
+ 0x60, 0x48, 0x49, 0xa6, 0xc7, 0x43, 0x24, 0x1a, 0x9d, 0x64, 0xc4, 0x0b,
+ 0x72, 0x73, 0x09, 0x04, 0x83, 0x64, 0xa4, 0xa7, 0xd1, 0x36, 0x1a, 0xa4,
+ 0x69, 0x38, 0xcc, 0x33, 0x1b, 0xea, 0x09, 0x5a, 0x0a, 0x1b, 0xf0, 0x98,
+ 0x12, 0xb4, 0x66, 0xcb, 0x8b, 0x87, 0x79, 0x7b, 0x34, 0xc2, 0xf7, 0x97,
+ 0xd5, 0xd0, 0x33, 0xea, 0xe7, 0xae, 0x17, 0x8e, 0xf0, 0xe4, 0x5d, 0x8b,
+ 0xd8, 0x5a, 0x99, 0x73, 0x73, 0x03, 0x32, 0x12, 0x89, 0x92, 0xee, 0x9c,
+ 0xbc, 0xbd, 0x5f, 0x9e, 0xee, 0x60, 0x55, 0xf1, 0x44, 0xfa, 0xe3, 0xdf,
+ 0x1a, 0x5b, 0x59, 0x92, 0x9f, 0x93, 0x04, 0xc6, 0x78, 0xc9, 0x49, 0x73,
+ 0x13, 0xcc, 0x48, 0xa7, 0x7f, 0xc8, 0x4b, 0x7e, 0x4e, 0x36, 0x00, 0x69,
+ 0xee, 0x54, 0x02, 0x81, 0x20, 0xce, 0xf7, 0xc4, 0x1f, 0x99, 0xe9, 0xe9,
+ 0xf8, 0xfc, 0x7e, 0x74, 0x9a, 0x07, 0x7f, 0xd4, 0x26, 0xc3, 0x65, 0x72,
+ 0xbc, 0x6f, 0x04, 0xbf, 0xd2, 0x3c, 0x30, 0xa3, 0x18, 0x97, 0x21, 0x19,
+ 0x0c, 0x8e, 0x71, 0xc6, 0x1f, 0x66, 0x43, 0x65, 0x11, 0x9f, 0x9f, 0x55,
+ 0x0c, 0xc0, 0x17, 0xeb, 0x2b, 0x89, 0xe8, 0x0f, 0x41, 0x1c, 0xd2, 0x13,
+ 0x1c, 0x23, 0x63, 0x0a, 0x57, 0xf4, 0xe5, 0x0b, 0xbd, 0xdc, 0x56, 0x18,
+ 0xe3, 0x46, 0x0d, 0x1c, 0xe9, 0x1f, 0x66, 0x5d, 0x59, 0x5e, 0xcc, 0xab,
+ 0xd2, 0x9a, 0xed, 0xa7, 0x3a, 0xd9, 0x7e, 0xaa, 0x13, 0x3b, 0xee, 0x7c,
+ 0x96, 0x15, 0xe4, 0xd1, 0x76, 0xa1, 0x73, 0xc2, 0x88, 0xa7, 0xb8, 0x18,
+ 0x1e, 0xf5, 0x4d, 0x0e, 0xe8, 0x0c, 0x09, 0x08, 0x34, 0x10, 0x88, 0x5a,
+ 0x78, 0x43, 0x21, 0x5e, 0xec, 0x18, 0x62, 0x5f, 0xe7, 0x20, 0x8b, 0x9f,
+ 0x39, 0xc0, 0x6f, 0xdb, 0x07, 0x70, 0x4a, 0x81, 0x00, 0x0c, 0x21, 0xe8,
+ 0x1d, 0xf1, 0xb1, 0xf8, 0x99, 0xb7, 0xd8, 0xb8, 0xf3, 0x18, 0x47, 0x07,
+ 0xfc, 0x37, 0x3f, 0x20, 0x1e, 0xc3, 0x24, 0xcb, 0x35, 0x19, 0x90, 0xd9,
+ 0x59, 0x69, 0x38, 0xa4, 0x48, 0xe4, 0xb5, 0xee, 0xad, 0x2e, 0x4e, 0xb4,
+ 0xf5, 0x06, 0x23, 0xbc, 0x70, 0xae, 0x8f, 0x1d, 0xe7, 0xfb, 0x39, 0xed,
+ 0x0d, 0x24, 0xea, 0x73, 0x33, 0x33, 0x12, 0xff, 0x3b, 0x4c, 0x13, 0xa7,
+ 0x39, 0x59, 0xf2, 0xa4, 0x90, 0x38, 0x1c, 0x26, 0x42, 0x08, 0xfe, 0xe2,
+ 0xd6, 0x99, 0xfc, 0x6e, 0xc3, 0xad, 0xbc, 0xb6, 0x65, 0x09, 0xbb, 0x3e,
+ 0xb1, 0x8c, 0xfb, 0xcb, 0xb3, 0xf8, 0x61, 0xc3, 0xb9, 0x84, 0x37, 0x27,
+ 0x80, 0x5c, 0x4f, 0x2a, 0xdf, 0x5e, 0x3c, 0x83, 0x40, 0x34, 0xca, 0xf6,
+ 0xa6, 0xee, 0x9b, 0xdf, 0x86, 0xdc, 0x5e, 0x9c, 0x33, 0x75, 0x5c, 0x72,
+ 0x5b, 0xfd, 0x84, 0x9a, 0x71, 0x3a, 0xf8, 0xd3, 0x99, 0x25, 0x89, 0xef,
+ 0xa5, 0x1e, 0x17, 0x2f, 0x7c, 0x6c, 0xd1, 0x24, 0x9a, 0x9a, 0xea, 0xca,
+ 0x89, 0x83, 0x97, 0x92, 0xd2, 0x92, 0xa2, 0xc9, 0x2e, 0xb2, 0x69, 0x90,
+ 0x95, 0x99, 0x81, 0xd2, 0x9a, 0x1d, 0x6d, 0x17, 0x39, 0xe8, 0x0d, 0xb1,
+ 0xa1, 0x2c, 0x17, 0x8d, 0x26, 0x60, 0xd9, 0xb8, 0x1d, 0x4e, 0x24, 0x60,
+ 0x4a, 0xc1, 0xc5, 0xe0, 0x18, 0xd2, 0x30, 0x59, 0x5d, 0x94, 0x85, 0x29,
+ 0x48, 0x30, 0xc8, 0xa4, 0xc0, 0x30, 0x14, 0x0a, 0xd2, 0xd1, 0xd1, 0x85,
+ 0xdf, 0xef, 0xc7, 0x30, 0x0c, 0x72, 0x73, 0x73, 0x28, 0x2b, 0x2b, 0x9b,
+ 0x34, 0x79, 0x67, 0x67, 0x27, 0x7d, 0x7d, 0x7d, 0xc9, 0x11, 0xa6, 0x10,
+ 0xa4, 0xa5, 0xa5, 0x51, 0x56, 0x56, 0x4e, 0x6a, 0x6a, 0xca, 0x24, 0x9a,
+ 0xf6, 0xf6, 0x76, 0xbc, 0x5e, 0xef, 0x94, 0x87, 0xa4, 0x94, 0xa2, 0xb8,
+ 0xb8, 0x98, 0xd2, 0xd2, 0x58, 0xf6, 0xb5, 0xbf, 0xbf, 0x9f, 0x8e, 0x8e,
+ 0x0e, 0x4a, 0x4b, 0x4b, 0x29, 0x2c, 0x2c, 0xbc, 0xd4, 0x45, 0xa7, 0xb9,
+ 0xb9, 0x99, 0x40, 0x20, 0x80, 0xd3, 0xe9, 0xa4, 0xbe, 0xbe, 0xfe, 0xaa,
+ 0xee, 0x28, 0x0e, 0x5c, 0x1c, 0xe6, 0xf8, 0xa0, 0x8f, 0x95, 0x85, 0x59,
+ 0xdc, 0x9a, 0x37, 0xd9, 0x66, 0x74, 0x07, 0xc2, 0x3c, 0xdd, 0x7a, 0x11,
+ 0x29, 0x04, 0x1b, 0xca, 0x73, 0xa9, 0xcb, 0xf2, 0x4c, 0xd0, 0x0d, 0x8c,
+ 0xa2, 0x92, 0x24, 0x42, 0x50, 0x90, 0xe2, 0x64, 0x79, 0x61, 0x26, 0xe5,
+ 0x69, 0xc9, 0xfb, 0x7d, 0x77, 0x60, 0x84, 0x47, 0xde, 0x3a, 0xc3, 0xbb,
+ 0xc3, 0x21, 0x9c, 0x02, 0x8a, 0xd3, 0xdd, 0xfc, 0xe4, 0x8e, 0x7a, 0xe6,
+ 0x67, 0xbb, 0xd9, 0xd1, 0xda, 0xc3, 0x3f, 0x34, 0xb4, 0x33, 0x10, 0xb6,
+ 0x89, 0xda, 0x36, 0x17, 0x02, 0x63, 0x6c, 0xa8, 0x28, 0x61, 0xd7, 0xc6,
+ 0x5b, 0x92, 0x25, 0xe4, 0xb5, 0xd7, 0x5e, 0xa7, 0xb1, 0xb1, 0x71, 0xd2,
+ 0x22, 0x0d, 0xc3, 0x60, 0xf3, 0xe6, 0x4d, 0x54, 0x55, 0x55, 0x01, 0xd0,
+ 0xd2, 0xd2, 0xca, 0x73, 0xcf, 0x3d, 0x87, 0x69, 0x5e, 0x5e, 0xb8, 0xe6,
+ 0xcd, 0x9b, 0xc7, 0x9d, 0x77, 0xfe, 0x49, 0xe2, 0xfb, 0xd1, 0xa3, 0x47,
+ 0xd9, 0xbb, 0xf7, 0x0d, 0x0c, 0x63, 0xea, 0x00, 0xcc, 0xb6, 0x6d, 0x56,
+ 0xac, 0x58, 0x4e, 0x69, 0x69, 0x29, 0xd1, 0x68, 0x94, 0x27, 0x9e, 0xf8,
+ 0x05, 0x4e, 0xa7, 0x13, 0x87, 0xc3, 0xc1, 0xb6, 0x6d, 0x9f, 0x26, 0x3b,
+ 0x3b, 0x3b, 0x01, 0xdc, 0xf1, 0xe3, 0x8d, 0xf4, 0xf4, 0xf4, 0x90, 0x99,
+ 0x99, 0x49, 0x7d, 0x7d, 0xfd, 0xb4, 0xc1, 0xd8, 0xdb, 0x33, 0xc4, 0xdd,
+ 0x3b, 0x8e, 0xe1, 0x36, 0x0d, 0xa2, 0x4a, 0x73, 0xf4, 0xfe, 0x15, 0xcc,
+ 0x8e, 0x1f, 0xf8, 0x78, 0x39, 0xef, 0x0f, 0xf1, 0xe8, 0xa1, 0xb3, 0xb8,
+ 0x0c, 0x41, 0x5e, 0x8a, 0x83, 0xba, 0x2c, 0x0f, 0xbb, 0x3b, 0x07, 0xf9,
+ 0xe4, 0xee, 0x46, 0xa6, 0xca, 0x67, 0x8c, 0xb3, 0xc2, 0x7d, 0xd5, 0x85,
+ 0x6c, 0x5f, 0x3b, 0xb1, 0x96, 0xfa, 0xbc, 0x4c, 0x76, 0x6e, 0x5e, 0xc6,
+ 0x38, 0xaf, 0x0b, 0x21, 0x12, 0x7d, 0x37, 0xcd, 0x2c, 0x66, 0xe3, 0x8c,
+ 0x62, 0x34, 0xfa, 0x92, 0x71, 0x26, 0x98, 0xca, 0xb4, 0x6d, 0x9b, 0x17,
+ 0x5e, 0x78, 0x91, 0xd6, 0xd6, 0x56, 0x84, 0x10, 0x54, 0x54, 0x94, 0x53,
+ 0x54, 0x54, 0x44, 0x24, 0x12, 0xa5, 0xad, 0xad, 0x8d, 0x40, 0x20, 0xc0,
+ 0xef, 0x7f, 0xff, 0x2c, 0x5b, 0xb7, 0xde, 0x47, 0x75, 0x75, 0x35, 0x3e,
+ 0x9f, 0x0f, 0x21, 0x04, 0x4a, 0x29, 0x66, 0xcc, 0x98, 0x41, 0x41, 0x41,
+ 0x01, 0x5a, 0x2b, 0x6c, 0x5b, 0xd1, 0xd3, 0xd3, 0x43, 0x57, 0x57, 0x17,
+ 0x8d, 0x8d, 0x8d, 0x8c, 0x8e, 0xfa, 0xb8, 0xf7, 0xde, 0x2d, 0x48, 0x29,
+ 0xf1, 0x7a, 0x87, 0x13, 0x34, 0x75, 0x75, 0x75, 0x64, 0x65, 0x65, 0x72,
+ 0x69, 0xc6, 0x46, 0x29, 0x4d, 0x69, 0x69, 0x4c, 0x12, 0xfd, 0x7e, 0x7f,
+ 0xa2, 0x2d, 0x1c, 0x0e, 0xb3, 0x67, 0xcf, 0x6b, 0x3c, 0xf0, 0xc0, 0xd6,
+ 0x0f, 0xac, 0xc2, 0xbe, 0xf6, 0xe6, 0x69, 0x52, 0xe2, 0xa9, 0x11, 0x01,
+ 0xfc, 0xd5, 0xfe, 0x33, 0xec, 0xdc, 0x98, 0xac, 0x9e, 0xf4, 0x7b, 0xfe,
+ 0x02, 0x0c, 0x86, 0xa3, 0x68, 0x1d, 0x33, 0xf8, 0x6b, 0x8b, 0x73, 0x58,
+ 0x51, 0x98, 0x89, 0xa5, 0x35, 0x96, 0xd2, 0x9c, 0x1c, 0xf2, 0xb1, 0xab,
+ 0x63, 0x90, 0xff, 0x6e, 0xe9, 0xe1, 0x1d, 0xaf, 0x8f, 0x5d, 0x1b, 0x97,
+ 0x90, 0x11, 0xf7, 0xec, 0x44, 0x1c, 0x88, 0x29, 0xf3, 0x55, 0x22, 0x19,
+ 0x84, 0x24, 0xd5, 0x37, 0x3a, 0x3a, 0x4a, 0x47, 0x47, 0x07, 0x86, 0x61,
+ 0x24, 0x38, 0x7b, 0x7c, 0xa0, 0x45, 0x8b, 0x16, 0xf2, 0xd4, 0x53, 0xbf,
+ 0x46, 0x6b, 0xcd, 0xab, 0xaf, 0xee, 0xe6, 0xcb, 0x5f, 0xfe, 0x52, 0xa2,
+ 0x4d, 0x29, 0x45, 0x4d, 0xcd, 0x4c, 0xe6, 0xcd, 0x9b, 0x97, 0xc4, 0xe9,
+ 0x3b, 0x77, 0xbe, 0x4c, 0x6b, 0x6b, 0x2b, 0xed, 0xed, 0xed, 0x84, 0xc3,
+ 0x61, 0x52, 0x53, 0x53, 0x13, 0x34, 0xb6, 0x6d, 0x53, 0x5f, 0x3f, 0x97,
+ 0xca, 0xca, 0xca, 0xcb, 0x27, 0xd7, 0x2e, 0xd9, 0x84, 0x94, 0x92, 0xf3,
+ 0xe7, 0xcf, 0x71, 0xe2, 0xc4, 0x49, 0x6e, 0xb9, 0x65, 0xfe, 0x35, 0x83,
+ 0xb1, 0xb7, 0xdb, 0xcb, 0x05, 0x7f, 0x08, 0x43, 0x08, 0x6c, 0xad, 0x31,
+ 0xa5, 0xe0, 0x8d, 0x8b, 0x5e, 0xce, 0x8e, 0x04, 0xa9, 0xcd, 0x74, 0x5f,
+ 0x39, 0xd9, 0x17, 0x3f, 0x38, 0x4b, 0x69, 0xee, 0x2c, 0xcb, 0xe1, 0xeb,
+ 0xf3, 0x93, 0xd7, 0xfe, 0x9d, 0xc3, 0x67, 0xf9, 0xf1, 0xc9, 0x0b, 0x9c,
+ 0x1d, 0x0e, 0x72, 0xa0, 0x77, 0x98, 0x7b, 0xca, 0xf3, 0x3e, 0x58, 0xfa,
+ 0x5d, 0x29, 0x85, 0x6d, 0xdb, 0x00, 0x14, 0x16, 0x16, 0x24, 0x1d, 0x48,
+ 0x76, 0x76, 0x36, 0x5a, 0x6b, 0x84, 0x10, 0x04, 0x83, 0xc1, 0xe9, 0xa4,
+ 0x61, 0x88, 0x46, 0x63, 0xa9, 0xeb, 0x71, 0x8f, 0x63, 0x2a, 0xee, 0xb8,
+ 0x9a, 0x62, 0x18, 0x06, 0xfb, 0xf7, 0xef, 0x23, 0x18, 0x0c, 0x5d, 0x5b,
+ 0x6a, 0x08, 0x78, 0xaa, 0xb9, 0x1b, 0x43, 0x08, 0x94, 0xd6, 0x3c, 0xb2,
+ 0xa0, 0x8a, 0x90, 0x65, 0xe3, 0x90, 0x82, 0xff, 0x6a, 0xba, 0xf0, 0x81,
+ 0x25, 0x2f, 0x60, 0xd9, 0x89, 0x7d, 0xa5, 0x1a, 0x1f, 0xdc, 0x69, 0x35,
+ 0x93, 0x8d, 0xab, 0x9e, 0x16, 0xe7, 0x4e, 0x78, 0x16, 0x31, 0xf2, 0xa1,
+ 0xa1, 0x21, 0x4e, 0x9d, 0x3a, 0x4d, 0x53, 0x53, 0x13, 0x81, 0x40, 0x80,
+ 0x68, 0x34, 0xca, 0xaa, 0x55, 0xb7, 0x93, 0x92, 0x92, 0x32, 0x69, 0x0c,
+ 0x9f, 0x2f, 0xc0, 0xe8, 0xe8, 0x08, 0x4a, 0x69, 0xb4, 0x56, 0x64, 0x66,
+ 0x66, 0x5d, 0x36, 0x29, 0xe7, 0x74, 0x3a, 0xb1, 0x2c, 0x8b, 0xb1, 0xb1,
+ 0x30, 0x47, 0x8e, 0x1c, 0x61, 0xcd, 0x9a, 0x3b, 0xae, 0xfe, 0xc0, 0xa2,
+ 0x36, 0x7b, 0xba, 0x06, 0x01, 0x58, 0x55, 0x9c, 0xcd, 0xb7, 0x17, 0xcd,
+ 0xe4, 0x7f, 0xdb, 0xfb, 0x38, 0xe7, 0x0b, 0xf1, 0x87, 0xae, 0x21, 0x7c,
+ 0x51, 0x8b, 0x74, 0xc7, 0xd5, 0x3b, 0x9b, 0xaf, 0x74, 0x0c, 0xf0, 0xfd,
+ 0xb7, 0xdb, 0x38, 0x39, 0xe4, 0xc7, 0xd2, 0x9a, 0xf5, 0x45, 0x39, 0xac,
+ 0x29, 0xc9, 0xb9, 0x71, 0xd9, 0x5e, 0xd3, 0x34, 0xd9, 0xbd, 0x7b, 0x0f,
+ 0xcf, 0x3f, 0xff, 0x02, 0x5a, 0x6b, 0xa4, 0x94, 0x78, 0x3c, 0x1e, 0x0a,
+ 0x0b, 0x0b, 0x58, 0xb1, 0xe2, 0x36, 0xaa, 0xab, 0xab, 0xa6, 0xa4, 0x79,
+ 0xe9, 0xa5, 0x9d, 0xd8, 0xb6, 0x8d, 0x10, 0x82, 0x50, 0x28, 0xc4, 0x37,
+ 0xbe, 0xf1, 0x08, 0x69, 0x69, 0x9e, 0x29, 0xe7, 0x28, 0x2c, 0x2c, 0xc4,
+ 0xb2, 0xa2, 0xf4, 0xf4, 0x5c, 0xe4, 0xd0, 0xa1, 0x43, 0xd4, 0xd6, 0xd6,
+ 0x5c, 0x75, 0x46, 0xf5, 0x77, 0x2d, 0x17, 0xe9, 0x0e, 0x86, 0xf1, 0x98,
+ 0x06, 0x5b, 0xab, 0x0b, 0x11, 0x02, 0x3e, 0x5b, 0x5b, 0xc2, 0x3f, 0xbc,
+ 0xdd, 0xca, 0x69, 0x6f, 0x90, 0xe3, 0x03, 0x3e, 0x56, 0x17, 0x67, 0x4f,
+ 0xef, 0xae, 0x02, 0xc1, 0x33, 0x6d, 0xbd, 0x3c, 0xfc, 0x66, 0x13, 0xde,
+ 0xb0, 0x85, 0x43, 0x0a, 0x72, 0x53, 0x1c, 0x7c, 0x69, 0x4e, 0x19, 0x3f,
+ 0x5c, 0x31, 0xeb, 0xc6, 0xa7, 0xdf, 0x23, 0x91, 0x08, 0x85, 0x85, 0x05,
+ 0x14, 0x17, 0x17, 0x53, 0x55, 0x55, 0x4d, 0x7e, 0x7e, 0x1e, 0x59, 0x59,
+ 0x97, 0xe7, 0x78, 0xa5, 0x14, 0x95, 0x95, 0xe5, 0xa4, 0xa6, 0xba, 0x01,
+ 0x4d, 0x24, 0x12, 0xc1, 0x71, 0x05, 0xee, 0x34, 0x4d, 0x93, 0x75, 0xeb,
+ 0xd6, 0xf2, 0xb3, 0x9f, 0x6d, 0xc7, 0xe5, 0x72, 0xb1, 0x63, 0xc7, 0x0e,
+ 0xdc, 0x6e, 0xcf, 0x55, 0xad, 0xf1, 0x9b, 0x87, 0x9a, 0x71, 0x9b, 0x06,
+ 0x52, 0x08, 0xb6, 0xd5, 0xc6, 0x82, 0xc0, 0xad, 0x33, 0x0a, 0x78, 0xac,
+ 0xb1, 0x1d, 0x5b, 0x6b, 0xfe, 0xe6, 0xf0, 0x59, 0xde, 0xf8, 0xc4, 0xb2,
+ 0x69, 0x8d, 0xe5, 0x34, 0x04, 0x0f, 0xbd, 0xd1, 0x84, 0xad, 0x35, 0x45,
+ 0x6e, 0x27, 0xdf, 0x5b, 0x5a, 0xcb, 0x1d, 0x25, 0xd9, 0x54, 0xa7, 0xa7,
+ 0x5e, 0xb7, 0xf8, 0xc9, 0xbc, 0x56, 0xfd, 0x6e, 0x59, 0x16, 0x9b, 0x36,
+ 0x6d, 0xa4, 0xae, 0xae, 0x6e, 0xda, 0x34, 0xb6, 0x6d, 0xb3, 0x72, 0xe5,
+ 0x4a, 0xca, 0xcb, 0xcb, 0xa7, 0x7b, 0x35, 0x40, 0x4e, 0x4e, 0x0e, 0xb7,
+ 0xdf, 0xbe, 0x92, 0xc3, 0x87, 0x8f, 0x10, 0x0c, 0x86, 0x08, 0x04, 0x82,
+ 0xd3, 0x8e, 0x3d, 0x9e, 0x38, 0xdd, 0xc5, 0x98, 0xad, 0x30, 0xa5, 0xc0,
+ 0xed, 0x30, 0x78, 0x68, 0x6f, 0x13, 0x11, 0x15, 0xfb, 0x6e, 0x6b, 0x8d,
+ 0x21, 0x04, 0x07, 0xfb, 0x46, 0x38, 0xd2, 0x37, 0xc2, 0xd2, 0x82, 0xf7,
+ 0xbf, 0x1b, 0xb7, 0x94, 0xe6, 0xcf, 0xea, 0x4a, 0xf8, 0x59, 0x53, 0x17,
+ 0xde, 0x70, 0x94, 0x53, 0x5e, 0x3f, 0x5f, 0x98, 0x5d, 0x72, 0x5d, 0x03,
+ 0xda, 0xf7, 0x95, 0xff, 0xf1, 0xcd, 0x4f, 0x75, 0xb1, 0x68, 0x59, 0xd6,
+ 0x55, 0x4f, 0xa8, 0x94, 0xba, 0x6a, 0x9a, 0x65, 0xcb, 0x96, 0x91, 0x99,
+ 0x99, 0x79, 0x59, 0x5b, 0x36, 0xa5, 0xf4, 0x2a, 0xc5, 0x6f, 0x5b, 0x2f,
+ 0xe2, 0x90, 0x02, 0x4b, 0x69, 0x2e, 0x8c, 0x86, 0xf8, 0xe5, 0xe9, 0x4e,
+ 0x7e, 0xd3, 0xdc, 0xcd, 0x93, 0xa7, 0xbb, 0xe8, 0x0f, 0x45, 0xb0, 0xb5,
+ 0xc6, 0x63, 0x1a, 0x7c, 0xbf, 0xa1, 0x6d, 0x7a, 0x0c, 0xa5, 0x35, 0x8f,
+ 0xad, 0x98, 0xcd, 0x9a, 0x92, 0x6c, 0x94, 0x86, 0x1f, 0x9f, 0xbc, 0xc0,
+ 0xd7, 0xf6, 0x9d, 0xba, 0xae, 0x80, 0x98, 0x2e, 0x97, 0x0b, 0xb7, 0xdb,
+ 0x4d, 0x28, 0x14, 0x62, 0xff, 0xfe, 0xfd, 0x54, 0x54, 0x54, 0x90, 0x91,
+ 0x91, 0x81, 0x52, 0x8a, 0x86, 0x86, 0x06, 0x94, 0x52, 0x28, 0xa5, 0xa8,
+ 0xad, 0xad, 0xbd, 0x2e, 0x13, 0xda, 0xb6, 0x9d, 0x18, 0x33, 0x89, 0x33,
+ 0xa4, 0xbc, 0xa2, 0x71, 0x5f, 0xbe, 0x7c, 0x39, 0xbb, 0x76, 0xed, 0x9a,
+ 0xb6, 0x0d, 0xe9, 0x0a, 0x84, 0x69, 0x18, 0x18, 0x45, 0x03, 0x1f, 0xab,
+ 0xc8, 0xe3, 0x89, 0x75, 0xf3, 0xb0, 0x2f, 0xe1, 0x29, 0xa7, 0x14, 0xdc,
+ 0xf3, 0xd2, 0x31, 0x1a, 0x07, 0x7d, 0x34, 0x0e, 0xf8, 0xe8, 0x0c, 0x8c,
+ 0x31, 0x5d, 0x05, 0xf1, 0xfc, 0x3d, 0x0b, 0xb9, 0xfb, 0xa5, 0x63, 0x1c,
+ 0xee, 0x1d, 0xe1, 0xc9, 0xe6, 0x6e, 0x66, 0x65, 0x7a, 0xf8, 0xfa, 0xfc,
+ 0x8a, 0xeb, 0x03, 0x48, 0x5a, 0x5a, 0x1a, 0x6b, 0xd6, 0xac, 0x61, 0xd7,
+ 0xae, 0x5d, 0x04, 0x83, 0x21, 0xb6, 0x6f, 0x7f, 0x9c, 0x9c, 0x9c, 0x1c,
+ 0xa2, 0xd1, 0x28, 0x3e, 0x5f, 0x2c, 0xab, 0x59, 0x5a, 0x5a, 0xc2, 0x86,
+ 0x0d, 0x77, 0x5e, 0xf3, 0x24, 0x4a, 0x29, 0xb4, 0xd6, 0x98, 0xa6, 0xc9,
+ 0x9e, 0x3d, 0x7f, 0x98, 0x14, 0xe5, 0xdb, 0xb6, 0xcd, 0xad, 0xb7, 0x2e,
+ 0x60, 0xc9, 0x92, 0x25, 0x57, 0x88, 0xfe, 0xeb, 0x69, 0x69, 0x69, 0xa5,
+ 0xa5, 0xe5, 0x2c, 0xa6, 0x69, 0xbe, 0xaf, 0xa4, 0xfd, 0xe2, 0x74, 0x17,
+ 0xc1, 0xa8, 0x4d, 0x8a, 0x69, 0xf0, 0x99, 0xda, 0x62, 0x3c, 0x53, 0x5c,
+ 0xd3, 0x7e, 0xb1, 0xae, 0x94, 0xaf, 0xef, 0x3b, 0x4d, 0xdf, 0x58, 0x84,
+ 0xd7, 0xbb, 0xbc, 0xcc, 0xca, 0x72, 0x27, 0x45, 0xe0, 0x57, 0x04, 0xe5,
+ 0xee, 0x85, 0xdc, 0xb3, 0xf3, 0x18, 0x6f, 0xf7, 0x8f, 0xf2, 0xd7, 0x07,
+ 0xcf, 0x20, 0x05, 0x7c, 0x6d, 0x5e, 0xc5, 0xf5, 0x51, 0x59, 0x75, 0x75,
+ 0xb3, 0xf9, 0xea, 0x57, 0x1f, 0x62, 0xe9, 0xd2, 0x25, 0xa4, 0xa4, 0xa4,
+ 0x30, 0x32, 0x32, 0x42, 0x30, 0x18, 0xa4, 0x20, 0xbf, 0x80, 0xcd, 0x9b,
+ 0x37, 0xb3, 0x6d, 0xdb, 0xb6, 0x84, 0x0b, 0xab, 0xb5, 0x4e, 0xfa, 0x4c,
+ 0xa7, 0xac, 0x5e, 0xbd, 0x8a, 0xf4, 0xf4, 0x74, 0xb4, 0xd6, 0xf8, 0xfd,
+ 0x7e, 0x86, 0x87, 0x87, 0x27, 0x7d, 0xc6, 0x42, 0xa1, 0xf8, 0xf8, 0x5c,
+ 0x76, 0xfc, 0x4d, 0x9b, 0x3e, 0x4e, 0x41, 0x41, 0x21, 0x4a, 0x69, 0xe6,
+ 0xce, 0x9d, 0x73, 0x45, 0xf5, 0xf5, 0x83, 0x86, 0x76, 0x4c, 0x29, 0x71,
+ 0x9b, 0x92, 0x75, 0xa5, 0x53, 0xbb, 0xa3, 0xab, 0x8b, 0xb3, 0xc9, 0x70,
+ 0x9a, 0x18, 0x42, 0xf2, 0xdd, 0xa3, 0x2d, 0xa4, 0x1a, 0x12, 0xa5, 0x35,
+ 0x4a, 0x5f, 0x1a, 0xb5, 0x6b, 0xb4, 0x26, 0xa9, 0x0e, 0x20, 0xc5, 0x94,
+ 0xbc, 0xbe, 0x65, 0x29, 0x15, 0x69, 0x29, 0xb8, 0xa4, 0xc1, 0x77, 0x8e,
+ 0xb4, 0xf0, 0x54, 0x73, 0xf7, 0x07, 0x06, 0x44, 0x04, 0x7c, 0x83, 0xda,
+ 0xb6, 0x2d, 0x94, 0xb6, 0x30, 0xe2, 0x1b, 0x0c, 0xf8, 0x7d, 0x18, 0x12,
+ 0x4c, 0xd3, 0x41, 0x24, 0x12, 0xc6, 0xb2, 0x22, 0x68, 0xad, 0xd0, 0x4a,
+ 0x13, 0xb5, 0xa2, 0xd8, 0xd1, 0x28, 0x5a, 0xdb, 0x48, 0x19, 0x7b, 0x07,
+ 0x8b, 0x56, 0x09, 0x29, 0x40, 0xab, 0x58, 0xdf, 0xd8, 0xc9, 0xc6, 0x0f,
+ 0x55, 0xe3, 0x30, 0x4d, 0x82, 0xa1, 0x20, 0xca, 0xb6, 0xe3, 0xdb, 0x14,
+ 0xb1, 0xbf, 0xf1, 0x76, 0x29, 0x24, 0x86, 0x61, 0xa0, 0xb4, 0xc6, 0x8a,
+ 0x07, 0x97, 0x42, 0x08, 0x4c, 0xc3, 0x84, 0xf1, 0xb4, 0x9e, 0x10, 0x18,
+ 0x86, 0x41, 0x34, 0x12, 0xa1, 0x7c, 0xc6, 0x2d, 0xe4, 0x16, 0x4f, 0xed,
+ 0x6a, 0xaa, 0x78, 0xaa, 0xc3, 0x52, 0x0a, 0x43, 0x88, 0x49, 0xaf, 0x49,
+ 0xde, 0x6b, 0x17, 0xb4, 0x86, 0x90, 0xad, 0x48, 0x77, 0x18, 0x58, 0xf1,
+ 0x58, 0xcc, 0x8c, 0x67, 0x60, 0xc7, 0x01, 0xba, 0xb4, 0x6e, 0x2a, 0x63,
+ 0xaf, 0xb4, 0x66, 0xcc, 0x56, 0x89, 0xd4, 0xc9, 0x35, 0xab, 0x2c, 0xad,
+ 0x35, 0x1a, 0x85, 0x56, 0x8a, 0xa8, 0x6d, 0x61, 0x2b, 0x1b, 0x69, 0x08,
+ 0x94, 0x6d, 0x13, 0x0a, 0x85, 0xd0, 0xda, 0x46, 0x29, 0x3b, 0x01, 0x88,
+ 0x40, 0x23, 0x24, 0x08, 0x25, 0x50, 0xda, 0x42, 0xdb, 0x3a, 0x0e, 0x88,
+ 0x1d, 0xe7, 0x6a, 0x95, 0x00, 0x05, 0x0d, 0x4a, 0x2b, 0x34, 0x60, 0x45,
+ 0x42, 0x71, 0x90, 0x6c, 0x40, 0xa1, 0x11, 0x08, 0x4d, 0xec, 0xb0, 0x75,
+ 0x6c, 0xe3, 0xb6, 0x15, 0x0b, 0xad, 0xa5, 0x14, 0x38, 0xa4, 0x40, 0x6b,
+ 0x8d, 0x1d, 0x89, 0xa0, 0xb1, 0x27, 0x0e, 0x30, 0xae, 0x54, 0x0c, 0xe3,
+ 0xf2, 0xef, 0xa0, 0x9a, 0x87, 0x03, 0xbc, 0xd5, 0x3b, 0xcc, 0x67, 0x67,
+ 0x95, 0xd0, 0x19, 0x18, 0x23, 0x64, 0xd9, 0xcc, 0xcd, 0x4e, 0xa3, 0x71,
+ 0xd0, 0xc7, 0x81, 0x8b, 0xc3, 0x6c, 0xae, 0xcc, 0xe7, 0xc5, 0xf3, 0xfd,
+ 0x49, 0xa0, 0x6c, 0xab, 0x2d, 0xe6, 0xed, 0x81, 0x00, 0x07, 0x2e, 0x0e,
+ 0x23, 0x85, 0x60, 0xcc, 0xb2, 0x79, 0x78, 0x5e, 0x05, 0xbe, 0xa8, 0xcd,
+ 0x33, 0xad, 0x17, 0xb1, 0xb5, 0xa6, 0x30, 0xd5, 0xc5, 0x03, 0x33, 0x63,
+ 0xd9, 0x67, 0x5f, 0xd4, 0xe2, 0xe9, 0xd6, 0x5e, 0xc6, 0xec, 0x18, 0xf3,
+ 0x95, 0xa7, 0xa7, 0xb0, 0xa5, 0xb2, 0x00, 0x0d, 0x3c, 0x7f, 0xae, 0x97,
+ 0x8d, 0x15, 0x05, 0x49, 0x69, 0xf5, 0x86, 0x81, 0x51, 0x8e, 0xf4, 0x8d,
+ 0xf0, 0xa9, 0xda, 0x62, 0x32, 0xe2, 0xae, 0xfe, 0xab, 0x9d, 0x83, 0x34,
+ 0x0f, 0x07, 0x10, 0x42, 0xa0, 0xd1, 0x3c, 0x5c, 0x5f, 0x81, 0xe9, 0x49,
+ 0xff, 0xe3, 0xbe, 0xe6, 0xbe, 0x96, 0xf2, 0x64, 0xdb, 0x20, 0x0f, 0xbe,
+ 0xf6, 0x2e, 0xa6, 0x10, 0x68, 0x31, 0x2e, 0x4d, 0xc9, 0xf9, 0x10, 0xeb,
+ 0x74, 0x2b, 0xa8, 0xe6, 0x09, 0xce, 0x32, 0x24, 0xed, 0x9f, 0x59, 0x4d,
+ 0x99, 0x27, 0x85, 0xc3, 0x7d, 0x23, 0x7c, 0xfb, 0x48, 0x0b, 0x0f, 0xd6,
+ 0x95, 0x72, 0xf7, 0x8e, 0xa3, 0x8c, 0x46, 0x2d, 0x5a, 0x3e, 0x7d, 0x07,
+ 0x7b, 0xbb, 0x87, 0x78, 0xe4, 0x60, 0x33, 0x1b, 0x2b, 0xf2, 0x69, 0x19,
+ 0x09, 0xf2, 0x6a, 0xd7, 0x20, 0x29, 0x52, 0xb2, 0xb2, 0x28, 0x0b, 0xa7,
+ 0x94, 0x2c, 0x7f, 0xf6, 0x20, 0xf7, 0x56, 0x15, 0x52, 0xea, 0x71, 0x11,
+ 0xb0, 0x6c, 0x94, 0xd6, 0xfc, 0xf3, 0xf1, 0x73, 0xfc, 0xaa, 0xb9, 0x8b,
+ 0xcf, 0xcf, 0x2a, 0xe1, 0xad, 0xde, 0x61, 0xbe, 0x79, 0xf0, 0x0c, 0x87,
+ 0xef, 0xbf, 0x8d, 0x57, 0x3a, 0x06, 0x78, 0xf4, 0x50, 0x33, 0x5f, 0x98,
+ 0x55, 0x42, 0x44, 0xa9, 0xc4, 0x0a, 0xf7, 0xf5, 0x78, 0xb9, 0x6f, 0xc7,
+ 0x31, 0xd6, 0x57, 0x14, 0xb0, 0x67, 0x4b, 0xcc, 0x26, 0x3e, 0xb4, 0xb7,
+ 0x89, 0xc6, 0x21, 0x1f, 0x8b, 0xf3, 0x33, 0xf8, 0xd6, 0xaf, 0xdf, 0xe4,
+ 0xdf, 0x57, 0xd5, 0xf1, 0xc9, 0x9a, 0x62, 0xee, 0x7a, 0xee, 0x30, 0x0f,
+ 0xcc, 0x2a, 0xa1, 0xd4, 0xe3, 0xfa, 0xff, 0x73, 0x41, 0x35, 0xd4, 0x77,
+ 0x1e, 0xad, 0xed, 0x84, 0x29, 0x95, 0x02, 0x22, 0xfd, 0x7d, 0x3c, 0x98,
+ 0x37, 0xc6, 0x54, 0x1a, 0x42, 0x03, 0xa6, 0xe1, 0x20, 0x33, 0xaf, 0x2a,
+ 0x26, 0x85, 0xf1, 0x92, 0xe3, 0x72, 0x90, 0xeb, 0x72, 0xc6, 0xf2, 0x5f,
+ 0x42, 0xc4, 0x32, 0xbb, 0x1a, 0xdc, 0xa6, 0x41, 0x87, 0x7f, 0x8c, 0xfb,
+ 0x77, 0x35, 0xf0, 0xe9, 0x9a, 0x12, 0x52, 0x0d, 0x49, 0x45, 0x7a, 0x0a,
+ 0xff, 0xb2, 0x72, 0x36, 0x5f, 0x79, 0xa3, 0x89, 0x2c, 0x97, 0x83, 0x7f,
+ 0x5c, 0x1e, 0xf3, 0x20, 0x53, 0x0d, 0x83, 0x47, 0x17, 0x56, 0xb3, 0x38,
+ 0x7f, 0xe2, 0x86, 0xd0, 0x90, 0x82, 0xca, 0xf4, 0x54, 0x7e, 0xb0, 0x62,
+ 0x16, 0x27, 0x87, 0x7c, 0x2c, 0x79, 0xe6, 0x20, 0x61, 0x5b, 0x21, 0x04,
+ 0xcc, 0xca, 0xf4, 0xf0, 0xd8, 0x6d, 0xb3, 0xdf, 0x93, 0x55, 0x3e, 0xc5,
+ 0xdd, 0xd5, 0x85, 0x1c, 0xea, 0x1b, 0xe1, 0xc4, 0xa0, 0x8f, 0x5b, 0x72,
+ 0xd3, 0x79, 0xb6, 0xbd, 0x97, 0x03, 0x5b, 0x97, 0x53, 0x93, 0xe1, 0xe6,
+ 0xbb, 0x8b, 0x67, 0x22, 0x85, 0xc0, 0x56, 0x1a, 0xa7, 0xcb, 0x9c, 0x34,
+ 0xdf, 0x0d, 0x05, 0x44, 0x6b, 0xcd, 0xbb, 0x47, 0x77, 0x20, 0x44, 0xb2,
+ 0x8e, 0x5f, 0xec, 0x30, 0x58, 0x96, 0x26, 0x2e, 0xe3, 0xb1, 0xd9, 0x94,
+ 0x54, 0x2d, 0x20, 0xbf, 0xb6, 0x66, 0x7a, 0x1e, 0x1e, 0xf0, 0xb9, 0x59,
+ 0x25, 0xfc, 0xbe, 0xbd, 0x37, 0x61, 0x23, 0x2f, 0x05, 0x57, 0x5d, 0xe2,
+ 0x38, 0x08, 0x01, 0x9f, 0xd9, 0x73, 0x82, 0x2c, 0xa7, 0xc9, 0xcf, 0xd7,
+ 0xcd, 0x63, 0x6e, 0x76, 0x5a, 0xa2, 0x6d, 0xdb, 0xee, 0x13, 0x1c, 0xe8,
+ 0x1d, 0xe6, 0xb7, 0x1b, 0x16, 0x50, 0xe2, 0x71, 0x21, 0x85, 0xa0, 0xc9,
+ 0xeb, 0x67, 0xc1, 0xd3, 0x07, 0xf8, 0xca, 0xdc, 0x72, 0x1e, 0xaa, 0x2f,
+ 0xe7, 0xad, 0xde, 0x61, 0xce, 0xf9, 0x43, 0x3c, 0xbe, 0xb6, 0x9e, 0x4f,
+ 0xed, 0x3e, 0xc1, 0x13, 0x67, 0xba, 0xf8, 0xd1, 0xca, 0x3a, 0x10, 0x24,
+ 0xe6, 0xce, 0x4f, 0x8d, 0x31, 0x4d, 0xc4, 0x56, 0x58, 0x4a, 0xf3, 0xd9,
+ 0x3d, 0x27, 0xc8, 0x74, 0x99, 0x3c, 0x7b, 0xd7, 0x42, 0x4a, 0x3c, 0xae,
+ 0x1b, 0x0d, 0x88, 0xcd, 0x82, 0xdb, 0x92, 0xef, 0x3a, 0x1c, 0x52, 0xf2,
+ 0xc0, 0x2b, 0xc7, 0x71, 0x3b, 0x8c, 0xcb, 0x82, 0x98, 0xda, 0x66, 0xe2,
+ 0xe8, 0x7a, 0xe7, 0x12, 0x23, 0xae, 0xb9, 0xaf, 0xba, 0x90, 0x4f, 0x54,
+ 0x4d, 0xfd, 0xf3, 0x80, 0x5b, 0xf3, 0x32, 0x58, 0x5a, 0x90, 0xc9, 0xc3,
+ 0x6f, 0x9e, 0x22, 0xd5, 0x94, 0x57, 0x58, 0x0f, 0xfc, 0x74, 0xf5, 0x5c,
+ 0xee, 0x28, 0xc9, 0x9e, 0x04, 0xde, 0x2d, 0x39, 0x69, 0x1c, 0xeb, 0x1f,
+ 0x65, 0x6d, 0x49, 0x76, 0x62, 0xce, 0x9a, 0x4c, 0x37, 0x87, 0xb7, 0xae,
+ 0x20, 0x1a, 0x77, 0xc1, 0x7f, 0x7e, 0xaa, 0x0b, 0x0d, 0xfc, 0xf9, 0xde,
+ 0x26, 0xc6, 0x6c, 0xc5, 0x73, 0xe7, 0xfa, 0xf8, 0xd1, 0xca, 0x3a, 0x2c,
+ 0xa5, 0x13, 0xf6, 0x64, 0x77, 0xe7, 0x20, 0x11, 0x5b, 0x71, 0x77, 0x79,
+ 0x1e, 0x86, 0x10, 0xfc, 0xe4, 0x3d, 0xf3, 0xdd, 0x50, 0x40, 0x84, 0x30,
+ 0x48, 0xcf, 0x2a, 0x4c, 0xca, 0x0a, 0x9c, 0x1c, 0xf0, 0xf1, 0x87, 0x61,
+ 0x41, 0x86, 0xf3, 0xf2, 0x07, 0x27, 0x7c, 0x01, 0x60, 0xe2, 0x11, 0x42,
+ 0x54, 0x29, 0x3e, 0x57, 0x5b, 0x9a, 0xc4, 0xe9, 0x46, 0xec, 0x16, 0x28,
+ 0xa6, 0x02, 0x6d, 0xc5, 0x57, 0xeb, 0x2b, 0xf9, 0xd5, 0x99, 0x6e, 0xda,
+ 0x46, 0x43, 0x97, 0x5c, 0xc3, 0xc6, 0xae, 0x62, 0xc7, 0x4b, 0x9a, 0xc3,
+ 0xe0, 0xa9, 0xb3, 0x3d, 0xbc, 0xde, 0x3d, 0x44, 0xd0, 0xb2, 0xf9, 0xde,
+ 0xb2, 0xda, 0x78, 0x1f, 0x78, 0x74, 0xd1, 0x0c, 0x0e, 0xf4, 0x8d, 0x70,
+ 0xff, 0x2b, 0xc7, 0x79, 0xe9, 0xe3, 0x8b, 0x11, 0x62, 0xc2, 0xeb, 0x72,
+ 0x48, 0x89, 0x37, 0x1c, 0x65, 0x77, 0xd7, 0x20, 0x2f, 0xde, 0xb3, 0x88,
+ 0x35, 0x71, 0xd0, 0x2a, 0x9e, 0xdc, 0xcb, 0xce, 0xf3, 0xfd, 0x7c, 0x69,
+ 0x4e, 0x19, 0x5b, 0x5e, 0x6e, 0x60, 0x7d, 0x49, 0x0e, 0xff, 0xd3, 0x76,
+ 0x91, 0xbf, 0x5b, 0x52, 0x83, 0x21, 0x63, 0xde, 0xdf, 0x53, 0x67, 0xbb,
+ 0x79, 0xbd, 0x7b, 0x08, 0x0d, 0xfc, 0xfd, 0xd2, 0x9a, 0x1b, 0xfb, 0xd8,
+ 0xba, 0xfb, 0x5c, 0x23, 0xde, 0x81, 0x8e, 0xa4, 0x2b, 0xd1, 0xa1, 0x31,
+ 0x8b, 0x36, 0x5f, 0x68, 0x12, 0x87, 0x26, 0x24, 0xc8, 0x99, 0xca, 0xac,
+ 0x05, 0xeb, 0x93, 0x62, 0x14, 0xad, 0xa1, 0x3e, 0x27, 0x2d, 0xe1, 0xde,
+ 0xf6, 0x06, 0xc3, 0xb4, 0xfb, 0xc6, 0x58, 0x51, 0x98, 0xc9, 0x91, 0xbe,
+ 0x11, 0x8a, 0xdd, 0x2e, 0xca, 0xd2, 0x52, 0xe8, 0xf0, 0x8f, 0xe1, 0x8b,
+ 0x5a, 0x09, 0x55, 0xd4, 0x3c, 0x1c, 0xc0, 0x90, 0x82, 0x99, 0x19, 0xb1,
+ 0x80, 0xf0, 0xdd, 0x21, 0x3f, 0xfd, 0xa1, 0x08, 0x3a, 0x0e, 0xf2, 0xfa,
+ 0xd2, 0x5c, 0x3a, 0xfc, 0x63, 0x78, 0xc3, 0x51, 0x16, 0xe5, 0x67, 0x60,
+ 0x6b, 0xcd, 0xde, 0x6e, 0x2f, 0x4b, 0xf2, 0x33, 0x18, 0xb3, 0x15, 0x9d,
+ 0xfe, 0x31, 0x16, 0xc5, 0xf5, 0x7f, 0xd0, 0xb2, 0x39, 0xd8, 0x3b, 0xc2,
+ 0xfa, 0x4b, 0x62, 0x9e, 0x53, 0xde, 0x00, 0xa0, 0x99, 0x93, 0x9d, 0xc6,
+ 0x89, 0x41, 0x1f, 0xde, 0x70, 0x94, 0xaa, 0x74, 0x37, 0x95, 0xe9, 0xb1,
+ 0x98, 0xee, 0x68, 0xff, 0x28, 0xfe, 0xa8, 0x15, 0x8b, 0xbd, 0x80, 0xf5,
+ 0xa5, 0x39, 0x37, 0x0e, 0x10, 0xad, 0x15, 0x67, 0x4f, 0xbc, 0xc6, 0x88,
+ 0x37, 0x39, 0x98, 0x0a, 0x59, 0x2a, 0xe9, 0xbe, 0x39, 0x39, 0x6e, 0xd6,
+ 0xe4, 0xe4, 0x55, 0x50, 0x33, 0x7f, 0xed, 0x15, 0x52, 0xe4, 0xd3, 0xa8,
+ 0x13, 0x53, 0xd5, 0x8b, 0x2b, 0x46, 0xe9, 0xd3, 0x1b, 0xe3, 0x72, 0xf7,
+ 0x8d, 0x5c, 0x79, 0xbd, 0x22, 0x6e, 0xd0, 0xc4, 0x0d, 0xfe, 0x39, 0x82,
+ 0x6d, 0x45, 0x92, 0x0e, 0x5f, 0x69, 0x58, 0xb7, 0xe3, 0x18, 0x41, 0xdb,
+ 0xc6, 0x10, 0x32, 0xa1, 0x52, 0x0c, 0x29, 0xd1, 0x42, 0x60, 0x0a, 0x81,
+ 0x34, 0x0d, 0x4c, 0xd3, 0x81, 0x94, 0x02, 0xa7, 0x90, 0x08, 0xa1, 0x71,
+ 0x08, 0x89, 0x29, 0x63, 0xed, 0xa6, 0x10, 0x98, 0x52, 0x20, 0xa5, 0xc0,
+ 0x10, 0x02, 0x87, 0x20, 0x51, 0x6f, 0x88, 0x98, 0xd7, 0x64, 0x08, 0x19,
+ 0x7b, 0x7e, 0x13, 0x57, 0x6d, 0x26, 0x02, 0x43, 0x82, 0x21, 0x0d, 0x0c,
+ 0x21, 0x30, 0x0c, 0x30, 0x90, 0x31, 0x3a, 0x34, 0x86, 0x90, 0x13, 0xb4,
+ 0xd2, 0x48, 0x3c, 0xe7, 0x31, 0x20, 0x56, 0x2f, 0x04, 0x32, 0x3e, 0xe6,
+ 0xf8, 0xbc, 0x32, 0x51, 0x1f, 0x03, 0x25, 0x36, 0xbf, 0x8e, 0xed, 0x47,
+ 0xc4, 0xd6, 0x27, 0x11, 0xf1, 0xf5, 0x80, 0x88, 0xc7, 0x5f, 0x37, 0xd4,
+ 0x86, 0x18, 0xa6, 0x33, 0xe9, 0x7b, 0xfb, 0x68, 0x88, 0x8e, 0x90, 0xcd,
+ 0x98, 0x52, 0x18, 0x09, 0x30, 0xc0, 0x90, 0x1a, 0x25, 0xc1, 0x29, 0x80,
+ 0xa8, 0x85, 0x29, 0x15, 0xd2, 0x90, 0x38, 0xa5, 0xc0, 0x14, 0xe0, 0x94,
+ 0x32, 0x01, 0x84, 0x63, 0x1c, 0x10, 0xc3, 0xc0, 0x21, 0x62, 0x34, 0x86,
+ 0x90, 0x38, 0x25, 0x48, 0x62, 0x6d, 0x46, 0xbc, 0xdf, 0xa5, 0x60, 0x99,
+ 0x02, 0x4c, 0x43, 0xc7, 0x0e, 0x4e, 0x09, 0x0c, 0x14, 0x26, 0xe3, 0x6d,
+ 0xb1, 0x88, 0xdf, 0x21, 0x05, 0x52, 0xc6, 0x40, 0x70, 0x48, 0x89, 0x8c,
+ 0x03, 0x62, 0x0a, 0x81, 0x21, 0x63, 0xb4, 0x52, 0x49, 0x0c, 0x19, 0x4b,
+ 0xed, 0x1b, 0x82, 0x58, 0x7f, 0x40, 0x09, 0x1d, 0x03, 0x4c, 0x80, 0x8a,
+ 0x83, 0x65, 0xa0, 0xd1, 0x0a, 0xb4, 0x88, 0x8d, 0xa3, 0x15, 0xfc, 0x1f,
+ 0xd7, 0xc0, 0x3b, 0xab, 0xdb, 0x65, 0xb1, 0x8a, 0x00, 0x00, 0x00, 0x00,
+ 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+unsigned int openair_logo_png_len = 4664;
diff --git a/common/utils/T/tracer/openair_logo.png b/common/utils/T/tracer/openair_logo.png
new file mode 100644
index 0000000000..8b3dcfe46e
Binary files /dev/null and b/common/utils/T/tracer/openair_logo.png differ
diff --git a/common/utils/T/tracer/plot.c b/common/utils/T/tracer/plot.c
new file mode 100644
index 0000000000..7447384288
--- /dev/null
+++ b/common/utils/T/tracer/plot.c
@@ -0,0 +1,291 @@
+#include "defs.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+typedef struct {
+ float *buf;
+ short *iqbuf;
+ int count;
+ int type;
+ volatile int iq_count; /* for ULSCH IQ data */
+ int iq_insert_pos;
+ GC g;
+} data;
+
+typedef struct {
+ Display *d;
+ Window w;
+ Pixmap px;
+ GC bg;
+ int width;
+ int height;
+ pthread_mutex_t lock;
+ float zoom;
+ int timer_pipe[2];
+ data *p; /* list of plots */
+ int nplots;
+} plot;
+
+static void *timer_thread(void *_p)
+{
+ plot *p = _p;
+ char c;
+
+ while (1) {
+ /* more or less 10Hz */
+ usleep(100*1000);
+ c = 1;
+ if (write(p->timer_pipe[1], &c, 1) != 1) abort();
+ }
+
+ return NULL;
+}
+
+static void *plot_thread(void *_p)
+{
+ float v;
+ float *s;
+ int i, j;
+ plot *p = _p;
+ int redraw = 0;
+ int replot = 0;
+ fd_set rset;
+ int xfd = ConnectionNumber(p->d);
+ int maxfd = xfd > p->timer_pipe[0] ? xfd : p->timer_pipe[0];
+ int pp;
+
+ while (1) {
+ while (XPending(p->d)) {
+ XEvent e;
+ XNextEvent(p->d, &e);
+ switch (e.type) {
+ case ButtonPress:
+ /* button 4: zoom out */
+ if (e.xbutton.button == 4) { p->zoom = p->zoom * 1.25; replot = 1; }
+ /* button 5: zoom in */
+ if (e.xbutton.button == 5) { p->zoom = p->zoom * 0.8; replot = 1; }
+ printf("zoom: %f\n", p->zoom);
+ break;
+ case Expose: redraw = 1; break;
+ }
+ }
+
+ if (replot == 1) {
+ replot = 0;
+ redraw = 1;
+
+ if (pthread_mutex_lock(&p->lock)) abort();
+
+ XFillRectangle(p->d, p->px, p->bg, 0, 0, p->width, p->height);
+
+ for (pp = 0; pp < p->nplots; pp++) {
+ if (p->p[pp].type == PLOT_MINMAX) {
+ s = p->p[pp].buf;
+ for (i = 0; i < 512; i++) {
+ int min = *s;
+ int max = *s;
+ for (j = 0; j < p->p[pp].count/512; j++, s++) {
+ if (*s < min) min = *s;
+ if (*s > max) max = *s;
+ }
+ XDrawLine(p->d, p->px, p->p[pp].g, i, 100-min, i, 100-max);
+ }
+ } else if (p->p[pp].type == PLOT_VS_TIME) {
+ for (i = 0; i < p->p[pp].count; i++)
+ p->p[pp].buf[i] =
+ 10*log10(1.0+(float)(p->p[pp].iqbuf[2*i]*p->p[pp].iqbuf[2*i]+
+ p->p[pp].iqbuf[2*i+1]*p->p[pp].iqbuf[2*i+1]));
+ s = p->p[pp].buf;
+ for (i = 0; i < 512; i++) {
+ v = 0;
+ for (j = 0; j < p->p[pp].count/512; j++, s++) v += *s;
+ v /= p->p[pp].count/512;
+ XDrawLine(p->d, p->px, p->p[pp].g, i, 100, i, 100-v);
+ }
+ } else if (p->p[pp].type == PLOT_IQ_POINTS) {
+ XPoint pts[p->p[pp].iq_count];
+ int count = p->p[pp].iq_count;
+ for (i = 0; i < count; i++) {
+ pts[i].x = p->p[pp].iqbuf[2*i]*p->zoom/20+50;
+ pts[i].y = -p->p[pp].iqbuf[2*i+1]*p->zoom/20+50;
+ }
+ XDrawPoints(p->d, p->px, p->p[pp].g, pts, count, CoordModeOrigin);
+ }
+ }
+
+ if (pthread_mutex_unlock(&p->lock)) abort();
+ }
+
+ if (redraw) {
+ redraw = 0;
+ XCopyArea(p->d, p->px, p->w, DefaultGC(p->d, DefaultScreen(p->d)),
+ 0, 0, p->width, p->height, 0, 0);
+ }
+
+ XFlush(p->d);
+
+ FD_ZERO(&rset);
+ FD_SET(p->timer_pipe[0], &rset);
+ FD_SET(xfd, &rset);
+ if (select(maxfd+1, &rset, NULL, NULL, NULL) == -1) abort();
+ if (FD_ISSET(p->timer_pipe[0], &rset)) {
+ char b[512];
+ if (read(p->timer_pipe[0], b, 512) <= 0) abort();
+ replot = 1;
+ }
+ }
+
+ return NULL;
+}
+
+void *make_plot(int width, int height, char *title, int nplots, ...)
+{
+ plot *p;
+ Display *d;
+ Window w;
+ Pixmap pm;
+ int i;
+ va_list ap;
+ XGCValues gcv;
+
+ p = malloc(sizeof(*p)); if (p == NULL) abort();
+
+ d = XOpenDisplay(0); if (d == NULL) abort();
+ w = XCreateSimpleWindow(d, DefaultRootWindow(d), 0, 0, width, height,
+ 0, WhitePixel(d, DefaultScreen(d)), WhitePixel(d, DefaultScreen(d)));
+ XSelectInput(d, w, ExposureMask | ButtonPressMask);
+ XMapWindow(d, w);
+
+ {
+ XSetWindowAttributes att;
+ att.backing_store = Always;
+ XChangeWindowAttributes(d, w, CWBackingStore, &att);
+ }
+
+ XStoreName(d, w, title);
+
+ p->bg = XCreateGC(d, w, 0, NULL);
+ XCopyGC(d, DefaultGC(d, DefaultScreen(d)), -1L, p->bg);
+ gcv.foreground = WhitePixel(d, DefaultScreen(d));
+ XChangeGC(d, p->bg, GCForeground, &gcv);
+
+ pm = XCreatePixmap(d, w, width, height, DefaultDepth(d, DefaultScreen(d)));
+
+ p->width = width;
+ p->height = height;
+ p->p = malloc(nplots * sizeof(data)); if (p->p == NULL) abort();
+
+ va_start(ap, nplots);
+ for (i = 0; i < nplots; i++) {
+ int count;
+ int type;
+ char *color;
+ XColor rcol, scol;
+
+ count = va_arg(ap, int);
+ type = va_arg(ap, int);
+ color = va_arg(ap, char *);
+
+ p->p[i].g = XCreateGC(d, w, 0, NULL);
+ XCopyGC(d, DefaultGC(d, DefaultScreen(d)), -1L, p->p[i].g);
+ if (XAllocNamedColor(d, DefaultColormap(d, DefaultScreen(d)),
+ color, &scol, &rcol)) {
+ gcv.foreground = scol.pixel;
+ XChangeGC(d, p->p[i].g, GCForeground, &gcv);
+ } else {
+ printf("could not allocate color '%s'\n", color);
+ abort();
+ }
+
+ if (type == PLOT_VS_TIME) {
+ p->p[i].buf = malloc(sizeof(float) * count);
+ if (p->p[i].buf == NULL) abort();
+ p->p[i].iqbuf = malloc(sizeof(short) * count * 2);
+ if(p->p[i].iqbuf==NULL)abort();
+ } else if (type == PLOT_MINMAX) {
+ p->p[i].buf = malloc(sizeof(float) * count);
+ if (p->p[i].buf == NULL) abort();
+ p->p[i].iqbuf = NULL;
+ } else {
+ p->p[i].buf = NULL;
+ p->p[i].iqbuf = malloc(sizeof(short) * count * 2);
+ if(p->p[i].iqbuf==NULL)abort();
+ }
+ p->p[i].count = count;
+ p->p[i].type = type;
+ p->p[i].iq_count = 0;
+ p->p[i].iq_insert_pos = 0;
+ }
+ va_end(ap);
+
+ p->d = d;
+ p->w = w;
+ p->px = pm;
+
+ p->zoom = 1;
+ p->nplots = nplots;
+
+ pthread_mutex_init(&p->lock, NULL);
+
+ if (pipe(p->timer_pipe)) abort();
+
+ new_thread(plot_thread, p);
+ new_thread(timer_thread, p);
+
+ return p;
+}
+
+void plot_set(void *_plot, float *data, int len, int pos, int pp)
+{
+ plot *p = _plot;
+ if (pthread_mutex_lock(&p->lock)) abort();
+ memcpy(p->p[pp].buf + pos, data, len * sizeof(float));
+ if (pthread_mutex_unlock(&p->lock)) abort();
+}
+
+void iq_plot_set(void *_plot, short *data, int count, int pos, int pp)
+{
+ plot *p = _plot;
+ if (pthread_mutex_lock(&p->lock)) abort();
+ memcpy(p->p[pp].iqbuf + pos * 2, data, count * 2 * sizeof(short));
+ if (pthread_mutex_unlock(&p->lock)) abort();
+}
+
+void iq_plot_set_sized(void *_plot, short *data, int count, int pp)
+{
+ plot *p = _plot;
+ if (pthread_mutex_lock(&p->lock)) abort();
+ memcpy(p->p[pp].iqbuf, data, count * 2 * sizeof(short));
+ p->p[pp].iq_count = count;
+ if (pthread_mutex_unlock(&p->lock)) abort();
+}
+
+void iq_plot_add_iq_point_loop(void *_plot, short i, short q, int pp)
+{
+ plot *p = _plot;
+ if (pthread_mutex_lock(&p->lock)) abort();
+ p->p[pp].iqbuf[p->p[pp].iq_insert_pos*2] = i;
+ p->p[pp].iqbuf[p->p[pp].iq_insert_pos*2+1] = q;
+ if (p->p[pp].iq_count != p->p[pp].count) p->p[pp].iq_count++;
+ p->p[pp].iq_insert_pos++;
+ if (p->p[pp].iq_insert_pos == p->p[pp].count) p->p[pp].iq_insert_pos = 0;
+ if (pthread_mutex_unlock(&p->lock)) abort();
+}
+
+void iq_plot_add_energy_point_loop(void *_plot, int e, int pp)
+{
+ plot *p = _plot;
+ if (pthread_mutex_lock(&p->lock)) abort();
+ p->p[pp].buf[p->p[pp].iq_insert_pos] = e;
+ if (p->p[pp].iq_count != p->p[pp].count) p->p[pp].iq_count++;
+ p->p[pp].iq_insert_pos++;
+ if (p->p[pp].iq_insert_pos == p->p[pp].count) p->p[pp].iq_insert_pos = 0;
+ if (pthread_mutex_unlock(&p->lock)) abort();
+}
diff --git a/common/utils/T/tracer/textlog.c b/common/utils/T/tracer/textlog.c
new file mode 100644
index 0000000000..f3d0b34831
--- /dev/null
+++ b/common/utils/T/tracer/textlog.c
@@ -0,0 +1,194 @@
+#include
+#include
+#include
+#include
+#include
+#include "database.h"
+#include "event.h"
+#include "handler.h"
+#include "logger/logger.h"
+#include "view/view.h"
+#include "gui/gui.h"
+#include "utils.h"
+#include "../T_defs.h"
+#include "event_selector.h"
+#include "config.h"
+
+#define DEFAULT_REMOTE_IP "127.0.0.1"
+#define DEFAULT_REMOTE_PORT 2021
+
+typedef struct {
+ int socket;
+ int *is_on;
+ int nevents;
+ pthread_mutex_t lock;
+} textlog_data;
+
+void is_on_changed(void *_d)
+{
+ textlog_data *d = _d;
+ char t;
+
+ if (pthread_mutex_lock(&d->lock)) abort();
+
+ if (d->socket == -1) goto no_connection;
+
+ t = 1;
+ if (socket_send(d->socket, &t, 1) == -1 ||
+ socket_send(d->socket, &d->nevents, sizeof(int)) == -1 ||
+ socket_send(d->socket, d->is_on, d->nevents * sizeof(int)) == -1)
+ abort();
+
+no_connection:
+ if (pthread_mutex_unlock(&d->lock)) abort();
+}
+
+void usage(void)
+{
+ printf(
+"options:\n"
+" -d this option is mandatory\n"
+" -on turn log ON for given GROUP or ID\n"
+" -off turn log OFF for given GROUP or ID\n"
+" -ON turn all logs ON\n"
+" -OFF turn all logs OFF\n"
+" note: you may pass several -on/-off/-ON/-OFF,\n"
+" they will be processed in order\n"
+" by default, all is off\n"
+" -ip connect to given IP address (default %s)\n"
+" -p connect to given port (default %d)\n"
+" -x GUI output\n"
+" -debug-gui activate GUI debug logs\n"
+" -no-gui disable GUI entirely\n",
+ DEFAULT_REMOTE_IP,
+ DEFAULT_REMOTE_PORT
+ );
+ exit(1);
+}
+
+static void *gui_thread(void *_g)
+{
+ gui *g = _g;
+ gui_loop(g);
+ return NULL;
+}
+
+int main(int n, char **v)
+{
+ extern int volatile gui_logd;
+ char *database_filename = NULL;
+ void *database;
+ char *ip = DEFAULT_REMOTE_IP;
+ int port = DEFAULT_REMOTE_PORT;
+ char **on_off_name;
+ int *on_off_action;
+ int on_off_n = 0;
+ int *is_on;
+ int number_of_events;
+ int i;
+ event_handler *h;
+ logger *textlog;
+ gui *g;
+ int gui_mode = 0;
+ view *out;
+ int gui_active = 1;
+ textlog_data textlog_data;
+
+ /* write on a socket fails if the other end is closed and we get SIGPIPE */
+ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort();
+
+ on_off_name = malloc(n * sizeof(char *)); if (on_off_name == NULL) abort();
+ on_off_action = malloc(n * sizeof(int)); if (on_off_action == NULL) abort();
+
+ for (i = 1; i < n; i++) {
+ if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
+ if (!strcmp(v[i], "-d"))
+ { if (i > n-2) usage(); database_filename = v[++i]; continue; }
+ if (!strcmp(v[i], "-ip")) { if (i > n-2) usage(); ip = v[++i]; continue; }
+ if (!strcmp(v[i], "-p"))
+ { if (i > n-2) usage(); port = atoi(v[++i]); continue; }
+ if (!strcmp(v[i], "-on")) { if (i > n-2) usage();
+ on_off_name[on_off_n]=v[++i]; on_off_action[on_off_n++]=1; continue; }
+ if (!strcmp(v[i], "-off")) { if (i > n-2) usage();
+ on_off_name[on_off_n]=v[++i]; on_off_action[on_off_n++]=0; continue; }
+ if (!strcmp(v[i], "-ON"))
+ { on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=1; continue; }
+ if (!strcmp(v[i], "-OFF"))
+ { on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=0; continue; }
+ if (!strcmp(v[i], "-x")) { gui_mode = 1; continue; }
+ if (!strcmp(v[i], "-debug-gui")) { gui_logd = 1; continue; }
+ if (!strcmp(v[i], "-no-gui")) { gui_active = 0; continue; }
+ usage();
+ }
+
+ if (gui_active == 0) gui_mode = 0;
+
+ if (database_filename == NULL) {
+ printf("ERROR: provide a database file (-d)\n");
+ exit(1);
+ }
+
+ database = parse_database(database_filename);
+
+ load_config_file(database_filename);
+
+ number_of_events = number_of_ids(database);
+ is_on = calloc(number_of_events, sizeof(int));
+ if (is_on == NULL) abort();
+
+ h = new_handler(database);
+
+ if (gui_active) {
+ g = gui_init();
+ new_thread(gui_thread, g);
+ }
+
+ if (gui_mode) {
+ widget *w, *win;
+// w = new_textlist(g, 600, 20, 0);
+ w = new_textlist(g, 800, 50, BACKGROUND_COLOR);
+ win = new_toplevel_window(g, 800, 50*12, "textlog");
+ widget_add_child(g, win, w, -1);
+ out = new_view_textlist(1000, 10, g, w);
+ //tout = new_view_textlist(7, 4, g, w);
+ } else {
+ out = new_view_stdout();
+ }
+
+ for (i = 0; i < number_of_events; i++) {
+ char *name, *desc;
+ database_get_generic_description(database, i, &name, &desc);
+ textlog = new_textlog(h, database, name, desc);
+// "ENB_UL_CHANNEL_ESTIMATE",
+// "ev: {} eNB_id [eNB_ID] frame [frame] subframe [subframe]");
+ logger_add_view(textlog, out);
+ free(name);
+ free(desc);
+ }
+
+ for (i = 0; i < on_off_n; i++)
+ on_off(database, on_off_name[i], is_on, on_off_action[i]);
+
+ textlog_data.socket = -1;
+ textlog_data.is_on = is_on;
+ textlog_data.nevents = number_of_events;
+ if (pthread_mutex_init(&textlog_data.lock, NULL)) abort();
+ if (gui_active)
+ setup_event_selector(g, database, is_on, is_on_changed, &textlog_data);
+
+ textlog_data.socket = connect_to(ip, port);
+
+ /* send the first message - activate selected traces */
+ is_on_changed(&textlog_data);
+
+ /* read messages */
+ while (1) {
+ char v[T_BUFFER_MAX];
+ event e;
+ e = get_event(textlog_data.socket, v, database);
+ if (e.type == -1) abort();
+ handle_event(h, e);
+ }
+
+ return 0;
+}
diff --git a/common/utils/T/tracer/utils.c b/common/utils/T/tracer/utils.c
new file mode 100644
index 0000000000..3ebc000c67
--- /dev/null
+++ b/common/utils/T/tracer/utils.c
@@ -0,0 +1,198 @@
+#include "utils.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+void new_thread(void *(*f)(void *), void *data)
+{
+ pthread_t t;
+ pthread_attr_t att;
+
+ if (pthread_attr_init(&att))
+ { fprintf(stderr, "pthread_attr_init err\n"); exit(1); }
+ if (pthread_attr_setdetachstate(&att, PTHREAD_CREATE_DETACHED))
+ { fprintf(stderr, "pthread_attr_setdetachstate err\n"); exit(1); }
+ if (pthread_attr_setstacksize(&att, 10000000))
+ { fprintf(stderr, "pthread_attr_setstacksize err\n"); exit(1); }
+ if (pthread_create(&t, &att, f, data))
+ { fprintf(stderr, "pthread_create err\n"); exit(1); }
+ if (pthread_attr_destroy(&att))
+ { fprintf(stderr, "pthread_attr_destroy err\n"); exit(1); }
+}
+
+void sleepms(int ms)
+{
+ struct timespec t;
+
+ t.tv_sec = ms / 1000;
+ t.tv_nsec = (ms % 1000) * 1000000L;
+
+ /* TODO: deal with EINTR */
+ if (nanosleep(&t, NULL)) abort();
+}
+
+/****************************************************************************/
+/* list */
+/****************************************************************************/
+
+list *list_remove_head(list *l)
+{
+ list *ret;
+ if (l == NULL) return NULL;
+ ret = l->next;
+ if (ret != NULL) ret->last = l->last;
+ free(l);
+ return ret;
+}
+
+list *list_append(list *l, void *data)
+{
+ list *new = calloc(1, sizeof(list));
+ if (new == NULL) abort();
+ new->data = data;
+ if (l == NULL) {
+ new->last = new;
+ return new;
+ }
+ l->last->next = new;
+ l->last = new;
+ return l;
+}
+
+/****************************************************************************/
+/* socket */
+/****************************************************************************/
+
+int socket_send(int socket, void *buffer, int size)
+{
+ char *x = buffer;
+ int ret;
+ while (size) {
+ ret = write(socket, x, size);
+ if (ret <= 0) return -1;
+ size -= ret;
+ x += ret;
+ }
+ return 0;
+}
+
+int get_connection(char *addr, int port)
+{
+ struct sockaddr_in a;
+ socklen_t alen;
+ int s, t;
+
+ printf("waiting for connection on %s:%d\n", addr, port);
+
+ s = socket(AF_INET, SOCK_STREAM, 0);
+ if (s == -1) { perror("socket"); exit(1); }
+ t = 1;
+ if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &t, sizeof(int)))
+ { perror("setsockopt"); exit(1); }
+
+ a.sin_family = AF_INET;
+ a.sin_port = htons(port);
+ a.sin_addr.s_addr = inet_addr(addr);
+
+ if (bind(s, (struct sockaddr *)&a, sizeof(a))) { perror("bind"); exit(1); }
+ if (listen(s, 5)) { perror("bind"); exit(1); }
+ alen = sizeof(a);
+ t = accept(s, (struct sockaddr *)&a, &alen);
+ if (t == -1) { perror("accept"); exit(1); }
+ close(s);
+
+ printf("connected\n");
+
+ return t;
+}
+
+int fullread(int fd, void *_buf, int count)
+{
+ char *buf = _buf;
+ int ret = 0;
+ int l;
+ while (count) {
+ l = read(fd, buf, count);
+ if (l <= 0) return -1;
+ count -= l;
+ buf += l;
+ ret += l;
+ }
+ return ret;
+}
+
+int connect_to(char *addr, int port)
+{
+ int s;
+ struct sockaddr_in a;
+
+ printf("connecting to %s:%d\n", addr, port);
+
+again:
+ s = socket(AF_INET, SOCK_STREAM, 0);
+ if (s == -1) { perror("socket"); exit(1); }
+
+ a.sin_family = AF_INET;
+ a.sin_port = htons(port);
+ a.sin_addr.s_addr = inet_addr(addr);
+
+ if (connect(s, (struct sockaddr *)&a, sizeof(a)) == -1) {
+ perror("connect");
+ close(s);
+ printf("trying again in 1s\n");
+ sleep(1);
+ goto again;
+ }
+
+ return s;
+}
+
+/****************************************************************************/
+/* buffer */
+/****************************************************************************/
+
+void PUTC(OBUF *o, char c)
+{
+ if (o->osize == o->omaxsize) {
+ o->omaxsize += 512;
+ o->obuf = realloc(o->obuf, o->omaxsize);
+ if (o->obuf == NULL) abort();
+ }
+ o->obuf[o->osize] = c;
+ o->osize++;
+}
+
+void PUTS(OBUF *o, char *s)
+{
+ while (*s) PUTC(o, *s++);
+}
+
+static int clean(char c)
+{
+ if (!isprint(c)) c = ' ';
+ return c;
+}
+
+void PUTS_CLEAN(OBUF *o, char *s)
+{
+ while (*s) PUTC(o, clean(*s++));
+}
+
+void PUTI(OBUF *o, int i)
+{
+ char s[64];
+ sprintf(s, "%d", i);
+ PUTS(o, s);
+}
+
+void PUTUL(OBUF *o, unsigned long l)
+{
+ char s[128];
+ sprintf(s, "%ld", l);
+ PUTS(o, s);
+}
diff --git a/common/utils/T/tracer/utils.h b/common/utils/T/tracer/utils.h
new file mode 100644
index 0000000000..e15a8d2fba
--- /dev/null
+++ b/common/utils/T/tracer/utils.h
@@ -0,0 +1,46 @@
+#ifndef _UTILS_H_
+#define _UTILS_H_
+
+void new_thread(void *(*f)(void *), void *data);
+void sleepms(int ms);
+
+/****************************************************************************/
+/* list */
+/****************************************************************************/
+
+typedef struct list {
+ struct list *last, *next;
+ void *data;
+} list;
+
+list *list_remove_head(list *l);
+list *list_append(list *l, void *data);
+
+/****************************************************************************/
+/* socket */
+/****************************************************************************/
+
+/* socket_send: return 0 if okay, -1 on error */
+int socket_send(int socket, void *buffer, int size);
+int get_connection(char *addr, int port);
+/* fullread: return length read if okay (that is: 'count'), -1 on error */
+int fullread(int fd, void *_buf, int count);
+int connect_to(char *addr, int port);
+
+/****************************************************************************/
+/* buffer */
+/****************************************************************************/
+
+typedef struct {
+ int osize;
+ int omaxsize;
+ char *obuf;
+} OBUF;
+
+void PUTC(OBUF *o, char c);
+void PUTS(OBUF *o, char *s);
+void PUTS_CLEAN(OBUF *o, char *s);
+void PUTI(OBUF *o, int i);
+void PUTUL(OBUF *o, unsigned long i);
+
+#endif /* _UTILS_H_ */
diff --git a/common/utils/T/tracer/vcd.c b/common/utils/T/tracer/vcd.c
new file mode 100644
index 0000000000..45aa4e26e2
--- /dev/null
+++ b/common/utils/T/tracer/vcd.c
@@ -0,0 +1,204 @@
+#include
+#include
+#include
+#include
+#include
+#include "database.h"
+#include "event.h"
+#include "handler.h"
+#include "logger/logger.h"
+#include "view/view.h"
+#include "gui/gui.h"
+#include "utils.h"
+#include "../T_defs.h"
+#include "event_selector.h"
+#include "config.h"
+
+typedef struct {
+ int socket;
+ int *is_on;
+ int nevents;
+ pthread_mutex_t lock;
+} vcd_data;
+
+void is_on_changed(void *_d)
+{
+ vcd_data *d = _d;
+ char t;
+
+ if (pthread_mutex_lock(&d->lock)) abort();
+
+ if (d->socket == -1) goto no_connection;
+
+ t = 1;
+ if (socket_send(d->socket, &t, 1) == -1 ||
+ socket_send(d->socket, &d->nevents, sizeof(int)) == -1 ||
+ socket_send(d->socket, d->is_on, d->nevents * sizeof(int)) == -1)
+ abort();
+
+no_connection:
+ if (pthread_mutex_unlock(&d->lock)) abort();
+}
+
+#define DEFAULT_REMOTE_IP "127.0.0.1"
+#define DEFAULT_REMOTE_PORT 2021
+
+void usage(void)
+{
+ printf(
+"options:\n"
+" -d this option is mandatory\n"
+" -on turn log ON for given GROUP or ID\n"
+" -off turn log OFF for given GROUP or ID\n"
+" -ON turn all logs ON\n"
+" -OFF turn all logs OFF\n"
+" note: you may pass several -on/-off/-ON/-OFF,\n"
+" they will be processed in order\n"
+" by default, all is off\n"
+" -ip connect to given IP address (default %s)\n"
+" -p connect to given port (default %d)\n"
+" -debug-gui activate GUI debug logs\n",
+ DEFAULT_REMOTE_IP,
+ DEFAULT_REMOTE_PORT
+ );
+ exit(1);
+}
+
+static void *gui_thread(void *_g)
+{
+ gui *g = _g;
+ gui_loop(g);
+ return NULL;
+}
+
+static void vcd_main_gui(gui *g, event_handler *h, void *database)
+{
+ int i, j;
+ int n;
+ int nb_functions = 0;
+ char **ids;
+ widget *win;
+ widget *container;
+ widget *w;
+ view *timeview;
+ view *subview;
+ logger *timelog;
+
+ /* get number of vcd functions - look for all events VCD_FUNCTION_xxx */
+ n = database_get_ids(database, &ids);
+ for (i = 0; i < n; i++) {
+ if (strncmp(ids[i], "VCD_FUNCTION_", 13) != 0) continue;
+ nb_functions++;
+ }
+
+ win = new_toplevel_window(g, 1000, 5 * nb_functions, "VCD tracer");
+ container = new_container(g, VERTICAL);
+ widget_add_child(g, win, container, -1);
+
+ w = new_timeline(g, 1000, nb_functions, 5);
+ widget_add_child(g, container, w, -1);
+ for (i = 0; i < nb_functions; i++)
+ timeline_set_subline_background_color(g, w, i,
+ new_color(g, i & 1 ? "#ddd" : "#eee"));
+ timeview = new_view_time(3600, 10, g, w);
+ i = 0;
+ for (j = 0; j < n; j++) {
+ if (strncmp(ids[j], "VCD_FUNCTION_", 13) != 0) continue;
+ timelog = new_timelog(h, database, ids[j]);
+ subview = new_subview_time(timeview, i, FOREGROUND_COLOR, 3600*1000);
+ logger_add_view(timelog, subview);
+ i++;
+ }
+
+ free(ids);
+}
+
+int main(int n, char **v)
+{
+ extern int volatile gui_logd;
+ char *database_filename = NULL;
+ void *database;
+ char *ip = DEFAULT_REMOTE_IP;
+ int port = DEFAULT_REMOTE_PORT;
+ char **on_off_name;
+ int *on_off_action;
+ int on_off_n = 0;
+ int *is_on;
+ int number_of_events;
+ int i;
+ event_handler *h;
+ gui *g;
+ vcd_data vcd_data;
+
+ /* write on a socket fails if the other end is closed and we get SIGPIPE */
+ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort();
+
+ on_off_name = malloc(n * sizeof(char *)); if (on_off_name == NULL) abort();
+ on_off_action = malloc(n * sizeof(int)); if (on_off_action == NULL) abort();
+
+ for (i = 1; i < n; i++) {
+ if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
+ if (!strcmp(v[i], "-d"))
+ { if (i > n-2) usage(); database_filename = v[++i]; continue; }
+ if (!strcmp(v[i], "-ip")) { if (i > n-2) usage(); ip = v[++i]; continue; }
+ if (!strcmp(v[i], "-p"))
+ { if (i > n-2) usage(); port = atoi(v[++i]); continue; }
+ if (!strcmp(v[i], "-on")) { if (i > n-2) usage();
+ on_off_name[on_off_n]=v[++i]; on_off_action[on_off_n++]=1; continue; }
+ if (!strcmp(v[i], "-off")) { if (i > n-2) usage();
+ on_off_name[on_off_n]=v[++i]; on_off_action[on_off_n++]=0; continue; }
+ if (!strcmp(v[i], "-ON"))
+ { on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=1; continue; }
+ if (!strcmp(v[i], "-OFF"))
+ { on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=0; continue; }
+ if (!strcmp(v[i], "-debug-gui")) { gui_logd = 1; continue; }
+ usage();
+ }
+
+ if (database_filename == NULL) {
+ printf("ERROR: provide a database file (-d)\n");
+ exit(1);
+ }
+
+ database = parse_database(database_filename);
+
+ load_config_file(database_filename);
+
+ number_of_events = number_of_ids(database);
+ is_on = calloc(number_of_events, sizeof(int));
+ if (is_on == NULL) abort();
+
+ h = new_handler(database);
+
+ g = gui_init();
+ new_thread(gui_thread, g);
+
+ vcd_main_gui(g, h, database);
+
+ on_off(database, "VCD_FUNCTION", is_on, 1);
+
+ for (i = 0; i < on_off_n; i++)
+ on_off(database, on_off_name[i], is_on, on_off_action[i]);
+
+ vcd_data.socket = -1;
+ vcd_data.is_on = is_on;
+ vcd_data.nevents = number_of_events;
+ if (pthread_mutex_init(&vcd_data.lock, NULL)) abort();
+ setup_event_selector(g, database, is_on, is_on_changed, &vcd_data);
+
+ vcd_data.socket = connect_to(ip, port);
+
+ /* send the first message - activate selected traces */
+ is_on_changed(&vcd_data);
+
+ /* read messages */
+ while (1) {
+ char v[T_BUFFER_MAX];
+ event e;
+ e = get_event(vcd_data.socket, v, database);
+ if (e.type == -1) abort();
+ handle_event(h, e);
+ }
+
+ return 0;
+}
diff --git a/common/utils/T/tracer/view/Makefile b/common/utils/T/tracer/view/Makefile
new file mode 100644
index 0000000000..32b267ec24
--- /dev/null
+++ b/common/utils/T/tracer/view/Makefile
@@ -0,0 +1,13 @@
+CC=gcc
+CFLAGS=-Wall -g -pthread -I.. -I../logger
+
+OBJS=stdout.o textlist.o xy.o tti.o time.o ticktime.o
+
+view.a: $(OBJS)
+ ar cr view.a $(OBJS)
+
+%.o: %.c
+ $(CC) $(CFLAGS) -o $@ -c $<
+
+clean:
+ rm -f *.a *.o
diff --git a/common/utils/T/tracer/view/stdout.c b/common/utils/T/tracer/view/stdout.c
new file mode 100644
index 0000000000..93223e59d8
--- /dev/null
+++ b/common/utils/T/tracer/view/stdout.c
@@ -0,0 +1,35 @@
+#include "view.h"
+#include
+#include
+#include
+
+struct stdout {
+ view common;
+ pthread_mutex_t lock;
+};
+
+static void clear(view *this)
+{
+ /* do nothing */
+}
+
+static void append(view *_this, char *s)
+{
+ struct stdout *this = (struct stdout *)_this;
+ if (pthread_mutex_lock(&this->lock)) abort();
+ printf("%s\n", s);
+ if (pthread_mutex_unlock(&this->lock)) abort();
+}
+
+view *new_view_stdout(void)
+{
+ struct stdout *ret = calloc(1, sizeof(struct stdout));
+ if (ret == NULL) abort();
+
+ ret->common.clear = clear;
+ ret->common.append = (void (*)(view *, ...))append;
+
+ if (pthread_mutex_init(&ret->lock, NULL)) abort();
+
+ return (view *)ret;
+}
diff --git a/common/utils/T/tracer/view/textlist.c b/common/utils/T/tracer/view/textlist.c
new file mode 100644
index 0000000000..5227900e4e
--- /dev/null
+++ b/common/utils/T/tracer/view/textlist.c
@@ -0,0 +1,154 @@
+#include "view.h"
+#include "../utils.h"
+#include "gui/gui.h"
+#include
+#include
+#include
+
+struct textlist {
+ view common;
+ gui *g;
+ widget *w;
+ int maxsize;
+ int cursize;
+ float refresh_rate;
+ int autoscroll;
+ pthread_mutex_t lock;
+ list * volatile to_append;
+};
+
+static void _append(struct textlist *this, char *s, int *deleted)
+{
+ if (this->cursize == this->maxsize) {
+ textlist_del_silent(this->g, this->w, 0);
+ this->cursize--;
+ (*deleted)++;
+ }
+ textlist_add_silent(this->g, this->w, s, -1, FOREGROUND_COLOR);
+ this->cursize++;
+}
+
+static void *textlist_thread(void *_this)
+{
+ struct textlist *this = _this;
+ int dirty;
+ int deleted;
+ int visible_lines, start_line, number_of_lines;
+
+ while (1) {
+ if (pthread_mutex_lock(&this->lock)) abort();
+ dirty = this->to_append == NULL ? 0 : 1;
+ deleted = 0;
+ while (this->to_append != NULL) {
+ char *s = this->to_append->data;
+ this->to_append = list_remove_head(this->to_append);
+ _append(this, s, &deleted);
+ free(s);
+ }
+ if (dirty) {
+ textlist_state(this->g, this->w, &visible_lines, &start_line,
+ &number_of_lines);
+ if (this->autoscroll)
+ start_line = number_of_lines - visible_lines;
+ else
+ start_line -= deleted;
+ if (start_line < 0) start_line = 0;
+ textlist_set_start_line(this->g, this->w, start_line);
+ /* this call is not necessary, but if things change in textlist... */
+ widget_dirty(this->g, this->w);
+ }
+ if (pthread_mutex_unlock(&this->lock)) abort();
+ sleepms(1000/this->refresh_rate);
+ }
+
+ return 0;
+}
+
+static void clear(view *this)
+{
+ /* TODO */
+}
+
+static void append(view *_this, char *s)
+{
+ struct textlist *this = (struct textlist *)_this;
+ char *dup;
+
+ if (pthread_mutex_lock(&this->lock)) abort();
+ dup = strdup(s); if (dup == NULL) abort();
+ this->to_append = list_append(this->to_append, dup);
+ if (pthread_mutex_unlock(&this->lock)) abort();
+}
+
+static void scroll(void *private, gui *g,
+ char *notification, widget *w, void *notification_data)
+{
+ struct textlist *this = private;
+ int visible_lines;
+ int start_line;
+ int number_of_lines;
+ int new_line;
+ int inc;
+
+ if (pthread_mutex_lock(&this->lock)) abort();
+
+ textlist_state(g, w, &visible_lines, &start_line, &number_of_lines);
+ inc = 10;
+ if (inc > visible_lines - 2) inc = visible_lines - 2;
+ if (inc < 1) inc = 1;
+ if (!strcmp(notification, "scrollup")) inc = -inc;
+
+ new_line = start_line + inc;
+ if (new_line > number_of_lines - visible_lines)
+ new_line = number_of_lines - visible_lines;
+ if (new_line < 0) new_line = 0;
+
+ textlist_set_start_line(g, w, new_line);
+
+ if (new_line + visible_lines < number_of_lines)
+ this->autoscroll = 0;
+ else
+ this->autoscroll = 1;
+
+ if (pthread_mutex_unlock(&this->lock)) abort();
+}
+
+static void click(void *private, gui *g,
+ char *notification, widget *w, void *notification_data)
+{
+ struct textlist *this = private;
+ int *d = notification_data;
+ int button = d[1];
+
+ if (pthread_mutex_lock(&this->lock)) abort();
+
+ if (button == 1) this->autoscroll = 1 - this->autoscroll;
+
+ if (pthread_mutex_unlock(&this->lock)) abort();
+}
+
+view *new_view_textlist(int maxsize, float refresh_rate, gui *g, widget *w)
+{
+ struct textlist *ret = calloc(1, sizeof(struct textlist));
+ if (ret == NULL) abort();
+
+ ret->common.clear = clear;
+ ret->common.append = (void (*)(view *, ...))append;
+
+ ret->cursize = 0;
+ ret->maxsize = maxsize;
+ ret->refresh_rate = refresh_rate;
+ ret->g = g;
+ ret->w = w;
+ ret->autoscroll = 1;
+
+ if (pthread_mutex_init(&ret->lock, NULL)) abort();
+
+ register_notifier(g, "scrollup", w, scroll, ret);
+ register_notifier(g, "scrolldown", w, scroll, ret);
+ register_notifier(g, "click", w, click, ret);
+
+ new_thread(textlist_thread, ret);
+
+ return (view *)ret;
+}
diff --git a/common/utils/T/tracer/view/ticktime.c b/common/utils/T/tracer/view/ticktime.c
new file mode 100644
index 0000000000..1e1c7352a0
--- /dev/null
+++ b/common/utils/T/tracer/view/ticktime.c
@@ -0,0 +1,411 @@
+#include "view.h"
+#include "../utils.h"
+#include "logger.h"
+#include
+#include
+#include
+#include
+
+/* TODO: some code is identical/almost identical to time.c, merge/factorize */
+
+/****************************************************************************/
+/* tick timeview */
+/****************************************************************************/
+
+struct plot {
+ struct timespec *tick;
+ int ticksize;
+ int tickmaxsize;
+ int tickstart;
+ int line;
+ int color;
+};
+
+struct ticktime {
+ view common;
+ gui *g;
+ widget *w;
+ float refresh_rate;
+ pthread_mutex_t lock;
+ struct plot *p;
+ int psize;
+ double pixel_length; /* unit: nanosecond (maximum 1 hour/pixel) */
+ struct timespec latest_time;
+ struct timespec start_time;
+ int autoscroll;
+ struct timespec tick_latest_time;
+ int tick_latest_frame;
+ int tick_latest_subframe;
+ void *clock_ticktime; /* data for the clock tick, see below */
+};
+
+/* TODO: put that function somewhere else (utils.c) */
+static struct timespec time_add(struct timespec a, struct timespec b)
+{
+ struct timespec ret;
+ ret.tv_sec = a.tv_sec + b.tv_sec;
+ ret.tv_nsec = a.tv_nsec + b.tv_nsec;
+ if (ret.tv_nsec > 1000000000) {
+ ret.tv_sec++;
+ ret.tv_nsec -= 1000000000;
+ }
+ return ret;
+}
+
+/* TODO: put that function somewhere else (utils.c) */
+static struct timespec time_sub(struct timespec a, struct timespec b)
+{
+ struct timespec ret;
+ if (a.tv_nsec < b.tv_nsec) {
+ ret.tv_nsec = (int64_t)a.tv_nsec - (int64_t)b.tv_nsec + 1000000000;
+ ret.tv_sec = a.tv_sec - b.tv_sec - 1;
+ } else {
+ ret.tv_nsec = a.tv_nsec - b.tv_nsec;
+ ret.tv_sec = a.tv_sec - b.tv_sec;
+ }
+ return ret;
+}
+
+/* TODO: put that function somewhere else (utils.c) */
+static struct timespec nano_to_time(int64_t n)
+{
+ struct timespec ret;
+ ret.tv_sec = n / 1000000000;
+ ret.tv_nsec = n % 1000000000;
+ return ret;
+}
+
+/* TODO: put that function somewhere else (utils.c) */
+static int time_cmp(struct timespec a, struct timespec b)
+{
+ if (a.tv_sec < b.tv_sec) return -1;
+ if (a.tv_sec > b.tv_sec) return 1;
+ if (a.tv_nsec < b.tv_nsec) return -1;
+ if (a.tv_nsec > b.tv_nsec) return 1;
+ return 0;
+}
+
+static int interval_empty(struct ticktime *this, int sub,
+ struct timespec start, struct timespec end)
+{
+ int a, b, mid;
+ int i;
+
+ if (this->p[sub].ticksize == 0) return 1;
+
+ /* look for a tick larger than start and smaller than end */
+ a = 0;
+ b = this->p[sub].ticksize - 1;
+ while (b >= a) {
+ mid = (a+b) / 2;
+ i = (this->p[sub].tickstart + mid) % this->p[sub].ticksize;
+ if (time_cmp(this->p[sub].tick[i], start) < 0) a = mid + 1;
+ else if (time_cmp(this->p[sub].tick[i], end) > 0) b = mid - 1;
+ else return 0;
+ }
+ return 1;
+}
+
+static void *ticktime_thread(void *_this)
+{
+ struct ticktime *this = _this;
+ int width;
+ int l;
+ int i;
+ struct timespec tstart;
+ struct timespec tnext;
+ struct plot *p;
+ int64_t pixel_length;
+
+ while (1) {
+ if (pthread_mutex_lock(&this->lock)) abort();
+
+ timeline_get_width(this->g, this->w, &width);
+ timeline_clear_silent(this->g, this->w);
+
+ /* TODO: optimize? */
+
+ /* use rounded pixel_length */
+ pixel_length = this->pixel_length;
+
+ if (this->autoscroll) {
+ tnext = time_add(this->latest_time,
+ (struct timespec){tv_sec:0,tv_nsec:1});
+ tstart = time_sub(tnext, nano_to_time(pixel_length * width));
+ this->start_time = tstart;
+ } else {
+ tstart = this->start_time;
+ tnext = time_add(tstart, nano_to_time(pixel_length * width));
+ }
+
+ for (l = 0; l < this->psize; l++) {
+ for (i = 0; i < width; i++) {
+ struct timespec tick_start, tick_end;
+ tick_start = time_add(tstart, nano_to_time(pixel_length * i));
+ tick_end = time_add(tick_start, nano_to_time(pixel_length-1));
+ if (interval_empty(this, l, tick_start, tick_end))
+ continue;
+ p = &this->p[l];
+ /* TODO: only one call */
+ int x[3] = {i==0?i:i-1, i, i==width-1?i:i+1};
+ timeline_add_points_silent(this->g, this->w, p->line, p->color, x, 3);
+ }
+ }
+
+ widget_dirty(this->g, this->w);
+
+ if (pthread_mutex_unlock(&this->lock)) abort();
+ sleepms(1000 / this->refresh_rate);
+ }
+
+ return 0;
+}
+
+static void scroll(void *private, gui *g,
+ char *notification, widget *w, void *notification_data)
+{
+ struct ticktime *this = private;
+ int *d = notification_data;
+ int x = d[0];
+ int key_modifiers = d[2];
+ double mul = 1.2;
+ double pixel_length;
+ int64_t old_px_len_rounded;
+ struct timespec t;
+ int scroll_px;
+ int width;
+
+ if (pthread_mutex_lock(&this->lock)) abort();
+
+ old_px_len_rounded = this->pixel_length;
+
+ /* scroll if control+wheel, zoom otherwise */
+
+ if (key_modifiers & KEY_CONTROL) {
+ timeline_get_width(this->g, this->w, &width);
+ if (width < 2) width = 2;
+ scroll_px = 100;
+ if (scroll_px > width - 1) scroll_px = width - 1;
+ if (!strcmp(notification, "scrolldown"))
+ this->start_time = time_add(this->start_time,
+ nano_to_time(scroll_px * old_px_len_rounded));
+ else
+ this->start_time = time_sub(this->start_time,
+ nano_to_time(scroll_px * old_px_len_rounded));
+ goto end;
+ }
+
+ if (!strcmp(notification, "scrollup")) mul = 1 / mul;
+
+again:
+ pixel_length = this->pixel_length * mul;
+ if (pixel_length < 1) pixel_length = 1;
+ if (pixel_length > (double)3600 * 1000000000)
+ pixel_length = (double)3600 * 1000000000;
+
+ this->pixel_length = pixel_length;
+
+ /* due to rounding, we may need to zoom by more than 1.2 with
+ * very close lookup, otherwise the user zooming command won't
+ * be visible (say length is 2.7, zoom in, new length is 2.25,
+ * and rounding is 2, same value, no change, no feedback to user => bad)
+ * TODO: make all this cleaner
+ */
+ if (pixel_length != 1 && pixel_length != (double)3600 * 1000000000 &&
+ (int64_t)pixel_length == old_px_len_rounded)
+ goto again;
+
+ t = time_add(this->start_time, nano_to_time(x * old_px_len_rounded));
+ this->start_time = time_sub(t, nano_to_time(x * (int64_t)pixel_length));
+
+end:
+ if (pthread_mutex_unlock(&this->lock)) abort();
+}
+
+static void click(void *private, gui *g,
+ char *notification, widget *w, void *notification_data)
+{
+ struct ticktime *this = private;
+ int *d = notification_data;
+ int button = *d;
+
+ if (button == 3) this->autoscroll = 0;
+ if (button == 1) this->autoscroll = 1;
+}
+
+view *new_view_ticktime(float refresh_rate, gui *g, widget *w)
+{
+ struct ticktime *ret = calloc(1, sizeof(struct ticktime));
+ if (ret == NULL) abort();
+
+ ret->refresh_rate = refresh_rate;
+ ret->g = g;
+ ret->w = w;
+
+ ret->p = NULL;
+ ret->psize = 0;
+
+ ret->autoscroll = 1;
+
+ ret->tick_latest_time.tv_sec = 1;
+
+ /* default pixel length: 10ms */
+ ret->pixel_length = 10 * 1000000;
+
+ register_notifier(g, "scrollup", w, scroll, ret);
+ register_notifier(g, "scrolldown", w, scroll, ret);
+ register_notifier(g, "click", w, click, ret);
+
+ if (pthread_mutex_init(&ret->lock, NULL)) abort();
+
+ new_thread(ticktime_thread, ret);
+
+ return (view *)ret;
+}
+
+/****************************************************************************/
+/* subticktimeview */
+/****************************************************************************/
+
+struct subticktime {
+ view common;
+ struct ticktime *parent;
+ int line;
+ int color;
+ int subview;
+};
+
+static void append(view *_this, struct timespec t, int frame, int subframe)
+{
+ struct subticktime *this = (struct subticktime *)_this;
+ struct ticktime *ticktime = this->parent;
+ struct plot *p = &ticktime->p[this->subview];
+ int i;
+ struct timespec swap;
+ int64_t diff;
+
+ if (pthread_mutex_lock(&ticktime->lock)) abort();
+
+ /* get time with respect to latest known tick time */
+ diff = (frame*10 + subframe) -
+ (ticktime->tick_latest_frame*10 + ticktime->tick_latest_subframe);
+ if (diff > 1024*10/2) diff -= 1024*10;
+ else if (diff < -1024*10/2) diff += 1024*10;
+ if (diff < 0)
+ t = time_sub(ticktime->tick_latest_time, nano_to_time(-diff * 1000000));
+ else
+ t = time_add(ticktime->tick_latest_time, nano_to_time(diff * 1000000));
+
+ if (p->ticksize < p->tickmaxsize) {
+ p->tick[p->ticksize] = t;
+ p->ticksize++;
+ } else {
+ p->tick[p->tickstart] = t;
+ p->tickstart = (p->tickstart + 1) % p->ticksize;
+ }
+
+ /* due to adjustment of the time, array may not be ordered anymore */
+ for (i = p->ticksize-2; i >= 0; i--) {
+ int prev = (p->tickstart + i) % p->ticksize;
+ int cur = (prev + 1) % p->ticksize;
+ if (time_cmp(p->tick[prev], p->tick[cur]) <= 0) break;
+ swap = p->tick[prev];
+ p->tick[prev] = p->tick[cur];
+ p->tick[cur] = swap;
+ }
+
+ if (time_cmp(ticktime->latest_time, t) < 0)
+ ticktime->latest_time = t;
+
+ if (pthread_mutex_unlock(&ticktime->lock)) abort();
+}
+
+view *new_subview_ticktime(view *_time, int line, int color, int size)
+{
+ struct ticktime *ticktime = (struct ticktime *)_time;
+ struct subticktime *ret = calloc(1, sizeof(struct subticktime));
+ if (ret == NULL) abort();
+
+ ret->common.append = (void (*)(view *, ...))append;
+
+ if (pthread_mutex_lock(&ticktime->lock)) abort();
+
+ ret->parent = ticktime;
+ ret->line = line;
+ ret->color = color;
+ ret->subview = ticktime->psize;
+
+ ticktime->p = realloc(ticktime->p,
+ (ticktime->psize + 1) * sizeof(struct plot));
+ if (ticktime->p == NULL) abort();
+ ticktime->p[ticktime->psize].tick = calloc(size, sizeof(struct timespec));
+ if (ticktime->p[ticktime->psize].tick == NULL) abort();
+ ticktime->p[ticktime->psize].ticksize = 0;
+ ticktime->p[ticktime->psize].tickmaxsize = size;
+ ticktime->p[ticktime->psize].tickstart = 0;
+ ticktime->p[ticktime->psize].line = line;
+ ticktime->p[ticktime->psize].color = color;
+
+ ticktime->psize++;
+
+ if (pthread_mutex_unlock(&ticktime->lock)) abort();
+
+ return (view *)ret;
+}
+
+/****************************************************************************/
+/* clock tick */
+/****************************************************************************/
+
+struct clock_ticktime {
+ view common;
+ struct ticktime *parent;
+};
+
+static void clock_append(view *_this, struct timespec t,
+ int frame, int subframe)
+{
+ struct clock_ticktime *this = (struct clock_ticktime *)_this;
+ struct ticktime *tt = this->parent;
+ int64_t diff;
+
+ if (subframe == 10) { subframe = 0; frame = (frame + 1) % 1024; }
+
+ if (pthread_mutex_lock(&tt->lock)) abort();
+
+ /* get time relative to latest known tick time */
+ /* In normal conditions diff is 1 but if the user pauses reception of events
+ * it may be anything. Let's take only positive values.
+ */
+ diff = (frame*10 + subframe) -
+ (tt->tick_latest_frame*10 + tt->tick_latest_subframe);
+ if (diff < 0) diff += 1024*10;
+ tt->tick_latest_time = time_add(tt->tick_latest_time,
+ nano_to_time(diff * 1000000));
+ tt->tick_latest_frame = frame;
+ tt->tick_latest_subframe = subframe;
+
+ if (time_cmp(tt->latest_time, tt->tick_latest_time) < 0)
+ tt->latest_time = tt->tick_latest_time;
+
+ if (pthread_mutex_unlock(&tt->lock)) abort();
+}
+
+void ticktime_set_tick(view *_ticktime, void *logger)
+{
+ struct ticktime *ticktime = (struct ticktime *)_ticktime;
+ struct clock_ticktime *n;
+
+ if (pthread_mutex_lock(&ticktime->lock)) abort();
+
+ free(ticktime->clock_ticktime);
+ n = ticktime->clock_ticktime = calloc(1, sizeof(struct clock_ticktime));
+ if (n == NULL) abort();
+
+ n->common.append = (void (*)(view *, ...))clock_append;
+ n->parent = ticktime;
+
+ logger_add_view(logger, (view *)n);
+
+ if (pthread_mutex_unlock(&ticktime->lock)) abort();
+}
diff --git a/common/utils/T/tracer/view/time.c b/common/utils/T/tracer/view/time.c
new file mode 100644
index 0000000000..287e7b1c7b
--- /dev/null
+++ b/common/utils/T/tracer/view/time.c
@@ -0,0 +1,322 @@
+#include "view.h"
+#include "../utils.h"
+#include
+#include
+#include
+#include
+
+/****************************************************************************/
+/* timeview */
+/****************************************************************************/
+
+struct plot {
+ struct timespec *tick;
+ int ticksize;
+ int tickmaxsize;
+ int tickstart;
+ int line;
+ int color;
+};
+
+struct time {
+ view common;
+ gui *g;
+ widget *w;
+ float refresh_rate;
+ pthread_mutex_t lock;
+ struct plot *p;
+ int psize;
+ double pixel_length; /* unit: nanosecond (maximum 1 hour/pixel) */
+ struct timespec latest_time;
+ struct timespec start_time;
+ int autoscroll;
+};
+
+/* TODO: put that function somewhere else (utils.c) */
+static struct timespec time_add(struct timespec a, struct timespec b)
+{
+ struct timespec ret;
+ ret.tv_sec = a.tv_sec + b.tv_sec;
+ ret.tv_nsec = a.tv_nsec + b.tv_nsec;
+ if (ret.tv_nsec > 1000000000) {
+ ret.tv_sec++;
+ ret.tv_nsec -= 1000000000;
+ }
+ return ret;
+}
+
+/* TODO: put that function somewhere else (utils.c) */
+static struct timespec time_sub(struct timespec a, struct timespec b)
+{
+ struct timespec ret;
+ if (a.tv_nsec < b.tv_nsec) {
+ ret.tv_nsec = (int64_t)a.tv_nsec - (int64_t)b.tv_nsec + 1000000000;
+ ret.tv_sec = a.tv_sec - b.tv_sec - 1;
+ } else {
+ ret.tv_nsec = a.tv_nsec - b.tv_nsec;
+ ret.tv_sec = a.tv_sec - b.tv_sec;
+ }
+ return ret;
+}
+
+/* TODO: put that function somewhere else (utils.c) */
+static struct timespec nano_to_time(int64_t n)
+{
+ struct timespec ret;
+ ret.tv_sec = n / 1000000000;
+ ret.tv_nsec = n % 1000000000;
+ return ret;
+}
+
+/* TODO: put that function somewhere else (utils.c) */
+static int time_cmp(struct timespec a, struct timespec b)
+{
+ if (a.tv_sec < b.tv_sec) return -1;
+ if (a.tv_sec > b.tv_sec) return 1;
+ if (a.tv_nsec < b.tv_nsec) return -1;
+ if (a.tv_nsec > b.tv_nsec) return 1;
+ return 0;
+}
+
+static int interval_empty(struct time *this, int sub,
+ struct timespec start, struct timespec end)
+{
+ int a, b, mid;
+ int i;
+
+ if (this->p[sub].ticksize == 0) return 1;
+
+ /* look for a tick larger than start and smaller than end */
+ a = 0;
+ b = this->p[sub].ticksize - 1;
+ while (b >= a) {
+ mid = (a+b) / 2;
+ i = (this->p[sub].tickstart + mid) % this->p[sub].ticksize;
+ if (time_cmp(this->p[sub].tick[i], start) < 0) a = mid + 1;
+ else if (time_cmp(this->p[sub].tick[i], end) > 0) b = mid - 1;
+ else return 0;
+ }
+ return 1;
+}
+
+static void *time_thread(void *_this)
+{
+ struct time *this = _this;
+ int width;
+ int l;
+ int i;
+ struct timespec tstart;
+ struct timespec tnext;
+ struct plot *p;
+ int64_t pixel_length;
+
+ while (1) {
+ if (pthread_mutex_lock(&this->lock)) abort();
+
+ timeline_get_width(this->g, this->w, &width);
+ timeline_clear_silent(this->g, this->w);
+
+ /* TODO: optimize? */
+
+ /* use rounded pixel_length */
+ pixel_length = this->pixel_length;
+
+ if (this->autoscroll) {
+ tnext = time_add(this->latest_time,
+ (struct timespec){tv_sec:0,tv_nsec:1});
+ tstart = time_sub(tnext, nano_to_time(pixel_length * width));
+ this->start_time = tstart;
+ } else {
+ tstart = this->start_time;
+ tnext = time_add(tstart, nano_to_time(pixel_length * width));
+ }
+
+ for (l = 0; l < this->psize; l++) {
+ for (i = 0; i < width; i++) {
+ struct timespec tick_start, tick_end;
+ tick_start = time_add(tstart, nano_to_time(pixel_length * i));
+ tick_end = time_add(tick_start, nano_to_time(pixel_length-1));
+ if (interval_empty(this, l, tick_start, tick_end))
+ continue;
+ p = &this->p[l];
+ /* TODO: only one call */
+ timeline_add_points_silent(this->g, this->w, p->line, p->color, &i, 1);
+ }
+ }
+
+ widget_dirty(this->g, this->w);
+
+ if (pthread_mutex_unlock(&this->lock)) abort();
+ sleepms(1000 / this->refresh_rate);
+ }
+
+ return 0;
+}
+
+static void scroll(void *private, gui *g,
+ char *notification, widget *w, void *notification_data)
+{
+ struct time *this = private;
+ int *d = notification_data;
+ int x = d[0];
+ int key_modifiers = d[2];
+ double mul = 1.2;
+ double pixel_length;
+ int64_t old_px_len_rounded;
+ struct timespec t;
+ int scroll_px;
+ int width;
+
+ if (pthread_mutex_lock(&this->lock)) abort();
+
+ old_px_len_rounded = this->pixel_length;
+
+ /* scroll if control+wheel, zoom otherwise */
+
+ if (key_modifiers & KEY_CONTROL) {
+ timeline_get_width(this->g, this->w, &width);
+ if (width < 2) width = 2;
+ scroll_px = 100;
+ if (scroll_px > width - 1) scroll_px = width - 1;
+ if (!strcmp(notification, "scrolldown"))
+ this->start_time = time_add(this->start_time,
+ nano_to_time(scroll_px * old_px_len_rounded));
+ else
+ this->start_time = time_sub(this->start_time,
+ nano_to_time(scroll_px * old_px_len_rounded));
+ goto end;
+ }
+
+ if (!strcmp(notification, "scrollup")) mul = 1 / mul;
+
+again:
+ pixel_length = this->pixel_length * mul;
+ if (pixel_length < 1) pixel_length = 1;
+ if (pixel_length > (double)3600 * 1000000000)
+ pixel_length = (double)3600 * 1000000000;
+
+ this->pixel_length = pixel_length;
+
+ /* due to rounding, we may need to zoom by more than 1.2 with
+ * very close lookup, otherwise the user zooming command won't
+ * be visible (say length is 2.7, zoom in, new length is 2.25,
+ * and rounding is 2, same value, no change, no feedback to user => bad)
+ * TODO: make all this cleaner
+ */
+ if (pixel_length != 1 && pixel_length != (double)3600 * 1000000000 &&
+ (int64_t)pixel_length == old_px_len_rounded)
+ goto again;
+
+ t = time_add(this->start_time, nano_to_time(x * old_px_len_rounded));
+ this->start_time = time_sub(t, nano_to_time(x * (int64_t)pixel_length));
+
+end:
+ if (pthread_mutex_unlock(&this->lock)) abort();
+}
+
+static void click(void *private, gui *g,
+ char *notification, widget *w, void *notification_data)
+{
+ struct time *this = private;
+ int *d = notification_data;
+ int button = *d;
+
+ if (button == 3) this->autoscroll = 0;
+ if (button == 1) this->autoscroll = 1;
+}
+
+view *new_view_time(int number_of_seconds, float refresh_rate,
+ gui *g, widget *w)
+{
+ struct time *ret = calloc(1, sizeof(struct time));
+ if (ret == NULL) abort();
+
+ ret->refresh_rate = refresh_rate;
+ ret->g = g;
+ ret->w = w;
+
+ ret->p = NULL;
+ ret->psize = 0;
+
+ ret->autoscroll = 1;
+
+ /* default pixel length: 10ms */
+ ret->pixel_length = 10 * 1000000;
+
+ register_notifier(g, "scrollup", w, scroll, ret);
+ register_notifier(g, "scrolldown", w, scroll, ret);
+ register_notifier(g, "click", w, click, ret);
+
+ if (pthread_mutex_init(&ret->lock, NULL)) abort();
+
+ new_thread(time_thread, ret);
+
+ return (view *)ret;
+}
+
+/****************************************************************************/
+/* subtimeview */
+/****************************************************************************/
+
+struct subtime {
+ view common;
+ struct time *parent;
+ int line;
+ int color;
+ int subview;
+};
+
+static void append(view *_this, struct timespec t)
+{
+ struct subtime *this = (struct subtime *)_this;
+ struct time *time = this->parent;
+ struct plot *p = &time->p[this->subview];
+
+ if (pthread_mutex_lock(&time->lock)) abort();
+
+ if (p->ticksize < p->tickmaxsize) {
+ p->tick[p->ticksize] = t;
+ p->ticksize++;
+ } else {
+ p->tick[p->tickstart] = t;
+ p->tickstart = (p->tickstart + 1) % p->ticksize;
+ }
+
+ if (time_cmp(time->latest_time, t) < 0)
+ time->latest_time = t;
+
+ if (pthread_mutex_unlock(&time->lock)) abort();
+}
+
+view *new_subview_time(view *_time, int line, int color, int size)
+{
+ struct time *time = (struct time *)_time;
+ struct subtime *ret = calloc(1, sizeof(struct subtime));
+ if (ret == NULL) abort();
+
+ ret->common.append = (void (*)(view *, ...))append;
+
+ if (pthread_mutex_lock(&time->lock)) abort();
+
+ ret->parent = time;
+ ret->line = line;
+ ret->color = color;
+ ret->subview = time->psize;
+
+ time->p = realloc(time->p,
+ (time->psize + 1) * sizeof(struct plot));
+ if (time->p == NULL) abort();
+ time->p[time->psize].tick = calloc(size, sizeof(struct timespec));
+ if (time->p[time->psize].tick == NULL) abort();
+ time->p[time->psize].ticksize = 0;
+ time->p[time->psize].tickmaxsize = size;
+ time->p[time->psize].tickstart = 0;
+ time->p[time->psize].line = line;
+ time->p[time->psize].color = color;
+
+ time->psize++;
+
+ if (pthread_mutex_unlock(&time->lock)) abort();
+
+ return (view *)ret;
+}
diff --git a/common/utils/T/tracer/view/tti.c b/common/utils/T/tracer/view/tti.c
new file mode 100644
index 0000000000..ebf9fc657c
--- /dev/null
+++ b/common/utils/T/tracer/view/tti.c
@@ -0,0 +1,121 @@
+#include "view.h"
+#include "../utils.h"
+#include
+#include
+#include
+#include
+#include
+
+struct tti {
+ view common;
+ gui *g;
+ widget *w;
+ int plot;
+ float refresh_rate;
+ pthread_mutex_t lock;
+ float data[1024*10];
+ int valid[1024*10];
+ float xout[1024*10];
+ float yout[1024*10];
+ int last_insert_point;
+};
+
+static int far_enough(int i, int last_insert, int plot_width)
+{
+ int p1;
+ int p2;
+ int hole_size_px;
+ int hole_size_tti;
+ hole_size_px = 10;
+ hole_size_tti = 10240 * hole_size_px / plot_width;
+ p1 = last_insert;
+ p2 = (last_insert + hole_size_tti) % (1024*10);
+ if (p1 < p2) {
+ return !(i > p1 && i < p2);
+ }
+ return i > p2 && i <= p1;
+}
+
+static void *tti_thread(void *_this)
+{
+ struct tti *this = _this;
+ int i;
+ int length;
+ int plot_width;
+ int plot_height;
+
+ while (1) {
+ if (pthread_mutex_lock(&this->lock)) abort();
+ xy_plot_get_dimensions(this->g, this->w, &plot_width, &plot_height);
+ length = 0;
+ /* TODO: optimize */
+ for (i = 0; i < 1024*10; i++)
+ /* do not take points too close after last insertion point */
+ if (this->valid[i] &&
+ far_enough(i, this->last_insert_point, plot_width)) {
+ this->xout[length] = i;
+ this->yout[length] = this->data[i];
+ length++;
+ }
+ xy_plot_set_points(this->g, this->w, this->plot,
+ length, this->xout, this->yout);
+ if (pthread_mutex_unlock(&this->lock)) abort();
+ sleepms(1000/this->refresh_rate);
+ }
+
+ return 0;
+}
+
+static void clear(view *this)
+{
+ /* TODO */
+}
+
+static void append(view *_this, int frame, int subframe, double value)
+{
+ struct tti *this = (struct tti *)_this;
+ int i;
+ int index = frame * 10 + subframe;
+
+ if (pthread_mutex_lock(&this->lock)) abort();
+
+ /* TODO: optimize */
+ /* clear all between last insert point and current one
+ * this may be wrong if delay between two append is
+ * greater than 1024 frames (something like that)
+ */
+ i = (this->last_insert_point + 1) % (1024*10);
+ while (i != index) {
+ this->valid[i] = 0;
+ i = (i + 1) % (1024*10);
+ }
+
+ this->data[index] = value;
+ this->valid[index] = 1;
+
+ this->last_insert_point = index;
+
+ if (pthread_mutex_unlock(&this->lock)) abort();
+}
+
+view *new_view_tti(float refresh_rate, gui *g, widget *w, int color)
+{
+ struct tti *ret = calloc(1, sizeof(struct tti));
+ if (ret == NULL) abort();
+
+ ret->common.clear = clear;
+ ret->common.append = (void (*)(view *, ...))append;
+
+ ret->refresh_rate = refresh_rate;
+ ret->g = g;
+ ret->w = w;
+ ret->plot = xy_plot_new_plot(g, w, color);
+
+ ret->last_insert_point = 0;
+
+ if (pthread_mutex_init(&ret->lock, NULL)) abort();
+
+ new_thread(tti_thread, ret);
+
+ return (view *)ret;
+}
diff --git a/common/utils/T/tracer/view/view.h b/common/utils/T/tracer/view/view.h
new file mode 100644
index 0000000000..cbc5e21b73
--- /dev/null
+++ b/common/utils/T/tracer/view/view.h
@@ -0,0 +1,27 @@
+#ifndef _VIEW_H_
+#define _VIEW_H_
+
+#include "gui/gui.h"
+
+/* defines the public API of views */
+
+typedef struct view {
+ void (*clear)(struct view *this);
+ void (*append)(struct view *this, ...);
+ void (*set)(struct view *this, char *name, ...);
+} view;
+
+view *new_view_stdout(void);
+view *new_view_textlist(int maxsize, float refresh_rate, gui *g, widget *w);
+view *new_view_xy(int length, float refresh_rate, gui *g, widget *w,
+ int color);
+view *new_view_tti(float refresh_rate, gui *g, widget *w,
+ int color);
+view *new_view_time(int number_of_seconds, float refresh_rate,
+ gui *g, widget *w);
+view *new_subview_time(view *time, int line, int color, int size);
+view *new_view_ticktime(float refresh_rate, gui *g, widget *w);
+view *new_subview_ticktime(view *ticktime, int line, int color, int size);
+void ticktime_set_tick(view *ticktime, void *logger);
+
+#endif /* _VIEW_H_ */
diff --git a/common/utils/T/tracer/view/xy.c b/common/utils/T/tracer/view/xy.c
new file mode 100644
index 0000000000..1407a16a0e
--- /dev/null
+++ b/common/utils/T/tracer/view/xy.c
@@ -0,0 +1,116 @@
+#include "view.h"
+#include "../utils.h"
+#include
+#include
+#include
+#include
+#include
+
+struct xy {
+ view common;
+ gui *g;
+ widget *w;
+ int plot;
+ float refresh_rate;
+ pthread_mutex_t lock;
+ int length;
+ float *x;
+ float *y;
+ int insert_point;
+};
+
+static void *xy_thread(void *_this)
+{
+ struct xy *this = _this;
+
+ while (1) {
+ if (pthread_mutex_lock(&this->lock)) abort();
+ xy_plot_set_points(this->g, this->w, this->plot,
+ this->length, this->x, this->y);
+ if (pthread_mutex_unlock(&this->lock)) abort();
+ sleepms(1000/this->refresh_rate);
+ }
+
+ return 0;
+}
+
+static void clear(view *this)
+{
+ /* TODO */
+}
+
+static void append(view *_this, float *x, float *y, int length)
+{
+ struct xy *this = (struct xy *)_this;
+ int i;
+ int ip;
+
+ if (pthread_mutex_lock(&this->lock)) abort();
+
+ ip = this->insert_point;
+
+ /* TODO: optimize the copy */
+ for (i = 0; i < length; i++) {
+ this->x[ip] = x[i];
+ this->y[ip] = y[i];
+ ip++; if (ip == this->length) ip = 0;
+ }
+
+ this->insert_point = ip;
+
+ if (pthread_mutex_unlock(&this->lock)) abort();
+}
+
+static void set(view *_this, char *name, ...)
+{
+ struct xy *this = (struct xy *)_this;
+ va_list ap;
+
+ if (!strcmp(name, "length")) {
+ if (pthread_mutex_lock(&this->lock)) abort();
+
+ va_start(ap, name);
+
+ free(this->x);
+ free(this->y);
+ this->length = va_arg(ap, int);
+ this->x = calloc(this->length, sizeof(float)); if (this->x==NULL)abort();
+ this->y = calloc(this->length, sizeof(float)); if (this->y==NULL)abort();
+ this->insert_point = 0;
+
+ va_end(ap);
+
+ if (pthread_mutex_unlock(&this->lock)) abort();
+ return;
+ }
+
+ printf("%s:%d: unkown setting '%s'\n", __FILE__, __LINE__, name);
+ abort();
+}
+
+view *new_view_xy(int length, float refresh_rate, gui *g, widget *w,
+ int color)
+{
+ struct xy *ret = calloc(1, sizeof(struct xy));
+ if (ret == NULL) abort();
+
+ ret->common.clear = clear;
+ ret->common.append = (void (*)(view *, ...))append;
+ ret->common.set = set;
+
+ ret->refresh_rate = refresh_rate;
+ ret->g = g;
+ ret->w = w;
+ ret->plot = xy_plot_new_plot(g, w, color);
+
+ ret->length = length;
+ ret->x = calloc(length, sizeof(float)); if (ret->x == NULL) abort();
+ ret->y = calloc(length, sizeof(float)); if (ret->y == NULL) abort();
+ ret->insert_point = 0;
+
+ if (pthread_mutex_init(&ret->lock, NULL)) abort();
+
+ new_thread(xy_thread, ret);
+
+ return (view *)ret;
+}
diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c
index 572c207b3f..6789dadce6 100644
--- a/common/utils/itti/intertask_interface.c
+++ b/common/utils/itti/intertask_interface.c
@@ -58,6 +58,10 @@
# include "vcd_signal_dumper.h"
#endif
+#if T_TRACER
+#include "T.h"
+#endif
+
/* Includes "intertask_interface_init.h" to check prototype coherence, but
* disable threads and messages information generation.
*/
diff --git a/common/utils/itti/intertask_interface_dump.c b/common/utils/itti/intertask_interface_dump.c
index 491bff59b0..30d92e3a29 100644
--- a/common/utils/itti/intertask_interface_dump.c
+++ b/common/utils/itti/intertask_interface_dump.c
@@ -64,6 +64,10 @@
#include "vcd_signal_dumper.h"
#endif
+#if T_TRACER
+#include "T.h"
+#endif
+
static const int itti_dump_debug = 0; // 0x8 | 0x4 | 0x2;
#ifdef RTAI
diff --git a/common/utils/itti/memory_pools.c b/common/utils/itti/memory_pools.c
index 97ec7d8e38..a7d3448352 100644
--- a/common/utils/itti/memory_pools.c
+++ b/common/utils/itti/memory_pools.c
@@ -37,6 +37,11 @@
# include "vcd_signal_dumper.h"
#endif
+#if T_TRACER
+#include
+#include "T.h"
+#endif
+
/*------------------------------------------------------------------------------*/
const static int mp_debug = 0;
diff --git a/openair1/MAC_INTERFACE/COPYING b/openair1/MAC_INTERFACE/COPYING
deleted file mode 100644
index 818433ecc0..0000000000
--- a/openair1/MAC_INTERFACE/COPYING
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program 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.
-
- 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, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- Copyright (C)
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-.
diff --git a/openair1/MAC_INTERFACE/Makefile.inc b/openair1/MAC_INTERFACE/Makefile.inc
deleted file mode 100644
index 5dcd2a3ffe..0000000000
--- a/openair1/MAC_INTERFACE/Makefile.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-#MAC_XFACE_OBJS = $(OPENAIR1_TOP)/MAC_INTERFACE/register.o
-MAC_XFACE_OBJS += $(OPENAIR1_TOP)/MAC_INTERFACE/init.o
diff --git a/openair1/MAC_INTERFACE/defs.h b/openair1/MAC_INTERFACE/defs.h
deleted file mode 100755
index dbaab57fcc..0000000000
--- a/openair1/MAC_INTERFACE/defs.h
+++ /dev/null
@@ -1,42 +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
-
- *******************************************************************************/
-/*________________________mac_defs.h________________________
-
- Authors : Hicham Anouar, Raymond Knopp
- Company : EURECOM
- Emails : anouar@eurecom.fr, knopp@eurecom.fr
- ________________________________________________________________*/
-
-#ifndef __MAC_INTERFACE_DEFS_H__
-#define __MAC_INTERFACE_DEFS_H__
-
-
-#include "PHY_INTERFACE/defs.h"
-
-#endif
diff --git a/openair1/MAC_INTERFACE/extern.h b/openair1/MAC_INTERFACE/extern.h
deleted file mode 100755
index a7444939ee..0000000000
--- a/openair1/MAC_INTERFACE/extern.h
+++ /dev/null
@@ -1,55 +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
-
- *******************************************************************************/
-/*________________________mac_extern.h________________________
-
- Authors : Hicham Anouar, Raymond Knopp
- Company : EURECOM
- Emails : anouar@eurecom.fr, knopp@eurecom.fr
-________________________________________________________________*/
-
-
-/*! \file mac_extern.h
-* \brief Generic mac interface external variable definitions
-* \author R. Knopp
-* \date March 2006
-* \note
-* \warning
-* @ingroup macxface
-*/
-
-#ifndef __MAC_INTERFACE_EXTERN_H__
-#define __MAC_INTERFACE_EXTERN_H__
-
-#include "defs.h"
-
-
-extern MAC_xface *mac_xface;
-
-
-#endif /*__MAC_INTERFACE_EXTERN_H__ */
diff --git a/openair1/MAC_INTERFACE/init.c b/openair1/MAC_INTERFACE/init.c
deleted file mode 100644
index 480d365f09..0000000000
--- a/openair1/MAC_INTERFACE/init.c
+++ /dev/null
@@ -1,76 +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
-
- *******************************************************************************/
-/*________________________mac_init.c________________________
-
- Authors : Hicham Anouar, Raymond Knopp
- Company : EURECOM
- Emails : anouar@eurecom.fr, knopp@eurecom.fr
-________________________________________________________________*/
-
-/*!\brief Initilization and reconfiguration routines for generic MAC interface */
-
-#include "defs.h"
-#include "extern.h"
-#include "SCHED/defs.h"
-
-int mac_init(void)
-{
- int i;
-
-#ifndef USER_MODE
- // mac_xface->macphy_init();
- mac_xface->macphy_exit = openair_sched_exit;
-#else
- mac_xface->macphy_exit=(void (*)(void)) exit;
-#endif
-
- /* this is done in cbmimo1_fileops
- #ifdef OPENAIR2
- mac_xface->macphy_init();
- #endif //OPENAIR2
- */
-
- return(1);
-}
-
-void mac_cleanup(void)
-{
-
-}
-
-void mac_resynch(void)
-{
-
-}
-
-/*
-#ifdef OPENAIR2
-EXPORT_SYMBOL(frame);
-#endif //OPENAIR2
-*/
diff --git a/openair1/MAC_INTERFACE/register.c b/openair1/MAC_INTERFACE/register.c
deleted file mode 100644
index 0c3c611817..0000000000
--- a/openair1/MAC_INTERFACE/register.c
+++ /dev/null
@@ -1,121 +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
-
- *******************************************************************************/
-/*________________________mac_register.c________________________
-
- Authors : Hicham Anouar, Raymond Knopp
- Company : EURECOM
- Emails : anouar@eurecom.fr, knopp@eurecom.fr
-________________________________________________________________*/
-
-
-/*!\brief Registration routines for generic MAC interface. Register/unregister a MAC.
-Upon registration, the MAC retrieves the transport channel (MAC_tch) data structure and provides the
-pointer to the macphy_scheduler() routine*/
-#define __NO_VERSION__
-
-#undef __PHY_IMPLEMENTATION_DEFS_H__
-
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h"
-#include "defs.h"
-#include "extern.h"
-#include "SCHED/extern.h"
-
-#ifndef USER_MODE
-
-
-
-
-
-void dummy_macphy_scheduler(uint8_t last_slot)
-{
- //if (last_slot == 0)
- // mac_xface->frame++;
-
- msg("[OPENAIR][MAC XFACE] in dummy_macphy_scheduler(): MAC no yet registered!\n");
-
- //#ifdef EMOS
- // phy_procedures(last_slot);
- //#endif
-
-}
-
-void dummy_macphy_setparams(void *params)
-{
- msg("[OPENAIR][MAC XFACE] dummy_macphy_setparams(): no MAC registered!\n");
-}
-
-void dummy_macphy_init(void )
-{
- msg("[OPENAIR][MAC XFACE] dummy_macphy_init(): no MAC registered!\n");
-}
-
-MAC_xface *mac_register(void macphy_scheduler(uint8_t last_slot), void macphy_setparams(void *),void macphy_init(void ),void mrbch_phy_sync_failure(unsigned char,unsigned char),
- void chbch_phy_sync_success(unsigned char,unsigned char))
-{
-
- if (openair_daq_vars.mac_registered == 0) {
-
- msg("[OPENAIR][MAC XFACE] Registering new MAC interface at %p, scheduler %p, setparams at %p, init at %p\n",
- mac_xface,macphy_scheduler,macphy_setparams,macphy_init);
- mac_xface->macphy_scheduler = macphy_scheduler;
- mac_xface->macphy_setparams = macphy_setparams;
- mac_xface->macphy_init = macphy_init;
-#ifndef PC_TARGET
- // mac_xface->ublaze_mac_xface = ublaze_mac_xface;
-#endif
- openair_daq_vars.mac_registered=1;
- return(mac_xface);
- } else {
- msg("[OPENAIR][MAC XFACE] MAC interface already registered, aborting ...\n");
- return NULL;
- }
-
-
-}
-
-int mac_unregister(MAC_xface *mac_xface_rx)
-{
-
- if (mac_xface_rx == mac_xface) {
- msg("[OPENAIR][MAC XFACE] Unregistering MAC interface\n");
- mac_xface->macphy_scheduler = dummy_macphy_scheduler;
- mac_xface->macphy_setparams = dummy_macphy_setparams;
- mac_xface->macphy_init = dummy_macphy_init;
- openair_daq_vars.mac_registered=0;
- return(0);
- } else {
- msg("[OPENAIR][MAC XFACE] Not the right interface descriptor pointer!!!, aborting ...\n");
- return (-1);
- }
-
-}
-
-EXPORT_SYMBOL(mac_register);
-EXPORT_SYMBOL(mac_unregister);
-#endif //USER_MODE
diff --git a/openair1/MAC_INTERFACE/vars.h b/openair1/MAC_INTERFACE/vars.h
deleted file mode 100755
index e3ef7f6ab1..0000000000
--- a/openair1/MAC_INTERFACE/vars.h
+++ /dev/null
@@ -1,52 +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
-
- *******************************************************************************/
-/*________________________mac_vars.h________________________
-
- Authors : Hicham Anouar, Raymond Knopp
- Company : EURECOM
- Emails : anouar@eurecom.fr, knopp@eurecom.fr
-________________________________________________________________*/
-
-
-/*! \file mac_vars.h
-* \brief generic mac interface variable definitions
-* \author R. Knopp
-* \version 1
-* \date March 2006
-* @ingroup macxface
-*/
-
-#ifndef __MAC_INTERFACE_VARS_H__
-#define __MAC_INTERFACE_VARS_H__
-
-#include "defs.h"
-
-MAC_xface *mac_xface;
-
-#endif //__MAC_INTERFACE_VARS_H__
diff --git a/openair1/PHY/CODING/3gpplte_sse.c b/openair1/PHY/CODING/3gpplte_sse.c
index 41c0f65dc3..34fcbef6d6 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
- int input_length_words=n>>1;
-
+#ifndef __AVX2__
+ int input_length_words=1+((n-1)>>1);
+#else
+ int input_length_words=1+((n-1)>>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;
+
+
+ __m256i tmp, zeros=_mm256_setzero_si256();
+
+
+ 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;
+ }
+
+
+ s = systematic0;
+ s1 = systematic1;
+ s2 = systematic2;
+ yp1 = yparity1;
+ yp2 = yparity2;
+
+
+#if 0
+ __m128i *yp128,*yp128_cw2;
+ __m128i tmpe,tmpe_cw2;
+ yp128 = (__m128i*)y;
+ yp128_cw2 = (__m128i*)y2;
+
+
+
+ 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/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
index ee78dd0773..0227a45a3d 100644
--- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
@@ -1000,6 +1000,7 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y,
#if defined(__x86_64__) || defined(__i386__)
+ // note: this makes valgrind freak
__m128i avg=_mm_set1_epi32(0);
for (i=0; i<(3*(n>>4))+1; i++) {
@@ -1503,6 +1504,7 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y,
tmp2=_mm_and_si128(tmp,mask);
tmp2=_mm_cmpeq_epi16(tmp2,mask);
+ // printf("decoded_bytes %p\n",decoded_bytes);
decoded_bytes[n_128*0+i]=(uint8_t) _mm_movemask_epi8(_mm_packs_epi16(tmp2,zeros));
int j;
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..c0f6091dfd 100644
--- a/openair1/PHY/CODING/defs.h
+++ b/openair1/PHY/CODING/defs.h
@@ -303,6 +303,10 @@ void ccodedot11_init(void);
\brief This function initializes the trellis structure for decoding an 802.11 convolutional code.*/
void ccodedot11_init_inv(void);
+/*!\fn void teillis_table_init(void)
+\brief This function initializes the trellis structure for 3GPP LTE Turbo code.*/
+void treillis_table_init(void);
+
/*\fn void threegpplte_turbo_encoder(uint8_t *input,uint16_t input_length_bytes,uint8_t *output,uint8_t F,uint16_t interleaver_f1,uint16_t interleaver_f2)
\brief This function implements a rate 1/3 8-state parralel concatenated turbo code (3GPP-LTE).
@param input Pointer to input buffer
@@ -353,6 +357,8 @@ void ccodedab_init(void);
\brief This function initializes the trellis structure for decoding an DAB convolutional code (first 3 bits).*/
void ccodedab_init_inv(void);
+
+
/*!\fn void crcTableInit(void)
\brief This function initializes the different crc tables.*/
void crcTableInit (void);
@@ -366,6 +372,17 @@ void init_td8 (void);
\brief This function initializes the tables for 16-bit LLR Turbo decoder.*/
void init_td16 (void);
+#ifdef __AVX2__
+/*!\fn void init_td8(void)
+\brief This function initializes the tables for 8-bit LLR Turbo decoder (AVX2).*/
+void init_td8avx2 (void);
+
+
+/*!\fn void init_td16(void)
+\brief This function initializes the tables for 16-bit LLR Turbo decoder (AVX2).*/
+void init_td16avx2 (void);
+#endif
+
/*!\fn uint32_t crc24a(uint8_t *inPtr, int32_t bitlen)
\brief This computes a 24-bit crc ('a' variant for overall transport block)
based on 3GPP UMTS/LTE specifications.
@@ -483,6 +500,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/CODING/lte_rate_matching.c b/openair1/PHY/CODING/lte_rate_matching.c
index 96663bd8a6..2dbf92d751 100644
--- a/openair1/PHY/CODING/lte_rate_matching.c
+++ b/openair1/PHY/CODING/lte_rate_matching.c
@@ -495,8 +495,14 @@ uint32_t lte_rate_matching_turbo(uint32_t RTC,
char fname[512];
#endif
- Nir = Nsoft/Kmimo/cmin(8,Mdlharq);
- Ncb = cmin(Nir/C,3*(RTC<<5));
+ if (Mdlharq>0) { // Downlink
+ Nir = Nsoft/Kmimo/cmin(8,Mdlharq);
+ Ncb = cmin(Nir/C,3*(RTC<<5));
+ }
+ else { // Uplink
+ Nir=0;
+ Ncb = 3*(RTC<<5); // Kw
+ }
#ifdef RM_DEBUG_TX
if (rvidx==0 && r==0) {
@@ -709,15 +715,20 @@ int lte_rate_matching_turbo_rx(uint32_t RTC,
int nulled=0;
#endif
- if (Kmimo==0 || Mdlharq==0 || C==0 || Qm==0 || Nl==0) {
+ if (Kmimo==0 || C==0 || Qm==0 || Nl==0) {
printf("lte_rate_matching.c: invalid parameters (Kmimo %d, Mdlharq %d, C %d, Qm %d, Nl %d\n",
Kmimo,Mdlharq,C,Qm,Nl);
return(-1);
}
- Nir = Nsoft/Kmimo/cmin(8,Mdlharq);
- Ncb = cmin(Nir/C,3*(RTC<<5));
-
+ if (Mdlharq>0) { // Downlink
+ Nir = Nsoft/Kmimo/cmin(8,Mdlharq);
+ Ncb = cmin(Nir/C,3*(RTC<<5));
+ }
+ else { // Uplink
+ Nir=0;
+ Ncb = 3*(RTC<<5);
+ }
Gp = G/Nl/Qm;
GpmodC = Gp%C;
diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index 1f98a0eecc..6a50c2d113 100644
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -26,17 +26,6 @@
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
-/*
-#ifdef CBMIMO1
-#include "ARCH/COMMON/defs.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/from_grlib_softconfig.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/extern.h"
-#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_pci.h"
-//#include "pci_commands.h"
-#endif //CBMIMO1
-*/
#ifdef EXMIMO
#include "openair0_lib.h"
#endif
@@ -888,12 +877,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);
@@ -1049,7 +1042,7 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
// init TX buffers
ue_common_vars->txdata = (int32_t**)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
- ue_common_vars->txdataF = (mod_sym_t **)malloc16( frame_parms->nb_antennas_tx*sizeof(mod_sym_t*) );
+ ue_common_vars->txdataF = (int32_t **)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
for (i=0; inb_antennas_tx; i++) {
#ifdef USER_MODE
@@ -1057,7 +1050,7 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
#else //USER_MODE
ue_common_vars->txdata[i] = TX_DMA_BUFFER[0][i];
#endif //USER_MODE
- ue_common_vars->txdataF[i] = (mod_sym_t *)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t) );
+ ue_common_vars->txdataF[i] = (int32_t *)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t) );
}
// init RX buffers
@@ -1270,21 +1263,21 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB,
// TX vars
eNB_common_vars->txdata[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
- eNB_common_vars->txdataF[eNB_id] = (mod_sym_t **)malloc16( frame_parms->nb_antennas_tx*sizeof(mod_sym_t*) );
+ eNB_common_vars->txdataF[eNB_id] = (int32_t **)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) );
for (i=0; inb_antennas_tx; i++) {
#ifdef USER_MODE
eNB_common_vars->txdata[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) );
- eNB_common_vars->txdataF[eNB_id][i] = (mod_sym_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t) );
+ eNB_common_vars->txdataF[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t) );
#else // USER_MODE
eNB_common_vars->txdata[eNB_id][i] = TX_DMA_BUFFER[eNB_id][i];
- eNB_common_vars->txdataF[eNB_id][i] = (mod_sym_t *)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t) );
+ eNB_common_vars->txdataF[eNB_id][i] = (int32_t *)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t) );
#endif //USER_MODE
#ifdef DEBUG_PHY
msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdata[%d][%d] = %p\n",eNB_id,i,eNB_common_vars->txdata[eNB_id][i]);
msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdataF[%d][%d] = %p (%d bytes)\n",
eNB_id,i,eNB_common_vars->txdataF[eNB_id][i],
- FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t));
+ FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t));
#endif
}
diff --git a/openair1/PHY/INIT/lte_param_init.c b/openair1/PHY/INIT/lte_param_init.c
index 2b827dcb0e..0db51e8b17 100644
--- a/openair1/PHY/INIT/lte_param_init.c
+++ b/openair1/PHY/INIT/lte_param_init.c
@@ -45,6 +45,7 @@ void lte_param_init(unsigned char N_tx,
lte_frame_parms->N_RB_UL = N_RB_DL;
lte_frame_parms->threequarter_fs = threequarter_fs;
lte_frame_parms->Ncp = extended_prefix_flag;
+ lte_frame_parms->Ncp_UL = extended_prefix_flag;
lte_frame_parms->Nid_cell = Nid_cell;
lte_frame_parms->nushift = Nid_cell%6;
lte_frame_parms->nb_antennas_tx = N_tx;
diff --git a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
index ead0ed7d99..af72bce967 100644
--- a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
+++ b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
@@ -29,8 +29,6 @@
#include "PHY/types.h"
#include "PHY/defs.h"
#include "PHY/extern.h"
-#include "MAC_INTERFACE/defs.h"
-#include "MAC_INTERFACE/extern.h"
#ifdef EXMIMO
#include "openair0_lib.h"
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_adjust_sync.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
index 9425e94d02..059119c605 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
@@ -29,8 +29,6 @@
#include "PHY/types.h"
#include "PHY/defs.h"
#include "PHY/extern.h"
-#include "MAC_INTERFACE/defs.h"
-#include "MAC_INTERFACE/extern.h"
#define DEBUG_PHY
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_dl_mbsfn_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c
index e79392e0fe..1dbafdb911 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c
@@ -771,7 +771,8 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *phy_vars_ue,
break;
case 75:
idft1536((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
- (int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa]);
+ (int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][aa],
+ 1);
break;
case 100:
idft2048((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][aa][8],
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
index d5bfee81ed..8b5c1a1806 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
@@ -56,7 +56,6 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
int32_t n0_power_tot;
int len;
int offset;
- //int Nsymb = (frame_parms->Ncp==NORMAL)?14:12;
// noise measurements
// for the moment we measure the noise on the 7th OFDM symbol (in S subframe)
@@ -68,8 +67,8 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
phy_measurements->n0_power[aarx] = ((k1*signal_energy(&eNB_common_vars->rxdata[eNB_id][aarx][(frame_parms->samples_per_tti<<1) -frame_parms->ofdm_symbol_size],
- frame_parms->ofdm_symbol_size)) + k2*phy_measurements->n0_power[aarx])>>10;
- phy_measurements->n0_power[aarx] = (phy_measurements->n0_power[aarx] * 12*frame_parms->N_RB_DL)/(frame_parms->ofdm_symbol_size);
+ frame_parms->ofdm_symbol_size)) + k2*phy_measurements->n0_power[aarx])>>10;
+ //phy_measurements->n0_power[aarx] = (phy_measurements->n0_power[aarx]) * 12*frame_parms->N_RB_DL)/(frame_parms->ofdm_symbol_size);
phy_measurements->n0_power_dB[aarx] = (unsigned short) dB_fixed(phy_measurements->n0_power[aarx]);
phy_measurements->n0_power_tot += phy_measurements->n0_power[aarx];
}
@@ -88,7 +87,7 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *phy_vars_eNB,
// select the 7th symbol in an uplink subframe
offset = (frame_parms->first_carrier_offset + (rb*12))%frame_parms->ofdm_symbol_size;
- offset += (7*frame_parms->ofdm_symbol_size);//(((Nsymb*subframe)+7)*frame_parms->ofdm_symbol_size);
+ offset += (7*frame_parms->ofdm_symbol_size);
ul_ch = &eNB_common_vars->rxdataF[eNB_id][aarx][offset];
len = 12;
// just do first half of middle PRB for odd number of PRBs
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
index edbdbda2d1..dfb39a510f 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
@@ -37,8 +37,6 @@
#include "PHY/defs.h"
#include "PHY/extern.h"
#include "SCHED/extern.h"
-#include "MAC_INTERFACE/defs.h"
-#include "MAC_INTERFACE/extern.h"
#include
#ifdef OPENAIR2
@@ -52,8 +50,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)));
@@ -172,12 +170,13 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
case 75:
idft1536((short*)syncF_tmp, /// complex input
- (short*)sync_tmp); /// complex output
+ (short*)sync_tmp,
+ 1); /// complex output
break;
case 100:
idft2048((short*)syncF_tmp, /// complex input
- (short*)sync_tmp, /// complex output
- 1);
+ (short*)sync_tmp, /// complex output
+ 1);
break;
default:
LOG_E(PHY,"Unsupported N_RB_DL %d\n",frame_parms->N_RB_DL);
@@ -219,8 +218,8 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
case 75:
idft1536((short*)syncF_tmp, /// complex input
- (short*)sync_tmp /// complex output
- );
+ (short*)sync_tmp, /// complex output
+ 1);
break;
case 100:
idft2048((short*)syncF_tmp, /// complex input
@@ -267,8 +266,8 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
case 75:
idft1536((short*)syncF_tmp, /// complex input
- (short*)sync_tmp /// complex output
- );
+ (short*)sync_tmp, /// complex output
+ 1);
break;
case 100:
idft2048((short*)syncF_tmp, /// complex input
@@ -346,6 +345,8 @@ static inline int abs32(int x)
int debug_cnt=0;
#endif
+#define SHIFT 17
+
int lte_sync_time(int **rxdata, ///rx data in time domain
LTE_DL_FRAME_PARMS *frame_parms,
int *eNB_id)
@@ -414,8 +415,8 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
//calculate dot product of primary_synch0_time and rxdata[ar][n] (ar=0..nb_ant_rx) and store the sum in temp[n];
for (ar=0; arnb_antennas_rx; ar++) {
- result = dot_product((short*)primary_synch0_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size, 15);
- result2 = dot_product((short*)primary_synch0_time, (short*) &(rxdata[ar][n+length]), frame_parms->ofdm_symbol_size, 15);
+ result = dot_product((short*)primary_synch0_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size, SHIFT);
+ result2 = dot_product((short*)primary_synch0_time, (short*) &(rxdata[ar][n+length]), frame_parms->ofdm_symbol_size, SHIFT);
((short*)sync_corr_ue0)[2*n] += ((short*) &result)[0];
((short*)sync_corr_ue0)[2*n+1] += ((short*) &result)[1];
@@ -428,8 +429,8 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
}
for (ar=0; arnb_antennas_rx; ar++) {
- result = dot_product((short*)primary_synch1_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size, 15);
- result2 = dot_product((short*)primary_synch1_time, (short*) &(rxdata[ar][n+length]), frame_parms->ofdm_symbol_size, 15);
+ result = dot_product((short*)primary_synch1_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size, SHIFT);
+ result2 = dot_product((short*)primary_synch1_time, (short*) &(rxdata[ar][n+length]), frame_parms->ofdm_symbol_size, SHIFT);
((short*)sync_corr_ue1)[2*n] += ((short*) &result)[0];
((short*)sync_corr_ue1)[2*n+1] += ((short*) &result)[1];
((short*)sync_corr_ue1)[2*(length+n)] += ((short*) &result2)[0];
@@ -443,8 +444,8 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
for (ar=0; arnb_antennas_rx; ar++) {
- result = dot_product((short*)primary_synch2_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size, 15);
- result2 = dot_product((short*)primary_synch2_time, (short*) &(rxdata[ar][n+length]), frame_parms->ofdm_symbol_size, 15);
+ result = dot_product((short*)primary_synch2_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size, SHIFT);
+ result2 = dot_product((short*)primary_synch2_time, (short*) &(rxdata[ar][n+length]), frame_parms->ofdm_symbol_size, SHIFT);
((short*)sync_corr_ue2)[2*n] += ((short*) &result)[0];
((short*)sync_corr_ue2)[2*n+1] += ((short*) &result)[1];
((short*)sync_corr_ue2)[2*(length+n)] += ((short*) &result2)[0];
@@ -558,7 +559,7 @@ int lte_sync_time_eNB(int32_t **rxdata, ///rx data in time domain
//calculate dot product of primary_synch0_time and rxdata[ar][n] (ar=0..nb_ant_rx) and store the sum in temp[n];
for (ar=0; arnb_antennas_rx; ar++) {
- result = dot_product((short*)primary_synch_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size, 15);
+ result = dot_product((short*)primary_synch_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size, SHIFT);
//((short*)sync_corr)[2*n] += ((short*) &result)[0];
//((short*)sync_corr)[2*n+1] += ((short*) &result)[1];
sync_corr_eNB[n] += abs32(result);
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_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
index 1eb663ec89..2bfa6e3f60 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
@@ -31,6 +31,7 @@
#include "PHY/sse_intrin.h"
//#define DEBUG_CH
+#include "T.h"
// For Channel Estimation in Distributed Alamouti Scheme
//static int16_t temp_out_ifft[2048*4] __attribute__((aligned(16)));
@@ -331,6 +332,13 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB,
break;
}
+#if T_TRACER
+ if (aa == 0)
+ T(T_ENB_UL_CHANNEL_ESTIMATE, T_INT(eNB_id), T_INT(UE_id),
+ T_INT(phy_vars_eNB->proc[sched_subframe].frame_rx), T_INT(subframe),
+ T_INT(0), T_BUFFER(ul_ch_estimates_time[0], 512 * 4));
+#endif
+
#ifdef DEBUG_CH
if (aa==0) {
diff --git a/openair1/PHY/LTE_REFSIG/defs.h b/openair1/PHY/LTE_REFSIG/defs.h
index b48403ff99..f8701a63a8 100644
--- a/openair1/PHY/LTE_REFSIG/defs.h
+++ b/openair1/PHY/LTE_REFSIG/defs.h
@@ -73,7 +73,7 @@ void lte_gold_mbsfn(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_mbsfn_tabl
int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
- mod_sym_t *output,
+ int32_t *output,
short amp,
unsigned char Ns,
unsigned char l,
@@ -89,7 +89,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
*/
int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
uint8_t UE_id,
- mod_sym_t *output,
+ int32_t *output,
short amp,
uint8_t Ns,
uint8_t p,
@@ -102,7 +102,7 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
@param Ns Slot number (0..19)
@param l symbol (0,1,2)
*/
-int lte_dl_mbsfn(PHY_VARS_eNB *phy_vars_eNB, mod_sym_t *output,
+int lte_dl_mbsfn(PHY_VARS_eNB *phy_vars_eNB, int32_t *output,
short amp,
int subframe,
unsigned char l);
@@ -148,7 +148,7 @@ void free_ul_ref_sigs(void);
@sub_frame_offset Offset of this subframe in units of subframes
*/
-int lte_generate_srs(mod_sym_t **txdataF,
+int lte_generate_srs(int32_t **txdataF,
short amp,
LTE_DL_FRAME_PARMS *frame_parms,
unsigned int sub_frame_offset);
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
index 8e64275b41..9ffda3a83d 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
@@ -41,7 +41,7 @@
//Calibration
int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
- mod_sym_t *output,
+ int32_t *output,
short amp,
unsigned char Ns,
unsigned char l,//nb of sym per slot
@@ -50,7 +50,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
unsigned char nu,mprime,mprime_dword,mprime_qpsk_symb,m;
unsigned short k,a;
- mod_sym_t qpsk[4];
+ int32_t qpsk[4];
a = (amp*ONE_OVER_SQRT2_Q15)>>15;
((short *)&qpsk[0])[0] = a;
@@ -121,7 +121,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
- mod_sym_t *output,
+ int32_t *output,
short amp,
unsigned char Ns,
unsigned char l,
@@ -130,7 +130,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
unsigned char nu,mprime,mprime_dword,mprime_qpsk_symb,m;
unsigned short k,a;
- mod_sym_t qpsk[4];
+ int32_t qpsk[4];
a = (amp*ONE_OVER_SQRT2_Q15)>>15;
((short *)&qpsk[0])[0] = a;
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c b/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c
index c3b141841a..9c3269b863 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c
@@ -39,7 +39,7 @@
//extern unsigned int lte_gold_table[10][3][42];
//#define DEBUG_DL_MBSFN
-int lte_dl_mbsfn(PHY_VARS_eNB *phy_vars_eNB, mod_sym_t *output,
+int lte_dl_mbsfn(PHY_VARS_eNB *phy_vars_eNB, int32_t *output,
short amp,
int subframe,
unsigned char l)
@@ -47,7 +47,7 @@ int lte_dl_mbsfn(PHY_VARS_eNB *phy_vars_eNB, mod_sym_t *output,
unsigned int mprime,mprime_dword,mprime_qpsk_symb,m;
unsigned short k=0,a;
- mod_sym_t qpsk[4];
+ int32_t qpsk[4];
a = (amp*ONE_OVER_SQRT2_Q15)>>15;
((short *)&qpsk[0])[0] = a;
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
index e7b3dd2ed1..9b094393c7 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
@@ -54,14 +54,14 @@ int Wbar_NCP[8][4] = {{1,1,1,1},{1,-1,1,-1},{1,1,1,1},{1,-1,1,-1},{1,1,-1,-1},{-
int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
uint8_t UE_id,
- mod_sym_t *output,
+ int32_t *output,
short amp,
uint8_t Ns,
uint8_t p,
int SS_flag )
{
- mod_sym_t qpsk[4],nqpsk[4],*qpsk_p,*output_p;
+ int32_t qpsk[4],nqpsk[4],*qpsk_p,*output_p;
int16_t a;
int w,lprime,ind,l,ind_dword,ind_qpsk_symb,nPRB;
// LTE_eNB_DLSCH_t *dlsch = phy_vars_eNB->dlsch_eNB[UE_id][0];
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.c b/openair1/PHY/LTE_TRANSPORT/dci.c
index 70761ac5ae..e79f603a49 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci.c
@@ -272,12 +272,12 @@ uint32_t Y;
//#define Mquad (Msymb/4)
static uint32_t bitrev_cc_dci[32] = {1,17,9,25,5,21,13,29,3,19,11,27,7,23,15,31,0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30};
-static mod_sym_t wtemp[2][Msymb];
+static int32_t wtemp[2][Msymb];
-void pdcch_interleaving(LTE_DL_FRAME_PARMS *frame_parms,mod_sym_t **z, mod_sym_t **wbar,uint8_t n_symbols_pdcch,uint8_t mi)
+void pdcch_interleaving(LTE_DL_FRAME_PARMS *frame_parms,int32_t **z, int32_t **wbar,uint8_t n_symbols_pdcch,uint8_t mi)
{
- mod_sym_t *wptr,*wptr2,*zptr;
+ int32_t *wptr,*wptr2,*zptr;
uint32_t Mquad = get_nquad(n_symbols_pdcch,frame_parms,mi);
uint32_t RCC = (Mquad>>5), ND;
uint32_t row,col,Kpi,index;
@@ -2027,7 +2027,7 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci,
uint32_t n_rnti,
int16_t amp,
LTE_DL_FRAME_PARMS *frame_parms,
- mod_sym_t **txdataF,
+ int32_t **txdataF,
uint32_t subframe)
{
@@ -2038,10 +2038,10 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci,
int16_t re_offset;
uint8_t mi = get_mi(frame_parms,subframe);
static uint8_t e[DCI_BITS_MAX];
- static mod_sym_t yseq0[Msymb],yseq1[Msymb],wbar0[Msymb],wbar1[Msymb];
+ static int32_t yseq0[Msymb],yseq1[Msymb],wbar0[Msymb],wbar1[Msymb];
- mod_sym_t *y[2];
- mod_sym_t *wbar[2];
+ int32_t *y[2];
+ int32_t *wbar[2];
int nushiftmod3 = frame_parms->nushift%3;
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index c9d68cd0aa..a163225f03 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -40,8 +40,6 @@
#include "PHY/defs.h"
#include "PHY/extern.h"
#include "SCHED/defs.h"
-#include "MAC_INTERFACE/defs.h"
-#include "MAC_INTERFACE/extern.h"
#ifdef DEBUG_DCI_TOOLS
#include "PHY/vars.h"
#endif
@@ -253,8 +251,8 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t
*/
// printf("rb_alloc[1]=%x,rb_alloc[0]=%x\n",rb_alloc2[1],rb_alloc2[0]);
} else {
- LOG_E(PHY,"resource type 1 not supported for N_RB_DL=100\n");
- mac_xface->macphy_exit("resource type 1 not supported for N_RB_DL=100\n");
+ LOG_E(PHY,"resource type 1 not supported for N_RB_DL=50\n");
+ // mac_xface->macphy_exit("resource type 1 not supported for N_RB_DL=100\n");
/*
subset = rb_alloc&1;
shift = (rb_alloc>>1)&1;
@@ -284,7 +282,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t
}
} else {
LOG_E(PHY,"resource type 1 not supported for N_RB_DL=100\n");
- mac_xface->macphy_exit("resource type 1 not supported for N_RB_DL=100\n");
+ // mac_xface->macphy_exit("resource type 1 not supported for N_RB_DL=100\n");
/*
subset = rb_alloc&1;
shift = (rb_alloc>>1)&1;
@@ -734,11 +732,11 @@ void generate_RIV_tables()
if (nVRB<32)
alloc0 |= (1<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 +4474,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,
@@ -7129,10 +7127,10 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
harq_pid = subframe2harq_pid(frame_parms,
pdcch_alloc2ul_frame(frame_parms,
- phy_vars_eNB->proc[sched_subframe].frame_tx,
- subframe),
+ phy_vars_eNB->proc[sched_subframe].frame_tx,
+ subframe),
pdcch_alloc2ul_subframe(frame_parms,subframe));
-
+
// printf("eNB: sched_subframe %d, subframe %d, frame_tx %d\n",sched_subframe,subframe,phy_vars_eNB->proc[sched_subframe].frame_tx);
switch (frame_parms->N_RB_DL) {
@@ -7600,9 +7598,9 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
break;
}
} else {
- ulsch->harq_processes[harq_pid]->O_RI = 0;//1;
+ ulsch->harq_processes[harq_pid]->O_RI = 0;
ulsch->harq_processes[harq_pid]->Or2 = 0;
- ulsch->harq_processes[harq_pid]->Or1 = 0;//sizeof_HLC_subband_cqi_nopmi_5MHz;
+ ulsch->harq_processes[harq_pid]->Or1 = 0;
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi;
}
diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h
index 3cd608aa14..43bc7e3515 100644
--- a/openair1/PHY/LTE_TRANSPORT/defs.h
+++ b/openair1/PHY/LTE_TRANSPORT/defs.h
@@ -269,8 +269,10 @@ typedef struct {
uint32_t G;
/// Codebook index for this dlsch (0,1,2,3)
uint8_t codebook_index;
- /// Maximum number of HARQ rounds (for definition see 36-212 V8.6 2009-03, p.17)
+ /// Maximum number of HARQ processes (for definition see 36-212 V8.6 2009-03, p.17)
uint8_t Mdlharq;
+ /// Maximum number of HARQ rounds
+ uint8_t Mlimit;
/// MIMO transmission mode indicator for this sub-frame (for definition see 36-212 V8.6 2009-03, p.17)
uint8_t Kmimo;
/// Nsoft parameter related to UE Category
@@ -315,11 +317,9 @@ typedef struct {
/// Scrambled "b"-sequences (for definition see 36-211 V8.6 2009-03, p.14)
uint8_t b_tilde[MAX_NUM_CHANNEL_BITS];
/// Modulated "d"-sequences (for definition see 36-211 V8.6 2009-03, p.14)
- mod_sym_t d[MAX_NUM_RE];
+ int32_t d[MAX_NUM_RE];
/// Transform-coded "z"-sequences (for definition see 36-211 V8.6 2009-03, p.14-15)
- mod_sym_t z[MAX_NUM_RE];
- /// Maximum number of HARQ rounds (for definition see 36-212 V8.6 2009-03, p.17)
- uint8_t Mdlharq;
+ int32_t z[MAX_NUM_RE];
/// "q" sequences for CQI/PMI (for definition see 36-212 V8.6 2009-03, p.27)
uint8_t q[MAX_CQI_PAYLOAD];
/// coded and interleaved CQI bits
@@ -468,8 +468,8 @@ typedef struct {
typedef struct {
/// Pointers to 8 HARQ processes for the ULSCH
LTE_UL_eNB_HARQ_t *harq_processes[8];
- /// Maximum number of HARQ rounds (for definition see 36-212 V8.6 2009-03, p.17)
- uint8_t Mdlharq;
+ /// Maximum number of HARQ rounds
+ uint8_t Mlimit;
/// Maximum number of iterations used in eNB turbo decoder
uint8_t max_turbo_iterations;
/// ACK/NAK Bundling flag
@@ -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 {
@@ -698,7 +702,7 @@ typedef struct {
harq_status_t harq_ack[10];
/// Pointers to up to 8 HARQ processes
LTE_DL_UE_HARQ_t *harq_processes[8];
- /// Maximum number of HARQ rounds (for definition see 36-212 V8.6 2009-03, p.17
+ /// Maximum number of HARQ processes(for definition see 36-212 V8.6 2009-03, p.17
uint8_t Mdlharq;
/// MIMO transmission mode indicator for this sub-frame (for definition see 36-212 V8.6 2009-03, p.17)
uint8_t Kmimo;
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
index bf422fc37a..622ff51531 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
@@ -44,6 +44,7 @@
#include "PHY/CODING/extern.h"
#include "PHY/CODING/lte_interleaver_inline.h"
#include "PHY/LTE_TRANSPORT/defs.h"
+#include "PHY/LTE_TRANSPORT/proto.h"
#include "SCHED/defs.h"
#include "defs.h"
#include "UTIL/LOG/vcd_signal_dumper.h"
@@ -92,11 +93,11 @@ void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch)
#endif
for (r=0; rharq_processes[i]->c[r]);
#endif
-
+
if (dlsch->harq_processes[i]->c[r]) {
free16(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+768);
dlsch->harq_processes[i]->c[r] = NULL;
@@ -105,17 +106,17 @@ void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch)
free16(dlsch->harq_processes[i]->d[r],(96+12+3+(3*6144)));
dlsch->harq_processes[i]->d[r] = NULL;
}
- }
-
- free16(dlsch->harq_processes[i],sizeof(LTE_DL_eNB_HARQ_t));
- dlsch->harq_processes[i] = NULL;
+
+ }
+ free16(dlsch->harq_processes[i],sizeof(LTE_DL_eNB_HARQ_t));
+ dlsch->harq_processes[i] = NULL;
}
}
-
+
free16(dlsch,sizeof(LTE_eNB_DLSCH_t));
dlsch = NULL;
- }
-
+ }
+
}
LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_t Nsoft,unsigned char N_RB_DL, uint8_t abstraction_flag)
@@ -149,6 +150,7 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_
bzero(dlsch,sizeof(LTE_eNB_DLSCH_t));
dlsch->Kmimo = Kmimo;
dlsch->Mdlharq = Mdlharq;
+ dlsch->Mlimit = 4;
dlsch->Nsoft = Nsoft;
for (i=0; i<10; i++)
@@ -205,28 +207,28 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_
for (i=0; iharq_processes[i]->round=0;
- if (abstraction_flag==0) {
- for (j=0; j<96; j++)
- for (r=0; rharq_processes[%d]->d[%d] %p\n",i,r,dlsch->harq_processes[i]->d[r]);
- dlsch->harq_processes[i]->d[r][j] = LTE_NULL;
- }
- }
+ for (j=0; j<96; j++)
+ for (r=0; rharq_processes[%d]->d[%d] %p\n",i,r,dlsch->harq_processes[i]->d[r]);
+ if (dlsch->harq_processes[i]->d[r])
+ dlsch->harq_processes[i]->d[r][j] = LTE_NULL;
+ }
+
}
return(dlsch);
}
}
- LOG_D(PHY, "new_eNB_dlsch exit flag %d, size of %ld\n",
- exit_flag, sizeof(LTE_eNB_DLSCH_t));
+ LOG_D(PHY,"new_eNB_dlsch exit flag %d, size of %ld\n",
+ exit_flag, sizeof(LTE_eNB_DLSCH_t));
free_eNB_dlsch(dlsch);
return(NULL);
}
-void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch, uint8_t abstraction_flag)
+void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch)
{
unsigned char Mdlharq;
@@ -246,12 +248,11 @@ void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch, uint8_t abstraction_flag)
dlsch->harq_processes[i]->status = 0;
dlsch->harq_processes[i]->round = 0;
- if (abstraction_flag==0) {
- for (j=0; j<96; j++)
- for (r=0; r